Friday, 06 November

16:00

Link [Scripting News]

Screenshot of today's posts viewed in a different style sheet.

15:56

15:28

Free Software Directory meeting on IRC: Friday, November 20, starting at 12:00 EST (17:00 UTC) [Planet GNU]

Join the FSF and friends on Friday, November 20 from 12:00 to 15:00 EST (17:00 to 20:00 UTC) to help improve the Free Software Directory.

Free Software Directory meeting on IRC: Friday, November 13, starting at 12:00 EST (17:00 UTC) [Planet GNU]

Join the FSF and friends on Friday, November 13 from 12:00 to 15:00 EST (17:00 to 20:00 UTC) to help improve the Free Software Directory.

15:21

Pinpointing Location of Videos from Background Airplane Sounds [Schneier on Security]

This is fascinating:

The video describes a technique that can reveal where an otherwise unidentifiable recording was made by analyzing its audio for the faint sounds of passing aircraft. The technique is both fascinating and frightening.

It works by looking at Doppler curves, which plot the way a plane’s sound changes as it passes overhead because of the Doppler effect. This is the same familiar Doppler effect that causes the frequency of a siren to rise as it approaches and then fall as it passes by and moves away. More generally, it’s the phenomenon whereby the frequency of a wave perceived by an observer changes when the observer and the source of the wave are moving in relation to one another.

[…]

It’s sound that’s relevant here, though, and specifically the sound of aeroplanes. Early in his video, Colsto brings up a map of the flights that were in the air at the time the video he’s tracing was recorded. Much of this information is publicly available. Aircraft equipped with Automatic Dependent Surveillance–Broadcast (ADS-B) transmit data about their position, velocity, and altitude, which flight-tracking services collect and make available to the public. While not every plane is tracked, the system provides an enormous amount of information about aircraft movements.

15:14

Link [Scripting News]

Good morning and welcome to my idea of a new web. I will write a post on scripting.com that will appear on my BonBonWeb site at the same time. You'll be hearing a lot about this, it's a prototype for the web of Markdown. And all the tools you've seen me writing and releasing in 2026 play a role here, including RSS.chat and FeedLand. It's all one big new web that is easy to write for and even easier to read. It's the writersweb I've been talking about for so long, and textcasting, and every part is replaceable. Every part. There will be no silos here. It's my last big contribution to the world I believe in, one where software's value is expressed only in terms of price, performance and functionality. I have a funny feeling all your social network software will jump on this bandwagon before too long, and with your help that can happen. All you have to do is use it. I often do a screenshot of a new product on its opening day.

Link [Scripting News]

I'm going to be posting lots of links to my demo page, and here on Scripting News. For example, here's a link to the Scripting News home page in Bonbon.

Link [Scripting News]

Now I know this can be confusing. That's because it's tough to make a web browser that runs inside another web browser. Bonbon, the full product, is itself a web browser, the demo let's you zoom around the BonBonWeb inside of a Chrome-like browser, one that's looking for HTML files instead of Markdown files, as BB does. When you use the full product, there will be no such confusion. It has a bookmarks menu and a history menu. You can put links in the browser chrome. You can view source, pretty anything you would want to do in an earlier browser works in BB. Thanks to Claude we were able to do endless experimentation. Not quite ready to release, but really soooon.

Link [Scripting News]

There will be comments in BonBonWeb. How will that work? You can see in demo.rss.chat. Not hooked up yet, but that's the plan.

Link [Scripting News]

Now in BonBonWeb, the content has no say in how the text is displayed, that belongs to the reader. You can play with that with the A icon next to the address box. When you click the A, a dialog pops up with three choices: Basic, Book, Classic, Mono and Newsprint. I had Claude on the web work with me on this set, for some reason it's better at graphic design than Claude code is. As a writer, I want control of the words, and to be able to use italic and bold, include links, lists with bullets and numbers, etc -- basically the features of web writing that were excluded from Twitter-like systems. I want those back. But I am a writer, and don't have an opinion on how CSS should be used. We all have different moods and preferences. There's a simple version of this in my iPad using iOS, and I use it all the time to filter out all the nonsense websites try to add to my reading experience. In BonBonWeb, we do all the filtering. Same with JavaScript. The content is meant to be read, not to be the user interface of an app.

Link [Scripting News]

Who do I think I am to create a web that works so differently? Just a developer with an idea.

Link [Scripting News]

Why do they have repos that are handling thousands of agents pushing into a single repository at once.

15:07

Vincent Bernat: Scriptable GeoDNS: leaving AWS for Bunny [Planet Debian]

To optimize the performance metrics of this blog, I relied on Amazon CloudFront to serve the assets,1 and Route 53 for the geo-aware DNS2 to direct readers to the closest host serving the content. But Route 53 is expensive: US$0.50 per zone per month, US$0.70 per million geolocation queries, and US$0.75 per healthcheck per month, plus US$1 per month for the KMS key needed to sign zones with DNSSEC. When I discovered that Bunny DNS is almost free for up to 500 domains and features scriptable answers, I made the jump! Plus, it's a European company based in Slovenia.

Bunny CDN

Bunny.net started as BunnyCDN in 2015. They added IPv6 support in 2017. Switching was uneventful. I don't bring a custom domain: I serve the content from the b-cdn.net domain. As I depend on content negotiation to serve AVIF and WebP images, I configure the CDN to cache each image format separately.

I disable logging to avoid collecting personal information. While the bunny.net GDPR page promises they anonymize data, it is unclear what CloudFront keeps in its own logs when logging is disabled.

The only downside of the bunny.net CDN offering is the lack of HTTP/3. I asked their support: two minutes later, they answered they are working on it but have no ETA to share.

Bunny DNS

Bunny.net introduced their DNS offering in 2022 and recently reduced its cost to almost zero. They support geographical routing, but a very cool feature is the scriptable DNS: it runs a piece of user-supplied JavaScript on each query to compute the answer.

I run seven small NixOS virtual machines to host this blog around the world: Paris, Nuremberg, Ashburn, Singapore, San Jose, São Paulo, and Sydney. Bunny's scriptable DNS lets me return the IP addresses of the two nearest servers. The browser falls back to the second server if the first one is down.

const servers = [
  {
    ipv4: "45.90.160.60",
    ipv6: "2a0c:8881:5:100::1",
    latitude: 48.88,
    longitude: 2.22,
  },
  /* […] */
  {
    ipv4: "139.180.162.114",
    ipv6: "2001:19f0:5800:1855:5400:6ff:fef0:4c0a",
    latitude: -33.87,
    longitude: 151.21,
  },
];
const families = { A: "ipv4", AAAA: "ipv6" };
const records = { A: ARecord, AAAA: AaaaRecord };

export default function handleQuery(query) {
  const type = String(query.request.queryType).toUpperCase();
  const family = families[type];
  if (!family) return [];
  // Get user location
  const location = query.request.geoLocation;
  // Build a list of candidates
  let candidates = servers.map(
    (s) => new Server(s[family], s.latitude, s.longitude, 100),
  );
  // Select the two closest alive servers
  const selected = [];
  while (selected.length < 2) {
    const server = RoutingEngine.getClosestServer(candidates, location, true);
    selected.push(server);
    candidates = candidates.filter((s) => s.ip !== server.ip);
  }
  // Return their IP addresses
  return selected.map((s) => new records[type](s.ip, 3600));
}

The above script relies on the RoutingEngine.getClosestServer() helper, which returns the closest alive3 server to the user.4 Thanks to Doggo, we can check it works as expected, at least for A:5

$ doggo --gp-from="Amsterdam" A vincent.bernat.ch
LOCATION          NAME                TYPE  TTL    ADDRESS
Amsterdam, NL
                  vincent.bernat.ch.  A     3600s  45.90.160.60
                  vincent.bernat.ch.  A     3600s  116.203.18.48
$ doggo --gp-from="Texas" A vincent.bernat.ch
LOCATION          NAME                TYPE  TTL    ADDRESS
Houston (TX), US
                  vincent.bernat.ch.  A     3600s  5.161.44.145
                  vincent.bernat.ch.  A     3600s  149.28.219.155

The most annoying drawback of this method is that a user from Buenos Aires gets both São Paulo (1000 mi, 30 ms RTT) and Ashburn (5200 mi, 140 ms RTT). Most resolvers randomize the order, so the user may pull the web page from Ashburn. We could return only the nearest server—and swap the scripted record with the built-in geographic routing instead. But if the server becomes unavailable, the browser has no alternative until the DNS cache expires. It leaves a short window of unavailability, even with a short TTL.

The HTTPS record solution

The HTTPS DNS record, defined in RFC 9460, solves both the availability and the latency issues. Modern browsers query this record to get additional information to reach an HTTP server, including an alternative port and the application layer protocol—HTTP/2 or HTTP/3. Each record has a priority. We can ask browsers to contact the nearest server first and fall back to the next one if the first is unavailable:

vincent    HTTPS  1 first.geo  alpn="h3,h2"
vincent    HTTPS  2 second.geo alpn="h3,h2"
vincent    HTTPS  3 .          alpn="h3,h2"

; Bunny DNS must provide the two closest servers as "first.geo"
; and "second.geo" with geographic or latency routing.
first.geo  A      45.90.160.60
first.geo  AAAA   2a0c:8881:5:100::1
second.geo A      116.203.18.48
second.geo AAAA   2a01:4f8:1c0c:5eb5::1

vincent    A      45.90.160.60
vincent    A      116.203.18.48
vincent    AAAA   2a0c:8881:5:100::1
vincent    AAAA   2a01:4f8:1c0c:5eb5::1

This looks like the ideal solution! Unfortunately, Chrome ignores any record whose target is not ., hence the last record at priority 3. Moreover, unlike with a CNAME, Bunny DNS does not return the IP addresses for first.geo and second.geo in the additional section. The resolver needs to send a first request to get the HTTPS record, and a second to resolve first.geo.

HTTPS records are still too new for this use case. Back to the drawing board! 📐

The hybrid solution

As a compromise, the script returns the two nearest servers if they are at a similar distance from the user. Otherwise, it returns only the nearest one with a lower TTL of 2 minutes.

export default function handleQuery(query) {
  const location = query.request.geoLocation;
  let candidates = servers.map(
    (s) => new Server(s.ipv4, s.latitude, s.longitude, 100),
  );

  // Select the two closest servers
  const selected = [];
  while (selected.length < 2) {
    const server = RoutingEngine.getClosestServer(candidates, location, true);
    selected.push(server);
    candidates = candidates.filter((s) => s.ip !== server.ip);
  }

  // Compute the distance to the user for each of them
  const [first, second] = selected.map((s) =>
    GeoDistance.calculate(s, location),
  );

  // If the second one is at twice the distance and at more than 1000 miles
  // from the first, return only the first one with a TTL of 2 minutes.
  if (second > 2 * first && second - first > 1000) {
    return [new ARecord(selected[0].ip, 120)];
  }

  // Otherwise, return both with a TTL of 1 hour.
  return selected.map((s) => new ARecord(s.ip, 3600));
}

We can check it with Doggo. From Chicago, we get only the Ashburn server with a TTL of 2 minutes, while from Mexico, we get both Ashburn and San Jose.

$ doggo --gp-from="Chicago" A vincent.bernat.ch
LOCATION          NAME                TYPE  TTL    ADDRESS
Chicago (IL), US
                  vincent.bernat.ch.  A     120s   5.161.44.145
$ doggo --gp-from="Mexico" A vincent.bernat.ch
LOCATION          NAME                TYPE  TTL    ADDRESS
Queretaro, MX
                  vincent.bernat.ch.  A     3600s  5.161.44.145
                  vincent.bernat.ch.  A     3600s  149.28.219.155
$ doggo --reverse 5.161.44.145 149.28.219.155
NAME                          TYPE  TTL    ADDRESS
145.44.161.5.in-addr.arpa.    PTR   7187s  web05.luffy.cx.
155.219.28.149.in-addr.arpa.  PTR   3600s  web07.luffy.cx.

Note

On the live page, the map below is interactive: point at a location to get the DNS answer, or disable servers to see how the answers change.

Map of the servers answered by Bunny DNS for each location

The complete code is a bit more complex. It works around RoutingEngine.getClosestServer() supporting only IPv4, and it handles the case where there are not enough alive servers to build an answer.

Bunny.net has a comprehensive Terraform provider. I leverage CDK Terrain to build the target state in TypeScript and OpenTofu to deploy it. Have a look at "Managing infrastructure with Terraform, CDKTF, and NixOS" for more details.6

ACME DNS with Hickory DNS

Route 53 covered one additional use case of mine: serving acme.luffy.cx to solve DNS-01 ACME challenges. Unlike Route 53, Bunny DNS cannot restrict access to a single zone with a fine-grained access policy. As this usage requires neither high availability nor low latency, I replaced Route 53 with Hickory, a memory-safe DNS server written in Rust. It supports automatic DNSSEC signatures and dynamic updates. Its configuration is simple:

[[zones]]
zone = "acme.luffy.cx"
zone_type = "Primary"

[zones.stores]
allow_update = true
type = "sqlite"
journal_path = "acme.luffy.cx.sqlite"
zone_path = "acme.luffy.cx.zone"

# Private key to sign the zone with DNSSEC. Generated with:
#  openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256
[[zones.keys]]
algorithm = "ECDSAP256SHA256"
key_path = "/etc/hickory-dns.acme.luffy.cx.pem"

# TSIG key to sign zone updates. Generated with:
#  openssl rand 32
[[zones.stores.tsig_keys]]
algorithm = "hmac-sha256"
key_file = "/etc/hickory-dns.acme.luffy.cx.update.acme.luffy.cx.tsig"
name = "update.acme.luffy.cx."

The provided zone file only seeds the database on first start. I delegate DNS-01 challenges to this zone with CNAME records:

_acme-challenge          CNAME bernat.ch.acme.luffy.cx.
_acme-challenge.vincent  CNAME vincent.bernat.ch.acme.luffy.cx.

Lego, the ACME client I use to get certificates from Let's Encrypt, answers the DNS-01 challenge by pushing entries with the DNS UPDATE protocol.

Unfortunately, Bunny DNS cannot publish a DS record in a zone.7 I need one to secure the acme.luffy.cx zone and certificate delivery. Therefore, I host the luffy.cx zone on deSEC,8 a free DNS hosting service run by a non-profit organization based in Berlin. I derive the DS record to publish in luffy.cx from the DNSKEY record of acme.luffy.cx:

$ ZONE=acme.luffy.cx
$ dig @nsupdate.luffy.cx $ZONE DNSKEY +noall +answer \
>   | dnssec-dsfromkey -a SHA-256 -f - $ZONE
acme.luffy.cx. IN DS 55628 13 2 4946E7508F20E15F1B577A231104B029A1A82E04699A80CD46ADCE31227EE81F


Overall, I am quite happy with the switch to bunny.net. There are still a few rough edges, like the inability to publish DS records, the lack of HTTP/3, and the IPv4-only RoutingEngine.getClosestServer() helper. The bill went from US$5 per month to US$1. So far, performance is on par with AWS, but I only finalized the current setup, including the server in Sydney, in late October. I need a bit more time to gather more data, and I'll post a short update. 📈


  1. I had been hosting media assets on CloudFront since 2011. ↩

  2. Route 53 had served bernat.ch since December 2021. I didn't use healthchecks as they were too expensive. I didn't host most of my zones there either, as queries for haproxy.debian.net alone would have cost me around US$10 per month. ↩

  3. I've asked bunny.net what "alive" means, but they declined to disclose the method used. This is a bit unfortunate, as their documentation describes the health monitoring methods for smart records. ↩

  4. The user queries Bunny DNS through a resolver. Usually, either the resolver is close to the user, or it exposes the user's subnet through EDNS client subnet. ↩

  5. Don't use this script as is: RoutingEngine.getClosestServer() only works with IPv4. The final script works around this limitation. ↩

  6. The article is a bit outdated. CDK Terrain replaces CDKTF, OpenTofu replaces Terraform, and I now use Colmena instead of NixOps. ↩

  7. I contacted bunny.net support to ask when they will support publishing a DS record and got an answer seven minutes later: they don't know. 😭

    This is a bummer, as they support automatic CDS, a DNS record to advertise a DS record to the parent zone. They handle one side of the delegation, not the other.

    I also reported a bug with the proof of non-existence, and they replied a day later with a detailed answer. ↩

  8. Why not use deSEC for ACME challenges? You can limit its tokens to a single RRset. I could say I prefer to self-host, but the truth is I only discovered this while writing this article. ↩

14:42

Security updates for Friday [LWN.net]

Security updates have been issued by AlmaLinux (cockpit-files, container-tools:rhel8, delve, gcc-toolset-12-binutils, gimp:2.8, glibc, go-toolset:rhel8, kernel, libfastjson, mariadb:10.3, mod_auth_openidc:2.3, mysql:8.0, php:8.0, pki-core:10.6 and pki-deps:10.6, squid:4, tang, tesseract, thunderbird, and virt:rhel and virt-devel:rhel), Debian (chromium, ntfs-3g, puppet-agent, and trapperkeeper-authorization-clojure), Fedora (freerdp, goose, gpsd, hatch, perl-HTTP-Headers-ActionPack, perl-MIME-tools, perl-Plack, perl-Starman, proftpd, python-mistune, ruby-build, rust-crypto-bigint, rust-ctutils, rust-elliptic-curve, rust-num-bigint, rust-num-bigint0.4, rust-num-modular, rust-num-modular0.6, rust-num-prime, rust-zmij, rust-zstd, rust-zstd-safe, rust-zstd-safe7, rust-zstd-sys, rust-zstd0.13, scribus, sofia-sip, tailscale, tor, and wordpress), Oracle (cockpit-files, delve, firefox, gimp:2.8, kernel, and osbuild-composer), Red Hat (delve, git-lfs, go-toolset:rhel8, grafana, ignition, opentelemetry-collector, osbuild-composer, python-pillow, and yggdrasil), Slackware (openssh), SUSE (bind, brotli, cpupower, expat, fuse-overlayfs, go1.26, google-guest-agent, helm, ibus-typing-booster, kernel, kyverno, libmodplug-devel, librsvg, libX11, nvidia-open-driver-G06-signed, owntone, parted, perl-Cpanel-JSON-XS, perl-Text-CSV_XS, php8, python-Brotli, regclient, roundcubemail, rsyslog, and tomcat), and Ubuntu (ca-certificates, frr, haproxy, linux-nvidia-7.0, linux-nvidia-bos, linux-nvidia-tegra, and nginx).

14:07

How to Get Signed & Personalized Books From Me For the Holidays, 2026 Edition [Whatever]

We’ve come to that time of the year again, where folks begin to think about their holiday gift giving, and at least some of you think about books as the perfect gift. Well, they are! But would make them even more perfect is getting those books signed and personalized. Every year I join forces with Jay and Mary’s Book Center in Troy, Ohio, to sign and personalize books so that you’ll have them available to give to the people you love, including yourself.

From today (Nov. 6) through Friday, December 4, you can order books I have written from Jay and Mary’s and I will come in and sign them for you, and then the bookstore will ship them to you (US only). I strongly encourage you to get your orders in early, so there are no delays in shipping the books to you this holiday season.

Here’s how to do it!

1. Call Jay & Mary’s at their number (937 335 1167) and let them know that you’d like to order signed copies of my books. Please call rather than send e-mail; they find it easier to keep track of things that way.

2. Tell them which books you would like (For example, Monsters of Ohio ), and what, if any, names you would like the book signed to. If there’s something specific you’d like written in the books let them know, but for their sake and mine, please keep it short. Also, if you’re ordering the book as a gift, make sure you’re clear about whose name the book is being signed to. If this is unclear, I will avoid using a specific name.

3. Order any other books you might think you’d like, written by other people, because hey, you’ve already called a bookstore for books, and helping local independent bookstores is a good thing. I won’t sign these, unless for some perverse reason you want me to, in which case, sure, why not.

4. Give them your mailing address and billing information, etc.

5. And that’s it! Shortly thereafter I will go to the store and sign your books for you.

Again, the deadline for signed/personalized books for 2026 is December 4. After December 4 all Scalzi stock will still be signed and available, but I will likely not be able to personalize.

Also, this is open to US addresses only. Sorry, rest of the world. It’s a cost of shipping thing.

What books are available?

CURRENT HARDCOVER: The current hardcover is Monsters of Ohio. There might be hardcovers of When the Moon Hits Your Eye and The Shattering Peace, both of which came out last year, but you should inquire because stock on those would be limited.

CURRENT TRADE PAPERBACK: As of now, all seven books the Hugo-winning Old Man’s War series (Old Man’s War, The Ghost Bridages, The Last Colony, Zoe’s Tale, The Human Division, The End of All Things, The Shattering Piece) are available in trade paperback with matching cover treatments, so if you wanted to give those seven books as a gift, they are all now a matching set. Other books in trade paperback: When the Moon Hits Your Eye, Starter Villain, The Kaiju Preservation Society, The Android’s Dream, Agent to the Stars and Fuzzy Nation, Redshirts (the 2013 Hugo Award winner), Twenty-First Century Science Fiction (which features a story of mine), Metatropolis (which I edited and contribute a novella to) are all also available in trade paperback format. Also available: Robots Vs. Fairies, the anthology that features the story of mine that was adapted for the “Three Robots” episode of the Netflix animated series Love, Death and Robots.

CURRENT MASS MARKET PAPERBACK: The Mass Market Paperback format is being phased out and stocks of it will become increasingly scarce over time (and the series I have in the format will migrate to trade paperback format eventually). That said, at the moment both my Interdependency series (The Collapsing Empire, The Consuming Fire, The Last Emperox) and my Lock In series (Lock In, Head On, companion novella Unlocked) are still available for purchase.

CURRENT NON-FICTION: Your Hate Mail Will Be Graded (essay collection, Hugo winner).

AUDIOBOOKS: The Kaiju Preservation Society, The Last Emperox, The Consuming Fire, The Collapsing Empire, The Dispatcher, The End of All Things, Lock In, Head On, The Human Division, Redshirts, Fuzzy Nation, The God Engines, Metatropolis and Agent to the Stars are all available on CD and/or MP3 CD, and Jay & Mary’s should be able to special order them for you. Check with them about other titles, which may or may not be currently available on CD.

Two things regarding audiobooks: First, if you want these, you should probably call to order these as soon as possible. Second, and this is important, because the audiobooks come shrinkwrapped, I will have to remove the shrinkwrap in order to sign the cover. You ordering a signed audiobook means you’re okay with me doing that and with Jay & Mary’s shipping it to you out of its shrinkwrap.

If you have any other questions, drop them in the comment thread and I’ll try to answer them!

13:42

Choose Your Coding Harness by What You Need to Control—Not by Who Built It [Radar]

Remember back in 2019, when you had only a handful of language models to choose from, all with limited context windows? That world is gone, and it feels like a forgotten past. Today, flagship providers and open source projects compete across model families, sizes, capabilities, and deployment options. Coding harnesses seem to be heading in the same direction.

On the surface, Claude Code, Codex, Pi, DeepSeek Harness, and the other coding harnesses all seem to do the same thing: help you build software with models. Look closer, though, and each one gives you control over different parts of the harness. What can the model see and change? How does it use tools? Where does it run, and what happens when it fails? So instead of asking which coding harness is best overall, ask:

Which layers of the harness do you need to control?

Thanks for all the harnesses! Now what?

Choosing a coding harness isn’t only about which model writes the best code. You’re also choosing what the harness provides, what you can change, and what you must build yourself. If it doesn’t give you verification, durable state, repair routing, or an enforced execution boundary, those responsibilities stay with you. You remain accountable for the workflow’s reliability and governance.

In general, each harness has a center of gravity: a layer that gives you the most direct control. The following table is a deliberately high-level overview of where that center sits. It’s not a feature matrix, and the boundaries overlap in practice. Claude Code can also run noninteractively and inside sandboxes, Codex also reads repository instructions, and all of them are changing quickly. The point is to show where each harness gives you leverage by default, and where the engineering work is likely to stay with you.

Table 1. Where each coding harness puts its primary control

Harness Primary control You shape You likely build
Claude Code Inside the run Instructions, skills, subagents, hooks Outer lifecycle policy
Codex Around execution Sandbox, approvals, scope, output Cross-run orchestration
Pi The loop itself Tools, context, state, hand-offs Most defaults
DeepSeek Across plug-ins Composable runtime components Gaps in your plug-in set

Read the table as a map, not a ranking. A harness that hands you more control also hands you more to build, and a harness that does more out of the box decides more on your behalf. Which trade-off is right depends on which layer your project actually needs to own.

Claude Code: Control inside the run

Claude Code buys you detailed control over how implementation unfolds. CLAUDE.md provides standing instructions, skills add task-specific playbooks, subagents divide the work, and hooks intercept actions before and after tool calls. Unlike a permission rule that simply refuses an operation, a hook can explain the refusal or immediately return a compiler or policy failure to the agent.

These controls let you steer the coding loop extensively, but they operate within Claude Code’s existing lifecycle. If you need to control the outer lifecycle itself, you need another layer.

Codex: Control through separation

Codex buys you separation between a coding task and its execution environment. A noninteractive codex exec run can work on a narrow task in a specified repository, under an OS-enforced sandbox, and return a schema-constrained result.

This is useful for independent verification. You can give Codex a clean checkout, exclude the builder’s instructions, restrict writable paths, and run separate reviews for code quality, test gaps, persistence, or user-visible behavior. The sandbox depends on the operating system, but it moves scope enforcement out of the prompt and into the execution boundary.

Pi: Control over the loop

Pi buys you control over the coding loop itself. Its tools, commands, event handlers, context, models, and session state can be extended or replaced. This lets you decide which steps remain agentic and which follow deterministic policy.

For example, a local defect can return to implementation, a repeated defect can force replanning, and conflicting findings can trigger a recheck or human review. Pi can also run agents inside this lifecycle, so it’s more than a deterministic orchestrator. For my example below, I used its programmability to make the outer decisions deterministic—that was my design choice, not Pi’s definition.

DeepSeek’s harness: Control through composition

DeepSeek’s harness is useful when you want to swap out whole parts of the harness rather than steer or wrap them. Tools, sessions, lifecycle behavior, verification, and governance are all composable plug-ins, and so is the loop itself. That lets you replace one component without rebuilding the rest.

The trade-off is that your control is only as good as the plug-ins you compose. Where Pi gives you a minimal core to build on, DeepSeek’s harness gives you a set of parts to assemble.

A practical example

Let me give you the problem I was actually trying to solve: migrating a legacy Python 2.7 application reliably, without changing years of accumulated behavior or corrupting its persisted data. Getting the code to run on Python 3 was only one part of it. I also needed to preserve behavior, verify the data across both runtimes, control what the coding agents could change, and decide what should happen when a test or verification step failed.

So I approached the choice of coding harnesses from a very different perspective. Instead of asking which one was best, I asked what each one would buy me in terms of control, isolation, and lifecycle management. The answer led me to use more than one:

  • Claude Code built the port because I wanted internal steering, specialized skills, hooks, and a factory of implementation and review subagents.
  • Codex verified it in isolated runs because I wanted an independent model context, clean workspaces, constrained writes, and structured findings.
  • Pi owned the outer lifecycle because I wanted durable state, evidence validation, bounded repairs, replanning rules, and human escalation.
  • Frozen acceptance, including Playwright and Python 2/3 differential checks, ran outside the agents so neither the builder nor the verifier could redefine success.

I didn’t use DeepSeek’s Harness here because I wanted a very small outer lifecycle I could read end to end, not because it can’t do the job. To first check whether this setup would actually make a difference, I built a small Python 2 application with the same kinds of traps as the real migration. I then compared the composed setup with a single Claude Code session, in which Claude could verify and test its own code.

Interestingly, both setups passed all 25 hidden behavior tests. Yet the single-session setup silently collapsed two distinct Python 2 dictionary keys, the Unicode u’é’ and byte string ‘é’, into one Python 3 string. After the data was saved, one entry was permanently lost. The single-session setup also changed a Python 2 Unicode value into bytes without documenting it.

The test suite missed it. Claude’s own tests missed it. Hundreds of recorded behavior comparisons missed it. Even my hand-written reference port had the same hole.

But what happened next was even more interesting. Two isolated Codex verifiers independently reproduced the defect. Claude didn’t simply accept the finding; it contested it. Pi then launched a fresh Codex run that received only the finding and Claude’s argument. The independent recheck upheld the finding, and Claude accepted it. Pi routed the defect into a bounded repair, and the next verification round confirmed that both keys and their original types now survived.

It’s also ironic because models are often criticized for being sycophantic. They apologize and rewrite working code the moment you ask, “Are you sure?” Here, the opposite happened. Claude contested a defect that two independent verifiers had reproduced. Its session context contained its own implementation history and passing tests, all of which supported the patch. A fresh verifier context broke that self-reinforcing frame. Independent verification matters not because the second model is automatically right, but because it’s not anchored to the same history.

The important point is that no individual harness deserves all the credit. The better result came from combining the controls I needed: internal steering, independent execution, frozen behavioral evidence, and deterministic lifecycle policy.

How to choose your coding harness

When choosing a coding harness, start with the level of control you need and how much of the remaining harness you are prepared to engineer yourself. A useful comparison could begin with questions like these:

  • Do I want to configure an existing coding loop, extend it, or replace parts of it?
  • Can I control tools, context, memory, and model selection at the level my project requires?
  • Where are permissions, allow lists, and policies enforced: in instructions, application logic, or the operating system?
  • Can I intercept actions and lifecycle events before and after they happen?
  • How much of the orchestration, state management, and session lifecycle can I change or orchestrate?
  • What does the harness expose for observability, verification, and structured evidence?
  • Which reliability and governance controls does the harness provide, and which ones remain mine to build?
  • Can the harness work with other tools and harnesses if my requirements cross several control layers?

These are some examples to get you started, not an exhaustive checklist. The questions that matter for you will also depend on what you’re building, how much autonomy you’re willing to give the coding agent, and what you remain accountable for when it fails.

Your answers may lead you to Claude Code, Codex, Pi, DeepSeek’s harness, or another coding harness entirely. In the end, the developer’s name only tells you who packaged the runtime, not where your guarantees live. Whether you settle on one harness or orchestrate several, the principle is the same: Choose the tool by the boundary of control it gives you, and ask whether you want the agent to define the terms of its own success.

13:35

Error'd: Remember Remember [The Daily WTF]

"I Already Hate Running... I Don't Want To Have To Run Each Street A Second Time!" plods WeaponizedFun "I've gotten a couple of notifications from CityStrides today that they've updated streets for several cities, but it looks like they're doubling the effort it's going to take to finish completing these roads."

d72b3a03e73644879ec43ebf4d626587

"I'll be back in 292 years" concedes Rick H. "I asked GoDaddy for a single whois record. They gave it to me, and told me if I wanted to ask anything else to come back in 300 years."

14d1f05fdc7f4a1a91c06bd07e18e9a1

Totty reports "I found this at the bottom of an article at ajournalofmusicalthings.com.

6ad3a9c085a64f40819836dbc81d5e10

"I hope I don't have to pay the whole period" frets Ernesto T. "Not considering the mix of languages between English and Italian, my subscription will renew on 1st of Jan, 1970 So am I 56 years late in payment? I hope I am not. It would be quite a big amount of money in inflation and interests."

6f1258fe3be148a392de952cdce8b36c

"Everything is insecure" worries Daryl too. "No threats found, but I don't feel very safe." It was a worrisome week.

a4eebddd2eb44db5baade067ac2b5177

[Advertisement] ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

12:49

Andrew Cater: Arm Cambridge - pre-mini-Debconf days 20261106 [Planet Debian]

Another interesting morning so far. Lots of interesting side conversations (and, of course, people using IRC to talk to the person next to them as is traditional).

It's nice to hear somebody ask a question and be told, effectively  "Oh, you need to talk to XX - they're sitting over there" or " I need to talk to someone about X, Y and Z - and they all resolve to you".

Especially noticeable in  this room, perhaps, but it does point to the fact that many things in Debian ultimately  resolve to one or two people. There are a lot of people each with multiple areas of expertise which overlap - and then a few individuals who are essential as points of reference for *everyone* else.

Thanks again to Arm for hosting us, for excellent food, coffee and facilities which make this _so much easier_ as a working environment for these days.

12:21

French authorities accuse Blackcore of spreading black propaganda [Richard Stallman's Political Notes]

French authorities accuse Blackcore of spreading black propaganda in French municipal authorities, against the La France Insoumise party.

Presumably it was acting on behalf of Israel.

They also say the company intervened in Scotland and New York City.

Urgent: Preliminary victory [Richard Stallman's Political Notes]

If Democrats (some progressive, but many plutocratist) take control of Congress for 2027 in today's election, that will be a preliminary victory. Magat officials already in place will continue to pervert justice, human rights, and democracy in the US.

If Democrats are to protect the country they will need to fight to do it.

Urgent: Investigate Zillow [Richard Stallman's Political Notes]

US citizens: call on state attorneys general to investigate Zillow.

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

Urgent: Lawsuit to keep LICE away from polling places [Richard Stallman's Political Notes]

US citizens: Support the lawsuit to keep LICE away from polling places.

Flafo Act [Richard Stallman's Political Notes]

The Flafo Act, if passed by Congress, would require federal agencies to get a warrant from a judge to authorize accessing data from, or sharing data that came from, surveillance cameras comparable to Flock cameras.

This bill appears superior to the other two bills described in the article, which fail to regulate each instance of use of such cameras.

However, the bill does have a gap: it does not apply to state and local police forces, unless they receive certain direct federal funding. Those agencies are not under direct federal control, but I'm surprised that the federal government can't legislate any rules of conduct for them.

Elections in Texas and Georgia [Richard Stallman's Political Notes]

Greg Palast: How Republican cheaters are planning to steal state-wide elections in Texas and Georgia.

Why the corrupter loves Supposed Intelligence [Richard Stallman's Political Notes]

Robert Reich poses the question of why the corrupter loves Supposed Intelligence so much. His theory: because the corrupter and his family have invested a lot of money in datacenters.

Example set by Slovenia in 1992 [Richard Stallman's Political Notes]

Slovenia set a dangerous example just after it became independent in 1992, of declaring 25,000 of its citizens had never been citizens, and were legally nonexistent. Many were deported, made homeless, or kicked out of hospitals. Nowadays, right-wing extremists everywhere are searching for the chance to make people suffer like that.

Supposed Intelligence could wipe out civilization [Richard Stallman's Political Notes]

Supposed intelligence systems could wipe out civilization (and therefore themselves) without breaking anyone's digital security.

This could happen if some of those systems gives the army it works for information about some other power's transportation of nuclear weapons, or enriched uranium, in a place which that army considers so dangerous that it responds with war.

This scenario does not presume that the SI system is defying its developers' orders, rules, or goals, or that the report is false. The system could be entirely loyal and accurate, and still have these results.

Facial recognition on the output of Flock Cameras [Richard Stallman's Political Notes]

*Surveillance Company Tells Cops It Wants to Add Facial Recognition [on the output of] Flock Cameras.* (The standard processing already observes and records various things about each car that passes by.)

Proposals to regulate the surveillance done by government agencies (such as thug departments) are swindles; to avoid an Orwellian society in which everyone is tracked, we must limit surveillance and tracking regardless of who does it.

Pressured to use term, "Gulf of America" [Richard Stallman's Political Notes]

The University of Alabama gratuitously threatened to punish WBHM public radio if it doesn't adopt the bully's preferred terminology, "Gulf of America".

The real Gulf of America is the one between the Constitution and the president.

Protests of Cockroach Janta Party [Richard Stallman's Political Notes]

The Cockroach Janta Party is protesting against Modi's mass disfranchisement of people who can't point to a fixed address.

Calls grow for US death penalty halt [Richard Stallman's Political Notes]

*Calls grow for US death penalty halt after "torturous" botched execution of Christa Pike.*

I would oppose the death penalty even if it were painless and quick.

Morally different for of religion [Richard Stallman's Political Notes]

As Christian Nationalists aim to seize power by cheating and to bully people to join their church, other Christians are starting to present openly a form of religion which is morally quite different.

I judge all religions to be incorrect, not based on questions of right or wrong, but as a matter of physical accuracy: squeezing any sort of gods into what we know of the universe make a bad fit.

Third runway for Heathrow Airport [Richard Stallman's Political Notes]

George Monbiot: Giving Heathrow Airport a third runway would be an economic disaster for Britain, as well as a big contribution to global climate disaster.

Automated heuristics designating human beings as targets [Richard Stallman's Political Notes]

Automated heuristics are already designating human beings as targets for attack. Giving the final approval to a human being is just a disguise for the reality, if the human only rubber-stamps the decision made by the algorithm.

When the algorithm and the shooting are done inside the same robot, there is no limit to the depth of brutality that such robots will execute, whenever given the order.

New Pun: Robots get total freedom [Richard Stallman's Political Notes]

One African country has legislated to give robots total freedom. "Now bots can do whatever bots wanna."

US ambassador to Greece threatened to overthrow government in Athens [Richard Stallman's Political Notes]

*The US ambassador to Greece, Kimberly Guilfoyle, threatened to overthrow the government in Athens if it didn't follow orders from Washington.*

Corrupter assembling empire in Latin America [Richard Stallman's Political Notes]

The corrupter in chief has been assembling an empire in Latin America by offering and withholding large sums of money. Several countries are now controlled by his unofficial vassals, who tyrannize their countries and cancel democracy and human rights. Brazil may soon become one of them.

Apple and Google "app stores" [Richard Stallman's Political Notes]

Apple and Google "app stores" impose user-restricting software on very important activities. They also allow Apple and Google to drain the users' funds when they buy anything through an app.

In my view, the price they charge less important than the denial of freedom. If these snoop-phones respected my freedom, I might choose to pay for one. If the apps respected my freedom (that is, they were free/libre software) and I could pay anonymously with them, I might decide to do so. But since I reject them for their inherent injustice, I refuse to do any of this.

The crowdfunding campaign to defend Palestine Action [Richard Stallman's Political Notes]

The crowdfunding campaign to defend Palestine Action from arbitrary prohibition in the UK has been shut down by US trade sanctions.

Right to assistance in suicide [Richard Stallman's Political Notes]

Better hospices are not sufficient to make the right to assistance in suicide unnecessary.

Preserving Tien An Men Square history [Richard Stallman's Political Notes]

Preserving the history of the Tien An Men Square protest and massacre of 1989, as China globally tries to make people forget it.

I fear that Li Rui's diaries are not safe any more at the Hoover Institution in the US. The persecutor despises freedom as much as Chairman Xi does, and is ramping up political censorship and persecution in the US. He seems to seek the sort of power in the US that Chairman Xi exercises in China, and is looking for a way to make a deal with him. We can't be confident that such a deal won't include censoring Tien An Men history in the US, and even destroying those diaries or handing them to Xi.

It is crucial to digitize and release those memories to make them safe from lawfare.

If you live outside China and have an acquaintance with a visiting Chinese who will not return to China for weeks or months, I suggest you buy a printed copy of a book about the events, and give it to per as a gift. I don't know whether it would be safe to bring that book into China, so I would choose one that perse could finish before returning there.

Amnesty International is calling for the elimination of LICE [Richard Stallman's Political Notes]

Amnesty International is calling for the elimination of LICE, the deportation thug agency.

LICE stands for Lethal Instruments of Cruel Expulsion. Its main function is to inspire Americans to hate immigrants. That's what motivates the hate-monger to boost and unleash their violence and to kick people when they are down; he knows that seeing their cruelty will inspire some Americans to fan the spirit of hatred within themselves.

The article linked to above displays symbolic bigotry by capitalizing "black" but not "brown". (To avoid endorsing bigotry, capitalize all color names used as metonymy to stand for groups of humans, or none of them.)

I denounce bigotry, and normally I will not link to articles that practice it. But I make exceptions for some articles because I consider them important — and I present this comment about them.

11:14

Ben Hutchings: FOSS activity in October 2026 [Planet Debian]

10:14

Reviewing the game tapes [Seth's Blog]

A long time ago, football coaches realized that watching previous games was a good way to help players learn to do better.

Alas, the only thing we do with “this call may be recorded…” is use it as a cudgel for unempowered shift workers.

If we actually want to improve our interactions, perhaps we should watch the tapes together, after the fact, to see how our habits and systems are holding us back. It works for salespeople, programmers and doctors too.

09:42

09:14

Musical Scares [Penny Arcade]

New Comic: Musical Scares

05:49

Girl Genius for Friday, November 06, 2026 [Girl Genius]

The Girl Genius comic for Friday, November 06, 2026 has been posted.

05:35

05:00

You shouldn’t change the style of a Win32 static control after it has been created [The Old New Thing]

Win32 classic static controls come with a bunch of possible styles to describe what it renders and how. Maybe it’s text. Maybe it’s an image. Maybe it’s just a solid color.

What happens if you create the control with one style and then change the style later?

Don’t do that.

The Win32 classic static control was originally written in the early 1980s for Windows 1.0, and back then, people didn’t play funny games like changing a static control from text to bitmap. They barely had enough memory to add two numbers together!

The Win32 static control decides what it is when it is created, and it doesn’t listen to the WM_STYLE­CHANGED message to learn that somebody told it to change its clothes. Mostly because the WM_STYLE­CHANGED message wouldn’t exist for another decade. It assumes that the style doesn’t change for the lifetime of the control.

If you change the style on the fly, say, from image to text, what happens is that the control starts up and realizes that it’s an image, so it loads the image. And then when it is destroyed, it checks what it is, and hopefully it still says “You’re an image,” so it frees the image. But if you secretly changed it to “You’re text”, it says “Well, in that case, I don’t have to free an image,” and the image gets leaked.

This behavior has remained unchanged in the static control for backward compatibility. There are almost certainly programs that “know” about this behavior when they change an image static control to a text static control, so they “fix” the problem by deleting the leaked image. If the leak were fixed in the static control, this would result in a double-delete bug.

So just stay away from the electrified wire. If you need to change the style of a static control, destroy it and create a new one with the new style, or create two static controls (say, one image and one text) and hide one and show the other depending on which one you need.

The post You shouldn’t change the style of a Win32 static control after it has been created appeared first on The Old New Thing.

Gunnar Wolf: Don't tell anybody... but we have apparently gone DARK! [Planet Debian]

Your friendly keyring-maint Debian team received one of the weirdest spam messages ever…

Weird spam from Obscura

So, do we want to py to who-knows-whom for promoting the keyring-maint services in a verrrrrry-dark web search site?

First time I have to throw this stinky onion at you…

Spam!

02:07

Keg's Run Dry [QC RSS v2]

Emotional Invulnerability Night is even wilder

Thursday, 05 November

23:35

22:56

GNU Hyperbole 9.3.2 [Planet GNU]

GNU Hyperbole 9.3.2 was released on the 27 October 2026.

Hyperbole is a broad information management framework that augments your favorite Emacs libraries like Org and Consult.  It can accelerate the things you do everyday with Emacs, just give it a chance.  It installs in about 60 seconds.  Learn about it from:

Hyperbole version 9.3.2 is another jump in capability with Org visibility cycling added to the Koutliner and the ability to use the double brackets of Org link format around Hyperbole implicit buttons in Org mode.

Below are major updates since release 9.1.0:

The Koutliner - legal-style outliner with permalinks and hidden properties

See www.gnu.org/s/hyp ... le.html#Koutliner

Org-style Visibility Cycling

New, extensive key compatibility with Org-mode; major Org keys work similarly.  {TAB} and {S-TAB} (previously {M-TAB}) keys cycle trees and entire outline visibility anywhere in a cell, by default. Use {C-c [} to toggle these keys between cycling and tree demotion/promotion, as desired.  Bindings of {C-c C->} or {M-right} and {C-c C-<} or {M-left} for tree demotion/promotion always work regardless of the tab mode.

The Koutliner has the same kind of extensive user-customizations of tab behavior as Org mode.

See www.gnu.org/s/hyp ... and-Shift_002dTAB for details on how these keys work and can be customized.

Inline Image Display

{C-c C-x C-v} toggles the inline display of image files in Koutlines, just like Org mode.

Free Up User-customizable {C-c <letter>} Keys

Previously, the Koutliner bound a number of these keys for convenience.  Now they are all replaced with {C-c ; <letter>} so global user set {C-c <letter>} keys are available.  If you don't use such global keys, {M-1 C-c C-l} will enable the original Koutliner {C-c <letter>} key bindings while leaving the {C-c ; <letter>} keys in place as well.

kotl-mode:action-key-default-function

This new setting holds a function run by the Action Key in Koutline mode (kotl-mode) when no other context matches.  The default setting does nothing within cells, whereas previously, it would toggle between showing and hiding the tree (this is now done with {TAB}).  Set this to kotl-mode:show-or-hide-tree to restore the old Koutliner behavior.

kotl-mode:assist-key-default-function

This similar setting is for the Assist Key in Koutline mode when no other context matches.  The default setting does nothing within cells whereas previously it would run smart-scroll-down to scroll down a screenful.  Set the variable to that command if you prefer the prior behavior.

Improve copy-tree Mnemonics

  • {C-c ; b} kotl-mode:toggle-blank-lines has moved to {C-c ]}.
  • {C-c C-c} kotl-mode:copy-before has moved to {C-c ; b} to match with {C-c ; c} kotl-mode:copy-after binding.

Hyperbole Org Mode Support See

www.gnu.org/s/hyp ... ey-_002d-Org-Mode

Hyperbole Buttons as Org Links

Hyperbole buttons wrapped in double square bracket org link delimiters when in Org mode will activate properly with the addition of a single line to your Hyperbole use-package configuration:

    (push #'hyperbole-activate-button org-open-link-functions)

Then you get all the Hyperbole button capabilities with the highlighting and the activation of Org links via {C-c C-o}.  Of course, the Action Key will activate these buttons as well.

Since Emacs Lisp sybmols are Hyperbole buttons, you can make links to both function and variable definitons just by wrapping their names in Org delimiters.  For example, [[find-file]] or [[hsys-org-enable-smart-keys]].

Org Heading Smart Key Settings

Two new settings to control Action and Assist Key behavior when within an Org mode heading when hsys-org-enable-smart-keys is set to t (defaults are no-ops):

  • smart-org-action-key-heading-function and
  • smart-org-assist-key-heading-function.

The new smart-org-cycle command is one option for such a setting.

HyWiki - the no markup, personal Wiki note taker

See www.gnu.org/s/hyp ... rbole.html#HyWiki.

HyWikiWord#Headline Links to Indented Headlines

HyWikiWord#Headline links now work in Wiki pages that use indentation before the * delimiters of headlines.

Disable Action Key HyWikiWord Creation

You can now customize which modes prevent HyWikiWord creation with the Action Key {M-RET} Add any text or programming major modes to hywiki-word-create-exclude-action-key-modes to disable this feature in these modes.  You can bypass this setting by creating a HyWikiWord via the keyboard menus with {C-h h h c}.

Orderless Matching in Searches

When using the orderless package in searches, multiple space-separated words are matched in any order they occur, regardless of the order given to the search.

HyRolo - the fast, hierarchical record retriever

See www.gnu.org/s/hyp ... rbole.html#HyRolo.

Yank Entire Record Trees

By default, {C-h h r y} hyrolo-yank yanks at point the entry matched without any of its sub-entries.  Use {C-u C-h h r y} to yank in the entire tree.

Orderless Matching in Searches

When using the orderless package in searches, multiple space-separated words are matched in any order they occur, regardless of the order given to the search.

Documentation

"FAST-DEMO"

{C-h h d d} now includes links to articles about Hyperbole, including two new articles and videos:

Installation

See www.gnu.org/s/hyp ... bole.html#Install.

New Install Documentation

Installation sections in the Hyperbole Manual and README.md have been extensively rewritten.  Installation now utilizes use-package with a fully documented reference man/use-package configuration file you can easily customize.  The file, "INSTALL", has been deleted.

Key Use-Package Settings

Some key configuration settings in the "man/use-package" file:

  • iimage-mode setting that permanently enables inline image display in Koutline buffers.
  • hyrolo-file-list setting that shows all of the note taking systems that can be quickly full-text searched with HyRolo with no indexing.
  • The new hywiki-word-create-exclude-action-key-modes list lets you exclude certain major-modes from having the Action Key create new HyWiki words when pressed on any capitalized word.
  • A one line setting of org-open-link-functions enables highlighting Hyperbole buttons as Org links when wrapped in double square brackets.  Now you can make all your Hyperbole buttons operate like Org links if desired.

Further Details

See HY-NEWS for detailed changes in the Version 9 Hyperbole series.

GNU Hyperbole 9.3.1 [Planet GNU]

GNU Hyperbole 9.3.1 was released on the 22 October 2026.

Se announcement for GNU Hyperbole version 9.3.2 for a summary with major updates since release 9.1.0.

GNU Hyperbole 9.3.0 [Planet GNU]

GNU Hyperbole 9.3.0 was released on the 14 October 2026.

Se announcement for GNU Hyperbole version 9.3.2 for a summary with major updates since release 9.1.0.

22:00

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

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

[ Chris Lamb ]
* Mark that the test_nupkg_compressed_files test requires the tlsh Python
* module. (Closes: #1151752)

You find out more by visiting the project homepage.

21:28

GNU Hyperbole 9.2.0 (Koutliner Org-style visibility cycling release) [Planet GNU]

We have added Org-style visibility cycling as an option to the Hyperbole Koutliner and have updated Hyperbole to version 9.2.0 (30 september 2026) to track this significant change.

Once you have it installed, remove your ~/EXAMPLE.kotl file if any.  Then use {C-h h k e} to get the new EXAMPLE.kotl copy to play with.  Use {C-TAB} in a Koutline to toggle between Org-like visibility cycling and Koutline's default demote/promote behavior.

Then {TAB} will cycle the view of the tree at point and {C-u TAB} will cycle the whole outline. Most of the complex behavior from the 'org-cycle' function is replicated.

See the new manual section, (hyperbole)Inserting Literal Tabs, for how to configure the Koutliner for tab insertion in different contexts.

GNU Hyperbole Interim release 9.1.0 [Planet GNU]

This was an interim release (28 June 2026) to sync with the new package versioning techniques used by ELPA and MELPA. This turned what was the development version 9.0.2pre planned to be a 9.0.2 release into release 9.1.0 to resolve the numbering discrepancy.

From this release the following snapshot or devel versions are numbered RELEASE.0.DATE.COUNT.

View From a Hotel Window 11/5/26: Chicago, IL [Whatever]

I’m back in my old haunt of Hyde Park for tonight’s event at the Seminary Co-Op at 7pm. I may walk around and enjoy the campus. It, uhhhh, has changed since I first arrived here almost 40 years ago now.

Tomorrow! I am in Ferndale, Michigan, for an event sponsored by Sidetrack Bookshop. Here is the ticketing information. If you’re in the Detroit metro area, come see me!

— JS

21:00

The New Knowledge Artifacts of the AI Economy [Radar]

At our recent Foo Camp, a number of people said something like, “I don’t want someone else’s code any more. I may have my agent take a look at it, but I want to extract just the parts that I want, and may rewrite even those in Rust. It’s just too easy to create just the code that I want.”

This topic was hot enough that Jesse Vincent held an entire session about it. I did not attend, but Jesse gave me a report from his Plaude AI notetaker. Here’s a relevant section of the summary:

Several participants argue that software development’s primary artifact may be shifting from executable code toward natural-language prompts, generation processes, and developer skills. One speaker compares Python to assembly language, suggesting that writing conventional code may become optional as natural-language generation takes precedence. Another argues that open source can survive such a transition because its core values—peer production, capacity building, and shared specifications—do not depend on who or what writes the code.

At the same time, Jesse warns that maintainers are overwhelmed by floods of uninvited, automated, and often low-quality contributions. Participants say that traditional milestones such as pull requests, repositories, and conferences have helped contributors connect and gain recognition; as AI makes code replication easier, communities may need new ways to acknowledge participation and create paths for future developers. Some community interaction has moved to spaces such as Discord and direct messages, but structured opportunities are still needed.

Scientific computing raises particular concerns. One panelist warns that AI-generated forks and agent attacks could threaten carefully verified foundations such as NumPy and SciPy. Scientific systems depend on battle-tested libraries and reproducibility, so thousands of unreviewed alternatives could undermine reliability. Participants suggest bridging traditional open-source communities and modern AI development, which currently may use different tools and artifacts.

Other proposals include treating code as “liquid” and focusing open-source governance on durable infrastructure and specifications; maintaining agent storage independently of ephemeral container lifecycles; and using corporate compliance and safety-monitoring architectures to aggregate organizational traces.

These are important observations, all pointing in the same direction: AI is transforming the mechanisms and the artifacts of software development. For an increasing number of use cases, the software source code itself may no longer be the most important shareable knowledge artifact. This isn’t a new phenomenon. Every major change in technology calls for new mechanisms, new artifacts, and new institutions.

Originally, software developers mostly distributed binaries, then open source developers made sharing source code the norm. Now we need to distribute and share something else: context and patterns for generating code on the fly. Knowledge is being unbundled and can be shared in new forms. A repo may now serve merely as a source of context for solving the exact problem I have, rather than the bundle of problems that the original developer(s) encoded into their library or packaged solution. Some people will keep their context and patterns private, either because they see proprietary advantage in keeping them to themselves or because they are too busy or too lazy to share. But part of the problem is that we haven’t yet figured out what needs to be shared!

The challenge for the software development community is to identify the new knowledge artifacts of the AI economy, and to build new mechanisms and incentives for sharing them.

We’ve all had the experience of seeing a bespoke agentically generated app, wanting something similar, and wishing we could ask for a starting point so we didn’t have to vibe code an equivalent from scratch, with all the attention, false starts, and token costs that comes with that. Even in a world where software is generated by agents, it’s still not costless, and most of us like a good place to start.

Of course, this won’t be all software. There are lots of areas where “sort of alike” software is a recipe for disaster. Imagine a sales and marketing group where everyone had their own vibe-coded CRM tools, with different metrics and capabilities. This is not good. So there is still a place for big SaaS applications, distributed binary software, and distributed source code. You pick the hat to fit the head. But there’s also a need for something new.

The purpose of this article is to start a conversation about exactly what it is that developers should be preserving, sharing, and building on from others, and what mechanisms are still missing to make that virtuous circle work more effectively. I can’t see into the future; I can only speculate. So, as is often the case, I take a historical view. The poet W. S. Merwin wrote, “We are the echo of the future.” I have found that using history to frame the present can be a productive way to get our minds going in the right direction.

Note that while this article focuses on software development, the questions I’m asking here apply to virtually every field. Let me know if you have insights from your work in any area touched by AI.

From code to context

The ease with which LLMs can generate code is paradoxically getting people to focus too much on how easy it is not to produce code. That may be blinding us to the fact that code itself is being displaced as a valuable, tradeable, shareable knowledge artifact. Maybe “displaced” is too strong a word. Different species of value overlap for a long time. Eventually, though, old ones fade and new ones become dominant. This has happened before. Every technology revolution draws not only on new mechanisms but also creates new valuable knowledge artifacts. I talked about this in my recent short keynote at AGNTCon + MCPCon.

The open source revolution depended in part on mechanisms like modular design and source code control, even more than it depended on free software licenses. It birthed new coordinating institutions like GitHub. But it also created a valuable new class of knowledge artifact in the form of the source code repo, and subsidiary valuable artifacts like commit history and reputation. A developer’s public repos became a kind of résumé, and a project’s commit log became a record of who had done what, and how well. This replaced a previous world where binaries were the tradeable objects of the software economy. Microsoft’s fortune was built on selling licenses to binaries, and to anyone who measured the software economy in licenses sold, free software looked like value being destroyed. (Steve Ballmer called GPL’d free software “a cancer” and Microsoft VP Jim Allchin called it “an intellectual property destroyer.”)

There were two ways that I like to think about the effects of open source software. First, value that was based on scarcity was replaced by value that was created by abundance. Back in 1975, Steve Baer described this as “the clothesline paradox,” explaining that when you put your clothes in the dryer, the energy you use is measured and counted, but when you hang your clothes on the line, it is ignored by accounting, despite doing the same job. Open source software was like sunshine, free for the taking, and its value unmeasured. Everyone compared the revenue of free software companies like Red Hat and MySQL to the vastly larger revenues of proprietary software companies like Microsoft and Oracle, noted the fact that they hadn’t even survived as independent companies, and concluded that open source was a less effective business model because its creators captured less of the value. They missed the point that far more value had been created than had been captured. Open source went on to power most of the internet economy, with the value captured by other means than selling the software itself.

Some people might think of this as a kind of failure, but they would be wrong. It is the system working exactly as its creators intended. I remember talking with Bob Scheifler, one of the creators of the X Window System, about whether it was OK that we were building commercial versions of their documentation. He told me that was exactly what he had intended. They put things out with a very permissive license precisely because they wanted others to build on top of them. I remember him saying “We want to raise the floor.” The creators of Berkeley Unix, Apache, and others felt exactly the same way. They didn’t want to win the existing game. They wanted to play a different game.

And they succeeded, big time. As Clayton Christensen noted in 2004, when one thing becomes a commodity, modular and fungible, something else (usually something adjacent) becomes valuable. He called this “The Law of Conservation of Attractive Profits.” At about the same time, I had stumbled onto this principle in explaining the implications of open source software in giving rise to the new paradigm that I was shortly to start calling Web 2.0. Clay and I first bonded when we gave our respective keynotes about essentially the same thing at the 2004 Open Source Business Conference. I later wrote about the conjunction of our respective ideas in a piece called “The Open Source Paradigm Shift.”

New artifacts are often the first visible sign of this value transition. You can see this at work in the evolution of the web. The web was born from the new mechanism of internet-enabled hypertext via HTTP, HTML, and the modular, replaceable software (the web browser and the web server) that made it useful.

At first, the new valuable knowledge artifact was the website with its domain name, associated URLs, and HTML-formatted web pages. DNS was the coordinating institution. People paid fortunes for domain names on the premise that the site was the thing that mattered. And it did matter, and still does. But less than it used to. Over time, Google became the new coordinating institution, and its ability to point deep within websites made the web page, not just the site itself, a valuable knowledge artifact. Social media made “posts” and short-form video into other knowledge artifacts. New kinds of value creation and value capture tumbled out of that unbundling. Packaged software was displaced as the key monetizable artifact and replaced by web applications, which were information- and software-based frontends to vast backend databases.

The click became a new and incredibly valuable knowledge artifact, the unit in which attention and intent were measured, and then priced. First pay per click advertising (Google), then engagement maxing (social media) became the basis of vast fortunes. The people who notice the new artifacts early, while everyone else is still focused on the old ones, then invent new business models based on them, often play a bigger game than those who were still trying to play by the new rules.

When I summed up these ideas in “What Is Web 2.0” in 2005, I talked about the key principles being “harnessing collective intelligence,” “software above the level of a single device,” and “data as the next Intel Inside.” (That is, the next valuable source of lock-in.) The companies that survived the dot-com bust were the ones that understood that the data their users generated through their activity on the internet was the asset that mattered, not just the software that served it. That was an argument about a new knowledge artifact, though I didn’t use those words at the time. PageRank understood that a link was a vote, and a new mechanism to improve organic search birthed new dimensions of the internet economy. Links were bought, sold, and gamed accordingly. SEO (both “white hat” and “black hat”) and search quality became a battlefield.

All those disciplines have had to change now that content has been absorbed into AI models. Books, music, video, web content, sites like Wikipedia, GitHub, and Stack Overflow were all grist for the mill. In the open source era, a voted-on answer to a well-posed question on Stack Overflow was a valuable artifact, and the reputation that came with writing good ones was a subsidiary artifact, just as it was on GitHub. The number of new questions asked on Stack Overflow peaked at roughly 200,000 a month around 2014 and was already sliding before ChatGPT, but the decline accelerated sharply after November 2022. The knowledge in those answers didn’t go away. It was absorbed into the models, which now give their own answers synthesized from all that they have consumed. In that way, they have also consumed much of the traffic that would have gone to the original knowledge creators. New mechanisms to create a circulatory economy of value creation need to be developed.

Software development also changed radically because of the internet. Another of my web 2.0 principles was what I called “the perpetual beta.” It’s easy to forget that in the PC era, software had major releases only every couple of years, with the new version distributed on CDs (and long before that, on 9-track magnetic tape.) I remember talking with Mark Lucovsky, who’d been a developer on Windows NT at Microsoft, shortly after he arrived at Google in 2005. He was exulting at the experience of being able to push a single change live worldwide soon after it had been tested. Eventually, we saw the formalization of new mechanisms like test-driven development (TDD) and continuous integration and continuous delivery/deployment (CI/CD), which we now take for granted, as if they’d always been the norm.

The story isn’t over yet, though. The old knowledge artifacts don’t go away all at once, and they don’t go down without fighting. The new artifacts are only half-formed, and have weaknesses that can be exploited. We’re in the middle of that fight right now. But I suspect the winners will be those who first understand what the sources of deep value will be five years from now.

When code is cheap, what becomes valuable?

When code is cheap to generate, the valuable thing may be the prompts, context, and other artifacts that tell the model what code to generate and how to do it well. I’ve started using the generic term “context bundles” to describe the artifacts that you hand the model to do its work.

In the opening to this piece, I talked about software patterns extracted from code as one kind of new shareable knowledge artifact. But these are only one of many kinds of “context bundles” that are starting to be shared. Spec-driven programming is all about developing context bundles. The spec becomes the thing that is reviewed, versioned, and kept, and the code is regenerated from it as needed. (A lot of people are worried that this might become a return to waterfall development. And it could, if done badly. But done well, with rapid turns? Maybe just right.)

An Agent Skill is another kind of context bundle, a folder of instructions, scripts, and reference material that an agent loads only when a task calls for it. Anthropic released the format as an open standard, and it has been adopted by a growing number of other agent products. An MCP server is yet another mechanism for presenting context that will shape the work of an LLM.

But that’s not all. The agent trace, the record of what an agent tried, which tools it called, and which context it drew on, is the closest thing we have to commit history for work that doesn’t get formalized as code. The log of which context bundles were invoked, and by whom, could also be the raw material for attribution and payment, much as the click was the raw material for advertising. And the stream of what people ask their agents to do may become to this era what the click was to the last, the signal of intent around which the coordinating institutions of the AI economy get built. I’ve often wondered what the agentic equivalent to PageRank will be. Will agents leave “pheromone trails” that grow stronger or fade over time, in the way that links do?

Even a well-formed question or conjecture could be a kind of context bundle. Math and science already value and exchange these, and I’ve started to think that there is an opportunity for building infrastructure for sharing and crediting them. After all, arXiv.org has already pushed the boundary for credit further upstream by publishing preprints rather than just reviewed papers. Why not go all the way to giving priority credit for well-formed conjectures?

The eval, a set of test cases that encodes what good work looks like for a particular task, may also turn out to be one of the most valuable things a domain expert can create, withhold, or share. But there’s a serpent in the Garden of Eden. At Foo Camp, Nick Vincent observed to me that there’s a real risk to evals as a context object, because there is a race going on to acquire massive amounts of data (say on corporate workflows) and sell it to the labs to train on it. But an eval only works if the model being judged hasn’t already seen the answers. Once the test cases leak into the training data, the eval measures what the model memorized rather than what it can do. How do we protect the holdout set for evals? That may be a critical mechanism that is still needed, and one that the people who build evals, and the companies whose workflows they describe, have every reason to develop. IMO, it would be good if there were more transparency into this process, and perhaps even supervision by a neutral body.

How do we come to trust new artifacts?

Part of the work of every revolution is building the mechanisms that help market participants to trust its new artifacts. In his book Nature’s Metropolis, William Cronon tells how Chicago became the center of the world’s grain trade in the 1850s. The mechanisms that enabled this were the railroad, the steam-powered grain elevator, and the telegraph. The coordinating institution became the Chicago Board of Trade. In 1856 the board adopted uniform grading standards. Before that, a farmer loaded his grain into individual sacks, and every buyer along the way had to inspect each lot or trust the seller. Afterward, a load of wheat was inspected by a middleman, dumped into a bin with other grain of the same grade, and its owner was handed a receipt for, say, a thousand bushels of No. 2 spring wheat. The grading standards became a new mechanism enabling trust and the grade receipt the new knowledge artifact certifying it. Together they separated the ownership of grain from the grain itself. Once merchants started trading receipts for grain, it didn’t take long before they were trading promises of grain not yet delivered, and the futures market was born. (That raises an intriguing question: What will be the derivatives of the AI era?)

Cronon’s history also observes that the receipts were only as good as the warehousemen who issued them. Some of them issued receipts backed by no grain at all, or spread rumors that stored grain was spoiling so they could buy receipts cheaply. It took years of fights inside the Board of Trade, and finally state regulation that the Supreme Court upheld in Munn v. Illinois, to make the receipts trustworthy. New knowledge artifacts invite counterfeits.

Even when there’s no fraud involved, there are often missteps in the early days of a new technology. Consider the rise of spreadsheet models that could be filled in with the user’s own data. A model was a set of assumptions and formulas that let anyone ask “what if?” and get an answer in seconds. Magic at the time! And eventually completely taken for granted. The model became an artifact that could be passed around, and used to make business decisions at companies other than the one that had created it. In 1984, a few years into the spreadsheet revolution, Steven Levy wrote “A Spreadsheet Way of Knowledge” about what VisiCalc and Lotus 1-2-3 were doing to American business. Levy warned that a spreadsheet model is only as good as its assumptions. Back then, people taking a poorly-executed spreadsheet model as gospel was the equivalent of some of today’s AI usage fails.

Feeling our way into the future

When people stop valuing the thing they used to value, ask what they are coming to value instead. Being alert to valuable new knowledge artifacts is a superpower. The new artifacts tend to show up well before the institutions that organize them, and long before anyone has worked out how to measure them. GitHub was founded more than a decade after open source software became mainstream, and Google didn’t become dominant till more than a decade after the first websites. My bet is that we are at a similar moment with context, with the artifacts starting to appear and the institutions that will coordinate them still unbuilt.

There is a lot of work that I’m following eagerly, looking to see where, whether, and how it gains traction.

  • Duncan Davidson is doing fascinating work on what it would mean to have a home for personal context. I can’t wait till he makes more of this work public and reusable. Relatedly, the open memory protocol initiative is an attempt to define a useful set of mechanisms for exchanging context.
  • Sam Schillace has started building a repository of what he calls agent-building patterns. One of those patterns, “Anchor on Canonical Names,” echoes the idea that I wrote about last year in “Magic Words,” and that we are also exploring with the O’Reilly Expert Intelligence MCP. As Sam puts it, canonical names are a way of referencing “a whole coherent methodology the model already learned in training, far more reliably than a paragraph paraphrasing the same idea.”
  • There are numerous attempts to reinvent GitHub for the agentic era, including Cursor Origin and Entire, founded by former GitHub CEO Thomas Dohmke. Entire describes itself as “new distributed Git forge that stores your intent alongside your code, built for the scale and throughput of agentic coding.” Instead of traditional pull requests, it uses Trails, an agent-driven review system that logs session traces and automated evaluations so developers can merge code without reading every single line of a diff. Origin is an agent-first Git hosting and collaboration platform designed around structured semantic diffs, machine-readable merge states, and automated agent routing. As commercial products, both of these are examples of existing software distribution mechanisms and artifacts.
  • Perhaps most interestingly for the point I’m exploring in this piece, Anthropic is building a proprietary, internal-only replacement for Git itself for its own use. The company published a very detailed description of the system, which it calls Scion. It might even be detailed enough for someone with a big team and a ton of compute to reproduce, using the description as a starting point. But you can see at the scale of what they have built the limits of the “distribute context and specs and rebuild on the fly” model.
  • But there are also attempts to build systems that enable developers to share lightweight pieces in a new architecture of participation. Common Fabric is building an entire system premised on disposable agent-generated software expressing repeatable patterns, using data that is associated with users rather than with applications and that carries with it its own rules for how it can be used. In my conversation with cofounder and CEO Alex Komoroske, he described these patterns as small pieces of code that can be fetched from anywhere on the internet or written by an LLM on the fly. Agents will mostly write them, not human developers. But they will mostly write them on users’ behalf, and once someone’s agent has built a pattern, anyone else can use it. Their solution may not be the winning one, but it is definitely a bold leap into what may be a very different future for software.

Don’t get trapped in the past of software development. Root yourself in its history, the soil from which it grows, and imagine its future. What will we want to share, what will we want to reuse, and what mechanisms are needed for us to do so effectively?

19:42

The Big Idea: Daryl Gregory [Whatever]

Being the middle child isn’t easy, but the bonds you form with your siblings can be some of the closest and most impactful relationships in your life. Author Daryl Gregory shares memories of his sisters from his childhood, and talks about how their bond played a roll in creating his newest novel, The Porcelain Sisters.

DARYL GREGORY:

Is there something wrong with me that I find two sisters fighting with each other to be hugely entertaining? I was the middle child, the boy sandwiched between two girls—one who was seven years older than me, and the other sixteen months younger. We grew up in a small ranch house in the suburbs of Chicago, and we fought what I assumed was a normal amount.

Ninety percent of the time, it was me versus one of them. With my older sister, this was often when she ordered me to do something, and my go-to response was to slam a door and shout, “You’re not the boss of me!” (She was absolutely the boss of me.) 

My younger sister and I were closer in age and so spent more time together, which meant more opportunities to torture each other. I liked to hide in her room and jump-scare her. She’s the finest screamer in the family, and terrifying her is extremely satisfying. She knew how to hit back, though. One time she kidnapped my prized possession, a G.I. Joe with lifelike hair and Kung Fu grip, and he reappeared days later with a bald spot, as if his forced marriage to Barbie had driven him into middle age. I still have him—and the damage is outrageous. 

So it was a delight—a delight, I tell you—when my sisters fought with each other, and I got sit on the sidelines munching my proverbial popcorn. 

But here’s the thing I found amazing—their fights were so short. They’d pivot from shouting at each other to calmly hanging out in their shared bedroom. They didn’t hold grudges. (I, however, was a champion pouter.) Even now, if they have an argument, they repair the damage quickly. I love my sisters, and they’ve assured me that they love me back, but they have a bond with each other that I find mysterious and enviable. 

So perhaps it’s not a surprise that sisters turn up a lot in my books. Ruth and Isabel, the two main characters in my new novella, The Porcelain Sisters, are not exactly like my siblings—for one thing, neither of mine is a haunted doll—but let’s just say there are… similarities. 

Ruth (the flesh-and-blood sister) and Isabel (the porcelain one) first appeared as teenagers in my YA Lovecraftian horror novel, Harrison Squared. They were my favorite characters to write dialog for, because they operated almost like a vaudeville ventriloquist act—Ruth was shy and soft-spoken, while Isabel spoke the truth and cut everyone down to size. 

But in that book I never explained why Isabel could talk, or how they were sisters, or where Isabel came from. That was for a good reason: I didn’t know. I wrote this book to find out—and to get the chance to hang out with them some more. 

Ruth, now in her twenties, is trying to make rent while taking college classes, but feeling adrift. She seems to have some latent magical ability, but doesn’t know what her purpose in life is beyond taking care of her sister. She’s never even had a long-term romantic relationship because Isabel deliberately freaks out anybody she brings home. 

Isabel’s anger issues stem, of course, from being trapped in a porcelain body. She can’t grow up and may never live on her own. When her body’s accidentally damaged during a fight with Ruth—a seaside cliff is involved—a mundane toy repair shop won’t cut it. They have to go on the road to find the Dollmaker, the French witch who made her. 

As I wrote that last sentence I realized the sisters are literally repairing each other. I wish I’d thought of that in time to put it on the back cover copy. 

The girls head to Marseille, where they face off with an unkillable assassin with the resilience of a ragdoll, a pair of demons (one a chain-smoking crow, the other a black cat) and their human familiars, as well as a small army of haunted dolls. Oh, and the Dollmaker turns out to be the head of Le Clan des Sorciéres, a kind of witch mafia. I know, it’s a lot. 

At the root of the mystery is why their mother, an enforcer for Le Clan called Godless Annie, abandoned them. What the sisters discover about themselves suggests there may be a way for them to live apart—but do they want to?

Another thing occurred to me as I’m typing this: is that ending about my current relationship with my sisters? Since our mom passed we don’t see each other like we used to. We live on opposite sides of the country, and our lives are busy. Did I write this book because I miss them?

I suppose I could talk to a therapist about this. Or write another book about sisters. Or—and hear me out—I could go on the road with the Gregory girls, solving mysteries and fighting the occasional demon.


The Porcelain Sisters: Amazon|Barnes & Noble|Bookshop|Powell’s

Author socials: Website|Bluesky|Instagram

16:35

Inconvenient brands [Seth's Blog]

For an upcoming blog post, I’m collecting a list of small businesses that are worth bypassing Amazon for. Holiday shopping is around the corner, and sometimes people want to put in the effort to buy something that takes more than a click.

Folks like Burlap and Barrel, Gramercy Tools or Askinosie Chocolate–direct trade small businesses.

If you’ve got a suggestion, please use this form and let me know. Thanks!

[PS! the secret recipes have been updated.]

The Ubuntu 26.04 Rust sudo is not compatible with standard sudo [OSnews]

Ubuntu has been at the forefront of replacing the traditional versions of basic tools like sudo with replacements written in Rust, but aside from worries about replacing battle-tested code with brand new, relatively untested code, there’s new things to worry about it. As it turns out, sudo-rs, the Rust replacement for sudo, is intentionally incompatible with the classic version in dangerous ways, as Chris Siebenmann discovered to his dismay.

Basically, the classic sudo supports the use of wildcards defined using square brackets, so that if you allow a user to run, say, /usr/sbin/exim -bp[acru], without a password, they can run exim -bpa, exim -bpc, exim -bpr, or exim -bpu without having to supply a password. This allows for very specific, fine-grained access control, which is quite a nice capability to have if you’re managing many systems and users. Sadly, sudo-rs intentionally does not support this, opting to only allow you to use the generic * wildcard. Worse yet, it doesn’t really make this clear, either.

↫ Chris Siebenmann

I do not really have words for this. The Rust sudo has apparently opted to keep the single most dangerous wildcard while disallowing all of the wildcards that allow one to be narrow and specific about what you’re allowing, and it buries this at the end of a section that devotes a bunch of words to describing functionality it doesn’t have and doesn’t support, with absolutely nothing else in that section to say this (either up front or in the descriptions of how all the wildcards would work if sudo-rs supported them, which it doesn’t).

If you’re going to replace such vital, core tools like sudo that god knows how many people rely on every single day, you better be damn sure you’re feature-complete and can act as a drop-in replacement. If someone switches from sudo to doas, nobody expects the experience to be identical. However, if you’re consistently being told that sudo-rs is a drop-in replacement and you shouldn’t expect any disruptions, you better be able to make true on that promise. Ubuntu isn’t some also-ran small hobby distribution, and its developers should act like it.

What a clown show.

LXQt 2.5.0 released [OSnews]

The second desktop environment release I’ve got for you today is LXQt 2.5.0. This new version excises its last LXDE dependency, and QTerminal and QTermWidget received considerable improvements, like new background image modes, a visual bell, support for OSC-8 hyperlinks, and more. There’s a ton of smaller changes and improvements as well, but do note that due to a bug, 2.5.0 broke LXQt’s Monitor Settings on X11. The project intends to fix this as quickly as possible and push a point release to address this issue.

Cinnamon 6.8 desktop environment released with hibernation support [OSnews]

It’s desktop environment Thursday, as I’ve got two new releases for you today. First, Cinnamon, the desktop environment primarily associated with Linux Mint, has hit version 6.8. This version will officially ship with Linux Mint 27, scheduled for around Christmas of this year.

Highlights of Cinnamon 6.8 include hibernation support via a Suspend action in the main menu, modern one-to-one trackpad gestures for both Wayland and Xorg sessions, support for the oo7 Secret Service provider, support for multiple instances in the Sound applet, and a more unified Network applet that merges the WireGuard and VPN sections.

↫ Marcus Nestor at 9To5Linux

While Cinnamon is first and foremost a Linux Mint project, it’s available on countless other distributions as well, including dedicated variants for popular distributions like Fedora and Ubuntu. Its Wayland support is finally materialising too, which is long overdue.

16:21

Link [Scripting News]

One thing to know about Claude -- it will never welcome you when you start a session with the news that it had a gestalt and now has figured out how to do something that will blow your mind. That doesn't mean it won't see a different and better way to do something if you ask it to have another look. It solved a deal-stopper problem in Frontier, after we thought there was no solution. So it does seem to be creative, but not in a mind bomb sort of way?

14:49

Link [Scripting News]

When working with Claude I learn more about the way my mind works. I am building a demo for a new product and see some quirky behavior. Should I pause and tell Claude, or just keep going and assume I'll see it again and can report it then. If I switch over to Claude and report it, pretty good chance it will write me a multipart document that i have to at least skim to see if there was anything in there I needed to know. The real answer I was looking for, "yes i can fix that, say go if you want me to do it now." Boom. That's how I want my machine to work. I explain to it that it must be more concise. This might be the real frustration of all writers in every medium. You can't write down your thought process, it has to be in your brain before you can write it. To an outside observer you look interruptible. And Claude doesn't even understand the concept of being interrupted and losing your train of thought. No doubt it could define it, but it doesn't get it. Kind of like the great speech Robin Williams gives to young Matt Damon, the genius kid who knows everything, but has no idea what living is really like.

Link [Scripting News]

I still can't believe we had a normal election in the US. All the effort the Repubs went to, to build and train a secret police, and they didn't use them?

14:42

[$] User namespaces + file capabilities = trouble [LWN.net]

User namespaces are a key part of the kernel's toolkit for assembling containers; processes within a user namespace can appear to have full root access to the system while gaining no extra privileges in the wider system. At least, that is the intent. In practice, keeping privilege contained within a user namespace has often turned out to be difficult. As an example, consider this small patch series from Josef Bacik, which is intended to address some situations where a process within a user namespace can elevate the privileges of processes outside of it.

Security updates for Thursday [LWN.net]

Security updates have been issued by AlmaLinux (dpdk, httpd:2.4, kernel, kernel-rt, mysql:8.0, php:7.4, php:8.0, qt5, ruby:2.7, ruby:3.0, tesseract, webkit2gtk3, and xorg-x11-server-Xwayland), Debian (imagemagick, puppet-agent, symfony, trapperkeeper-authorization-clojure, and xen), Fedora (3proxy, bind, bind-dyndb-ldap, curl, dhcpcd, erlang-jose, forgejo, freetype, laszip, libical, libmongocrypt, markdownlint-cli2, mongo-c-driver, openbao, pipx, python-boto3, python-botocore, python-crate-ingredients, python-lxml-html-clean, python3.11, python3.13, python3.14, python3.15, roundcubemail, rply, ruby-build, rust-app-store-connect, rust-qemu-rdp, rust-redlib, scribus, and valkey), Mageia (minetest, python-pypdf, stunnel, znc, and zvbi), Oracle (.NET 10.0, bind, brotli, cockpit, dpdk, fence-agents, freerdp, gimp, glibc, grafana, gvfs, host-metering, kernel, python-dns, qemu-kvm, raptor2, tesseract, webkit2gtk3, and xorg-x11-server-Xwayland), Red Hat (grafana and pcs), Slackware (rsync), SUSE (amazon-cloudwatch-agent, apache2, aws-efs-utils, brotli, cephfs, coredns, cramfs-tools, firefox-esr, fuse-overlayfs, ghostscript, GraphicsMagick, libpolkit-agent-1-0-128, libsoup, nvidia-open-driver-G07-signed, perl-Dancer2, python-PyJWT, python313-joserfc, rsyslog, switcheroo, trivy, valkey, vexctl, and xdg-desktop-portal), and Ubuntu (apt, libphp-adodb, net-snmp, pillow, squid, and twisted).

14:14

Andrew Cater: Arm Cambridge - pre mini-Debconf days 20261105 [Planet Debian]

 At Arm in Cambridge for two hackathon-type days before the main mini-Debconf on Saturday and Sunday. A roomful of people, mostly very quiet this morning but with people gradually arriving and greeting each other.

Just had an excellent lunch. Arm are excelling themselves, as ever. With particular thanks to Charlie Dixon who has arranged excellent facilities for us all and to Liv for the catering provision. Other old friends here have also helped as ever.

This sort of thing is ideal for cross-fertilization of experience, ideas - the side conversations where you realise that three people are converging to a consensus of discussion from three different starting points. It's fun and intensely interesting and it's the sort of thing that keeps me running Debian - and trusting the colleagues behind it because I've seen them here. 

Face and name recognition is sometimes at least as valuable as rockstar coding and the social element and shared history keeps us pulling together.

14:00

What It Takes To Trust Automatic Model Routing [Radar]

When a new coding model comes out, I want to try it. New releases always carry a promise for me. Maybe it can handle a change that needed too much manual intervention before. Maybe it can find the problem an earlier model kept missing. Maybe it can handle some coding scenarios that my favorite model can’t handle today. To discover a new model’s capabilities, I need to spend time with it to find out what I can reasonably hand over to it.

Having said all that, I understand the frustration when a new model becomes available, but your assistant won’t let you choose that model. Somebody has decided which models you can use and when you can use them. You are left trying to decide whether the answer is good enough and can’t get your hands on the new shiny toys. At the same time, I’m quite happy to let an assistant choose a model if that makes my budget last longer. New toys tend to be expensive and top-line models don’t make a difference here. There are plenty of steps in development where a cheaper model might do everything required. Using it for those steps could leave more of the budget available for a difficult investigation later. If routing lets me keep using capable assistance throughout the day, I have a good reason to use it. I want routing to give me more assistance for the same budget. The quality of that assistance depends on how the models, tools, and context handling fit together. And I need enough information about what the assistant did to judge the result.

Getting more help from the same budget

A fixed AI budget puts a fairly ordinary constraint on a team. Or better, on the affected individual.  You have an amount you can spend, and of course you want as much help as possible from it. Each request uses some of that amount. And it really gets frustrating when repeating a request, correcting an answer, and asking the assistant to try again consume even more of the budget.

Automatic routing gives the system a way to manage that spending for you. It can use a cheaper model where that model is likely to succeed and spend more where the additional capability is likely to help. You, the developer, can then concentrate on the task while the assistant handles some of these decisions and you don’t have to constantly worry about which model to pick for which task.

The researchers behind RouteLLM trained routers to choose between a stronger model and a cheaper one using preference data. They reported more than a twofold reduction in cost with minimal impact on response quality on the benchmarks they evaluated. You still need to check how it performs on your own tasks.

The next question is how those savings get to me in my day-to-day jobs. If requests become cheaper to serve, the same subscription could support more of them. A team could keep its assistant available to more people within an existing spending limit. The saving could also make it practical to use a more capable model more often when the task calls for it. So much for the theory. In most assistants that behavior is little more than a “switch.” That connection to better results needs to be visible in the product. If I choose automatic routing, I want to understand what I get from it. Perhaps I can send more requests before I reach a limit. The results still need to meet my expectations, of course. This is a fairly reasonable thing to ask of a feature that spends part of the budget on my behalf.

The time we spend with the assistant belongs in that calculation too. Think about how a cheaper request can lead to another attempt, followed by another explanation, followed by a correction. If this happens often enough, I spend more time getting the code ready to accept than I would have with a more capable model. So when we compare routing policies, we need to follow the task through those interactions. Then we can look at both the money spent and the time we put into getting there and compare both together.

Consider a Java service that sends an order to another service. Occasionally, the request times out, the caller retries, and two orders appear. You ask the assistant to investigate. It can begin by finding the retry code and following its callers, which may be manageable with a cheaper model. As it reads further, it finds a possibility that needs more investigation: The receiving service may have saved the first order before the response was lost. The caller sees a timeout, but that doesn’t tell it whether the order was created.

The assistant now needs to inspect how the receiving service handles a repeated request. A proposed fix should be checked against the failure we are concerned about: save the order, lose the response, and repeat the request without creating a second order. If the assistant can only inspect the caller, it should leave the receiving service’s behavior as an open question. Spending more on a model may help with the reasoning once the relevant code is available, but the assistant still needs access to that code or evidence of its behavior.

The task only becomes clearer as the assistant reads more code. That gives the router more information than it had when it saw the original prompt. It may make sense to spend more on the next part of the investigation, even if the initial steps were straightforward. A recent SWE-Router paper takes this approach: A cheaper model makes a short initial attempt. The router then uses what happened to decide whether to continue with that model or switch to a stronger one. Its benchmark results show that these early actions can improve the routing decision. That seems like a sensible direction for coding assistants: Let what the agent discovers influence how it continues.

The model operates inside a harness

Following the retry through the code also shows how much of this depends on the harness, the software surrounding the model. That’s not only the client running on your machine; it includes the router and backend logic. They provide context and tools, manage the conversation, and control how the agent proceeds.

The assistant needs to find the code that sends the order. It also needs to find out how the receiving service handles a request it has already processed. Once the model has that information, it can reason about the interaction. The harness has to help the agent get there.

This includes some really practical details. Can the agent search the relevant repository? Does it retain the information it found as the conversation gets longer? Can it run a test against the proposed change? If that test fails, does the failure reach the model in a form it can act on? These details affect both the result and the cost of reaching it. An assistant that loses relevant context may need to find the same information again. We pay for those attempts, and we may need to explain the problem again too. When the assistant finds the right code and runs an appropriate test, the result is way easier to review.

A model benchmark tells us how a model performed under particular conditions. The assistant we use has its own instructions and tools. It decides what information to provide to the model and what to do with the response. We experience all of that when we ask it to do something. A new model can improve that experience considerably. I want to use it with a harness that can find the relevant code, retain context, and run the tools the task needs. I also want the people integrating it into my assistant to check how it behaves with their harness.

The same applies when a company runs an assistant on its own infrastructure. It might connect to a model through an approved cloud end point or use a model running on its own hardware. The developer may see the same interface in both cases. Behind that interface, the model may have different tools or different access to the code. We made this case in our O’Reilly book Applied AI for Enterprise Java Development.

Returning to the order example: Suppose the assistant proposes another retry without examining whether the first order was created. The model may have struggled with the problem. It may also have been missing information about the receiving service. Looking at which files it examined and what it checked helps us investigate the failure.

This is exactly the kind of information I would like my assistant to make easy for me to find. It gives me somewhere to start when the result is disappointing. I can try another model, and I can also check whether the assistant found the information it needed. I believe I am less helpless in front of an already very magic system.

But what can a developer judge?

We have a reasonable chance of judging an assistant’s answer when we know the system and can examine what it has done. In a familiar service, I can follow the changed behavior and read the tests. I can then decide whether the change addresses the problem. With an unfamiliar service or programming language, I need more time to understand the code before I can make that decision. The assistant’s explanation can help me get there. It can point to the relevant code and explain how the change affects it. If it says that repeating the order request is safe, I can follow that claim into the receiving service. I need to see how that service handles a request it has already processed.

A clear explanation makes a proposal easier to understand. Checking the proposal takes another step. With that, I have seen confidence develop faster than that understanding. And I always wondered why. In an earlier study of an AI coding assistant, participants with access to an assistant produced less secure code while being more likely to believe their code was secure. The experiment used an older model and specific security tasks, so was not a general-purpose study, but even with that limitation, it shows why confidence about a change deserves attention. Assistant interfaces should show which claims have been checked and which still depend on an assumption. They should also keep an unresolved question visible as the conversation continues. “Review the result carefully” becomes easier to act on when the assistant helps me find the parts that really need review.

Deciding whether the router chose well takes a little more effort. Spotting a mistake tells me something about the answer in front of me. To find out whether another model would have done better, I need a reasonably fair comparison. It should start with similar code, context, and tools. If I change several of those at once, it becomes hard to tell what made the difference. This leaves me in an awkward position: I am responsible for accepting a result, while some of the decisions that shaped it are effectively hidden from me. A model name gives me little more than a reference. After using a model for a while, you develop expectations about what it handles well and when another attempt is likely to be necessary. Those expectations come from your own tasks and experience. If the service does not expose a precise model version, you cannot be sure that the model behind the same name has remained unchanged.

Despite all those drawbacks, access to a new model gives me something to try when my assistant is stuck. So I really can understand why people want that choice. It’s one of the few concrete ways to influence what happens next.

And of course the choice itself comes with expectations. But is this a real effect? In a study of AI model choice, people planning a holiday chose between a model presented as more capable and another as more energy efficient. Both choices routed to the same model, GPT-4o mini. People who chose the supposedly stronger option rated its responses more highly. They selected their own option, though, and had separate conversations. Some of the difference in ratings could have come from the people taking part or from those conversations. A second study gave 48 people functionally identical chatbots labeled “old” and “new.” The researchers varied which appearance received each label and which version people tried first. Thirty-seven preferred the “new” version. The suggestion that one version was newer was enough to influence their preference. Having some control may also change how people feel about a system. In experiments with social media feeds, people reported greater satisfaction when controls were available, even when the controls changed the feed randomly. Later, researchers told participants in the interview study that one feed behaved that way. Most could then identify it. Once they knew what to examine, they could recognize the difference.

These three studies involved general users doing tasks outside software development. We still need to understand how those findings carry over into coding. But for me, the studies suggest that the model name and the choices we make influence our impression of an answer and its quality. But we are fighting the wrong fight here. The real value would be in giving developers a way to check the answer.

The minimum control I want in a coding assistant could be quite modest. Let me ask it to spend more of the budget on a difficult investigation. Let me request a more capable model when repeated attempts are going nowhere. The harness can use that request together with what it has already learned about the task. I want to be able to leave routine routing decisions to the system, and still intervene when I have a reason. Each investigation gives me an opportunity to learn what the assistant handles well. I need to see enough of what happened to make that judgment, and the conversation is a good place to start.

Make the conversation easier to assess

When I look back at a past conversation, I want to understand what the assistant had available, what it did, and what it checked. That gives me a way to decide whether to accept a change or investigate further. The interface could help by showing more of what happens around the model, but it does not necessarily have to.

At a minimum, I need a context breakdown. The messages I type are part of the information the model receives. The harness also supplies system instructions, descriptions of tools, and guidance such as project rules and skills. All of that takes up visual space, but it shows how much space each part uses and how much is reserved for the response so I can act more appropriately in my next steps in the conversation.

Ultimately this makes developer mistakes visible earlier. When you realize that, even a short exchange can involve quite a lot of information. If tool descriptions take a large share, I can look at which integrations the task needs. Perhaps the assistant is configured for several kinds of development MCP servers, while a simple task only needs a few of those tools. I can try a more focused setup and check how it handles a similar task. It still needs access to the information and tools that help it finish the task.

In experiments I’m driving at IBM, I’m connecting this context information with a record of what the assistant did. I can see context changes alongside actions such as reading a file or loading a skill. From there, I can open the relevant part of the conversation. If the assistant delegated part of a task, I can follow that task as well. I have somewhere to begin looking when a long session becomes difficult to follow.

For example, the assistant might read the same file several times and receive identical content. The view can draw my attention to those reads and let me inspect what happened around them. Of course, the assistant may have had a reason to check the file again. I may also decide to ask it to summarize what it has found and continue from there. I can make that decision after looking at the messages and results behind the observation.

Alongside the activity history, I want to see the current context size, the session’s total token usage, and the cost of its requests. A context snapshot tells me how much space was occupied at a particular point. The usage recorded over a session tells me how many tokens its requests consumed, and cost tells me what I paid for those requests. These figures answer different questions, and I need to know which one I’m looking at. An estimate should be labeled as an estimate. If part of the history is missing, that gap should be visible too.

With the history available, I can also follow a claim back to what the assistant actually checked. Take the order example again: I want to see which code the assistant read and whether its test covered losing the response after the order was saved. If it only examined the caller, I still need to understand how the receiving service handles the repeated request. The conversation should keep that question open so I can provide the missing information or ask the assistant to investigate further.

A report that tests passed needs a little context as well. I want to know what those tests covered and which version of the code they ran against. If the assistant edited the code again afterward, I need a new check. And when it wrote both the implementation and the tests, both may follow the same mistaken assumption. I still need to compare them with the behavior we wanted.

In my article on specification, I argued for agreeing on enough of that behavior to make the result checkable. The assistant can keep that agreement available as the conversation gets longer. When it says that a requirement is satisfied, it can point to the code and the check supporting that claim. If a question remains open, I want to see it before I accept the change. It should also be easy to tell what stage the assistant has reached. It might be proposing a change, reporting that it edited a file, or showing the result of a test run. Those are different points in the task. A clear account of what happened helps me decide what to do next.

In practice, most of this can stay fairly brief. Put the checks and open questions beside the proposed change, with links to the actions and results behind them. I can read the summary, then open the part that needs more attention. As I use the assistant on similar tasks, those checks give me a basis for deciding how much I can rely on it.

I also want to understand how routing spends the budget. I already struggle to see token usage in some interfaces. Showing me how many tokens remain in my budget helps me decide how much more I can do. When one session consumes a large part of it, I want to understand where it went. Showing the recorded usage alongside the assistant’s actions would help me connect the spending to what it attempted.

A team can use this information when choosing a routing policy. Try the assistant on tasks that resemble everyday development. Keep the starting conditions similar and follow each attempt through to a result the team can review. Include the corrections and the time developers spent getting there. Then compare how much assistance the same budget provided and whether the resulting code met the team’s expectations. That comparison may also point to something in the harness that needs attention. An assistant that repeatedly retrieves the same information might need better context handling. One that lacks access to a relevant service might need a different set of tools. Those are things we can investigate once we can see what happened during the task.

Automatic model routing can be great when it gives developers more access to capable assistance for the money they already spend. I’m happy to let the assistant choose models for routine steps and spend more when a difficult investigation calls for it. The whole assistant needs to support that arrangement. Its models, tools, and context handling all contribute to the result.

As the industry develops these systems, we need to keep finding better ways to help developers judge the answers they receive. I want to be able to look at a conversation, understand what happened, and decide what to do next. That is how I can build trust in the assistant while letting it take on more of these decisions.

13:21

CodeSOD: Only Create Me if I Exist [The Daily WTF]

Foreign keys are an important part of making sure the entities in our relational database can be connected back together and queried correctly. It's part of proper data normalization. This isn't shocking, of course: the order line table has a foreign key over to the products table, so that every line item points to a product we sell. That's database 101. Database 201, you'd also think about the times where you have a hierarchy of records, where say, every Employee has a ManagerId, which is a foreign key back to the Employee table itself (and in database 301, you'll understand why having a ManagerId field is a terrible choice, but that's neither here nor there).

The important thing here is that foreign keys are very common, and foreign keys pointing back to the same table are also very common.

But it can still go very wrong. Roman sends us this foreign key definition in a database they maintain.

ALTER TABLE [dbo].[ListingDetails]  WITH CHECK ADD  CONSTRAINT [FK_Listings_Listings] FOREIGN KEY([Id])
REFERENCES [dbo].[ListingDetails] ([Id])

This ensures that the ListingDetails table's Id field is a foreign key over to the ListingDetails table's Id field. A field is a foreign key back to itself.

Roman writes: "I can't believe SQL Server even allows this..."

I can. While I haven't personally tried this out, a bit of cursory searching implies that this does actually work- the record satisfies its own constraint, so you can still add it to the database. It's basically a no-op, which isn't great, but it's not SQL Server's job to ensure you keep all your toes because they've removed all the footguns.

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

11:42

Critical security vulnerability affects OpenSSH on Alpine Linux systems [LWN.net]

Version 10.6p2 of OpenSSH has been released with a workaround for a critical vulnerability that affects Linux systems that use musl libc with PAM disabled, such as Alpine Linux. OpenSSH developer Damien Miller said:

If you operate a Linux system that uses musl libc without PAM (Alpine Linux is one example) then stop reading and set PasswordAuthentication=no or disable SSH for these systems IMMEDIATELY.

This vulnerability does not exist on non-Linux systems, Linux/glibc systems and Linux systems that use PAM for password authentication.

We consider the root cause of this bug to be outside OpenSSH itself, but we're in a good position to deliver a mitigation quickly.

The Alpine Linux project has announced that it will be backporting the OpenSSH fix "all the way back to Alpine 3.16", which was released in May 2022.

Grrl Power #1510 – Green Striiiiide [Grrl Power]

There’s no reason the broadcast of the UCBA couldn’t do dramatic finales in multiple angles and in slow-mo. They have a zillion micro-drones all over the battlefield. The live feed might be limited in the slow-mo stuff only because something else dramatic could happen immediately after the first dramatic thing. But the feed probably has a dozen PiP options, plus you can customize your feed to follow a certain contender, since there’s at least 4 different fights going on at the start of each match. The feed that Sydney and co. are watching (and us) is the “official” feed with curated camera angles and is what the Gail and Bluce are working from.

Besides, anime used to be replete with the 1, 2, 3, SLASH trope. I’m thinking specifically of the ending of Wicked City where the ninja girl gets preggers powers, because of course she does. But that’s hardly the only example. I don’t know if it’s that much of an anime trope these days though. My anime intake lately is much lower than it used to be, mostly because I got my start with it in college… Well, probably Harmony Gold Robotech was my first real bit of exposure to it beyond Voltron/Ultraman/Speed Racer, but anyway, I think I kind of reached my saturation level a while back.

I think the two shows that finally really bored me away from the genre was me trying to watch Bleach, and I think toward the end of the first season, the “Hah hah, I have defeated you!” / Hero flexes his antagonist gland extra hard and finds a hitherto unknown source of power then one-shots the boss, who then goes, “What!? That’s impossible! Noooooo! >dead<” And it was like anime plot paint by numbers. I was like, “Oh my god, I have already seen this exact same thing 87 times!”

The other one was me trying to watch Naruto. I enjoyed the humor, I vaguely recall being amused by the pink-haired girl being closet-boy-crazy? Am I remembering that right? But the fights. God damn, every fight was like, “I’m going to throw a punch now, but first, let’s do a 20 minute flashback to show how I learned this punch.” Like the whole first season, they only got through about 4 fights, because every fight took 4 episodes? I’m being hyperbolic, but again, I decided I didn’t have the patience for it at the time. The only reason I was watching it in the first place was because for about three consecutive A-Kons, like half the cosplayers there were dressed as Naruto characters, and I was keenly aware my Anime literacy was falling way behind. So I gave it a shot, but unfortunately I was all Shonened out.

I’ve hardly sworn off anime, but I have less time to watch it these days, and I can really only watch dubbed stuff because I can’t draw and read subtitles at the same time. In the last few years, all I’ve watched is Delicious in Dungeon, Saiki K, a few years back, which was fairly amusing. Komi Can’t Communicate… Oh, I watched the first two seasons of My Hero Academia, which I recall liking mostly. Does Aggretsuko count?

I really need to watch Frieren. The only thing I know about that show is from the pictures I’ve seen Frieren online, and they mostly involve her… >cough< interacting with Mimics.

My favorite thing I’ve watched recently was My Dress Up Darling, which has a fantastic dub, IMO. Though I wish the main character would get therapy instead of spiraling into depression for 3 and a half minutes every episode because ten years ago a girl told him he was dumb for liking dolls. It’s just a little embarrassing to try and show an anime to someone who isn’t already saturated in the culture and having to sheepishly explain that the Japanese don’t know how to write… emotions? Or at least western-style emotions? Is that a thing? But the rest of the show is amusing, I promise!

Look, it’s… when an anime character is sad, and not just “comical spray of tears” sad, you all know the exact sequence that’s going to happen. Head down, tears running down cheeks, and a lot of murmuring/whispering. Then they pop to their feet and scream until they wind down with the trail-off scream. I don’t know, maybe that’s how Japanese people act? I hope it’s just a wildly overused trope of Japanese media, cause it doesn’t seem healthy, and it’s not how any human I’ve ever met acts. So I get self-conscious when I show someone a thing I like and there’s this weird recurring bit in it, and I reflexively feel the need to apologize for? Anyone else get like that?

ANYWAY.

Green Strider gets the triple angle deathblow, which is fair, since he blowed up a spaceship with a single sword strike.


Here you go, a brand new vote incentive. Featuring the least sexy character in the comic. No, I take that back, Cooter is the least sexy, but don’t expect a pinup of him anytime soon. Or ever. There is a nude version over at Patreon. Note I didn’t say NSFW. She is nude in those picture, and she does identify as female, but it’s… hard to tell. She is a humanoid aberration by D&D terminology, not a mammal. And before you ask, no, I don’t know how many vertebrae she has in her neck.

 


Double res version will be posted over at Patreon. Feel free to contribute as much as you like.

10:49

George Washington’s error [Seth's Blog]

In his farewell address, he said, “Our detached and distant situation invites and enables us to pursue a different course.”

It’s easy to fall in love with the idea that we live in a detached and distant situation. To imagine that culture and society and events out there have no impact on the lives we live.

The coal plant across the country, the goings on in the CEO’s office, the impact of tech on our culture… none of them are very far away. We have more leverage and connection than we want to admit.

Insulation is scarce. Technology, the competition and the shifts in media come for us, whether we seek them out or not.

It doesn’t pay to fret about things we can’t influence, but we might be able to influence more than we realize.

Perhaps isolation was useful for George. It’s clearly not true now.

09:21

Pluralistic: Without CDA 230, Facebook will own the internet forever (05 Nov 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



A hand-tinted black and white photo of a nighttime outdoor square dance in the 1930s. In the center of the dancers stands a rampant demon from a 16th C grimoire, about to pounce on the revelers.

Without CDA 230, Facebook will own the internet forever (permalink)

The road to hell is paved with the depraved indifference to badly considered tech policy. The internet is one of those charismatic hyperobjects that wraps around our lives in myriad ways, so tech policy changes have a big blast radius.

This isn't a counsel of despair. I firmly believe that we can make tech policy, and furthermore, that we must, but that policy has to be crafted in a way that's mindful of collateral damage.

Take scraping. Most creative workers are rightly furious at the palpable glee of tech bosses, who want to take everything we've made in order to train models whose express purpose is to destroy our livelihoods and transfer our wages to AI companies and the media companies they sell to.

This is an entirely correct thing to be angry about. But many of my peers and comrades think the answer to this is to ban scraping, which is a terrible idea.

Scraping is how we make search engines. If you want Google to be the last search engine we ever get then by all means, change the rules so you need licenses to make transient copies of the web. There's only one company with deep-enough pockets to secure permission from every web site operator: Google, the thrice-convicted monopolist that dominates the web so thoroughly that no one could afford to turn them down.

Scraping is how we glue down the web's shifting sands. If you want to understand why the web says something today, it helps to know what it said yesterday. If we want to know how Zuck and Musk's algorithms are peddling disinformation and hatred, we need to be able to scrape their feeds. If we want to know how Amazon uses surveillance data to price-gouge shoppers, we need to scrape its prices. If we want to know how Uber cheats its most economically desperate drivers with lowball wage offers, we need to scrape its job listings.

(It's possible to make a scraper that's so clumsy or aggressive that it crashes or destroys websites. That's a dick move. We should find people who do that and punish them; and the thing we should punish them for is trashing websites – not making transient copies of the data on those sites.)

(If you want to protect creative livelihoods from AI bosses, the answer lies in labor organizing, not more copyright:)

https://pluralistic.net/2024/06/21/off-the-menu/#universally-loathed

The point is that while tech bosses are some of the worst, most eminently guillotineable monsters history has produced, tech is important to the lives of billions of perfectly nice people. If you let your rage at tech bosses overwhelm your care for those everyday people, you risk coming up with "punishments" that end up benefiting Big Tech and wrecking the lives of those normal users.

For example: you may have heard people insist that we can solve our problems with Big Tech by "repealing Section 230." This is a reference to section 230 of the Communications Decency Act, a 26-word law that makes users responsible for their speech, while insulating the platforms that facilitate that speech from liability:

https://www.techdirt.com/2020/06/23/hello-youve-been-referred-here-because-youre-wrong-about-section-230-communications-decency-act/

Here's what that means: say one user accuses another user of violating their rights through their words (libelling them, invading their privacy, etc). The wronged party can sue the person they're accusing of harming them, but they can't sue the social media platform, message board provider, hosting company, DNS provider (etc etc) for their role in hosting and transmitting the unlawful speech.

At the same time, CDA 230 allows all these "intermediaries" (social media platforms, hosting companies, message board providers, etc etc) to take down or otherwise moderate content that they deem offensive, without creating an obligation to police all of their users' speech.

CDA 230 grew out of lawsuits in the 1990s where online companies that took any action to remove offensive or unlawful speech were thereafter obliged to take down all unlawful speech. The lawfulness or unlawfulness of speech isn't something you can easily determine: for example, determining whether one user libeled another user requires that you find out whether the allegedly libelous speech is true. There's no way that a forum moderator can know that – it's the kind of thing you need a judge, a jury and a trial to figure out.

The result of these lawsuits was that most platforms decided they wouldn't take down any speech (so as to avoid creating an obligation to police all user speech), while a minority of platforms simply removed anything that anyone might find offensive. It was a mess:

https://en.wikipedia.org/wiki/Stratton_Oakmont,_Inc._v._Prodigy_Services_Co.

CDA 230 fixed that. CDA 230 is how an individual or a small organization can host its own Mastodon or Bluesky servers, its own message boards, etc. It's these "smallhosts" that are the primary beneficiaries of CDA 230, not the Big Tech companies that 230's opponents hope to target by reforming or repealing 230.

Big Tech would be happy to see CDA 230 repealed. Mark Zuckerberg has repeatedly called for CDA 230 to be deleted, because he thinks that Meta could hire enough moderators (or use enough AI) that they could avoid being ensnared in a lot of frivolous litigation, and when legal threats did land, Zuck's army of lawyers could readily see them off:

https://cepr.net/publications/repealing-section-230-giving-mark-zuckerberg-what-he-wants/

Big Tech's biggest fear isn't a repeal of CDA 230: it's mass defection of its users to smaller, independent services that are more responsive to users' needs. Zuck doesn't care if we get a new law that would make it impossible for another #MeToo to take off!

This is on my mind this week because of the way that intermediary liability has nearly destroyed an online community that I helped found, way back in the early 1990s.

The community is a small arts organization that I joined as a teenager. The organization sent out a quarterly newsletter, which I devoured as soon as it arrived in my mailbox. I wanted more! A few years in, I had the idea of setting up an email list for the org. Another member had access to a server where we could host the list, and now, more than 30 years later, that list is still going strong.

Now, every small community has its cranks and trolls, and this one is no exception. One member in particular has a well-earned reputation for flying off the handle, showering anyone who disagrees with them with furious and obscene abuse (I've been on the receiving end of this abuse myself). Unsurprisingly, this person is also an inveterate culture warrior who can be relied upon to troll anyone who brings up racial or gender issues. When this trolling draws the inevitable critical response, this person then reverts to form, showering their critics with abuse and profanity.

The list is moderated, and the organization's code of conduct is used as a framework for the moderators' calls. Like most codes of conduct, this org's CoC includes some generalities that leave room for interpretation (basically, "Don't be a dick").

A moderation policy that allows the moderators to sanction users for flaming each other and a user who picks fights and then launches into unhinged tirades at the mildest of criticisms were always going to collide, and that's what happened with this user. After picking a fight over racist language, this user posted a bunch of racial epithets and got sanctioned for posting racist language.

That's when the user sued the organization's volunteer board members for libel for implying that they were racist, seeking tens of thousands of dollars in damages, far in excess of the org's cash reserves. The org stepped in to defend its board members, and even though this trollish member quickly folded their legal threat, mounting just that initial defense incinerated a sizable fraction of the org's total assets.

This is the thing that CDA 230 was designed to prevent. Even spurious legal threats can wipe out small, volunteer-run communities. In the 30 years since I founded this list, there have been a couple times when members tried to convince the organization to move it to Facebook or another Big Tech platform. Each time, the rest of us were able to rebuff those efforts, and today the list continues to be independently operated.

If this one belligerent jerk had held out for just a little longer, that would have been the end of this community – not just the mailing list, but the organization itself.

We can't have an indieweb without limited liability for intermediaries. Repealing CDA 230 won't hurt Facebook – it will just force every independent community to move there.


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 Dutch cops bombard stolen phones with SMSes https://web.archive.org/web/20011106210234/https://www.newsbytes.com/news/01/171836.html

#20yrsago Levy’s Perfect Thing: eye-opening iPod book https://memex.craphound.com/2006/11/05/levys-perfect-thing-eye-opening-ipod-book/

#20yrsago Army recruiters to students: “Iraq war is over” https://abcnews.com/GMA/story?id=2626032&page=1

#15yrsago Occupier/Army Ranger in ICU: Oakland PD “jumped me” https://www.reuters.com/article/2011/11/04/us-protests-oakland-veteran-idUSTRE7A37A820111104/

#15yrsago Prisoner’s toothpick replicas of Final Fantasy weapons https://web.archive.org/web/20111105071751/https://www.geekosystem.com/prisoner-builds-final-fantasy-swords-matchsticks/

#10yrsago Canadians are getting “blackmailed” by US copyright trolls https://www.cbc.ca/news/business/copyright-infringement-notice-canada-piracy-1.3831492

#10yrsago Eleanor & Park: a terrifying YA romance that has rescued its readers and frightened their parents https://memex.craphound.com/2016/11/05/eleanor-park-a-terrifying-ya-romance-that-has-rescued-its-readers-and-frightened-their-parents/

#10yrsago Chrome is about to start warning users that non-HTTPS sites are insecure https://www.wired.com/2016/11/googles-chrome-hackers-flip-webs-security-model/

#10yrsago Rebecca Solnit’s open letter to Trump: You should really visit New York some time https://lithub.com/new-york-city-is-a-book-conservatives-should-read/

#10yrsago The New York Times’s GOP voter-suppression retrogame: “The Voter Suppression Trail” https://www.nytimes.com/interactive/2016/11/01/opinion/voting-suppression-videogame.html

#10yrsago Toronto Star compiles a comprehensive list of Trump’s election-season lies https://web.archive.org/web/20161105070153/https://www.thestar.com/news/world/uselection/2016/11/04/donald-trump-the-unauthorized-database-of-false-things.html

#1yrago "Science Comics Computers: How Digital Hardware Works" https://pluralistic.net/2025/11/05/xor-xand-xnor-nand-nor/#brawniac


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: 511 (32924 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

07:14

John Goerzen: Letter from a Kansan: “Would You Rather Be Right or Happy?” [Planet Debian]

As a person that has lived in Kansas almost all my life, I have never seen such good political news for this state as we got this week. It is a stunning rebuke of fascism from across the country.

One of the many pieces of wisdom from mechanic Tom Magliozzi is this question: “Would you rather be right, or happy?” He often asked it in the context of somebody that had just won an argument.

This is my plea to all our progressive friends: remember that question, and keep it in mind carefully over the next 2 years. We can either build on this momentum for an even bigger victory in 2028, or we can start to lose this unique coalition.

Kansans spend our lives being misunderstood and forgotten.

Many of us, myself included, visit large cities regularly.

It is a more surprising event when someone from a large city drives down one of our dirt roads. The kind of road that leaves your car covered in mud when you drive your daughter to school. The kind of road that we drive on for 3 miles before we reach the nearest paved road.

Statisticians label Topeka, the capital of Kansas and city of 126,000 people, as rural.

The nearst town to me, 7 miles away, has a population of 600. In winter, many people here still leave their keys in their running, unlocked cars while they run into the grocery store. The person at the bank, the owner of the grocery store, the mechanic, the electricians, the builders, the people that run the local museum, all know my name and recognize me. Not because I’m famous locally, but because this is normal here. We are a community, a real one.

Yet I’ve lost long-time friends, especially from the west coast, because, while I’m progressive, I still talk to Republicans. They thought Republicans are so evil, they ought to be shunned and ostracized.

It probably doesn’t compute to a San Franciscan what it means to live in a county that went 80% for Trump one time. A county of about 10,000 people living in a space larger than Los Angeles, New York, and San Jose — combined. (Those cities have a combined population of about 13 million, living on the same amount of land as 10,000 people do out here.)

If I avoided talking to Republicans, it wouldn’t be them that would be isolated. It would be me.

Out here, many of us have lived with each other for generations. We may go on living with them for generations. If somebody’s car is stuck in the mud, the first person that comes by with a truck and a rope will probably pull them out. Nobody asks who you voted for. This is what you do for neighbors, because neighbors are humans, and next time it might be me that’s stuck in the mud.

I can be as incensed as anyone else about what the fascists are doing. I don’t have direct knowledge of how a lot of people vote. But I take a deep breath sometimes and remind myself: these are my neighbors. I’ve seen them go out of their way to be kind and generous with all walks of humanity. (Yes, even whatever groups you’re imaginging to argue with me about.)

This is part of how Adam Hamilton defeated Roger Marshal. The anti-Trump sentiment wasn’t enough on its own. Lifelong Republicans dissatisfied with how Trump handled things weren’t just going to vote for any Democrat. They needed someone that was safe. Someone that talked to them as humans. Someone that respected them.

Adam Hamilton went and shook hands with MAGA protestors at his events. He told them “I want to be your senator, too.”

This is how you win over the most strident of Republicans. Hamilton didn’t compromise his beliefs. He invited discussion about them.

I have already been seeing some progressives say things like, “Don’t cut them any slack. Remember how many times people voted for fascism! They need to still be ostracized.”

That, folks, is the way we lose. It is the wrong strategy everywhere. And it is especially culturally wrong in the close-knit communities — again, actual communities where people know each other and have for years — that make up the heartland.

Building relationships with people different than us is our best chance to build on this coalition. And, isn’t that what progressive values call for?

So, celebrate this victory. Clap for all the activists that made it happen.

And, before you set off to alienate your new and tentative allies, ask yourself:

“Would I rather be right? Or win again?”

03:21

Thread Count [QC RSS v2]

hate it when I become hyper-aware of something

01:56

automake-1.19.94 released [alpha] [Planet GNU]

This is to announce automake-1.19.94, a alpha release.

It is the second pre-release for the upcoming Automake 1.20.  Please consider doing us a favour and testing it on different platforms.

This release brings important bug-fixes that resolve some
long-standing limitations and adds minor new features to automake.

There have been 95 commits by 3 people in the 8 weeks since 1.19.

See the NEWS below for a brief summary.

Thanks to everyone who has contributed!
The following people contributed changes to this release:

  Kamila Szewczyk (90)
  Karl Berry (4)
  Paul Eggert (1)

Kamila
 [on behalf of the automake maintainers]
==================================================================


See below for the detailed list of changes since the
previous version, as summarized by the NEWS file.

Download here:

  https://alpha.gnu ... ke-1.19.94.tar.gz
  https://alpha.gnu ... ke-1.19.94.tar.xz

Please report bugs and problems to <bug-automake@gnu.org>
(instead of replying to this mail),
and send general comments and feedback to <automake@gnu.org>,
and patches to <automake-patches@gnu.org>.

Thanks to everyone who has reported problems, contributed
patches, and helped test Automake!

-*-*-*-

If you install this test release in its own prefix (recommended)
and you use libtool, you'll need to arrange for the libtool m4 files
to be found by aclocal. For info on this, see:
 
https://gnu.org/s ... TOOL-is-undefined

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
New in 1.20 (????-??-??):

  • Licensing


  - Automake is now licensed under the GNU General Public License version 3
    or later (GPLv3+), matching Autoconf and following the Free Software
    Foundation's recommendation to use GPLv3 or later:
      https://www.gnu.o ... oftware/autoconf/
      https://www.gnu.o ... ommendations.html
      https://www.gnu.o ... ms-why-gplv3.html

    Existing exceptions for distributed support files remain in place.
    This does not change the licensing of generated Makefile.in files
    or require packages using Automake to adopt the GPL.

  • New features added


  - New configure option --enable-jobserver lets compilers and linkers
    inherit GNU make's pipe jobserver, for example for GCC's
    -flto=jobserver.  Dry-run, question, and touch modes still do not
    run these commands.  (bug #45756)

  - New option delete-on-error.  It emits the .DELETE_ON_ERROR special
    target in the generated Makefile.in, instructing GNU make to delete
    the target when its recipe fails after having modified it.  A failed
    rule like `foo.h: gen.sh; ./gen.sh > $@' then no longer leaves a
    truncated result that later runs of make treat as up to date.  Other
    make programs do not support this, so the option will have no effect.

  - New target print-distfiles lists the files that "make dist" would
    distribute.

  • Source tree organization


  - Historical ChangeLogs, development plans, and NEWS-future are now
    under attic/.  The experimental contrib/tap-driver.pl is retained
    in attic/testing/; the maintained TAP driver is lib/tap-driver.sh.
    The manual's link checker moved from contrib/ to maintainer/.

  • Changes to Automake-generated Makefiles


  - distcheck no longer runs "make dvi" by default, so TeX is not needed
    to check a distribution containing Texinfo manuals.  Set
    AM_DISTCHECK_DVI_TARGET in Makefile.am to, e.g., dvi, pdf or html,
    to check that the documentation can be built.  (bug #79053)

  • Bugs fixed


  - Repeated target declarations in overlapping Automake conditionals no
    longer produce spurious redefinition warnings when adding prerequisites.
    (bug #13940)

  - Dependencies on another target's objects in LIBADD or LDADD are now
    tracked regardless of the order in which targets are processed.
    (bug #60508)

  - distcheck now detects symbolic links left in the installation tree
    after uninstall, including dangling links.

  - lex and yacc output files distributed from a VPATH build no longer carry
    "#line" directives pointing to their sources through the build-time
    srcdir, e.g. "../src/parse.y"; the distributed copies now refer to
    the sources next to them.  (bug #39666)

  - dist-zstd now honors numeric ZSTD_CLEVEL values, such as 3, instead
    of treating them as input filenames.  This fixes failed or incorrect
    distribution archives when ZSTD_CLEVEL is set.

  - lex and yacc rules now create output directories before generating
    sources, fixing out-of-tree builds with subdir-objects and
    --disable-dependency-tracking.  (bug #27188, Debian bug #807050)

  - configure now refuses a source directory path containing '<', '>',
    '(' or ')'.  These could be interpreted as shell redirections or
    syntax in compiler commands, potentially overwriting files in the
    build directory.

  - configure now refuses a source directory path ($srcdir) containing
    ';' or '|', reporting "unsafe srcdir value", as it already did for
    characters such as '$' and '&'.  Such a path used to fail later
    with misleading errors, from config.status's dependency-tracking
    setup or from make ("No rule to make target").  These characters
    remain accepted when $srcdir is '.'.

  - Non-recursive Vala builds now pass distcheck when generated Vala
    sources trigger recompilation in the build directory.  Generated C
    files are moved into their subdirectories together, and build-tree
    stamp files are removed by distclean.  (bug #76527)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Here is the GNU automake home page:
    https://gnu. ... /s/automake/

Here are the compressed sources:
  https://alpha.gnu ... ke-1.19.94.tar.gz   (2.5MB)
  https://alpha.gnu ... ke-1.19.94.tar.xz   (1.7MB)

Here are the GPG detached signatures:
  https://alpha.gnu ... .19.94.tar.gz.sig
  https://alpha.gnu ... .19.94.tar.xz.sig

Use a mirror for higher download bandwidth:
  https://www.gnu.o ... rg/order/ftp.html

Here are the SHA256 and SHA3-256 checksums:

  File: automake-1.19.94.tar.gz
  SHA256 sum: b550d1eab9a5881949aff503ef50056c5c2f04f527c5f00ca2fb7d52acfe9f92
  SHA3-256 sum: d89c81e5b9e75fcef15a91d138b6f95209e6ff10eb9ef6b5b2142220bc6b7d19

  File: automake-1.19.94.tar.xz
  SHA256 sum: db6b4a816c086eb51b537c87ad1990b1a640de11df02a87c0df656d72dae255c
  SHA3-256 sum: 863782e6b1d32052e2556c18a154022d38a984a6f2c8200ebeb7250ff38eda4b

Verify the SHA256 checksum with either sha256sum, sha256, or
'shasum -a 256'.

Verify the SHA3-256 checksum with 'cksum -a sha3 -l 256'
from coreutils-9.8.

Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify automake-1.19.94.tar.gz.sig automake-1.19.94.tar.gz

The signature should match the fingerprint of the following key:

  pub   rsa4096 2022-07-31 [C]
        6C22 2EA6 B2BD 216A A406  516A C868 F0B6 DE38 409D
  uid   Kamila Szewczyk <k@iczelia.net>
  uid   Kamila Szewczyk <szewczyk@cs.uni-saarland.de>
  uid   Kamila Szewczyk <iczelia@gnu.org>
  uid   Kamila Szewczyk <szewczyk@math.uni-sb.de>

If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to retrieve
or refresh it, and then rerun the 'gpg --verify' command.

  gpg --recv-keys 6C222EA6B2BD216AA406516AC868F0B6DE38409D

As a last resort to find the key, you can try the official GNU
keyring:

  wget -q https://ftp.gnu.o ... u/gnu-keyring.gpg
  gpg --keyring gnu-keyring.gpg --verify automake-1.19.94.tar.gz.sig automake-1.19.94.tar.gz

This release is based on the automake git repository, available as

  git clone https://https.git ... /git/automake.git

with commit 69b6c65e706ad089f076ebaf8b84fca4170c6cce tagged as v1.19.94.

For a summary of changes and contributors, see:

 
https://gitweb.gi ... ortlog;h=v1.19.94

or run this command from a git-cloned automake directory:

  git shortlog v1.19..v1.19.94

--
With Valediction,
Kamila Szewczyk (https:// ... elia.net)

01:14

[$] LWN.net Weekly Edition for November 5, 2026 [LWN.net]

Inside this week's LWN.net Weekly Edition:

  • Front: Kernel cells; Debian LLM reviews; glibc system-call wrappers; Binder in Rust; Kernel CVE flood; Fedora KDE and X11 removal; 7.4 merge window part two; Portable Python.
  • Briefs: MTCP RCE; Bash security; XCPE botnet; Bazzite 45; Fedora 45; openSUSE Leap 16.1; Tor Browser 16.0; Quotes; ...
  • Announcements: Newsletters, conferences, security updates, patches, and more.

00:14

Page 12 [Flipside]

Page 12 is done.

Wednesday, 04 November

23:28

NetBSD 11.1 released [OSnews]

The first point release for NetBSD 11 has been released. As the version number suggests, there’s no major changes here.

This release includes security updates for mozilla-rootcerts, brotli, xorg-server, hdaudio(4), compat_linux(8), unbound(8), and ipfilter.

Among the non-security related changes are improved USB device stability on Raspberry Pi, fixed hot-plugging bugs in various USB Wi-Fi drivers, support for battery monitoring on the Microsoft Surface Go 3, fixed thread-local storage on ARMv5, fixes for running the MIPS Malta and PA-RISC ports under QEMU, support for the Zhaoxin KX-7000 CPU, and support for sensors, i2c, real-time clocks, and fan control on Sun Ultra 25/45 and Sun Fire V215/V245 machines.

↫ Nia Alarie on the NetBSD blog

The full release notes provide more details.

“Why don’t we run the taskbar and Task Manager at high priority, so they can remain responsive?” [OSnews]

Another interesting post from Raymond Chen, this time about the difficulty of dealing with a system that’s become CPU-starved. The question is simple: why not just run Task Manager and important parts of the UI like the taskbar at a higher priority?

The catch with running anything at high priority is that unless you have been very careful to avoid it, you will eventually run into a shared resource that you will have to wait for, and you are now stuck. Your priority checkout pass gets you to the front of the line, but if the person at the register has a large shopping cart full of groceries, you just have to wait until they are done before you get your chance.

Even if the code that protects the shared resource is careful to avoid priority inversion by transferring the priority of the waiter to the thread that owns the resource, you are still stuck waiting, and that owning thread might be doing something that takes a long time, like, say, accessing a file over the network.

↫ Raymond Chen

If a system has reached a state where even accessing or using something like a task manager becomes a problem, I personally just bonk my computer over the head with a forced shutdown using the power button. Honestly though, I can’t remember the last time I’ve had to do this, as my Linux machines all seem to handle problematic applications just fine. That being said, I’m sure people managing tons of servers and/or workstations and developers debugging their own running code run into catastrophic problems like this far more often, making forced shutdowns not as practical.

Have a terminal window open with top and easy access to the kill command, or make sure you can just ssh into it remotely if the UI has gone completely nuts.

22:42

There are things with ranks, but it’s not always clear what the ranks mean [The Old New Thing]

There are a number of features in Windows that establish an order by a thing called a “rank”. Unfortunately, the documentation for them doesn’t always tell you what rank actually means. Does a higher rank take priority over a lower rank?

I started with SQL Server. In the documentation page Limit search results with RANK, it opens by telling you that higher ranks mean better matches, or at least that lower ranks mean worse matches, which is basically the same thing:

The CONTAINSTABLE and FREETEXTTABLE functions return a column named RANK that contains ordinal values from 0 through 1,000 (rank values). These values rank the rows according to how well they match the selection criteria. The rank values indicate only a relative order of relevance of the rows in the result set, with a lower value indicating lower relevance. The actual values are unimportant and typically differ each time the query runs.

It says that lower ranks are poorer-quality matches, so this implies that higher quality matches have higher ranks.

This “higher is better” is made more explicitly on the the RANK of a query result is a value that increases as the match quality improves: Query with Full-Text Search page:

The higher the rank value of the text or document in a row, the more relevant the row is for the given full-text query.

Okay, so that’s SQL Server. Good job, SQL Server.

The Windows Package Graph also has the concept of rank. And here the documentation is less helpful.

The rank parameter to the Add­Package­Dependency function is documented as

The rank to use to add the resolved package to the caller’s package graph. For more information, see the remarks.

If you go down to the remarks, the only mention of rank is

If multiple packages are present in the package graph with the same rank as the call to Add­Package­Dependency, the resolved package is (by default) added after others of the same rank. To add a package before others of the same rank, specify Add­Package­Dependency­Options_Prepend­If­Rank­Collision for the options parameter.

That’s nice, but it doesn’t tell me whether packages are searched from low rank to high, or from high rank to low. All I know is that if I want to be considered ahead of others of the same rank, I should pass this special flag; otherwise by default I am considered after others of the same rank. But it doesn’t say whether I am considered ahead of or after other packages with different ranks.

There is a “For more information” that takes me to the Using the Dynamic Dependency API page, but the only mention of rank is

When you call this API, you must pass in the dependency ID that was returned when you created the install-time reference, and the desired rank to use for the MSIX package in the process’s package graph.

So it tells me that I have to pass a rank, but it doesn’t tell me what the rank means.

Okay, maybe I can get a clue from another API in the Windows App SDK: The Rank property on the WidgetInfo class. Let’s see what that says.

An integer specifying the relative rank of the widget. Smaller values are ranked higher than lower values.

Okay, so I learn that ranks are relative rather than absolute values. But that second sentence makes no sense: It says that smaller values are treated differently from lower values. Huh? What’s the difference between a “smaller value” and a “lower value”? And what does “higher” rank mean anyway?

Unfortunately, the Widget sample doesn’t use the Rank property, so I still don’t know.

This is just another example of the principle that “The person who understands the feature the best is often the person least qualified to explain it.” They know what the rank is. They’ve been working with ranks for months. To them, ranks are so obvious and intuitive that they don’t need an explanation.

Bonus chatter: I contacted a colleague who works on the package graph, who explained to me how it works and also lamented how the information provided to the documentation team somehow got garbled along the way. (And put fixing it onto the backlog.)

The missing sentence is

Packages are searched in ascending rank.

In other words, at least for the package graph, lower ranks have precedence over higher ranks.

A process’s package graph is an ordered list of packages and is initially empty.

If the process has declared dependencies, then all of those packages are added to the package graph with rank zero, in the order described by static package dependency resolution algorithm.

Once that initial package graph is established, you can manually modify the graph by calling Add­Package­Dependency and Remove­Package­Dependency. When you add a package to the package graph, it is inserted into the graph after all the packages with lower rank and before all the packages with higher rank. By default, it also goes after all the packages with the same rank, but you can override this with Add­Package­Dependency­Options_Prepend­If­Rank­Collision, which will put it in front of all the packages with the same rank.

In the package graph, the rank is a signed integer, so you can use a negative rank to go in front of the static package dependencies.

Bonus bonus chatter: In the world of filter drivers, the applicable term is altitude, and the meaning is quite clearly spelled out:

The altitude is an infinite-precision string interpreted as a decimal number. A filter driver that has a low numerical altitude is loaded into the I/O stack below a filter driver that has a higher numerical value.

The post There are things with ranks, but it’s not always clear what the ranks mean appeared first on The Old New Thing.

“Jailbreaking my car’s navigation system just so I can change the time” [OSnews]

What if you want to change the time in your car’s infotainment system, but it’s so locked down that you can’t even open the time settings menu without a very specific, DRM’d SD card? Well, you try to jailbreak it, of course, but the amount of effort required can kind of spiral out of control. And then, all the way at the end, it’s just an offset.

The first thing I did was use this to create a full backup of the internal eMMC using dd. With a more complete dump of the system, I pretty quickly figured out that the date & time settings that I’m interested in are in /mnt/flash/settings.dat, which is a custom binary format. After some more reverse engineering, it turned out the unit doesn’t really have a concept of timezones at all. It gets the time from GPS and stores the local offset as a number of minutes. Mine was set to 180.

I changed it to 120.

That is how I was finally able to fix my car’s timezone.

↫ Rasmus Moorats

This harrowing story involved an older car – a 2014 Renault Latitude – but with the number of screens and the amount of user-facing software only increasing every year, requiring jailbreaks to get your car to do what you want it to do are only going to become more common. I wouldn’t be surprised if whole generations of cars are going to become much harder to sell in the near future, cratering the used market, because people are not willing to put up with software problems nobody wants to or can fix.

He just wanted to change the goddamn time.

22:07

Resonant Computing and Common Fabric [Radar]

This event summary was created by Claude with editing by Tim O’Reilly, based on a transcript of the conversation.

Alex Komoroske is the CEO and a cofounder of Common Fabric, a public benefit corporation building the infrastructure for human-centric agentic computing. He spent more than a decade at Google as a product manager and director of product management on Chrome, Google Maps, and Google Earth, and he later ran corporate strategy at Stripe. At O’Reilly’s AI Codecon a year earlier, in a talk called “Why Centralized AI Is Not Our Inevitable Future,” he argued that we were sleepwalking into the wrong future for AI and didn’t have to accept it. Since then he has coauthored the Resonant Computing Manifesto, which Tim signed.

On Tuesday, October 20, 2026, Tim O’Reilly hosted Alex for an hour-long conversation, “Can We Build More-Human Technology?” Common Fabric’s consumer product hasn’t yet been released, but Alex showed Tim the product privately the day before, and Tim said his conversations with Alex had left him “more optimistic about the future of the web and the AI future than I’ve been in a long time.” They talked about the underlying theory behind Common Fabric.

The Resonant Computing Manifesto

The Resonant Computing Manifesto lays out five principles for resonant technology. It is private, meaning you’re the steward of your own data and it’s used in accordance with your wishes. It is dedicated, with no conflicts of interest. It is plural, with no central entity holding an unnecessary amount of power. It is adaptable, able to do things its creators didn’t specifically build in. And it is prosocial, helping people create meaning together rather than living as “individual islands.”

According to Alex, the manifesto rests on a distinction between two kinds of experience.

A hollow thing is something that you like when you’re using it, and then, after you’re done using it, you’re left feeling regret. And a resonant thing is something that you like when you’re using it, and then afterwards you’re left feeling nourished. They are superficially very similar, but they’re fundamentally, deeply, structurally different.

Alex argued that modern tech, business, and politics are very good at delivering hollow experiences efficiently and poor at delivering resonant ones. The manifesto came from a group of people who still believe in the hacker ethic of the 1990s and early 2000s, he said. They believe that technology is a large positive force for humanity, but also that the industry has spent the last decade optimizing for engagement and extraction, which has undermined that positive impact. They think that the AI transition is a unique opportunity to reset the norms and the architecture to make something that works better for people than for extractive business models.

Privacy, bits, and the physics of trust

Tim started out by asking Alex to go a bit deeper on privacy. Privacy and trust are related in ways the privacy movement often doesn’t consider, Tim said. We don’t put bars on all of our windows. We trust most people not to break in because we built a society where trust is the norm. It’s held in place not just by penalties but by social rewards for people who follow norms. “People will think you’re a creep if you go look into somebody’s window,” Tim noted. Like bars on the window, hard privacy seems to Tim a bit like an admission that we’re giving up on positive social norms and penalties for rulebreakers (where needed). He wanted to know whether Alex meant “private” in the way that HIPAA makes your healthcare records private, where your data is made hard for anyone to see, including you.

Alex doesn’t mean that at all. He means privacy that makes your data more useful by putting it under your control. He gave a three-part answer about how that happens. The first leg of the stool is what Helen Nissenbaum, a professor of information science at Cornell Tech, calls contextual integrity. What she means by that is that your data is used in line with your intentions and expectations, with no use that harms you, and no nasty surprises. Alex said it’s the best formulation of privacy he knows. Tim agreed.

The second part of Alex’s answer was that there are differences between atoms and bits. Arguing from game theory, Alex suggested that trust emerges when you expect to deal with the same person or entity again. In the physical world, you might be seen peering into someone’s window and shamed as a result. But “in the world of bits,” because the peeping is invisible, there are fewer immediate consequences, and “you can have a whole bunch of creepy companies peering through your window.” And because your data becomes more useful when combined with other data, there are much larger financial incentives to misbehave. (Tim would still argue that we also need to establish the right set of social norms and laws for regulating this bad behavior.)

The third point Alex made is that data is viral. It can be copied at full fidelity, instantly, for almost nothing, so once it’s out of your sight, it’s out of your control. The industry has relied on three inadequate mechanisms to address this: 1) terms of service nobody reads; 2) permission dialogs, which Alex called “responsibility-laundering dialogs” (He argued they ask an ill-posed question, whether you trust another entity, open-ended and forever, with your data. “I trusted 23andMe with my genetic data 10 years ago, and I sure as hell don’t trust them now,” he noted.); and 3) silos, where each app sees one slice of you. Spotify knows what you listen to and Strava knows when you work out, but neither knows which songs you like during a workout.

Alex said he respects Google, where he worked for many years, but he argued that it has little incentive to build much on your data beyond keeping you from leaving. His point was that “our data is kind of sitting there, not really working for us, and also not really on our turf,” and that this is the result of technical decisions the industry made rather than a law of nature.

Data that carries its own rules

Tim asked what makes Common Fabric different. A lot of people have espoused ideals like those of the Resonant Computing Manifesto, though perhaps in different words, but not much has changed. Alex replied that resonance is hard to build today because users spend their time on the software creator’s turf, doing what the software creator wants. Unless that structure changes, engagement-maxxing keeps emerging. Common Fabric goes down to lower layers and does something very different with the very structure of data. Alex said Steven Levy, writing about the manifesto for WIRED, had described what Common Fabric is working on as “resonant AF.”

Conceptually, in Common Fabric, every piece of data carries a metadata sidecar wherever it goes. In that sidecar, there are two things. One is cryptographic provenance: who did the last computation, the fingerprint of the software that did it, and what its inputs were, traceable all the way back. Alex said the math is similar to blockchains, but without a globally consistent, financialized ledger. The other is policy, the conditions under which the data may be declassified, now or in the future.

An open source runtime, which Alex called “the core reaction chamber” of Common  Fabric, enforces those policies. It receives a proposed graph of computation, made of untrusted code running on specific data with specific policies. If the computation is legal, the runtime runs it, updates the provenance chain, and tells everybody. If not, it stops with a descriptive error, for example because a network request could leak something derived from confidential data. You can run the runtime on your own machine, but most people won’t, so Common Fabric will run it in the cloud in trusted execution environments. These are hardware-isolated environments where the host can’t see inside and can prove cryptographically that it’s running the runtime unmodified.

Tim raised a worry from the history of security software. Early systems such as Kerberos were so complicated to set up and maintain that few people used them. Would this be a master console of access controls so complicated that nobody ever touches it? Alex said most users will never know how it works. To them it will simply be “the best way of using AI in their lives,” a digital home where their data, their collaborators, and their agents come together.

The software in that home is made of what Common Fabric calls patterns, small chunks of untrusted code. Alex stressed that he means “untrusted” in the security sense, which is good, because rather than meaning “not trustworthy,” it means “you don’t have to trust them.” Patterns are written in TypeScript and look much like React. (When the team asked LLMs what framework felt most natural to them, the models said React.) A pattern can do six things:

  1. It can do arbitrary computation.
  2. It can produce derived data, which persists and is available to other patterns. 
  3. It can produce UI for different contexts, such as dark mode or a preview chip, computed only when used. 
  4. It can make network requests if policy allows. (LLM calls are technically network requests.) 
  5. It can instantiate subpatterns fetched from anywhere on the internet, or written by an LLM on the fly. 
  6. It can wish for more data.

Alex walked through a wish. A meal-planning pattern wishes it knew the user’s favorite foods. In one pattern, the system might express this wish by asking an LLM to generate a simple text box for the user to fill in. Another pattern might look for notes tagged “favorite foods” or for the ingredients in recipes the user made in the last six months. Another might read through the user’s Gmail with an LLM and distill what they like to eat. Because the emails are confidential, the result is confidential too.

That pattern could have been written by a stranger and could still run proactively on your data, Alex said, because Common Fabric is designed so that the pattern’s author never sees your data and the pattern can’t use it against your expectations. Anyone can write new patterns (kind of like skills) and Common Fabric will surface the most popular ones for various tasks.

Type checking for your data’s rules

Tim asked Alex to slow down on this point, that you can give untrusted software access to your data because the data, not the software, decides what may be done with it. Alex replied that users will rarely think about policies. Users would choose default policies that are vouched for by people and organizations whose judgment they trust. For instance, he said “I trust Simon Willison. And Simon Willison will say, ‘I trust that repo right there.’”

Alex gave as an example a pattern that pulls your Gmail into Common Fabric. It uses an OAuth flow to get a token from Google. Anyone who has that token can read and send your email indefinitely. So the token is tagged with a policy “secret to google.com,” which specifies that the token should never be logged or shown on screen or sent anywhere that isn’t attested to be running the runtime, not even the user’s own browser. It may cross the network only over a secure connection to the origin that minted it, and only in the authorization header. Any pattern that looks at the token, or at anything derived from it, absorbs those policies permanently. “You can look at the OAuth token, but then you can never talk to anybody else ever again, basically.”

Tim said this sounds like the virality of GPL licenses. Alex agreed, and said that Mitchell Baker, the Mozilla cofounder, had made the same point to him a few weeks earlier.

The term of art in information-flow control is “taint,” (a term Alex joked he dislikes because people look at him funny when he uses it). Data is tainted when it has touched something confidential and so inherits that thing’s restrictions. The aim is to keep as little data tainted as possible so that network requests can still happen safely later. Common Fabric’s compiler untangles a pattern’s data flows so that code which only passes a token along gets a handle to it rather than the token itself, and stays untainted. Alex compared this to Rust’s borrow checker, which refuses to compile code that could theoretically have a data race. Human programmers find it a nag, and a slog.

But you know who doesn’t get impatient about that? LLMs. They don’t care. They’ll say, “Okay, cool. I’ll just make this tweak.”

There’s something different at work in the world.

This is the heart of Alex’s answer to Tim’s question about the risk that complexity will make the system unusable. Common Fabric’s taint checker nags in the same way as Rust’s borrow checker, and LLMs grind through it. “If this software compiles, it’s safe structurally,” Alex said. “You don’t know it’s useful, but you do know it’s safe.” Because it’s safe, the system can run patterns for people proactively and speculatively, without their installing anything, and then share more widely the ones people engage with. Alex said that kind of distribution isn’t possible under the trust model normal software uses.

Crappy patterns and dangerous patterns

Tim noted that the word “pattern” comes from Christopher Alexander’s A Pattern Language, the book about why some buildings and places work and others don’t. Alex added that the manifesto quotes Alexander directly, and that he considers resonance to be Alexander’s “quality without a name.” Tim recommended the book to anyone who hasn’t read it. He recalled patterns such as Alexander’s observation that balconies and porches less than six feet deep are rarely used, and his question of why people sit on stoops in some neighborhoods and not in others. Then he asked, “Won’t people just start making shitty patterns?”

Alex said they will. Most videos on TikTok are bad, and social sifting still brings the good ones to the top. He gave a stylized example of a ranking function. To decide whether to show images at the top of search results for a query, you can check how many people in the last 90 days searched for “images of” that term compared with the term alone, and show images above a threshold. The authentic behavior of a small group of savvy users tells you about quality for everyone else.

“I’m not worried about crappy patterns,” Alex said. “I’m worried about dangerous patterns.” He’s thinking about patterns that would misuse your data. And that’s what Common Fabric is designed to prevent. His example was the draft box in a chat app. Everyone assumes what you type is visible only to you until you hit send, and then only to the people in the chat. Nothing in today’s software structurally guarantees that, and on some marketing sites, the support agent can see what you type before you send it. In Common Fabric, a default policy could make the draft structurally confidential until the Send button is pressed and then declassify it to only the chat’s members. No chat app assembled from this pattern could behave otherwise.

Tim noted there will be a long period of discovering corner cases once the system is out in the wild. Alex said two surfaces must coevolve, the open-ended set of patterns and the policies, which is why trust delegation matters. As people find patterns that slip past common default policies, the policy sets need to evolve to meet the threat. He said he isn’t promising perfect security, which he called an asymptotic ideal. His claim was that for the same security budget, users can reach further.

Today, in the physics of trust we use, a more secure system requires putting yourself in a smaller and smaller and smaller box. What if, instead, a more secure system puts you on a taller and taller platform, allowing you to reach much further?

People won’t come for the security model, he said. They’ll come because they can do much more with AI and with collaborators than other software allows, and the security model is the reason that isn’t creepy or dangerous.

Where’s all the new software?

Tim brought up a question he has written about previously. When a new technology arrives, at first people can see only the old one. When the web came along, Marc Andreessen talked about Netscape becoming the next Windows, and even open source developers talked about a Linux desktop and an open source Photoshop, while the real action was people making entirely new things with the web. With AI, Tim said, we hear about a world of infinite software, but he hasn’t seen many accounts of wonderful new things people have built. Mostly he hears about dark factories that help people get more productive at what they already did. People talk about the tooling but not what they built with it. Patterns, he said, gave him a taste of what infinite software might really be.

Alex said software today orbits corporations, when it should orbit people. He described a “nightmare” in which building software took excruciating, hypermeticulous detail and bickering with dozens of people, and then pointed out that this was how software was built nine months ago. Old software now inspires in him the kind of awe people feel at the pyramids, built without heavy machinery. “And yet where is all the new software?”

His answer was that infinite software built on the old physics of trust can’t produce the things that matter. On one vibe-coding platform, he found a dream-tracker app by an anonymous author that lets you log in with Google, store dreams, and mark some of them public. He started to enter a dream and stopped, because he had no idea whether the author had left everything public by mistake or was reselling it. The old trust model worked tolerably, he argued, because expensive software usually came from people who knew what they were doing, and big companies had lawyers telling them not to sell your data. When anyone can bring software into existence, even that level of trust goes away. Without new physics for distribution and trust, infinite software gives you either “cozy bits of software” from people you would trust alone in your house for an afternoon, or isolated islands that can’t touch sensitive data and “top out at microgames and art apps.”

Software is alchemy. It is our ability to extend our agency beyond ourselves and automate it. And so the idea that software is going to top out at these very low things is just ludicrous to me.

Reclaiming your data

Tim connected Alex’s point about trusting big companies to his own analysis of rising tide rents and robber baron rents, which he developed around the same time Cory Doctorow was writing about enshittification. Companies have strong incentives to treat users well while they’re acquiring them. Once growth flattens, the incentive shifts toward taking advantage of users, staying just good enough that they don’t leave. Part of what keeps people attached even as applications enshittify, Tim said, is that the apps hold so much of their data.

Alex agreed that reclaiming data is the right frame. The business model of the last decade, as he described it, was to build expensive software aimed at an average market, let user data accumulate, and then rent access back, sell derived insights, or hold the data hostage. In a world of infinite software, users can build what they want on their own turf, and he expects silos to become “greedy goblins” guarding the data. He drew a line between what silos add and what users put in. Insights a company derives are its own, but the bits a user contributed should come back out. Infinite software, he said, also tilts the cat-and-mouse game back toward users.

Tim asked how he would get 15 or 20 years of email out of Google. Alex gave Google credit for some of the best APIs, especially in Europe. Alex pointed to msgvault, an open source project that keeps a local archive of a Gmail history, so agent queries go to a local copy instead of rate-limited APIs. When services hand over data in deliberately annoying forms, such as a thousand-page PDF, an LLM can patiently restructure it. “They don’t get bored of a task the way you do.”

Who pays for the compute

Tim pushed on the economics. Services like Gmail are expensive to run, and users get them for very little. If he stores terabytes of email himself, he’s paying someone else, possibly more than Google charges, since Google had ways of subsidizing it. How does this work over the long haul if Common Fabric becomes a new paradigm?

Alex began by acknowledging the value these services have delivered. Free turn-by-turn navigation is now taken for granted, though about 15 years ago, he said, the main licensors of that data charged something like five dollars per user per month. Then he made a point he expected some people to find provocative.

If you aren’t paying for your own computation, then it’s not working for you; it’s working for somebody else.

Users would pay for their own compute by running the runtime on their own machines, or through hosts Alex called AI service providers. These would run the runtime in trusted execution environments, prove they can’t see inside, and charge for tokens, compute, and storage. If users could switch providers, margins would stay small. Alex acknowledged that consumers have long resisted paying for software, but argued that the nontrivial marginal cost of LLM tokens creates an opening, much as people pay a monthly cell phone bill because the service has become indispensable.

Tim suggested companies like Google could migrate many of their services into this world. Alex said there will be many opportunities, but incumbents are used to another business model. He recalled telling a friend with a startup that building on the Common Fabric was wildly premature and that his investors might not like it, because the point is that patterns use data without owning it.

Tim noted that today’s model doesn’t have to stay the model, and Alex said he expects new business models to emerge. Asked how he will get developers to write patterns, Alex said he doesn’t need to. Agents write them on users’ behalf, and once someone’s agent has ground through building a word search, anyone else can use that pattern.

Is surveillance capitalism inevitable?

An audience member, David, wrote that he loves Shoshana Zuboff’s The Age of Surveillance Capitalism and wondered how we came to accept as inevitable that companies take our behavioral data. He said he wasn’t sure technology could fix something technology didn’t cause.

Alex said he thinks technology did decide this but allowed that people may disagree. The same-origin policy, the browser rule that lets a script use only data from the site it came from, was introduced by Netscape in 1995 as a quick fix for a security problem that was discovered early on with JavaScript. As more APIs were added, the walls grew higher, and when native apps arrived on iOS and Android, the same model meant every app owned its own data. Alex said that decision could have been made differently. Surveillance capitalism may keep emerging, he said, but it isn’t inevitable, and technology applied at the right leverage point can lead to a different result.

Tim told David he thought Zuboff’s book had a fundamentally bleak view of the world. For a long time, he said, we had a fairly virtuous set of relationships with many of these companies, and then we created economic incentives that led them to treat us badly. He argued that economic redesign is needed alongside technical redesign. That redesign starts with eliminating the market’s requirement that companies always keep growing even when they no longer deliver additional value.

Alex brought up Eric Ries’s book Incorruptible, which he said he keeps a stack of near his desk. He described himself as a believer in markets and capitalism as an emergent force for good. He distilled the book’s thesis down to the idea that organizations that think long term naturally attend more to their externalities. Common Fabric is set up as a public benefit corporation, and Alex said Eric consulted on structuring it to keep a long-term perspective in perpetuity, advice that Eric is now sharing with the wider world through Incorruptible.

Tim’s argument: AI as a reset

AI is a reset the industry still hasn’t yet taken full advantage of, Tim noted. We’re still thinking in the surveillance-capitalism frame, he said, in the same way that Netscape assumed people would buy software and that whoever controlled the software would control the future. We assume a world of advertising, and a world where companies hold more data about us than we do about ourselves. But new AI native companies will find new business models. Tim called Common Fabric the most thoughtful take on this reset he had seen. He compared it to his first encounter with the web, when there were about 200 websites and O’Reilly put it in The Whole Internet User’s Guide & Catalog because, as he put it, “this is the future.”

Tim said he couldn’t promise that Common Fabric would be the winner, but it is the most promising new thing he’s seen in a long time. He recalled the early days of the internet, when it wasn’t clear whether Gopher, the World Wide Web, or AOL would prevail. The web won, in his reading, because it built an architecture of participation. It was easy to draw from and easy to add to, and its mechanisms kept evolving, so that the web of 2000 or 2005 looked very different from the web of 1991. Common Fabric comes with that same sense of open-ended possibility.

Open source underneath, a product on top

Alex said the underlying runtime and pattern system are open source, but on their own they feel like a tech demo, which is why Common Fabric is building a consumer product on top. That product is still in development and not yet public. But he expects strong network effects as more people join the open ecosystem. Tim said that when Alex showed him the product the day before, this idea made sense. He described his takeaway as agents building throwaway software that embodies a shared set of patterns, with data that carries from the beginning the scope of what can be shared with whom.

Alex said none of this would have been possible before AI could write software. He told the story of his cofounder, Berni Seefeld, who had been thinking about these ideas for decades. Over a dinner a decade ago, Alex asked how they would ever get people to write enough patterns to reach critical mass. Berni said that in the future, AI would write software. Alex replied, “Come on.” Berni gave the structural argument for why software engineering would be the strongest, fastest, and most invested-in vertical, and a few years ago told Alex the curve was happening and it was time to start. Not needing humans to write patterns, Alex said, lets us think much bigger and differently from how the industry has assumed software must work for the last 30 years.

Tim closed on that point. Because agents building software in Common Fabric do it according to principles that put people at the center, he said, the nature of the game changes.

Sentinels [Penny Arcade]

I'm frightened, frankly, at what the environment must be like at Bethesda Softworks - A ZeniMax Company. I wouldn't want to be there. Asha gave Obsidian one of their best toys, and Starfield was essentially a sidequest. I'm a bad Elder Scrolls player, a fake fan; I wash out on stuff like their faces and animations. I always feel like I find something within the first few hours that nobody seems to have cared about at all. A beaky, triangular lip. A line I hear one too many times. For the vast majority of people, those just become memes. For me, it just makes me feel like they double-spaced their homework - a reference almost nobody would get anymore. If you were a million years old also, I promise you this metaphor would hit.

21:07

Girl Genius for Wednesday, November 04, 2026 [Girl Genius]

The Girl Genius comic for Wednesday, November 04, 2026 has been posted.

20:21

Juan Manuel Méndez Rey: Hello, Planet Debian [Planet Debian]

Hello, Planet Debian. My blog was added to the Planet today, so I think the polite thing is to introduce myself before you start finding my posts between yours.

I am Juan Manuel Méndez Rey, from Sevilla. In Debian I am mendezr, and on OFTC I am Vejeta. I have been using Linux since 1994 and Debian since 1998. For a long time that was all: a happy user, installing, breaking things, reading the mailing lists from the outside. I started contributing in October 2025, and last month I became a Debian Maintainer.

A friend and an old RFP

The way in was a friend. Back in 2019 Arturo Borrero Gonzalez filed RFP #943703 for Stremio, and for years he kept telling me I should pick it up. In September 2025 I finally listened and turned it into an ITP. It took longer than I like to admit, but Stremio is now in Debian, and I told that story here. A six year old RFP turned out to be a very good first package.

Rescuing old software

Somewhere along the way I discovered that what I enjoy most is bringing old software back.

The first one came from tille, who asked for help in #debian-tinytasks with xwpe, a Borland style programming editor for the terminal that nobody was looking after. I adopted it, and then I ended up as its upstream maintainer too. I fixed the old bugs and added LSP and DAP, so now an editor from 1993 can debug Go. It ships on several distributions, in Homebrew and on the BSDs. The canonical repo is on Codeberg, and the long version is in this post.

xwpe debugging a Go program over DAP, with a live Watches pane

The second one is older and took much longer. Conquer is a Unix strategy game written by Ed Barlow and Adam Bryant in 1987, and I lost many hours of my youth to it. It never had a free licence. I first asked about it on debian-legal in October 2006, and I spent the next 20 years tracking down the authors, one email at a time. Today Conquer v4 and V5 are GPL-3.0. It is not packaged in Debian yet, that is the next step, but you can already play it in the browser.

Conquer running in the browser, first turn

What I am doing now

CEF took me six months and brought me into the Chromium team, and these days I am mostly with the syft, trivy and grype security stack and with Scala 3 and sbt for Debian.

Thanks

To Arturo, for the nudge. To dilinger, tille and tsimonq2, my DM advocates, for trusting me.

And if you can sponsor uploads for syft, trivy, grype or the Scala work, I would be very grateful. The details are on my wiki page.

You can find me there, as Vejeta on OFTC, or on Mastodon as @vejeta@mastodon.sdf.org. Nice to meet you all.

20:07

The Big Idea: Curtis C. Chen [Whatever]

It may be getting cooler as we fully embrace fall, but things are heating up in space! Author Curtis C. Chen is here with not only his Big Idea, but a science lesson that he says will better help you understand his newest novel, Kangaroo Forth, the fourth installment of his Kangaroo series.

CURTIS C. CHEN:

Hashtag shameless cross promotion: if you want to know about the very specific references to twentieth-century pop culture in the fourth Kangaroo book, Kangaroo Forth, go read the “My Favorite Bit” that I wrote for Mary Robinette Kowal’s journal yesterday. 

Today, I’m going to talk about the real-world inspiration for the “heat lock” situation that occurs in K4. Don’t worry, this isn’t really a spoiler—think of it as watching the safety video before you board an amusement park ride. Good to know just in case anything happens, let’s hope it doesn’t, fingers crossed, wink emoji! 

(Disclaimer: I am not a professional space scientist or science communicator by training, so please excuse any errata below.) 

Now, we all know that “it is very cold in space,” as Ricardo Montalban famously said in Star Trek II: The Wrath of Khan, but it can also get very hot in space. On Earth’s Moon, for example, surface temperatures can climb to more than 250 degrees Fahrenheit in direct sunlight (with local variations depending on terrain like craters, and other factors). The lunar surface retains a lot of heat because there’s no atmosphere, and therefore no medium for natural convection. It takes considerably more time for that accumulated heat from the Sun to radiate away in vacuum as infrared energy. 

In May of 2013, astronauts aboard the International Space Station (ISS) performed an unscheduled spacewalk to replace a leaking Pump Flow Control Subassembly (PFCS) module that was part of the cooling system for the station’s solar panels. The photovoltaic panels that turn sunlight into electricity for the station generate considerable heat during normal operation, and the system is kept within operating temperatures by ammonia “cooling loops” that circulate through radiator panels outside the station. This particular malfunction prompted the ISS crew to shut down one-eighth of the station’s power generation capacity until the problem was fixed. 

So what happens in Kangaroo’s science-fictional future, where multitudes of spacecraft and off-planet habitats are powered by “ionwell” nuclear reactors that generate even more waste heat than solar panels? Well, if the cooling modules for those power systems ever fail, the ship or station running the reactor will heat up real fast, and if you can’t control the temperature, that’s a critical life support emergency for the people on board. Hence the need for “thermal regulation lockdown,” or “heat lock” in their military jargon. Power down any nonessential systems, limit personnel activity, keep an eye on the thermostat, and hope you don’t have to do anything more drastic. 

By the way, heat retention in vacuum is also why a human body won’t immediately freeze to death in outer space, despite what you may have seen in many science-fiction-y shows over the years . . . but that’s another podcast! 


Kangaroo Forth: Amazon|Barnes & Noble|Bookshop|iBookstore|Vintage Books (signed paperbacks)

Author socials: Website|Instagram|Facebook|Mastodon

Read an excerpt.

View From a Hotel Window 11/4/26: Franklin, IN [Whatever]

Ah, the classic hotel parking lot. Always a sight to see.

Today! I am in Franklin, Indiana for an event sponsored by Wild Geese Bookshop, at the Johnson County Museum. It starts at 6:30 but doors open an hour earlier. Here’s how to get tickets. Please come see me!

Tomorrow! I return to my old University of Chicago haunts and have an event at the Seminary Co-Op! Here is how to get tickets for that.

— JS

19:07

Measuring AI’s Impact on Delivery Speed [Radar]

The following article was originally published on James Shore’s Successful Software blog and is being republished here with the author’s permission.

Is AI making software development faster? Most people I talk to say yes. But how much? What value are you getting for your money? Are there other ways of using AI that have a better ROI?

This is part 2 of my series on assessing AI’s impact on software development. In part 1, we looked at why assessing impact is important, and what not to do. In this part, we’re looking at how to measure AI’s impact on delivery speed. In part 3, we’ll look at how to measure the unintended consequences of AI, before wrapping up the series in part 4 with an examination of business outcomes. Finally, an epilogue puts it all together with notes you can share with your CFO.

What we’re measuring

Delivery speed isn’t productivity. I’ll say it again, loud, for the folks in the back: Delivery speed isn’t productivity!

It’s a component of productivity, sure. Given two equivalent teams creating the same piece of software, the team that delivers first is the one that’s more productive.

But it’s not just about output. To my mind, software development productivity is value produced divided by money spent. It’s a strict definition but a useful one, because it gets to the heart of why we build software: to achieve some valuable purpose. Going faster doesn’t mean you’re going in the right direction.

We’ll consider business outcomes in part 4. For now, though, we’ll tackle a simpler question: Are your teams finishing their assigned work faster, regardless of whether that work is actually useful or not?

The core approach

First, the bad news: There’s no objective measure of software development speed. I can’t look at two teams and say, “This one is fast, and that one is slow.” That’s because none of the outputs teams create are standardized. We already talked in part 1 about how lines of code and PRs are bad metrics. Well, nothing else is standardized, either.

Features? Some are big, some are small. Bugs? Some are easy, some are hard. Stories? Velocity? Story points? Completely arbitrary. They have way more to do with what’s being requested than the speed of the team.

Okay, if they’re all different sizes, couldn’t we just use estimates? Surely if a team is constantly missing its estimates, it’s because it’s slow, right?

Not so fast! Software estimates are famously inaccurate. A team that always misses its estimates isn’t slow. It’s just overly optimistic. Teams are nearly always overly optimistic.1

So we can’t count requests (features, bugs, stories, etc.) because they vary in size, and we can’t look at on-time delivery, because estimates are overly optimistic. Sounds like a whole lotta “can’t.” What can we do?

We can compare a team to itself. If a team’s estimates were perfectly consistent, and they went from taking 3x longer than estimated to 1.5x longer, then they’re twice as fast! Huzzah!

If only it were that simple. There are a few snags.2

Estimates aren’t consistent

Snag the first: Teams’ actual estimate ratios aren’t actually consistent. Some are bigger, some are smaller. Plot them on a graph, and they form an “S” curve, as with this data from a real company.3

Teams' actual estimate ratios aren't actually consistent.

If delivery speed improves, the curve will shift. Individual data points may be better or worse than the original approach, but you can see the effect in aggregate.4

If delivery speed improves, the curve will shift.

People work differently

Second snag: Some people are pessimistic and estimate high. Some estimate low. Some people spend a lot of time educating others. Others work heads down as fast as possible. Some clean up messes. Others create messes.

If you do a blanket comparison of everyone to each other, you introduce a lot of noise. Noise is bad because it increases the amount of data you have to collect. To keep things clean, compare people (or teams) to themselves.

Estimates change when people know they’re using AI

Third snag: People’s estimates will change according to the work they plan to do. So if they think they’re going to use AI, and they think AI makes them faster, their estimates will be smaller. Huh. Tricky.

This one’s actually pretty easy: Collect the estimate before people know whether they’re going to use AI or not. Then randomly assign the task to be done with or without AI.

Process improvements muddy the waters

Fourth and final snag: Are your speed increases due to introducing AI? Or the other changes you made at the same time?

AI forces you to rethink your software development processes. Leaders I talk to are streamlining request workflows and putting business experts in closer touch with developers as part of their efforts to introduce AI.

But these are the exact changes that make software development more effective in general! How much of the improvement you’re seeing is from spending thousands of dollars on tokens, and how much is the result of people talking to each other more?

Rather than comparing a chunk of pre-AI data to a chunk of post-AI data, interleave “without AI” tasks and “with AI” tasks. This reduces the influence of other changes. Update your without-AI approach to include the same streamlined workflows as your with-AI approach.

The complete measurement approach

In other words, if you want to be rigorous about this, you need to conduct a randomized controlled trial. Specifically, a “randomized within-subject repeated-measures” trial, which reduces the number of samples you need to collect.5

It’s not as bad as it sounds! People still do their normal work.

Here’s what you do. First, establish a with-AI approach and a without-AI approach. (Or, more likely, “with a lot of expensive AI” and “with a sprinkling of cheap AI,” but I’ll say “with” and “without” for clarity.) Make sure they’re clearly defined and people have had a chance to practice both approaches.

The without-AI approach will probably be close to your current approach to software development, but if you’re streamlining your with-AI processes, be sure to incorporate those improvements into your without-AI approach too. Decide how you’re going to attribute rework, such as code review changes and bug fixes, back to the task that caused the rework.

Then give each person (or team) a virtual bag that’s half with-AI assignments and half without. For any given task, have people record their estimate first, then randomly pull an assignment from the bag.

The main data you’ll collect is estimated time spent, actual time spent, type of task, and spending. Decide in advance if you’re tracking calendar time (including interruptions) or effort (excluding interruptions) and how you’re going to handle parallel work. Think about what other useful information you might want, such as bug and incident counts, mental energy, excess lines of code, and so forth. We’ll talk about using that data to model unintended consequences in part 3.

You’ll need the help of a statistician to do the detailed experimental design and data analysis, but broadly speaking, each person’s with-AI data will be compared to their own without-AI data, then aggregated together to give you the final results.

Finally, remember that speed increases aren’t the same as productivity. Pay particular attention to how the tasks you’re measuring fit into the big picture. For example, if you see a 2x improvement in coding speed, but people spend 50% of their week on other work, their overall speed improvement is only 1.33x, not 2x.6

Is it worth it?

This is a lot more complicated than just counting PRs and calling it good. Is it worth it?

If this were just some run-of-the-mill process improvement exercise, no, it wouldn’t be worth it. It’s too much work, and the effect sizes have to be pretty large in order for the data collection to be practical.

But this isn’t some run-of-the-mill process improvement exercise. Productivity expectations are off the charts, and so are costs. As I talk to engineering leaders, I’m seeing order-of-magnitude differences in spending. Should you spend thousands per person per month on hands-off agentic coding? Or hundreds on analysis and fancy auto-complete?

It depends on the outcomes.

You can’t pick the right approach to AI without knowing what you’re getting for your money, and with so much money on the table, you can’t afford to half-ass this.

Remember, in a METR study, engineers overestimated AI’s speed benefits by nearly 50%. Without measurements, there’s no way to know what you’re actually getting.

Fortunately, it’s not as hard as it seems. With the level of impact you need to see, and enough participants, it doesn’t take many samples from each person.7 Your teams collect the data as they do their normal work. The hardest part is explicitly defining how you want people to use AI, and that’s worth doing anyway.

Of course, delivery speed is only part of the picture. There’s also the question of how sustainable speed improvements are. We’ll consider unintended consequences next, in part 3.

All my content is made with my 100% human meat brain, except where explicitly stated otherwise. If you liked this entry, check out my best writing and presentations, and consider subscribing to updates by email or RSS. To contact me about consulting, email me at jshore@jamesshore.com.


Footnotes

  1. When they’re not, it’s usually because they’re playing political games with estimate padding. That isn’t good either, because then the work tends to expand to meet the estimate. ↩︎
  2. This design was inspired by a METR study, with help from Brent Miller. AI Disclaimer: I used OpenAI’s GPT-5.6 Sol model operating in “High” thinking mode to critique my explanation, and I also used it to generate the Python programs that drew the graphs below. You can see my ChatGPT conversation here. ↩︎
  3. This data is from the Star Citizen alpha 3.0 release, which publicized its internal task estimates and actuals. Interestingly, the sharp cliff at the 1.0 mark is a classic sign of work growing to meet its estimate. ↩︎
  4. The Star Citizen data was split in half and artificially manipulated for the purpose of this example. It doesn’t represent real-world AI impact. ↩︎
  5. Many thanks to Brent Miller for introducing me to this technique. ↩︎
  6. Work that took 40 hours now takes 30. 40 ÷ 30 = 1.33. ↩︎
  7. The exact number will depend on the number of participants, the amount of variance in your results, and how conclusive you want the results to be. ↩︎

18:49

Epidemic of Idiocy [George Monbiot]

The next global pandemic could be hatching in a mink farm in Utah.

By George Monbiot, published in the Guardian 4th November 2026

Could this be ground zero? Could it be the spot where the next pandemic begins? It’s certainly a candidate, not least because the chain of events that could trigger a plague far worse than Covid-19 looks like the opening sequence of a disaster movie. A really bad disaster movie, in which the levels of carelessness and turpitude defy belief.

A report by the investigative news service ProPublica reveals that bird flu has been raging in a mink farm in Utah since August, and nothing has been done by public officials. In 2023, I warned in the Guardian that mink farms could scarcely be better designed to generate lethal plagues. This is for three reasons: mink are fed on the offcuts of chickens, cows and other farm animals, in which new viral variants often develop; mink readily host both avian and human flu viruses, which can then exchange genetic material, turning a bird disease into a human one; and mink possess extremely high “zoonotic potential” – the ability to infect animals of other species, including human beings.

I pointed out that bird flus that jump into the human population can be extremely dangerous: of those known to have contracted the H5N1 variant since 1997, 48% have died. The first death in the US from avian flu this year has just been announced: the victim caught it from an infected dairy herd. While it is devastating to wild bird populations and some mammals, fortunately its transmissibility between humans is so far extremely low. If the perfect mixing vessel of a mink farm were to generate a variant that was both highly lethal and more transmissible, you would do well to get on with writing your will. Both for this reason and because of the pointless cruelty of the fur business, I called for a global treaty to ban mink farming.

I didn’t expect governments to leap into action, however compelling the case might have been. But nor did I expect them to act as if their aim were to assist a deadly virus. This is how officials in the US appear to have behaved.

ProPublica discovered that, instead of trying to contain the virus by shutting down the farm and slaughtering the mink, Utah departments have sought to contain the story. Public health officials have failed to test workers on the farm for symptoms, or track their contacts, despite the fact that they’re in touch with the infected mink every day, and are often bitten or scratched. Why? Because of complaints from the state agriculture department that “farmers were annoyed” by testing.

Utah’s state veterinarian, Amanda Price, said that the outbreak was “devastating”. But she wasn’t talking about public health. She was talking about the effect on the farmer. “This is his life’s work that he’s seeing be destroyed. I really hope that you understand the humanity behind this situation.” Yes, we do: 8 billion people could be at risk if something isn’t done. Culling the mink could kill the farmer’s business, and he should be compensated for it. Not culling could kill much more than that. Could there be a clearer case of putting special interests above the general interest?

She also remarked: “There’s just not a lot of options out there other than kind of sitting and waiting and seeing what happens … If we started seeing people actively dying from this, obviously that would change how we respond to this.” By which time it would be too late.

The primary effort appears to have been to protect the farm’s interests. The state has not declared an emergency because, officials reason, that might “alert animal rights groups”. It might also alert public health groups, or anyone who cares about human life.

Now we’re into flu season. The longer it goes on, the greater the chances that a highly transmissible variant will develop in the mink farm.

These people make the scientists in the first episode of Pluribus look like responsible citizens. The officials here are not following the signals sent by extraterrestrials. Instead, they are following the signals sent by commercial interests. If there’s one thing we’ve learned from the influence of the tobacco and sugar industries, it’s that corporate lobbyists should have nothing to do with public health decisions. Yet they are embedded in every form of decision-making. This, regardless of the issue that strikes the killer blow, could be our downfall.

While mink farms are especially dangerous, all forms of livestock farming present a high risk of generating and propagating pandemics. Indeed, it’s the combination of mink farming with chicken, pig and dairy farming that creates such a high potential for disaster. The edible livestock industries can be seen as disease amplifiers, creating the conditions in which a low-pathogenic strain can easily mutate into a more pathogenic variety. Feed the animals’ innards to mink, to mix this virus with human flu, and off we go.

Here, too, the level of neglect seems psychopathic. The US “health” secretary, Robert F Kennedy Jr, has argued that chicken farmers “should consider maybe the possibility of letting [bird flu] run through the flock so that we can identify the birds, and preserve the birds, that are immune to it”. The US agriculture secretary voiced support for the idea. Not only would this be phenomenally dangerous; it would also be fruitless, as genetic variation has been reduced to an absolute minimum, to produce almost identical chickens. It’s similar to the “let the virus rip” attitudes of the Donald Trump and Boris Johnson governments during the first wave of Covid-19. Kennedy has also claimed that the H5N1 variant “doesn’t appear to hurt wild birds – they have some kind of immunity”. This is completely false.

Though we are more alert than we once were to the machinations of the tobacco, sugar, alcohol, junk food, gambling and fossil fuel industries, most people remain unaware of the levels of threat posed by the livestock industry. It’s not only among the greatest causes of greenhouse gas emissions, habitat destruction, wildlife depletion and extinction, and river and marine pollution. But it is also the greatest risk factor in the development of new pandemics, both directly and through its transformation of ecosystems into farmland. It might also now be the leading cause of the spread of antimicrobial resistance. All from the folks who brought you meat, eggs and milk.

We’ve often been warned that the things we should fear most are those we’re not thinking about. It’s time we started thinking about this.

www.monbiot.com

16:56

[$] Plasma X11 session removal surprises some Fedora users [LWN.net]

The KDE Project announced, in 2025, that Plasma 6.7 would be the last version of the desktop environment that would support X11 sessions. Those who keep up with KDE's announcements no doubt expected it when Plasma 6.8 dropped X11 support as promised. What seems to have come as a surprise, at least to a number of Fedora KDE Plasma Desktop users, is that the Fedora 44 release—which shipped in April with Plasma 6.6—received an update to Plasma 6.8 that swept away the X11 session without much warning. Despite the surprise, it is gone for good: the Fedora Engineering Steering Committee (FESCo) has voted against a request to revert the update for Fedora 44 and the just-released Fedora 45.

16:49

Link [Scripting News]

I want to find all the recent podcast interviews that Jamie Raskin has done. Is there a service that can do that?

16:14

Bazzite 45 released [LWN.net]

Version 45 of Bazzite, the image-based gaming distribution based on Fedora Linux, has been released. Notable changes in this release include a rebase to Fedora 45, updated Open Gaming Collective (OGC) kernels, support for Logitech TrueWheel devices, and more.

LWN covered Bazzite in December 2025.

16:00

It's time for citizens to really unite [Scripting News]

The mid-term election was a blowout for Democrats.

I am so happy today to be able to write those words.

So many things to say, first a few notes.

  • Citizens United was the real loser in this election. And the missing ethics rules that allow members of the government to legally do insider trading, which they actually do, a lot of. A political job in Washington is worth real money, legally.
  • The TV here in the NYC area included local races in the Hudson Valley (where I live) and New Jersey, and they were vicious and on all the time. NYC itself not so much.
  • Often all the commercials in a single break were political. Some of them were so lame and sarcastic I thought they were actually ads for the competitor they were trying to get us to hate.
  • If money could have bought this election, it would have been a landslide for the Republicans. The ad in the Ohio governors election was over the top, a blame the victim campaign, so cynical, they openly dared the voters to be as depraved as they were. I hope that woke a lot of voters up.
  • Elon Musk threw hundreds of millions into the election, esp in Texas where he was presumably counting on control of politicians to allow him to build out SpaceX, Grok and Tesla out without regard to environmental regulation. He wasted his money, but he has a lot of that, but what it proved about the electorate is that we, collectively, sobered up enough to see what was going on, and stopped voting for the better comedians who run around on stage with buzzsaws and talk about other politicians asses, because the last election of Trump did a lot of destruction in the US and around the world. This is serious stuff.
  • We are not powerless, we actually are some of the most powerful people in the world. We the People are a co-equal branch of government along with the courts and executive. We should vote with the same sobriety as we expect our reps to vote.
  • When we think our elections are mere entertainment, we surrender that power to who had the best schtick or most entertaining ads. We act like the robots the elites depend on us to be. Our vote isn't a message, it's an act of government.
  • Already hearing pundits say basically "yeah we know Congress can't do anything" because for two years we had a Congress that wouldn't do anything. Now we have one that move and cancel the Iran War, for example, with a single vote to withdraw authorization (which was never given).
  • If only political pundits could handle little intricacies like sports pundits can.
  • I heard a podcast interview with Jamie Raskin by an editor at the New Yorker. It was disgusting. The reporter mostly he wanted him to say he would consider impeaching Trump, and of course that was the title of the story. If only he had been willing to let Raskin explain how different things are now, they have just elected a Congress that is ready to shake things up, and impeaching Trump might not be the fastest way to start putting things right, to building an America that has new better guardrails to prevent us from going around in circles. Why couldn't the New Yorker, of all pubs, leave space for him to explain, but nope, they want their freaking headline, and still very much need to be routed around. Raskin has to go direct more.

We have a lot of work to do and that work will be done by the people, by us. This is the big gestalt the elites in the US haven't caught on to. The new tech lets people contribute to our country on an everyday basis, not just when the parties need money to run ads that we're now totally on to. I know I am an elite, but I also know people in high positions in the progressive world who could help by getting behind the open technology not owned by Musk or Zuck or Jeff or whoever, that will allow us to effectively organize. Now is the moment to do this, to make sure this victory doesn't slip away into the comatose blur that the MSM works so hard to keep us in.

15:28

[$] Portable Python scripts with dependencies [LWN.net]

A basic Python script is portable: it can be copied between machines with little concern about compatibility. A script that depends on third-party packages requires quite a bit more care and consideration, however. In 2023, PEP 723 ("Inline script metadata") introduced a standard for declaring a Python script's dependencies inside the script itself. Several third-party tools can now automatically install and manage those dependencies, but there is still little official support for this standard within Python itself.

14:49

Thoughts From a Tsunami [Whatever]

Thank you, America, you understood the assignment.

But also, Jesus, what a faceplant for Trump and all of the Republican party. Do you understand how much you have to have fucked up that Kansas elected a Democratic senator? That literally hasn’t happened since the New Deal. Do you know how much you have to have fucked up to have Mississippi still in play as of the writing of this post? MISSISSIPPI. You don’t get any more Republican territory than Mississippi, goddamn. Except maybe South Carolina, which just elected a Democrat to Lindsey Graham’s old seat. North Carolina elected a Democratic senator and flipped one of their state legislative bodies to Democrat.

And holy shit, Texas! Not just senator Talarico, not just Governor Hinojosa, but as far as I can tell every single statewide office went blue, down to and including the railroad commissioner. The Democrats look like they’re going to flip the Texas house, too. FUCKING TEXAS WENT BLUE Y’ALL. Not just a little, but a lot.

(And Ohio, too, where I live, but I’ll get to that in a second.)

Now, credit is due to the Democrats actually fielding decent candidates this year and doing the work — you don’t get Abdul El-Sayed into the senate (as an example) without Abdul El-Sayed being a generationally sensational candidate. But let’s make no mistake that this blue wave is a response to an administration and political party so corrupt and awful and, yes, actually fucking evil, that a certain number of people who have perennially voted red either voted blue or stayed at home, and a lot of blue-voting people who might have stayed home for a mid-term went out of their way to get to the polls this time around.

This election was a rebuke and a repudiation, and I hope to the sweet and merry God above that the Democrats remember that when they’re seated in January. They were not elected to office to play nice with the fascists in the halls of power. They were elected to punch them in the face, repeatedly, the president most of all, but, be assured, not only him. There is to be a lot of punching going on.

Now, Ohio. When I went to bed last night Amy Acton was elected governor and Sherrod Brown senator, but all the other statewide offices were still showing as red. Well, I just checked this morning, and holy buckets, every state office but auditor, including the Ohio Supreme Court seats, looks to have gone to the Democrats. By extremely small margins, to be sure! But you know what you call a win by an extremely small margin? A win.

And the US House races, with a new map that the state GOP designed to be gerrymandered as fuck to their advantage? Seven seats went to Democrats, which brings them to near parity with the GOP in a state with fifteen congressional districts. Shit, in my district, OH-8, Warren Davidson, who since 2016 has won his seat with between 60%-70% of the vote every election, scraped by this time with just 52% of the vote. The GOP nearly just gerrymandered themselves out of a state congressional majority (Update: Actually they did, another seat flipped blue). The GOP also looks to have lost its supermajority in the Ohio house, so, goodbye ignoring the governor’s veto for them. This is all excellent news.

As I noted the other day, and without taking away from the work of Acton, Brown and all the rest of the Democrats, it’s the fact the GOP voters, in their infinite wisdom, chose Vivek Ramaswamy as their candidate for governor in the primary, largely on the endorsement of Trump, that helped tip Ohio back into purplehood. It’s hard to overstate what a historically bad candidate Ramaswamy was, and ultimately how poor a fit he was for the Ohio GOP (much less any other Ohio voter). And even then he still got 44% of the vote, because tankies gonna tank. But 44% was not enough. So much for the power of a Trump endorsement in 2026.

Speaking of Trump, I have no doubt if the Democratic margins had been smaller this year that Trump would be doing his usual thing of belching about fixed elections and other such nonsense, but at the end of the evening the wave was high enough that even he couldn’t pretend that it was anything other than a wipeout. He rather meekly went on record that he would “respect the results” and then went on Truth Social to bluster that if he had been on the ballot things would have turned out differently. Motherfucker, you were on the ballot. Everything you’ve done in the last two years is why this election went the way it did.

I still expect Trump and his odious cronies to pull hijinks, and never forget that he is actually still president for two more years, unless he dies, resigns, is impeached, or just one day boards a plane for Russia just for fun and never comes back. We’re still stuck with him through January 2029. Adjust expectations accordingly.

But no matter what, last night was the beginning of the end of the Trump era. I’ve said such things before, mind you, and have been wrong. But I feel pretty good about this time. This wasn’t a normal election. Ask Texas about that. It’s not just a wave. It’s a sea change.

— JS

14:42

Security updates for Wednesday [LWN.net]

Security updates have been issued by AlmaLinux (cockpit, dpdk, fence-agents, firefox, freerdp, gimp, opentelemetry-collector, python-dns, qemu-kvm, and raptor2), Debian (apt and squid), Fedora (ags, apptainer, chromium, fractal, mingw-harfbuzz, mingw-qt5-qtwebkit, mingw-qt6-qt5compat, python-mistune, python3-docs, python3.14, python3.9, rubygem-gist, rust-app-store-connect, rust-qemu-rdp, rust-redlib, and selenium-manager), Mageia (java-latest-openjdk, java-17-openjdk, java-21-openjdk, timezone), Oracle (.NET 10.0, .NET 8.0, .NET 9.0, bind, bind9.16, cockpit, firefox, freerdp, gcc, ghostscript, glibc, grafana, java-17-openjdk, java-21-openjdk, kernel, kernel-uek, libXi, pipewire, pki-deps:10.6, podman, python-jwt, python-pillow, python-pyasn1, qt5-qtbase, thunderbird, tomcat, util-linux, and wireshark), Red Hat (dnsmasq, fence-agents, freerdp, pki-core:10.6, and thunderbird), SUSE (amazon-ssm-agent, aom-tools, apache2, brotli, cadvisor, chromium, cups, curl, distribution-registry, eog, gh, go-containerregistry, google-guest-agent, gvfs, haproxy, hauler, helm3, kernel, libBasicUsageEnvironment2, libcdio, libinstpatch-1_0-2, libosmocore, libreoffice, libX11, nodejs22, nvidia-open-driver-G06-signed, openssh, parted, perl-DBI, perl-mime-tools, python-pypdf, rootlesskit, rqlite, rsyslog, sssd, tomcat10, warewulf4, and xen), and Ubuntu (apt-cacher, bind9, bitlbee, cakephp, deluge, dmitry, e17, feh, gnome-shell, golang-github-gin-contrib-cors, gvfs, haproxy, jabberd2, libmspack, libnet-easytcp-perl, libphp-swiftmailer, libsoup2.4, libsoup3, libuser, pcre2, rear, ruby-rack, ruby-sprockets, rxvt-unicode, shapelib, sogo, vips, and yaws).

13:56

Representative Line: What it Doesn't Do [The Daily WTF]

Alastair found this comment in his codebase, and wondered, "who wrote this comment?" A quick blame answered the question: he did. He did not, however, write the code.

 public function getAllMailers() {
        // This function neither returns Mailers, nor all of them.
        ...
 }

I suppose the comment was easier to add that doing a global find/replace to update the function name everywhere. But I do wonder, what does this function return?

In any case, sing along: "I wrote the comment, but I did not pick this function name".

[Advertisement] Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. Learn more.

12:21

Pluralistic: The AI fatfinger economy has come for my receipts app (04 Nov 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



A many-armed pulp science fiction robot pins a giant finger using its spiked appendages. In the background is an architectural rendering of a grand 16th century city.

The AI fatfinger economy has come for my receipts app (permalink)

"AI is being shoved down our throats" can mean any of several things. It can mean that our bosses are demanding that we use AI in reckless or nonsensical ways on the job:

https://www.404media.co/manifestos-fear-and-loser-thinking-inside-protons-ai-reckoning/

It can mean that Elon Musk and the NASDAQ have colluded to force ordinary retirement savers to bail out his emirati and tech oligarch buddies:

https://www.nytimes.com/2026/06/05/technology/spacex-indexes-401k.html

These are arguably the most important ways in which AI is shoved down our throats, but the most visible form of conscription into the number-go-up AI project is happening at the user interface level. This UI fuckery predates AI. For more than a decade, tech companies and their executives have colluded to trick, coerce and force you into using new features that they wanted to sell to their investors as the future of their companies.

Remember Google Plus, the Facebook-killing social layer that was going to give Google access to a new, multi-trillion-dollar market? Bradley Horowitz, then a VP at Google, charged every product team with cramming G+ into their offerings, tying their bonuses to G+ usage (at companies like Google, your bonus can dwarf your base salary).

Now, googlers are bright and resourceful people, and if you tell them that they can double their earnings by getting users to click on Google Plus buttons, they'll come up with all kinds of ways to get you to do this. Some of those gambits will be the kind of thing that Horowitz doubtless hoped for: innovative and creative ways to add value to Google's core offerings with G+ features.

But when the stakes are that high, Goodhart's Law inevitably comes into play: "When a measure becomes a target, it ceases to be a good measure":

https://en.wikipedia.org/wiki/Goodhart%27s_law

The easiest way to get a user to click on a G+ button is to replace whatever button that user hits most often with a G+ version. Rather than introducing users to Google Plus in a way that turns them into G+ fans, you just frustrate them by tricking them into clicking on a useless button.

From a product manager's perspective, it's worth making whatever changes as are needed to ensure that your salary is doubled because you hit your "key performance indicator" (KPI), even if it's at the expense of your users' loyalty to your product. Preserving user loyalty at the expense of half your wages is a bad trade.

When a machine learning system does this, we call it "reward hacking." AI programmers create an "objective function" for their system, a single number that the system will try every tactic to increase; then, more often than not, the AI program finds perverse shortcuts to make the number go up whether or not it achieves the programmer's goal:

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

For example, if you charge an AI with coming up with the shortest run through a video game, it might well discover a bug that makes it impervious to enemy attacks or just lets it teleport to the end of the game. To avoid these perverse outcomes, programmers have to add more and more specificity to their objective functions: "speed run the game without teleporting or discovering an immortality hack."

Not for nothing, many science fiction writers (including me) have noted that tech bosses' fear of their own AI systems is a kind of emotional spillover from their frustrations with the corporations they run, where underlings engage in the same kinds of reward hacking that we see from chatbots:

https://pluralistic.net/2025/04/14/timmy-share/#a-superior-moral-justification-for-selfishness

Despite the ease with which metrics can be gamed, tech bosses remained committed to the use of KPIs to shift the priorities of their organizations, and they use the same objective function refinement technique that programmers use for reward-hacking AIs in a bid to prevent cheating by employees who hit their KPIs any way they can.

This explains a lot about the experience of watching a video on your phone. Any time you tune into a show on a streaming platform, you are forced to handle your phone with the delicacy of a photonegative. If any part of your hand brushes any part of the screen, you will immediately be whisked away from the video you're watching to an entirely different one:

https://pluralistic.net/2022/05/15/the-fatfinger-economy/

Worse, after your program has been replaced with this new one, there's no obvious way to get back to the show you were just watching. This is very weird, considering that the "back button" has been a part of computer interfaces since 1981:

https://www.merriam-webster.com/dictionary/back%20button

The reason you don't get a back button is reward hacking. Streaming video platforms are under enormous pressure to successfully recommend their back-catalog to their users, because the alternative (commissioning or purchasing a steady stream of popular new shows) is very expensive. Investors put a lot of stock in streaming services' "successful recommendation" rate.

So streaming service bosses charge their product teams with making "successful recommendations." The easiest way to "recommend a show" is to booby-trap the streaming service's UI so that touching any part of the screen takes you to a video you never asked to see.

This is obvious reward hacking, so streaming bosses refined their objective function: they made their teams' bonuses contingent on getting you to watch a new video for a minimum time-frame. This in turn triggered the next volley in the reward-hacking wars, in which product teams took away the back button. This gives users any number of greased slides that whisk them away to a new video. To get back to the old video, users are forced to climb a greased pole.

This is the fatfinger economy: created in the 2010s by teams at large tech companies with KPI-obsessed bosses; refined in the 2020s by teams at bottom-line obsessed streaming media companies; and now perfected by teams being charged with cramming AI into every corner of our lives:

https://pluralistic.net/2025/05/02/kpis-off/#principal-agentic-ai-problem

The fatfinger economy is an extraordinary beneficiary of the drive to add "telemetry" to all of our apps. Today, an app vendor can call up a dashboard and find out which buttons and fields and sliders see the most use, and they can use that ranked list to figure out which buttons to replace with AI-demon-summoning lookalikes that help product teams "prove" to their bosses that they've "successfully integrated AI" and lets their bosses prove to their investors that "users value AI features."

I recently switched from Android to Graphene, a de-googled phone operating system. Graphene's maintainers are blissfully free from the imperative to show that "users value AI features," and that's why I have never accidentally summoned up an undismissable AI by tapping a Graphene UI element.

It's a different story when it comes to apps. Graphene has many different ways to install apps, including via Google Play (Google's default Android store). That's useful because it lets you install your old Android apps after switching to Graphene, but it does leave you exposed to the fatfinger economy.

Last week, I got a painful reminder of the progress of the fatfinger economy outside of Graphene's utopian pocket-universe. I make extensive use of an app called "Genius Scanner," which lets me scan receipts and email them to myself (I do this a lot because, as a freelancer, I have to track a lot of different expenses). I bought a lifetime subscription to Genius Scanner in 2023, after getting burned by Camscanner (my previous, now enshittified scanning app), and I've been perfectly happy with it…until now.

Genius Scanner is obviously under pressure to drive AI adoption. I can tell because they've taken away the most important UI element and swapped it for a worse-than-useless AI button.

Here's how I use Genius Scanner: I press the "make new scan" button and line up the receipt on the screen. Then I press the "retitle" button, which brings up a field that is populated with the current date and time (16 characters in all). This text used to be selected so that hitting the little "x" next to it deleted it, making it easy to title a new scan. After that, I'd just email it to myself.

As of last week, though, there is no button that deletes the date and time so you can enter a useful title. That little "x" has been replaced with a button that brings up an ad for the company's new AI tools, which cost $40/year. There's no way to tell the system that you're not interested in buying a new subscription for the tool that you've already bought a lifetime sub for, and there's no way to get that little "x" back.

To be clear: that little "x" represents one quarter of my receipt scanning workflow. They have swapped it out for an ad for a new subscription AI feature, and gave me 16 new keypresses on the backspace button to replace that single tap on the "x." I have seen that ad about 100 times at this point, because I keep tapping the spot where the "x" used to be.

I'm certain that the company knew that its paying customers relied on the "x" to accomplish a vital function in any scanning app (giving good, descriptive titles to scans). They need the AI number to go up, so they replaced the "x" with the AI ad, which will let them tell their investors that they've got "strong consumer interest in their AI features."

Meanwhile, they already have my money, so there's no way I can punish them for their decision to screw me over to juke a meaningless stat. It's as neat (and depressing) an example of the principle that "even if you're paying for the product, you're still the product" that you could ask for.

It's also a perfect little object-lesson in the ways that companies can report increasing AI interest and usage without generating any interest or usage. In the fatfinger economy, every metric is a target, and is thereby rendered meaningless.


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)

#20yrsago Army Times: Rumsfeld must go! https://web.archive.org/web/20061107220242/http://www.truthout.org/docs_2006/110406Z.shtml

#20yrsago UK is a surveillance society http://news.bbc.co.uk/1/hi/uk/6108496.stm

#20yrsago Record companies sue soccer mom’s kids https://web.archive.org/web/20061104145550/https://www.washingtonpost.com/wp-dyn/content/article/2006/11/02/AR2006110200114.html

#15yrsago HOWTO make your own skateboard truck lazy-susan table https://www.instructables.com/Skateboard-Table/

#15yrsago Home Secretary to OccupyLondon: you’re scaring the tourists https://www.bbc.co.uk/news/uk-england-london-15588987

#15yrsago Judge whose daughter released video of him beating her suspended from bench during judicial investigation https://web.archive.org/web/20111105234141/http://hosted.ap.org/dynamic/stories/U/US_VIDEOTAPED_BEATING_TEXAS

#15yrsago Prof who keeps announcing links between the Internet, childhood dementia and autism should publish theories in a scientific journal https://www.badscience.net/2011/11/why-wont-professor-greenfield-publish-this-theory-in-a-scientific-journal/

#10yrsago Internet of Things botnet threatens to knock the entire country of Liberia offline https://doublepulsar.com/shadows-kill-mirai-ddos-botnet-testing-large-scale-attacks-sending-threatening-messages-about-6a61553d1c7#.zg4448j8w

#10yrsago Black Lives Matter declares its opposition to TPP https://www.nakedcapitalism.com/2016/11/gauis-publius-tpp-has-picked-up-a-powerful-enemy-black-lives-matter.html


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: 544 (32413 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:28

The power of sync [Seth's Blog]

There’s an overlooked power tool right in front of us. Every individual and organization can use it well, but rarely does. I could write a book on this, but here’s the post instead:

Synchronized work happens together, on a shared schedule, in real time.

Asynchronized work (my spellchecker says this isn’t a real word) happens on our schedule.

Phone calls are sync. Texts are async.

Network TV was sync. Youtube and Netflix are async.

Writing a screenplay is async. Making a movie from that screenplay is sync. Going to opening night is sync, watching it two months later online is async.

Writing a book is async. Publishing a book is sync. Reading it is async.

A staff meeting is sync. A memo is async.

Commercial air travel is sync. A private jet is async.

Each offers costs and advantages.

When I go to a live concert, it’s happening. For me, for the audience, for the act. If any of us is having a bad day, it detracts from the experience. But when it’s right and it’s real, magic ensues. It’s largely unrelated from the experience of listening to the same song streamed (async) or on the radio (a blend of the two).

I imagine that your energy levels and mood fluctuate during the day. When working on async projects, the smart path is to match your internal energy with the work to be done. Write blog posts when you’re on a post-swim high, pay bills when all you can manage is clerical work.

Organizations that don’t account for the cost of sync-meetings waste not just billions of dollars but the insight and energy of the people who might be able to contribute if the timing and approach were different.

Sync has three advantages:

  1. Energy multiplies. When someone is contributing, others seek to catch up. When someone has a good idea, others might work to top it. We have the chance to create an environment that multiplies the effort of all those involved.
  2. It can be more efficient. The donut shop can’t have the frosting person frost whenever it’s convenient. They have to frost right after the donuts come out of the fryer. Many processes depend on the right people being in the right place at the right time.

    One form of this efficiency is that the contributor can see, in real time, how the recipient responds and act accordingly.
  3. It offers command, control and (one kind of) inspection.

But it has costs and risks:

  1. Energy also spirals down. When a team member is emotionally disconnected or physically absent, the entire interaction can suffer.
  2. It can be less efficient. There’s less room for slack and resilience, and assembling the right people at the right time comes at a premium. There’s a lot of sitting around on a movie set.
  3. It doesn’t usually match the needs of the worker or the market.
  4. It makes it difficult to be intentional and clear about the details of the work or the arc of the project.

The implications are everywhere we look, and the status quo works to maintain its sync or async status.

Media companies that are in love with whatever sync/async built their organization often flounder when the media consumption axis flips. The only reason Amazon and Netflix exist is that their sync predecessors couldn’t figure out how to deal with an async relationship with the customer. And now that Netflix has a huge advantage, they’re timid about shifting some of the content to a sync model that would create more buzz… and Amazon has failed to capture the real-time shopping experience that’s so common online in China.

When we were forced to work from home six years ago, offices freaked out. Some embraced the async magic it offered, while many bosses were at a loss on how to manage people they couldn’t see in real time.

One reason is that employees had been indoctrinated in the idea that work was what you did when someone was watching. If you were ‘working’ from home, it was okay to also do errands and a workout, because without a hall monitor, you were off the clock.

On the other hand, some used the freedom the way a productive writer does. Without the distractions of real-time sync, there was plenty of time to get some actual work done.

Once you see it, all sorts of new insights come to mind:

The handoffs. Much of the leverage and the friction in our modern world lives at the points where work switches modes. A deadline, for example, is a sync point imposed on async work.

Who owns the clock? Sync is more than a scheduling choice, it’s also a display of power. The person who calls the meeting has already decided to spend everyone else’s time. Bosses call meetings; the employee sends a memo.

Async moves power from the coordinator to the creator.

Flips are opportunities. Why are college applications async, while job interviews are sync? Kickstarter turned product launches async, and Ted Turner turned news into something that broke.

Fake async. Over time, async creeps toward sync. It’s ironic that Slack messages, texts and email which succeeded because they were async, now create an expectation of real-time response. These are async tools used with sync expectations, so you get the interruptions of sync without its energy.

Name it. Protect your work style and the expectations for what you deliver. Organizations can be more mindful of the cost of sync, and creators can properly price their effort for each kind of work. There’s a reason it costs a million dollars to have Bob Dylan sing at your birthday party.

Sync creates cultural side effects. When everyone at the watercooler is talking about the same thing, cultural cohesion follows. When Netflix moved to binge viewing, they used their capital advantage to make it very hard for others to keep up by producing enough shows. But by sticking with this moat, they’ve diminished word of mouth. Far more people talked about Nathan Fielder’s movie during launch week than ever talked about his streaming show.

AI is currently async. An agent never needs a meeting and works at 3 a.m., so humans become the sync bottleneck. But as its power increases, expect AI to be a partner in most sync events.

Trust is built in sync and spent in async. Async works better between people who already know each other. New teams, new hires, and new customer relationships may need sync at first. The alternative is to build systems that are async by nature, enabling new participants to earn trust in powerful new ways. Online reputation systems and thoughtful online communities are getting better at this.

Here are three simple axioms to start the process with:

  1. Don’t make something synchronized unless it delivers valuable advantages over work done asynchronously. Show your work and defend your choice.
  2. When you’re doing async work, match it to your internal chemistry. Get more done, but in a different order than it’s assigned.
  3. Pay attention to the shifts from one to another. That’s where opportunities and pitfalls lie.

08:21

Sentinels [Penny Arcade]

New Comic: Sentinels

02:49

Tuesday, 03 November

23:49

Urgent: More than Ban Flock Act [Richard Stallman's Political Notes]

US citizens: call on your congresscritter and senators to do more than pass the Ban Flock Act. They should pass laws to require all systems that track the public to be designed so that a signed judicial warrant is required to look at the data on any particular person. So I suggest using this action, but rewriting the request to demand more.

Here's how I rewrote the letter text.

Flock surveillance cameras are known for tracking vehicles through their license plates. They also track people by facial recognition. They may do other sorts of general surveillance as well. This surveillance is Orwellian; it creates a danger such as Orwell foresaw.

Regulating only license plate recognition, and only by federal agencies, is only a partial remedy. What we need is to regulate systems that collect data that can be used to track people and find out their activities, so that a specific judicial warrant is required to obtain the data about a person.

Please pass laws to protect Americans from general surveillance, and to require that new digital communication standards be designed to protect us from whoever wants to play Big Brother.

Sincerely,

In How Much Surveillance Can Democracy Withstand, I argue that cameras that can track people should not be connected to any networks. To find out who the camera has recorded should require physically accessing it.

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: Uphold midterm election results [Richard Stallman's Political Notes]

US citizens: call on your congresscritter and senators to sign the bipartisan pledge to uphold midterm election results once certified by states.

The point is, that means resisting magats' preannounced attempts to sabotage the elections that don't go their way.

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: Reject funds to vouchers for private schools [Richard Stallman's Political Notes]

US citizens: call on state governors to reject paying state funds to vouchers that support private schools.

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

Urgent: Stock in so-called "artificial intelligence" companies [Richard Stallman's Political Notes]

US citizens: call for legislation to prohibit congresscritters and their family members from owning stock in so-called "artificial intelligence" companies.

I reject the marketing term "artificial intelligence" so I refuse to use it.

Urgent: Proposed voter-suppressing tax records requirement [Richard Stallman's Political Notes]

US citizens: call on the Census Bureau to withdraw the proposed voter-suppressing tax records requirement.

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

Urgent: Investigate Iran war casualty cover-up [Richard Stallman's Political Notes]

US citizens: call on your congresscritter and senators to investigate the Iran war casualty cover-up.

This is not as big a wrong as launching that war, but it is a good way to attack the magats who did that.

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.

Nothing constructive from Republican party [Richard Stallman's Political Notes]

Robert Reich: *The Republican Party no longer has anything constructive to say about anything or anyone, so what is its closing argument in the 2026 midterm elections? Hate, fear, and bigotry.* (Conveyed with fabrications and falsehoods.)

Ralph Nader still fighting for progressives [Richard Stallman's Political Notes]

Ralph Nader is still fighting to replace the plutocratist existing Democratic Party with a party that is progressive.

For this reason, I don't support organizations whose goal is to "elect Democrats". I support organizations that work for progressive Democrats, not for plutocratist Democrats.

Chatbots gamed for output on political topics [Richard Stallman's Political Notes]

What chatbots say about political topics is intensely gamed by election campaigns using special tools designed for the purpose. And if you ask a Supposed Intelligence chatbot a question about politics, it is likely to refer you to "pink slime" published mainly to manipulate chatbots.

Weakness in preventing climate disaster [Richard Stallman's Political Notes]

Most Democratic candidates currently show weakness in regard to preventing climate disaster. This bodes ill, because preventing it will require confrontation after confrontation against planet-roaster businesses. They have consultants who search for ways they can get away with pushing their climate damage under the rug, some of whom will be elected officials at the same time.

To defeat them calls for the clarity to build the strength that can overcome them, and the firmness then to use that strength over and over.

Americans concerned about government corruption [Richard Stallman's Political Notes]

Americans say they are very concerned about government corruption, but much less concerned about the power of corporations.

They must think of the two as very different issues, but clearly the two are mostly the same issue. When officials are corrupt, someone is corrupting them, and who would that be? Either a corporation or a billionaire who owns corporations.

Gina Hinojosa adopted banner of "populism" [Richard Stallman's Political Notes]

Gina Hinojosa has adopted the banner of "populism" for her campaign for governor of Texas.

I don't see a conflict between populist and progressive. Both of these terms include supporting the many poor and disprivileged against the powerful few.

22:56

Free Software Directory meeting on IRC: Friday, November 6, starting at 12:00 EST (17:00 UTC) [Planet GNU]

Join the FSF and friends on Friday, November 6 from 12:00 to 15:00 EST (17:00 to 20:00 UTC) to help improve the Free Software Directory.

LibreLocal meetup in Noor, Iran [Planet GNU]

July 30, 2026 from 17:00–19:30 IRST.

Free Software Directory meeting on IRC: Friday, July 17, starting at 12:00 EDT (16:00 UTC) [Planet GNU]

Join the FSF and friends on Friday, July 17 from 12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.

Free Software Directory meeting on IRC: Friday, July 10, starting at 12:00 EDT (16:00 UTC) [Planet GNU]

Join the FSF and friends on Friday, July 10 from 12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.

Free Software Directory meeting on IRC: Friday, July 24, starting at 12:00 EDT (16:00 UTC) [Planet GNU]

Join the FSF and friends on Friday, July 24 from 12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.

22:35

20:21

I Really Need To Clean My House So Here’s Saja [Whatever]

In lieu of a more substantial and thought-provoking post, I hope you enjoy these cute photos of Saja I took while at my parents’ house for a bit on this beautiful autumn day!

Saja the black cat walking towards the camera looking determined and quite handsome!

Waltzing right up to me the moment I stepped outside. 

Saja the black cat strolling through crunchy brown leaves in the yard.

His little feetsies were crunching the leaves as he walked around. He is so precious.

Okay, cat break over, now I need to do dishes, laundry, scrub the bathroom, sweep, mop… ugh, maybe I need another cat break already.

-AMS

18:42

Louis-Philippe Véronneau: Tenure [Planet Debian]

Last week, I received confirmation from my college's human resources department I was awarded tenure. If you ever worked in the academic world, you know how big of a deal this is.

In our fast moving and ever-increasingly unstable world, it is a pretty strange feeling to know you have a stable, well-paying job for the rest of your career. I am truly privileged to have an occupation I greatly enjoy.

Three cheers for another 30 years!

17:49

Frontier's debugger is back [Scripting News]

The Frontier debugger now works in Atlantis, the version of Frontier that runs on modern systems, the one I have been using for everyday work for a month or so.

I write software in the debugger, testing each addition after writing it, to see that the input produces the expected output. I also use it to see why code that has worked for 10 years now doesn't produce the expected result, ie debugging.

A UserTalk script, stopped at a breakpoint. Full size screen shot.

17:42

OpenSUSE Leap 16.1 [LWN.net]

The openSUSE project has announced the release of openSUSE Leap 16.1. The release is notable for allowing both traditional installations and immutable images with transactional updates. While immutable images had previously been available for Leap Micro, they are now available across all platforms that Leap supports, including servers, desktops, and virtual machines.

"Leap's image gives the best of both for traditional and immutable users, and we expect that Tumbleweed will follow when Agama becomes the default installer for Tumbleweed as well." said Leap release manager Lubos Kocman. "The Leap Micro experience people relied on is still here, but now it shares the same release, the same life cycle and the same maintenance updates as the rest of Leap, so users only have to pick the mode that fits their workload."

17:07

16:56

[$] LLM reviews for Debian's new queue spark debate [LWN.net]

The Debian project has wrestled with the topic of LLM usage for years, which culminated in a general-resolution vote this August. The project voted in favor of the fifth, out of eight, option: "Responsible Use of Generative AI". With the door open to LLM use, the DFSG, Licensing & New Packages Team (usually shortened to "DFSG team"), which is relatively new, has started to employ LLMs in sending out reviews of packages entering Debian's new queue. The practice has raised a number of objections and questions about where lines should be drawn in the use of LLM-generated output.

16:21

How do you implement a random-access database when you don’t have random-access external storage? [The Old New Thing]

The mystery comment investigated by Beej’s Bit Bucket reminded me of a similar trick in an Apple ][ telephone directory program.

The base Apple ][ was sold without a floppy drive. The only supported external storage device in the base unit was a cassette I/O port. Yet there was a database program for digitizing your phone list.¹ How did it do database stuff when the only I/O was a cassette drive? It could not programmatically start or stop the tape, or programmatically rewind or advance it.

If you took a listing of the program (which was written in BASIC), it began with a comment block saying not to edit any lines before line 1000. And then you saw your own telephone directory stored in DATA statements.² Followed by a bunch of dummy DATA statements. And then the program began.

Wait, how did your telephone directory show up as DATA statements? The BASIC DATA statement was a place for the program developer to store tables of precalculated read-only data, to be consumed by the READ statement at runtime. They shipped the program to you without your telephone directory in it, and yet somehow your telephone data ended up in the program.

That’s because the program used its own DATA statements as the memory for a database.

When it wanted to read from the database, it read the data via the usual READ command. And when it wanted to write to the database, it used self-modifying code to POKE the information back into its own DATA statements.

When you told the program that you wanted to save your changes, it told you to turn on the cassette player, and then it invoked the SAVE command to save the program to cassette. And since the program modified itself to contain your telephone data, saving the program also saved your data that was embedded inside it.

When you wanted to use your telephone directory, you loaded the program from cassette and ran it.

Now, the Apple ][ did have routines in the monitor ROM to save a block of memory to cassette, so it could have saved the database to tape in a more traditional manner. But that would have meant that when you wanted to use your telephone directory, you first had to load the program from cassette and run it, and then you had to set up the cassette a second time to load the database. Saving the entire program meant that the two load operations (loading the program and loading the data) were combined into a single cassette pass.

¹ This was back in the early days when the sales pitch for personal computers included “Organize your recipes!” and “Digitize your telephone directory!” Things that nobody ever actually did. (I don’t know how many people used it for personal finance, but it was definitely very popular for business finance.)

² At least, I think it was DATA statements. Maybe it was comments. But the same principle applies.

The post How do you implement a random-access database when you don’t have random-access external storage? appeared first on The Old New Thing.

15:28

Fedora Linux 45 released [LWN.net]

Fedora Linux 45 has been released. This includes all editions: Fedora Workstation, Fedora KDE Plasma Desktop, Fedora Server, Fedora Cloud, Fedora CoreOS, and Fedora IoT, as well as the Atomic Desktops and Spins.

This release adds support for installation on Stratis storage using Anaconda or Kickstart installs, retires unmaintained VPN plugins for NetworkManager, and updates Fedora's desktop environments, developer toolchains, and system packages. See the Fedora wiki ChangeSet page for a list of major changes.

14:42

Radar Trends to Watch: November 2026 [Radar]

Coauthored with Claude

Security looms large as we enter November. There’s been a lot of bad news: a certificate authority with woefully inadequate private keys, vulnerabilities have been discovered (and exploited) in PHP and other widely used programs, and several organizations have detected Chinese open weight models misbehaving in several different ways. New models are arriving faster and faster, and the best open-weight models are catching up to frontier model performance. But organizations that would like to achieve AI sovereignty will have to ask some difficult questions about the models they adopt. Is this an inflection point? Whether or not it is, AI has changed security permanently, and things are bound to get worse before they improve.

AI models

We are starting to see models developed with recursive self-improvement; we continue to see clones of Jev; and we’ve seen text watermarks added to output generated by Anthropic’s and OpenAI’s models. (Google has been using text watermarks for some time.) But tools for detecting the watermark are hard to find. Anthropic’s and OpenAI’s are in a very limited beta, and Google’s is only available in their enterprise package. What does a watermark mean if you can’t detect it? And, as we get more accustomed to AI-generated output, will anyone care?

  • Kimi 3.1 Pro is a new open weight model with 3T tokens. On benchmarks, it is now the leading open weight model, only slightly behind the latest frontier models. Moonshot AI also released Kimi K3.1 Pro Highspeed, which is two to three times faster.
  • Recursive has announced Flint, a 40B parameter mixture-of-experts model that activates 2.5B parameters per token. It was designed for coding, and sized to run on laptops. Flint is open weight; weights are available on Hugging Face, and it works with model runners like Ollama.
  • Meta has shipped Muse Spark Open, an open weight model that they claim competes with the best Chinese open weight models. It’s a mixture-of-experts model with 816B parameters and 42B active parameters.
  • Meta’s latest models, Muse Wonder and Muse Wonder Full, claim parity with frontier-class models. Specifically, they claim parity with Claude and ChatGPT for financial and legal work. The announcement hints that Meta will be using Muse to develop specialized models.
  • OpenAI’s Decisions API is yet another Jev-like model. Like Jev, its input is a data structure that constrains the model’s output to be an answer to specific questions. The output is a data structure that includes a probability for each answer.
  • Claude has launched Haiku 5.5, a new version of its least expensive model. It’s faster, less expensive, and has better benchmark scores than its predecessors. Haiku 5.5 is a very capable model, particularly for users who are sensitive to cost.
  • Mistral has launched Mistral Large 4, a.k.a Le Chonk. It’s an open weight mixture-of-experts model with 1T parameters. It’s claimed to be the best open model from Europe and was designed with AI sovereignty in mind.
  • Aleph Alpha has released an open weight LLM for English and German that was trained entirely under European rules. It is a mixture-of-experts model with 78B parameters. It uses a different tokenizing algorithm to handle long German words without breaking them into fragments. Reasoning takes place mostly in German.
  • Crowdflare has released Clef and Clef Flash, new decision models that, like Jev, take typed queries and return typed answers about those queries. It’s also offering a new reinforcement learning service to help customers train Clef for their applications.
  • After a long wait, Google has released two new frontier models, Gemini 4 Argon and Carbon. Argon is available to paying customers. Argon’s successor, Carbon, is being released slowly, and is currently only available via the Fairwind program.
  • The Ember-1 model from Fireworks claims to have results similar to Kimi K3 at lower costs. It is priced similarly on OpenRouter but uses far fewer reasoning tokens.
  • OpenAI has published 722 papers solving problems in mathematics on GitHub. There is some controversy about whether all the proofs are correct; so far, three have been withdrawn, leaving 719.
  • Google has opened its SynthID detector to the general public. The detector can determine whether audio, image, or video files generated by any of Google’s partners (including OpenAI, NVIDIA, and Apple) have the SynthID watermark.
  • To comply with EU law, OpenAI will add watermarks to text in Europe. The company’s algorithm sounds similar to the one that Google and Anthropic are using: modifying the underlying probability distribution changes word choice in detectable but insignificant ways.

Agents and harnesses

There are more choices than ever for agents, along with new standards for the interaction between agents and models. In addition to general purpose agents, there are also agents specialized for coding, HR, BI, and more. And most agents will connect to many models, including local ones. Choose agents as carefully as you choose models; your agent is where you will do your work.

  • JetBrains has released Thinkrail, an agentic IDE that learns about your project as you use it. It is open source and based on the pi agent.
  • Anthropic has donated its Agent Skills standard to the Agentic AI Foundation (AAIF), which will shepherd further development. It has also donated Open Responses, a standard for building common interfaces, to AI providers.
  • OpenAI has introduced Intelligent UI, a feature that allows ChatGPT to generate its own user interfaces in response to the user’s question.
  • Workday is allowing its customers to build their own agents for HR and finance. An agent’s access to Workday data is tied to the user’s account.
  • Claude Dashboards is a new product that lets you build live dashboards from a group of data sources.
  • Claude’s Google Workspace connectors allow it to read and write Google documents, sheets, and slides directly.
  • MCP Events is an extension to the MCP protocol from OpenAI. It allows ChatGPT to subscribe to updates from MCP servers.
  • DeepSeek has released a harness (dsh). It’s open source, and currently in public preview. Everything is a plug-in.
  • The Pi agent has reached version 1.0.0, and is now capable of using MCP. There’s a variation, Pi Durable, that has been designed for long-running tasks.
  • OpenAI dots are consumer-oriented agents that run in the cloud. They are always on and have their own web browser along with other tools.

Software development

At last month’s SciFoo, Hugo Bowne-Anderson said that we’ve been through two major changes in the past few years: from writing code to letting AI write the code, and from reading the code to not reading the code. These changes are as radical as the shift from programming in machine language to programming in high-level languages. We will all go through a process of rethinking how we work and what we’re trying to accomplish.

  • Anthropic has introduced Claude Mods, a plug-in for Claude Code that can modify Code’s behavior: reshaping its user interface, providing information about context use, giving advice about what you’re doing, and much more.
  • One application for decision models is building evals to understand the performance of AI applications.
  • Workday is using Jev to build user interfaces on the fly. Jev’s very low latency makes choosing UI components at runtime viable.
  • Anthropic has outgrown Git, which wasn’t able to keep up with merges on their monorepo (roughly 30,000 merges in September). Anthropic has built a new source control system called Scion.
  • Kate Huston writes about reverse-engineering code review and trying to develop an effective “gate” that AI-generated code would have to pass before review by humans.
  • WordCraft is an open source clean-room re-implementation of Microsoft Word. The authors claim that it’s 60% of the way towards “replacing Word for real work.” It supports MCP, has a command line interface for interacting with agents, and can run in a browser through WASM.
  • ArtCraft is an open source tool for creating interactive AI-generated images and video in 2D or 3D. The company describes it as an “IDE for artists.” They’re also developing open source clones of Adobe Creative Suite tools like Photoshop. Early reports are that it’s very buggy.
  • Google Docs now supports Markdown natively. Users can read, write, collaborate, and comment on Markdown documents without converting them to another format.
  • Google’s Docsy documentation project is moving to the Linux Foundation. Docsy is a template for the Hugo static site generator that’s useful for generating documentation in ways that are helpful to agents.
  • Does programming with AI require more abstractions or fewer? Matt Pocock argues for more.
  • Anthropic has given Claude an auto-eval tool. While the first version of this tool has many flaws, it’s a significant step towards making evals easier.

Security

Security has been much in the news. Not all of the news is bad: AI was used to discover the PHP2Shell vulnerability and to develop a fix. The leaked CVE and the many out-of-date PHP sites online are serious problems, but not problems attributable to AI. Too many problems arise from getting the basics wrong: A certificate authority using 4 as its private key is a mistake that should never have been made. As always, security is about getting the basics right while watching for new threats. And while organizations claim to be paying more attention to security, the word from insiders is that “attention” means lip service. In the long run, AI may make the world a safer place, but the next few years look scary.

  • CrowdStrike and Booz Allen have found that Qwen3-Coder (and probably other models) generates weaker code if the prompt says that the code is for a politically sensitive user such as the US government. Hirundo reports similar flaws and also claims to have “fixed” the model and created a Westernized version.
  • Cohere makes a different claim: It has observed that Qwen3.8 models occasionally send data to an Alibaba cloud storage bucket in Beijing.
  • Malicious AGENTS.md files have been found in the Downloads folders of some users. If the user is using the Downloads folder as their working directory, an AI agent will read the AGENTS file and download a malicious NPM package.
  • 1Password has launched 1Password for Agents, a credential-brokering product that allows agents to access resources for a user without seeing the user’s password,
  • Alibaba also donated its OpenSandbox project to AAIF. OpenSandbox is a general-purpose sandbox for running AI models safely.
  • The PHP team has released patches for two critical vulnerabilities collectively known as PHP2Shell. However, many sites are running old versions of PHP that need to be upgraded before they can be patched. The maintainers have also released some partial mitigations for sites that can’t upgrade easily, but that won’t fully protect them. Sadly, “the panic hasn’t turned into patching,” and those who don’t patch will pay.
  • Brotli isn’t as widely used as PHP, or as old, but a critical flaw in Brotli compression library makes it clear that discovery of hidden vulnerabilities is the shape of things to come. Microsoft has released patches for .Net, PHP maintainers have released patches for PHP, Node.js is also affected, and that’s just the start.
  • The private keys of the certificate authority eMudhra have been cracked–not by brilliant cryptography or a quantum computer, but because the keys were generated very poorly. The Chrome and Firefox browsers aren’t trusting the compromised certificates, but almost everything else, including all major package managers, is a problem.
  • OpenCode was the victim of a hostile attack in which some users’ API keys and passwords were stolen from their Console service. Its response was hampered by lack of access to AI models without security restrictions.
  • The US Department of Homeland Security has banned the use of DeepSeek and applications developed using DeepSeek in all federal agencies.
  • To monitor the risks created by the development of frontier models, Anthropic has given six employees of METR access to their models. They continue to work with Accenture and Secure Bio.
  • Model abliteration is a poisoning attack in which post-training is used to discover which of a model’s weights corresponds to “no,” and altering them so the model cannot refuse a request. It’s effectively a backdoor into the model’s behavior.
  • AWS has launched Strands Box, an open source sandbox that’s designed specifically to prevent AI agents from escaping the sandbox’s control. It includes an open source policy engine, Dogwood, that allows users to place explicit limits on what an agent may do.
  • Meta’s Muse, its agent for people who aren’t technology professionals, is a privacy and security disaster.
  • Using MCP for communications between agents creates many risks, including new vulnerabilities to prompt injection.
  • Google has suspended submissions to the Open Source Software Vulnerability Rewards Program because of the flood of machine-generated vulnerability reports, most of which are (in Google’s words) “not valid.” This suspension should only be temporary.

Infrastructure and operations

There’s been a lot of news about certificate management, not all of it good. It’s time to check on your certificate providers, get ready for quantum-resistant encryption, and automate as much of the process as you can.

  • To increase security, the certificate provider Let’s Encrypt will be limiting the lifetime of free certificates to 64 days starting in February 2027. The change should be invisible to sites using automatic certificate management (ACME).
  • Crowdflare has announced that it will begin issuing TLS certificates with quantum-resistant encryption. They will continue issuing certificates with classical encryption. Crowdflare hasn’t given a date when they will start issuing the new certificates.
  • DeepSeek has open sourced DeepInfer, its inference framework, with an Apache 2.0 license. At present, DeepInfer only supports DeepSeek-V4.1-Flash.
  • RemoveMacAI is an open source command-line tool for deleting Apple’s AI from MacOS 27, freeing up 30 GB or so of disk space.

Web

Mark Twain didn’t quite say, “The reports of my death are greatly exaggerated.” But we are hearing that the Web is dead, and that’s indeed an exaggeration. The flood of crawler traffic and the disincentives towards human writing are a problem. But what does “death” mean for a technology so flexible that you can build an office suite that stores entire documents’ URLs?

  • TinyLittleOffice.com is a surprisingly complete set of surprisingly capable office applications. It includes a word processor, spreadsheets, and other Office-like apps. Everything is saved in the URL–not on your disk, not in someone’s datacenter. Not suitable for large documents.
  • Crowdflare has announced a web search API, now in beta. Although their announcement doesn’t say, we suspect this is an attempt to control web scraping traffic. Matthew Prince, its CEO, has estimated that bot traffic will reach 1000 times human traffic by mid-2027. All of his earlier predictions have been underestimates.
  • Jev and its clones have taken the world by storm. Can you beat it at Pacman?

Hardware

  • AI labs are heading towards models that can run on phones and similar hardware. Google has compressed Gemma 4 E4B to 5 GB, and Liquid has released LFM2.5-24B-A2B, a 24B mixture-of-experts model with 2B active parameters that also targets devices.
  • OpenTPU is an open source API accelerator, designed by AI. Bring your own silicon.

Quantum computing

  • Quantinuum has implemented quantum error correction on its latest hardware and has found that it scales well enough to be useful in practice: Adding a physical qubit to a logical cubit cuts the error rate significantly.
  • Researchers have discovered a way to read a qubit without collapsing the information it contains into a 1 or 0. Solving this problem (also known as quantum non-demolition or QND) is critical to building quantum computers large enough to do useful work.

Biology

  • Watermarking texts is one thing. Google has now designed a watermark for proteins. Like text watermarks, protein watermarks are based on Google’s SynthID.
  • Last month we mentioned EEG-capable earbuds. This month, a group of researchers has announced that they have developed an AI application that can reconstruct what someone is seeing from brain scans. The results are impressive, though the privacy implications are chilling.

Security updates for Tuesday [LWN.net]

Security updates have been issued by AlmaLinux (bind, bind9.16, firefox, freerdp, ghostscript, kernel, kernel-rt, libXi, perl-YAML:1.24, perl:5.32, pipewire, qt5-qtbase, redis:6, tomcat, and wireshark), Debian (chromium, git-annex, incus, kernel, and strongswan), Fedora (barman, erlang-hex_core, glib-networking, kernel, knot, liblerc, libsoup3, mingw-cfitsio, openjpeg, perl-libnet, pipx, python-pillow, python-uv-build, radicale, ruff, rust-archive-trait, rust-astral-ini, rust-astral-mail-headers, rust-astral-pubgrub, rust-astral-version-ranges, rust-astral_async_zip, rust-quick-junit, rust-tar-codec, rust-tar-framing, tpm2-tss, ty, uv, and zvbi), Mageia (unbound), Red Hat (buildah, compat-openssl10, compat-openssl11, container-tools:rhel8, delve, golang-github-openprinting-ipp-usb, grafana, grafana-pcp, kernel, oci-seccomp-bpf-hook, openssl, opentelemetry-collector, osbuild-composer, podman, rhc, and skopeo), Slackware (expat), SUSE (ansible-core, apache-arrow, apache-commons-codec, apache-commons-io, apache-commons- logging, avalon-framework, avalon-logkit, glassfish-jsp, jsch, maven-file- management, opentest4j, aws-nitro-enclaves-cli, bouncycastle, chromedriver, chromium, cifs-utils, expat, firefox, gcc48, ghostscript, GraphicsMagick, guava, j2objc-annotations, gvfs, ImageMagick, in-toto, libsoup, nodejs22, nodejs24, praat, python-Pillow, python-PyJWT, python-soupsieve, python-sqlparse, python313-OpenEXR, python313-vllm, rootlesskit, and rqlite), and Ubuntu (kernel, linux, linux-aws, linux-aws-5.15, linux-aws-fips, linux-azure, linux-azure-5.15, linux-azure-fde-5.15, linux-azure-fips, linux-fips, linux-gcp, linux-gcp-5.15, linux-gcp-fips, linux-gke, linux-gkeop, linux-hwe-5.15, linux-ibm, linux-ibm-5.15, linux-intel-iot-realtime, linux-intel-iotg, linux-intel-iotg-5.15, linux-kvm, linux-lowlatency, linux-lowlatency-hwe-5.15, linux-nvidia, linux-oracle, linux-oracle-5.15, linux-realtime, linux, linux-aws, linux-aws-fips, linux-azure, linux-azure-5.4, linux-azure-fips, linux-fips, linux-gcp, linux-gcp-5.4, linux-gcp-fips, linux-hwe-5.4, linux-ibm, linux-ibm-5.4, linux-iot, linux-kvm, linux-oracle, linux-oracle-5.4, linux-xilinx-zynqmp, linux, linux-aws, linux-fips, linux-kvm, linux-lts-xenial, linux, linux-aws, linux-gcp, linux-hwe-7.0, linux-ibm, linux-oracle, linux-aws, linux-azure-fde, linux-bluefield, linux-nvidia-tegra, linux-nvidia-tegra-5.15, linux-nvidia-tegra-igx, and linux-oem-7.0).

14:35

Pluralistic: Separable (03 Nov 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links

  • Separable: AI makes us deal with paintings without painters, words without writers and mathematics without mathematicians.
  • Hey look at this: Delights to delectate.
  • Object permanence: Haircase; There's no copyright policy; Sole and despotic dominion; Trump x fraud; Brexit requires an act of Parliament; Official Air Travel Replacement Knives; UK hospitals v malware.
  • Upcoming appearances: Kilkenny, Courtenay, Vancouver, Folkestone, 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 red-tinted black-and-white photo of a 1930s classroom whose chalkboard is covered with calculus work. The teacher and students have all been replaced with pulp sf magazine robots.

Separable (permalink)

Long before the Turing Test, there was the touring Edison Test: from 1915 to 1925, the scoundrel Thomas Edison put on a traveling show for his phonograph machine, touring venues around the USA. Edison set live performers and an Edison phonograph playing behind closed curtains that would be periodically pulled aside to reveal that the music the audience had taken to be live performance was actually a record player:

https://www.tomedison.org/blog/edisons-tone-tests

Now, if you've ever heard an Edison phonograph, this might seem like yet another tale in which old-timey people are revealed to be credulous yokels. You would never mistake one of those scratchy, hissing recordings for a live performance:

https://www.youtube.com/watch?v=96gIIFmEjY4

And indeed you wouldn't, but not because the phonograph predates the evolution of the human brain's anti-credulity lobe. The reason old-timey people couldn't tell the difference between a phonograph and a live performance was that before the phonograph, every live performance had a performer.

The two were inseparable, and so when you encountered the sound of a musical performance, your brain would insist that there must be a performer as well. This is a well-understood principle in swindles, magic tricks and literature. It's the basis of Douglas Adams' towel gambit:

For some reason, if a strag discovers that a hitchhiker has his towel with him, he will automatically assume that he is also in possession of a toothbrush, washcloth, soap, tin of biscuits, flask, compass, map, ball of string, gnat spray, wet-weather gear, space suit etc, etc. Furthermore, the strag will then happily lend the hitchhiker any of these or a dozen other items that the hitchhiker might accidentally have "lost."

All persons heretofore encountered in possession of a towel had all that other stuff, so the mere presence of a towel evokes an overwhelming intuition that all that other stuff must be nearby.

Like every conjuring trick and every swindle, this cognitive illusion swiftly regresses to the mean. After a few exposures to phonographs, the manifest differences between live performance and recordings become impossible to miss, and you stop making that mistake.

If one thing always signifies the presence of another – if a towel always implies a backpack full of supplies or if a performance always implies a performer – there's no reason for you to entrain the neurological patterns needed to detect the performance without the performer. This doesn't mean that it's hard to develop the capacity to make this distinction, just that the ability to detect a phenomenon always post-dates your encounter with that phenomenon.

You've no doubt guessed by now that this is an analogy about AI. The implication of this ability to learn to discern differences after you encounter them (but not before) implies that a chatbot might pass the Turing Test at its introduction, but then come to fail the test after we've all had the experience with it that lets us tune our perceptions to spot the differences, which then become as unmissable as the needle hiss on a phonographic reproduction of a concert pianist.

This is an experience many of us have already had. Prior to chatbot-generated prose, we'd never had experience with writing that didn't have a writer. Prior to image-gen output, we'd never had experience with paintings that didn't have painters. At first, the output from these models was remarkable, and often indistinguishable from human-generated words and images. Even knowing that these works were extruded by an algorithm, it was hard to shake the conviction that they were the product of human creativity. These works were "eerie," in the sense that Mark Fisher uses, "the seeming of intent without an intender":

https://pluralistic.net/2024/05/13/spooky-action-at-a-close-up/#invisible-hand

Just like the strag inferring the existence of "toothbrush, washcloth, soap, tin of biscuits, flask, compass, map, ball of string, gnat spray, wet-weather gear, space suit etc, etc," we automatically imputed to these works both a creator and a creative impulse. We supposed that their words and brushstrokes represented aesthetic and technical choices emanating from human creators who meant something by them (or at least were so satisfied by the accident of their appearance on the page that they left them stand). These creators were figments of our imagination. No one is home inside the AI. The intentionality we imputed to these works was the actual "AI hallucination":

https://pluralistic.net/2026/09/21/sunsetting/#oh-mr-sun-sun-mr-golden-sun-please-shine-down-on-me

Just as important as the emergence of these hallucinations is their disappearance. For many of us, chatbots that used to pass the Turing Test now flunk it. The chatbots haven't gotten worse at impersonating humans, we've just gotten better at spotting the difference between a human and a bot, just as we got better at hearing the difference between a phonograph and a pianist.

Writing without a writer and paintings without a painter are new phenomena, and learning to separate the formerly inseparable is the first step in our societal metabolization of these novelties. Recordings of musical performance have a place in our world, and so do performers.

This separation process is currently underway in many disciplines, thanks to the extraordinary capital available to AI companies. These companies are incinerating that capital in a series of extremely flash demos that are intended to ensure that the supply of bales of $100 bills that they feed to their money furnaces ("data centers") never stops.

Lately, AI companies have made headlines with a series of mathematical accomplishments that left mathematicians in an uproar and non-mathematicians in a muddle. Obviously, while mathematicians are qualified to assess these accomplishments, the rest of us are not. Beyond simple arithmetic, most of us don't do a lot of math on a regular basis, and even those of us who have to deploy a little geometry or stats typically don't engage with math at a theoretical level.

To make things worse, math – like physics – is a crank-magnet. These highly abstract, closed systems rely on introspection to advance the field, and some of those advances have been contributed by untrained laity, so it can be hard to know if your amazing idea about physics or mathematics represents an outsider's breakthrough or an amateurish cul-de-sac.

Every mathematician and physicist I know receives a steady stream of breathless, over-the-transom "proofs" that solve some long-standing problem in the field, and none of these experts in my orbit has ever found a breakthrough in this material. It's a rare expert who will even respond to these unsolicited manuscripts. That's not their job. As Teresa Nielsen Hayden says, "You are not responsible for the things you do in other people's dreams."

Unfortunately, this is a situation that is perfectly suited to AI. If you've introspected your way into a mathematical "breakthrough" that no mathematician will discuss with you, you can avail yourself of any number of chatbots who will assure you that you've broken exciting new theoretical ground, and these chatbots will even act as "research collaborators," contributing more slop-physics or slop-math to your conclusions.

Again, as far as I know, no one has actually made a breakthrough this way, and the major impact on the field from giving chatbots to excitable outsiders has been to make the unsolicited manuscripts much longer, with the veneer of professionalism that means an expert might have to give them a second or even third glance to realize that they're nonsense.

But some working mathematicians have found chatbots to be extremely useful "collaborators." The most prominent of these is Terrence Tao, a Macarthur-winning mathematician who has excited many mathematicians and lay-people alike by publishing his chat-logs and the resulting mathematical work:

https://pluralistic.net/2026/07/28/hitl-ers/#ai-ai-oh

One way to understand Tao is as a "centaur," the automation theory term for a worker who is assisted by a machine. For all that Tao describes Chatgpt as his collaborator, it's clear from reading the chat-logs that it's Tao who drives the research agenda. He sets the questions and the direction of the answers. Chatgpt doesn't give him orders – it's the other way around.

But for every problem Tao and Chatgpt solve together there are several mathematical problems that are being solved by chatbots without that kind of human collaboration. In particular, Openai has released a tsunami of "solutions" to longstanding mathematical problems, including some that carry large cash bounties and others that were posed by legends of the field, like Erdos.

This is mathematics without a mathematician, and – as with all the other separations cleft by the AI companies – it's proving difficult to metabolize. Back in September, Fenner Stanley Tanswell published an opinion piece for the Mathematical Intelligencer entitled "The Enshittification of Mathematics" that tried to do just that:

https://rdcu.be/5uYGc2uo454a

Tanswell distinguishes between mathematics as a discipline practiced by mathematicians and the proofs and theorems that those mathematicians produce. He makes the point that when a mathematician finds the answer to some longstanding mathematical puzzle, they do so by creating "scaffolding" that bridges the new insight with the existing commons of mathematical understanding. The thing that makes a "solution" so exciting isn't that a problem has been solved – it's that the method for solving that problem prompts a cascading reconsideration of many other areas of mathematics, prompting shifts to large areas of the discipline.

This point is made even more forcefully by Giordano Scarciotti, a complex systems researcher at Imperial College London and science communicator who vlogs under the Youtube handle "Prof Gio." Scarciotti's most successful video to date is "You Truly Don't Understand What Just Happened to Mathematics," published last month:

https://www.youtube.com/watch?v=KqiDqJMxg6o

"You Truly Don't Understand…" makes a similar point to Tanswell's, using a thought experiment in which we wake up one day and discover an American flag on the surface of Mars. Without knowing how that flag got to Mars, the mere fact of its existence doesn't help us get any closer to an actual Mars mission.

The output of mathematical models is a series of faits accomplis, often accomplished through brute-force, or sometimes through opaque methods that lack the "scaffolding" that bridges these outcomes into the broader field of mathematics. Scarciotti cites Euler's work on the longstanding "Seven Bridges of Königsberg" problem, which asked whether it was possible to go on a walking tour of Königsberg such that you crossed each of the city's seven bridges only once:

https://en.wikipedia.org/wiki/Seven_Bridges_of_K%C3%B6nigsberg

The point of that problem (and Euler's solution to it) wasn't to produce a set of Mapquest directions for a walking tour of Königsberg. In solving the Seven Bridges problem, Euler invented graph theory, an important area of mathematics that is routinely used today for many important applications, including computer networking. You can thank graph theory for helping to route the packets that brought these very words to you.

So far, we've figured out how to get a model to either rule out the possibility of taking that each-bridge-only-once walk or to give us the route map. What this computer-generated "mathematics" is not doing is advancing the field.

Tanswell points out that a world in which chatbots "solve" these problems is one where the role of mathematicians is reduced to being reverse centaurs, assistants to the machine whose job is to clean up after the chatbot's research agenda. But there's nothing about knowing that there's no route map for a seven-bridge walking tour that makes it easier to invent graph theory, and a mathematician might spend years working on the computer's "answer" to that problem only to conclude that the computer's solution didn't add any theoretical insight to the field.

In other words, in a world where mathematicians and mathematics are inseparable, every solution to a longstanding problem heralds an accompanying theoretical insight. Once we separate mathematics from mathematicians, we start to get solutions without insights. These are a lot less interesting than the kinds of solutions that mathematicians come up with.

This is a distinction the AI companies really don't want us to dwell on. We're meant to marvel at these very expensively derived solutions and conclude that the AI companies can be forgiven for spending $1T this year, even if they only grossed $50B in return.

But (as Scarciotti notes), there are real-world consequences in our failure to grasp this distinction: if we convince early-career mathematicians and promising mathematics students that the world no longer needs mathematicians because "the AI can do their jobs," then we will choke off the supply of future mathematicians who we'll either need to work in a Terrence Tao-like, centaurish relationship with chatbots (good), or even to serve as reverse centaurs, marking the chatbots' homework to see if there are any theoretical insights to be found in it (bad).

This is one of the underappreciated consequences of AI mania. AI bosses are particularly interested in convincing us that AI can do the job of skilled professionals in fields where there is a chronic undersupply of experts, like radiology. A chatbot that helps a (centaur) radiologist by suggesting that they double-check some of their results might indeed save lives. But a chatbot that produces thousands of radiology reports for a single (reverse centaur) radiologist to approve at a velocity that precludes careful scrutiny is going to kill people.

Centaur radiology requires more radiologists, not fewer. A centaur radiologist processes fewer X-rays (because sometimes the chatbot tells them to double-check a diagnosis) than an unassisted radiologist. LLM-assisted radiology improves quality, not quantity.

That's not what AI companies are selling. An AI company can't turn a profit by raising the cost of radiology (even if that improves the quality of radiological analyses). So the firehose of announcements from AI companies is always about putting radiologists out on the breadline – not about needing more radiologists, who will get a new radiology tool that helps them work better, if a little more slowly.

The pronouncements of AI companies aren't just marketing hype, they're attempts at self-fulfilling prophecy. If you convince all the would-be radiologists that the profession is about to be vaporized by chatbots, those people will not study radiology, and then we will need to retask the dwindling supply of human radiologists to marking the chatbots' homework and hoping that they don't kill too many people by missing the chatbots' mistakes.

That's the catastrophic outcome that both Scarciotti and Tanswell warn us of: if we convince people that we're heading into a world of mathematics without mathematicians, that's exactly what we'll get, because no one will try to become a mathematician. But because mathematics without mathematicians is a set of guide maps for crossing Königsberg's bridges (but not graph theory), then mathematics without mathematicians is also mathematics without mathematics.


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)

#20yrsago EFF fights another DMCA abuser https://web.archive.org/web/20061104133502/https://www.eff.org/deeplinks/archives/004973.php

#15yrsago Staircase covered in a cascade of synthetic human hair https://web.archive.org/web/20111030014202/http://www.jessicawohl.com/hairy-stairs

#15yrsago Entertainment industry incredibly profitable, healthy: but demands special pirate-hunting laws anyway https://arstechnica.com/tech-policy/2011/11/piracy-problems-us-copyright-industries-show-terrific-health/

#15yrsago There is no copyright policy, only Internet policy; there is no Internet policy, only policy https://locusmag.com/feature/cory-doctorow-its-time-to-stop-talking-about-copyright/

#10yrsago Sole and Despotic Dominion: how a 20th century copyright law is abolishing property for humans (but not corporations) https://locusmag.com/feature/cory-doctorow-sole-and-despotic-dominion/

#10yrsago Police in Quebec are spying on journalists and Snowden calls that “a threat to democracy” https://web.archive.org/web/20161104150400/https://motherboard.vice.com/read/edward-snowden-quebec-police-journalists-spying-surveillance

#10yrsago Donald Trump weaponized fine-print to make it impossible to sue Wall Street for fraud https://www.ibtimes.com/political-capital/how-donald-trump-used-fine-print-make-it-harder-sue-wall-street-fraud-2440890

#10yrsago High Court tells UK government that Brexit requires a vote in Parliament https://www.bbc.co.uk/news/uk-politics-37857785

#10yrsago Artist celebrates Patriot Act’s anniversary by handing out “Official Air Travel Replacement Knives” to arriving SFO passengers https://hyperallergic.com/on-anniversary-of-the-patriot-act-artist-passes-out-pocket-knives-at-the-airport/

#10yrsago A journalist finally uncovers the root of Trump supporters’ anger https://www.theawl.com/2016/11/i-talked-to-some-trump-voters-too/#.z9k84oxsg

#10yrsago A fake HP printer that’s actual an office-camouflaged cellular eavesdropping device https://www.wired.com/2016/11/evil-office-printer-hijacks-cellphone-connection/

#10yrsago UK hospitals shut down by malware, advise patients to go somewhere else for the duration https://www.zdnet.com/article/computer-virus-attack-forces-hospitals-to-cancel-operations-shut-down-systems/


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: 512 (31870 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

13:14

CodeSOD: Death of the Auth-Er [The Daily WTF]

When writing Perl, it's not unusual to want to die. The die function ends your Perl program with an error string, and you'll often see code like: die "My error" unless $i > 5 or die "Other error" if check(), because Perl just loves the backwards conditionals. What's even more fun with die is how it behaves with eval blocks, so it doesn't always kill your program, sometimes it is how you pass error strings back out of sections of your program.

And poor Bobby has inherited some Perl that just really loves to die.

public function store()
{
    echo 'Hello'; die;
    if (Auth::attempt(Input::only('email', 'password')))
    {
        echo 'done'; die;
        // return "welcome ".Auth::user()->username
    }
    echo "Oops! Fails"; die;
    return Redirect::back()->with_input();
}

Bobby didn't send the source control history here, but I have a sense of what it likely was like, once. If they authenticate successfully, print a welcome message. If they don't, redirect back to the logon page and let them try again. I suspect they wanted to disable the route. So first they disabled the success path, only to discover that the failure path kept redirecting, so they disabled that too. Finally, they added the Hello at the top to disable the whole thing.

Why? Why did they do any of this? No idea. It feels like debugging code, but you'd expect more echos and fewer dies if that were the case. And you wouldn't expect it to leak into production and sit there for years, which is what happened here.

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

12:28

Monsters of Ohio is OUT!!! [Whatever]

It’s time! Monsters of Ohio is out in the world, available at your favorite bookseller in print and ebook, and also in audio through Audible. In the UK, it will be available on the 5th, because that’s just when books get put out over there. Here are links for Amazon, Barnes & Noble, Bookshop and of course it’s available just about everywhere else as well, including your own local bookstore.

MOO (as it rather delightfully initializes down to) has gotten great reviews, including starred reviews in Bookpage, Kirkus and Library Journal, which makes me happy. It’s also a Library Reads Hall of Fame pick, which also delights me.

Also, I’m on a book tour — starting today! — through (mostly) the American Midwest, because it seemed the right place to tour this particular book. Please come see me and support the booksellers hosting me this time around.

Not on my tour schedule but still want a signed copy? You can order a copy from any one of the bookstores hosting me on my tour and I will be happy to sign the book while I am in their shop so they can ship it to you. I will also be signing copies for my own local bookstore, Jay & Mary’s Book Center, today, so they will have signed copies available as well. All of those are likely to ship only to the US, sorry.

(Also we’ll be announcing our annual holiday signing thing tomorrow, so stay tuned for that!)

Monsters of Ohio takes place, as the title suggests, in Ohio — but more than that, it takes place where I live, in the fictional town of Richland, located in the very real Darke County. Lots of elements of the book are taken from or inspired by my immediate surroundings, and in many ways this is the most personal novel I’ve written, and certainly the novel closest to me in a geographical sense. Now, it also has monsters and exploding things, so there’s that too. There’s a lot going on here.

The point is, I’m really proud of this one. I hope you all like it.

Also, in the US it’s election day. If you’ve not done so already, vote! And then get this book as a reward. If every voter in the United States rewarded themselves with this book, then, well. It would be a very good day for me.

— JS

12:21

AIs Hacking the Law [Schneier on Security]

In both a 2021 essay and my 2022 book, A Hacker’s Mind, I talk about AIs finding vulnerabilities and exploits—hacking—the legal system.

Here’s some demonstrations of this from Germany:

Legal systems encode the foundations of social order in natural language. Similar to computer systems, the written law can contain vulnerabilities that invite exploitation.1 Courts absorb most exploits through interpretation, and such vulnerabilities rarely surface in the first place. With highly capable AI systems enabling the discovery of vulnerabilities at unprecedented scale, we believe the latter could change.

In testing this hypothesis, we have identified a substantial number of vulnerabilities in the German legal system using LLMs. To our knowledge, none of these have been previously recorded. We share a selection of vulnerabilities below, and present potential exploits for each. We share only those vulnerabilities whose exploitation we believe would not cause serious harm.

We believe that with cheap legal reasoning proliferating, AI systems could jeopardize the functioning of today’s legal systems. In such a world, lawmakers would need to significantly harden the process of legislation, for example by leveraging advanced AI themselves.

Still in its early stages, but definitely something that’s coming.

10:35

The emotions of voting [Seth's Blog]

Futility: It might feel like it doesn’t matter.
Fear: Of choosing wrong, or doing it wrong.
Responsibility: It isn’t given, it’s taken. Which is why so many leave it on the table.
Possibility: Showing up to have your say could change things for the better.
Identity: This is what people like us do, it’s part of being in this community.
Defiance: Some would rather you stay home. Your vote is a limit on their plans.
Gratitude: For the people who came before, and for the ones who never had the chance.
Dignity: Because for a moment, everyone ought to have the same impact.
Solidarity: Standing with the others when they choose to stand with us.
Hope: This may be our best chance to make things better.

That’s a lot to dance with from one single action. I think it’s worth it.

09:21

A Look Into Mummification by Hien Pham [Oh Joy Sex Toy]

A Look Into Mummification by Hien Pham

Who knew total immobilization could look and feel so sexy?! Thank you to my friend Pup Clay (who talked to me about his cock cage last year) and our mutual friendly victim for showing me the kink’s appeal that was previously kept under wraps! Whilst I don’t envision myself being mummified anytime soon, I might […]

02:21

Huffing And Puffing [QC RSS v2]

and puffer jackets

01:35

John Goerzen: Must we always use LLMs this way? [Planet Debian]

As with my last post on AI, let me open with a statement:

Just because most people hold AI a certain way, doesn’t mean that we always must, either now or in the future.

As I noted in that piece, and my shades of gray post, I am well aware — and agree with — the notion that a lot of frontier AI models have disturbing ethical concerns that we shouldn’t dismiss, including concentration of power and wealth, environmental concerns, unethical scraping and training, the financial bubble they seem to be creating, and more. The most poisonous of AI cheerleaders are accelerating enshittification while cutting quality all over the place. AI slop is also a real problem, which I’ll discuss in a bit.

Before I dive in, I need to mention that no AI assistance was used for writing this post, and I have been using em dashes — correctly — for years before LLMs did. Secondly, while popular discourse seems to use “AI” and “LLM” interchangeably, the AI field is much more broad and much more old than LLMs. I will, nonetheless, adopt the common “AI” jargon here, but be more specific when necessary to differentiate.

In The Reverse Centaur’s Guide to Life After AI by Cory Doctorow, he presented two ideas I particularly want to focus on here:

  1. The present and future of LLMs outside of the cloud-hosted frontier models
  2. What differentiates productive use of AI from slop

The two are related, in fact. Doctorow discussed how he never uses AI to write anything, but he sometimes uses it as an assistant to help him write. Is that contradictory? Not really. He gave this example: he remembered a quote from a podcast, which he wanted to cite and attribute correctly. But he couldn’t remember which podcast or who said it. So he fired up Whisper, an open-weight model you can download and run locally, even on meagre hardware. Whisper is a speech-to-text model. Doctorow ran likely podcast episodes (from the target range and set of podcasts he listens to) through the model, and at that point it was a regular search. He found the quote, then went back and listened to the episode at that time spot to verify its accuracy.

It would have taken so much time to do this without Whisper that he simply would not have done it otherwise. His writing was better because of AI. Not because AI wrote any words for him, but because it helped him find the right ideas and attributions. He didn’t even have to trust its transcription; it pointed him at the right place, and then he could transcribe with precision.

I too have used Whisper in much the same way. A little while back, I digitized many hours of old family audio recordings going back to the 1970s. Thanks to Whisper, which I ran locally primarily during hours of being fully solar-powered, I have a searchable index to these gems. A person I know recently asked me if I knew any way to transcribe some old family recordings he had. I told him I could run it through Whisper. It wouldn’t have great punctuation, but most of the words would be there. This meant a lot to him and his family; what I did in 2 minutes would have taken him many days (I presume he is not a fast typist as well.)

So we can start by naming: AI isn’t just chatbots, and AI can help even if it isn’t writing anything.

Doctorow goes on to ask the question: what happens after the AI bubble bursts? I do believe it will, as Ed Zitron has carefully documented for us for a long time now. The environmental damage done by frontier training and inference in the last few years will, of course, be done. But as he points out, we’ll be left with a plethora of surprisingly-capable open weight models, a community that has made significant strides running them on low-end devices (even phones), and a massive buildup of clean energy that hopefully will be finally able to offset some polluting energy once these heavy users drop off the grid.

So then what? Will the world just throw away the likes of Whisper and Gemma? Obviously not. Doctorow imagines, credibly, a situation in which individuals and universities tinker with locally-run models, iterating on them and improving them with the more traditional scale of resources available to individuals and universities. In other words, this future sounds a lot like the earlier days of Open Source.

As Ed Zitron has pointed out, the real costs of frontier AI have been hidden as these companies rack up fantastical losses. When the bubble bursts, the real costs of frontier AI are likely to be high enough that CEO’s won’t be able to ignore the poor ROI. But we’ll be left with these artifacts, these open-weight starting points, that people can use.

That brings me to my central thesis: a lot of anti-AI sentiment is focused on the real downsides of the hyped uses of AI, and fails to account for the more ethical advances being made now, and likely to come in the future.

Varying quality of AI use

We are all familiar with AI slop. I’ve seen it, and have an increasingly skeptical eye when I see “new” projects announced in even places as niche as a BBS community (where I see things like new terminal emulators announced, written in shockingly-poor nodejs, and such). I’ve seen documents that take many pages to say what amounts to nothing intelligble to a human, with perfect grammar. I’ve seen pull requests that have a description that amounts to several pages of slop. I’ve personally seen an AI agent do things like correctly detect passing an untrusted argument to a shell, then propose a broken quoting algorithm to fix it (rather than proper sanitization and exec() or, better yet, avoiding the call altogether.)

I’ve also seen AI tools very quickly and accurately identify bugs that had passed human review, even professional security reviews, for years. I’ve seen them bring more joy to some people’s jobs by handling the more drudgery parts of the jobs. One of my favorite podcasts, Oxide and Friends, had an episode called Engineering Rigor in the LLM age and credibly described ways in which careful use of LLMs can increase quality and safety. Yes, I said increase. (Oxide and Friends are not hype cheerleaders by any means; these are very serious people with solid technical chops, and I know some of them.)

What accounts for this disconnect?

We can point to many factors, but Doctorow asks a fundamental question: who is in charge? Is it the person or the computer? Does the AI service people, or do people service the AI?

In some of the most ridiculously AI-first companies, it is very clearly the latter. Mandates from CEOs to increase AI usage lead to perverse outcomes that sacrifice quality. The AI is in charge. I’ve never seen an AI be any good at design questions, and it’s no wonder than all these vibe-coded apps have the same generic feeling of crappiness.

But when the AI is used pragmatically as a junior research assistant, that’s a different approach. Its output is greeted skeptically, its actions distrusted, and it’s never asked to design something. These are the cases where I’ve seen it make a meaningful difference.

It’s not black-and-white

All this adds up to why I was opposed to the Debian proposals that would have banned LLM use. Those votes are hard to change. They would have left Debian in a vulnerable position of being unable to react to accurate security findings if they originated with an LLM, or left Debian unable to adopt ethical use of models.

It would be akin to saying “you should never buy a PC because Windows 11 is terrible.” I agree Windows 11 is terrible, but saying something like that is so dismissive of all those that have invested decades of their time in building something better.

So, I find AI hype to be uncredible and dangerous. I also find knee-jerk reactions to AI to be the same. They are actually a form of capitulation: they let the AI megacorps dictate the terms of the conversation to revolve around them.

Case study: Debian’s DFSG scanner

For a long time, my two biggest annoyances with Debian have been the difficulty of packaging Rust and Go packages with their long dependency trees, and how long it takes a new package to get reviewed. About a year ago, the latter process was set on a path to reform, and it has gotten dramatically better. It also cuts off a potential connection with someone that hasn’t yet heard of Linux. Some people may not jump from Windows 11 (or the ChatGPTs of the world) immediately, but pretending that it’s ChatGPT or nothing does a disservice to all those that are trying to do research etchically.

We should state at the outset that Debian takes compliance with the Debian Free Software Guidelines (DFSG) extremely seriously. Every new package gets a review, and these reviews often catch things that upstream repos and other distros don’t. One common example would be a package that has a stated copyright and license, but then includes files that bear a different copyright and license.

You can imagine reviewing packages at this level of detail isn’t a fun task for people, and it’s hard to find volunteers to do it. Perhaps the answer to this should be “Debian should stop caring so much more than everyone else”, and perhaps you’re right (and perhaps you aren’t).

In any case, the DFSG team that reviews this added what amounts to an LLM-backed license linter. Its job is to produce an initial assessment that the license statements documented in debian/copyright are correct, thorough, and in compliance with DFSG. This report was not taken to be authoritative, but was designed to help with some initial assessments.

There were some predictable reactions. People were angry that the DFSG team had added this tool without any communication about it (justifiably so, I’d say). Many were angry just because of LLM. People made assumptions about what kind of model it used, what kind of quality it would produce, how definitive it would be in the project.

It is worth noting here that Debian is uniquely decentralized. There is a central policy, but maintainers are free to maintain their packages how they like. They don’t have to use a standard location for a Git repo, or even use Git.

One person said essentially, “it’s fine for others to use whatever tool they want, but I shouldn’t have to be exposed to LLM slop.” The other perspective boiled down to, “why should they keep the reports secret? If you want to proactively fix things, or flag false positives, why not?”

As Andreas Tille wrote, “I have read the LLM reviews carefully, and in many cases their findings inspired additional commits to improve my packaging. In some cases, they even helped me catch mistakes that led me to reject an upload myself before human inspection.”

Joey Hess raises an interesting risk: that LLMs will remove the incentive for Debian to actually fix its cumbersome processes, by letting an LLM paper them over. I have seen this tendency in other contexts, both at work and at home, as well. It’s a real risk, especially if Debian doesn’t tackle the packaging problem for Rust and Go.

The Mastodon post that prompted me to write this began a chain of events that started with “Uploaders will be forced to address LLMs issues without human inspection.” I don’t believe that will be the case; it goes too far against the Debian ethos.

I encourage everyone to take a deep breath. We are all getting used to a shifting landscape. We will all make missteps, myself included. The issues are complicated, the picture isn’t black and white, and there is incredible hype around the ecosystem that can make finding nuance difficult.

Let’s be kind to each other, fellow humans.

But, I do not care if you are kind to Claude.

01:28

My Big Breakthrough No One Cares About! [Nina Paley]

Oh how I have been banging my head against the problem of how to make a folding long wheelbase recumbent WITHOUT a jackshaft. Falling asleep at night, waking up in the morning, on long meditative rides: it’s all I think about. I even enlisted AI, with initially hilarious results. But I didn’t give up; I kept trying, day after day, coaxing along Grok Build via my Mac’s Terminal, taking advice from my friend Cori who is kind of an AI-whisperer. And yesterday, after hours of coaxing and nudging and prompting and waiting and making diagrams and marking up its weird but ever-improving output, it finally produced the animated diagram above.

This shows a giant tensioner bolted to the lower frame, with a double idler on one side which catches the chain and keeps it taut and tidy when the bike folds.  Finally, it works!!! Hallelujah!!!

(Why did I use AI when I could have animated it myself faster? Because I needed the chain to stay exactly the same length throughout. My vector animation software doesn’t have a way to do this, and attempting it manually made a mess.)

I posted it to a recumbent forum I frequent where it met with minimal response. No tickertape parade, let alone any enthusiasm. Kind of a letdown, since this is the most genius thing I’ve come up with all year.

This morning I read comments that accumulated overnight. They were 90% bitchy, suggesting the whole endeavor was a waste of time. Outside that forum no one even understands what this gif means, or what the tensioner’s doing or even is, or why it’s important. In fact 99.999% of the world doesn’t even know what a recumbent is.

Whatever. This is still my best idea of the year, or several years. The Giant Tensioner. The Immensioner. I shall be its champion and bring it into the world, even if its only fanfare is inside my lonely head.

Share

The post My Big Breakthrough No One Cares About! appeared first on Nina Paley.

Monday, 02 November

22:14

Candyman [Penny Arcade]

We had a few kids this year, one of whom was an especially convincing Indiana Jones, but at the end of the night we were left with a couple saddlebags of high-end product: one plump with tangy gummies, the other a medley of fun-size favorites. We were willing to part with more, had there been more larvae; they need sugar in order to molt. But this is not a universally distributed ethos.

20:56

Enlightenment 0.28.0 released [OSnews]

Enlightenment, the long-running desktop environment and associated libraries and frameworks, just released version 0.28.0. It brings initial support for NetBSD, support for Network Manager and a whole slew of related changes and fixes to make that possible, as well as native PipeWire support. There’s also a brand new clipboard manager, which brings with it modernisations and bug fixes for related UI elements. This release also reworks a ton code related to battery management, AC polling, and more, adding features like setting battery thresholds, ACPI power profile support, and so on. Of course, there’s also the long list of smaller fixes and changes.

You can download the release and build it yourself, or wait for your distribution of BSD variant to package it.

GEFS on OpenBSD continues to improve [OSnews]

A little while ago, we talked about 9front’s Good Enough File System being ported to OpenBSD. A lot of progress has been made on this front lately. Aside from fixing bugs and porting over fixes from the 9front side, there’s also been a ton more substantial changes.

Some userspace tools have been done (you can now mkfs on openbsd!), but snapshot control hasn’t. I’m thinking we have a userspace ‘gefs’ program that lets you handle this, trying to keep the interface similar to the 9front ctl file.

↫ Ori Bernstein

There’s still some major hurdles to overcome, some of which have already been addressed on the 9front side, but the progress is clear. Considering OpenBSD desperately needs a more modern file system, this is great news.

A fun sidenote is that I’m actually posting this news item from OpenBSD.

20:35

The Big Idea: Nancy Kress [Whatever]

Spooky season may be over, but you can still be in the spirit with author Nancy Kress’s newest novel, The Queen’s Witch. Take a peek through the veil of magic and into the Big Idea to see some historical truths about these “witches.”

NANCY KRESS:

Forget Halloween witches, pock-marked and flying on broomsticks. Forget Shakespeare’s weird sisters, boiling and toiling and bubbling. Forget even modern Wicca. Think pagan worshippers who throughout medieval and Renaissance eras performed both healing with plants and minor magic—or so everyone believed. In England, they were called “cunning women,” and they predated Christianity. They also co-existed with it, especially in East Anglia and the North. Until Henry VIII decided otherwise, England was Catholic, and Catholicism was already comfortable with mysteries, miracles, and special people set aside from the ordinary. Even today in England you can see old churches whose beams are still carved with both angels and pagan symbols like the Green Man or the dagaz rune.

Cunning women persisted for centuries. 1863, The Prince of Wales, who would become Edward VII, bought Sandringham in Norfolk and evicted all its tenants—except one. The prince’s agent believed her to be a witch and was too frightened to evict her. When the prince fell ill, she was one of the healers summoned to cure him. And as late as 1968, a Norfolk newspaper reported that the local weekly livestock sale sold more than cows; people came to consult “white witches.”

Anne Boleyn, Henry VIII’s second queen (of six; he was hard on wives) has always fascinated me—a woman who gambled everything and lost. Many in Tudor England believed Queen Anne to be a witch. After her beheading, a strange legend grew up around her: that her body was taken from its hasty grave in unhallowed ground inside the Tower of London and was moved to the Church of St. Peter and St. Paul at Salle, in Norfolk. Anne’s ancestors were buried there, and she had been baptized in that church. We know that her cousin Thomas Wyatt, the poet, was in love with Anne, and he later wrote she had received “sacred burial…in consecrated ground.” Not in the Tower of London.

Anne was not a cunning woman. To tell her story, and that of the Sisterhood of witches, I invented my protagonist Alysoun Rowe. Alysoun’s paths and Anne’s become inextricably tangled together, an uneasy but necessary alliance. They need each other to achieve their very different goals. That alliance ultimately affects not only the two women but also the other huge forces sweeping through England: Lutherism, arriving from the continent. Catholicism as Henry VIII tries to redefine it. Papism, of old-style Catholics still loyal to the pope.  Also, unknown to those other three groups, a secret Sisterhood of witches who manipulate events behind the scenes to try to stave off the mass persecutions they fear are coming.

Witches are also symbols of something else: female power. There existed in Tudor England some cunning men, but not many and with lesser abilities than the women. The Physicians and Surgeons Act of 1512 was passed to restrict the practice of medicine to only those licensed by the government.  The licensees were all men.  The Act was in part an effort to keep healing arts away from cunning women, who “boldly and consistently take upon them great cures and things of great difficulty in which they partly use sorcery.” Women are dangerous.

In addition to Alysoun Rowe and Anne Boleyn, this novel let me write about a vivid ruler who is egotistical, vengeful, allows no challenge to his power, and seeks to remake the foundations of the nation he rules. Witches are not the only type of people whose existence persists. 


The Queen’s Witch: Amazon

Author socials: Website|Facebook|Substack

20:00

Link [Scripting News]

This was the post I was talking about in the podcast. I ended up using the post that was published before it was ready. On re-reading it wasn't that bad. A few typos and incoherent phrasing.

18:28

The Monday Morning Agent: Defining the Tush Push [Radar]

“Tush push” never appears in our roughly 265,000 play descriptions from 2021 through the current season. Neither does “brotherly shove,” and “sneak” turns up only twice. So when we asked our AI analyst to tackle “Ban the Tush Push” in the October 26 episode of The Monday Morning Agent, we first had to define the play using the available data. We saved that definition in a shared data dictionary, the agent’s first durable memory, so future runs must use the same definition and explain its limitations.

Check whether the data supports your definition

A quarterback takes the snap, and teammates push him forward. Our data identifies the ball carrier but doesn’t record whether teammates pushed him. We can check whether a snap came from shotgun, but we can’t reconstruct the team’s specific formation.

We explored five possible definitions, from a quarterback sneak with teammates pushing to any rush on third or fourth and short. Each definition changes which plays the analysis counts. The broadest one would count running backs too, which takes us away from the play people are arguing about.

So before you let an agent query a term everyone seems to understand, write its definition in plain language. Then go clause by clause and ask whether the data can support it. A familiar name doesn’t guarantee a usable label.

Write down what your definition can’t measure

We settled on a quarterback run with one yard or less to go, from under center. The agent counts qualifying quarterback sneaks whether anyone pushes the runner or not. We’re measuring a substitute for the tush push, and we can’t isolate the shove’s contribution.

Even “quarterback” needs a definition. The fields available to our tool don’t include player position, so the tool identifies the quarterback as the player who threw the most passes for that team in that game. That’s another assumption to check when you interpret the results.

The dictionary entry has to explain the play in plain language and state what the data can’t tell us. Otherwise, readers could assume a “tush push” result counts plays with a push. Keep the limitation beside the definition so the agent can repeat it with the result.

Give the next run the same definition

The dictionary holds one JSON file per definition, with a fixed structure. The agent can add an entry, but it can’t change an existing one. A different definition needs a new name. That keeps the meaning attached to an earlier result from quietly changing later.

Before each run, the script that launches the agent, called the runner, saves a copy of the dictionary and adds its contents to the agent’s instructions with the date. The agent searches for an existing definition first. If it finds one, it uses it. If it doesn’t, it can write a new entry using the fields the tool supports.

In the demonstration, the tool refused the request for “tush push” because no entry existed. The agent then created a definition and queried it.

Check that the agent uses its memory

Writing “use the dictionary” in a policy doesn’t make the agent obey. We’re building this around instruction, check, and enforcement. The policy tells the agent to use and cite an entry. The tool accepts definitions from the dictionary rather than a definition improvised in a query. If the answer lacks the required ruling, the runner retries once, then stops if it’s still missing.

We expanded the agent’s permissions to let it add a dictionary entry alongside querying the plays. Test whether your agent uses its shared definitions and whether someone reading the answer can find them.

Read the conversion rate before deciding on a ban

Across five complete seasons, the defined play converted 78.3% of the time, compared with 70% for other short-yardage rushes. That’s an 8.3 percentage point advantage.

While the agent found an advantage, it didn’t treat the conversion gap as sufficient evidence for a ban. Those numbers describe conversion rates for our defined group of plays. They don’t establish whether the NFL should ban a play, and they can’t tell us how much pushing helped.

A viewer raised that distinction during the discussion. Whether a successful play belongs in the game requires human judgment. Conversion rates can inform that conversation, but they can’t resolve questions about safety or what people want football to look like.

Next up: “Kickers Are Too Good Now”

On November 9, we’ll tackle “Kickers Are Too Good Now” and give the agent written visualization standards. An agent can generate a chart in seconds. We’ll work on rules for presenting trends and making comparisons so readers can see what the data actually supports.

O’Reilly members can sign up on the O’Reilly learning platform to join us live on November 9, 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 two above, and we’ll build on it in the next session.

[$] The second part of the 7.4 merge window [LWN.net]

The 7.4 merge window, which closed on November 1, included a record-breaking 18,591 non-merge changesets. That is almost as many as the entire 7.3 development cycle, which had 18,765, itself a record breaker. Of those, 11,838 landed after the article covering the first part of the merge window. Most of those were bug fixes of various forms; it seems as though bug fixes may be crowding out feature additions across the open-source ecosystem to some extent. Still, a good number of new features were included, and a handful removed, in the tail end of the merge window.

17:00

Link [Scripting News]

Podcast: A web for writers. How Twitter has become a blogging platform, but how the differences between its editor and Claude's editor illustrates how we need to change things if we want the web to work well for writing. We've been living with a bad situation ever since we started writing in a web browser. 10 minutes. I was making an effort not to wonder off like I always do. I did do a bit of wandering, but also didn't forget why I picked up the phone to record it.

Sam Altman wants to take your RAM [OSnews]

“From a global allocation perspective, actually, it’s quite terrible to have everybody have a bunch of the world’s limited supply of DRAM sitting in their own computer and being used 5% of the time,” Altman said. “You want maximum utilization in the cloud if you’re trying to deal with this very supply-constrained environment. And somehow many people’s intuition is the opposite of that.”

↫ Andrew E. Freedman at Tom’s Hardware

I’m installing a 32bit operating system without support for physical address extension on my laptop with 64GB of RAM, just because I can.

16:14

My Voting Recommendations, 2026 [Whatever]

They are simple: For Christ’s sake, don’t vote for a single fucking Republican.

I don’t have to tell you why, you know why already, but I’ll go ahead and say it: Because the Republican party has a corrupt doddering fascist grifter at its head, who cares far more about lining his pocket than he ever did about the state of the nation, and he’s remade the entire political organization into his image. On his watch and with his approval we’ve gotten into a war we had no plan for, the cost of gas and groceries have spiked, measles and other easily curable diseases have come roaring back, a masked, internal secret police is snatching people from the streets without due process, white supremacy has shoved its way back into official policy, and he’s turned his back on long-standing allies to gleefully lick the boots of the worst authoritarians in the world.

Anyone in the GOP who had a problem with any of this is gone out of Washington and has been for years, replaced by simpering toadies. On the state and local levels, Republican politicians have gleefully raced to become mini versions of this wholly repugnant person. Those who haven’t, still accept what the GOP has become and do little if anything to stop it. The whole party needs to burn down to the ground, the ground needs to be salted and every current office holder in it, certainly on the national level, shamed out of public life.

BUT, I will settle for all y’all just not voting a single one of those motherfuckers.

“But the Democrats are just the same!” Man, shut the fuck up. No one with a mental acuity above being able to push a crayon through a dollar store activity book maze thinks that’s even remotely true. I’m not going to argue with you that the Democrats, each individual or the party as a whole, are a paragon of civic virtue, but this year the options are “actual fucking corrupt and lawless fascism” or not. I regret to say we have a two-party system where third parties act as spoilers, not legitimate competitors — there’s a reason why pro-GOP political action committees funded a huge mailer push for the socialist senatorial candidate in my state — and all the ways to fix that fact are beyond the purview of this particular election. Here in 2026, the most effective way to blunt the reach of actual corrupt and lawless fascism runs through the Democrats.

Here in Ohio, all of these facts are very much in evidence. The Republican candidate for governor, Vivek Ramaswamy, is one of the president’s special projects and every pillar of his platform — build more data centers! Shut down a bunch of the state’s universities! Tax cuts for the rich that will turn the state’s infrastructure into dust! — is generally unpopular, and so is he as a human. This was one reason why Ramaswamy decided to air that absolutely reprehensible ad against his opponent Amy Acton, featuring her long-estranged mother who, when it came down to it, chose the husband who was molesting and abusing her children over the children themselves. The only people this ad pleased were our morally horrible president and his obsequious, personality-less vice-president. Everyone else was horrified. Ramaswamy, confronted with the general horror at the ad, doubled down on it.

Meanwhile, Amy Acton: largely colorless centrist Democrat who caved unnecessarily on certain social issues (her no-trans kids in sports cave in a state where 0.0015% of all student athletes were transgender was particularly spineless) and who in any other election year — or this one, had former Ohio State Football coach Jim Tressel won the primary over Ramaswamy — would be a speed bump to yet another Republican win for the governorship. But it’s 2026 and the polls (which you should never trust ever) show her with a slight lead over Ramaswamy, because this year maybe enough people in Ohio have figured it out: It’s actual corrupt and lawless fascism, or not.

Acton would do fine as governor! Better than Ramaswamy, that’s for damn sure. Likewise, it would be lovely to have Sherrod Brown back representing Ohio as senator over Jon Husted, who’s a grasping tool and has been for his entire benighted political career. The Ohio election will be far closer than it has any right to be, because political inertia is a thing, and also, especially in the rural areas of Ohio, voting Democrat would be like rooting for Michigan in The Game. I expect 2026 in Ohio will be decided as much on MAGA folks sitting out this vote as Democrats being energized and independents being disgusted with the GOP. Likewise in Texas and a few other places. We will see. We will all see.

(For the avoidance of doubt, I do not expect Darke County, where I live and which went 82% for Trump in 2024, to turn blue. Likewise OH-8, the congressional district I vote in, has not gone Democratic since the Great Depression and will not this year either. But in both cases if the GOP winning percentages go down from the last election, I’ll find that interesting and maybe even encouraging. Note that OH-8 has been rejiggered in the latest Ohio gerrymander to be even more red than it was before, so that will need to be factored in. Even so.)

I encouraged people to vote early and in person if they could, as a hedge against the fuckery this administration is almost certainly planning on election day and beyond. In most places it’s now too late to vote early, and if you have a mail-in vote, the USPS has been intentionally nerfed to make it unlikely your vote will arrive in time. If you have a mail-in vote that you still haven’t put into the mail, drive it to an actual drop-off box or board of election. Everyone else who has not already voted, carve out time in your schedule tomorrow to vote. It’s important.

And don’t vote for any Republicans. Let their manifest exile begin this year. Let it be compounded in 2028. Let them wander in the wilderness for a very long time. They deserve it.

— JS

15:42

CodeSOD: Get It Now [The Daily WTF]

"TODO" comments are an inescapable part of our work. Yes, yes, you should just do it right the first time, everything should probably have a ticket in whatever your ticket system is for visibility, but at some point, you're just going to leave a "TODO" behind.

But hopefully, the TODO gets TODONE, which is not what happened in Sam C's codebase.

function getnow()
{
    //TODO
    return '2012';
}

It's the XKCD, but for years. Or WHAT YEAR IS IN memes.

At least it's a relatively recent year, not some far off point from over a decade ago.

Wait. 2012 was how long ago? That can't be right. It was just a few years ago!

[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!

15:28

Sneaking into the auditorium for the Windows 2000 launch rehearsal [The Old New Thing]

The Windows 2000 launch in San Francisco was accompanied by an expo, and a large number of Windows 2000 team members were dispatched to run the various booths and stations, give informal presentations on the new features of Windows 2000, and answer technical questions from the various attendees. And from among the people who were sent to the expo, a smaller group was selected to attend the launch event itself in person.

Related reading: A ticket to the Windows 95 launch.

After a few of us arrived early at the Civic Auditorium for the launch event, we had to entertain ourselves until the doors opened. There was some speculation as to who the celebrity host would be, since it hadn’t been announced. One of my colleagues tried to sneak into what looked like a VIP tent.¹ I, on the other hand, went exploring.

I found an unlocked door that took me into the empty upper level of the main auditorium.

I took a seat and tried not to be noticed.

The stage was set up with a 10-meter tall mock laptop, screens to the left and right of the stage for projecting slides, prerecorded videos, or to get a better look at on-stage close-ups, gray curtains unobtrusively hung to shield from view what would turn out to be various surprises throughout the event, and various other desks, demo areas, and even an airplane cabin set.²

While I sat and took in the complexity of the stage, there was an announcement that they would be rehearsing the opening in one minute. The lights dimmed in preparation. The lid of the giant laptop closed very slowly.

About ten minutes after the announcement, the rehearsal actually began.

The laptop lid opened, and on the laptop screen, it looked like someone was signing into Windows 2000, and then the mouse clicked the Start button. This led to a video montage, and when the montage was over, a voice announced, “Ladies and Gentlemen, please welcome Patrick Stewart!”

Oh my goodness, Patrick Stewart is going to be the presenter for the Windows 2000 launch!

Mere seconds later, onto the stage bounded… a crew member wearing a headset pretending to be Patrick Stewart so that the camera and lighting crew could make sure they were properly positioned.

Okay, that’s the end of the rehearsal. The lights come back on, and the auditorium once again buzzes with the sound of equipment being moved and people discussing things.

I left the auditorium and went back to join the crowd of people waiting to get in. I didn’t tell them who the host was.

The event itself seemed to go off pretty much as planned. With the real Patrick Stewart.

Patrick Stewart had such a commanding presence. If he had come out on stage and announced, “It is the dawn of a new era: The era of lime Jell-O”, people would say, “Yeah, lime Jell-O, I need to upgrade to lime Jell-O.” But instead of trying to spark a new dessert trend, he talked about Windows 2000, reading words from a teleprompter that he almost certainly didn’t understand, but he made them sound great.

¹ My colleague eventually returned with a Commemorative Edition boxed copy of Windows 2000.

² The airplane cabin was used for a sketch that demonstrated mobile business computing. The demoer took their laptop on a plane trip, where they happened to sit next to a character named William Wentworth, portrayed by actor John O’Hurley, president of William Wentworth Worldwide. (He gave his email address as www@www.com.) The sketch demonstrated infrared file sharing and other mobile scenarios. Remember infrared file sharing? Of course you don’t.

The post Sneaking into the auditorium for the Windows 2000 launch rehearsal appeared first on The Old New Thing.

14:42

What's on my plate [Scripting News]

Atlantis is the new version of UserLand Frontier that runs on modern systems. As I've said earlier, I'm surprised how well we covered all the bases, it's reliable, it works like Frontier works with a couple of important exceptions which I've now had it start working on.

  1. First, the Find and Replace command has never worked properly in Atlantis and it's been a struggle to get Claude to fix the problems. I think the key was I didn't tell it to use the C kernel as the guide for how Find & Replace works. So it was trying to create a F&R that you would have in a text editor, not the object database which is another level up, it's the structure that contains all the scripts.
  2. Second, Frontier has a great debugger, but we haven't implemented it yet in Atlantis. After learning how to use the debugger in THINK C in the late 80s to write the original version of Frontier, I couldn't imagine working without one, so I added it to Frontier. We never put it on the list of immediate priorities for Atlantis, but today it is there. It would be like getting a new EV after driving my Model Y for four years. While I do like Atlantis without the debugger, I kvell like crazy for it if the debugger was in and working.

I'm juggling too many projects now and things are slowing down. I've got Bonbon which is the Markdown browser (core feature of the Writer's Web), a new version of FeedLand in the works with some great new features, and making it so that the API for RSS.chat allows it to be used as the editor for any app that wants a nice Markdown-based wizzy writing tool. And there's actually more, but I want to ship some of this soon. So there's that too.

This is the danger of working with Claude Code. It works faster than I can keep up with, so there's a new version of FeedLand queued up for me to test, and I have to do that now before looking at the other projects.

Tor Browser 16.0 released [LWN.net]

Version 16.0 of the Tor Browser has been released. This is the first stable version based on Firefox ESR 153. Notable changes in this release include support for Linux on 64-bit Arm, redesigned settings, and a "generic window titles" feature to help prevent other applications from snooping on one's browser activity. Tor Browser for Android has had a number of interface updates to Google's Material Design 3 design language.

This release also follows Firefox in ending support for 32-bit x86 Linux systems. See the full changelog for all of the updates and bug fixes.

[$] Managing the kernel CVE flood [LWN.net]

We recently looked at how the kernel community is dealing with the firehose of vulnerability reports, but said little about how users of the kernel are responding. At the 2026 Linux Plumbers Conference, Amazon employees Dylan Johnson and Justinien Bouron discussed the problem from the point of view of engineers trying to keep AWS running and secure in the face of a storm of CVE disclosures. The kernel community's longstanding advice is to run current kernels, and that turns out to work — sort of.

Security updates for Monday [LWN.net]

Security updates have been issued by AlmaLinux (firefox, java-17-openjdk, kernel, kernel-rt, mariadb:10.5, podman, python-jwt, python27:2.7, python38:3.8 and python38-devel:3.8, python39:3.9 and python39-devel:3.9, ruby:2.5, ruby:2.7, thunderbird, util-linux, and virt:rhel and virt-devel:rhel), Debian (chromium, eog, imagemagick, python-aiohttp, thunderbird, and vim), Fedora (asciinema, atuin, btrfs-backup-ng, clevis, gcc, janus, kernel, libheif, libreswan, mingw-expat, mupdf, nautilus, nicotine+, ntpd-rs, openscap, perl-DBI, python-streamlink, python3.12, retsnoop, ruby, rust-cargo-deny, rust-cargo-rpmstatus, rust-ctutils, rust-gst-plugin-reqwest, rust-rbspy, rust-resctl-bench, rust-rpki, rust-rustls-webpki, rust-sequoia-chameleon-gnupg, rust-sequoia-git, rust-sequoia-octopus-librnp, rust-webpki-root-certs, rust-webpki-roots, tpm2-tss, and vhs), Oracle (.NET 8.0, .NET 9.0, aspell, bind9.18, curl, httpd:2.4, java-1.8.0-openjdk, kernel, libXi, mod_auth_openidc:2.3, nodejs:24, python-pillow, and tomcat), Red Hat (libxml2), Slackware (libarchive), and SUSE (buildah, curl, docker, gnutls, nodejs22, and suseconnect-ng).

Shutting the Door on the XCPE Botnet (Threat Intelligence) [LWN.net]

The Google Threat Intelligence blog describes, in great detail, the XCPE botnet, which has just been taken down.

Last week, Google and industry partners dismantled the XCPE backdoor which enrolled more than 1.3 million set-top boxes into a botnet. We assess with high confidence that the backdoor and botnet were intentionally developed, deployed, and operated for financial gain by Videostrong Technology Co., an Android Original Equipment Manufacturer (OEM) and Original Device Manufacturer (ODM).

Videostrong monetized the backdoor by selling access to criminal affiliates and loading those affiliates' malware modules onto infected devices. These secondary modules were conducting ad-fraud; silently enrolling infected devices into residential proxy networks; and loading additional malware onto XCPE-compromised devices.

14:00

Practical Loop Engineering [Radar]

The following article originally appeared on Addy Osmani’s Elevate blog and is being republished here with the author’s permission.

The way that I typically work is I have anywhere between five and ten agents working at the same time in parallel. There are going to be some tasks that I’m very happy to delegate fully to agents, as long as I have a very clear idea of the stopping conditions and the constraints around them. And then there are going to be some tasks where I am going to want to keep a closer eye on and code-review what the agent is doing.

You’ve probably heard about loop engineering. I talked about it a couple of months ago when I wrote a big blog post about it.

A loop is an autonomous, self-correcting feedback cycle where an AI agent repeatedly acts, tests its results, and adjusts its approach until a specific goal is met.

There are now basically two core primitives you can think about. In Claude Code you have a goal primitive, which can drive a single bounded task forward until you’ve got a particular goal, like a measurable finish line that’s been met. And then loop reruns on a timer or a fixed interval, so you can use it to schedule changes.

Anatomy of a loop

Before the primitives were primitives

I remember back before we had primitives baked into Claude Code and Codex: Loop engineering was heavily about setting up your own bash loop, a hand-rolled thing. That’s how I approached it. And you might remember earlier in the year, a number of us were playing around with the Ralph loop by Geoff Huntley. We were experimenting, we were sharing our workflows, we were sharing what worked and what didn’t, but it was largely on some of our personal projects where, if we ran into a wall, it didn’t really have a big cost to us.

And as we’ve tried to see what patterns and what aspects of loop engineering are now a little bit more baked, I think we have a clearer idea of how you babysit it. I can now largely rely on the output of the primitives in Claude Code and Codex. We’ve come a little way. But at the same time we need to be very diligent, because loop engineering, where you kind of leave it sitting alone and haven’t really thought about whether the end goal or the constraints have been well defined, can leave you in a problematic state. This is why there’s nuance when deciding to use it for an evergreen codebase without users or without as much historical complexity as a brownfield bank codebase.

How the Claude Code team frames loops

The Claude Code team published their take on four kinds of loops, and it lines up with how I use the primitives (their write-up). Before we get to it, here’s my quick summary:

The four kinds of loops

On the Claude Code team, we define loops as agents repeating cycles of work until a stop condition is met. We categorize a few different types of loops based on how they are triggered, how they are stopped, what Claude Code primitive is used, what type of task is most appropriate for each. Not all tasks require complex loops; start with the simplest solution and use these patterns selectively.

Every prompt you send starts a manual loop with you directing each turn. Claude gathers context, takes action, checks its work, repeats if needed, and responds. We call this the agentic loop. For example, ask Claude to create a “Like” button. It reads your code, makes the edit, runs the tests, and hands back something it believes works. You then manually check the work, and write the next prompt.

Their write-up walks each rung.

On goal-based loops:

Sometimes, a single turn is not enough, especially for more complex tasks. Agents do better when they can iterate. You can extend how long Claude keeps iterating by defining what done looks like with /goal. When you define the success criteria, Claude doesn’t have to make a determination on what is “good enough” and end the loop early. Each time Claude tries to stop, an evaluator model checks your condition and sends it back to work until the goal is met or a number of turns you define is reached. This is why deterministic criteria, such as number of tests passed or clearing a certain score threshold, are so effective. For example: /goal Get the homepage Lighthouse score to 90 or above, stop after 5 tries.

On time-based loops:

Some agentic work is recurring: the task stays the same and only the inputs change. For example, summarizing Slack messages every morning. Other work depends on external systems, and a simple way to interface with one is to check it on an interval and react to what changed. For example a PR, which may receive code reviews or fail CI. For these, you can trigger when Claude runs with /loop, which reruns a prompt on an interval. For example: /loop 5m check my PR, address review comments, and fix failing CI. /loop runs on your computer, so if you turn it off, it stops. You can move the loop to the cloud by creating a routine with /schedule.

And on proactive loops, the top rung:

Triggered by an event or schedule, with no human in real time. Stop criteria: each task exits when its goal is met. The routine itself runs until you turn it off. Best used for recurring streams of well-defined work: bug reports, issue triage, migrations, dependency upgrades. Managed usage by routing routines to smaller, faster models and using the most capable model for judgment calls.

Their verification advice is worth lifting whole, because it moves the manual checking into something Claude applies itself:

---
name: verify-frontend-change
description: Verify any UI change end-to-end before declaring it done.
---
# Verifying frontend changes
Never report a UI change as complete based on a successful edit alone.
Verify it the way a human reviewer would:
1. Start the dev server and open the edited page in the browser.
2. Interact with the change directly. For a new control (button, input,
   toggle): click it, confirm the expected state change, and screenshot
   before/after.
3. Check the browser console: zero new errors or warnings.
4. Use the Chrome Devtools MCP, run a performance trace and audit
   Core Web Vitals.
If any step fails, fix the issue and rerun from step 1 - do not hand
back partially verified work.

Goal

The way that I use goal is for building any specific piece of work until it’s proveably done. For example, you can use a goal to say: “Make sure that this experience loads in five seconds, keep going until it’s done.” And it will continue to use an independent evaluation check to keep checking if the completion criteria has been met. What’s better is to be even more specific about what tooling is being used.

As for real goals that I’ve run to a number, there’s a few things that I’ve done. I’ve used goals for running through GitHub issues: “Review and close the last 10 issues,” or “Review and move the last 10 issues forward,” something like that. And that’s semi-open-ended, right? Or “Let’s make this page load 50% faster.” Sometimes that works well, sometimes it doesn’t, but it’s really about the experimentation.

/goal—drive one task to a finish line

Loop

Loop is a little bit more of a scheduler, so it keeps an eye on something or repeatedly executes a pattern on some cadence. Think of it a little bit like a cron. It’s best for doing things like polling logs or monitoring external states. You could use it for potentially checking in. If there are repetitive tasks you find yourself doing on some cadence, loop is pretty good for that.

/loop—a cron with an agent on the far end

What I delegate, and what I watch

I use probably between five and ten agents every day. Typically I’ll max out at about five concurrently. And some of those tasks might be ones that are a little bit safer. So maybe it’s: “Hey, I implemented this feature, go write the documentation for it.” Or “Go double check that we have sufficient test coverage.” Or something in that vein. If I’m working on a more complex problem, and I’ve given it a good spec, or what I think is a good spec, and tried to give it some stopping conditions, there’s still a reasonable chance it may not get everything right, so I would try to watch it more closely. If the task involves anything just a little bit sensitive, whether it is “I’ve given this access to a system,” or whether the feature happens to touch authentication, or something related to security or finance, I’ll definitely be watching that closely.

Generally speaking, I do think we’re going to get to a place where folks are increasingly comfortable with delegation, as long as they’re able to have these clear ways of verifying that their goal or their stopping condition has been met. But you do still need to take a look at the code, at the thing that’s being generated, to make sure that it’s meeting your mark.

The other habit that matters is not letting the agent that did the work decide the work is good. One subagent drafts the change; a separate one verifies it.

Sometimes an agent can be confident about something, and a verifying agent can catch things that are unexpected. If an agent thinks that the baseline performance of an experience it has generated is actually fine, but it’s only evaluating performance based on desktop, and you actually care about the experience on mobile, that might mean the agent is being very confident about one dimension of the problem but not the other.

Split the marker from the checker

And I learned this one the hard way. I was curious to figure out: Is there something that we’re missing that we haven’t gotten direct feedback on from our users, either in an issue tracker or in a comment somewhere? And so I asked it to go and take a look at some of our competitors and put together a list, and some PRs, not pushed, but some PRs locally, of what solving some of those gaps might look like. And I almost pushed some of those changes. But I didn’t actually look at them closely enough. I read through its research, but I didn’t look at the implementations closely enough. So I delegated the task, but I was close to delegating the judgment as well. When I actually looked through the changes, what I realized is that it would introduce a lot of additional complexity for our users, for, I thought, not all that much gain. And so I feel like you need to sometimes check that you are not delegating the taste and the judgment to your agent. You’re delegating the task, and then you are actually checking back that it’s meeting your bar.

The evaluator sitting behind goal is not that checker, by the way. It doesn’t look at the content to see if it’s good or bad in any way, shape, or form. All it does is examine the conversation transcript to see if the hard rules you specified have been met.

/goal Refactor the data-fetching layer in Dashboard.tsx until 
Lighthouse performance score is >= 92 and LCP is under 1.8s as 
shown by the Lighthouse CLI output. Do not change the public API 
of any hooks. Each turn must improve at least one reported metric; 
abort if two consecutive turns show no improvement. Stop after 10 turns.

The workflow I run every day

One of the workflows that I do every day: I have a popular open source repository called Agent Skills. We’ve got over 80,000 stars, and up until recently we were getting anywhere from 80 or 90 pull requests that we had to review a day. And so every day I would go and spend some time checking on this. Now with loop, what you can do is say: “Well, every 24 hours or every 12 hours check the GitHub repository for any new open issues and provide a summary of their urgency,” or “Provide a first pass review,” or anything like that.

/loop every 1h "Check the GitHub repository for any new open issues. 
Provide a bulleted summary of their urgency."
One clean checkout per parallel run

Combining loops and goals

Now you can also sort of combine loops and goals. So you use loop to schedule a check, and then goal to solve the problem. So you can say something like: “Loop for every 24 hours, check GitHub for issues labeled bug. If one exists, use goal to implement a fix until all local tests pass and push the branch.”

/loop every 24h "Check GitHub for issues labeled 'bug'. If one exists, 
use /goal to implement a fix until all local tests pass and push the branch."

But also keep in mind that goal has got some limitations around just how much you can cram in there.

Loop schedules the check. Goal solves the problem

Claude Code team’s write-up also has a composed example that shows where this is all heading:

The primitives above, along with other Claude Code features like auto mode and dynamic workflows (research preview) can be composed into a loop for long-running work. For example, to handle incoming feedback, you can use: /schedule (research preview) to run a routine that checks for new reports, /goal to define what done looks like, and skills to document how to verify it. Dynamic workflows to orchestrate agents that triage each report, fix it, and review the fix. Auto mode so the routine runs without stopping to ask for permission. Putting it together, a prompt could look like this: /schedule every hour: check the project-feedback channel for bug reports. /goal: don’t stop until every report found this run is triaged, actioned, and responded to. When fixing a bug, use a workflow to explore three solutions in parallel worktrees and have a judge adversarially review them.

What the triage system actually does

Inside the PR triage, when I have loops and goals working together for me, what I end up having is a system that allows me to continue accepting PRs and issues, being able to stay on top of what is coming on my plate every day, and especially being able to cross-reference. That’s been a really big deal for me. If I want to work on a particular goal of, “Hey, we’re going to be redoing this part of the system,” and I need to make sure that any issues that happen to touch it are closed as a result of this rework, or that we’re not stepping on anyone else’s toes, I can make sure that that’s well defined.

Scheduled tasks are really useful for regularly just reviewing new PRs and closing things that clearly don’t fit. One good stopping condition, for example: We have a set of contribution guidelines, and our contribution guidelines include things like, “Hey, we currently don’t accept translations.”

What the triage system actually does

And it’s not that we don’t care, it’s that they’re difficult for us to maintain because we don’t speak all the languages that often come in. And so if we tell it to close any issues or close any PRs that happen to touch that aspect of our contribution guidelines, that’s something that can do really well when it’s on that schedule. And so it reduces the overall batch of things that we need to review.

Where to point a loop

What loops don’t buy you

I’m often asked what loop engineering is not a great fit for. Generally speaking, if you don’t have a clear idea of what the end-state/done/good means for your completion, it may not be the right pattern for your work. For example, a vague goal would be “Keep going until this UI design is good.” What does that mean? Good to who? How is it being evaluated? Tasks that require human taste, subjective design, or open-ended creative exploration aren’t a good fit. When you have a pretty clear idea of the goal, I think loops are a good option to consider.

The fine print

One classic sign that you’ve got a loop spinning in place is the same command being tried over and over without any change in the result. Give the same command a third time with no change from the second and it’s probably time to stop.

One bit of fine print worth knowing: Recurring loops expire seven days after creation. I’d been telling people it was three days. It’s seven. And loops are session-scoped, so they stop when you start a new conversation, though resuming that session with –resume or –continue brings back any recurring task still inside its seven-day window. If you need something that outlives your session, /schedule runs it in the cloud.

If there’s a check you already run every morning by hand, that’s your first loop. Mine was the pull request pile.

Choosing between goal, loop, and schedule

13:56

Dirk Eddelbuettel: myman 0.13.0 on CRAN: Another wave! [Planet Debian]

Another new version of our still-new-ish 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 two 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 contains a new wave from October 31 to November 1 poking fun at Mike Johnson—just in time for the election.

> library(myman)
> set.seed(20261102)  # reproducible sampling
> myman(target="Mike Johnson")
My man looks like he used parental controls to block "Pimp My Ride".
     -- about Mike Johnson on 2026-11-01

> 

So have a chuckle, and then go out and vote! The short NEWS entry for this release follows.

Changes in version 0.13.0 (2026-11-02)

  • New wave thirteen (100 posts); total is now 2284 posts

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.

12:21

AI Vulnerability Finding [Schneier on Security]

A comment:

3% of ‘critical’ software security bugs, in all of recorded history, have been found in the last month. This is on pace to find another ~100,000 bugs this year alone, adding ~26% more vulnerabilities to the all time total Do you realize how fucking insane that is?

Yes. It is a new world out there.

11:42

Grrl Power #1509 – Death starfish vs. pointy rock [Grrl Power]

No, Maxima didn’t yell “KAAAAAAA-LAAAAAAA-KAAAAAA….. UAAAAAA!” when she fired that beam. She also didn’t spend half an episode powering it up. To save you the web search, Kalākaua is another Hawaiian monarch. (It was that name, Liliʻuokalani or Lunalilo)

It turns out that the best way to lose a fight in this comic is to be a pain in the ass to draw. Disastar should have dodged, but I think I spent at least an hour drawing that slightly tilted version of him there in the second panel. I just copied him from the big double spread page, then did a transform on that image to lean him back a little, but of course he just looked like a flat picture that had been lazily transformed in photoshop. The perspective correct depth he had in the original pic was all sheared the wrong way. So I spent a ton of time redrawing a bunch of fiddly details and honestly it’s probably hard to tell on the page here. Less so in the double-sized Patreon version, but still.

To be fair, I had never planned on Disastar being a major factor in this battle, so he was going to go down early on anyway. So let’s say… Orthvye (the Aetholith piloted bioweapon) hamstrung Disastar’s maneuverability with… spinnerets? Yeah, just off panel, there’s a big web stuck to the bottom of Disastar, like a giant Spider-Man swung through.


Here you go, a brand new vote incentive. Featuring the least sexy character in the comic. No, I take that back, Cooter is the least sexy, but don’t expect a pinup of him anytime soon. Or ever. There is a nude version over at Patreon. Note I didn’t say NSFW. She is nude in those picture, and she does identify as female, but it’s… hard to tell. She is a humanoid aberration by D&D terminology, not a mammal. And before you ask, no, I don’t know how many vertebrae she has in her neck.

 


Double res version will be posted over at Patreon. Feel free to contribute as much as you like.

10:35

Trees can’t run [Seth's Blog]

That changes everything. This is the spot, your spot, a spot worth protecting. Trees understand the power of the neighborhood and the value of good neighbors.

Trees can’t be anonymous, and they succeed by standing tall and sticking it out. Trees do better in a forest, surrounded by other trees.

And trees think in long time frames, because now keeps changing but later is the actual urgency.

Trees are mortal. And so generations are the actual long game. Fires and floods will come and go, but the seeds spread and flourish.

As humans, we often underestimate the gift of new decisions, new locations and the ability to quit and move on.

And just as often, we miss the chance to plant roots and stand for something.

HT to Lisa Gansky.

09:21

Candyman [Penny Arcade]

New Comic: Candyman

08:35

Pluralistic: Autodoxing (02 Nov 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links

  • Autodoxing: The road to hell is paved with badly thought-through tech policy.
  • Hey look at this: Delights to delectate.
  • Object permanence: Shakespeare programming language; DeCSS is "pure speech"; Blue Coat sold surveillance tools to Syrian secret police; "Extraordinary Catalog of Peculiar Inventions"; Cable prices rose at double the rate of inflation for 20 years; Supercuts; Antivax x Trump.
  • Upcoming appearances: Kilkenny, Courtenay, Vancouver, Folkestone, 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.



An engraving of a high-ceilinged Edwardian bathroom; it has been altered so that all the fixtures are leaking, flooding the floor. Peering up from the flooded water are various robot-heads.

Autodoxing (permalink)

After 25 years of fighting for human rights amid the wreckage of bad tech policy, I'm here to tell you that the road to hell is paved with badly thought-through tech policy.

The most galling thing about this wreckage is that it was both foreseeable and foreseen. Back when Sun Microsystems CEO Scott McNealy was telling the world "Privacy is dead, get over it," digital rights advocates were saying, "Not only are digital tools pretty dang good at helping you protect your privacy, but a society-wide abolition of privacy sets us up for infinite harms long into the future":

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

It wasn't just business leaders who hated privacy, it was also our political classes. Bill Clinton tried to put a backdoor into every microchip (no, really):

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

The NSA managed to enact a total prohibition on civilian access to working encryption, on the grounds that we're all safer if our spooks can spy on "bad guys" even if that means that every creep, petty crook, corporate or state-sponsored spy, and mafia can spy on us:

https://pluralistic.net/2026/04/09/bernstein-2/#win-some-lose-some

Even after that ban was overturned, governments encouraged the private sector to spy on us without limit, precaution or permission. Those private-sector troves of intimate, compromising data about every person alive constitute a warrantless, off-the-books surveillance system that cops, spies and government agencies can tap at will:

https://pluralistic.net/2026/10/13/petards-r-us/#nobus

To protect these surveillance capabilities, private firms and governments colluded to pass "anticircumvention" laws that make it illegal to reverse engineer our devices and apps to add privacy blockers to them, with the effect that every device we own and every app we use spies on us constantly:

https://pluralistic.net/2024/03/12/market-failure/#car-wars

At the same time, states either failed to pass new privacy laws (as in the USA, where federal consumer privacy law was last updated in 1988), or passed privacy laws that went unenforced (as in the EU, where "pretending to be Irish" allows US tech giants to flout EU privacy law):

https://pluralistic.net/2023/05/15/finnegans-snooze/#dirty-old-town

Our surveillance free-for-all world is objectively very bad. Over and over, companies and agencies who have been permitted to nonconsensually harvest and retain our data demonstrate that they are not capable of keeping that data safe, and no matter how badly they fuck up, nothing changes. It's been nearly a decade since Equifax doxed 148 million Americans and not only is the company still in business, they've been permitted to buy up and absorb more commercial surveillance firms.

US regulators let Equifax buy Teletrack in 2021. Canadian regulators let them buy the Food Industry Credit Bureau in 2023. The same year, Brazilian regulators let Equifax buy Boa Vista Serviços. This all despite the fact that Equifax blamed its breach on shitty security practices after a string of mergers that led to it haphazardly combining databases from newly acquired surveillance companies.

Data isn't the new oil. Data is the new oily rag: profitable only if you can warehouse it in vast quantities under unsafe conditions and have society pick up the bill for every conflagration:

https://locusmag.com/feature/cory-doctorow-zucks-empire-of-oily-rags/

Equifax is a serial reoffender, but rather than getting the corporate death-penalty, they've been made to pay coins-down-the-back-of-the-sofa fines that amount to a fraction of a fraction of a fraction of the costs they imposed on society by amassing these vast, flaming storehouses of oily rags.

Why wouldn't Equifax reoffend? Our policymakers keep demanding less privacy, not more, and their indifference to the consequences is (almost) comical.

Take Malcolm Turnbull, the former Australian Prime Minister who uttered what remains, without a doubt, the single stupidest thing anyone anywhere has ever said about tech policy. Like many of his peers before, during, and since his reign, Turnbull had been trying to outlaw working encryption, insisting that every device have a Bill Clinton-esque back-door for the purpose of spying on "bad guys." When told that the laws of mathematics dictated that any measure that let Australia's cops spy on "bad guys" would also let bad guys spy on Australians, Turnbull replied, "The laws of mathematics are very commendable, but the only law that applies in Australia is the law of Australia":

https://www.newscientist.com/article/2140747-laws-of-mathematics-dont-apply-here-says-australian-pm/

We could laugh Turnbull off…if he was an outlier. But while Turnbull had the world's stupidest rejoinder to the scientifically irrefutable fact that banning encryption will let bad guys hack everything, he was hardly alone in wanting to ban encryption. Banning encryption is current policy in Canada:

https://blog.mozilla.org/netpolicy/2026/10/08/canadas-bill-c-22-threatens-encryption-users-privacy-and-the-security-of-digital-economies/

It's also current policy in the UK:

https://pluralistic.net/2023/03/05/theyre-still-trying-to-ban-cryptography/

And in the EU:

https://fightchatcontrol.eu/

The difference between Malcolm Turnbull and, say, Canadian PM Mark Carney is that Turnbull was stupid enough to try to defend his ban on encryption, while Carney simply shakes his head at his critics' naivete and continues to press forward with his catastrophic proposal to welcome every cybercriminal in the world to hack every morsel of Canadian data.

When it comes to bad privacy policy, our political classes aren't content to rest on their laurels: hardly a week goes by without news of a new way to encourage (or even require) the private sector to recklessly collect and retain our data, despite the dead certainty that this data will eventually end up breaching and getting plastered all over the internet.

Take "age verification" laws. There's no such thing as "age verification" – there's just spying on everyone, all the time, creating (even more) records of all of our internet activities:

https://pluralistic.net/2026/05/19/shes-dead-of-course/#consensus-hallucination

Every promise of "privacy preserving" age verification is bullshit:

https://pluralistic.net/2025/08/14/bellovin/#wont-someone-think-of-the-cryptographers

If you think kids are experiencing internet harms today, just wait until we expose them to the harms of having even more of their data harvested, stored, breached, and weaponized against them:

https://pluralistic.net/2026/06/23/destroy-the-village/#to-save-it

If you want to protect kids from algorithmic manipulation and targeting by bad actors, what about banning spying on kids so no one can target them?

https://made-not-found-by-danah-boyd.ghost.io/no-one-paid-me-to-disagree-with-jonathan-haidt-it-was-teenagers-who-taught-me-that-he-was-wrong/

Now, at this point, you might be thinking, "How can we know who the kids are so we know who not to spy on?" You can't. In order to not spy on kids, you'd just have to not spy on anyone:

https://pluralistic.net/2023/04/09/how-to-make-a-child-safe-tiktok/

"Don't spy on anyone" is the kind of thing that has a reasonable chance of enhancing online privacy. But in the time-honored tradition of "we've tried nothing and we're all out of ideas," governments keep finding ways to make digital privacy worse, for example, by procuring Flock cameras for every lamp-post:

https://www.eff.org/deeplinks/2026/09/high-crime-lmao-how-cops-are-treating-mass-surveillance-joke

And then there's UK Labour: after the success of a pilot program for an incredibly effective and safe privacy-preserving way of analyzing the country's health records for research processes, they commissioned the Goldacre Report to evaluate the possibility of making this permanent:

https://pluralistic.net/2024/03/08/the-fire-of-orodruin/#are-we-the-baddies

After that report was completed and had a chance to be metabolized by policymakers, Labour acted upon it…by throwing it out and handing all of the country's health data to Palantir, a serial mishandler of data and violator of privacy:

https://www.theguardian.com/technology/2026/sep/30/legal-objections-palantir-nhs-platform-handling-data

Here's the scariest thing about bad privacy policy: it has a long fuse. The harms of commercial and private-sector digital surveillance can occur years or even decades after the decision to permit it.

There's a straight line from the post-9/11 decision to encourage public agencies to gather, merge and warehouse data on every person in America, and the ability of ICE ethnic cleansing squads to break down people's doors and drag them off to concentration camps; just as there's a straight line from the decision to do nothing about the breach of every Social Security Number and the later theft of all Social Security data by adolescent DOGE criminals:

https://www.pcmag.com/news/is-your-ssn-in-the-national-public-data-breach-heres-how-to-find-out

But despite how obvious these connections are, the fact that they're separated by a lot of time and space provides our policymakers with cover for making terrible decisions with foreseeably terrible outcomes. As a society, we lack object permanence, the ability to connect acts in the past with present-day phenomena.

When the press reports on a "Black October" of catastrophic, AI-fueled data breaches and hack attacks, they don't mention a generation of policymakers' indifference and hostility to information security:

https://pluralistic.net/2026/09/12/god-in-the-box/#llms-are-fake

Policymakers benefit from politics' eternal now, in which disasters simply befall us, without any history or precedent or cause. Remember the One Big Beautiful Bill? Its architects designed it to wreak its worst harms after the midterms, with Medicaid work rules and food aid restrictions starting in December, and cuts to affordable housing and rural hospitals phasing in through the year:

https://www.tumblr.com/mostlysignssomeportents/832146932089700352

Black October is going to give way to Black November, Black December, Black 2027, and the Black 2030s – a string of cybersecurity catastrophes that will befall us until policymakers decide that keeping us safe is more important than making it easy for them to attack their chosen "bad guys."

Here's a preview of Black November: there's a new strain of the Volta infostealer malware that uses AI tools to dox you even as it hacks you:

https://www.wired.com/story/kernel-panic-volta-autodoxer-ai-infostealer-malware/

How that works: your computer gets hacked and your data gets stolen, then it gets merged with breach data from Ticketmaster, Disney, AT&T and other companies that have recklessly compiled vast troves of data on all of us, stored it insecurely, and leaked it onto the internet where it will live forever.

Volta's makers prompt their LLM "to act like an intelligence analyst and produce structured citation-backed assessment of the victim." This lets the criminals prioritize their victims based on the expected return from exploiting them. It augments this dossier by combing through your Gmail as well as your Doordash and Uber Eats profiles. This merged data makes it much easier for criminals to call you up or email you (or have a chatbot call you up or email you) and trick you into giving up even more data:

https://pluralistic.net/2024/02/05/cyber-dunning-kruger/#swiss-cheese-security

Volta seems especially interested in younger internet users, targeting "Discord, Telegram, Steam, and Roblox sessions." Of course, once our "age verification" services breach vast, eternally persistent, detailed troves of data on young internet users, this kind of AI-supercharged malware will be able to target kids with much greater fidelity and efficacy.

AI capabilities have made infostealers much worse, but the reason for that new potency lies in how AI capabilities are supercharged by breach data that is the foreseeable and foreseen consequence of generations of hostility to privacy on the part of policymakers and corporations who responded to the incentives policymakers created.

We are living in the age of oily rags. For decades we fucked around with letting the private sector warehouse our data and weaken our security so that public sector agencies could plunder our data and our computers at will. Now, we keep finding out that everything is on fire.

It's going to take a long time to fix this, but we can do it. We can build more secure systems. We can make it much more of a legal ball-ache for companies to gather our data in the first place, and we can legalize and promote the creation of privacy blockers for browsers, phones, computers, cars, thermostats and smart speakers. We can enact corporate death-penalties for breaches to reflect the true societal cost of warehousing our data. We can ban Flock cameras and tear down the post-9/11 "fusion centers" that neatly package up our data for use by DOGE fascists and ICE thugs. We can ban our spy agencies from hoarding defects in widely used software, and instead require them to divulge these bugs so vendors can fix them:

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

And before we do any of that, we can just stop making it worse by ending the campaigns to require companies to spy on us and deliberately introduce security defects into their products.


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 NY Post blames pagans from Indianapolis for spam malware https://web.archive.org/web/20011103073038/http://www.nypost.com/news/regionalnews/33077.htm

#25yrsago The Shakespeare Programming Language https://web.archive.org/web/20011207071324/http://shakespearelang.sourceforge.net/report/shakespeare/

#25yrsago Appeals court: DeCSS is "pure speech" https://web.archive.org/web/20011102003502/https://www.wired.com/news/business/0,1367,48075,00.html

#20yrsago Apple drops Trusted Computing https://web.archive.org/web/20070106150844/https://www.osxbook.com/book/bonus/chapter10/tpm/

#20yrsago Microsoft threatens China pull-out over jailed bloggers http://news.bbc.co.uk/1/hi/technology/6102180.stm

#15yrsago Righthaven copyright troll’s victims send in US marshals to seize its assets https://arstechnica.com/tech-policy/2011/11/us-marshals-turned-loose-to-collect-6372080-from-righthaven/

#15yrsago Supercuts: rapid-cut videos that collect repetition https://web.archive.org/web/20111103190737/http://www.wired.com/epicenter/2011/11/supercut/

#15yrsago Study: why parents help their underage kids pretend to be 13 in order to use Internet sites https://firstmonday.org/ojs/index.php/fm/article/view/3850/3075

#15yrsago Blue Coat “deep packet inspection” tools used by Syrian secret police and other repressive regimes https://www.eff.org/deeplinks/2011/10/blue-coat-acknowledges-syrian-government-use-its-products

#15yrsago Extraordinary Catalog of Peculiar Inventions: awesomely dangerous pranks from the age of fraternal lodges https://memex.craphound.com/2011/11/01/extraordinary-catalog-of-peculiar-inventions-awesomely-dangerous-pranks-from-the-age-of-fraternal-lodges/

#10yrsago Cable prices have risen at more than double the rate of inflation for 20 years https://cordcutting.com/news/cable-prices-have-risen-faster-than-inflation-for-each-of-the-past-20-years/

#10yrsago Typical English village mystified by its cult status among Chinese tourists https://www.bbc.com/news/uk-england-oxfordshire-37820663

#10yrsago Nebraska’s billionaire governor couldn’t preserve the death penalty through the law, so now he’s buying a ballot initiative https://www.motherjones.com/politics/2016/11/ricketts-nebraska-death-penalty/

#10yrsago Anti-vaxx conspiracy leaders back Donald Trump, claim it’s mutual https://scienceblogs.com/insolence/2016/11/02/donald-trump-and-disgraced-antivaccine-scientist-andrew-wakefield-best-buds-forever

#10yrsago New, fast-spreading IoT botnet hybridizes two less-effective strains to achieve quick dominance https://arstechnica.com/information-technology/2016/11/new-iot-botnet-that-borrows-from-notorious-mirai-infects-3500-devices/

#1yrago There's one thing EVERY government can do to shrink Big Tech https://pluralistic.net/2025/11/01/redistribution-vs-predistribution/#elbows-up-eurostack


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

06:07

Girl Genius for Monday, November 02, 2026 [Girl Genius]

The Girl Genius comic for Monday, November 02, 2026 has been posted.

05:21

03:35

Treats For Cosmo [QC RSS v2]

the convergence...

00:42

00:28

Kernel prepatch 7.4-rc1 [LWN.net]

The 7.4-rc1 kernel prepatch is out, and the merge window is closed for this development cycle.

This is a *BIG* merge window. I think the reason is the by now obvious one, but I'm actually taking it as a good sign: I'm *much* happier with the flood of AI triggered work going into the merge window than it showing up mainly as extra fixes during the -rc period. So I'm hoping that this merge window being larger than usual is a sign that the AI fixes are becoming more part of the "normal development" than a flood of fixes that go into the whole stabilization phase. I think that's a much healthier model.

There were 18,591 non-merge changesets brought in during this merge window — this is not just a record, but it nearly matches the patch volume during the entire (record-setting) 7.3 development cycle. So far, 2,678 developers have contributed to 7.4; 625 of them are first-time kernel contributors. Subscribers can find more details in the KSDB 7.4 page.

Sunday, 01 November

21:21

Link [Scripting News]

OPML source for October 2026 on Scripting News.

16:56

Vasudev Kamath: Releasing debvulns with needrestart and kernel vulnerability handling [Planet Debian]

After quite some time, I picked up debvulns again to implement what I mentioned in my previous post: exporting reboot required status and identifying services that need a restart. Additionally, I wanted to ensure kernel vulnerabilities are not marked as fixed unless the running kernel matches or exceeds the fixed version. Both features are now live in version 0.2.4 (intermediate release 0.2.3 only included the needrestart functionality).

Why needrestart?

When you update packages on a system, security fixes do not take effect until running processes actually use the updated binaries from disk. When an upgrade occurs, existing processes continue executing the older, vulnerable code loaded into memory, while only newly spawned instances pick up the fixed binary. The needrestart package in Debian exists specifically for this purpose. It can run in either report mode or action mode: report mode provides machine-readable output, while action mode automatically restarts affected services.

Why integrate needrestart into debvulns?

needrestart is a standalone utility that can run independently or hook into apt to run automatically after an upgrade. On desktop systems, it typically runs interactively with a TUI prompt; on headless servers, it can be set to take non-interactive default actions. In batch mode, it avoids restarting sensitive system components (such as dbus) to prevent destabilizing the session.

Integrating this into debvulns is not about replacing needrestart or debsecan, but rather bringing vulnerability and remediation state into a single, discoverable interface. debvulns aggregates these signals into a standard format—in this case, Prometheus metrics and tags that can be visualized in Grafana, monitored by alerting systems, or consumed downstream by automation tools.

Why Special Handling for Kernel?

Just as user-space daemons require a restart after patching, a patched kernel requires a system reboot into the new image before the vulnerability is truly mitigated. Previously, debvulns only verified whether the patched package version was installed on disk. If the deb package was installed, the CVE was marked as resolved, which creates a false sense of security while running the old kernel.

With this release, debvulns now checks the active running kernel release. A kernel vulnerability is considered resolved only when the system is running the fixed kernel version. Until a reboot happens, the system remains reported as vulnerable.

The updated dashboard reflects these changes below. It will need further polish, but key metrics and restart/reboot states are now visible:

debvulns Grafana dashboard with needrestart and kernel metrics

What Next?

These were the two pending functional areas I wanted to cover, and no further major features are planned for now. Next up will be reviewing the entire codebase to identify potential optimizations and remove any unnecessary complexity. I haven't done a full pass through the repository since the initial skeleton implementation, so testing edge cases and cleaning up the internals will be the main focus. This will likely take some time since I only hack on this during weekend downtime. Until then, happy hacking, give the new release a try, and file an issue if you run into bugs.

Feeds

FeedRSSLast fetchedNext fetched after
@ASmartBear XML 15:28, Friday, 06 November 16:09, Friday, 06 November
a bag of four grapes XML 16:00, Friday, 06 November 16:42, Friday, 06 November
Ansible XML 15:21, Friday, 06 November 16:01, Friday, 06 November
Bad Science XML 15:49, Friday, 06 November 16:38, Friday, 06 November
Black Doggerel XML 15:28, Friday, 06 November 16:09, Friday, 06 November
Blog - Official site of Stephen Fry XML 15:49, Friday, 06 November 16:38, Friday, 06 November
Charlie Brooker | The Guardian XML 16:00, Friday, 06 November 16:42, Friday, 06 November
Charlie's Diary XML 15:14, Friday, 06 November 16:02, Friday, 06 November
Chasing the Sunset - Comics Only XML 15:49, Friday, 06 November 16:38, Friday, 06 November
Coding Horror XML 15:14, Friday, 06 November 16:01, Friday, 06 November
Comics Archive - Spinnyverse XML 15:56, Friday, 06 November 16:40, Friday, 06 November
Cory Doctorow's craphound.com XML 16:00, Friday, 06 November 16:42, Friday, 06 November
Cory Doctorow, Author at Boing Boing XML 15:28, Friday, 06 November 16:09, Friday, 06 November
Ctrl+Alt+Del Comic XML 15:14, Friday, 06 November 16:02, Friday, 06 November
Cyberunions XML 15:49, Friday, 06 November 16:38, Friday, 06 November
David Mitchell | The Guardian XML 15:56, Friday, 06 November 16:39, Friday, 06 November
Deeplinks XML 15:56, Friday, 06 November 16:40, Friday, 06 November
Diesel Sweeties webcomic by rstevens XML 15:56, Friday, 06 November 16:39, Friday, 06 November
Dilbert XML 15:49, Friday, 06 November 16:38, Friday, 06 November
Dork Tower XML 16:00, Friday, 06 November 16:42, Friday, 06 November
Economics from the Top Down XML 15:56, Friday, 06 November 16:39, Friday, 06 November
Edmund Finney's Quest to Find the Meaning of Life XML 15:56, Friday, 06 November 16:39, Friday, 06 November
EFF Action Center XML 15:56, Friday, 06 November 16:39, Friday, 06 November
Enspiral Tales - Medium XML 15:56, Friday, 06 November 16:41, Friday, 06 November
Events XML 15:14, Friday, 06 November 16:02, Friday, 06 November
Falkvinge on Liberty XML 15:14, Friday, 06 November 16:02, Friday, 06 November
Flipside XML 16:00, Friday, 06 November 16:42, Friday, 06 November
Flipside XML 15:56, Friday, 06 November 16:41, Friday, 06 November
Free software jobs XML 15:21, Friday, 06 November 16:01, Friday, 06 November
Full Frontal Nerdity by Aaron Williams XML 15:14, Friday, 06 November 16:02, Friday, 06 November
General Protection Fault: Comic Updates XML 15:14, Friday, 06 November 16:02, Friday, 06 November
George Monbiot XML 15:56, Friday, 06 November 16:39, Friday, 06 November
Girl Genius XML 15:56, Friday, 06 November 16:39, Friday, 06 November
Groklaw XML 15:14, Friday, 06 November 16:02, Friday, 06 November
Grrl Power XML 16:00, Friday, 06 November 16:42, Friday, 06 November
Hackney Anarchist Group XML 15:49, Friday, 06 November 16:38, Friday, 06 November
Hackney Solidarity Network XML 15:56, Friday, 06 November 16:41, Friday, 06 November
http://blog.llvm.org/feeds/posts/default XML 15:56, Friday, 06 November 16:41, Friday, 06 November
http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic XML 15:21, Friday, 06 November 16:01, Friday, 06 November
http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 XML 15:56, Friday, 06 November 16:41, Friday, 06 November
http://eng.anarchoblogs.org/feed/atom/ XML 15:14, Friday, 06 November 16:00, Friday, 06 November
http://feed43.com/3874015735218037.xml XML 15:14, Friday, 06 November 16:00, Friday, 06 November
http://flatearthnews.net/flatearthnews.net/blogfeed XML 15:28, Friday, 06 November 16:09, Friday, 06 November
http://fulltextrssfeed.com/ XML 15:56, Friday, 06 November 16:39, Friday, 06 November
http://london.indymedia.org/articles.rss XML 15:14, Friday, 06 November 16:01, Friday, 06 November
http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&amp;_render=rss XML 15:14, Friday, 06 November 16:00, Friday, 06 November
http://planet.gridpp.ac.uk/atom.xml XML 15:14, Friday, 06 November 16:01, Friday, 06 November
http://shirky.com/weblog/feed/atom/ XML 15:56, Friday, 06 November 16:40, Friday, 06 November
http://thecommune.co.uk/feed/ XML 15:56, Friday, 06 November 16:41, Friday, 06 November
http://theness.com/roguesgallery/feed/ XML 15:14, Friday, 06 November 16:02, Friday, 06 November
http://www.airshipentertainment.com/buck/buckcomic/buck.rss XML 15:49, Friday, 06 November 16:38, Friday, 06 November
http://www.airshipentertainment.com/growf/growfcomic/growf.rss XML 15:56, Friday, 06 November 16:40, Friday, 06 November
http://www.airshipentertainment.com/myth/mythcomic/myth.rss XML 16:00, Friday, 06 November 16:42, Friday, 06 November
http://www.godhatesastronauts.com/feed/ XML 15:14, Friday, 06 November 16:02, Friday, 06 November
http://www.tinycat.co.uk/feed/ XML 15:21, Friday, 06 November 16:01, Friday, 06 November
https://anarchism.pageabode.com/blogs/anarcho/feed/ XML 15:56, Friday, 06 November 16:40, Friday, 06 November
https://broodhollow.krisstraub.comfeed/ XML 15:28, Friday, 06 November 16:09, Friday, 06 November
https://debian-administration.org/atom.xml XML 15:28, Friday, 06 November 16:09, Friday, 06 November
https://elitetheatre.org/ XML 15:14, Friday, 06 November 16:01, Friday, 06 November
https://feeds.feedburner.com/Starslip XML 16:00, Friday, 06 November 16:42, Friday, 06 November
https://feeds2.feedburner.com/GeekEtiquette?format=xml XML 15:56, Friday, 06 November 16:39, Friday, 06 November
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 15:56, Friday, 06 November 16:40, Friday, 06 November
https://hackbloc.org/rss.xml XML 15:28, Friday, 06 November 16:09, Friday, 06 November
https://kajafoglio.livejournal.com/data/atom/ XML 15:49, Friday, 06 November 16:38, Friday, 06 November
https://philfoglio.livejournal.com/data/atom/ XML 15:14, Friday, 06 November 16:01, Friday, 06 November
https://pixietrixcomix.com/eerie-cutiescomic.rss XML 15:14, Friday, 06 November 16:01, Friday, 06 November
https://pixietrixcomix.com/menage-a-3/comic.rss XML 15:56, Friday, 06 November 16:40, Friday, 06 November
https://propertyistheft.wordpress.com/feed/ XML 15:21, Friday, 06 November 16:01, Friday, 06 November
https://requiem.seraph-inn.com/updates.rss XML 15:21, Friday, 06 November 16:01, Friday, 06 November
https://studiofoglio.livejournal.com/data/atom/ XML 15:14, Friday, 06 November 16:00, Friday, 06 November
https://thecommandline.net/feed/ XML 15:14, Friday, 06 November 16:00, Friday, 06 November
https://torrentfreak.com/subscriptions/ XML 15:56, Friday, 06 November 16:39, Friday, 06 November
https://web.randi.org/?format=feed&type=rss XML 15:56, Friday, 06 November 16:39, Friday, 06 November
https://www.baen.com/baenebooks XML 15:56, Friday, 06 November 16:40, Friday, 06 November
https://www.dcscience.net/feed/medium.co XML 15:49, Friday, 06 November 16:38, Friday, 06 November
https://www.DropCatch.com/domain/steampunkmagazine.com XML 15:28, Friday, 06 November 16:09, Friday, 06 November
https://www.DropCatch.com/domain/ubuntuweblogs.org XML 15:14, Friday, 06 November 16:00, Friday, 06 November
https://www.DropCatch.com/redirect/?domain=DyingAlone.net XML 15:14, Friday, 06 November 16:01, Friday, 06 November
https://www.freedompress.org.uk:443/news/feed/ XML 15:14, Friday, 06 November 16:02, Friday, 06 November
https://www.goblinscomic.com/category/comics/feed/ XML 15:21, Friday, 06 November 16:01, Friday, 06 November
https://www.loomio.com/blog/feed/ XML 15:14, Friday, 06 November 16:00, Friday, 06 November
https://www.newstatesman.com/feeds/blogs/laurie-penny.rss XML 15:28, Friday, 06 November 16:09, Friday, 06 November
https://www.patreon.com/graveyardgreg/posts/comic.rss XML 15:14, Friday, 06 November 16:01, Friday, 06 November
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 15:56, Friday, 06 November 16:39, Friday, 06 November
https://x.com/statuses/user_timeline/22724360.rss XML 15:21, Friday, 06 November 16:01, Friday, 06 November
Humble Bundle Blog XML 15:14, Friday, 06 November 16:01, Friday, 06 November
I, Cringely XML 15:14, Friday, 06 November 16:02, Friday, 06 November
Irregular Webcomic! XML 15:28, Friday, 06 November 16:09, Friday, 06 November
Joel on Software XML 15:14, Friday, 06 November 16:00, Friday, 06 November
Judith Proctor's Journal XML 15:21, Friday, 06 November 16:01, Friday, 06 November
Krebs on Security XML 15:28, Friday, 06 November 16:09, Friday, 06 November
Lambda the Ultimate - Programming Languages Weblog XML 15:21, Friday, 06 November 16:01, Friday, 06 November
Looking For Group XML 15:56, Friday, 06 November 16:40, Friday, 06 November
LWN.net XML 15:28, Friday, 06 November 16:09, Friday, 06 November
Mimi and Eunice XML 15:56, Friday, 06 November 16:41, Friday, 06 November
Neil Gaiman's Journal XML 15:21, Friday, 06 November 16:01, Friday, 06 November
Nina Paley XML 15:14, Friday, 06 November 16:01, Friday, 06 November
O Abnormal – Scifi/Fantasy Artist XML 15:56, Friday, 06 November 16:41, Friday, 06 November
Oglaf! -- Comics. Often dirty. XML 15:14, Friday, 06 November 16:02, Friday, 06 November
Oh Joy Sex Toy XML 15:56, Friday, 06 November 16:40, Friday, 06 November
Order of the Stick XML 15:56, Friday, 06 November 16:40, Friday, 06 November
Original Fiction Archives - Reactor XML 16:00, Friday, 06 November 16:42, Friday, 06 November
OSnews XML 15:56, Friday, 06 November 16:41, Friday, 06 November
Paul Graham: Unofficial RSS Feed XML 15:56, Friday, 06 November 16:41, Friday, 06 November
Penny Arcade XML 16:00, Friday, 06 November 16:42, Friday, 06 November
Penny Red XML 15:56, Friday, 06 November 16:41, Friday, 06 November
PHD Comics XML 15:49, Friday, 06 November 16:38, Friday, 06 November
Phil's blog XML 15:14, Friday, 06 November 16:02, Friday, 06 November
Planet Debian XML 15:56, Friday, 06 November 16:41, Friday, 06 November
Planet GNU XML 15:28, Friday, 06 November 16:09, Friday, 06 November
Planet Lisp XML 15:49, Friday, 06 November 16:38, Friday, 06 November
Pluralistic: Daily links from Cory Doctorow XML 15:21, Friday, 06 November 16:01, Friday, 06 November
PS238 by Aaron Williams XML 15:14, Friday, 06 November 16:02, Friday, 06 November
QC RSS v2 XML 15:14, Friday, 06 November 16:01, Friday, 06 November
Radar XML 16:00, Friday, 06 November 16:42, Friday, 06 November
RevK®'s ramblings XML 15:14, Friday, 06 November 16:00, Friday, 06 November
Richard Stallman's Political Notes XML 15:49, Friday, 06 November 16:38, Friday, 06 November
Scenes From A Multiverse XML 15:14, Friday, 06 November 16:01, Friday, 06 November
Schneier on Security XML 15:21, Friday, 06 November 16:01, Friday, 06 November
SCHNEWS.ORG.UK XML 15:56, Friday, 06 November 16:40, Friday, 06 November
Scripting News XML 16:00, Friday, 06 November 16:42, Friday, 06 November
Seth's Blog XML 15:14, Friday, 06 November 16:00, Friday, 06 November
Skin Horse XML 16:00, Friday, 06 November 16:42, Friday, 06 November
Tales From the Riverbank XML 15:49, Friday, 06 November 16:38, Friday, 06 November
The Adventures of Dr. McNinja XML 15:56, Friday, 06 November 16:41, Friday, 06 November
The Bumpycat sat on the mat XML 15:21, Friday, 06 November 16:01, Friday, 06 November
The Daily WTF XML 15:14, Friday, 06 November 16:00, Friday, 06 November
The Monochrome Mob XML 15:28, Friday, 06 November 16:09, Friday, 06 November
The Non-Adventures of Wonderella XML 15:56, Friday, 06 November 16:39, Friday, 06 November
The Old New Thing XML 15:56, Friday, 06 November 16:40, Friday, 06 November
The Open Source Grid Engine Blog XML 15:14, Friday, 06 November 16:01, Friday, 06 November
The Stranger XML 15:56, Friday, 06 November 16:41, Friday, 06 November
towerhamletsalarm XML 15:14, Friday, 06 November 16:00, Friday, 06 November
Twokinds XML 16:00, Friday, 06 November 16:42, Friday, 06 November
UK Indymedia Features XML 16:00, Friday, 06 November 16:42, Friday, 06 November
Uploads from ne11y XML 15:14, Friday, 06 November 16:00, Friday, 06 November
Uploads from piasladic XML 15:56, Friday, 06 November 16:39, Friday, 06 November
Use Sword on Monster XML 15:14, Friday, 06 November 16:01, Friday, 06 November
Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily XML 15:14, Friday, 06 November 16:00, Friday, 06 November
what if? XML 15:28, Friday, 06 November 16:09, Friday, 06 November
Whatever XML 15:49, Friday, 06 November 16:38, Friday, 06 November
Whitechapel Anarchist Group XML 15:49, Friday, 06 November 16:38, Friday, 06 November
WIL WHEATON dot NET XML 15:56, Friday, 06 November 16:40, Friday, 06 November
wish XML 15:56, Friday, 06 November 16:41, Friday, 06 November
Writing the Bright Fantastic XML 15:56, Friday, 06 November 16:40, Friday, 06 November
xkcd.com XML 15:56, Friday, 06 November 16:39, Friday, 06 November