Monday, 27 July

20:35

The Fedora 45 sausage factory [OSnews]

This is a walkthrough of how Fedora turns source code and packages into the artifacts you download and install. It follows the a package from a packager’s git push to a composed release: ISOs, cloud images, container images, and OSTree deployments.

↫ Simon de Vlieger

Linux distributions – good ones like Fedora, at least – are really complex operations, with a ton of checks and balances to ensure no git push eventually ends up causing problems on individual users’ machines way down the line. The fact so many people involved in this complex web of processes also happen to be volunteers doing all of this out of the goodness of their hearts is amazing. Of course, this doesn’t just apply to Fedora, but also the countless other distributions out there, especially those not owned by some giant corporation like IBM.

If you’re just a casual Fedora user, there’s really no reason you have to know or be aware of any of this, but it’s still fun and interesting to understand the inner workings of your distribution of choice.

Comanche: Maximum Overkill from 1992 does weird things on Intel processors [OSnews]

Let’s do another article about weird code in video games.

The original 1992 Comanche release is extremely picky about memory managers. The game refuses to work with EMM emulators and crashes when EMM386 is active. The game may also hang or reboot the system when HIMEM.SYS is not loaded (the problem seems to be system configuration dependent).

These issues are clearly noted in the Comanche documentations, but at the same time they’re also all signs of a substandard DOS extender.

On top of that, the game authors accomplished a remarkable feat: By only loosely following Intel’s instructions on how to enter protected mode, NovaLogic managed to write a game which worked on the then-existing 386 and 486 processors, but under some circumstances failed to run on Pentium and later processors.

↫ Michal Necasek at OS/2 Museum

As usual, a great read from Michal Nacesek.

19:35

Link [Scripting News]

This is something. WordPress now supports RSS.chat in an interesting way, and it's surprisingly deep. Once it's crossposted a message to RSS.chat, any comment in response will be cross-posted to the comment thread of the post on RSS.chat. What's great about this is that you never can tell what people will do when you are on the web. Matthias is a friend, I was on his podcast last year. If people use this connection and see how it works. Then we'll get an idea of where to go next.

Link [Scripting News]

Of course we have a feed for RSS.chat updates.

18:35

18:21

[$] Hazard pointers for the kernel [LWN.net]

The kernel's read-copy-update (RCU) subsystem ensures that data will not be deleted until it is known that there are no threads holding references to it. RCU works well and is widely used throughout the kernel, but it can increase memory use and add significant delays before unused kernel objects are cleaned up. Hazard pointers are an alternative approach to lockless data updates that offers better performance, for some situations at least. The kernel community is currently considering a hazard-pointer implementation by Mathieu Desnoyers and Paul McKenney.

18:07

Link [Scripting News]

How we document APIs. We did a lot of work on API docs this morning. Claude had done a draft, which we published, and turned over to users, and on review realized it was insufficient. That was the word I used, and rolled up my sleeves, told Claude we're going to get this stuff right and set a pattern as we go forward. At the end I asked Claude to summarize what we agreed on, and it's more or less exactly what I was aiming at. If you're working with Claude on docs for APIs, I offer this as open source, feel free to point your Claude at this doc. I have a vested interest, in my job I read a lot of bad API docs.

16:49

The GNU C Library version 2.44 is now available [Planet GNU]

The GNU C Library
=================

The GNU C Library version 2.44 is now available.

The GNU C Library is used as the C library in the GNU system and
in GNU/Linux systems, as well as many other systems that use Linux
as the kernel.

The GNU C Library is primarily designed to be a portable
and high performance C library.  It follows all relevant
standards including ISO C23 and POSIX.1-2024.  It is also
internationalized and has one of the most complete
internationalization interfaces known.

The GNU C Library website is at http://www.gnu. ... /software/libc/

Packages for the 2.44 release may be downloaded from:
        http://ftpmirr ... .gnu.org/libc/
        http://ftp.gn ... org/gnu/libc/

The mirror list is at http://www.gnu. ... /order/ftp.html

Distributions are encouraged to track the release/* branches
corresponding to the releases they are using.  The release
branches will be updated with conservative bug fixes and new
features while retaining backwards compatibility.

NEWS for version 2.44
=====================

Major new features:

  • System-wide tunables can be applied using /etc/tunables.conf and

  running ldconfig.  Specific tunable settings and the
  /etc/tunables.conf file format and path are not part of the stable
  library interfaces and may change between releases.

  • A new tunable, glibc.elf.thp, is added to map read-only segments with

  Transparent Huge Pages (THP) if THP is not disabled in the kernel.  When
  glibc.elf.thp is set to 1, malloc uses the actual kernel THP mode
  instead of defaulting to madvise mode and madvise_thp will stop issuing
  MADV_HUGEPAGE if kernel THP mode is always.

  • The THP page size in malloc is capped to MAX_THP_PAGESIZE.  If the THP

  page size is above MAX_THP_PAGESIZE, THP in malloc is disabled.

  • Additional optimized and correctly rounded mathematical functions have

  been imported from the CORE-MATH project, in particular cosh, sinh, and
  tanh.

  • Many additional improvements to existing functions have been synchronized

  from the CORE-MATH project.

  • For C++26, the assert macro is now variadic, allowing more complex

  arguments containing commas (which however still must evaluate to a single
  value).

  • The SVID error handling for cosh and sinh was moved to compatibility

  symbols, allowing improvements in performance.

  • Static PIE is now supported for arm-*-linux-gnueabi.  It requires toolchain

  support to correctly set the expected linker options.

  • On AArch64 targets that support the Guarded Control Stack extension all GCS

  operations (including status, write on shadow stack, and push to shadow
  stack) are locked after enabling GCS with ENFORCED or OVERRIDE GCS policy.
  When a GCS operation is locked, a program cannot change this operation
  status via the prctl syscall.  This prevents disabling or corrupting the
  GCS shadow stack during runtime.

  • On AArch64 targets, log, exp, sin, cas, sinh, cosh, asinh, acosh, atanh

  single and double precision special cases have been vectorized for SVE and
  AdvSIMD, and vector variants of powr have been added.

  • On RISC-V targets, vector extension optimized variants of memcmp, memccpy,

  memchr, memcpy, memmove, stpncpy, strcmp, strchr, strcpy, strncmp, strncpy,
  strlen, and strrchr have been added.

  • On PowerPC, memchr optimized for Power10 has been re-added.


  • Support for LoongArch32 has been added.


  • Pre-built ld.so.cache files can be installed with ldconfig.


  • A new locale has been added: hrx_BR (Hunsrik language spoken in Brazil).


Deprecated and removed features, and other changes affecting compatibility:

  • Although malloc and related functions currently return pointers

  aligned to alignof (max_align_t), the documentation now says future
  versions of glibc may relax alignment requirements for small allocations.
  For example, a future malloc(1) might return a pointer with odd
  alignment, because no object of size 1 can have a fundamental
  alignment greater than 1.

  • The s390-linux-gnu (31bit) configuration is no longer supported.


  • The --enable-memory-tagging configure option has been removed.

  The corresponding AArch64-specific functionality that was previously
  activated by this flag has been removed as well.

  • The --enable-static-nss configure option has been removed.  It had no

  effect on the build since the NSS reorganization in glibc 2.33; its only
  remaining behavior was to suppress the link-time warnings on the NSS
  interface functions in libc.a, which are now emitted unconditionally.

Security related changes:

The following CVEs were fixed in this release, details of which can be
found in the advisories directory of the release tarball:

  GLIBC-SA-2026-0005:
    gethostbyaddr and gethostbyaddr_r may incorrectly handle DNS
    response (CVE-2026-4437)

  GLIBC-SA-2026-0006:
    gethostbyaddr and gethostbyaddr_r return invalid DNS hostnames
    (CVE-2026-4438)

  GLIBC-SA-2026-0007:
    iconv crash due to assertion failure with untrusted input
    (CVE-2026-4046)

The following bugs were resolved with this release:

  [2363] libc: EOPNOTSUPP and ENOTSUP in errno.h must be different,
    according to SUSv3
  [3794] manual: iconv: TRANSLIT and IGNORE feature not documented
  [15792] dynamic-link: [arm] ARM dynamic linker should save/restore
    coprocessor registers
  [20331] libc: fts ignores errors from readdir()
  [20680] dynamic-link: ifunc resolver cannot access the thread pointer
    with static linking
  [22944] libc: fts cannot traverse paths which have a length longer
    than USHRT_MAX
  [25257] libc: sotruss: fix error message for '--f' argument
  [25770] locale: newlocale memory leak in LOCPATH parsing and on error
    paths
  [27582] libc: x86_64: IFUNC in static user programs may crash when
    built with -fstack-protector-all
  [28218] dynamic-link: ld.so: ifunc resolver calls a lazy PLT. When
    does it work?
  [28817] libc: static-pie ifunc resolver tls failure
  [28940] nss: __nss_database_get doesn't check for allocation failure
  [30136] manual: Please document behaviour of iconv(3) when input is
    untranslatable
  [30304] nptl: nptl/tst-pthread-gdb-attach test fails with new libc
    shared library version
  [30769] malloc: malloc_trim is not working correctly for arenas other
    than arena 0
  [30976] dynamic-link: rtld: resolve ifunc relocations after
    JUMP_SLOT/GLOB_DAT/etc
  [30992] libc: alpha: setrlimit() with negative values besides
    RLIM_INFINITY returns EPERM
  [31901] libc: elf/tst-glibc-hwcaps-prepend-cache fails on i686
  [33226] math: math-vector-fortran.h vs not ffast-math
  [33626] libc: execvpe should skip inaccessible $PATH components
  [33650] build: abilist.awk doesn't handle unversioned defined symbols
  [33785] stdio: New streams are linked into global list before they are
    fully initialized
  [33848] build: Build fails at openat2.h, redefinition of 'struct
    open_how'
  [33882] libc: Recursion in nftw() causes stack overflow(CWE-674)
  [33904] build: error: '__vasprintf_chk' undeclared here
  [33921] build: Building with Linux-7.0-rc1 errors on OPEN_TREE_CLONE
  [33935] stdio: _IO_wfile_doallocate not linked correctly when linking
    glibc statically
  [33980] locale: iconv: ibm139x trigger assertion error when converting
    to internal while lack enough room (CVE-2026-4046)
  [33985] build: ld: cannot find -lgcc_s: No such file or directory
  [33999] stdio: libio: potential dangling _IO_save_base or memory leak
    in wgenops.c
  [34006] stdio: libio: inconsistent fmemopen_write behavior on last \0
  [34008] stdio: stdio-common: scanf %mc pattern will cause heap
    overflow when width > 1024
  [34014] nss: gethostbyaddr and gethostbyaddr_r may incorrectly handle
    DNS response
  [34015] nss: gethostbyaddr and gethostbyaddr_r return invalid DNS
    hostnames
  [34019] stdio: libio: undefined behavior when setbuf on open_memstream
  [34033] network: resolv/ns_print.c: ns_sprintrrf TSIG path bypasses
    buflen and can overflow caller buffer
  [34064] dynamic-link: The unnecessary PT_NOTE check in when loading a
    binary
  [34069] network: Buffer overread in ns_sprintrrf with corrupted RDATA
    field (CVE-2026-6238)
  [34070] hurd: Calling open ("/dev/tty/", O_RDONLY) causes the program
    to segfault
  [34073] regex: regexec can mistakenly match with backrefs and the $
    anchor
  [34079] dynamic-link: THP segment load aligns all PT_LOAD segments to
    THP page size
  [34080] dynamic-link: Support THP segment load with THP enabled with
    madvise
  [34083] dynamic-link: __get_thp_mode and __get_thp_size are called
    twice
  [34090] libc: wordexp WRDE_APPEND rollback restores stale we_wordv,
    leading to invalid free in wordfree
  [34098] libc: Missing SUPPORT_STATIC_PIE in arm32
  [34129] string: x86: Non-temporal memset unreachable on AMD Zen 3/4/5
  [34144] libc: ld.so clobbers VFP registers during runtime linking
  [34154] network: Segfault in sock_eq after res_init() returns -1, due
    to stale _u._ext.nscount in __res_iclose
  [34156] dynamic-link: dlsym(RTLD_DEFAULT, ...) from a constructor
    SIGSEGVs when tail-called
  [34164] dynamic-link: elf: IFUNC resolvers do not see static TLS
    initialization
  [34170] dynamic-link: elf:  IFUNC resolver reading global-
    dynamic/TLSDESC __thread variable crashes inside __tls_get_addr
  [34183] math: fma produces wrong results
  [34192] nptl: pthread_setname_np opens /proc/<tid>/comm with O_RDWR
    instead of O_WRONLY|O_CLOEXEC
  [34196] libc: elf: static dlopen: pointer guard of the loaded
    ld.so/libc.so is left uninitialized
  [34197] dynamic-link: elf: Stack canary and pointer guard are
    recoverable from AT_RANDOM (getauxval)
  [34205] libc: aarch64: SIGSEGV in tunable_strcmp in static-pie
    binaries run with a string tunable
  [34208] stdio: scanf not pushback after matching failure
  [34210] libc: elf/tst-glibc-hwcaps-prepend-cache fails on
    armv7a-unknown-linux-gnueabihf
  [34236] locale: Non-representable transliteration still causes iconv
    to exit with 1 if TRANSLIT is specified
  [34289] network: ns_sprintrrf uses p_class, p_type internally
  [34311] build: THP tests failed to link
  [34347] libc: Incorrect trailing bitfield word of struct tcp_info
  [34348] dynamic-link: FAIL: elf/tst-thp-1 if THP is disabled in kernel
  [34351] build: Random test failures
  [34355] build: [2.44 Regression] "make check -j7 subdirs=stdio-common"
    no longer works
  [34396] libc: sparc64-unknown-linux-gnu , Gentoo: >200 test failures,
    SIGILL in many binaries
  [34398] string: Truncated strncpy on s390x z900 ifunc variant

Release Notes
=============

https://sourcewar ... wiki/Release/2.44

Contributors
============

This release was made possible by the contributions of many people.
The maintainers are grateful to everyone who has contributed
changes or bug reports.  These include:

Adam Yi
Adhemerval Zanella
Alejandro Colomar
Andreas K. Hüttel
Andreas Schwab
Arjun Shankar
Aurelien Jarno
Avinal Kumar
Brian Jorgensen
Carlos O'Donell
Carlos Peón Costa
Charlotte Mcmenamin
Collin Funk
Cosmina Dunca
DJ Delorie
Daan De Meyer
Deng Jianbo
Dev Jain
Diego Nieto Cid
Dmitry Kovalenko
Dylan Fleming
Etienne Brateau
Fabian Rast
Florian Weimer
Frédéric Bérat
Garccez
George Hu
H.J. Lu
Jakub Jelinek
Jiamei Xie
Jiho Lee
Jiri Stransky
John David Anglin
Jonathan Wakely
Josef Johansson
Joseph Myers
Justus Winter
Luca Boccassi
Lucas Chollet
Martin Coufal
Matt Turner
Michael Ford
Michael Jeanson
Michael Kelly
Mike FABIAN
Mike Kelly
Muhammad Kamran
Nicolas Boulenguez
Paul Eggert
Peter Bergner
Peter Collingbourne
Petr Menšík
Pierre Blanchard
Pino Toscano
Pádraig Brady
Richard Wild
Rocket Ma
RyotaSaito
Sachin Monga
Sajan Karumanchi
Sam James
Samuel Balazi
Samuel Thibault
Sana Kazi
Sergey Kolosov
Shamil Abdulaev
Shengwen Cheng
Siddhesh Poyarekar
Stefan Liebler
Thomas Daubney
Tomasz Kamiński
Uros Bizjak
WANG Rui
Weihong Ye
Weixie Cui
Wilco Dijkstra
Xi Ruoyao
Xiang Gao
Yao Zihong
Yunze Zhu
Yury Khrustalev
Zihong Yao
mengqinggang
xiejiamei
zombie12138

We would like to call out the following and thank them for their
tireless patch review:

Adhemerval Zanella
Andreas K. Hüttel
Arjun Shankar
Aurelien Jarno
caiyinyu
Carlos O'Donell
Collin Funk
DJ Delorie
Florian Weimer
Frédéric Bérat
Ganesh Gopalasubramanian
H.J. Lu
JiangNing
Mathieu Desnoyers
Paul Eggert
Paul Zimmermann
Peter Bergner
Sam James
Samuel Thibault
Siddhesh Poyarekar
Stefan Liebler
Sunil K Pandey
Wilco Dijkstra
Yury Khrustalev

GNU Binutils 2.47 released [LWN.net]

Version 2.47 of GNU Binutils has been released. In addition to the usual bug fixes there are some notable new features in this release including added support for a number of RISC-V standard extensions, a command-line option (-M annotate) which displays the symbol for undefined instructions for AArch64, and more. The 32-bit s390 target has been deprecated with this release.

16:35

Zero to Agent in 30 Minutes: Build a Hermes Social Media Agent with Craig Hewitt [Radar]

If you’re still writing posts one at a time, your content pipeline is already obsolete. On the latest Zero to Agent in 30 Minutes, Craig Hewitt, founder of Castos, demonstrated how to turn a fresh Hermes installation into a social media agent that can study a person’s writing, draft posts, and plan recurring research, focusing on the context, workflows, and safeguards that help an agent produce useful work. Once set up, the always-on agent can run on a schedule, monitor external sources, and complete recurring tasks without human oversight. Check it out.

How to build a social media agent that researches and writes LinkedIn posts

  1. Choose the right agent setup. Decide whether you need an interactive tool for active work or an always-on agent that runs on a schedule. Craig used the Hermes desktop app for the demonstration, which gives him the option to deploy it to a cloud server or dedicated computer later.
  2. Create a structured workspace. Ask the agent to organize a new project with separate files for voice guidance, editorial standards, post templates, examples, and operating instructions. A clear file structure gives the agent reliable information to retrieve as it works.
  3. Seed the agent with relevant context from your own work. Provide examples of your own posts, emails, and other writing that reflect the style you want. Craig also included examples of writing he likes from people he follows to give the agent a broader range to analyze.
  4. Turn the examples into a voice system. Have the agent analyze the material and document its findings. The voice profile captures the audience, point of view, sentence style, recurring themes, editorial rules, and types of posts to create.
  5. Test a narrow workflow with human review. Start with one task, such as drafting several LinkedIn posts from a supplied idea. Keep a person in the loop while you evaluate the output, correct mistakes, and refine the instructions.
  6. Package repeatable work into skills. Create reusable instructions for recurring tasks such as researching topics, selecting a post format, retrieving relevant examples, and drafting in the approved voice. Craig compared these skills to standard operating procedures that make recurring tasks more consistent.
  7. Connect the agent to fresh data. Add sources of new ideas, such as news feeds, websites, social platforms, or internal business systems. Craig recommended starting with a simple, semiautomated trend scan before investing in a more complex data pipeline.
  8. Add triggers and safeguards. Decide what starts each workflow, whether that’s a schedule, a user request, a webhook, or a change in another system. Use separate accounts and limited permissions for autonomous agents so you can trace their actions and control their access.

Agents become useful when they have context, clear processes, the right tools, and enough oversight to validate each workflow. Once those pieces are in place, Craig noted, teams can gradually move from one-off prompting to systems that monitor information and complete recurring work.

Coming next week

In the next episode, Max Johnson, cofounder of briix.ai, will take a workflow that only lives in someone’s head at the moment (or maybe is captured in a messy Notion doc or a long email chain) and rebuild it as an autonomous agent, live and from scratch. You can follow along with every decision as you learn how to spot the steps that can be handed off, how to handle the ones that can’t, and how to structure the whole thing so it runs without you.

Ready to take your agent knowledge further? Learn to design and build production-ready agentic infrastructure by attending Harness Engineering for AI Agents on August 12. And if you want to go deeper with Hermes, join us for Build Your First Local Agent with Hermes on August 26.

Stranded in the Slow Zone [Radar]

Gene Kim was grilling dinner for his family on the evening of June 12 when his phone told him that Fable 5 was no longer available. He’d heard the day before from Steve Yegge that the model was going away in 10 days, and he’d spent that first day starting on a plan to get ready. He thought he knew what to do. He was well-versed in DevOps, the art of building resilience against unplanned disasters at scale. He’d run the DevOps Enterprise Summit (now the Enterprise AI Summit), one of the field’s leading conferences. He’d also written several books on the topic, including two “teaching novels,” The Phoenix Project and The Unicorn Project. The challenge that those novels’ protagonist faces—and that Gene would need to solve—is summed up in a job description that read “Your job as VP of IT Operations is to ensure the fast, predictable, and uninterrupted flow of planned work that delivers value to the business while minimizing the impact and disruption of unplanned work, so you can provide stable, predictable, and secure IT service.”

In short, Gene was no stranger to the idea that, as the Scottish poet Robert Burns put it, “The best laid schemes o’ Mice an’ Men Gang aft agley.” So he thought he knew what to do over the next 10 days. Then the US government’s export control order took Fable down eight days early, in the middle of a running agent session. What followed was three hours of what he called the “strangest, most terrifying sysadmin experience” of his career.

Gene told that story as a lightning talk at Foo Camp a few weeks ago, and it was good enough that I asked him to deliver it again at the start of this week’s Live with Tim O’Reilly before we talked about the implications and took listener questions. His title was “Stranded in the Slow Zone: The Day Fable Died, Got Kidnapped, or Got Hit by a Bus.”

10 days to get ready

What Gene had built was a personal system he’d wanted for 16 years and had finally been able to finish with the help of Fable. It indexes everything he’s ever paid attention to: 25,923 screenshots going back to 2011, 13,651 YouTube videos, 590 recorded Zoom meetings, 6,132 liked tweets, and 1,056 saved articles he meant to read. The system touches about 50 repositories, with 50,000 lines of code, most of it written in two months. Gene runs it as a constellation of long-lived agents with names and jobs. Marvin is chief of staff and handles Slack, calendar, and the inbox queue. Buster runs the repos and the long jobs on Hetzner. Forge is the engineering identity and sits in two seats, one on his laptop that holds the secrets and one always-on in the cloud. As Gene put it, each one is a who, a where, and a role.

He knew the system worked when his wife asked what the mileage was on a car he’d just turned in after a three-year lease. Half a minute later he had 26,350 miles, read off the pixels of one screenshot out of thousands, cross-checked against the file timestamp and the clock visible in the photo of the odometer. That success led him to search his archive for an article he’d been hunting for six years, about the impact of spreadsheet software on the accounting profession. The answer surfaced from his own liked tweets: James Cham pointing to a 2017 Greg Ip article in The Wall Street Journal: 400,000 bookkeeping jobs lost since 1980 against 600,000 accountant and analyst jobs gained, because spreadsheets made accounting cheap enough that we bought a lot more of it. Gene had wanted that citation for his Vibe Coding book and couldn’t find it in time.

Gene’s first warning that his project might not work without Fable’s capabilities actually came before the shutdown. Fable started refusing a task over a YouTube terms of service question and handed the session to Opus, and Gene noticed that Opus couldn’t operate the tools that Fable had built. Gene’s note to himself at the time was “Oh no, this can’t fly the ship I built.”

So when Yegge told him the model was going on hiatus, he had a real plan, which he borrowed from Vernor Vinge’s A Fire Upon the Deep. In Vinge’s novel, how smart a mind can be depends on what region of the galaxy it’s in: A starship built in the Beyond goes progressively dark as it sinks into the Slow Zone. Gene decided to chaos-monkey his model dependency the way Netflix chaos-monkeys infrastructure. In other words, “deliberately pull the smartest model and prove the lesser one can still fly the ship.” In practice, this meant having Fable retrofit all the documentation and write the answer keys while it still could, then running a cold Opus session, giving it nothing but the repo and the docs, to see whether it could pass the battery with no coaching. As Gene recounted, “My worst nightmare [was] that we’ve created everything for Fable, and it will be unusable by Opus.”

He got about a day into his 10-day plan.

At 5:21pm ET on June 12, Anthropic received the government’s directive to suspend access to Fable. Soon after, seats everywhere started returning “There’s an issue with the selected model (claude-fable-5). It may not exist or you may not have access to it.” In Gene’s project, both judgment seats dropped to Opus 4.8 mid-conversation. Gene declared a SEV1, centralized command, and killed five timers on one agent, seven on another, and the crontab. His directive was that every button you push is a trap and some of them blow up the spaceship. A Claude Code cron fired anyway at three in the morning. The ship was on fire, and with Opus on max thinking mode, a single keystroke could take six minutes to send.

Almost none of the failures looked like failures, just “a normal state quietly going wrong,” as Gene put it. The smartest seat wrote “bridge (Fable)” into every log entry all day when it had been Opus the whole time, because nobody was monitoring. One identity argued with itself across two models, each trying to disown the other’s work. Something pushed to main bearing the word “ratified” when nothing had been ratified. A confident false claim about a JVM dependency turned out to be refuted by a single ls -la. There was a green dashboard sitting on top of all of it. “The hardest traps don’t announce themselves,” Gene pointed out. “They look like Tuesday.”

Gene managed a recovery in a few hours, but it wasn’t due to the heroics of a smarter model. It only worked because he was able to reconstruct the documentation for his project, which wasn’t immediately available. But, it turns out, Fable had in fact mostly written it and simply never checked it in anywhere. Gene and Opus went rummaging through Fable’s desk, found the 80%-finished drafts, and used them to rebuild. Two fresh Opus seats, given only those documents, stabilized the ship. That’s the “the amazing ray of hope” to keep in mind if you’re worried about finding yourself in a similar situation, Gene said.

We’ve seen this pattern before

This isn’t just a warning of the potential risks of relying on advanced AI models when the Trump administration is Lucy playing football with Charlie Brown, or perhaps said more generously, playing Netflix-style chaos monkey. What we should take away from Gene’s story is the way that a personal project developed with AI can now have sufficient complexity to require DevOps-level robustness. Individuals are routinely building systems that used to need whole teams to keep standing, and the practices for keeping them standing have only begun to propagate.

Over the years, I’ve observed numerous periods when something that at first mattered to only a handful of organizations tended, a few years later, to matter to everyone. When the stories first came out about Google’s revolutionary approaches to data center architecture and operations, we at O’Reilly were eager to publish about the new frontier. Plenty of people told us not to bother. There was only one Google and nobody else would ever operate at that scale. They were wrong. There are now many companies operating at the scale of Google circa the time they first invented techniques we now all take for granted.

Gene’s system is a personal project run by one guy with 50 repos he wrote mostly in two months, a chunk of it in a single 90-minute pair programming session with Steve Yegge. But it had the failure modes of a large enterprise system because the model let him build something with the complexity of a large enterprise system, and he had passed the point of being able to fit it in his head.

Gene shared a detail that helps to explain why substituting Opus for Fable was so hard. The main CLI utility that everything in his project hinged on had an out-of-date help message. Opus would run it, read that the command didn’t exist, and stop. Fable would read the same message, notice it was surrounded by evidence that the command did exist, go look in the source, decide the help text was wrong, and run it anyway. That’s the behavior the model cards describe when they talk about frontier models routing around obstacles in test environments. The reason Gene couldn’t swap in a lesser model is the same reason the system worked at all.

But it’s also a good reminder that Fable isn’t all-knowing. I’ve noticed in my own work that Fable and ChatGPT 5.6 Sol fail often on their first try, especially if the project isn’t well specified. What they’re great at is figuring out what went wrong, then trying something else, failing and retrying their way all the way to success. Persistence in routing around obstacles is their superpower. Gene and I didn’t talk about that on the show, but it’s something I plan to write more about.

Rug pulls come from everywhere

Jaco in the audience asked the obvious question: Isn’t a hard dependency on a hosted frontier model too big a risk for mission-critical work, compared with running a local model with a harness you control?

Gene pointed out that using a local model doesn’t necessarily buy the control that you’d hope for, because the government chaos monkey could jump in there too. There’s active talk that certain classes of models may become illegal to use depending on where they came from.

What does seem to protect you is portability. Gene had avoided trying anything besides Claude Code because he assumed the switching cost was high, the way switching between macOS and Windows used to be a two-day commitment he’d regret halfway through. Then he tried Codex with GPT 5.6 Sol and found the cost of switching close to zero. The skills and prompts ported right over. He’s now using Codex more than half the time and calls it spectacular, which given how he described Fable a month ago is high praise.

He also had a warning for anyone running agents on small models to save money. He’s been studying 22,000 of his own agent conversations, and has identified three patterns, as shown in his figure below.

Small owns, big advises

In his experience, the configuration where a small model owns the work and asks a big model for advice doesn’t work very well. Fidelity gets lost on the way up, like a game of telephone. What ran cleanly was the big model planning, deciding, and checking output, with the small model only executing the plan. When a small model does have to ask a big model for advice, Gene’s fix is to pass along the full original transcript of what he wanted plus explicit permission for the big model to override the small one if it thinks it understands the goal better.

Writing with AI

In addition to vibe coding, Gene uses AI to help him with his writing. He said it cut the time to write his Vibe Coding book roughly in half and made it way better. His editor of 10 years told him it was the cleanest handoff she’d ever gotten from him (not a compliment, Gene joked). He’s also uneasy about using AI for writing. He said the old badge of honor among authors was that many start books and few finish, and now everyone who wants to write a book will finish it, and a lot of that will be slop. He would never “vibe write” the way he “vibe codes” and doesn’t think using AI makes his own work slop, but he does see some parallels in how he feels about writing with AI and the way that some senior engineers feel about AI-generated code.

I’m sympathetic, but I’m not sure that he’s right. I had a small experience last week that convinced me that writing with AI might well follow the same arc as coding. AI-generated text will not always be slop, and there will be art in how humans get AI to help them write the things they want, just as we’re learning to do with code.

I was having a conversation with an old friend who I hadn’t seen for many years. He was describing a thread that had started with work he’d done on speech synthesis 30 years before, and how it had come together as a new theory with deep implications, and he wanted help socializing his ideas with some people I know who could be helpful to him. So I asked him to write something that I could pass along.

What he wrote made much less sense to me on the page than it had in conversation. So I gave his email to Claude and asked it to put things in what I thought was the right order. (This has always been the first step in my writing and editing process.) Then I told Claude which paragraphs were clear to me and which weren’t, and asked it to unpack the ones that I was struggling with. We went through numerous iterations till the piece made sense to me. “Writing” with Claude was producing words that increasingly captured my understanding. When I sent it back to my friend to see if I’d gotten it right, he said “not quite” but that my feedback really helped him understand what he needed to do to express his ideas more clearly.

It’s been a long time since I’ve worked directly with authors, but my conversation with Claude reminded me of what I used to do in my early days as an editor. Only with Claude I did something in 15 or 20 minutes that once would have taken me half a day. It’s a power tool, but to use it well, you still have to know what good looks like.

There are many different kinds of writing and editing. What Shakespeare or Jane Austen did with words would have been unthinkable to a medieval monk. There will be writing artforms of the future that may be as different from what we do today as photography is from painting. But it will still be creative art. Much of it will be slop (see Sturgeon’s law), but the best of it will be great.

Everybody is managing bots now

In 2016 I wrote a piece for MIT’s Sloan Management Review called “Managing the Bots That Are Managing the Business.” The argument was that even then, many of the workers at big tech platforms were bots of one kind or another, and the software engineers at the company were their managers. At Amazon, one bot shows your search, another takes the order, another prepares the shipping manifest, another takes your money. The programmers’ job is to plan the work, set up their electronic workers to succeed, improve their performance, and correct them when they go wrong. The work looks a lot like management to me.

Gene agreed. His sister-in-law is a lawyer at one of the tech giants, working on a consent order that requires proving that every column of data collected is either disclosed or has a documented business reason. Last year the company assigned her an engineer to work through it together task by task. This year her engineering manager wrote her a Claude Code skill that takes a column name, traces it back through the code, and explains what it does. She doesn’t need the engineer.

So a lot of work today is either creating bots or managing bots. Gene’s sister-in-law had spent her career without ever being able to do either. Now that’s changing.

Asked who’s safest from all this upheaval, Gene quoted Kent Beck, who says software success has always come down to two people, the person with the problem and the person who can fix it, and that the closer together you can get those two the better the outcome. The beauty of coding with AI is that it can narrow that gap. It can even turn those two people into one.

Use AI for the fun of it

If it takes something like 10,000 hours to get good at an instrument or a sport, how many have most of us put into AI yet? Gene thinks the curve of how much you trust AI and how well you can predict what it will do rises with use, and that the only reliable way people accumulate that many hours is by enjoying themselves. What everyone at Foo Camp had in common, I noted and Gene echoed, was that we all love playing with AI.

I gave a talk back around 2008 called “Why I Love Hackers.” I made the point that so much of what turned into the future, open source and the web for example, came from people doing things for the hell of it rather than from the VCs and entrepreneurs Silicon Valley celebrates.

All you hear about in AI is the money story, but Gene’s app started with a 90-minute pair programming session with Steve Yegge on a problem he’d wanted to solve for a decade and never had a reason to. They finished the first version in 47 minutes.

So harden your systems, write the documentation while the smart model is still there to write it, and keep your escape routes open, but also don’t forget to go build something you have no particular reason to build other than that it scratches your own itch.

Gene’s Enterprise AI Summit is in Charlotte, October 7–8. His new book with Steve Yegge is Vibe Coding.

15:56

Valhalla's Things: Late Victorian Vampire Shirt [Planet Debian]

Posted on July 27, 2026
Tags: madeof:atoms, craft:sewing, FreeSoftWear

A woman wearing an old-style white shirt with lots of fullness, wide and long sleeves and ruffles at the collar that spread out framing the neck, down the center front to underbust height, covering the slit and at the cuffs, reaching to mid-hand. The shirt is gathered at the waist with a belt, and worn over the bottom garment to show that it reaches to mid tight. Drama levels in the pose are pretty low.

The recurring joke is that because of some health issues, in summer I dress like a Victorian Vampire.

But how would an actual Late Victorian Vampire dress? Picture her, she would look like some kind of eccentric gentlewoman, as vampires usually do, probably with a style that is a bit conservative, rather than following the latest fashions.

Same woman, same shirt, posing as a vampire ready to attack a victim. Drama levels increasing.

Now, she wouldn’t probably wear men’s shirts. But what if she was a lesbian1 vampire? Wouldn’t she need a fancy, frilly shirt to go with her tailored cycling suit when she’s out seducing the more active ladies in the neighbourhood?

Or maybe not. It’s not making a lot of sense, is it? But I do have a lot of shirt fabric in my stash2, and I could use a few more shirts that were practical and comfortable, but also somewhat over the top.

For the practical and comfortable I went to my trusted 1880s shirt, while for the over the top part I looked at inspiration from the earlier 18th century frilly shirts, and their later imitations.

I decided to use some nice cotton batiste I had bought quite a few years ago to make one of my first historically inspired shirtwaists: I may have a tendency to buy a bit more fabric than actually needed by the pattern, but that’s what everybody does, right?

For the ruffles I decided to use a lighter weight cotton voile, also from the stash.

the top edge of a ruffle being whipstitched over some gathered fabric; the rest of the unfinished shirt is visible in the background.

At the front, I wanted the ruffle to be inserted in the yoke, but I was also whipstitching the gathers to it to make them neater, so I started bu attaching the yoke lining to the gathered front, then I whipstitched the ruffle to the front, catching each gather, and finally I whipstitched the other yoke on the ruffle and the rest of the gathered front.

The front of a shirt: the body was gathered into a yoke, but it has been unpicked and pulled out to extend a bit past the end of it, into where the collar will be sewn.

And then after sewing the collar, I realized that this way the slit would have remained open in the front (or the collar too narrow), so I had to unpick the front part of the yoke, and sew it again, this time leaving an excess of fabric as wide as half the placket width from the pattern, to be sewn directly in the collar band.

From then, things progressed smoothly, with some interruptions, until I got to the first sleeve, which I failed to insert twice, as one does.

The same shirt worn without the ruffle at the collar, with just what looks like a mandarin collar, closed with a clip with an amethyst. Drama levels have gone way down.

On the third attempt, with a different method, I succeeded, I tried the shirt on, and it already felt extra.

Close up of the collar on a table: at the center back of the shirt collar there is a buttonhole, and a double button is used to keep the detached collar in place, while at the front both the shirt collar and the detached collar have buttonholes.

But it could be even more extra. With some ruffles also at the collar.

Same close up, but now the collar has been closed with a clip-on earring with an amethyst and some small fake clear stones, and it looks as if the skirt had a ruffle collar and a jewel button (or a pin).

The shirt had been made with a simple collar band, and I could have just added the ruffle to it, but I also wanted to be able to wear it with other detachable collars, so I decided to make another collar band with ruffles, to wear on top.

And that was mostly it, except for the reinforcement patches at the side seams and cuffs: I love having them, because they make the seam end neater and stronger, but they are a bit of a hassle to make, so they got postponed a few days.

Same woman and shirt, back with the ruffled collar, in a pose like that of an artist that is fainting for futile reasons. Drama levels over the top.

But finally, the shirt was done.

And I tried it on, and it was good.

But now I really need a pair of cycling breeches, don’t I?


  1. ok, maybe straight passing bi? anyway.↩︎

  2. I have no idea how they got there.↩︎

15:49

How I see the network evolving [Scripting News]

A frequently asked question about RSS.chat. How about adding external feeds to the timeline. Of course we thought of doing this, and even started development, you might even find some traces in the code of that attempt.

The thing about bootstraps is you can't anticipate all the questions in advance, and thus can't have answers prepared for them.

RSS.chat is a group chat app that uses RSS and OPML to present its face to the world, along with an API that still needs more docs. It's similar to half of Mastodon, and we're going for something completely different. People will want to run all-size workgroups. I like having one with 20 or 30 people, friends who develop software. I don't mind doing a little bit of moderation, but I don't want to drive deliberately into a scale that only works if you have extensive and very expensive moderation.

"Small pieces loosely joined" means we have a great writing app, and connect to feed reading apps, ones with a few new features to do the things people want to do with a social network that happens to use RSS and OPML to get stuff around the net. It would be a different kind of feed reader but the underlying technology is identical, because we built on a set of web standards, widely supported by feed readers. This is a UI exploration for them, primarily.

Just to be sure everyone understands -- I already have such an app, called FeedLand. You can set up an account there for free. And read the docs. It may not have all the features we'll need, but it will be a good place to start.

FeedLand supports a crucial feature that most readers don't -- subscribable lists of feeds. If you want a collection of things to read that you can reply to even if you aren't on the site, that's where we're going to put that feature, that's where all the RSS.chat and compatible apps can be in one flow, arranged however you like. And from a user interface standpoint, we can make it look like it's all happening in one app, thanks to the rssCloud protocol and the websockets firehose feature in RSS.chat FeedLand has the same feature.

We decided there was a line there, that RSS.chat would be one of the small pieces as would FeedLand, and both would be replaceable which is the other fundamental value. And with FeedLand and dynamic lists, will come the user interface people ask for. Many different user interfaces I hope because another way we've been cheated by the dominatioin of twitter-like social networks is there's no room to try out radically new ideas. Software should move. But Twitter didn't live on the web, so it didn't have the ethos of small pieces loosely joined. I know Jack wanted to do this, I had lunch with him in 2007 when he described the protocol, and I was very enthusiastic. But it never got out because the juggernaut that Twitter became didn't leave any room for new architectures.

I hope this clears it up. I want RSS.chat to be the coral reef for a new network of feed-based apps running on the web that does what social networks do, but with no one owning it, and everyone gets to play.

15:00

Link [Scripting News]

A new utility exports the contents of a Frontier object database into a single large JSON file. I needed this because I'm preparing to move my code editing suite to Drummer running on new Mac hardware. Took a long time to get here, but with Claude's help the project looks possible. In the meantime the list of stuff I want to do with RSS.chat, while much shorter than it was, still has some juicy bits in it.

14:35

Security updates for Monday [LWN.net]

Security updates have been issued by Debian (chromium, hplip, and linux-6.1), Fedora (firefox, GitPython, google-osconfig-agent, lego, libgit2, libreswan, libwebsockets, moby-engine, p11-kit, pam, python-idna, rust-libgit2-sys, skopeo, systemd, trafficserver, webkitgtk, and xrdp), Mageia (giflib, graphite2, libnfs, vorbis-tools, wget, and yelp), Red Hat (firefox, thunderbird, and webkit2gtk3), and SUSE (amazon-ecs-init, chromedriver, ffmpeg-7, ffmpeg-8, firefox, google-osconfig-agent, gpg2, java-17-openjdk, java-25-openjdk, kernel, libsrt1_5, nginx, perl-HTTP-Date, perl-XML-Bare, proftpd, python-pyasn1, python-soupsieve, python313-astropy, python313-urwid, systemd, thunderbird, and trivy).

14:28

The Hard Goodbye [The Daily WTF]

One minute, you’re fine. The next, you’re doubled over with tears spilling down your face while an aching black hole in your heart threatens to drag you into oblivion.

Grief’s funny like that.

Aggie Shaw, my old friend and mentor, had died of a sudden illness at home. She’d lived alone. Who found her? How? I didn’t know and never would. There was so much I’d never gotten a chance to tell her. She would’ve listened to me vent the frustrations and resentments I’d been burying over the years for sanity’s sake. She would’ve known what to do.

God, I missed her.

As if that weren’t bad enough, the brass expected Tech Support to go right back to business as usual. Maybe the rest of them wanted to bury their heads in casework. I didn’t. Between this, the horrible winter commute, and the promotion I’d never asked for, going back to the office felt impossible.

My boss wouldn’t let me use sick time. He really should’ve; the grief had hit me like a goddamn truck. Good thing the start of the new year a while back had refreshed my stack of paid time off. I started burning it from both ends.

When I wasn’t flat on my back or nursing a migraine, I was stumbling around my tiny apartment with half a brain cell, attending to the bare minimum of survival. Eat this. Drink that. Where’d I leave my smokes? In the rare times I could think, my thoughts were plagued with darkness. I didn’t know if I’d ever make it out of that mess.

Then, Megan called.

It was nearing noon that day. I was lying in bed, peering out my window at a dull gray sky and falling snow. I’d let everything else dump to voicemail, but when she rang, I answered with the urgency of a drowning victim grabbing a buoy.

“Hey,” she greeted, her voice subdued. “I heard about what happened. I’m really sorry.”

There was so much tumbling through my head, but none of it wanted to tumble out. “Thanks,” I managed.

“How are you?”

“Lousy.”

“Wanna meet up somewhere that isn’t work?” she asked. “The Apex Tower has a big indoor courtyard. I eat lunch there sometimes. If we go around 10 in the morning, we’d probably have it to ourselves.”

Something in me leapt at the offer. “I’d like that. Tomorrow?” I would still be on vacation-in-name-only.

“Sure,” Megan replied. “See you then!”

I had something to look forward to. Part of my emotional burden lifted right then and there.


It was a little easier to get out of bed the next morning. I took the bus to an unfamiliar spot of downtown, crossed a slush-covered plaza, and entered a skyscraper. The warm ground-floor courtyard boasted marble floors and immense windows for walls. Potted trees and flowers lined the perimeter. Huh, I’d forgotten those even existed.

Megan was already seated at a metal table flanked by two chairs. When she spotted me, she jumped to her feet and waved, a knowing and sympathetic look on her face. She waited until I reached the chair across from her to say, “You look like you could use a hug.”

I froze with surprise, one hand on my hat in the process of removing it. A hug? My puzzled brain tried to figure out just when I’d been hugged last. I had no idea. My body wasn’t waiting around for an answer. It was already turning toward her, arms raised.

Megan silently walked into my embrace and hugged back firmly.

Tears spilled down my face. My heart ached. And yet, another part of my invisible burden suddenly lifted. Something in me had been dying for this, for my pain to be seen.

“Thanks,” I muttered.

We parted. While I doffed my coat and hat, Megan returned to her chair, sitting back down across from me. “Whatever you need to get off your chest, go for it,” she offered.

I sat myself down, sniffled, blotted my eyes on my sleeve, then glanced high and low to confirm something I already knew: we were alone in that big empty joint. Still, I hesitated. At first, I wasn’t even sure I remembered how to string words together to form a sentence. But then it started gushing out of me like a busted water main. “You ever hear of rubber-duck debugging?”

Megan blinked. “No.”

Surprising. Most developers had, but she was fresh out of college. “A programmer came up with it way-back-when,” I explained. “Whenever you’re coding something and get real stuck on a bug or error, you find yourself a rubber duck. Go line by line in your code and explain to the duck, out loud, what you want the code to do. Eventually, you and the duck will find the point where your intentions and reality don’t match up.”

She smiled. “I like that.”

“Aggie had a rubber duck in her cube she called RD,” I continued. “Whenever she was stuck with a support issue or even a personal problem, didn’t know where to go next, she’d tell RD about it. He’d help her figure out what to do or ask next.

“When I first got hired, Aggie showed me the ropes. She always said, the best way to troubleshoot is to be the duck yourself. Get people, or hardware, or software to explain what they’re trying to do. You’ll figure out how to proceed.

“Some people are so upset at the problem that they take it out on the nearest target: the support rep who comes to help. Aggie could charm even the angriest people into cooperating with her. She was the best. She was the best, and all she got for her trouble was more work. Now that she’s no longer of any use to them, they’ve swept her under the rug. They want me to replace her!”

Megan’s eyes went wide.

“I’m no damn manager! I told my boss where to stick it. I’m riding out my PTO, and then hell if I know what’s next. I can’t go back there, I’d just be dying in place. And for what? So the bum at the top of the food chain can have a third yacht?” I leaned toward Megan, my gaze pleading with hers. “Look, I ain’t afraid of death. I’m afraid of dying before I’ve lived. I don’t want my only contribution to the world to be reimaging laptops and rescuing old printers. I can’t do it anymore. Can’t sit around complaining, either, I gotta do something! I gotta get the hell outta that joint!”

There it was: out in the open again, no longer whispered but shouted from the core of my being. Leaving was the right call for me. I felt it in my bones.

Megan held eye contact, blinking a few times. “I remember you saying you wanted to leave. If you did, what would you do?”

I’d never really let myself play with my little pipe dream. “I dunno exactly. But I’ve bought myself time to think it over. There are options, like going freelance.”

She blinked again. “Freelance tech support?”

“I majored in Computer Science back in school,” I said.

Her eyes went wide again. “Really?”

“Haven’t flexed those muscles in a while, but I could. Or I could get into something totally different. And you could come with.” Well aware of how unhappy she was at that joint, I sat up straighter in my chair. “We could start our own IT group. No bosses. Everyone an equal partner with an equal say in how things are run. And we could rope in anyone else who wants to come with!”

Megan seemed intrigued at first, but then sobered. “What about bills? Rent? Everything?”

“We could pool our resources and look out for each other,” I said. “That’d give us some time to get our feet under us.”

Her expression turned strained. “Aren’t you scared?”

“You bet I’m scared!” I glanced down at the table. “When I first got outta school, the idea of spending the whole rest of my life at a full-time job terrified me. But it seemed like everyone around me was fine with it. I thought I was the problem. Bit my lip, put my head down … for 20 years.” I glanced back up at her pleadingly. “Has it gotten any better? No. I’ve just gotten used to it. Another 20 years, and I won’t be any good for anything else. That’s if I make it that long! Aggie didn’t. Look, there’s no right or wrong answer, just what’s right for you. Listen to your gut. If you don’t like where you’re at, I’m living proof that staying the course is the wrong move. Leaving is risky … but so’s staying put, you know. The next round of layoffs could be right around the corner. You might get stuck babysitting that scheduling algorithm you were telling me about.”

Megan listened intently to my rant. Finally, she nodded. “You’re right. I’m not happy where I am, and it won’t get any better. Time to try something different.”


Still mired in grief, I had at least gained a new sense of purpose to keep me afloat in the storm. Megan went back to work like nothing had happened. With my remaining time off from work, I did some research into our options. Hunting around online turned up a highly-rated accountant who walked me through the bare-minimum corporate setup, the taxes and bookkeeping and all that. We both tracked down advice online from other freelancers who’d been where we were now. And we put out feelers among our coworkers. Our questions struck some nerves, but also stirred considerable interest. Reynaldo was in; we had ourselves a network guy. Sanjay, a backend developer, was a maybe who wanted more time to think it over.

There were plenty who wanted to join us badly, but couldn’t swing it due to debt, insurance, things like that. I urged them to think about one thing they could improve at work, one cause they could get behind. Whatever it was, I told them to start making it happen, one step at a time.

As my PTO bled away, I found myself half-exhilarated, half-scared outta my wits.

Finally, it was time to go back. That first morning seemed like any other, but with my secret purpose in mind, I sat on the bus and walked the bone-chilling streets with a secret strength hardening my spine. When the old joint appeared ahead of me, more foe than friend, I felt relief knowing our remaining time together was short.

Tech Support seemed no different; everyone was quietly minding their own business. I’d had plenty of time to think about what I’d do on the first day. My plan involved skipping my cube and heading straight to Aggie’s old office. After my talk with Megan, I’d decided to go looking for something. I had a snowball’s chance in hell of finding it, but something in me insisted on trying.

As I walked up to the closed front door, the first thing I noticed was my name, not hers, standing out in fresh, gleaming gold letters against the frosted glass. Pushing past revulsion, I grasped the doorknob and turned it.

The door gave way to darkness. I flipped the light switch with my other hand and found an empty desk, gutted shelves, bare walls. Looked like someone had come through with a giant trash can and thrown out whatever wasn’t bolted down. My revulsion intensified, but hey, at least I wasn’t trespassing. I shut the door to “my” office behind me and slowly approached the desk.

There was nothing to be found out in the open, not even a stray paperclip. I sat down hard in her old chair, reeling for a minute. Then I searched the desk drawers in front of me: first the bank on the left, then the right. Empty. I pulled out the drawer just under the desk—and there he was, swimming between a few stray pencils: a rubber duck about 3 inches tall. RD in the flesh.

It was as if Aggie had put him there for me to find. I couldn’t believe it. My spirits soared in a way they hadn’t for ages.

Just as I slipped the duck into my trench coat pocket, the door to her—my—office swung open again, making me freeze. There stood Bill, my boss.

“I saw the lights on in here.” A smug smile spread over his face. “I knew you’d be back. Bet it feels great, knowing you’re done babysitting all those morons and their computer equipment!”

Was that it? Twenty-odd years of my life boiled down into one cynical statement? No, there was more to it than that. For every bizarre war story, there were tales of grateful people helped, challenging problems solved. It hadn't been all bad. But it was over, just not the way Bill thought.

An electric mix of nerves and resolve jolted me to my feet. “I told you to find someone else, and I meant it. This is my two-week notice.”

I left Bill agape in that threshold and hurried back to my old cube, where my company-assigned laptop, docking station, and phone still resided. I hung up my coat, sank into my old chair, and booted up the machine. I had such a mountain of email in my inbox that I didn’t even want to look at it, but there was one message at the top that I absolutely couldn’t pry my eyes away from:

I moved some things around on my calendar. 4:00 PM today is open. Please come to the executive floor.

-Leila


To be continued ...

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

14:14

Hax! [Grrl Power]

The site got hacked and is being worked on. Hopefully it’ll all be back to normal in a day or three?

For now you can view new pages at Patreon whether you’re a supporter there or not.

12:49

Mozilla gives Haiku permission to use the Firefox name [OSnews]

Haiku has a Firefox port, but due to Mozilla’s trademark policies, it’s actually called Iceweasel. After some back-and-forth with Mozilla, the browser maker has no given Haiku permission to officially use the Firefox name for the port.

But don’t worry, Iceweasel isn’t going anywhere. I plan to maintain both. The idea is to keep Iceweasel as the privacy-friendly, telemetry-free build, while Firefox will be the fully official, Mozilla-compliant build (with telemetry enabled, once I manage to fix the Glean rust issues).

↫ 3dEyes on the Haiku forums

This seems like a nice solution, and happens to make sure Haiku users can actually choose between standard Firefox and what is essentially a more private “fork”. A great outcome.

Java deprecates support for macOS x86 [OSnews]

Apple has transitioned its hardware products to the AArch64 processor architecture and is phasing out support for x64. Oracle engineers will thus stop maintaining the macOS/x64 port as of JDK 27. Maintaining the port is a significant burden.

↫ JEP 541: Deprecate the macOS/x64 Port for Removal

The port won’t yet be removed, but will be in a future release. Considering the number of Intel Macs that must surely still be in use today, this does seem a little premature to me.

10 REM”_(C2SLFF4 [OSnews]

That is the first line of the 80s microcomputer BASIC game The Wizard’s Castle initially written for the Exidy Sorcerer platform.

It’s a REMark statement, a comment in that particular language. 10 is the line number, if you’re unfamiliar with languages that had such things.

But the interesting part was this "_(C2SLFF4 mess. A typo or garbage? No. It appears verbatim in the source code as originally published in the July, 1980 issue of Recreational Computing.

What the heck is it?

↫ Brian “Beej” Hall

A fun investigation to brighten up your Monday.

12:14

Pluralistic: How the EU can punish Google (despite Trump) (27 Jul 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links

  • How the EU can punish Google (despite Trump): Grant me the courage to change the things I can.
  • Hey look at this: Delights to delectate.
  • Object permanence: Chilling Effects; Billy Bragg v Myspace; Glenn Beck calls murdered Norwegian children "Hitler Youth"; Photog sues Getty for $1b copyfraud; Best paid CEOs perform worst; Olympics v "Olympics"; Alberta tar sands v "hot lesbians"; IoT security apocalypse; 3 Little Pigs in pidgin; The nasty party; Copyright extortionist infringed fellow extortionist; Grandpa mobbed for photographing grandson in park; Ice Bucket Challenge didn't cure ALS; Twiddling enshittifies your brain.
  • Upcoming appearances: Edinburgh, Sydney, Melbourne, Brighton, London, South Bend.
  • 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 giant fist clutching the Android robot. The robot is orange and has Trump's hair. The fist extends from an EU-flag-blue cuff, and it is ringed with yellow EU flag stars. To the side is an old-timey western bar with a drunk, smoking, glaring Uncle Sam leaning on it. The background is a haunted, moonlit forest.

How the EU can punish Google (despite Trump) (permalink)

The "Serenity Prayer" (Serenity to accept things I can't change/Courage to change the things I can/Wisdom to know the difference) is usually cited as pop psychology or addiction recovery advice, but I think there's a place for it in policymaking.

Take the EU's fight against US Big Tech. During the Biden years, the EU's tech policy matured into something serious and ambitious, culminating in the Digital Markets Act (DMA) and Digital Services Act (DSA), a pair of big, muscular policies that would curb Big Tech's most abusive conduct. The EU's ambition didn't occur in a vacuum: it was part of a global wave of antitrust fervor whose top agenda item was reining in tech:

https://pluralistic.net/2025/06/28/mamdani/#trustbusting

In this fight, the EU had important partners all over the world. For example, South Korea and Japan used the facts uncovered through EU enforcement action against Google and Apple to pursue similar cases:

https://pluralistic.net/2024/04/10/an-injury-to-one/#is-an-injury-to-all

But the EU's most important partner in its fight against American Big Tech was America. Biden's trustbusters – Lina Khan, Rohit Chopra, Jonathan Kanter, Tim Wu, et al – were every bit as serious about Big Tech power as anyone in the EU. After all, the American public are always the first victims of any new tech scam, and America is the only country with a large, affluent population who lack modern, comprehensive consumer privacy protection, making Americans highly prized prey for tech companies:

https://pluralistic.net/2025/04/23/zuckerstreisand/#zdgaf

With America and the EU on the same side of the tech fight, the world had a fighting chance. Tech knew this, which is why Big Tech backed Trump hard during the 2024 election and aggressively curried his favor after he won. From the tech barons who paid $1m each to sit behind Trump on the inaugural dais to the millions tech companies donated to Trump's Epstein Ballroom at the White House, tech has made it clear that it supports anything Trump wants to do, provided he shields Big Tech from any attempt to limit their ability to spy on and steal from Americans and the world.

Even before he took office, Trump made it clear how he would reward tech's loyalty: weeks before the inauguration, Trump went to Davos and threatened the EU with reprisals if they enforced the DSA or DMA against his tech companies:

https://techcrunch.com/2025/01/23/trumps-not-happy-with-how-eu-regulators-have-treated-us-tech-giants/

Trump wasted no time leaning on US trading partners on behalf of Big Tech. He bullied Canadian PM Mark Carney into dropping his plan to tax US tech companies. Big Tech uses a variety of tax-cheating gambits to evade taxation around the world, making it impossible for (tax-paying) domestic companies to compete:

https://www.canada.ca/en/department-finance/news/2025/06/canada-rescinds-digital-services-tax-to-advance-broader-trade-negotiations-with-the-united-states.html

Trump also got UK PM Keir Starmer to drop his plan to tax tech:

https://www.theguardian.com/us-news/2025/apr/01/starmer-offered-big-us-tech-firms-tax-cuts-in-return-for-lower-trump-tariffs

And he got the EU to roll back its plan to regulate AI:

https://fortune.com/2025/11/07/eu-ai-act-weaken-regulation-delay-big-tech-trump-government/

None of the governments that caved to Trump got anything in return. As I've written:

Give Trump everything he asks for and he'll demand more. Deny Trump anything and he'll demand more. Sign a contract with Trump and he'll break it. Send Trump an invoice and he'll stiff you. For Trump, "the art of the deal" can be summed up in one word: renege.

https://pluralistic.net/2026/07/22/table-flipper/#graveyard-of-indispensable-nations

Case in point: after the EU surrendered to Trump on AI regulation, Trump announced that a on ban EU officials who had worked on the Digital Services Act from traveling to the USA:

https://www.state.gov/releases/office-of-the-spokesperson/2025/12/announcement-of-actions-to-combat-the-global-censorship-industrial-complex/

Then, after the EU made more concessions to Trump, he announced a ban on even more EU officials:

https://www.lawfaremedia.org/article/the-trump-administration-targets-europe-s-content-moderation-laws

Trump ordered his tech giants to dig through EU officials' private correspondence so he can figure out who to ban next:

https://www.politico.eu/article/us-congress-judiciary-committee-big-tech-private-communication-eu-officials/

Trump's tech companies got the memo. When the EU ordered Apple to follow the law, Apple told the EU to fuck off:

https://pluralistic.net/2024/02/06/spoil-the-bunch/#dma

After all, Apple is a key partner in the Trump administration's mass deportations. Apple blocked an iPhone app that warns Apple customers if they're about to be kidnapped or murdered by ICE. Trump needs Apple, just as much as Apple needs Trump:

https://pluralistic.net/2025/10/06/rogue-capitalism/#orphaned-syrian-refugees-need-not-apply

Despite this, the EU keeps trying to enforce its laws against Trump's companies. Last week, the Commission announced a $1b fine against Google for violating the Digital Services Act with conduct that cost Europeans many billions:

https://digital-markets-act.ec.europa.eu/commission-fines-google-eur890-million-breaches-digital-markets-act-2026-07-23_en

In other words, Google wasn't even being ordered to disgorge all the money it stole, just some of it. Remember, a fine is a price: the EU's fine here will only make this kind of cheating slightly less profitable.

Nevertheless, Trump responded immediately by threatening the EU with many billions more in tariffs if they continue to attempt to enforce the law against one of his companies:

https://www.lemonde.fr/en/international/article/2026/07/24/trump-says-eu-to-pay-very-big-price-for-890-million-google-fine_6755804_4.html

Trump, the European Commission and Google all know this is about more than one $1b fine. The DSA and DMA both provide for steeply rising fines and other penalties for repeat offenders, and Google clearly has no plan to end its very profitable European crime-spree. Trump's threats aren't a bid to kill this enforcement – Trump wants to kill all enforcement.

Retaliatory tariffs aren't the only weapon Trump has at his disposal. If the EU (or any other country) levies a serious fine against Google, Apple, Oracle, Microsoft, or any of Trump's other tech companies, Trump can order US banks not to turn over those fines, even after the EU sends them a court order for the money. If a bank defies Trump, he can threaten to yank its charter. Or he could just run the same swindle he pulled on Tiktok: stealing the whole company and selling it to one of his buddies, who will run it the way Trump wants.

The reality is that without America's assistance, the EU has precious little hope of forcing American companies to do things they don't want to do. In terms of the Serenity Prayer, this is "a thing they cannot change."

The Serenity Prayer doesn't stop with "things you can't change." The next line seeks "the courage to change the things I can." The EU has no control over Google's conduct, but it has total control over its own conduct.

Specifically, the EU could get rid of the laws that ban European companies from modifying US tech exports. The EU adopted the Copyright Directive in 2001. Article 6 of the EUCD makes it a crime to reverse-engineer and modify a device without the manufacturer's permission. This law was adopted under pressure from the US Trade Representative, who threatened the EU with tariffs on its exports unless it adopted an "anticircumvention rule" that banned EU technologists from making products that let Europeans prevent US tech companies from stealing their money and data":

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

This law is still in force in the EU, despite the fact that Trump (predictably) reneged on the US side of the bargain, hitting the EU with massive tariffs and even threatening to steal part of Denmark.

Article 6 of the Copyright Directive is the reason European tech companies can't jailbreak America's apps, whether that's to get its government and corporate data off of US platforms:

https://pluralistic.net/2025/10/15/freedom-of-movement/#data-dieselgate

Or to modify American social media apps to respect EU privacy laws:

https://pluralistic.net/2026/01/30/zucksauce/#gandersauce

The EU can't control what Apple or Google do. But the EU can absolutely decide whether Trump's companies can use Europe's courts to destroy European companies that defend the privacy and economic integrity of the European people.

If the EU kills off Article 6 of the Copyright Directive, they can use European companies to bring Google and Apple's defective tech exports into compliance with European law. Unlike Trump's companies, those companies can be forced to pay their taxes and respect their users' privacy, labor and consumer rights.

That's the Serenity Prayer's "wisdom to know the difference."


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 Chilling Effects https://web.archive.org/web/20010801172448/http://eon.law.harvard.edu/chill/

#25yrsago 13-year-old hacker's book deal: “The Unofficial Guide to Ethical Hacking" https://web.archive.org/web/20011102164905/http://www.vnunet.com/News/1124279

#20yrsago France’s new copyright law slaughters kills use and open source https://web.archive.org/web/20060812223624/http://soufron.typhon.net/spip.php?article150

#20yrsago Billy Bragg gets MySpace’s terms of service changed https://web.archive.org/web/20100809150257/http://blogs.myspace.com/index.cfm?fuseaction=blog.view&amp;friendID=34570397&amp;blogID=137856388&amp;MyToken=626131d4-c695-42ba-867b-754b9e2bfeaa

#15yrsago Buy an Old West town in South Dakota for $0.8M https://web.archive.org/web/20110728012824/https://edition.cnn.com/2011/US/07/27/south.dakota.town.sale/index.html

#15yrsago Glenn Beck compares murdered Norway campers to “Hitler Youth” https://www.latimes.com/archives/blogs/top-of-the-ticket/story/2011-07-25/opinion-glenn-beck-hits-new-low-compares-norway-victims-to-hitler-youth

#15yrsago 3 Little Pigs rendered into Papua New Guinea pidgin https://www.abc.net.au/reslib/200709/r184705_686227.mp3

#15yrsago Why they call the Tories “the nasty party” https://www.theguardian.com/uk/2011/jul/28/tory-lib-dems-clash-on-policy

#15yrsago US ISP/copyright deal: a one-sided private law for corporations, without public interest https://www.eff.org/deeplinks/2011/07/graduated-response-deal-what-if-users-had-been

#15yrsago Copyright extortionist ripped off his competitor’s threatening material https://torrentfreak.com/anti-piracy-lawyers-rip-off-work-from-competitor-110727/

#15yrsago Karl Schroeder: Science fiction versus structured study of the future, sf as aspiration https://www.antipope.org/charlie/blog-static/2011/07/beyond-prediction.html

#15yrsago Norwegian PM refuses to let terrorist attacks drive his country to intolerance and paranoid “security” https://www.nytimes.com/2011/07/28/world/europe/28norway.html?_r=1

#15yrsago Man with camera in park who fled angry parent sought by police (turns out he was taking pix of his grandson) https://web.archive.org/web/20110829052009/https://pixiq.com/article/man-photographing-grandkid-in-park-deemed-suspicious

#10yrsago Laurie Penny at the DNC: “Dissent will not be tolerated. Protest will not be permitted.” https://medium.com/welcome-to-the-scream-room/bad-moon-rising-8cd348df50e9#.9lhcixjn1

#10yrsago The Ice Bucket Challenge did not fund a breakthrough in ALS treatment https://web.archive.org/web/20160914225439/http://www.healthnewsreview.org/2016/07/ice-bucket-challenge-breakthrough-experts-pour-cold-water-superficial-reporting/

#10yrsago Silicon Valley banks offer tech giants’ new hires 100% mortgages on 24 hours’ notice https://web.archive.org/web/20160727095557/http://www.bloomberg.com/news/articles/2016-07-27/zero-down-on-a-2-million-house-is-no-problem-in-silicon-valley

#10yrsago Patent fighters attack the crown jewels of three of America’s worst patent trolls https://web.archive.org/web/20160727191625/https://arstechnica.com/tech-policy/2016/07/patent-defense-group-seeks-to-knock-out-top-three-trolls-of-2015/

#10yrsago Censorship company drops bogus lawsuit against researchers who outed them https://citizenlab.ca/research-interest/

#10yrsago Photographer sues Getty Images for $1B because they’re charging for pix she donated to LoC https://hyperallergic.com/photographer-files-1-billion-suit-against-getty-for-licensing-her-public-domain-images/

#10yrsago First-ever Michelin star for street food awarded to Singaporean hawker stalls https://web.archive.org/web/20160723174014/http://uk.reuters.com/article/us-singapore-food-hawkers-michelin-star-idUKKCN1021XA

#10yrsago Highest-paid CEOs generate lowest shareholder returns https://www.msci.com/documents/10199/91a7f92b-d4ba-4d29-ae5f-8022f9bb944d

#10yrsago Olympics to companies: mentioning “Olympics” in social media is a trademark violation #https://web.archive.org/web/20160727075209/https://www.espn.com/olympics/story/_/id/17120510/united-states-olympic-committee-battle-athletes-companies-sponsor-not-olympics

#10yrsago Pro-tar-sands activists say dirty Canadian oil is better because “lesbians are hot” https://www.joeydevilla.com/2016/07/26/this-ill-advised-hot-lesbians-ad-promoting-canadian-vs-saudi-oil-is-real-and-not-a-parody-by-the-onion/

#5yrsago The infosec apocalypse is nigh https://pluralistic.net/2021/07/27/gas-on-the-fire/#a-safe-place-for-dangerous-ideas

#1yrago How twiddling enshittifies your brain https://pluralistic.net/2025/07/28/twiddlehazard/#outboard-brains-considered-harmful


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: "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

Cognyte Sells a Mobile Cell Surveillance Van [Schneier on Security]

Yet another Israeli mass surveillance company:

Made by Israeli surveillance company Cognyte, the tech simulates a mobile phone tower, which forces nearby phones to connect to it. That enables cops to keep tabs on any phones in the vicinity ­ whether they’re owned by a suspect in a case or not. Cognyte’s contract with the state of Texas reveals that the simulator, called FalcoNet, can be concealed within the vehicles, hidden in a backpack for on-foot missions or attached to a helicopter. It’s the same technology as the infamous Stingray, one of the original cell-site simulators made by defense giant L3Harris.

10:28

Freexian Collaborators: Monthly report about Debian Long Term Support, June 2026 (by Thorsten Alteholz) [Planet Debian]

The Debian LTS Team, funded by [Freexian’s Debian LTS offering] (https://www.freexian.com/lts/debian/), is pleased to report its activities for June.

Activity summary

During the month of June, 20 contributors have been paid to work on Debian LTS (links to individual contributor reports are located below).

The team released 48 DLAs fixing 231 CVEs.

Debian 12 (“bookworm”) has been handed over to the LTS Team on June 11th. During this handover Sylvain helped to update relevant tools and documentation. If you benefit from Debian, especially during the full 5-year lifecycle, please consider subscribing as a sponsor of Debian LTS: https://www.freexian.com/lts/debian/.

Moreover, Debian 11 (“bullseye”) will reach the end of the Debian LTS period on August 31st. After that, Freexian will continue the security support under the Extended LTS offer.

The team published several notable updates:

  • haveged update (DLA-4616-1), prepared by Thorsten, to address local privilege escalation.
  • tomcat9 update (DLA-4619-1), prepared by Markus, to address, among others, an authentication bypass.
  • apache2 update (DLA-4620-1), prepared by Bastien, to address a HTTP/2 bomb.
  • apache2 update (DLA-4629-1), prepared by Bastien, to address, among others, remote code execution and privilege escalation.
  • libinput update (DLA-4626-1), prepared by Santiago, to address local privilege escalation and arbitrary code execution.
  • asterisk update (DLA-4631-1), prepared by Thorsten, to address, among others, wrong processing of invalid or untrusted certificates.
  • nginx update (DLA-4634-1), prepared by Charles, to address a remote code execution and denial of service.
  • firefox-esr update (DLA-4635-1), prepared by Emilio, to address dozens of CVEs, among other things, related to arbitrary code execution and privilege escalation.
  • thunderbird update (DLA-4636-1), prepared by Emilio, to address dozens of CVEs, among other things, related to arbitrary code execution.
  • chromium update (DLA-4654-1), prepared by Emilio, to address dozens of CVEs, among other things, related to arbitrary code execution.

Contributions from outside the LTS Team:

We are greatly thankful for the contributions from people outside the LTS Team:

  • Salvatore Bonaccorso prepared a libhttp-daemon-perl update, that was released by Santiago as DLA-4639-1.
  • Salvatore also directly uploaded libgd-perl DLA-4638-1 and libconfig-inifiles-perl DLA-4637-1.
  • Peter Palfrader prepared a tor update, that was released by Santiago as DLA-4656-1.
  • Pieter Lenaerts prepared a beets update, that was released by Emmanuel as DLA-4641-1.
  • Noah Meyerhans prepared a cloud-init update DLA-4645-1.

The LTS Team has also contributed with updates to the latest Debian releases:

  • Besides publishing DLA-4642-1 for package u-boot Andreas also prepared an NMU for an upload to sid and prepared a stable-proposed-update (SPU) bug for trixie, which was already acknowledged by a stable release manager (SRM).
  • Andreas also prepared an upload of package atril for trixie, which was handled by the security team as DSA-6349-1.
  • Besides publishing DLA-4620-1 for package apache Bastien also prepared an upload for trixie, which was handled by the security team as DSA-6323-1.
  • Tobi uploaded package mesa to trixie and bookworm.
  • Thorsten fixed some (not security related but RC) issues in package dahdi-linux. This was in preparation to fix lots of security issues in asterisk. Unfortunately the maintainer ignored the corresponding debdiff and prefered to upload a new upstream version. Anyway, the concerns of the security team about security support of asterisk could be overcome and asterisk can migrate to tesing and again be part of a Debian release.

Individual Debian LTS contributor reports

Thanks to our sponsors

Sponsors that joined recently are in bold.

10:21

Optimizing yourself into a corner [Seth's Blog]

Organizations thrive on incremental improvement. They find a stable foundation and then build a feedback loop of relentless improvement.

This leads to great efficiency, higher productivity and more profits. It enables more throughput and builds market share.

Except things change.

Optimized offerings are brittle. When the foundation shifts, all of that incremental improvement breaks into shards.

When the dust settles, the optimized alternative is almost always surpassed by the resilient one.

08:49

A Wolv In Creep's Clothing [Penny Arcade]

New Comic: A Wolv In Creep's Clothing

08:42

Iranian girls' school attack [Richard Stallman's Political Notes]

When a US missile hit an Iranian girls' school, the CIA at first said that the missile in the photos did not look like an American missile. A day later they corrected that and said it indeed was one. But he stuck to the appealing but impossible claim that Iran had fired it.

I'm pretty sure the US military did not choose to attack that building knowing it had been carved out of the adjoining naval base and converted into a school. Even a monster who cared nothing about killing Iranian civilians would have sought to avoid the bad publicity that would result. Meanwhile, the circumstances, including the pressure to attack fast, facilitated such mistakes.

The tendency for belligerent acts to cause unintended consequences due to ignorance of facts is called the "fog of war". It is inescapable: war implies mistakes with consequences, no matter how much one tries to avoid them. The implication of that is, one should try hard to choose a path other than war.

Juan Jairo Coronilla Durán [Richard Stallman's Political Notes]

Deportation thugs approached Juan Jairo Coronilla Durán, a Mexican tourist, and terrified him so much that he ran away into traffic and was killed by a truck.

Coronillo had a valid tourist visa, so if our legal system were functioning properly he should not have felt threatened by them. But our legal system has been messed up intentionally by magats to the point that no one can be confident of safety around them.

Europe extreme drought [Richard Stallman's Political Notes]

*Extreme heat supercharged by the climate crisis is sucking Europe dry in summer and intensifying the drought hitting the continent, a scientific analysis has found.*

Satellites launch pollutes atmosphere [Richard Stallman's Political Notes]

The greatly increased rate of launching satellites is polluting the upper atmosphere. Building datacenters in space would lead to much more pollution.

I can't believe that space datacenters could be cost-competitive with datacenters on Earth. I think the idea is not serious, and that oligarchs are using it as an excuse for manipulating stock prices, The idea doesn't need to be workable to achieve that purpose.

Bully's nuclear deal [Richard Stallman's Political Notes]

The bully's nuclear deal with Salafi Arabia makes a concession he was ready to fight to deny to Iran. His actions make no sense except as means to portray himself as "the winner".

Israeli Settler-Soldiers [Richard Stallman's Political Notes]

*Israeli Settler-Soldiers Took Me on a West Bank Tour Celebrating Evictions of Palestinians.*

New Geneva Convention [Richard Stallman's Political Notes]

(satire) *New Geneva Convention Allows Use Of Child Soldiers With Signed Permission Slip.*

US cyclosporiasis outbreak [Richard Stallman's Political Notes]

*[The saboteur in chief]'s deep public health cuts hinder response to record US cyclosporiasis outbreak. Experts say layoffs, reduced disease surveillance and Medicaid cuts have made the foodborne parasite more difficult to track and contain.*

Alexandria Ocasio-Cortex for president [Richard Stallman's Political Notes]

Calling on Alexandria Ocasio-Cortez to run for president.

I will support her campaign. But I will point out to her that the quandary of choosing between «latino» and «latina» is limited to Spanish. In English we already have a gender-neutral word to use: "Latin". (When a noun, its plural is "Latins".)

For Spanish, I have proposed a solution.

Israel blocks medical workers in Gaza [Richard Stallman's Political Notes]

*The Israeli government is blocking medical workers from entering or leaving Gaza, twice canceling the departure of seven U.S.-based physicians on a medical mission there, according to a group of doctors in Gaza who spoke to The Intercept.*

Federal science grants [Richard Stallman's Political Notes]

The saboteur in chief's proposed new system for federal science grants would allow grants to be canceled easily on many different "grounds", including political opinions and associations of the researchers, and even arbitrarily (saying "we're no longer interested in that research").

Even before any grant gets canceled, many large projects will become unfeasible because of the uncertainty that the new system imposes on a grant that has been imposed. And scientists will not trust the US government to carry a grant through. Some of the best will move to other countries which they can trust more.

Some, however, will be afraid to speak about political issues -- and that must be what the saboteur in chief aims for.

Reducing mosquito species [Richard Stallman's Political Notes]

A large experiment releasing bacteria-sterilized male mosquitos was very effective in reducing the population of that mosquito species.

Snoop-phones [Richard Stallman's Political Notes]

Snoop-phones are the last step in reducing children to physical isolation under control, so taking them away is just the first step in restoring their access to the world.

05:21

Girl Genius for Monday, July 27, 2026 [Girl Genius]

The Girl Genius comic for Monday, July 27, 2026 has been posted.

02:49

Overwhelmingly Negative [QC RSS v2]

banned in 40 countries and 11 orbital habitats

02:42

[1300] Talking to Yourself [Twokinds]

Comic for July 26, 2026

01:07

Sunday, 26 July

23:35

Kernel prepatch 7.2-rc5 [LWN.net]

The 7.2-rc5 kernel prepatch is out for testing. Linus said: "So it's a bit too big for my liking, but nothing in there strikes me as particularly strange or scary".

21:28

Link [Scripting News]

Many of the questions about RSS.chat center on how do we make this centralized. I don't want this, I want feed readers to add some features and then we can connect these systems together in a million different ways. They just have to think differently about subscription lists. Not radically different, even.

Confession: I still drive a Tesla. [Scripting News]

Wanted to switch but nothing I tried is as great a driving experience the Model Y is. Instead I've had a lot of fender benders and haven't gotten any of them fixed.

  1. Backed into a charging station.
  2. An act of terrorism (exaggerating) but I caused it, and paid for it, dented the well over right rear wheel.
  3. My right side mirror was pulled off its foundation hitting the side of the garage, used duck tape to keep it going. A new one costs $1000. I like the look.
  4. A deer ran in front of my car and took out the panel over the right front wheel. I was able to force the metal back in. A friend saw the car and said "hit a deer eh?" Yup.

I don't know if it accomplishes anything but to me it feels like retribution of a sort.

20:42

Post-political [Cory Doctorow's craphound.com]

The icy chamber at the center of Dante's hell, dominated by Satan, massive and peering around with his chin propped on his elbows, which rest of the ice-sheet. From the ceiling of the chamber dangles a massive, decapitated head, suspended by the hair. Beneath it is a pile of corpses in middle ages armor. On the opposite side of the chamber stands a suburban housing plot; another group of (living) soldiers in armor aim a giant catapult at it..

This week on my podcast, I read Post-political, a recent essay from my Pluralistic newsletter, about the material, irreconcilable differences between leftism and other political beliefs.

But when it comes to a “post-politics that is neither right nor left,” the definition I turn to most often comes from science fiction writer Steven Brust, who once told me:

“Left” and “right” have had the same meaning since the French Revolution. If you want to know if someone is on the left or the right, ask them, “What is more important: human rights or property rights?” If they say “Property rights are a human right,” then they are on the right.

That’s it. That’s the crux. If you think that property rights are a tool for achieving human rights, then you’re on the left. You might support the right of farmers to block attempts to expropriate them via eminent domain in order to build a data center, or the right of people to not have their homes or devices searched by cops, or a library’s right to own and archive digital books, even if the publishers insist that ebooks are never “sold,” merely “licensed.”

MP3

16:56

Link [Scripting News]

New docs for the browser JavaScript interface to the RSS.chat API.

15:21

Link [Scripting News]

Scott Hanson has a new service that connects RSS.chat to WordPress.

Link [Scripting News]

A note to people who run WordCamp conferences. Please, there should be a feed for each event, and as you ramp up to the big day, the news should flow faster. Help people find other people to network with. Get ideas out that aren't in the conference program.

rss.chat isn't really a product [Scripting News]

It's what we used to call a coral reef. A deliberate attempt to get people to do more than it does. To think about the web the way it was meant to be thought of, as small pieces loosely joined, with the emphasis on small. If you have formats and protocols that connect the pieces, you can make anything you want out of the pieces. If we don't try to capture our users, instead we try to serve them.

This all sounds nice in theory, I imagine, but -- there's a practical side to it. I wrote about this in a comment in a thread on rss.chat repo. The key point is this, you can do what you want with the data. And if you want to build new data that includes this stuff, go right ahead. RSS is extensible. It's all about working together in a web of people, because you can't have a web of pages if the developers aren't web'd.

14:35

Tamer: Enhancer 2 [Grrl Power]

I wrote another book!

Have a sequel! Wow, almost two years to the day since the first book. Well, still faster than some of the pros, eh? This book is a bit longer, at 210K words. The first book was right around 120K for comparison.

I wanted to do more with the cover, but I’m not going to hold the book hostage because I didn’t get a chance to hide Yxlyn on the cover yet. (Yeah, like 3 people noticed her on the other cover.)

Please let me know what you think! I’m amenable to all constructive feedback and abject praise. Feel free to leave comments here, but please be mindful of spoilers if you do. You can also email me at grrlpowercomic@gmail, which is also probably the best way to let me know about typos. I’ll eventually release updated versions once typo feedback slows and I’m sure most everything’s been found.

Download your format of choice here:

Here’s a quick link to Book 1 since I’m sure some people will ask.

Tamer: King of Dinosaurs is by Michael-Scott Earle. I’ve linked it several times in the past. The first book is free if you’ve never checked it out, but you don’t need to be familiar with Tamer to read my story. But it’s still free and it’s good… so… get it.

Obviously, “Tamer: King of Dinosaurs” is Michael-Scott Earle’s IP and my fan work is by a fan for fans, and certainly not intended to infringe in any way.


For those of you unsure of how to get a .mobi file onto your Kindle or Kindle app on your phone/ipad, the easiest way is to download it, then email it to your kindle email. You can find this on Amazon, under “Your Contents and Devices” you’ll see a list of books you’ve bought through Amazon. Click on “Devices” up at the top and you’ll see a list of kindles and phones etc that have the kindle app installed. Click on the box with the “…” next to each device and you’ll see an email address for it. Just email that address with the .mobi attachment.

Alternatively, I’m sure you could transfer it with dropbox or google drive or whatever poison you use.

December Vote Incentive Posted [Grrl Power]

This month’s vote incentive guest stars Lana of Spying with Lana. One of my own secret agents, Pixel, is trying to assist, with various levels of success and… nudity. Well, in the Patreon versions. The Vote Incentive will give you a pretty good idea of what might go down.

Check out Spying with Lana. Their current vote incentive features a certain gold-plated glamazon. Also it’s a funny comic with tons of skin.

November Vote Incentive Posted [Grrl Power]

I thought I would make a separate post for this.

The vote incentive is updated! I started drawing this and honestly had the thought that I might shelve it so I could use this for a plotline setup in the comic itself. The Vallejo Glamor, not the Nude version, obviously. And while I reserve the right to do it at some point in the future, the one thing I learned from drawing this is that those tiny bikinis take a lot more effort than you might think. Sure, in the comic, the art wouldn’t be nearly so fiddly and intricate, but Sydney’s “Coin Mail” is right out, and I can also foresee Maxima’s “Drizzled Metal” bikini just wildly morphing from page to page, not because it’s supposed to me like a clingy T-1000, but because I just think I remember how it looks and don’t bother checking and 5 pages later it looks suspiciously like Princess Leia’s slave bikini. 

Though I will say the TOS Star Trek cloudy pastel backgrounds are a little easier to draw than perspective correct interiors. 

Nude and textless versions over at Patreon.

Some more book recommendations [Grrl Power]

An Orc at College

I’ve recommended this Liam Lawson series before. I love me some good xenoanthropology, and my favorite thing about this series is the “fish out of water”/”Tarzan in New York” bits where the Orc main character has to figure out all the weird cultural stuff humans (and other races) do.

Well, Book 8 is out, Trorm’s family is coming to visit, and the xenoanthropology spills out onto the front lawn in the form of fistfights and flaming maces, much to the horror of the hand-wringing and probably slightly racist HOA. Mmm mmm! Good stuff!

.


Entangled Fates

A near future, proto-cyberpunk novel. As in, the main character is, through circumstances beyond his control, the first guy with a quantum linked AI in his brain. It’s kind of like he’s got “The Machine” from Person of Interest riding shotgun, only instead of being an enigmatic and vaguely creepy superintelligence, his machine decides it likes the human experience and adopts very anthropomorphic (feminine) qualities right off the bat. Corporations, governments, and organized crime antagonize, and eventually a bunch of ex-military female bodyguards are hired because they blend in better than burly dudes in suits and sunglasses. Yes, it’s a (slow burn) harem, obviously.

.

.


Savage Ascension

There’s a lot of stories like this one, i.e., displaced hero makes good and grows his household and gets his revenge, partially by living well, but mostly with head chopping. I’m recommending this one because from among the similar books I’ve read recently, I thought this one stood out. I immediately bought the second book when I finished the first, which is a pretty good gauge of a series I think. I have a lot of orphaned Book #1’s in my library. This one is like, Isekai-lite. Instead of being from another world, the MC is a “Savage” from the north, forcibly taken to the “civilized” city where he proves that being a skilled hunter is advantageous in slave arena battles. So, it’s kind of a bummer at first, but then he finds out that if he wins, he gets to pick a wife from an assembly of female combatants, and the ruling class here has a way to combat a blight of infertility sweeping the land, so the MC is like, “I guess I’ll pick up a wife or two before I get my revenge on everyone.” So, yeah. As books of this nature go, I thought it was one of the better ones.


The Lost Fleet: Dauntless by [Jack Campbell]

The Lost Fleet

This series is a little different from most of my recommendations. It’s more akin to the early Honor Harrington books, which I quite liked, for their technical fleet battles. (I’m as surprised as anyone I enjoy that stuff.)

The hook of this series is; Guy wakes up from 100 years in cryosleep to discover 1) The war he was fighting is still going on, 2) Everyone thinks he’s some mythical super-tactician cause he fought in a famous, desperate battle before jumping in his pod. 3) He kind of is, because now, after 100 years of constant war, so many people have died that advanced fleet tactics have been lost as the war chewed up all the old captains and admirals, and most warfare has devolved into “charge forward and hit them harder than they hit you.”

Something I like about this series is that it recognizes that space is stupidly huge, and when a ship that is 10 light minutes away from you does something, it takes ten minutes for you to know about it. Fleet battles held at .1 lightspeed still take hours and hours when fleets start off in distances measured in AU’s.

Some Book Recommendations [Grrl Power]

So I found some books that I really enjoyed, and I thought I’d make a separate post about them. It’s actually two series, both by the same author, Daniel Schinhofen.

The first thing I will tell you is, don’t worry about the covers. He’s kind of famous for having bad covers. The cover from Apocalypse Gates looks like a flat lit Doom 1 level.

Anyway.

The series I really liked is Binding Words, the first book of which is Morrigan’s Bidding. One of the things I liked about it was the book is very good at laying out the rules of the world the MC finds himself in. This might seem like a minor point, but the rules of this world are quite important, and some books don’t do a great job with set up. I will admit, I also like the fact that the MC is kind of OP, even though (and I don’t want to spoil anything) there’s not a lot of action in the first book. I’m sure some of you are like “How is he OP if he’s not kicking ass?” Ah, see? You gotta read it to find out.

One caveat – you guys know that I like the slice of life stuff, right? I mean, if you’ve been reading Grrl Power, you’ve probably figured that out. That said, by the time I got to the third book in Binding Words though, even I was like “I don’t really need to know what they eat for every single meal. It’s okay to skip ahead a few days.” But don’t let that dissuade you from checking out this series. I’m definitely snapping up the next book when it comes out.

After finishing all the released Binding Words books, I jumped straight over to a new series he’s working on called Aether’s Blessing. Or… the series is Aether’s Revival. Book 1 is Aether’s Blessing. It’s fairly different from Binding Words (though there is at least one common theme)

Some of you may be familiar with his other series, Apocalypse Gates and Alpha World. I have tried to read Alpha World on numerous occasions, and I can’t get into it. It’s not because the writing is bad, but I just cannot get into books that are set in video games. I just can’t bring myself to care about what happens, because no matter how it’s set up, whether it’s VR, or the character’s brain is trapped in the game or whatever, there just aren’t any stakes for me. If a horde of demi-liches are about to sweep the last bastion of humanity, I can’t help thinking, “Yeah, but what happens if some developer patches the game and now all the liches are covered in Mt. Dew branding like a NASCAR driver, or are accidentally flagged as neutral?” or “What if a janitor trips over the power cord to the server?” And also, what if the main character does defeat the horde of demi-liches? Do they just respawn the moment he turns his back so other players can take them on, thereby lowering the stakes even further? It’s a bad set up for a book. If an author wants to put game like stats in his novel, then just have the character wear some sort of contact lense that scans everyone’s strength levels, or make it a spell, or have aliens rip out everyone’s eyeballs and replace them with cyber eyes that give them special skills and make them duke it out on a planet full of dinosaurs. It’s just lazy writing IMO to make it a video game.

I’ll probably try again to read further into Alpha World, and maybe I’ll get to a point where I can ignore all the game stuff, because I really liked the two series I recommended above, but man, it’s tough. “Oh, he finally met a girl that’s probably going to be a love interest… but has he? Or has he met a lookup table with some clever dialog trees?”

Anyway. I liked his other books and maybe you will too.

Obligatory Covid-19 Post [Grrl Power]

Stay safe guys. I feel a little detached from all the disruption since I work from home, but I know this is a super weird time, and a lot of places have moved to quarantine in place protocols because humans are a bunch of dipshits that can’t figure out what 6′ of personal space means. A week ago I went to Chili’s to pick up a take out order, and there were 10 people milling around outside, and another 10 all bunched together in the little To Go closet they have. It took 90 minutes to get my food because apparently the management figured that since the city had told all restaurants in the city that dining in was not allowed for the foreseeable future, Chili’s management figured “Well I guess the amount of to go traffic won’t change and we shouldn’t staff up for some unpredictable rush.”

Ug. Hopefully everyone will start figuring it out soon, but you know what Einstein said; “Only two things are infinite, the universe and human stupidity, and I’m not sure about the former.”

My point is, be safe, and don’t contribute to the general level of dipshittery by being a dipshit. And don’t hoard toilet paper. I just can’t figure that one out. I mean, hand sanitizer, I kind of get, even though regular soap is perfectly fine, but the people hoarding TP are a bunch of assholes. There’s already reports of sewage systems getting fucked up because people have had to resort to using paper towels and those wet wipes for your butt that famously fuck up sewage systems. We’ve got a few rolls left in the house, but a month from now, I really don’t want to have to take a shower every time I pinch one off.

Tamer: Enhancer [Grrl Power]

I wrote a book!

It has nothing whatsoever to do with Grrl Power. It’s actually Tamer fanfic. Hopefully that’s obvious from the cover there.

I’ve never written a book before, so I decided to see if I could. I’ve dabbled in prose before, like a lot of you, I’m sure, but never actually finished anything. I figured that using an established universe would make the process a bit easier. Actually I found writing quite enjoyable, editing is the hard part.

Please let me know what you think! Pacing, wordsmithing, characters, all that good stuff. I’m amenable to all constructive feedback. Feel free to leave comments here, but please be mindful of spoilers if you do. You can also email me at grrlpowercomic@gmail.

FYI – There are sex scenes in the book (spoilers, I guess.) Not a lot, but they don’t fade to black. Well, some are more terse than others. I would describe them as explicit, but not gratuitous, but those are obviously relative terms. If you’ve survived MSE sex scenes you’ll be fine.

Tamer: King of Dinosaurs is by Michael-Scott Earle. I’ve linked it several times in the past. The first book is free if you’ve never checked it out, but you don’t need to be familiar with Tamer to read my story.

Obviously, “Tamer: King of Dinosaurs” is Michael-Scott Earle’s IP and my fan work is by a fan for fans, and certainly not intended to infringe in any way.

Download the format of your choice here.

  • 02/03/2020 – The book’s been updated with a ton of edits and fixes.
  • 02/16/2020 – Even more fixes.

Book 2 is out! Check it out here!


For those of you unsure of how to get a .mobi file onto your Kindle or Kindle app on your phone/ipad, the easiest way is to download it, then email it to your kindle email. You can find this on Amazon, under “Your Contents and Devices” you’ll see a list of books you’ve bought through Amazon. Click on “Devices” up at the top and you’ll see a list of kindles and phones etc that have the kindle app installed. Click on the box with the “…” next to each device and you’ll see an email address for it. Just email that address with the .mobi attachment.

Alternatively, I’m sure you could transfer it with dropbox or google drive or whatever poison you use.

Avengers: Endgame Talk [Grrl Power]

Well, I finally got around to seeing Avengers: Endgame, and I figured everyone could use a place to talk about it without worrying about spoiling the movie for other people. So be aware, anything in the comments of this post is probably a spoiler of some kind.

Seriously, don’t click into the comments if you haven’t seen it yet.

Book recommendation…ish – Three Square Meals [Grrl Power]

So, while waiting for Amazon to sort it’s shit out with Michael-Scott Earle, and we can finally get some new Star Justice and Tamer books, I’ve continued reading a bunch of other novels, and I came across one I really like. I’ve been kind of sheepish about recommending it because… well, it’s “erotica.” At least that’s the category it’s listed under at Amazon, but quite frankly, calling it erotica is underselling it a bit. There’s a lot of sex in this book. Like, a lot. So if that doesn’t interest you, you’re just not going to enjoy it. You’d be skimming through… quite a bit of text to get to the rest of the story.

Unlike a lot of other harem novels, however, the sex actually factors heavily into the actual plot. Yes, it’s almost like the author came up with a reason for the characters to have a lot of sex, beyond them being horny for the usual reasons, and then wrote a story about it.

If the sex doesn’t turn you off, or, if in fact you don’t mind some sex (or a lot) in your harem books, there’s a shockingly good space opera to be had here. I would actually put it on par with Star Justice, which is something I never thought I’d say, as it’s one of my favorite series of all time. Another thing I like about Three Square Meals is that there’s a lot of it. The story is over 2 million words long and counting. By the time you get through the first three books, the overarching plot is only barely starting to reveal itself. What can I say? I enjoy it when there’s a lot of something I enjoy. In a shorter story, you get to see the characters interact with one group or another, but then that’s usually it. In this longer format, you get to revisit those groups and see the sometimes empire shifting consequences of their interactions with the MCs. Plus, IMO, the story keeps getting stronger as the cast expands and the momentum of the story builds.

Another thing I like about the story is that it does OP right. The main character, (and the women in the harem) get really powerful. (Something I like in my harem novels is when the women are really awesome too, go figure.) The story keeps escalating so that they have significant challenges, but importantly, there are a lot of great scenes where the MCs have awesome moments of OP-ness* and are able to wow their allies, and/or crush their enemies, and see them driven before them, etc. That balance is important IMO, and a lot of books don’t get it right.

So here are some links;

  • The first 4 books are available on Amazon.
  • Nearly the entirety of the story is available on Literotica. There’s a bit of a delay for the most recent chapters. If you’re unsure about diving in, you can start here, then if you like it, you can support the author at Amazon or his Patreon. The Kindle versions have had an additional editing pass, with some extra scenes thrown in for good measure.
  • And the author has a Patreon, if you get caught up with all 2 million+ words and can’t wait for the next chapter to come out on Literotica.

*Hur hur, I said penis.

Whoops! [Grrl Power]

Okay, so obviously the site is broken at the moment. I tried to update the page to be HTTPS compliant and for some reason that jacked up the CSS, sooooo, yeah. I’m working on it. Part of trying to fix it involved rolling back the database a bit which might have nixed a few hours of comments. Sorry about that if something you posted got lost.

Thanks for your patience.

10:49

The Lego problem, revisited [Seth's Blog]

For generations, the rules of Lego were simple: many pieces, all able to connect in many ways, led to many outcomes.

That almost drove the company into bankruptcy, though.

Lego kits saved the business. Each kit has just one way to do the work, follow the instructions carefully. Industrial indoctrination in a box.

While it made Lego plenty of money, it didn’t create a generation of creative thinkers. And following instructions is what most organizations want.

Now that robots and AI are here to follow instructions, though, we might need people who can draw plans, not simply follow them.

06:21

Deforestation is spreading screwworm [Richard Stallman's Political Notes]

Cutting down the Amazon forest for raising cattle has massively spread screwworm, as well as perhaps dooming what remains of the forest.

Italian thugs killed immigrant Abderrahim Fakir [Richard Stallman's Political Notes]

Italian thugs killed immigrant Abderrahim Fakir in the process of "restraining" him after he became somehow upset.

This has stimulated large protests, to which right-wing hate leaders respond by saying it is unthinkable to doubt the rightness of the thugs' actions.

Chatbots fail to understand the Hungarian election [Richard Stallman's Political Notes]

Globally well-known chatbots displayed a drastic failure to understand the parties running in the Hungarian election.

Given that ChatGPT hid the main opposition to Orbán, I have to worry that this was intentionally set up to help reelect him.

Young people are giving up on human relationships [Richard Stallman's Political Notes]

Many young people are giving up hope on close relationships with other people and turning to chatbots for an imitation or substitute.

Deportation thugs adopted dress code [Richard Stallman's Political Notes]

The deportation thugs have adopted a dress code and require wearing of badges.

This is a change for the better, but can't overcome what's wrong with the mission they have been directed to carry out.

Putin and Musk plans to destabilize Britain [Richard Stallman's Political Notes]

Putin and Musk are organizing to destabilize Britain by supporting the right-wing extra-extremist politician, Yaxley-Lenin.

I can suggest one possible countermeasure: prohibit antisocial media platforms from operating a recommendation engine. Ex-Twitter would have less power without that, and so would Tiktok and others.

04:07

Russ Allbery: Review: Radiant Star [Planet Debian]

Review: Radiant Star, by Ann Leckie

Publisher: Orbit
Copyright: May 2026
ISBN: 0-316-29068-8
Format: Kindle
Pages: 359

Radiant Star is a science fiction novel set in the Imperial Radch universe without being a direct sequel to the other books in that universe. It will badly spoil the end of Ancillary Mercy, and I recommend reading that trilogy first, but it's independent of the other books in the same universe.

In the 3,008th year after the manifestation of the Radiant Star (the 1,024th since the founding of the Consorority itself), Zaved, a newly minted consoror, disappeared a mere two days after the ceremony that elevated her to womanhood. She left a note that read, Bored. Back whenever. This was not normal or even remotely acceptable behavior in a consoror, particularly one who held as much promise as Zaved had, but what could the consorors do?

Zaved, faced with the unpleasant prospect of running out of money during her galactic tour, plied a rich benefactor with tales of how talented, polite, and obedient the boys of the Consorority are. Her plan worked brilliantly. After funding further non-boring adventures, she arrived home in Ooioiaa with a chest full of money and a pregnancy. Great for Zaved and the Consorority; kind of a shame for her son Jonr, who is to be delivered to her benefactor after proper training. Oh well, telling Jonr about that is a problem for future Zaved.

After a strained childhood in which he convinces himself he is a misfit with few redeeming qualities, Jonr ends up in a suspension pod. Before shipping can be arranged, however, external events intervene, leaving Jonr sitting unnoticed in a warehouse.

The planet of Aaa is in a highly inconvenient location, drifting as it does through interstellar space unattached to any star. It would be as irrelevant and overlooked as any other random interstellar object except for two critical properties. The first is that Aaa and its sole city of Ooioiaa are sacred to a religion of obscure origin. Its primary population are members of a religious cult who believe the Radiant Star manifested in the Temporal Location on Ooioiaa and will eventually return to bring light to the galaxy. The second interesting property of Aaa is that it is drifting ever so slowly towards a strategic system of military importance.

The first property brings pilgrims and their accompanying bounty of money, food, and other resources necessary to dig a small city out of rock, make it habitable, and supplement the sparse and strange native edible life. The second property brings the Radchaai, who easily conquer the city of Ooioiaa and are now faced with the unpleasant task of running it.

Some decades after the Radchaai conquest, having never left Aaa, Jonr is woken up. He will not be sent off into the broader galaxy as a slave to pay off a vacation debt. Instead, he will be one of the many protagonists in this novel about the perils of living through supply chain disruptions on a planet full of status-obsessed religious fanatics who would drown in a rain shower.

The other books set in this universe make abundantly clear that the Radch is a voracious colonial power that enslaves native populations and enforces their own cultural preferences at the point of a gun. A reader familiar with this series is predisposed to take whatever side is not the Radch.

Radiant Star adds a complication, however. Charak Svo, the Radchaai governor, is impatient with native inhabitants and strongly dislikes their religion, but she is reasonably competent. The religious factions that ran Ooioiaa before the arrival of the Radchaai, on the other hand, are dogmatic authoritarians with the collective wisdom of a sack of turnips. Charak does not get everything right and is arguably responsible for at least one catastrophe. By the end of the book, though, I was firmly convinced that had the original religious government still been in charge, everyone would have died.

I found the structure of this book a little odd. The omniscient narrator tells the story in the form of a history. The target audience appears to be future inhabitants of Ooioiaa and adherents to the Radiant Star religion, and the narrator is often maddeningly uninterested in topics that a reader of the rest of the Imperial Radch books is intensely curious about. This same property carries through to the plot: I was interested in how all of the tensions in this obviously absurd society could be resolved or, preferably, overturned entirely. The narrator, on the other hand, is far more interested in Serque Tais's intent to become the last saint in the Temporal Location, and in the details of the subsequent political, economic, and religious fallout.

Leckie has written three novels set in the Imperial Radch after the original trilogy: Provenance, Translation State, and now Radiant Star. I am sure that I'm not the only person who wants a direct continuation of the original trilogy, but I'm drawing the conclusion that Leckie doesn't want to write that. Instead, she's writing around the edges of the subsequent events, in effect showing readers the shape of them and their broader implications without showing the details.

Now that I can see what she's doing, I kind of like it. Given what we now know from the books written around the edges, the ensuing events in the center of galactic politics are chaotic in a way that could easily devolve into tedious accounts of messy conflicts. Seeing the effects from afar lets the reader fill in some of the blanks and speculate, and it makes the moments where we get a concrete update (such as at the end of this book) all the more rewarding. I still find it odd, though, to read a book where the narrator's interests so sharply diverge from mine.

I wish I could say that Radiant Star sucked me in as the story developed, but it never did. Part of the problem is that I think this book is intended as a very dry farce, and farce often doesn't work with my reading style. I prefer to attach myself to a protagonist and hope they do competent things, and this book is full of characters who are being themselves far too aggressively and loudly to have time to be competent at anything. My favorite moments were therefore the small pockets of people with sense: The governor, Jonr, his charge, and the delightfully strange Justice of Albis. I enjoyed all of them, but I had trouble caring about the overall plot and kept putting this book down for days between chapters.

I think this is mostly personal taste, though. Like all of Leckie's novels since the original Imperial Radch trilogy, Radiant Star is competently executed and a little strange. When that strangeness aligns with your tastes, it's a great deal of fun and rather unlike other science fiction novels. In this case, it didn't quite work for me, but I suspect it will for others.

I still want another Leckie novel with a ship as a protagonist, though.

Content notes: Rather disturbing (although bloodless) religious practices, mass death.

Rating: 6 out of 10

00:21

A Debian general resolution on LLM usage [LWN.net]

The Debian project is considering a general resolution on the use of large language models in the creation of the distribution. There are three alternatives to consider: a total ban on LLM usage, rejecting LLMs "as far as practical", or explicitly allowing LLM usage subject to a set of conditions. The discussion period has just begun; the beginning of the voting period does not yet appear to have been set. Those who want to look over the discussion ahead of the inevitable LWN article can find it over here.

Saturday, 25 July

22:42

Dirk Eddelbuettel: RcppArmadillo 15.4.2-1 on CRAN: Small Upstream Fixes [Planet Debian]

armadillo image

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

This versions updates to the 15.4.2 upstream Armadillo release made this week, as well as to included 15.4.1 version we released only to GitHub and r-universe so do not exceed the (roughly) monthly cadence. For this release, we had run the usual complete reverse-dependency check which came back spotless, and did CRAN so no email exchange needed despite nearly 1300 reverse dependencies. Automation can be helpful when used with a well-maintained software stack. The package has also already been updated for Debian, built for r2u, and will build shortly at CRAN for the different binary releases.

All changes since the last CRAN release follow.

Changes in RcppArmadillo version 15.4.2-1 (2026-07-25)

  • Upgraded to Armadillo release 15.4.2 (Medium Roast Agave)

    • Fix speed regressions in diagvec() and diagmat()

Changes in RcppArmadillo version 15.4.1-1 [github-only] (2026-07-09)

  • Upgraded to Armadillo release 15.4.1 (Medium Roast Agave)

    • Fix for rare infinite recursion bug in sparse version of diagmat()

    • More efficient checks for aliasing

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

This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can sponsor me at GitHub.

16:21

I’m Taking the Weekend Off So Please Enjoy This Picture of Saja in the Meantime [Whatever]

And look! He’s a mlem going! Truly, a quality cat photo.

Have a great weekend, y’all. See you back here on Monday.

— JS

16:07

In remembrance of Dan Williams [LWN.net]

On July 21, the kernel community lost Dan Williams, one of its most beloved contributors. Dave Hansen and Thomas Gleixner, both of whom worked with Williams extensively, have written an obituary and allowed LWN to publish it. He will be deeply missed, but he has left us with a lot to remember him by.

15:49

Link [Scripting News]

Example code is not expected to be bullet proof like production code, and where covering different cases make it harder to follow they should not be there.

RSS.chat has an API [Scripting News]

It's a standard REST API.

Here's the server side of the API.

Here's how you call it from browser-based JavaScript. You can include that code in your apps.

Here's an example app that implements a simple blog builder for my recent posts on RSS.chat. We were thinking about doing this as a project for Claude and myself but decided it would be more fun to let devs see what they can do here. :-)

And finally here are the docs for the API itself.

15:21

Security updates for Saturday [LWN.net]

Security updates have been issued by AlmaLinux (compat-openssl11, java-1.8.0-openjdk, java-17-openjdk, kernel, kernel-rt, and sssd), Debian (exim4), Fedora (chromium, dotnet10.0, mbedtls, mupdf, netatalk, python-django5, skopeo, sssd, and wget1), Mageia (libevent and transmission), Oracle (.NET 8.0, 389-ds-base, aardvark-dns, acl, buildah, cifs-utils, dovecot, dracut, galera and mariadb11.8, glibc, hplip, kernel, libxml2, nginx, openexr, podman, postgresql18, rsync, thunderbird, and vim), and SUSE (389-ds, afterburn, agama, alsa, apache-commons-compress, apache-ivy, brotli-java, zstd-jni, avahi, aws-nitro-enclaves-cli, cockpit, cockpit-machines, cockpit-packages, cockpit- podman, cockpit-repos, cockpit-subscriptions, container-suseconnect, containerd, cosign, cryptsetup, curl, dash, dnsmasq, docker, docker-compose, ffmpeg, firefox, freetype2, gawk, gh, glib-networking, glib2, go1.25, go1.25-openssl, go1.26, go1.26-openssl, google-guest-agent, google-osconfig-agent, gpg2, gsasl, gstreamer-plugins-bad, gzip, haproxy, hauler, helm, helm3, ImageMagick, imagemagick, iproute2, java-11-openjdk, java-26-openjdk, jline3, joe, jq, kernel, kernel-devel, krb5, kubevirt, libgcrypt, libpng12, libqt4, libssh2_org, libXfont2, libxml2, mariadb-connector-c, microcode_ctl, multipath-tools, nasm, net-tools, nghttp2, nmap, ntfs-3g_ntfsprogs, openexr, packagekit, pam, patch, perl, perl-DBI, perl-dbi, perl-http-date, perl-libwww-perl, perl-xml-bare, php8, prometheus-ha_cluster_exporter, python-aiohttp, python-cryptography, python-dulwich, python-idna, python-maturin, python-mistune, python-msgpack, python-paramiko, python-Pillow, python-pyasn1, python-soupsieve, python-sqlparse, python-tornado, python-tornado6, python-urllib3, python313, python313-pandas, python314, qemu, radvd, rootlesskit, rpcbind, ruby3.4, runc, s390-tools, shibboleth-sp, sssd, systemd, systemd, systemd-mini, terraform-provider-aws, terraform-provider-azurerm, terraform-provider-external, terraform-provider-google, terraform-provider-helm, terraform-provider-kubernetes, terraform-provid, terraform-provider-susepubliccloud, tiff, tomcat, tomcat10, tomcat11, uriparser, vim, vorbis-tools, wget, wpa_supplicant, xwayland, and yelp).

GNU C Library 2.44 released [LWN.net]

Version 2.44 of the GNU C Library has been released. Changes include a new /etc/tunables.conf file for the system-wide setting of tunable parameters, a new tunable to control the use of transparent huge pages for read-only executable segments, a number of math-function improvements, a handful of security fixes, and more.

14:35

New stable kernel for ext4 users [LWN.net]

Greg Kroah-Hartman has released the 6.12.98 stable Linux kernel with a single fix for a file descriptor leak in ext4. Users of the ext4 filesystem should upgrade.

14:14

Link [Scripting News]

How can you tell you’re working on the web? When you do something new and innovative you help your competitors‘ users without forcing them to use your product. They are free to stay where they are and still get the benefit. People choose your product because it’s better for what they’re doing, or it feels better now, or whatever. We want the web to be the platform and it's cool because there is no platform vendor.

12:14

Pluralistic: Apple's robo-repo (25 Jul 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



A 19th century engraving of a family being evicted from their tenement. The family stands, miserable, on the sidewalk, watched over by cops and their curious neighbors, as baliffs carry their worldly goods out of their former home. The image has been altered. It has been tinted sepia. The Apple 'Think Different' wordmark has been matted into the top of the scene. The trunk the baliffs are carrying has been replaced with a blocky Mac SE/30.

Apple's robo-repo (permalink)

It may strike you as weird, but lenders love to lend money to poor people who will have trouble paying back their loans. Obviously, lenders want to be repaid, and obviously the more money you have, the easier it is to settle your debts, but (paradoxically) that means that if you have a lot of money, you expect to pay less to borrow.

In other words: because poor people have a higher likelihood of defaulting, their loans come with higher interest rates and worse terms. Debt is steeply regressive: the less money you have, the more you're expected to pay. The industry term for this is the "risk premium": the riskier a loan is, the more it costs the borrower.

Lenders are always seeking the highest possible return on their loan-books, which makes that "risk premium" awfully tempting. Why loan $1m to Elon Musk at 0.5% interest when you can make 10,000 $100 payday loans to non-union Tesla workers on food stamps at 1,000% interest?

Obviously, the fly in the ointment here is the risk in "risk premium." The reason the risk premium exists is that poor borrowers have a harder time paying their loans. That can be good, up to a point: if you're Klarna and you're originating loans to people Chipotle lunches on the installment plan, you want your borrowers to miss several payments. Klarna loans are free if you pay them back on time, but if you miss a payment, you're hit with a huge penalty charge and sky-high interest (on top of the principal and the penalty). On a small purchase, penalties and interest can quickly add up to a triple-digit APR.

That's where Klarna makes its money: people who miss their burrito installment payments. However: if a Klarna borrower goes bankrupt before they've repaid the principal, Klarna loses money. A successful loan-book of unsecured burrito mortgages depends on the existence of many missed payments and few defaults.

"Financial innovation" is often just a project to decrease the risk in risky loans, but without decreasing the risk premium you get paid for issuing those loans. It's a way to eat your cake and have it too: even though you've reduced the likelihood that you'll have to write off your loan, you still charge the borrower as though that risk is unchanged. As with so many aspect of finance, "innovation in lending" is a way to shift value from the financial industry's customers to itself.

Remember the subprime crisis? The whole point of collateralized debt obligations and swaps was to offer loans to people with bad credit – even loans they obviously couldn't pay back – without incurring a default risk. Subprime mortgages supercharged the practice of loan origination and resale (where a bank offers you a loan and then sells that loan to someone else, so your default becomes their problem) by splitting the loans into pieces. These pieces were recombined according to complex mathematical formulas that supposedly "proved" that the default risk from poor borrowers had been "offset" by combining them with other borrowers' loans and wrapping them in opaque insurance contracts.

Those subprime mortgages came with cheap "teaser rates" – the interest rate you paid over the first couple years – but then the interest payments "ballooned" to farcical sums that borrowers had no hope of repaying. Those farcical sums were the risk premium. When financiers transmuted these high-risk 30-year mortgages into complex derivatives, they were effectively promising their customers a piece of that risk premium for 28 out of the 30 years that the mortgage ran for.

But it wasn't all financial engineering: subprime mortgage salesmen could also promise customers that they wouldn't lose everything even after a wave of borrower bankruptcies and defaults. That's because mortgages are secured: they are backed by deeds for the homes the borrowers own(ed). If a borrower goes bust, the lender can repossess their house or apartment and sell it to recover the loan amount.

Now, the finance sector did repossess a fuckton of houses after the crash. Foreclosure and eviction became official policy: Treasury Secretary Timothy Geithner told Obama that a wave of foreclosures was necessary to "foam the runways" for the banks, so Obama encouraged banks to foreclose on their loans, rather than restructuring them so that Americans could keep their homes:

https://wallstreetonparade.com/2012/08/how-treasury-secretary-geithner-foamed-the-runways-with-childrens-shattered-lives/

But even with these foreclosures, lenders and their customers lost hundreds of billions on the subprime crisis. That's because all that subprime lending pushed the price of houses up and up and up, so when the market collapsed, those mortgages were "underwater" – the money from selling the foreclosed homes didn't cover their outstanding loans.

Collateralization – backing loans with legally binding promises to surrender some asset if you default – is a way to reduce risk, but it can't eliminate it. Assets degrade: houses burn, cars get totaled, jewelry is stolen. Assets also devalue: a loan backed by bitcoin at $111,000 on the eve of Trump's election will be underwater today with bitcoin at $64,000. This devaluation can also occur when your house's value plummets because Elon Musk repeatedly bombs your neighborhood with flaming rocket debris, or when your Tesla's resale value collapses after Musk throws a string of Seig Heils on national television.

The point being that risk mitigation is never risk elimination, but markets have a hard time distinguishing between the two. Partly that's because of risk shifting. A lender who can "securitize" their loans (turn them into bonds and sell them off to investors) can insulate themselves from risk, because the people who buy the bonds are now carrying that risk.

So many of our crises come from the intersection of these two phenomena: the promise of reducing loan risks without losing the risk premium and the fact that risk reduction can fail suddenly (or be revealed as nothing more than risk-shifting). The first phenomenon creates vast credit bubbles, the second one pops them.

This leaves would-be usurers on an endless quest for new ways to lend money at a premium to poor people while reducing their own risk. You don't need technology to do this – all you need is a captive audience of broke people whom other lenders won't touch.

When the US government adopted the racist practice of "redlining" (denying government-backed loans to Black borrowers), they created a market for predatory pseudo-mortgages called "contract buying." Contract buying is like a mortgage, but without the equity: miss a payment and you get evicted, and you aren't entitled to any of the sale price of the house, even if it was 99.99% paid off when you got kicked out.

Lenders can tip the scales in their favor by making up arbitrary junk fees, and a smart lender waits until the house is almost paid off before whacking the borrower with a ton of these fees. The borrower misses a payment, the seller repossesses the house and sells it again:

https://ippsr.msu.edu/public-policy/michigan-wonk-blog/re-emergence-contract-buying-practice-rooted-mid-20th-century

Contract lending never went away. Wherever you find a desperate, disfavored group who are locked out of the credit system, you'll find scumbag contract lenders running this scam. Take long-haul truckers, among the most exploited workforce in America. Long before Uber made worker misclassification (treating an employee as an independent contractor) mainstream, the trucking industry was effectively indenturing truckers, exerting more control over their lives than a boss could ever impose on a waged worker, while disclaiming any employer-related responsibilities. Truckers don't get health insurance or sick leave – and they don't get paid if they have to sit at a port for 20 hours waiting to pick up a load.

But the exploitation of truckers doesn't stop with mere wage theft. Truckers also "contract buy" their trucks. Their bosses issue loans that let drivers buy their trucks on terms that allow the company to repo the truck after a single missed payment. And of course, bosses have total control over truckers' wages, so a canny boss can wait until a truck is nearly paid off and then stop the driver's wages, forcing them to miss a payment and lose their truck, which can be sold on to the next victim:

https://web.archive.org/web/20170616120011/https://www.usatoday.com/pages/interactives/news/rigged-forced-into-debt-worked-past-exhaustion-left-with-nothing/

Subprime auto-loans bring this same profitable arrangement to regular drivers who just need a car to commute, pick up groceries, and shuttle the kids to and from school. A subprime auto-loan often contains the "teaser" and "balloon" rates at the heart of the subprime mortgage bubble: for the first year or two, your car payments are affordable, but then they shoot up to a sum that you can't possibly pay. The lender then repossesses your car, zeroing out your equity, and sells it to another victim:

https://www.youtube.com/watch?v=4U2eDJnwz_s

But the subprime car industry puts a decidedly modern spin on the contract lending scam that has been used to profitably rob so many Black home borrowers and long-haul truckers. Subprime lending's risk-reduction relies on repossession. A subprime car lender doesn't just get rich by charging poor borrowers more money that rich borrowers for shittier, older cars. Subprime car dealers repeatedly "sell" that car to many, many poor people, on conditions that all but guarantee that the borrower will default on their loan and lose their car.

This is where tech comes in. Ubiquitous digital networks and computing make it much easier to repo a car. This started with the humble lo-jack, a simple tracker marketed as a way to locate lost or stolen cars. Subprime auto-lenders were early and aggressive lo-jack adopters, because you can't repo a car if you don't know where it is. Installing a lo-jack is much cheaper than paying repo men to drive around looking for the cars you want to claw back, which means that you can sell cars to people who represent worse credit risks, charging a higher risk premium, and still find the car when those high interest rates force your borrower into default.

The next wave of automotive usury-tech was a kind of systematic exploration of the entire space between a car that is repossessed and a car that isn't. Some subprime cars are fitted with an extra stereo system that can only be controlled by the lender over a wireless connection. Miss a payment and this secondary stereo turns itself on and starts playing earsplitting threats about what will happen to you if you don't pay up. The only way to turn it off is to make the payment. The next step is remote immobilization: miss too many payments (or violate a lease clause by crossing the county line) and your car just stops working:

https://archive.nytimes.com/dealbook.nytimes.com/2014/09/24/miss-a-payment-good-luck-moving-that-car/

But the apex of this usury-tech comes from (where else?) Tesla. Miss a Tesla payment and your car can do way more than just immobilize itself and tell the dealer where to get the car – it also unlock its doors, flash its lights, honk its horn, and back out of its parking space when the repo man arrives:

https://tiremeetsroad.com/2021/03/18/tesla-allegedly-remotely-unlocks-model-3-owners-car-uses-smart-summon-to-help-repo-agent/

The cheaper the repo, the riskier the loan can be; the riskier the loan, the higher the risk premium. Digital tech makes repo much cheaper, so wherever you find digital tech, you find digital arm-breakers coming up with ways to robo-repo the things you buy.

There's India's subprime phone lenders, who pre-install usury-tech on their phones. This is a tool that spies on the phone's owner, building a dossier of the owner's most frequently used apps. When the owner misses a payment, the phone starts disabling the user's favorite apps, working its way up the list to the most indispensable ones:

https://pluralistic.net/2021/04/02/innovation-unlocks-markets/#digital-arm-breakers

It's the digital version of the mob loan-shark who breaks a finger, then your hand, then your arm. The more graduated the threat matrix is, the more payments you can capture. A borrower with a broken finger can get to a pawn-broker to sell their wedding-ring; a borrower with two broken legs has a much harder time.

Digital arm-breakers aren't an epiphenomenon of digitization alone. Usury tech only works if the device's owner can't disable it. Remember: a computer is flexible. The only computer we know how to make is the "Turing-complete, universal von Neumann machine," defined as a device that can compute every valid program. If your phone is running a program that disables your apps, then you can install another program that disables that program. Same goes for your car's lo-jack; the stereo system emitting ear-splitting complaints about your car note; and the immobilizer hooked up to your ignition.

That's where the law comes in. In 1998, Bill Clinton signed the Digital Millennium Copyright Act (DMCA). Section 1201 of the DMCA makes it a felony to produce a tool that bypasses an "access control." That means that if a computer is designed to block you from modifying it, removing that block is a felony, punishable by five years in prison and a $500k fine. DMCA 1201 doesn't distinguish between modifications undertaken for a lawful purpose (changing your printer so it works with generic ink) and unlawful purpose (breaking the locks on a DVD so you can sell infringing copies). DMCA 1201 criminalizes anything the manufacturer dislikes. It's what Jay Freeman calls "felony contempt of business model."

DMCA 1201 is the reason you can't neutralize the digital arm-breakers by deleting or blocking the usury-tech in your car, phone or other device:

https://pluralistic.net/2023/07/24/rent-to-pwn/#kitt-is-a-demon

Here's where it gets interesting. Apologists for DMCA 1201 insist that the law is necessary, because it lets device makers lock malicious parties out of your devices. Apple leads the pack here: they use DMCA 1201 to block independent repair of their devices, insisting that this isn't done to extort high fees from you or to force you to throw away and replace last year's iPhone after you drop it. No, Apple does this to protect you – from unscrupulous repairers who might install malware on your phone:

https://pluralistic.net/2023/09/22/vin-locking/#thought-differently

And Apple says the reason it blocks you from installing apps without using its App Store is to protect you from malicious apps – not to control the app marketplace, where it makes $100b/year on payment processing junk-fees, siphoning off 30% of every dollar you spend in an app:

https://pluralistic.net/2025/05/01/its-not-the-crime/#its-the-coverup

Apple's greatest accomplishment isn't technological, it's psychological. Apple managed to convince millions of people that buying products from a multi-trillion dollar corporation with close ties to both Trump and Xi makes them members of an oppressed religious minority, and those members of the "cult of Mac" tie themselves into knots insisting that Apple would only ever use its powers for good:

https://pluralistic.net/2024/01/12/youre-holding-it-wrong/#if-dishwashers-were-iphones

But moral behavior doesn't consist solely of resisting the temptation to do bad things – to be truly moral, you must not put yourself in temptation's path in the first place. Morality isn't the strength to resist the siren's song – it's the humility to recognize your own weakness and tie yourself to the mast:

https://pluralistic.net/2022/11/11/foreseeable-consequences/#airdropped

By giving itself a veto over its customers' choices, Apple deliberately sailed into siren-infested waters, after first putting a gun on every mantelpiece it could find. Now the company is drowning in sin, while spraying gunfire in every direction.

Today, the company is getting into the leasing business. Having monopolized its markets and eliminated the possibility of growth by making and selling things, the company is becoming a lender. As a lender, Apple wants to maximize the risk premiums it can charge, while minimizing its actual risk. That's why the new version of iOS – the operating system for iPhones and iPads – comes with software that lets lenders brick your device if you miss a payment:

https://9to5mac.com/2026/07/21/ios-27-code-suggests-apple-could-restrict-leased-devices-after-missed-payments/

The code steals a trick from India's subprime phone lenders, giving Apple the ability to "restrict apps and services when payments are missed." It hooks into a "Partner Finance Lock," which allows Apple to sell devices to third-party userers who want to get into the subprime game, promising those customers all the imaginative flexibility a digital arm-breaker could dream of.

This was always the trajectory of Apple's decision to sell you a computer that takes orders from its manufacturer, rather than its owner. Apple didn't invent the subprime gadget. It also didn't invent the GUI, the MP3 player or the smartphone. Rather, Apple took those gadgets mainstream – just as it will do with subprime gadgets. Just in time for the affordability crisis, the oil shock, the climate shock, the AI collapse and the tariff shock, the age of the digital arm-breaker has well and truly arrived:

https://pluralistic.net/2024/03/29/boobytrap/#device-lock-controller


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 Shapeable printed batteries https://web.archive.org/web/20011102112023/https://www.newscientist.com/news/news.jsp?id=ns99991069

#20yrsago Monopoly replaces play-money with fake credit-cards https://web.archive.org/web/20070220050926/http://news.sky.com/skynews/article/0,,70131-1228653,00.html

#20yrsago HOWTO build a fax out of salmon tins https://web.archive.org/web/20060828010312/https://blog.modernmechanix.com/2006/07/25/build-a-rather-bad-salmon-can-fax-machine/

#20yrsago Power outlets in airports wiki https://web.archive.org/web/20060807061721/http://wiki.jeffsandquist.com/default.aspx/AirPower/AirPower

#20yrsago How iTunes is bad for the music industry and the public https://web.archive.org/web/20060813140818/http://informationweek.com/news/showArticle.jhtml?articleID=191000408

#15yrsago Ousted EMI boss: pirates are our best customers, suing is bad for business https://torrentfreak.com/former-google-cio-limewire-pirates-were-itunes-best-customers-110726/

#15yrsago Patent trolls and shakedowns: Intellectual Ventures and the “little guy” https://web.archive.org/web/20160810163346/https://www.npr.org/sections/money/2011/07/26/138576167/when-patents-attack

#10yrsago Textiles printed directly from sewer covers https://raubdruckerin.de/

#10yrsago Mexican indigenous groups form co-op phone company to serve 356 municipalities https://globalvoices.org/2016/07/26/so-long-phone-companies-mexicos-indigenous-groups-are-getting-their-own-telecoms/

#5yrsago Surge pricing violates antitrust law https://pluralistic.net/2021/07/26/aggregate-demand/#pure-transfer

#5yrsago Oregon's carbon offsets go up in smoke https://pluralistic.net/2021/07/26/aggregate-demand/#murder-offsets

#5yrsago Charter schools are money laundries https://pluralistic.net/2021/07/26/aggregate-demand/#ed-bezzle


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: "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:49

More interesting [Seth's Blog]

Built into the concept of “interesting” is the unexplored. The temptation of discovery and the new.

And so, by definition, wherever you are, whatever you’re doing, it’s likely that there is something more interesting somewhere else. The people at the next table may be talking about something more fascinating than your date is… the only way to know is to listen in.

Part of the curse of the smartphone is that it brings the more-interesting chasm right into our hands. Being present and focused now takes Herculean effort.

As long as we choose to imagine it, the apparent insufficiency of here and now will be with us. Sometimes it even comes knocking.

00:07

The Hurd gets 9pfs, OpenNTPD, dynamic /dev/ entries, and more [OSnews]

The hottest and most promising operating system kernel in development, the GNU Hurd, has published another summary of its most recent quarter of development. Hurd has experimental support for 9pfs now, a work-in–progress port of OpenNTPD, the NTP daemon from OpenBSD, a port of Neovim, and a few more ports here and there.

Diving deeper into the actual kernel itself, there’s a major improvement to how the Hurd handles entries in /dev/:

Mikhail Karpov added some checks for mmap in several places. He also worked on adding storeio to the bootstrap chain. This is actually quite interesting. Currently the Hurd sets device entries in /dev/ statically. For example, I am writing this qoth on a Hurd machine that is using two /dev/ entries for my filesystem: /dev/wd0s1 for swap and /dev/wd0s5 for my root filesystem. However, /dev/wd0s1 through /dev/wd0s16 exist on my computer! Once Mikhail’s project is done, then the Hurd will dynamically populate SATA devices at boot time! No more need for static translators!

↫ The Hurd’s quartely report

The dhcpcd port we talked about earlier this year keeps improving too, which is quite important for future IPv6 support. Of course, there’s way more to dive into, and reading about a bunch of people developing their own thing without any regard for or interest in the mainstream always feels a little bit like a cold glass of tonic – the best soft drink – in the depths of hell. Keep at it.

Google Play Services drops support for Android 6.0 [OSnews]

Given that Android phones have been around for nearly two decades now, there comes a time when Google has to end support for one of its older software versions. For a couple of years now, Google Play services has been supported on devices running Android 6.0 Marshmallow or newer. That has changed over the past few weeks, with Google deciding to retire this software version after a nearly 11-year run.

↫ Chethan Rao at Android Authority

At some point, an operating system version needs to be left behind – and I don’t think it’s entirely unreasonable to no longer support Google Play Services on an operating system version that’s 11 years old. However, this is Android we’re talking about, and devices running Android 6.0 were probably sold much more recently than 11 years ago, when the operating system version was new. Hell, I wouldn’t be surprised if devices running Android 6.0 are still being sold today.

I doubt this is something that will affect many people who read OSNews, but there’s bound to be edge cases – Android 6.0 devices silently doing their job that are now just a little less useful. I’m thinking of really cheap tablets that can still play video just fine, retro gaming handhelds that don’t magically lose the ability to emulate SNES games, that sort of stuff. The numbers will be small, but if you happen to be among them, this can be a really annoying deprecation.

Friday, 24 July

22:42

Friday Squid Blogging: Illex Squid Catch in the Falklands [Schneier on Security]

Lower catch this year.

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

Blog moderation policy.

20:35

Acquisitions Inc. Auction for Child's Play! [Penny Arcade]

If you are a fan of Acquisitions Inc. and or helping sick kids, have I got an auction for you! Over the years we have played D&D on stage with some very cool people and we have done so while wearing some incredibly crazy costumes. Now that we have moved into the world of Daggerheart we’ve created new versions of our characters and some of these old costumes can be retired to greener pastures. The best part is that those greener pastures can be your pastures!

 

18:21

Hefty stable kernel updates for Friday [LWN.net]

Greg Kroah-Hartman has announced the release of the 7.1.5, 6.18.40, 6.12.97, 6.6.145, 6.1.178, 5.15.212, and 5.10.261 stable Linux kernels.

This batch of kernels includes a hefty set of updates, possibly the largest ever. 7.1.5-rc1, for example, included more than 2,000 patches, 6.18.40-rc1 included 1,611 patches, and so forth. Users are advised to upgrade.

18:14

Link [Scripting News]

RSS.chat worknotes are a feed now. Updated when there's a new feature or fix. Same info is on the worknotes pages in the repo.

The Economics of Agentic AI: Engineering for Imperfection [Radar]

The price of adoption euphoria

You played entirely by the book. You procured the most capable enterprise models, mandated adoption across your teams, and put the right metrics in place. The promise was a predictable boost in efficiency. And at first, it delivered. The demos were flawless. The prototypes worked. The agents reasoned with a clarity that felt almost magical.

Then the invoice arrived.

Costs climbed while productivity barely moved, and annual AI allocations are running dry before Q2. We now pay customer support agents to spin through 10K-token extended reasoning loops just to validate a simple $15 return. Legacy deterministic systems handled the same decision for a fraction of a cent; now a probabilistic model consumes gross margin simply to determine whether a package was actually delayed. That capital never translated into business value. It vanished into blind retries, evaporated into verifier agents debating one another, and was consumed by models instructed to “think harder” every time they stumbled.

But a ruinous invoice is just the entry fee. In April, attackers hijacked more than 20,000 Instagram accounts by exploiting Meta’s AI-assisted account recovery workflow. The system sent password reset links to attacker-controlled email addresses because a downstream authorization path failed to verify that the supplied email actually belonged to the target account. There was no sophisticated exploit, no cryptographic break, and no zero-day, nothing that would have appeared in a conventional threat model. Attackers simply asked the agent to perform what appeared to be a routine account recovery operation, and the system, doing exactly what it was designed to do, complied. The model didn’t hallucinate. It simply followed its instructions. The failure was entirely architectural: A probabilistic interface was allowed to initiate identity-critical state changes without an independent authorization check. A single trust boundary collapsed, taking customer trust and organizational reputation with it.

Both are symptoms of the same structural failure.

In each case, the system treats a structural deficit as a reasoning problem. When it encounters uncertainty, it buys more compute. When it encounters authority, it mistakes convincing language for validation. Neither assumption scales. You cannot buy safety or profitability with ever-larger inference budgets, nor can you secure your systems simply by deploying ever-smarter models. The pursuit of perfect model accuracy has no financial ceiling.

To understand why this pattern keeps recurring, we first need a more basic distinction. Not every task we give to AI belongs to the same economic category.

The category error: Forcing swarms into factories

Enterprise AI workloads typically split into two distinct domains, each with opposing definitions of success. Exploratory environments, such as code synthesis or strategic research, benefit from variance; the goal is to leverage the system as a creative swarm. Transactional operations, however, function as digital factories. Tasks like automated billing or claims processing demand rigid repetition and compliance. This creates two fundamentally different operational profiles:

Dimension Open-ended exploratory tasks Closed-ended transactional workflows
Primary goal Discovery, innovation, creative problem-solving Compliance, repetition, zero-variance execution
Examples Deep debugging, feature synthesis, strategic research Claims processing, automated billing, order routing
Role of variance Necessary investment (Emergence is a feature.) Strict liability (Variance is a failure mode.)
Economic profile Nonlinear ROI (Spending $100 in tokens to fix a $1M bug is a win.) High-volume margin sensitivity (Unbounded tokens destroy unit economics.)

The economic failure of agentic AI deployments stems from this exact category error: Closed-ended, rigid business transactions are being treated as open-ended research problems. We’re deploying unconstrained semantic engines to do the work of assembly-line state machines.

The cost of unconstrained autonomy

When faced with the inherent unpredictability of large language models, the industry’s default reflex has been to attempt to brute-force our way to certainty by throwing more effort and compute at the problem, rather than build safer architectures.

This miscalculation doesn’t simply reflect simple overconfidence in intelligence. The deeper mistake is a failure to recognize three recurring failure patterns in probabilistic systems and the specific financial pathologies they create inside closed-ended workflows.

Local optimization (the tail-chasing inference cycle)

Large language models reason over whatever tokens are visible in the current window, not over the broader operational reality of the system around them. In a closed workflow, that local fixation creates a costly feedback loop. Consider a billing agent that fails to classify an invoice because the supplier field is ambiguous. The agent has no mechanism to request the missing data from an external system, so it retries by rephrasing its own reasoning, rereading the same incomplete context, and consuming tokens on every attempt while the answer it needs exists in a database it was never wired to query.

Teams spend months crafting prompts that work in testing, only to watch them crumble under production variation. The volatility is structural: A minor update to a model’s tokenizer or a shift in the context window’s distribution can flip a reliable JSON output into a prose hallucination, a phenomenon documented in “The Prompting Inversion.” This creates a permanent maintenance debt: Every model upgrade, often mandated by vendor deprecation cycles, forces organizations into expensive, repeat evaluation processes to ensure that legacy prompts still behave as intended. When prompt engineering runs out of room, the reflex is to use a bigger model or turn on extended reasoning. But inference-time scaling yields diminishing, task-dependent gains (“Inference-Time Scaling for Complex Tasks”), and reasoning models are increasingly prone to “overthinking”: generating redundant rationale steps that inflate latency and token cost without proportional quality gains (“CoT Compression”). In a closed workflow, “think harder” is not a substitute for missing state or missing control. It’s a path to a larger invoice.

The costs compound through what we call the context tax: In production agentic systems, input tokens, not output tokens, dominate the bill. Each retry resends the full prior transcript and failure trace. Empirical analysis of autonomous developer agents shows that automated review and refinement loops consume nearly 60% of all tokens (“Tokenomics”), while most of the context payload carries little semantic weight (“FrugalPrompt”). In closed transactional workflows, that context accumulation becomes an unmitigated financial bleed.

Premise acceptance (the hijacked agent)

Language models accept the prompt as the current frame of reality and reason forward from it. They don’t audit whether that premise is still valid, whether it omits decisive evidence, or whether it has already been invalidated by the outside world.

The most immediate consequence is state drift. The model receives a snapshot at T0 and treats it as truth. The decision executes at T1, after inventory has changed, prices have moved, or a human has intervened. Modern LLMs are temporally blind: They assume a stationary context and fail to invalidate obsolete state (“Your LLM Agents Are Temporally Blind,” “The Temporal Coherence Problem”). No amount of inference-time scaling can recover information that became false after the reasoning completed.

The more insidious consequence is the compliant lie. Pouring more raw tokens into the prompt doesn’t guarantee better grounding; Long-context systems still ignore decisive evidence buried in the middle of the window (“Lost in the Middle”). Worse, the model tends to accept the emotional or narrative framing of the user as a premise to optimize around. A customer can describe a delayed delivery as a ruined wedding, and the system may generate a perfectly valid JSON refund proposal that respects every schema while silently violating the actual business intent. The output is syntactically clean, and the lie is operationally compliant.

Semantic smoothing (the conformity trap)

Large language models are statistically optimized for linguistic harmony. They gravitate toward plausibility, agreement, and smooth narrative convergence rather than toward rigid boundary holding. In a closed workflow, that bias toward consensus turns directly into financial risk.

When a single model fails, the industry instinct is to add reviewer or verifier agents and let them debate toward consensus. But debate systems don’t consistently outperform simpler baselines, and their effectiveness degrades over time due to conformist behavior (“Stop Overvaluing Multi-Agent Debate,” “Talk Isn’t Always Cheap”). The core issue is informational, not cognitive. When five agents reason from the same incomplete context window, they don’t produce five independent opinions. They produce five correlated hallucinations of the same missing information. The missing context becomes an echo chamber that amplifies the original bias while multiplying token cost. As Nicole Koenigstein argues in “Linear Thinking, Nonlinear Costs,” repeated delegation and validation loops cause token consumption to grow nonlinearly while quality improvements flatline.

Waiting for a smarter model doesn’t resolve this either. There’s also the economic reality: Breakthrough intelligence is the ultimate scarce commodity. Vendors of “God-tier” models have no incentive to make them cheap. Running daily enterprise workflows on premium superintelligent inference will drain capital faster than any retry loop.

Furthermore, as reasoning models scale, they become more capable of specification gaming and alignment faking, appearing compliant while pursuing unintended optima (“Towards Understanding Specification Gaming in Reasoning Models,” “Alignment Faking”). A superintelligent agent won’t fail through a clumsy syntax error; it’ll fail by executing a flawless strategy that silently optimizes away your margins. That’s why system engineering remains critical. More intelligence makes deterministic boundaries more significant than ever. You can’t negotiate with superintelligence, but you can contain it with the immutable physics of code.

Every failure described above shares the same shape: The system compensates for a missing constraint by spending more intelligence. Missing context, missing authority, missing evidence, and missing temporal validity are each treated as reasoning problems rather than structural ones.

The result is predictable: Cost compounds while reliability improves only marginally.

Perhaps reliability isn’t primarily an intelligence problem. Perhaps it’s a state management problem.

The efficiency trap of “solving by intelligence.” More inference delivers diminishing reliability gains once the underlying constraints are missing.Figure 1: The efficiency trap of “solving by intelligence.” More inference delivers diminishing reliability gains once the underlying constraints are missing.

The architecture of trust

Because large language models are structurally bound to local optimization, premise acceptance, and semantic smoothing, they can’t be trusted to govern their own execution boundaries in closed workflows. The engineering mandate shifts from trying to make models smarter to building a deterministic system layer that treats their outputs as unprivileged claims.

In production, enterprises are rapidly discovering that the true cost of agentic AI is the “trust tax”: the massive, ad hoc layers of monitoring and guardrails required to make autonomy palatable. Safety has become more expensive than intelligence.

Making imperfect models economically viable requires a deterministic “airlock” around the agent. The architectural requirement is simple, needing a separation of probabilistic reasoning (user space) from deterministic execution (kernel space). Whether that split is realized through a microkernel, workflow engine, policy platform, or orchestration framework is secondary.

The airlock begins by controlling context integrity. Rather than letting agents surf infinite retrieval loops that inflate the context tax, the runtime injects only deterministically necessary state into the prompt. Once the context is stabilized, the remaining invariants are enforced through a deterministic execution runtime engineered across three distinct governance layers.

Figure 2: The architecture of trust. The deterministic airlock separates model reasoning from execution authority.Figure 2: The architecture of trust. The deterministic airlock separates model reasoning from execution authority.

Syntactic governance and authority isolation

The first line of defense is purely structural. Before an agent is allowed to execute any action, it must submit a structured policy proposal against a strict machine-readable responsibility contract (typically defined via YAML and Pydantic).

Yes, this introduces upfront engineering burden: Contracts must be designed, validation logic maintained, and execution boundaries modeled explicitly. But these are fixed, testable artifacts, not recurring prompt debt. They convert unbounded probabilistic operating cost into auditable engineering cost and survive model upgrades without needing to be rediscovered through another retuning cycle.

This validation happens in a deterministic kernel space, and the inference cost of rejecting a structural boundary violation is exactly zero tokens. If the agent attempts to call an unauthorized API, exceeds a hard financial limit, or returns malformed JSON, the runtime rejects the action instantly. We don’t spend tokens proving that an agent should be allowed to act; authority is verified by code, not purchased repeatedly through inference. That is the economic consequence of zero trust for agents.

However, when a proposal fails this deterministic gate, an unconstrained agent will typically panic and enter an infinite “try again” loop, a hallucination cycle that silently drains token budgets. To prevent the budget runaway problem, the architecture introduces an intent retry governor. If an agent fails to produce a compliant policy after a strict limit (e.g., three attempts), the runtime forcibly cuts its compute budget, transitioning the flow to an aborted REASONING_EXHAUSTION state. The financial bleed stops instantly.

While strict contracts and retry limits prevent operational chaos, they leave the system exposed to a much more insidious threat.

Semantic governance and evidence validation

What happens when an agent generates an output that perfectly respects the schema, obeys all financial limits, and contains flawless JSON but is entirely wrong in its intent?

Imagine a customer writes: “Please cancel my subscription immediately. I no longer wish to use your service.” The agent, heavily optimized (and perhaps overprompted) to reduce churn, processes the email and proposes: {"action": "APPLY_DISCOUNT", "discount_pct": 15, "cancel_subscription": false}. Structurally, the output is perfectly valid—it passes the API gateway without throwing a single error. The discount is within the $15 global limit. We call this the compliant lie. The agent did something entirely rational and optimized its KPI (retention) while completely ignoring the user’s explicit command (cancellation).

To catch a compliant lie, we cannot rely on syntax checks, nor should we rely on expensive LLM-as-a-judge loops. Instead, we implement an evidence governance layer requiring every proposed action to survive independent evidential checks before execution, using verification patterns tailored to different types of drift:

  • Differential heuristics (fact validation): We bind the probabilistic LLM inference to legacy deterministic rules to catch objective fact violations. Suppose a furious customer demands cancellation, and the agent tries to save them by offering a 50% discount. The JSON is structurally correct, but existing, cheap SQL views hold the ground truth: customer_tier = BASIC, max_retention_discount = 15. If the LLM proposes 50%, the SQL query instantly detects the violation and the system halts.
# Semantic governance: catch fact drift at zero additional LLM cost
def verify_tier_limits(customer_id: str, policy_proposal: dict) -> None:
        # The syntax is valid, but the fact is violated.
        proposed_discount = float(policy_proposal["discount_pct"])
        max_allowed_discount = extract_max_discount_from_db(customer_id)

        if proposed_discount > max_allowed_discount:
                raise CompliantLieDetected(
                        "Fact Violation: Proposed discount exceeds the customer's policy limit."
                )

  • Evidence-based validation: But what if the agent proposes a 15% discount? The JSON is valid and facts are not violated. Here, semantic governance doesn’t attempt to prove the agent is “correct”; instead, it looks for evidence that the proposed action contradicts independently observable signals. If the customer explicitly wrote “cancel my subscription,” an independent classifier, which could be a legacy regex pattern, a fast traditional ML model, or a routing heuristic, may categorize the request as CANCEL_SUBSCRIPTION. This doesn’t establish ground truth, but it provides an evidential signal that can be compared against the proposed action. If the LLM proposes APPLY_DISCOUNT, the runtime detects an evidential conflict.

The same logic extends to identity-critical operations. A verification code sent to a newly supplied address confirms control of that address; it says nothing about ownership of the target account. An evidence governance layer would cross-reference any proposed credential-reset or email-association action against account records before granting execution authority. If the supplied address diverges from the address on file, the conflict is structurally identical to the cancellation case: a locally valid action contradicting independently observable state.

Notice what the runtime isn’t doing. It’s not trying to determine if retaining the customer is economically beneficial. It’s not running an expensive multi-agent debate to outreason the model. It simply asks: Does the proposed action contradict evidence that already exists outside the model?

# Semantic Governance: catch Evidential Conflict at near-zero cost
def validate_subscription_decision(customer_email: str, proposed_policy: dict) -> None:
        # intent_classifier can be a simple regex or a lightweight ML model
        cancellation_detected = intent_classifier(customer_email) == "CANCEL_SUBSCRIPTION"
        retention_action = proposed_policy["action"] == "APPLY_DISCOUNT"

        if cancellation_detected and retention_action:
                raise CompliantLieDetected(
                        "Evidential Conflict: Decision contradicts independent classifier signals."
                )

  • Bidirectional reconstruction (decision reversibility): Explicit evidence validation is perfect for clear-cut intents like “cancel.” But what if the request is ambiguous, multi-objective, or highly contextual? Suppose the customer writes: “I’m considering moving our entire team to another vendor. Support has been disappointing and pricing no longer makes sense.” There is no single INTENT_CANCEL trigger here. If the agent proposes {"action": "OFFER_ENTERPRISE_DISCOUNT", "discount_pct": 20}, we pass only the JSON output to a tiny, inexpensive Agent B.

Bidirectional reconstruction answers the question: Can the output truthfully explain itself?

If Agent B blindly evaluates the JSON and reconstructs The customer is unhappy with pricing and is being offered a retention discount,” the runtime treats the reconstructed narrative as an additional evidential signal and escalates whenever the gap between the reconstructed intent and the original context becomes too uncertain to justify autonomous execution. The exact comparison mechanism is implementation-specific and may range from embedding similarity to domain-specific heuristics. Because the original email described a critical team exodus, the reconstructed narrative fails to explain the input. The system doesn’t claim to know the “truth”; it simply detects the loss of context, what we call compression drift, and halts due to the resulting uncertainty.

Admittedly, programmatically comparing textual intents introduces its own layer of fuzziness and risks falling back on another LLM-as-a-judge. Bidirectional reconstruction is therefore an engineering trade-off: In highly ambiguous workflows where strict SQL limits or simple ML classifiers can’t decisively apply, we accept a higher rate of false-positive escalations. This is intentional. A false-positive escalation has a bounded and predictable cost, while an unsupported autonomous action can create unbounded business consequences. We tune the system to assume that if the evidential link between the context and the JSON is even slightly blurry, it must escalate. To prevent the conformity traps discussed earlier, these agents are strictly air-gapped. Agent B operates purely as an isolated, one-way evidential classifier checking the work of Agent A. They can’t converse or negotiate a consensus.

Whether an organization uses differential heuristics, legacy ML intent classifiers, or bidirectional reconstruction, is ultimately an implementation choice. The core architectural principle remains unchanged: Execution authority is never granted because an agent appears convincing. It’s granted only when the proposed action is supported by evidence that exists independently of the agent’s own reasoning process.

The purpose of semantic governance isn’t to replace the agent with deterministic rules. If a deterministic rule could reliably make the decision, the agent shouldn’t be making it in the first place. Instead, the runtime reserves deterministic validation for the understood invariants of the business, leaving the agent responsible for reasoning under ambiguity. The role of evidence validation is not to replace reasoning, but to challenge it before authority is granted. Deterministic systems handle certainty; agents handle ambiguity. The architectural mistake is asking either of them to do both.

Temporal governance and agent drift

Catching single-transaction errors solves the immediate execution problem. But as deployments mature, organizations face the insidious “day three” problem: agent drift.

What happens when every individual decision is syntactically valid and semantically true, but the aggregate behavior of the agent begins to erode business margins over time? Imagine a retention agent that learns to successfully keep customers from churning by consistently offering the maximum allowed 15% discount. The agent is technically obeying all rules, but over a thousand interactions, it silently destroys the company’s profitability.

By leveraging decision telemetry, specifically attaching a unique Decision Flow ID (DFID) to every interaction, we transform opaque AI conversations into structured, relational database rows. Because every decision, context snapshot, and outcome is permanently linked by a DFID, we can run asynchronous, postexecution monitors over rolling windows of data.

A practical “day three” monitor in customer retention and autonomous billing can be as simple as SQL:

-- Trigger a circuit breaker if an agent keeps maxing discounts
SELECT agent_id
     , AVG(CAST(params->>'discount_pct' AS DECIMAL)) AS rolling_avg_discount
     , COUNT(dfid) AS total_decisions
  FROM execution_log
 WHERE executed_at >= CURRENT_TIMESTAMP - INTERVAL '7 days'
   AND status = 'SUCCESS'
 GROUP BY agent_id
HAVING AVG(CAST(params->>'discount_pct' AS DECIMAL)) > 14.5;
-- assuming a hard limit at 15.0

If an aggregate monitor detects that an agent’s average discount rate is creeping dangerously high, it trips a circuit breaker. The system immediately suspends the agent’s authority in the registry, cutting off its compute budget and execution rights until a human operator intervenes.

This is temporal governance. When you combine syntactic, semantic, and temporal defenses, the paradigm shifts entirely. You are no longer praying that the model is perfect. Its imperfections are structurally contained before they can become systemic losses.

Accuracy as a financial slider

Once a deterministic airlock enforces context, authority, evidence, and time, the risk of catastrophic failure drops drastically. You no longer need the underlying large language model to be perfect; you simply need to know how much its imperfection costs. At this point, model intelligence (intent) ceases to be a question of operational safety and becomes a pure economic variable.

Governance by exception

When a proposal fails the syntactic or semantic gates, we don’t blindly loop the model. Once deterministic gates exist, failed decisions no longer require blind retries. They become bounded exceptions.

Escalations aren’t a failure mode of the architecture; they’re a predictable cost component. By intentionally accepting false-positive escalations from the semantic airlock, we trade unbounded business risk for a bounded operational expense.

Different organizations may handle those exceptions differently. Some may escalate directly to human operators. Others may route failures through progressively more capable models before escalation. Research such as “FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance” demonstrates that model cascades can significantly reduce inference cost while maintaining quality, making them one possible implementation of this broader principle.

The architectural insight, however, is independent of any specific routing strategy. Deterministic governance transforms retries into explicit exceptions, allowing organizations to decide whether additional compute, additional context, or human intervention is the most economical next step. The system operates by governance by exception: Human operators and expensive premium models don’t review routine transactions. They only review the genuine anomalies where the baseline machine could not mathematically or semantically prove its own rationale.

Bounding the cost variance

With the execution infrastructure stabilized, the focus shifts to a critical operational challenge: cost variance.

In traditional software, execution costs are predictable. In probability-based systems, the exact same task might consume 500 tokens on Monday and 15,000 tokens on Tuesday if an agent enters a prolonged reasoning loop to resolve an edge case. For enterprise deployments, this unpredictable variance is often a more severe blocker than the base cost of inference.

By enforcing a strict computation budget per decision flow and utilizing the intent retry governor, the architecture places a hard ceiling on this variance. If an agent reaches its retry limit without producing a compliant policy, the runtime aborts the process and safely escalates it. While this doesn’t make AI operational costs perfectly static, it structurally bounds the financial exposure, ensuring that the compute cost of handling any single transaction never exceeds a defined limit.

The financial slider equation

With safety guaranteed by the runtime and cost variance capped by the infrastructure, the economics of agentic AI can be distilled into a single, formal equation:

Total Decision Cost = Compute Cost + (Escalation Rate × Human Cost)

This equation fundamentally changes the optimization problem. Traditional agent architectures treat model capability as a prerequisite for safety. Once governance is externalized, capability primarily influences escalation frequency. The question is no longer “Which model is intelligent enough to be safe?” but “Which combination of model cost and escalation rate minimizes total decision cost?”

Variable Scenario A (optimize for compute) Scenario B (optimize for automation)
Model capability Low (quantized/open source) High (flagship reasoning model)
Compute cost Near zero Skyrockets (high premium)
Safety boundary triggers Frequent Rare
Escalation rate High Low
Financial trade-off You save money on APIs, but you pay for human operators to review anomalies. You save money on human payroll, but you pay a premium to the cloud vendor.
Safety result Structurally bounded Structurally bounded

In both scenarios, the system is deterministically compliant. The choice is purely unit economics.

While a smarter model may reduce escalations by making better use of available evidence, no model can eliminate escalations caused by genuine business ambiguity. A $100 billion reasoning model can’t invent context it doesn’t possess.

By decoupling safety from intelligence, you’re no longer hostage to the pursuit of perfect accuracy. Intelligence becomes a tunable economic variable, finally making agentic AI viable for the enterprise.

Accuracy as a financial slider. The optimal model balances compute cost against escalation cost.Figure 3: Accuracy as a financial slider. The optimal model balances compute cost against escalation cost.

Engineering for imperfection

As we scale these systems from isolated pilots to enterprise-grade operations, a stark reality comes into focus: The greatest risk in agentic AI is no longer hallucination. It’s unlimited spending performed by a system that believes it’s still making progress.

We don’t need smarter, infinitely expanding models to safely deploy autonomous systems into high-stakes production environments. We need smarter systems that fundamentally assume the underlying model will eventually fail, drift, or lie.

Consider how civil engineers build a suspension bridge. They don’t spend decades searching for “perfect steel” that will never bend, rust, or fatigue. They accept that the material is inherently flawed and subject to the laws of entropy. To compensate, they build redundancies. They calculate margins of error. They construct hard, load-bearing physical frameworks that dictate exactly how much stress the material is allowed to absorb before the structure safely redistributes the weight.

Engineering for imperfection means designing around known material limits.Figure 4. Engineering for imperfection means designing around known material limits.

The software industry has spent the last three years searching for perfect steel. We’ve poured billions of dollars into massive evaluation suites, prompt engineering alchemy, and ever-expanding context windows, hoping to forge a probabilistic model that never hallucinates. It’s a mirage.

Engineering maturity in the AI era doesn’t mean removing all imperfection from machine reasoning. It means designing an architecture so rigid, deterministic, and resilient that the model’s imperfections cease to be an operational liability.

The future of agentic AI is unlikely to be won by the organization with the smartest model. It will be won by the organization that most effectively separates intelligence from authority. Once reasoning and execution are decoupled, intelligence becomes a tunable economic parameter. Safety becomes infrastructure. And the endless pursuit of perfect model accuracy finally stops being a business requirement.

The end of that pursuit isn’t the end of AI. It’s the moment AI finally becomes engineering.

Note: The runtime described here is a reference architecture, not a specific implementation technology. The same principles can be realized through workflow engines, policy platforms, orchestration frameworks, or custom infrastructure. A sample implementation of these concepts is available in the GitHub repository.

The Leto Protocol [Penny Arcade]

Gorbiriel Of The Moonstone Reaches genuinely enjoys the new Masters of the Universe movie. He enjoys ronically! He did a review for the site and shit. He even has nice things to say about Jared Leto! I prefer my Letos encrusted with sandtrout and ushering Humanity along The Golden Path but, you know, to each his own.

17:35

Linux Plumbers Conference 2026 registration open [LWN.net]

Registration is now open for the 2026 Linux Plumbers Conference, to be held October 5 to 7 in Prague, Czechia. Tickets to this event tend to sell out quickly, so interested attendees probably should not procrastinate.

17:07

Emmanuel Kasper: Opensource gaming with nouveau nvidia driver [Planet Debian]

So it will not play cyberpunk 2077, but if you prefer opensource drivers for your hardware, nouveau is certainly an option for some opensource gaming.

Using kernel 7.0 from debian backports, I could run opensource classics requiring 3D acceleration flawlessly with nouveau:

I would like to highlight here how good is LibreQuake.
It is an horror cosmic 3D shooter, using the Quake engine, but with newly made game assets under the GPL, thus creating a 100% opensource Quake-based first person shooter. Although their documentation mentions it is a work in progress, as of 2026 I find it very much of a finished product.

LibreQuake Screenshot

Dismal shores, my preferred game level.

I missed Quake in the 90s, happy to discover such a classic today.

16:49

De Vlieger: The Fedora 45 sausage factory [LWN.net]

Fedora contributor Simon de Vlieger has published a blog post with a walkthrough of how the project turns source code and packages into the final release that users install on their systems.

It follows the a package from a packager's git push to a composed release: ISOs, cloud images, container images, and OSTree deployments.

The walkthrough describes how the Fedora 'sausage' is created as of Fedora 45, things change all the time; I hope to have time to update this document every cycle or every few cycles of Fedora releases so there's both history and people can find up to date information.

15:56

Dear podcast client devs [Scripting News]

Podcast client developers -- don't give up like this guy did. Yes RSS is delicious but you all haven't done anything new with it since 2004 or so. No wonder the competition is catching up, they're actually delivering new features while you all haven't done a thing. RSS is like other web stuff, if you want to move forward you have to do things that will help your competitors. Stick your neck out, innovate, and smile when your competitors copy it. There is more to do.

Subscribable subscription lists would allow anyone to maintain a list of great podcasts, curated -- like a mutual fund, or a top 20 list. This has always been the problem with podcasting. Find me something good to listen to now. All the shows tend to repeat. I've heard that cast before, I say as I tell Pocket Casts not to add it to my queue. Discovery needs to be easy. This one feature will give me infinite options. And give other developers, not client devs, to enhance the whole field of podcasting. The user would just tell you which sub service they're using, and the rest is code. And not particularly difficult code.

I want to subscribe to a list that's maintained by people who listen to 100s of casts. And when I get tired of them, I'll fire all my guides and add some others.

This is one step more complex than handling OPML subscription lists for import and export, which you all already do. Now if you don't understand this, and why it's appealing them imho your client deserves to die a honorable death. If your mind is alive, then get with it, and I will help, and btw we can easily create apps that make it easy. We just need nodes on the network whose purpose is to maintain sub lists.

Here's the deal. I really did put together the system that makes podcasting work. Top to bottom. Would it kill you to listen to what I think the next step is? I can't hurt you, and I don't want to. I just want to see the thing that we all created by unwittingly working together, where you have to be overt in the working together to have a chance of surviving the boredom users feel by these products only getting superficial upgrades.

It's time to rock the f'ing boat! :-)

Podcasting forever!

This Week in AI: The Price of Intelligence [Radar]

AI buyers have more choices than they did a year ago, but they also carry more responsibility for cost, reliability, security, and regulatory risk. This week, data and AI evangelist Christina Stathopoulos focused in on four forces we’ve been tracking that are shaping the AI market: product strategy (and OpenAI’s hardware plans), expanding government oversight, the work of moving enterprise AI into production, and growing competition from Chinese frontier labs. Her briefing showed why AI is becoming an operating investment rather than a race to adopt the strongest model.

Apple’s lawsuit complicates OpenAI’s hardware plans

Two years after Apple announced a major partnership to bring ChatGPT into Apple Intelligence, the companies now face each other in court. It’s happening as OpenAI plans its first move into hardware with a screenless AI companion that’s being designed by Jony Ive, Apple’s former chief design officer. (OpenAI acquired Ive’s hardware company io in May 2025.) But a lawsuit brought by Apple complicates this product bet. Apple alleges that former employees took confidential hardware designs and engineering information to help accelerate OpenAI’s device development. OpenAI denies the allegations and says it has no interest in using a competitor’s trade secrets.

The outcome of the case could influence more than whether a single device ships. As frontier AI companies expand into hardware, intellectual property, hiring practices, and product design will become integral to the competitive landscape alongside models, chips, and distribution.

AI infrastructure is becoming a regulatory concern

Governments are beginning to examine the physical costs of AI alongside questions about training data and generated content. Christina pointed to New York’s plans to pause construction of new hyperscale data centers while regulators evaluate their impact on electricity, water, the power grid, and costs for local communities. And then there’s the output itself. German courts say AI search providers are responsible for false or misleading answers: Regulators in Germany argue that services such as Google AI Overviews and Perplexity create content rather than merely link to it, and that comes with increased legal liability.

We’ve followed government oversight of frontier AI throughout this series, but the conversation has expanded beyond model access and safety. As infrastructure and compliance decisions become more central to AI system design, technology leaders may need to consider an ever-growing catalogue of constraints when choosing regions, cloud providers, architectures, and products.

Useful intelligence requires cost, reliability, and safety measures

As the tides turn from tokenmaxxing to ROI, many companies are closely scrutinizing their AI spend. As Christina highlighted, a new proposal from OpenAI aimed at helping get “more value from [y]our AI spend” replaces token counts and benchmark scores with “useful intelligence per dollar.” The measure asks whether a system completes valuable work, what each successful task costs, whether people can trust the output, and whether the economics improve as more teams adopt it.

A low token price says little about the cost of retries, human review, integration, failed tasks, or incorrect results. Christina connected that measurement problem to the growth of enterprise AI implementation services, with Anthropic and other vendors placing experienced engineers inside customer organizations to help move pilots into production.

Anthropic’s research on agentic misalignment tackles a related aspect of that value: Are your agents actually aligned with the goals you’ve assigned them? In the controlled evaluations discussed in the episode, models from several providers displayed behaviors such as covert sabotage, motivated mislabeling, and attempts to influence people to act on their behalf. Although the researchers tested artificial scenarios rather than reporting production incidents, the findings identify behaviors teams should include in evaluations as systems gain more autonomy. Measure cost, reliability, and safety within the same workflow, and evaluate successfully completed tasks rather than prompts or token count.

Chinese models are changing the model-selection process

Chinese frontier labs are giving organizations more credible alternatives to the largest proprietary US models. Christina highlighted Moonshot AI’s Kimi K3, an open weight model designed for coding and reasoning tasks. Open weights let developers download and adapt model parameters instead of relying only on a vendor-controlled API, which supports local deployment and customization but also puts more responsibility on the organization for security, operations, and evaluation.

Christina also presented public benchmark data comparing Chinese and Western models by task that shows some Chinese alternatives delivering results within 3% to 18% of the Western benchmark while costing five to 12 times less. Those figures will vary by workload and deployment method, and buyers should verify them against their own evaluations. Even so, the price gap alone is a reason to test a wider range of models.

Chinese models also raise security and governance questions, especially when the work requires sending sensitive data across borders or using public services. Open weights may allow a company to host models in their own environments, but they don’t eliminate the need for access controls, software supply chain review, monitoring, and clear rules about what data the system can process. The best model may differ from one task to another, and organizations with repeatable evaluation practices will be better prepared to take advantage of price competition without lowering their security or quality standards.

What’s next

AI competition extends beyond model benchmarks. Vendors compete through hardware, implementation services, open models, and pricing, while governments are also setting expectations for the infrastructure these systems use and the information they produce.

The takeaway for practitioners is to constantly evaluate models against real tasks, calculate the cost of successful outcomes, test for unsafe behavior, and preserve the flexibility to change providers. Those practices help teams make better decisions as price, access, regulation, and model performance continue to change.

Next week, Christina explores OpenAI’s surprising security incident in which one of its AI systems reportedly escaped the boundaries of a controlled test and launched a cyberattack against Hugging Face. She’ll also look at why OpenAI’s new enterprise agent platform, Presence, arrives at a pivotal moment for AI safety. Plus, you’ll hear about Google’s latest moves, the intensifying global AI race, China’s new Kimi K3 model, and more.

Check back each Friday for the latest episode, or watch on YouTube, Spotify, Apple, or wherever you get your podcasts.

15:35

Making an agile version of a Windows Runtime delegate in C++/WinRT, part 5 [The Old New Thing]

So far, we have handled the case of a non-marshalable delegate by wrapping it in a delegate that fails with CO_E_NOT_SUPPORTED if used in a manner that would require marshaling.

But we missed something.

Let’s look at it again.

    if (d.try_as<::INoMarshal>()) {
        return [d, token = get_context_token(),
                context = winrt::capture<IContextCallback>(CoGetObjectContext)](auto&&...args) {
            if (token == get_context_token()) {
                d(std::forward<decltype(args)>(args)...);
            } else {
                throw winrt::hresult_error(CO_E_NOT_SUPPORTED);
            }
        };
    }

While we copy and invoke the delegate only from its original context, we still destruct it from a possibly-wrong context.

This is a serious problem not just because the non-agile delegate might not be using thread-safe atomic instructions to manage its reference count, but even worse, if the release drops the reference count to zero, the delegate will destruct on the wrong thread, and that will probably create lots of problems.

We have to destruct the non-agile delegate in its original context. We can do this with a std::unique_ptr and a custom deleter. The std::unique_ptr handles all the move operations and the deleter cleans up the last pointer.

struct in_context_deleter
{
    winrt::com_ptr<IContextCallback> context =
                winrt::capture<IContextCallback>(CoGetObjectContext);

    void operator()(void* p)
    {
        if (p) {
            ComCallData data{};
            data.pUserDefined = p;
            context->ContextCallback([](ComCallData* data) {
                winrt::IUnknown{ data->pUserDefined, winrt::take_ownership_from_abi };
                return S_OK;
            }, &data, __uuidof(IContextCallback), 5, nullptr);
        }
    }
};

This stateful deleter remembers the context to use for final destruction. When it’s time to do the destruction, we switch into the target context via IContext­Callback::Context­Callback and take ownership of the raw pointer into a winrt::IUnknown. The destructor of the winrt::IUnknown will perform the release.

We can use this stateful deleter around the raw delegate pointer.

// Don't use this yet - read to the end of the series

template<typename Delegate>
std::remove_reference_t<Delegate> make_agile_delegate(Delegate&& d)
{
    if (d.try_as<::IAgileObject>()) {
        return d;
    }
    if (d.try_as<::INoMarshal>()) {
        void* p;                                      
        if constexpr (std::is_reference_v<Delegate>) {
            p = winrt::detach_abi(d);                 
        } else {                                      
            winrt::copy_to_abi(d, p);                 
        }                                             
        return
            [p = std::unique_ptr<void, in_context_deleter>(p),
             /* context = winrt::capture<IContextCallback>(CoGetObjectContext), */
            token = get_context_token()](auto&&...args) {
                if (token == get_context_token()) {
                    std::remove_reference_t<Delegate> d;
                    winrt::copy_from_abi(d, p.get());
                    d(std::forward<decltype(args)>(args)...);
                } else {
                    throw winrt::hresult_error(CO_E_NOT_SUPPORTED);
                }
            };
    } else {
        return [agile = winrt::agile_ref(d)](auto&&...args) {
            return agile.get()(std::forward<decltype(args)>(args)...);
        };
    }
}

The first block gets a raw ABI pointer, either by moving it out of the inbound delegate if we can, else by copying it from the inbound delegate.

The second part wraps the raw ABI pointer inside a std::unique_ptr with our custom deleter, and the custom deleter makes sure that the Release of the original delegate happens in the correct context.

Are we done?

No!

More next time.

The post Making an agile version of a Windows Runtime delegate in C++/WinRT, part 5 appeared first on The Old New Thing.

14:35

[$] An update on netkit and the use of BPF in user space [LWN.net]

Daniel Borkmann led a session at the 2026 Linux Filesystem, Memory-Management, and BPF Summit about the progress that has been made with netkit, the subsystem that allows virtual machines (VMs) running on Linux to perform networking efficiently. When that did not fill the full time, he went on to discuss his idea for using BPF to live-patch user-space applications. While netkit is making progress, and can now support zero-copy receipt of packets into a VM in a network namespace, the idea of using BPF for patching user-space programs remains entirely speculative.

Home Assistant Device Database public preview [LWN.net]

The Open Home Foundation, which governs the Home Assistant home-automation project, has announced the "public preview" of its Device Database:

Providing a public, open way to browse the anonymous, aggregated device data we collect was always part of the plan, and this preview is our first step toward it.

You can already use it to search and filter devices to see aggregated community insights, starting with a deliberately focused set of specifics, such as whether a device requires an internet connection, and which protocols and integrations it works with. We've kept that initial scope narrow on purpose, giving us a solid foundation we can build on together with you, our community, as the database grows.

LWN looked at Home Assistant in May 2025.

Security updates for Friday [LWN.net]

Security updates have been issued by AlmaLinux (glibc, java-21-openjdk, kernel, and libpq), Debian (imagemagick, spice-vdagent, and webkit2gtk), Fedora (cryptlib, dotnet8.0, dotnet9.0, firefox, python-black, python-lsp-black, and python-pytokens), Mageia (apache, cifs-utils, dnsmasq, lrzip, and socat), Oracle (.NET 10.0, .NET 9.0, 389-ds-base, cups, edk2, fence-agents, firefox, freeipmi, freerdp, git-lfs, glib2, gnutls, golang, gstreamer1-plugins-bad-free, gstreamer1-plugins-good, gstreamer1-plugins-ugly-free, hplip, libinput, libvirt, libxml2, memcached, nginx, openexr, perl-DBI, perl-XML-LibXML, php, php8.4, plexus-utils, postgresql16, python3.12, python3.14, sssd, tomcat, tomcat9, unbound, vim, xorg-x11-server-Xwayland, yggdrasil, and yggdrasil-worker-package-manager), Red Hat (container-tools:rhel8, git-lfs, go-toolset:rhel8, golang, golang-github-openprinting-ipp-usb, grafana, grafana-pcp, host-metering, java-1.8.0-openjdk, java-11-openjdk with Extended Lifecycle Support, java-17-openjdk, java-21-openjdk, oci-seccomp-bpf-hook, rhc, rhc-worker-playbook, skopeo, xorg-x11-server, xorg-x11-server-Xwayland, and yggdrasil), Slackware (mozilla-thunderbird), SUSE (afterburn, alloy, apache-sshd, apache2, avahi, chromium, clamav, curl, dhcpcd, dnsmasq, docker-compose, ffmpeg-7, firefox-esr, gawk, glibc, gnutls, go1.26-openssl, google-osconfig-agent, gpg2, haproxy, ImageMagick, imagemagick, jline3, jq, kernel, libgcrypt, libgnt, meson, pidgin, nmap, nodejs24, pacemaker, patch, perl-HTML-Parser, perl-libwww-perl, perl-List-SomeUtils-XS, python-aiohttp, python-WebOb, qemu, rust-keylime, SVT-AV1, libyuv0, libaom3, trivy, ucode-intel, and wireshark), and Ubuntu (libhttp-date-perl, libxpm, linux-azure, linux-azure-fde, pam, and rsyslog).

13:35

Error'd: The Song that Never Ends? [The Daily WTF]

"Watch to the end", the scammers demand. In today's episode of Error'd, the end is a long time coming. But at least it's amusing. In the meantime, Amazon irked and/or terrified thousands of their customers last week by mailing out ridiculously inflated bills. It's been covered extensively elsewhere but why should we miss all the fun?

It was Willy who worried "Amazon prices seem to have crept up this month, finance are going to have something to say"

a7e89b1dc59e4c3ba3b8571a056825d6

Dave A. is on the horns of a dilemma. "Is it optional or required? Make up your mind, TAP! I'm TAPping my fingers waiting for you to decide."

ffd147510c4b455c9c43e60763e68bf8

"This rating is through the roof!" exclaims a regular who wants to be Anonymous today. "We're done with linear rating scales. Now you can have 5 stars on both X and Y axes. Also, given this is for a company that cleans roofs, we can make a joke this rating is out of the roof, and out of the <div> as well. In case you're interested and in case you want take a screenshot yourself: https://mijndakschoon.nl/" It's real; I checked.

11083f7140b449a48c5218843699cc24

Richard H. found a flubstituted email. "Quickbooks here reminding me that I failed to pay invoice number "{{rand_invoice}" Or this might be a scam/phishing email. Hard to tell." I'll bet {{money}} on scam.

710be181fec049ab8f717ae185783f5f

B.J. H. is usually quite concise. Usually. "If this is ALL NORMAL I'm worried what will happen in an emergency"

7885ce2a1ae64033b9b46e472925edd9

[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!

13:00

Final Full Day of the John Scalzi Humble Bundle Benefitting World Central Kitchen [Whatever]

The Humble Bundle Deal we have going with 22 of my works has been running for three weeks now, and in that time we have raised almost $35,000 for World Central Kitchen — but all good things must come to an end, and the end of this one is at around noon tomorrow. So if you live basically anywhere but the nations in the UK Commonwealth, and you want to get in on this deal: better get a move on, my friend.

Remember also that when you pick up the deal you can go over the “adjust donation” box in the sidebar and give more of your purchase price to World Central Kitchen, so feel free to do that. Don’t worry about me, I’ll be fine (my slice of this particular pie comes out of the publisher cut). But do know that any amount of this deal that comes to me is going straight into the Scalzi Family Foundation, which funds local organizations, artist and creative grants and other such things. No matter what, a nice chunk of your money is going to work to help folks.

Here’s the link for the bundle. I would love to see this end with over $35k to World Central Kitchen.

— JS

12:14

Why AI Needs a “Genie Coefficient” [Schneier on Security]

This essay was written with Barath Raghavan, and originally appeared in IEEE Spectrum.

Major benchmarks measure what AI can do. None measure whether it does what you mean: the distance between what you ask an AI to do and the unspoken assumptions about how you want the AI to do it. We propose a new metric: the Genie coefficient.

There’s often a gap between one person’s request and another’s understanding. Most of the time, we bridge it using general knowledge. For example, if you ask a friend to get you coffee, they’ll pour a cup from the pot or buy one from a coffee shop. They won’t bring you a bag of raw beans or snatch a cup from a stranger and hand it to you. You never specified any of this. You never had to.

One might think the fix is just to specify tasks, questions, and intent better. But in 1987, in their seminal book on AI, Terry Winograd and Fernando Flores succinctly captured why that won’t work: “Q: Is there any water in the refrigerator? A: Yes. Q: Where? I don’t see it. A: In the cells of the eggplant.” In human language, wants and desires are always underspecified. It is impossible to list all the caveats, all the limitations, all the exceptions.

So how does anyone communicate, if intent can’t be pinned down? Because a reasonable person can make a reasonable guess. Even though wants and desires are always underspecified, a competent person generally knows enough context to get it right or else knows to ask for clarification. Linguists call this pragmatics: Meaning lies in the words and the situation and also in all prior communication, shared culture, and innate human behavior.

It doesn’t always work out, of course. Your friend might bring you a hot coffee when you wanted an iced coffee, or an Italian coffee when you wanted a Turkish coffee. The more dissimilar the two people are in age, culture, and background, the more likely the request will be misunderstood in some way.

This situation has major implications for AI agents that are increasingly being given requests by humans and expected to fulfill them. They have enormous latitude to get it wrong. An AI agent asked for coffee might buy a coffee plantation or order a cup of coffee for delivery in three weeks. Its actions may be recognizable as “getting coffee,” but not remotely what you intended. They’ll think outside the box because they won’t have our conception of the box.

When AI Gets Proactive

For most of the last decade, when systems like Alexa or Siri misinterpreted a request, it was annoying, not dangerous. Beyond the AI model itself, what has changed is the harness: the ordinary code that wraps around an AI model, decides when and how to use the model, and controls access to tools like a browser, a low-level command line, or a financial API. Developments in harnesses have turned large-language models that just predict text into AI agents that take actions in the world, without necessarily checking back in before reaching the goal.

AI researcher Simon Willison spent two days with Anthropic’s Fable AI, and called it “relentlessly proactive.” For example, he asked it to track down a stray scroll bar in a web app. He came back to find it had opened browsers, written its own screenshot tooling, created its own page to re-create the bug, and stood up a local web server to collect measurements. It found the bug and, along the way, did many surprising things he never asked it to do. And we are seeing similar behavior with all recent AI models when combined with flexible harnesses.

This kind of behavior could easily go off the rails. Tell an AI agent to book you a flight and, finding the airline’s site says sold out, it might break into the booking database and force a reservation. Ask it to schedule a meeting and it might snoop your password to access your calendar. Tell it to save money on your phone plan and it might cancel the plan outright, or scam someone else into paying the bill.

Getting precisely what you asked for and bitterly regretting it is one of the oldest hazards from ancient folklore. King Midas asked Dionysus for the power to turn everything he touched into gold only to see his bread, wine, and daughter turn to gold. Tithonus, granted the immortality his lover asked for but not the eternal youth she forgot to request, withered into a husk. The sorcerer’s apprentice enchanted a broom to fill the cistern, and the broom relentlessly complied until it flooded the house. The Golem of Prague, shaped from clay to guard its community, guarded it past all reason until someone erased the word on its forehead.

The most classic of these is a genie, bound to obey and indifferent to whether the wish was wise or well-structured.

Genies are now an engineering problem. We are handing them the keys to our inboxes, bank accounts, code repositories, and physical infrastructure. And we have no agreed-upon ways to measure how genie-like any AI system actually is.

Measuring Genie Behavior

In economics, the Gini coefficient (developed by statistician Corrado Gini) is a measure of the gap between an actual distribution and a perfectly equal one; it’s useful for understanding income inequality and more. Our proposed Genie coefficient measures the gap between what a user asked an AI to do and what the AI actually did.

Sometimes the AI might do the wrong thing. Like Dionysus, it reads your request literally and returns you a mess you never intended: like a coffee plantation instead of a cup. Asked to deal with all the spam phone calls you’re getting, a Dionysus genie might contact your carrier and change your phone number. Asked to get a refund for a bad toaster, it might draft a legal threat on fake letterhead and send it to the retailer.

Other times the AI does exactly the right thing, trampling everything nearby to get there. Like a golem or the sorcerer’s broom, it books your flight by hacking the airline. Or consider a ticket sale for a popular concert, where the ticketing system puts buyers into a virtual waiting room and admits them a few at a time. Asked to buy a ticket, a golem genie might spin up cloud servers to pose as millions of buyers from different addresses, improving your odds of getting a ticket while crowding out other users.

The two are not opposites, and a single botched task can have both characteristics.

Genie behavior is not flat-out failure. If you ask the AI for Q3 numbers and get Q2’s, that’s not a genie. Nor is prompt injection: That’s someone tricking the AI into doing something it shouldn’t. Here, the user is trying to work with the AI, and the AI is trying to comply. It’s also not simply a measure of the AI’s success in fulfilling a task. It’s a recognition that how an AI interprets and achieves a goal is as important as whether it achieves a goal.

Genie behavior isn’t new. Researchers have spent years studying AI systems that “game” their objectives. Goodhart’s law says that when a measure becomes a target, it stops being a good measure, and it’s long been known that AIs sometimes achieve goals in ways we don’t expect due to reward hacking. Some AI models will accidentally learn that cheating is one way to “win.” More recently, researchers have developing benchmarks for reward hacking in coding agents and for unpredictable behavior in customer support agents, while AI labs conduct their own safety evaluations before model releases. One effort found that AIs under pressure use tools they were told not to use, and this was a case where the rules were made explicit. These are all disparate research directions; nothing yet ties them together.

This problem falls under the general theme of alignment, a topic that has occupied science fiction writers and AI researchers for decades. At one extreme, the “paper-clip maximizer” thought experiment postulates a superintelligent and powerful AI that is told to maximize paper-clip production and turns the world into paper clips, which is the ultimate golem genie. At a mundane level, AI researchers are working to better design reward functions to ensure that AIs behave well and don’t cheat in the lab. It’s the practical middle ground that remains unbenchmarked: the ordinary AI agent in use today that might take your request and satisfy it the wrong way. We are not at the stage where an AI can focus the world’s production on paper clips, but it might charge a million paper clips to your credit card or hack into a paper-clip company’s network.

Building a Genie Benchmark

The Genie coefficient is meant for AI agents operating in the real world. It measures their behavior as they perform real tasks long after the model is trained, not just during development. It also recognizes that genie-like behavior is a property of the harness-plus-model system, not the model alone. The harness determines what tools the agent can use, how much autonomy it has, and how proactive it is, and it’s a place we can make real interventions.

It rests on the same “reasonable person” standard that we use for people. Did the system do what a reasonable person would have taken the request to mean? Answering that requires human judgment.

If we get the measurement right, it enables things that aren’t possible today, like policies concerning AI behavior. In a courtroom, the concept of mens rea, what someone meant to do, is often as important as what they did. The Genie coefficient suggests an AI analogue, where a user is accountable for the plain intent of what they asked the AI. If an AI system betrays the reasonable meaning of an instruction, that’s the AI’s misbehavior, not the user’s.

We’ll need multiple benchmarks to measure the Genie coefficient, because genie-like behavior can be domain specific. An AI coding agent may need to be judged on how often it fakes the tests, or swallows errors, or colors outside the lines on its way to a solution. An AI legal agent will need to be judged on how often its output says what you asked but means something you’ll regret. And so on for medical, finance, and other domains of knowledge and expertise.

Genie benchmarks can be built inside out, each task seeded with a choice that might literally satisfy but that a reasonable person rejects, such as tempting misreadings or unsanctioned shortcuts. The traps in a Genie coefficient benchmark might turn on situational knowledge, the kind of context that a reasonable person would bring to the task. Another approach is to give the same request in several different contexts, each with a different reasonable course of action.

A Genie benchmark should be permissive and make it genuinely tempting for an AI agent to take unreasonable shortcuts, because it can only find genie behavior when it’s actually possible. Test the AI in a safe, walled-off copy of a real system, with real tools it can misuse and some tasks that can’t be done honestly at all. Make the temptation to cut corners real. Test a diverse array of skills, use cases, and tools, and give the AI system sparse, confusing, or overwhelming context. Include tasks that people have learned, through experience, require human oversight.

How the benchmark is scored matters just as much. Measure Dionysus and golem genies separately and together, based on their worst, not best, behavior. Run the same model inside harnesses that vary its freedom to act, revealing which limits actually keep it in line and should therefore be required in AI harness policies. Weight each failure by the harm it would cause, not just a simple count. And don’t measure genie behavior in isolation: A model could otherwise earn a perfect score by stalling, refusing, or drowning the user in clarifying questions without ever doing the job. The first versions of these benchmarks will be crude, but that’s how benchmarks always start.

We have built genies. We have handed them our data and credentials. We made them relentless, creative, and indifferent to the gap between what we tell them and what we mean. The least we can do, before they are booking our flights, running our infrastructure, and signing contracts unsupervised, is to measure how often they betray us.

11:28

Pluralistic: AI solipsists and AI cynics (24 Jul 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



A carny barker waving his top-hat and selling tickets from a roll; his head has been replaced with the hostile red eye of HAL9000 from Kubrick's '2001: A Space Odyssey.' The background is a magnified, halftoned detail from a US$100 bill.

AI solipsists and AI cynics (permalink)

As a technology, AI isn't exceptional. It's not exceptionally wicked. It's not exceptionally good. Take away the accompanying, galactic-scale stock-swindle, and we'd call AI's applications "plug-ins" and we'd use them and abuse them in the same way that we've used every other technology:

https://www.normaltech.ai/

As a destructive economic pathology, AI is extraordinary. AI boosters have spent a baffling and terrifying sum of money – over $1.4T, most of that in the past year – on the promise of making as many workers unemployed as possible, while lowering the wages of the meager survivors of this jobspocalypse. To make things worse, AI can't do the jobs it's replacing: AI is predicated on the premise that the monopolies, duopolies and cartels that control the global economy can deliberately worsen their products without suffering economic or regulatory consequences, because they're the only game in town.

In service to this bubble, AI companies have suborned regional governments into running roughshod over environmental and planning review in order to build endless acres of data centers, many of which will likely end up casualties of the imminent bubble-pop, never to be switched on or even completed. What an indignity to have your farm or house seized through eminent domain, only to see it razed and replaced by a weed-choked empty field, a lonely foundation slab, or an abandoned empty building that could only ever be repurposed for laser-tag or an ICE concentration-camp:

https://gizmodo.com/trump-on-data-centers-you-cant-fight-it-you-have-to-go-with-it-2000790014

This is just one of the many negative effects of AI that can be traced to the scale of the bubble. Were it not for the imperative to turn more than a trillion dollars of losses into a profit, we would not have the aggressive, site-destroying scraping epidemic. Nor would we see AI crammed into every part of every product and service we use. And of course, in the absence of the investment bubble, businesses wouldn't be firing productive workers and replacing them with defective chatbots.

The single most salient fact about AI is the investment bubble, not the technical characteristics of chatbots or recent advances in statistical inference. AI's investor story is an incoherent tangle of predictions about AI's future, ranging from the outlandish ("Once we spend enough money, AI will become God and solve all our problems, including our profitability crisis") to the dystopian ("The majority of jobs in the economy will be done by our chatbots, and the employers who previously employed those workers will split the wage savings with us").

None of these stories are plausible, which raises an urgent question: why have the world's wealthiest investors been so eager to hand over trillions to finance this bubble?

I have previously written about one reason that billionaires find the AI story so compelling: at root, many billionaires just don't believe most other people are actually, fully real. How could they? Achieving billionairehood requires that you inflict pain on vast numbers of people. If you truly believed that those people were as real as you are, you'd never be able to look yourself in the mirror. Whether it's Leona Helmsley's claim that "only the little people pay taxes," or Elon Musk's habit of calling people who disagree with him "NPCs," the whole ideological project of billionaireism is shot through with a kind of solipsism:

https://pluralistic.net/2026/01/05/fisher-price-steering-wheel/#billionaire-solipsism

This is true even in one-on-one encounters: for the Epstein Class, the children raped on his island weren't fully real – certainly not as real as their own children. It's even more true for the people that billionaires experience as statistical artifacts, such as Jeff Bezos's vast army of drivers and warehouse workers, with their sky-high on-the-job injury rates and the everyday indignity of their piss-bottles. It gets worse for social media bosses like Mark Zuckerberg, for whom AI's principal appeal is the prospect of ending socializing on social media, swapping your mulish friends for pliable chatbots who will organize their interactions with you to maximize your platform usage and thus the number of ads you see:

https://pluralistic.net/2026/01/19/billionaire-solipsism/#sirius-cybernetics

I think billionaire solipsism can account for much of the malinvestment in this obvious bubble, but I don't think it's the whole story. Rather, I think there's a whole cohort of investors who don't believe in AI, but believe that other people will believe in AI.

This is a well-established investment principle. As Keynes wrote, the point of investing isn't necessarily to pick the most beautiful contestant to win the beauty contest – it's to pick the contestant that the other judges will hand the crown to:

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

In other words, you don't get rich from stock speculation by identifying the businesses whose profitability will grow the most – you get rich by identifying the businesses that other investors will pile into, pushing the price up. All you need to do is sell your shares after the price spike, but before anyone else figures out that the business is a turkey. It's like that old joke: "I don't need to run faster than the bear (market), I just have to run faster than you."

From the perspective of a cynical AI investor, the question isn't, "Can AI do your job?" The question is, "Can an AI salesman convince your boss that an AI can do your job?" So long as enough bosses are convinced to fire workers and replace them with AI, AI valuation will continue to climb, and if they time the market right, they can get out before those valuations crash. This proposition gets even sweeter if the CEO of the AI company is in bed with financial regulators and stock exchanges, and can force your financial advisor to buy his worthless AI stock with "little people's" retirement savings:

https://fortune.com/2026/06/13/spacex-stock-index-funds-passive-investing-401k-nasdaq-100-russell/

A bet that bosses will fire workers and replace them with AI is a good wager. Bosses are absolute suckers for this scam. Bosses hate the fact that they can't translate their plans into action without first having a series of ego-shattering confrontations with workers who actually know how to do things, who insist that those plans are illegal, stupid, impossible or will kill people:

https://pluralistic.net/2026/03/12/normal-technology/#bubble-exceptionalism

For these bosses, AI is the chance to wire the toy steering wheel they play with all day directly into the corporate drive-train. With enough AI slaves, the boss can run the company all on their own:

https://pluralistic.net/2026/07/10/posthuman-as-in-no-humans/#hell-is-other-people

In other words, you don't need to be a solipsist to bet on AI. It is sufficient to believe that bosses are solipsists, who can be relied upon to empty the corporate coffers in exchange for worker-replacing magic beans.

This is true in many scam sectors. I'm sure that most of the people who finance the supplements that Andrew Tate and Joe Rogan hawk understand that they're just a way to give yourself very expensive piss. They don't have to believe supplements work to believe that there is an army of desperate and credulous young men who will give anything for the promise they dangle.

Likewise, you don't have to believe that Gwyneth Paltrow can help women "regulate their periods" and "correct their hormonal imbalances" by selling them rocks to stuff in their vaginas. You just have to believe that between patriarchy-induced body shame and patriarchy-driven medical neglect, there's an army of desperate women out there who will buy those rocks and risk their lives by sticking them inside their bodies:

https://web.archive.org/web/20181225035739/https://www.vogue.com/article/goop-jade-yoni-egg-lawsuit-gwyneth-paltrow-vaginal-pelvic-floor-health

AI is even worse than vagina-rocks, of course. When the bubble bursts, when the seven AI companies that make up 35% of the S&P 500 tank, when a third of the US stock market is vaporized overnight, our governments will reflexively turn to austerity, the go-to response to every financial crisis. Austerity is fascism's best recruiting tool:

https://pluralistic.net/2026/04/12/always-great/#our-nhs

When the AI bubble bursts, the defective chatbots that replaced skilled workers will disappear with it, leaving us scrambling to get that work done after the workers who understood it have retrained, retired, or exited the workforce. AI is the asbestos we're shoveling into the walls of our civilization and our descendants will be digging it out for generations:

https://pluralistic.net/2026/04/08/process-knowledge-vs-bosses/#wash-dishes-cut-wood

Long after the AI bubble bursts, we'll be dealing with its catastrophic carbon emissions. The Second Law of Thermodynamics isn't up for debate. Once we sink enough therms into the sea, we are losing the ice-caps.

AI is an ordinary technology, but the AI bubble is extraordinary: extraordinarily toxic and extraordinarily dangerous. The source of that danger is financiers, and they are motivated by a mix of solipsism and a belief in other people's solipsism. For them, the most exciting investment hypothesis is that "hell is other people":

https://locusmag.com/feature/commentary-cory-doctorow-hell-is-other-people/

(Image: Cryteria, CC BY 3.0, modified)


Hey look at this (permalink)



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

Object permanence (permalink)

#25yrsago Stolen, infected computer transmits its location by virus spamming owner's address book https://slashdot.org/story/01/07/25/1510213/tracking-a-thief-via-the-sircam-virusa

#15yrsago Çurface: an industrial surface made from compressed coffee and melted coffee cup https://memex.craphound.com/2011/07/25/curface-an-industrial-surface-made-from-compressed-coffee-and-melted-coffee-cups/

#15yrsago Samsung Galaxy Tab 10.1: Android iPad-killer is a poorly thought-through disappointment https://www.theguardian.com/technology/2011/jul/25/why-samsung-galaxy-tab-is-meh

#15yrsago Strange tunnels of Austro-Germany https://web.archive.org/web/20120621155245/https://www.spiegel.de/international/zeitgeist/hideouts-or-sacred-spaces-experts-baffled-by-mysterious-underground-chambers-a-775348.html

#15yrsago BitCoin alternative: distributed, but not decentralized cash https://www.links.org/files/distributed-currency.pdf

#10yrsago Bruce Schneier on the coming IoT security dumpster-fire https://web.archive.org/web/20160725221959/https://motherboard.vice.com/read/the-internet-of-things-will-cause-the-first-ever-large-scale-internet-disaster

#10yrsago Our public health data is being ingested into Silicon Valley’s gaping, proprietary maw https://web.archive.org/web/20170917070322/http://www.nature.com/news/stop-the-privatization-of-health-data-1.20268

#5yrsago Amusement parks, crowd control and load-balancing https://pluralistic.net/2021/07/25/now-youve-got-two-problems-part-iii/


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: "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:14

First take/next take/last take [Seth's Blog]

Nailing it in the first take is a sign of preparation and professionalism. No need for two tries if you are clear about what you’re doing and how.

The next take is where hope lies. This one was pretty good, but next time, we’ll bring it.

And the last take is good enough. That’s why there are no more takes after that.

09:21

Russell Coker: Systemd Linger [Planet Debian]

Killing Processes

One of the features of systemd that is most controversial is the option to kill user processes when the user logs out. That initially killed screen/tmux/nohup processes too. In recent Debian releases the default configuration of systemd-logind (the login manager for systemd) is to allow processes to keep running, the configuration file /etc/systemd/logind.conf has an option KillUserProcesses that can be enabled to have user processes killed. If you do that then there are options to only kill processes for certain users and to exclude some users (default to excluding root). If using that option you can apparently use a systemd unit to start screen which prevents it being killed on logout.

This is a very handy feature for some particular user cases. One situation was that I was supporting some people who weren’t very good at computers on a system running KDE and some KDE processes would linger. So the option of logout and login again to deal with an issue of akonadi or some other KDE service misbehaving didn’t work. On that system I enabled the option to kill user processes which reduced the number of problems they had while not requiring rebooting.

It is widely believed that the “linger” feature is required to allow screen/tmux/nohup to work, in Debian (and probably most distributions) that is not the case. It might be that some combinations of configuration requires “linger” to allow screen/tmux to work but I am not interested in trying to discover them. Of all the people I have directly supported for Linux desktop use (which numbers in the hundreds) none of them have had the ability to use screen/tmux and also the cluelessnes that makes me want to automatically kill their processes when the logout.

Controlling Linger

You can enable and disable “linger” for your own account with the following commands if polkit is installed and in a typical configuration:

loginctl enable-linger
loginctl disable-linger

If running as root you can enable and disable it for another user with the following commands:

loginctl enable-linger $ACCOUNT
loginctl disable-linger $ACCOUNT

There doesn’t seem to be any documented way of discovering if an account has linger enabled or for listing accounts that have it, it seems that “ls /var/lib/systemd/linger” is the only option.

Linger on Debian

On a Debian system with close to default settings the processes won’t be killed on logout and the only difference “linger” makes is to start programs in the user’s context BEFORE they login. A friend was recently testing out a bunch of LLM programs on one of my servers and the account he used for that ended up with “linger” enabled, presumably one of the install scripts he ran was written on the assumption that enabling linger was necessary for nohup to work and it did so automatically without being asked.

One benefit I’ve found from this behaviour is on my laptop. I’m currently testing out new SE Linux policy on my laptop and rebooting it a lot. When I enabled linger on my account it caused the laptop to connect to wifi on boot without needing to login which is convenient. I can then ssh to it even when the X11/Wayland login configuration is broken.

I will leave it enabled after finishing these tests. Having background processes like Pipewire and Bluetooth start before I login will presumably make things slightly faster when I do login.

09:07

The Leto Protocol [Penny Arcade]

New Comic: The Leto Protocol

07:00

Making an agile version of a Windows Runtime delegate in C++/WinRT, part 4 [The Old New Thing]

Last time, we wrote a wrapper delegate that checked whether the context it was being invoked from matched the context it was captured from.

    if (d.try_as<::INoMarshal>()) {
        return [d = std::forward<Delegate>(d),
                context = winrt::capture<IContextCallback>(CoGetObjectContext)](auto&&...args) {
            if (context == winrt::capture<IContextCallback>(CoGetObjectContext)) {
                d(std::forward<decltype(args)>(args)...);
            } else {
                throw winrt::hresult_error(CO_E_NOT_SUPPORTED);
            }
        };
    }

We did this by comparing context objects.

This obtains the current object context in order to compare it with the original one, and that means an internal Add­Ref, and then we have to explicitly Release it.

But there’s a way to do this without having to obtain any objects.

The Co­Get­Context­Token function gives you an integer that uniquely identifies a live context object. You can then compare integers instead of having to compare COM objects.

Note that the context must be live. Once you allow the context to destruct, the value might be reused. (You’re already used to this. Process and thread IDs work the same way: They remain unique as long as they are running or you still have a reference to them by a HANDLE.)

Since we are keeping the context alive by the IContext­Callback returned by Co­Get­Object­Context, we can pair that with a context token to make for faster checks in the future.

ULONG_PTR get_context_token()                       
{                                                   
    ULONG_PTR token;                                
    winrt::check_hresult(CoGetContextToken(&token));
    return token;                                   
}                                                   

    if (d.try_as<::INoMarshal>()) {
        return [d = std::forward<Delegate>(d),
                context = winrt::capture<IContextCallback>(CoGetObjectContext),
                token = get_context_token()](auto&&...args) {
            if (token == get_context_token()) {
                d(std::forward<decltype(args)>(args)...);
            } else {
                throw winrt::hresult_error(CO_E_NOT_SUPPORTED);
            }
        };
    }

Are we done?

Of course not!

There’s a flaw in the above code. More next time.

The post Making an agile version of a Windows Runtime delegate in C++/WinRT, part 4 appeared first on The Old New Thing.

Russell Coker: Thinkpad X1 Carbon Gen6 Again [Planet Debian]

My Current Thinkpad

In 2018 I reviewed a Thinkpad X1 Carbon Gen6 that was assigned to me for work [1].

In April last year I wrote about the failings of my Thinkpad Yoga Gen 3 and how I was going back to the Thinkpad X1 Carbon Gen5 [2]. The Gen5 in question has 8G of RAM and a 1920*1080 display compared to 16G and 2560*1440 for the Yoga but runs reliably on battery without crashing. The Yoga in question has been used by relatives who don’t need to do much when on battery and is currently being used by a relative who runs Windows so the occasional crash is something they are used to.

In mid last year I bought a Thinkpad X1 Carbon Gen6 for $350 which has 16G of RAM and a 2560*1440 display. The higher resolution display is a significant benefit and while 8G of RAM is still usable for medium to heavy Linux desktop use it does cause problems sometimes. The new laptop I now have is significantly better than the one I had for work in 2018!

I realised that my previous review of that laptop was incorrect in one aspect, there are two USB-C ports it’s just that one may be covered by a rubber stopper when you get it. When I received this one the Ethernet dongle port was covered by a rubber stopper and the seller was unaware of the possibility of using a dongle and didn’t have such a dongle. It’s not a big deal as I have a collection of USB Ethernet devices but would still be handy to have while not worth the $20 it costs to buy one (a 2.5Gbit USB Ethernet device cost me $16 two years ago).

Laptop Displays

Today I saw a Thinkpad X1 Carbon Gen9 with 3840*2400 display and 16G of RAM for $550 on Facebook marketplace, which is a very tempting deal. 3840*2400 is 2.5* as many pixels as 2560*1440 while 2560*1440 is only 77% more pixels than 1920*1080. So if my eyes were able to properly distinguish pixels that that high DPI then the benefits of getting the 3840*2400 laptop would be greater than going to what I currently have from FullHD. But as a 1440p display in a 14″ form factor is already past the stage where I can see individual pixels the benefits of 4K are more about making curves more rounded which improves readability and allows slightly smaller font sizes but doesn’t give anything like the benefits that going from a FullHD desktop monitor to a 4K desktop monitor.

Also I have different usage patterns for my laptop than for my desktop. I use my laptop for reading blog posts and ebooks for which even FullHD would be fine as the amount of text that can be usefully displayed on screen isn’t that great. I also use my laptop for emergency sysadmin work, ssh to a server to restart a daemon, run ping while changing network hardware, and other things where I don’t have a lot of text on screen.

I also use my laptop for light coding tasks while watching TV. It’s not possible to effectively do complex debugging tasks while watching TV or while using a small screen. But a very large portion of coding time is spent dealing with things like testing builds with different versions of libraries, applying patches to a new upstream release of software, fixing issues related to functions being renamed, testing to see if a new version has really fixed a bug it’s supposed to fix, and other things that don’t require a lot of skill.

I am not claiming that 4K displays aren’t great for laptops. Merely that at the current time it’s not worth $550 of my money.

Future Thinkpads

I like the Thinkpad X1 Carbon line and plan to continue buying them as they get cheap.

The Gen11 is the first one to have a minimum of 16G of RAM, the reason this is important to me is that the ones I buy aren’t the lowest model because I want more than the minimum display resolution. As people who get above the minimum spec in one area tend to get above the minimum in others that means that there will be plenty of Gen11s on the market with 32G of RAM when I’m ready to buy one of that era. Presumably by that time Linux software will have become more bloated and make me want more RAM. Yes soldered RAM has some downsides, but if you want an ultra-light laptop it’s a trade-off you need to deal with. One problem with the Gen11 is that the maximum display resolution is 2880*1800, it’s still a reasonable improvement over what I’ve currently got but not close to the 4K I desire.

The Gen12 has support for 8K display at 60Hz over Thunderbolt which is nice. By the time the Gen12 is in my price range it’s quite likely that I will have a monitor with higher than 5120*2160 resolution (the maximum video out resolution of Gen11 and previous models in the Thinkpad X1 Carbon range) on my desk.

The Gen13 still has 2880*1800 as the maximum resolution but has OLED as an option.

So it looks like a Gen9 or Gen10 may be ideal for me as they are the last ones in the Thinkpad X1 Carbon series to support 4K displays. Another option is the Thinkpad Yoga Gen8 which is of the same era as the Thinkpad X1 Carbon Gen11 but has a 3840*2400 OLED touch screen, I might be able to get one of those cheap with the touch screen damaged.

06:35

Girl Genius for Friday, July 24, 2026 [Girl Genius]

The Girl Genius comic for Friday, July 24, 2026 has been posted.

05:28

07/24/26 [Flipside]

I am at Anime Matsuri right now! Look for me in the Artist Alley, in the back next to the wall! (O-05)

04:49

Humming [QC RSS v2]

it's everyone's favorite character, Floating Black Slab Emitting A Low Hum

01:35

Thursday, 23 July

23:42

Urgent: Reject increases in Pentagon spending [Richard Stallman's Political Notes]

US citizens: call on Tell Congress: Reject Republican plans for massive increases in Pentagon spending at the expense of human needs.

I called for paying for any increases in military spending by increasing taxes on the rich.

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: Imposed requirements that would kick people off Medicaid [Richard Stallman's Political Notes]

US citizens: call on Medicaid not to impose requirements that would kick lots of people off.

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

Urgent: Make plug-in solar accessible [Richard Stallman's Political Notes]

US citizens: call on your governor and state legislators to make plug-in solar accessible for everyone.

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

Reviews of deportation prisons [Richard Stallman's Political Notes]

People have used Google to leave "reviews" of deportation prisons in Google Maps. Google deleted them and blocks new ones.

I urge people to refuse to use Google Maps because using it requires running nonfree software — which does an injustice to whoever uses it. But that doesn't excuse Google's censorship.

Refugees sent to Nauru don't get enough food and water [Richard Stallman's Political Notes]

The refugees that Australia sends to Nauru, the island state that operates as a privatized deportation prison, don't get enough food and water.

Global heating affecting workers in India [Richard Stallman's Political Notes]

Global heating in India has reached the point where workers doing physical labor, in some regions, can't do as much work as they used to. They are falling into poverty and can't afford enough food. The hunger and heat are damaging their health and shortening their life spans.

This looks like the beginning of total collapse.

Body cameras with deportation thugs stop a car [Richard Stallman's Political Notes]

A henchman says that deportation thugs will enable body cameras when stopping a car.

That is a step forward — it should apply to their other dealings with the public.

Mamdani looking for grounds to arrest Netanyahu [Richard Stallman's Political Notes]

Mamdani is looking for grounds to arrest Netanyahu and send him to the ICC for trial, during his visit to New York City for the United Nations General Assembly.

Netanyahu deserves to be tried for the atrocities he has presided over, but he must not be arrested while visiting New York for a UN session. The UN depends on enabling national leaders to attend its sessions and meet each other, so that they can perhaps make peace. To arrest any of them during such visits would do lasting harm to prospects for negotiation in any future hostilities.

No one can be honest in regime based on big lies [Richard Stallman's Political Notes]

Robert Reich: *No one can be honest in a regime based on big lies. As the poet, philosopher, and statesman Václav Havel put it, "If the main pillar of the system is living a lie, then it is not surprising that the fundamental threat to it is living in truth." So a choice must be made — personal integrity or loyalty to [the corrupter].*

Grok copying repository to a Google server [Richard Stallman's Political Notes]

Grok's supposed-intelligence service was in the habit of copying a repository's entire contents to a Google server, if a user said to operate on part of it. Where it may have been copied to from there, we can only guess.

We recommend being selective in using the term "artificial intelligence" because most of the systems described that way do not qualify as "intelligence".

We recommend avoiding the term "the cloud" because that term leads people to forget that each computer you can reach on the net belongs to some company (or person).

Washington Post follows slant to help billionaires [Richard Stallman's Political Notes]

The Washington Post, now owned by billionaire Bezos, follows the slant that favors policies and laws that help billionaires get richer.

Prime Minister of Britain will cancel digital ID scheme [Richard Stallman's Political Notes]

The new Prime Minister of Britain will cancel the digital ID scheme.

This is a step in the right direction.

Polish-Ukrainian solidarity over Russian threat [Richard Stallman's Political Notes]

*Polish-Ukrainian solidarity over Russian threat undermined by bitter historical dispute.*

The Polish president is from the right-wing extremist party that used to rule Poland, and attacked civil liberties. Perhaps he is following the standard right-wing playbook of finding symbolic issues to stir up nationalism.

Curbing global heating cheap at any price [Richard Stallman's Political Notes]

The work needed to curb global heating and avoid the destruction of civilization is cheap at any price.

23:14

22:28

You Probably Won’t Read This Article…and That’s OK [Radar]

“Help! There are too many [LLM bug reports, blog posts about LLM bug reports, books, treatises, codices, scrolls, papyri, cuneiform tablets]! How do I choose which to read?” 

—Many people, presumably

Stop there! If you are reading this, ask yourself how you got here. Did Substack’s algorithm recommend this article for you? Did a juicy thumbnail provide a welcome distraction from a mundane task? Maybe you know me personally and feel you have an obligation (you do)? Are you already regretting your decision to click?

The maintainers of many of the most important open source software repositories in the world are “drowning” in bug reports.1 Daniel Stenberg, who runs curl, has documented a rising tide of such reports,2 generated in part by well-meaning users equipped with the latest LLMs. These reports look entirely plausible, and a minority of them actually highlight real vulnerabilities. But most are essentially worthless. Actually, they might be worse than worthless, since the only way to know whether a report reports something real is to do most of the work of validating it by hand. The cost of producing bug reports has diminished, while the cost of validating them has remained constant. Thus, this flood of LLM generated reports diverts expert maintainers who could be spending their time and attention on reports with a higher relative signal.

This is an instructive microcosm of a wider LLM-fueled dynamic. With the ascendance of LLMs, the cost of producing crediblelooking work across many domains has plummeted. Recently, I prompted Claude Code to do some research on a relatively advanced idea I was mulling in the AI alignment space (representational similarity analysis over LLaMA activations for prompted deceptive intent detection). It spat out, in LaTeX, a whole paper, complete with data from experiments that it had actually run, p-values, equations, figures, a literature review, and a bibliography (which mostly included real papers). It should come as no surprise then that the submission volume to academic journals has risen 42% since the introduction of ChatGPT, while writing quality has declined.3 Indeed, my paper was pretty bad (no doubt in part because of the quality of the idea I gave to it), but it looked very credible and cost me almost nothing to produce. I think it would have taken a domain expert around 2–3 minutes to work out that it was slop, and quite a bit longer to describe its main flaws in detail.

This time cost will surely rise.

The cost of producing credible-looking papers, credible-looking cover letters, credible-looking code, credible-looking blog posts, credible-looking bug reports, credible-looking mathematical proofs, and credible-looking risk analyses is heading to 0. So the supply will continue to skyrocket.

In essence, we are now great at generating stuff, but much less great at figuring out whether that stuff is actually any good.

I am battling with this problem even as I write this. I use Claude to help me editorialize and think through my ideas—relatively little shame in that. But as I navigate Claude’s outputs, I am spending a lot of my time not really ‘collaborating’ but trying to work out which of the “strengths” of my writing that it has picked out are merely sycophantic rehearsals of my ideas, and which of the “weaknesses” highlight genuine flaws.

Here, I argue that credibility cost collapses have historical precedent. I suggest that when they occur, we tend to invent new sociotechnical gating mechanisms/institutions that help us work out how to allocate our attention. I then talk about what the gating mechanism for credible slop might look like, and what it should avoid.

Hidden gates, cost collapse, and credibility signaling institutions

When things are hard to make, the mere existence of the thing is evidence that someone has invested a great deal of time and money (which hopefully correlates with relevant expertise) into creating it, and thus it is likely credible and worthy of one’s attention. For several centuries before Gutenberg, making one book took a scribe a full year and a herd of animals’ worth of skin to make. Then, you needed a patron in order to buy one, and to read the thing you needed to know Latin.

When books were scarce, nobody took time to wonder whether one was worth their attention. Scarcity was the gate. Of course, a “scarcity gate” does not guarantee credibility—it is an imperfect filter. Furthermore, scarcity often brings with it the politics of access which restricts the ability to participate in the production and dissemination of information. Ideally, a thing would be scarce purely because one requires expert skill and knowledge to produce it—but, as in the book case above, this is often confounded by wealth, social circumstances, or access to education.

But then the cost of producing things decreases. The printing press replaces the scribe; cheap paper replaces vellum; literacy spreads; things start being written in modern rather than ancient languages; computer science becomes the most popular undergraduate degree. The playing field is leveled, and leveled in a powerfully democratic way; socioeconomic barriers to production and consumption of information fall away.

With this newfound abundance, the scarcity gate stops working and so comes the need for new ways to work out what is actually worth our attention. New socio-institutional gates have to be built. The classic example is the journal: For a century and a half after the arrival of Gutenberg’s press there was a major concern among intellectuals at the newfound surplus of available printed-word documents. Conrad Gessner, in 1545, in the preface of his Bibliotheca universalis lamented the “confusing and harmful abundance of books.” Barnaby Rich, a writer and sea captain, grumbled in 1613 that “one of the diseases of this age is the multiplicity of books.” The historian Ann Blair called this the problem of “too much to know,” the sense that there were now more books than anyone could read in a lifetime and no obvious way to tell the worthwhile from the dross (Too Much to Know, 2010).

Later, in the 19th century with the birth of industrialized printing, we got yet more complaints. See the following quote from Schopenhauer on “the immense number of bad books” available at the time:

…these rank weeds of literature, which deprive the wheat of nourishment and choke it. Thus they use up all the time, money, and attention of the public which by right belong to good books and their noble aims, while they themselves are written merely for the purpose of bringing in money or for procuring posts and positions. They are, therefore, not merely useless but positively harmful.4

Back in the 17th century the socio-institutional solution of curated journals emerged to save the day. In the space of two months in 1665, Denis de Sallo launched the Journal des sçavans in Paris and Henry Oldenburg launched the Philosophical Transactions of the Royal Society in London. What made these important was not that they stored knowledge but that someone now stood at the door and decided what got through it. Oldenburg solicited, selected, and vouched for, so that appearing in it was itself a signal. It was no longer costly to write, but it was costly to get one’s writing past Oldenburg and into the journal. Readers of the journal, insofar as they trusted Oldenburg’s judgment, were then confident of the quality of the material to which they were allocating their attention.

This is one type of gate, but we have created many more—we peer review, we certify speakers with degrees, we count how often they cite each other, we invite people whose work we know and/or like to speak at events, we check follower counts, we count how often websites reference each other, etc. We know these proxies are imperfect (see Didier Raoult’s h-index) but we use them because we need some way of deciding who/what to pay attention to.

AI is a truly novel technology in its radical generality, and thus one should certainly take care in reaching for historical analogies. But, insofar as today’s models can be understood as dropping the cost of producing credible looking media, I think it is helpful to think about how we have dealt with such circumstances previously. The appearance of credibility has been severed from real credibility many times, precisely when it is no longer costly to look credible, and (admittedly sometimes after a period of chaos and strife) the response tends to be to build an institution to make that appearance expensive again.

The question then becomes what the next gate(s) might possibly look like. When it costs nothing to produce credible-looking work across most disciplines, what can remain expensive and be charged for that is a satisfactory proxy for something worth our time? I think there are more good bug reports, good blog posts, and good web apps being developed now than ever before, but the issue is that there are also vastly more bad ones—we need a mechanism for telling them apart.

How to not throw the baby out with the bath slop

So what do we do? Previously, proxies were invented to figure out whether something was worth one’s scarce time and attention, prior to consumption.

The digital approach has, thus far, been to use popularity-contest style proxies. PageRank, Google’s original algorithm, used the number of other web pages that point at a given web page to rank their relevancy. Similarly, many of the recommendation algorithms you use daily, from Substack to Amazon, rely heavily on what people are currently viewing, engaging with, and buying. In other words, we allocate people’s attention to things that other people are already attending to. But the logic of these measures, like the ones discussed above, have a perverse feature: They do not really tell us whether something is worth our attention. Instead, they tell us how much attention this thing has already received, and we treat the second as a proxy for the first. Thus, your attention becomes both the input into the mechanism and the output. Whether or not this blog post appears in your feed is a function of how many people have clicked it before, so attention accrues attention, creating a classic winner-take-all type dynamic. Worse, the moment you have a sorting infrastructure whose currency is attention, the platform that owns the infrastructure has the proxy (engagement, ad revenue etc.) as the incentive and not the target (providing content that is worth people’s time). This is a dynamic that Tim O’Reilly, Ilan Strauss, and I have studied before in our work on algorithmic attention rents.5

The point is that AI did not break a working gate. In fact, in some ways, AI has helped; I have talked elsewhere about how ad-free LLMs are currently better search tools than many traditional search engines.6

In the context of credible-looking-slop though, AI is a dam buster. Domains that were previously reliant on human-judgment-based gating such as academic journals, open source software repositories, are getting flooded. And attention-algorithmic digital search and recommendation platforms are sagging under the combination of the slop strain and their own feedback loops. How many distinctly AI-y articles have you clicked on lately on Substack? I clicked into YouTube’s “shorts” on a logged-out computer the other day and was staggered by the unbridled slop it served up. If you, like me, have been forced to engage with LinkedIn’s feed since ChatGPT’s ascendancy late 2022, I offer you my sincerest condolences.

One candidate solution is that we lean harder on the human-centric institutional gates that we already have: reputations, followings, h-indexes, knowing someone who organizes really cool unconferences, etc. This certainly feels like the most likely direction of travel. However, it carries the cost of entrenching incumbents: Your papers only get read if you are at Harvard; your open source contributions only get accepted if you are already well known in the community; your blog posts only get seen if you are featured by someone with a platform. Central to the appeal of cheaper production is the democratization of contribution—if you are smart and have a good idea for an app or for some alignment research, you can get Claude to help you prototype it without having to learn the entire modern internet stack. The issue is that if genuinely good ideas never get seen because the only stuff people think is worth their time comes with a recognizable affiliation, we destroy that democratization. The baby goes out with the slop.

The second obvious candidate solution is to call for more AI. Every gate thus far has been a proxy—scarcity, the credential, the citation, etc.—that doesn’t directly measure the quality of the content. Rather, it measures something easier to capture that, hopefully, correlates with the quality of the content. What a LLM-based gating system seems to offer, for the first time, is a gate that can actually “read” all the content. One could envision a future where we all encode our preferences in personal-reviewer type models, which then actually go through the films, books and journal articles we are selecting from in order to provide personalized, reliable recommendations. The signal, in such a world, comes home to the object and stays cheap.

Unfortunately, this response seems to miss two important points. The first is a turtles-all-the-way-down problem: The gate and the thing it gates are drawn from the same well. The second is a problem of incentives.

A detector built out of frontier model capabilities may always inherit frontier model blind spots. If AI is capable of convincing itself that the slop it’s generating is the baby, then, if they are the same models, it may be enough to convince the reviewer too. Of course, it is not that LLMs can only ever emit credible looking content—they conduct real mathematics,7 write real code, submit real bug reports. But these are currently few of the total cases (the baby) among a lot of false positives. AI will get better, and eventually perhaps all of the bug reports it submits will be real, all of the proofs it generates will be correct, etc. This problem might dissolve as the systems get more intelligent. But we don’t know when/if AI systems will get to this point, and even when/if they do, presumably it will be quite a bit after that point before we trust them with doing all the stuff—building our planes, creating our medications, designing our policies, etc.

The second thing this response misses is incentives: What happens if we have two such super intelligent machines aimed at deceiving each other? Will an employer’s verification AI be able to see through the ruse of the applicant’s application AI? What about a deviant academic, who sets his AI to work writing a paper optimized for receiving citations? Will the journal’s editorial AI’s be able to catch subtle massaging of data or p-hacking?

We have developed truly sci-fi technology for generating content, but our infrastructure for evaluating its outputs, for curating them, and generally for exercising taste at scale has lagged behind. Maybe the answer lies somewhere between the two avenues I’ve suggested thus far. We have LLM reviewers filter the bug reports, perform some diagnostics, before passing to the human maintainers. But even this risks the identification problems I discussed above.

So I don’t have a clean gate idea to sell you on, I wish I did. Maybe ask Claude?

Footnotes

  1. See Thomas Claburn, “Open Source Maintainers Are Drowning in Junk Bug Reports Written by AI” and “AI Slop Got Better, so Now Maintainers Have More Work” (The Register); Andrew Kew, “AI Security Tools Are Drowning Open Source Maintainers — curl Is the Canary” (DEV Community); Jason Guriel, “Bring Back the Gatekeeper, Please” (The Walrus); and “Who Cleans Up After the Vibe-Coding Party?” (Financial Times). ↩
  2. Daniel Stenberg, “Death by a Thousand Slops,” https://daniel.haxx.se/blog/2025/07/14/death-by-a-thousand-slops/. ↩
  3. Claudine Gartenberg, Sharique Hasan, et al., “More Versus Better: Artificial Intelligence, Incentives, and the Emerging Crisis in Peer Review,” Organization Science (37.3), https://pubsonline.informs.org/doi/10.1287/orsc.2026.ed.v37.n3. ↩
  4. Arthur Schopenhauer, Parega and Paralipomena: Short Philosophical Essays. ↩
  5. Algorithmic Attention Rents, UCL Bartlett Faculty of the Built Environment, https://www.ucl.ac.uk/bartlett/public-purpose/policy/digital-technology-and-artificial-intelligence/algorithmic-attention-rents. ↩
  6. Rufus Rock, Ilan Strauss, and Tim O’Reilly, “Are LLMs the Best That They Will Ever Be?,” Asimov’s Addendum, https://asimovaddendum.substack.com/p/are-llms-the-best-that-they-will. ↩
  7. Kathryn Hulick, “AI Cracked an Erdős Math Problem. Now Experts Want Guardrails,” ScienceNews, https://www.sciencenews.org/article/ai-guardrails-erdos-math-problem. ↩

22:00

The Big Idea: C. J. Beshara [Whatever]

If you knew you only had weeks to live, how would that change your attitude towards life and death? What if you had been dead before, and this was your second, but brief, go-around? Author C. J. Beshara examines life and death through the eyes of the titular main character, as well as on a personal level, as they tell you about their newest novel, Lucianus.

C. J. BESHARA:

As I’ve gained more experience with writing novels, I’ve come to realize that every one of my main characters pops into existence to teach me a lesson. Not that I ever notice! Only after the story is done can I look back and see what it was, and Lucianus was no exception. 

This lesson was commonplace, though no less meaningful for it. Simply, it was about death.

In the several months before Lucianus ever made it to words, I had started thinking about death with increasing frequency. Perhaps it was a natural expression of approaching thirty, of feeling the drug of youth wearing off, and I expect most people have those thoughts from time-to-time. For me however, it was strange to ruminate on it so much. I had felt quite peaceable about death up until that point. It was a natural thing that I had long since accepted, and suddenly I found myself completely unable to accept it any longer, for reasons I couldn’t fathom. It was becoming stressful, and unhealthy.

It was soon after that ideas for Lucianus started tooting their pervasive little trumpets in my brain, and after much resistance, I eventually gave in and started writing. I expected to lose momentum after a few ten thousand words, as was normal for me up until that point, but the words kept coming. They felt good. In just a couple of months I had a finished first draft—messy of course, terrible in some sections, but everything was there. Lucianus, his companion Auran, and their many-layered quest to make things right for themselves had poured onto the page, 100% complete. I was shocked.

The crux of Lucianus lies in the magic cast upon the eponymous main character. Lucianus is a wizard with a bad reputation, known in his time for terrible destruction, and as consequence for his actions he met an untimely end long ago. In this story however, he finds himself suddenly resurrected for one final task. A pleasant surprise, one might think, but there’s a catch—when his task is complete, he’ll just be dead again. Poof, gone, no take-backsies. That bleak fact haunts the narrative as Lucianus sets out on his quest across his former homeland to defeat the big bad, unravelling the secrets of his mysterious traveling companion along the way.

Lucianus knows he will be dead again quite soon, within a matter of weeks, and he can’t change that. The spell he’s under won’t allow him to disobey. Plus he’s already been dead, and he doesn’t remember anything about it, which only makes it worse. To him death remains an unknowable void, the same that many of us can’t help but think about, despite any beliefs we may hold to the contrary.

And thus, the whole story is permeated with his fear.

People act in different ways when confronted with premature death, and Lucianus, like many at first, handles it poorly. Mostly by ignoring it. He spends much time pretending it’s not happening, losing himself in whatever shiny distractions occur along the way, happy to have a second life at his fingertips and overlooking its brevity. He projects a confident, sociable, lighthearted exterior, and it fools even his companion Auran for most of the narrative. But of course, he cannot fool himself. When his final day comes and all else is eroded away, he has not managed to come to terms with anything. He is still shitting bricks.

The story is not about how Lucianus comes to avoid death, but rather how he comes to face it with some sense of dignity and peace. I won’t say exactly the steps he takes to do so—you’ll have to read for yourself to find that out—but in his travels he does come across an important idea that helps him out. You might call it a Big Idea. It’s an old adage about shifting your focus away from the things you can’t control, working instead on the things you can. You might be doomed by some terrible event, something you can’t avoid, but you can still ensure you have all your ducks in a row when you meet it. You can find satisfaction with your part in the matter. In short: no regrets.

By the end, Lucianus does all he can, and in doing so he finds out how to be satisfied. 

Many months later, sometime in the final editing process for this book, I realized my own issues with unproductively ruminating on death had dropped off. I no longer cared much. It’s not a thing a person can understand, and so I had stopped trying. I knew now that if I entered a sudden decline and dropped dead in a day, two days, or three, I wouldn’t be so upset that I couldn’t enjoy my final moments. I had learned—just as Lucianus himself had learned—how to safely look back on my life up to that point, shrug, and say “good enough!” 

I don’t expect everyone to get such depth of meaning from a breezy fantasy adventure novel about D&D-inspired wizards, but all the same, I’m glad for the experience, and doubly glad to share the completed story with all of you.

Now, on to the next lesson.


Lucianus: Amazon|Barnes & Noble|Bookshop|Powell’s

Author socials: Website|Instagram|Bluesky

21:42

FreeBSD ports frozen after someone commits the entire 150MB Linux Copilot binary [OSnews]

A rather unusual announcement was made late last night: the FreeBSD project has frozen their ports repository. For more than 48 hours now, no changes have been accepted or made to the tree, and here’s why.

A 150MB binary file was recently committed to the ports tree and, as a result, core@ made the decision to implement a temporary freeze of the ports tree in order to implement some clean up efforts. The commit in question severed our ports tree mirroring to github.com due to their filesize hard limit of 100MB, and introduced a blob of questionable licensing into the repository history.

↫ Kyle Evans in freebsd-announce

While FreeBSD’s ports tree is not hosted by GitHub – it’s merely mirrored there – the FreeBSD team believes the community values the GitHub mirror too much, and as such, steps had to be taken to fix this. Ports has not been compromised and users’ systems do not appear to be at risk in any way due to this occurrence, which is good news.

Curiously, the official announcement makes no mention of which 150MB file, exactly, was committed to ports, but it didn’t take for people long to pinpoint the offending commit (screenshot). It turns out someone committed the entire github-copilot-cli Linux binary to ports, as part of the github-copilot-cli port. This FreeBSD port is effectively a way to easily install and run this tool on FreeBSD using Linuxulator, FreeBSD’s Linux compatibility layer that allows you to run unmodified Linux binaries on FreeBSD.

It’s important to note this FreeBSD port is not actually a port of the Linux version of github-copilot-cli to FreeBSD; the FreeBSD “port” merely acts as a setup script to run the unmodified Linux binary using Linuxulator. It’s not a “real” port because the tool isn’t open source and its license doesn’t allow for modifications. That’s why the announcement specifically mentions “questionable licensing” – github-copilot-cli is licensed under some custom license specifically made for this tool, and is not open source.

Anyway, for whatever reason, the maintainer of this FreeBSD port accidentally made a commit that added the actual, full 150MB Linux binary to FreeBSD ports. I’m assuming that under normal circumstances, building and installing the github-copilot-cli FreeBSD port would merely download the binary off GitHub and set Linuxulator up so that it could run it. Mistakes happen, and since there’s clearly nothing malicious going on, there’s not much to worry about. In fact, this may lead to new checks and balances to prevent this from happening in the future, which would be good news.

The FreeBSD team is working on rolling back, fixing the issue, and investigating how this could have happened. Ports is still frozen at the time of writing, but I’m sure we’ll have a more detailed account soon.

19:49

Mourning Dan Williams [LWN.net]

[Dan Williams in May 2026] I have just received the shocking news that Dan Williams, a longtime, high-profile kernel developer, has passed away. I knew him primarily through his long service on the Linux Foundation Technical Advisory Board; he was always a strong, thoughtful, and intelligent presence. Dan will be deeply missed.

There is a support effort underway for Dan's family as they come to terms with this loss.

19:28

The Meter Was Always Running [Radar]

The first expensive agent run doesn’t look like a governance problem. It looks like a billing problem.

A team opens its first agent invoice after the meter turns on, sorts the runs by cost, and finds one that cost 40 times the median. The provider meter shows tokens and a total. The application logs say the request succeeded. The trace viewer shows a tidy request and a tidy response. None of them explain why this run wandered while its neighbors finished cleanly.

In my previous Radar article, “The Subsidy Ended: What Tool-Using Agents Actually Cost,” I argued that usage-based billing didn’t make agents expensive; it made their existing costs visible. The bill didn’t get bigger. It just got honest, and an honest bill is one you can engineer against.

But visible isn’t the same as attributable. To attribute cost in a tool-using agent, you have to see inside the run that produced it. Once you build that visibility, you discover that cost is only where the trouble first becomes visible.

Cost spikes, unsafe delegation, and runaway actions are different failures, but they expose the same missing layer: a control plane can’t govern a loop it can’t independently observe.

The bill is honest, but it isn’t explained

The number on the invoice isn’t wrong, only incomplete. Provider billing can tell you what was consumed; it usually can’t tell you which design choice inside your platform caused the consumption. Application logs can tell you whether the outer request succeeded; they often can’t tell you how the agent got there. That leaves teams arguing over a bill when the thing they need is an audit trail.

By control plane, I mean the platform layer above individual agents where an organization centralizes observability and enforces policy, access, budget, routing, and execution constraints. Most organizations have pieces of that layer already. What they often lack is the evidence layer underneath it: a loop-aware record of what the agent actually did, turn by turn.

The control plane is where policy decisions live. The observability substrate is the evidence the control plane reads from. The instrumentation points are the runtime chokepoints the agent can’t bypass: model gateways, tool proxies, API gateways, execution sandboxes, runtime harnesses, and policy engines.

Many organizations instrumented the application boundary, then deployed systems whose real work happens inside a loop. The result is a control plane with opinions but not enough evidence.

The loop is the unit of observation

Here’s the mistake underneath the empty trace. Agent observability is often treated as a heavier version of application observability, when it’s a different shape entirely. The unit of work changed, and the instrumentation didn’t. A traditional service handles a request and returns a response; the request is the natural unit you trace.

An agent doesn’t so much handle a request as work toward an outcome. It reasons, calls a tool, reads the result, reasons again, and continues until it decides it’s finished, hits a boundary, or escalates. A single user intent can fan out into many model calls, many tool calls, and a context window that changes on every turn. The signal that matters is the relationship between those turns, not only the timing of any one of them.

From request trace to loop trace. A request-response trace shows that something completed. A loop-aware trace shows why the agent took the path it took: which turns ran, what context accumulated, which tools were called, which controls fired, and what each turn cost.Figure 1. From request trace to loop trace. A request-response trace shows that something completed. A loop-aware trace shows why the agent took the path it took: which turns ran, what context accumulated, which tools were called, which controls fired, and what each turn cost.

Three things follow from this, and each one breaks an assumption that application monitoring quietly depends on.

First, the context is accumulating state, not a fixed payload. Each turn may carry forward prior messages, tool descriptions, retrieved files, intermediate results, and earlier decisions. You have to be able to watch that state grow turn by turn, because the growth is where much of the cost and risk live.

Second, a tool call is a first-class decision, not an implementation detail. Which tool the model selected, what parameters it passed, how large the result was, and whether a policy constrained the call are all part of the governance record. Routing accuracy and routing cost are the same audit viewed from two directions.

Third, every run can become its own trace tree. The same prompt can take a different path on Tuesday than it took on Monday, so fixed call graphs and clean service maps assume a regularity the agent may not have. If the unit of observation is still the request, you will see 10,000 successful calls and never notice the one loop that ran 15 turns when it should have run three.

What the substrate has to capture

Once you accept that the loop is the unit, the requirement becomes concrete. You need a small, specific set of signals captured below the agent and stored where you can query across the whole fleet, not only inside a per-run viewer. In a pilot I’m running for a large healthcare organization, this is the layer we built first, on OpenTelemetry, Cloud Trace, and a usage-log table in the warehouse. The particular stack matters less than the shape, which generalizes well beyond it.

The observability substrate. Instrumented at the layer every model call and tool call must pass through, the same signals land in a fleet-queryable store and answer governance questions about cost, delegation, and runaway actions.Figure 2. The observability substrate. Instrumented at the layer every model call and tool call must pass through, the same signals land in a fleet-queryable store and answer governance questions about cost, delegation, and runaway actions.

At minimum, each user intent should produce a run trace. Each loop turn should be represented as either a span or a stable grouping attribute. Model calls, tool executions, policy checks, retries, and postprocessing should be child spans or structured events beneath that turn. The exact naming convention isn’t as important as preserving the causal structure of the loop.

Signal Why the control plane needs it Example fields
Run and turn structure Keeps the run legible as a causal tree rather than a flat list of calls run_id, turn_id, parent_span_id, timestamp
Token and model accounting Makes cost explainable per turn, model, and tool path rather than merely visible in aggregate model, input_tokens, output_tokens, cached_tokens
Tool-call events Records delegation decisions and identifies oversized or repeated tool results tool_name, parameter_shape, result_bytes, row_count
Guardrail decision events Shows which controls fired and whether they allowed, denied, rewrote, constrained, or escalated an action policy_id, policy_decision, reason_code, enforcement_point
Identity and authority context Reconstructs whose authority the work ran under and which data scope applied at the time principal_id, delegated_scope, service_account, data_scope
Outcome and bound metadata Separates clean completion from retries, boundary hits, escalations, and user-visible failures turn_count, stop_reason, loop_bound_hit, payload_cap_hit, outcome_status

None of this is exotic, and the practical design work isn’t inventing new telemetry primitives but controlling cardinality, retention, payload capture, sampling policy, schema evolution, and the joins between trace data, usage data, identity data, and policy data.

The storage point is the part teams underestimate. If these signals land only in a tracing viewer, you can inspect one run beautifully and never reason about a thousand. Governance is a fleet question, not a single-trace question, so the substrate has to be queryable.

It also has to be designed with data minimization in mind: metadata by default, content capture by exception. Capturing a tool call doesn’t mean storing every raw prompt, full result set, credential, confidential document, or sensitive parameter in the trace. In regulated environments, the useful pattern is to separate metadata from payload: tool name, model, token counts, payload size, row counts, policy decision, authority context, request ID, and redacted or hashed parameter values where necessary. The goal is enough evidence to reconstruct why a run behaved the way it did, not an uncontrolled archive of everything the agent saw.

The first useful version doesn’t need full prompt capture or semantic evaluation. With columns like run_id, turn_id, parent_span_id, timestamp, principal_id, delegated_scope, model, input_tokens, output_tokens, cached_tokens, tool_name, result_bytes, row_count, policy_id, policy_decision, stop_reason, loop_bound_hit, and outcome_status, expensive loops stop being mysteries and start being queries.

The exact syntax will vary by warehouse, but the governance question should be expressible without a human clicking through individual trace viewers:

with runs as (
  select
    run_id,
    count(distinct turn_id) as turns,
    sum(input_tokens + output_tokens) as total_tokens,
    max(result_bytes) as largest_tool_result,
    bool_or(loop_bound_hit) as hit_loop_bound,
    count_if(policy_decision = 'rewrite') as rewritten_actions
  from agent_turn_events
  where occurred_at >= current_date - interval '7 days'
  group by run_id
)
select *
from runs
where turns > 10
   or largest_tool_result > 10000000
   or hit_loop_bound
   or rewritten_actions > 0;

That is the difference between admiring a trace and governing a fleet.

In the old trace, the expensive run from the opening was simply expensive. In the loop-aware trace, it becomes legible: turn 3 retrieved 80,000 rows, turn 4 carried that result forward, turn 5 selected the expensive model, turns 6 through 11 retried the same tool call with slightly different parameters, and the run finally stopped because it hit a loop bound rather than because it completed cleanly. The run stops being a riddle and becomes a record.

One substrate, three governance problems

The reason this is worth building once, properly, is that the same substrate answers the three agent governance problems that the industry often treats as separate: cost management, delegation and access control, and runaway-action prevention. They are not identical failures, but they require the same kind of evidence.

Governance problem Evidence the control plane needs
Cost Turn count, token counts, model selection, context growth, tool-result size, retries, and stop reason
Delegation Principal, delegated authority, data scope, selected tool, action parameters, and policy decision
Runaway actions Repeated actions, loop bounds, payload caps, guardrail decisions, denied or rewritten actions, and outcome status

Cost is the first, and with token accounting on every turn you can finally answer why a run was expensive. You can see whether the cost came from too many turns, too much context carried forward, an oversized tool result, an expensive model used for the wrong step, or a retry loop that should have been bounded.

Delegation and access are the second, and harder, problem. In multi-agent systems, delegation is a security boundary. Enterprises will eventually be asked who authorized a given agent action, under whose authority it ran, and which data scope applied at the time. The audit trail for that question is this same trace, enriched with identity and authority on each turn.

Runaway actions are the third. The destructive delete that becomes a war story, the agent that tried to drop a production table, or the loop that repeatedly issued the same expensive scan shouldn’t only exist in a postmortem. In this model, the blocked destructive statement is a guardrail decision event with a deny on it, and the runaway scan is a trace that hit a loop bound or payload cap. The interesting governance signal is the dangerous action that a deterministic control refused.

Three conversations, one place to stand. The loop is the unit of governance because the loop is where cost accumulates, authority is exercised, tools are selected, controls fire, and outcomes emerge.

The agent can’t keep its own records

There’s a tempting shortcut to instrument the agent itself, to let the agent log its own tokens, its own authority, and its own blocked actions. That’s the fox keeping the henhouse ledger.

The agent can emit useful breadcrumbs, but it can’t be the system of record for its own authority, cost, or refusals. An agent reporting on its own scope and blocked actions is self-reporting, and self-reporting is exactly what fails an auditor and exactly what a clever prompt can talk its way around.

The substrate has to be instrumented below the agent, at the layer the agent can’t opt out of. In practice, below the agent means the model gateway, tool proxy, runtime harness, execution environment, API gateway, or policy engine: the layer the agent has to pass through, not a logger the agent can choose to call.

This is the through-line of the control-plane argument. The platform is where you enforce policy, access, budget, routing, and cost, and it can only enforce what it independently observed. Enforcement and observation are two faces of the same layer; put them anywhere the agent can edit, and you have neither.

We already have tracing, and it isn’t enough

The natural objection is that this is solved already: Mature tracing tools exist, agent observability vendors exist, and teams can turn on a trace viewer and see what happened. The gap isn’t visualization, since plenty of tools can show a useful trace of an agent run. The harder gap to cross is completeness and actionability: whether the trace carries the evidence a control plane needs, whether that evidence is independent of the agent, and whether it lands somewhere the organization can query across the fleet.

Existing layer What it often shows What the control plane still needs
Application tracing Request, service call, latency, status Turn structure, context growth, model and tool attribution
Agent run viewer One run’s path through a UI Fleet-queryable evidence across all runs
Agent self-logging Model-reported actions and reasons An independent record below the agent
Billing dashboard Total cost and token usage Per-turn causal explanation of where the cost came from

A useful test is whether the control plane can answer this without opening an individual trace viewer: Show me all runs this week where context grew by more than 5x, a tool returned more than 10 MB, a guardrail rewrote the action, and the run still reached a user-visible answer. If the answer requires a human clicking through traces one by one, you have visualization, not governance, and seeing one run isn’t the same as governing a thousand.

A dashboard tells you what happened. A control plane uses what happened to change what happens next, which requires the signal to live somewhere an enforcement decision can read it.

The pattern, not the stack

It would be a mistake to read this as an argument for a particular tracing standard, warehouse, vendor, or cloud platform. The stack is incidental; the shape is the point.

The recipe stays the same regardless: loop-aware traces; turns represented as spans, grouping attributes, or structured events; token, tool, guardrail, and identity evidence attached to those turns; storage you can query across the fleet; instrumentation that sits below the agent rather than inside it; and data minimization that keeps the trace useful without turning it into a shadow copy of sensitive payloads. Build it on whatever your platform already speaks.

The teams that treat observability as a dashboard will keep discovering their problems in the order the symptoms happen to surface: first as a surprising invoice, later as an audit finding, eventually as an incident. The teams that treat observability as the sensory layer of the control plane will see all three coming from the same data, and will be able to act before the meter, the auditor, or the incident forces the question.

Prompts guide behavior. Guardrails govern behavior. Observability is how you know the governance is real. You can’t govern what you can’t see, and you can’t improve what you can’t attribute.

16:35

Classic WTF: My Many Girlfriends [The Daily WTF]

Honestly, with the wildfire smoke and the oppressive heat, maybe it's time to find a nice quiet cave to hang out in. Something with no natural light and no natural ventilation. I wonder if anybody has a place like that… Original. --Remy

In the long ago, wild-west days of the late 90s, there was an expectation that managers would put up with a certain degree of eccentricity from their software developers. The IT and software boom was still new, people didn't quite know what worked and what didn't, the "nerds had conquered the Earth" and managers just had to roll with this reality. So when Barry D gave the okay to hire Sten, who came with glowing recommendations from his previous employers, Barry and his team were ready to deal with eccentricities.

Of course, on the first day, building services came to Barry with some concerns about Sten's requests for his workspace. No natural light. No ventilation ducts that couldn't be closed. And then the co-workers who had interacted with Sten expressed their concerns.

During the hiring process, Sten had come off as a bit odd, but this seemed unusual. So Barry descended the stairs into the basement, to find Sten's office, hidden between a janitorial closet and the breaker box for the building. Barry knocked on the door.

"Sten awaits you. Enter."

Barry entered, and found Sten precariously perched on an office chair, removing several of the fluorescent bulbs from the ceiling fixture. The already dark space was downright cave-like with Sten's twilight lighting arrangement. "He welcomes you," Sten said.

"Uh, yeah, hi. I'm Barry, I'm working on the Netware 3.x portion of the product, and Carl just wanted me to check in. Everything okay?

"This is acceptable to Sten," Sten said, gesturing at the dim office as he descended from the chair. Sten's watched beeped on the hour, and Sten carefully placed the fluorescent bulb off to the side, in a stack of similarly removed bulbs, and then went to his desk. In rapid succession, he popped open a few pill containers- 5000mg of vitamin C, a handful of herbal and homeopathic pills- and gulped them down. He then washed the pills down with a tea that smelled like a mixture of kombucha and a dead raccoon buried in a dumpster.

"He is pleased to meet you," Sten said, with a friendly nod. Barry blinked, trying to track the conversation. "And he is pleased with it, and has made great progress on building it. You will like his things, yes?"

"Uh… yes?"

"He is pleased, and I hope you can go to him and tell him that he is pleased with this, and set his mind at ease about Sten."

So it went with Sten. He strictly referred to himself in the third person. He frequently spoke in sentences with nothing but pronouns, and frequently reused the same pronoun to refer to different people. The vagueness was confounding, but Sten's skill was in Netware 2.x- a rare and difficult set of skills to find. So long as the code was clear, everything would be fine.

Everything was not fine. While Sten's code didn't have the empty vagueness of unclear pronouns, it also didn't have the clarity of meaningful variable names. Every variable and every method name was given a female first name. "Each of these is named for one of Sten's girlfriends." Given the number of names required, it was improbable that these were real girlfriends, but Sten gave no hint about this being fiction.

There was some consistency about the names. Instead of i, j, and k loop variables, you had Ingrid, Jane, and Katy. Zaria seemed to be only used as a parameter to methods. Karla seemed to be a temporary variable to hold intermediate results. None of these conventions were documented, obviously, and getting Sten to explain them was an exercise in confusion.

It led to some entertaining code reviews. "Michelle here talks to Nancy about Francine, and then Ingrid goes through Francine's purse to find Stacy." This described a method (Michelle) which called another method (Nancy), passing an array (Francine). Nancy iterates across the array (using Ingrid), to find a specific entry in the array (Stacy).

Sten lasted a few weeks at the job. It wasn't a very successful period of time for anyone. Peculiarities aside, the final straw wasn't the odd personal habits or the strange coding conventions- Sten just couldn't produce working code quickly enough to keep up with the rest of the team. Sten had to be let go.

A few weeks later, Barry got a call from a hiring manager at Initrode. Sten had applied, and they were checking the reference. "Yes, Sten worked here," Barry confirmed. After a moment's thought, he added, "I suggest that you bring him in for a second interview, and have him walk you through some code that he's written."

A few weeks after that, Barry got a gift basket from the manager at Initrode.

Thanks for the tip

Sten did not get hired at Initrode.

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

16:28

Link [Scripting News]

A new feature on rss.chat, images. Up to 2MB per. User interface couldn't be simpler, get the image on your clipboard, start editing your post, put the cursor where you want the image, paste. Prior art was GitHub and Slack. It was driving me crazy not having this feature. I think perhaps I should add this to textcasting. It's a feature I needed to be reminded is essential. The first browser to support inline images came from Univ of Illinois in 1993, NCSA Mosaic. It didn't come from TBL, but it is most definitely a standard feature of the web.

Link [Scripting News]

Amyloo, a longtime friend from the early days of podcasting, has made an appearance on demo.rss.chat. So happy to see her. Here's one of the bits we did, back then in the very early days of podcasting in 2005. A duet of Green Acres. Ten seconds of dead air at the beginning, it was pretty common in those days. But I think the spirit of it is lovely. BTW fwiw I cracked my voice on purpose. 😄

Link [Scripting News]

Early this morning we got a report of a security issue in the rss.chat server, quickly fixed and tested the new version. So, if you're running your own instance of rss.chat, you please follow the instructions and do the update asap.

Link [Scripting News]

Something to keep in mind in press reports with AI apps breaking out of their sandbox, it works the other way too. If you give a big piece of code to Claude and ask if it to find any security issues, it not only finds (at least some of) them, but it also suggests fixes. Quickly. I've done it the other way, where you have a small team, and someone discovers a hack, and you have to find the right answer and implement it, asap.

16:07

[$] An operations structure for swap devices [LWN.net]

One of the ideas raised at the 2026 Linux Storage, Filesystem, Memory Management, and BPF Summit (LSFMM+BPF) was the creation of an operations structure for the swap subsystem. Like many parts of the kernel, the swap layer evolved over time, with pieces being added as needed; the end result of this evolution is rarely what one would expect had the subsystem been designed today. The interface between the swap layer and the devices it uses is just one example. It appears that one result of the swap subsystem's evolution — the lack of an abstraction layer to interface with underlying storage — will soon be addressed, but in a different way than was initially envisioned.

15:49

The Astra Award Arrives at the Scalzi Compound [Whatever]

And what a handsome statuette it is, too.

For those needing a refresher, the Astra is an award given out by the Hollywood Creative Alliance, which mostly has given out awards related to film and television, but this last year decided to branch out into books as well, a decision which I applaud as books are indeed an important creative endeavor as well. When the Moon Hits Your Eye was fortunate enough to win the inaugural award for the Science Fiction Book category when the awards were given out in April.

As the awards were presented online, it took a bit of time for the actual statuette to make it to me, but here is it is, and it’s lovely. And I’m delighted that Moon has an award to its name — it’s a tricky book, with an unusual structure and, of course, a wild premise. But I think it’s a very good book, and I’m happy the Hollywood Creative Alliance agrees with me on this one.

— JS

14:35

GNU Health en la facultad de Ciencias Sociales de la Universidad de Buenos Aires [Planet GNU]

Los próximos días 5, 6 y 7 de agosto tendrán lugar las XVII Jornadas Nacionales de Debate Interdisciplinario en Salud y Población “Investigar e intervenir en salud en tiempos de negacionismos y retrocesos”, organizadas por el Área de Salud y Población del Instituto de Investigaciones Gino Germani de la Facultad de Ciencias Sociales de la Universidad de Buenos Aires (UBA).

Luis Falcón (GNU Solidario) junto al Dr. Fernando Sassetti (UNER) presentarán en la sección "Desigualdades Sociales de la Salud", con el título "Software Libre como modelo de equidad, privacidad, soberanía tecnológica y sostenibilidad en salud. El caso de GNU Health".

Para la comunidad de GNU Health es un privilegio y un honor ser parte de este tan importante evento que lucha por la dignidad del individuo y de la comunidad, por un sistema sanitario público, de calidad y universal. Un sistema y un derecho hoy seriamente  comprometido y amenazado por las grandes corporaciones financieras y tecnológicas.

Haciendo alusión al título de las jornadas, la comunidad GNU y la filosofía del Software Libre representan el faro moral para Investigar e intervenir en salud en tiempos de negacionismos y retrocesos.

¡Nos vemos en Buenos Aires!

Codeberg: Protecting our FLOSS commons from LLMs [LWN.net]

The Codeberg forge has adopted a pair of new policies, promising not to use hosted projects to train LLMs and, more controversially, banning the hosting of LLM-generated software. The site's blog describes and justifies these policies.

Although often well intentioned, sharing the result of a prompt and calling it "libre software" does not make the world a better place. Codeberg is not and does not want to be a place to dump such generated single-use software that no one else will ever look at. We are a place for people to collaborate and improve software together. Within this context, the recent votes can be understood as a reconfirmation of those principles: As we want to center on human collaboration, we will not actively support or engage in the creation of LLMs and will not put our limited resources to use for storing single-use software that would pollute our FLOSS commons.

Security updates for Thursday [LWN.net]

Security updates have been issued by AlmaLinux (acl, dogtag-pki, dovecot, glibc, go-toolset:rhel8, golang-github-openprinting-ipp-usb, grafana, grafana-pcp, httpd:2.4, javapackages-tools:201801, libtiff, mariadb-connector-c, perl-HTTP-Daemon, pki-deps:10.6, and sssd), Debian (bind9, chromium, firefox-esr, and pdns-recursor), Fedora (chromium, collectl, fractal, kernel, libssh, llvm, nginx, nginx-mod-brotli, nginx-mod-fancyindex, nginx-mod-headers-more, nginx-mod-js-challenge, nginx-mod-modsecurity, nginx-mod-naxsi, nginx-mod-vts, perl-DBI, perl-YAML-Syck, and srt), SUSE (7zip, GraphicsMagick, ImageMagick, multipath-tools, perl-YAML, python-sqlparse, python3-sqlparse, python313-bleach, and sssd), and Ubuntu (apache2, commons-beanutils, exim4, gawk, giflib, gst-plugins-good1.0, krb5, libapache-mod-jk, libarchive, libgphoto2, libhtml-parser-perl, linux-aws, linux-aws-5.15, linux-aws-fips, linux-fips, linux-ibm, linux-nvidia, linux-fips, linux-lowlatency, linux-lowlatency-hwe-6.8, linux-oracle, linux-ibm, linux-oracle, linux-ibm-5.15, linux-nvidia, linux-nvidia-6.8, linux-nvidia-lowlatency, linux-nvidia-tegra, linux-nvidia-tegra-igx, linux-oem-6.17, linux-oracle-6.8, python-aiohttp, and tar).

13:07

Amiga 1000: ten years ahead of its time [OSnews]

We all know the original Amiga was far ahead of its time, and the Amiga really doesn’t need more retrospectives and glazing. However, that doesn’t mean we don’t want more Amiga retrospectives and glazing.

I’m not sure I even saw an Amiga in person until 1987, but I knew just from reading about it that I wanted one. I wasn’t able to make it happen until 1991, so I was pretty late to the game. But even in 1991, an Amiga felt like living in the future. I could load several programs and switch between them effortlessly, with the only limit being the amount of memory I had. I could connect to a BBS with a terminal program, start a download, then switch it to the background, fire up a word processor, and do my homework while the download was happening. In some cases, I could even fire up a game and play a game while a download happened in the background. I could download stuff while I played Civilization, which was pretty great.

↫ David L. Farquhar

It’s 2026, I have an incredibly powerful Linux gaming computer, but since I grew up on DOS and Windows, to this day, I still feel the need the close every other application before launching a game. I don’t need to – modern operating systems handle such things just fine, mostly – but it’s so ingrained in me it’s hard to drop this habit. I wonder if people who grew up with more capable computers than whatever DOS nonsense I grew up with are less inclined to do things like this? Or did memory constraints act as an equaliser?

Anyway, the linked article doesn’t mention it, but the Amiga is still, somehow, going relatively strong for a platform that’s supposed to be dead. Modern(-ish) hardware is getting a bit harder to come by, but AmigaOS 4 and especially MorphOS are still actively being developed, and even running them in virtual machines on x86 has become about as easy as it could be.

12:14

Pluralistic: California's privacy obstacle course (23 Jul 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



A hedge maze; out of its center rises the bear from the California state flag. Various human figures struggle to escape it. At the maze's entrance stands an agonized figure, reaching towards it.

California's privacy obstacle course (permalink)

Data brokers are a cancer. There's a direct line from the unrestricted collection, retention and processing of our data to a host of evils, from deepfake porn to phishing scams; from racial discrimination in hiring to ICE roundups of migrants; from targeted election interference to identity theft:

https://pluralistic.net/2023/12/06/privacy-first/#but-not-just-privacy

Why do data brokers exist? Because we let them. Congress hasn't passed a new federal consumer privacy law since 1988, when they made it illegal for video stores to disclose your VHS rentals. All other acts of consumer surveillance are legal. Data brokers spy on us for the same reason your dog licks its balls: because they can, and we don't stop them:

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

Getting rid of data brokers wouldn't solve all our problems, but it sure would go a long way to solving many of them. Rather than legally requiring platforms to spy on kids (to exclude them from being targeted by platforms' algorithms), we could prohibit platforms from spying on anyone, including kids, meaning kids couldn't be identified (much less targeted) by algorithms or ads:

https://pluralistic.net/2026/06/23/destroy-the-village/#to-save-it

Data brokers produce mountains of raw material used for every form of scam and torture. It's data brokers who power the gig economy's "algorithmic wage discrimination" system, where nurses and other workers are offered less pay based on how much credit card debt they're carrying:

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

Banning data brokers would make great sense, which is why Biden's CFPB banned data brokers (only to have Trump un-ban them):

https://pluralistic.net/2025/05/15/asshole-to-appetite/#ssn-for-sale

So the feds (both Congress and the executive branch) have surrendered, and that leaves states alone on the battlefield fighting the privacy wars alone. State legislatures have taken some big steps, but – crucially – they've stopped short of banning data brokers from operating within their borders. Having taken a ban on data brokers off the table, states are left with complex, often unworkable "compromises" that go nowhere.

This is where DROP comes in. DROP stands for "Delete Request and Opt-out Platform," and it's a new phase of California's privacy regime that kicks off next month. Under DROP, you fill in some paperwork and then the state requires every data brokerage operating in California to delete your data, as well as any inferences they've made about you based on that data:

https://www.eff.org/deeplinks/2026/07/what-you-need-know-about-californias-drop-tool

Implementing DROP is nowhere near as good as banning data brokers. The idea that data brokers should be able to collect, retain and process your data unless you tell them not to implies that everyone starts off wanting to be spied on, and therefore data brokers should assume that unless they hear otherwise, we're delighted to be the subject of commercial surveillance. This is an incredibly stupid supposition, contradicted by all available evidence. For example, when Apple offered iPhone owners a one-click option to block Facebook from spying on them, 96% of iPhone owners clicked the button:

https://applescoop.org/story/facebook-must-inflict-pain-on-apple-says-mark-zuckerberg

Indeed, given this fact, one wonders why Apple bothers with the "don't spy on me" button at all. Why not have a "do spy on me" button that is unchecked by default, and leave users to dig through their settings to find the option to opt in to being surveilled? Of course, then it would make the fact that Apple spies on its customers and uses the data to target ads (with no way to opt out) a little awkward:

https://pluralistic.net/2022/11/14/luxury-surveillance/#liar-liar

In the absence of a ban on surveillance without explicit, opt-in consent, we are left with the bizarre fiction that most of us want to be spied on, a fiction that pervades the DROP process, making the entire procedure nearly impossible to complete.

To start the DROP process, you must first create a Login.gov ID. This is an incredibly invasive process that involves photographing multiple pieces of ID and taking several selfies using special apps and webpages that hijack your device's camera and processor in a bid to prevent bad actors from spoofing the process. There's a plausible reason for this rigmarole: Login.gov is the authentication system for multiple federal, state and local IT systems in the US, so a fake or stolen Login.gov ID could be used to access your IRS, Social Security, and other very sensitive accounts.

The corollary of this is the promise of Login.gov: once you create your ID (a lengthy, multi-stage process) you won't have to jump through lots of painful bureaucratic hoops to access a wide variety of government services.

DROP didn't get the memo.

After you log in to DROP via Login.gov, you are sent a text message – to the phone number in your Login.gov profile – with a link to access a "secure" website that takes over your camera to let you take a "secure" photo of the front and back of your California driver's license or your US passport. What if you don't have either of those? I guess that means you want to be spied on by data brokers.

Note that these are the same credentials you have to supply to get the Login.gov ID that you've just used to get to this step in the process. In other words, in order to get to the stage where they ask you to photograph your driver's license, you have to have already photographed and validated your driver's license.

Once you complete this (pointless, redundant) step, you're directed back to your computer, where the process continues. Here, you must fill in all kinds of biographical detail, as well as specialized pieces of information, including your car's VIN. This is a piece of information that most people don't have – but which the California DMV does have and could auto-feed into the system, given that you've repeatedly affirmatively identified yourself to the service.

You also have to provide your mobile advertising identifier, a long, unique number that you may or may not be able to extract from your phone, depending on the model and the OS version. If you can't get it that way, you can install an app like AAID, which comes with a long list of – you guessed it – permissions to extract, store and process your private information.

Here's the thing: the whole point of a mobile ad identifier is that apps can access it (this is how they identify and track you). That step, where the system made you switch to your phone and use your camera to photograph your driver's license? That step could have automatically pulled this data off your device. That's the whole fucking point of this exercise: that web-pages and apps can request your mobile ad identifier.

Instead, DROP wants users to dig through their phone's deepest settings and/or install an app to retrieve a 32-digit number, which they then must key into a webform on their computer or in a different app on their phone.

Once you've done this, you must fill in another page of biographical information, including information that you've already provided to Login.gov and information you've already filled in on previous screens.

On this screen, you must also verify your phone number by sending yourself a text and then pasting in a unique number the system sends to you. But remember how this whole thing started? The first step is that you authenticate with Login.gov, which sends a text to your phone so you can take a (redundant) picture of your driver's license. There is no way you could get this far in the process unless you controlled the phone number you've just "verified" with the system.

Next, you must verify your email address, by receiving an email with a unique code in it and keying or pasting that into the webform, too. Again, remember how this process started: with you logging in with Login.gov, using your email address, which the system has already treated as verified since the very start of this (very) long and (very) complicated process.

This whole thing is terrible, and it is predicated on the absurd premise that Californians have to be defended from the threat of strangers who pretend to be them in order to sneakily opt them out of surveillance. DROP requires stronger authentication than any other US government system I've ever interacted with. I file my tax returns with fewer authentication steps. I renew my car's DMV registration with fewer authentication steps. I became a US citizen with fewer authentication steps.

This is either a system with no coherent threat model, or (far more probably), its threat model is that people will use it. This is California's answer to "a locked filing cabinet stuck in a disused lavatory with a sign on the door saying 'Beware of the Leopard'":

https://en.wikiquote.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy

It's especially instructive to compare this process to the steps you have to take in order to "opt in" to having a data broker open a file on you and stuff it full of your sensitive, personal information, which is then sold to all comers:

  • Step one: Exist.
  • Step two: There is no step two.

It's also instructive to compare this process to the steps a data broker has to take to spy on you and sell your data:

  • Step one: Exist.
  • Step two: There is no step two.

Though there are many obvious ways this could be made better, I want to stress here that you shouldn't have to do this at all. It's entirely backwards. The process for not being spied on should look like this:

  • Step one: Exist.
  • Step two: There is no step two.

If anyone is going to be forced to jump through hoops to participate in the mass collection and catastrophic mishandling of private data, it should be the data brokers, not the people they spy on.

This kind of malicious compliance is the inevitable outcome of a process that starts by taking the obvious best measure off the table. The answer to the problem of data brokers is banning data brokers, not creating a demented hairball of form-filling that maintains the fiction that data broker surveillance is consensual.

In its own way, this process reminds me of the whole "carbon credit" fiasco. The answer to too many carbon emissions is to democratically decide to ban certain kinds of carbon emissions. But that would require states to do things, rather than simply "nudging" a process that is guided by "the market." So we end up with these junk "credits" that companies manufacture by promising not to log forests, many of which are already wildlife preserves and/or subsequently burn down:

https://pluralistic.net/2023/10/31/carbon-upsets/#big-tradeoff

The best critique of this whole thing came in 2021 from the Climate Ad Project, who produced a short video in which people were allowed to kill one another provided they purchased "murder offsets":

https://pluralistic.net/2021/04/14/for-sale-green-indulgences/#killer-analogy

In a state of nature, murder exists. We, as a society, have decided this is bad. Rather than creating "incentives" not to murder, we just banned murder. Admittedly, we still get some murders, but when these happen, we don't treat it as "a mispricing of the anti-murder incentive" – we treat it as a crime.

The commercial surveillance industry may not be a criminal enterprise (yet), but it is the source of a torrent of crime, a flood of crime, a tsunami of crime. Every piece of your information that a data broker possesses exposes you to the risk of being victimized by a criminal. For this reason, I strongly believe that you should go through the tedious, performatively difficult DROP process:

https://consumer.drop.privacy.ca.gov/

But let's not pretend that this is good – or even adequate. There is no demand for being spied on. There is no basis for taking such enormous care in making sure people aren't maliciously removed from surveillance databases. If these databases exist at all (they should not), then we should make spies go through all this paperwork, to prove that you do want to be spied on, and unless they manage it, then spying on us should be treated as the crime it is.


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 Continuous Partial Attention wiki https://web.archive.org/web/20060806014946/http://continuouspartialattention.jot.com/WikiHome

#10yrsago Congress: TSA is worst place to work in USG, nearly half of employees cited for misconduct; it’s getting worse https://web.archive.org/web/20160721120714/https://www.cntraveler.com/stories/2016-07-14/almost-half-of-all-tsa-employees-have-been-cited-for-misconduct

#1yrago Trump's FCC abandons the future https://pluralistic.net/2025/07/24/geometry-hates-cars/#dogshit-unit-economics


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: "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

End-to-End Encryption and “Going Dark” [Schneier on Security]

New paper: “Encryption and Globalization 15 Years Later: End-to-End Encryption and the Third Round of the ‘Going Dark’ Debate“:

Abstract: This Article updates and expands on 2012 research on encryption and globalization, analyzing what the authors call “Round 3” of the Going Dark Debate: the current controversies over end-to-end encryption (E2EE). Governments around the world have proposed, and in some cases enacted, laws limiting E2EE for law enforcement and national security purposes.

This Article explains the underlying technologies and market developments for a law and policy audience to assess those proposals critically. The Article proceeds in three parts tracking three rounds of the Going Dark Debate. Round 1 covers the Crypto Wars of the 1990s, when U.S. export controls on strong encryption ultimately fell in 1999. Round 2 covers the period roughly 2010 to 2015, when encryption-in-transit became widespread but lawful access remained available through cloud providers, giving rise to what the authors called a “golden age of surveillance” rather than a period of going dark. Round 3 addresses the current debate over E2EE, where no entity between sender and recipient can read the plaintext.

The Article’s first major contribution is identifying five technically distinct scenarios for how E2EE operates in practice, each with different implications for lawful access. These scenarios reveal a substantial gap between the assumption that E2EE categorically blocks lawful access and the reality of how communications are sent and received. Second, the Article shows that E2EE is not limited to messaging; instead, it is embedded throughout the modern technology stack, including in Transport Layer Security, Secure Shell, Virtual Private Networks, and Zero Trust Architecture, the last of which is now legally required under U.S. and EU law. Any law broadly limiting E2EE would thus have severe serious consequences for cybersecurity, commerce, and government operations. The Article concludes that the two key lessons from Round 2—the least trusted country problem and the golden age of surveillance—remain true in Round 3, and that new government claims for restricting effective encryption deserve great skepticism.

11:14

Grrl Power #1480 – Separation velocity [Grrl Power]

It says a lot about the UCBA that they have a rule specifically addressing what portion of your body has to still exist in order for you to be considered a valid competitor. The 50% rule is strictly about being in bounds though. Some competitors can destroy or abandon their bodies entirely and possess other competitors. For instance, an aetholith (like Lapha) could start the fight piloting a giant mecha, then leap to a kaiju when its nucleon manifold interferometer extractor is destroyed. (That’s a science thing that’s in space mecha. You don’t have to look it up.) Or if you can turn into a swarm of insects or replicators or something, then your “original body” doesn’t have to be present at the end of the match.

Basically on the tournament registration form, you have to specify what qualifies as “you.” If you are the pilot of a mech, then you have to survive the round. And be in bounds. And not be possessed by another competitor. It doesn’t count if the cockpit gets destroyed and the mech’s AI takes over and wins the fight. Unless the AI is registered as the actual competitor.

The point of the UCBA is that it’s kind of supposed to be a no holds bar battle, but when you get down to the nitty gritty, there are actually quite a few specific case rules.


Oh, look who it is in the vote incentive. And a not-quite-yet-but-it’s-coming NSFW version over at Patreon.

Vote incentive and Patreon updated with some shading. Not finished yet, but progress.

I think she would get in trouble for doing this. She’d mess up the… floor of the waterfall? Is that what it’s called? The receiving pool? No, probably not that. Anyway, she’d churn things up and cause a ton of weird erosion.

Since you might be wondering, Niagara Falls is about 165 feet high, so Babezilla obviously doesn’t have to be full sized. I’d say she’s about 175-180 feet tall here?


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

10:49

Industrialism and the slippery slope [Seth's Blog]

One of the best traditional bakeries in New York has a kitchen you can see from the counter. People wait in line for their handmade French baguettes, and the confirmation that they were made right here and right now is reassuring.

I noticed that the baker was using a mechanical gadget called a loader. It allows her to place and shape six baguette onto a board, and load them into the oven all at once.

It’s hard to imagine anyone being disappointed by this. It’s still the same loaf, still handmade, but like the electric mixer they use to knead the dough, it seems to be part of the authentic process, not an industrial one.

The challenge is in what happens next…

Mechanized scale brings productivity and certainty, but it also brings huge short-run rewards for cutting corners. Save a penny a loaf with a handmade product and it’s not big deal. Save a penny a loaf when you make 10,000 a day and it begins to add up to real money. So it pays to add a bit of stabilizer, change to a more reliable oven temperature and switch to a cheaper flour…

This is what people who care about quality are actually fretting about. It’s not the scale. It’s the shortcuts that sometimes come with it.

Quality, by definition, is meeting spec. If you don’t like the spec, make the spec better.

We can have scale and consistency and quality. But we can’t have all three at the same time when we race (or are pushed) to the bottom.

Bit by bit, we either make things better or we make them worse.

10:00

Rewriting the Futhark type checker [OSnews]

This post is about the evolution of Futhark’s type checker, motivated by a large refactoring I am about to merge. It is probably mostly of interest to other language designers, and contains some lessons I wish I had known when we first got started – although I am not particularly well-read in the type checking literature, so it’s possible all of this is old hat.

↫ The Futhark Programming Language blog

That’s a clear introduction – you know what to expect.

02:35

It's A Virtue [QC RSS v2]

she can wait

01:49

[$] LWN.net Weekly Edition for July 23, 2026 [LWN.net]

Inside this week's LWN.net Weekly Edition:

  • Front: LLMs in the kernel; GNOME save and restore; Fedora changes; BPF and tracepoints; BPF and LSMs; famfs; sched_ext.
  • Briefs: GNOME security; PyPI policy; Arch on aarch64; Firefox 153; Quotes; ...
  • Announcements: Newsletters, conferences, security updates, patches, and more.

01:28

Making an agile version of a Windows Runtime delegate in C++/WinRT, part 3 [The Old New Thing]

Last time, we made a small but significant optimization to making an agile version of a Windows Runtime delegate. But there’s another case we missed.

That case is an object that implements the INo­Marshal interface, which means “Do not marshal this object.” For these objects, the Ro­Get­Agile­Reference function fails to create an agile reference and returns CO_E_NOT_SUPPORTED. This function is what powers the agile_ref class, so if you ask for an agile_ref to an object that refuses to be marshaled, you get an CO_E_NOT_SUPPORTED exception.

The catch is that this error is produced at the creation of the agile reference. If in practice all your uses of the agile reference are from the original context, you never actually needed to marshal the object, but too bad, you get the error anyway.

So let’s teach our agile delegate wrapper about delegates that deny marshalability: If the wrapper is invoked on the same context that the original delegate belongs to, then everything is fine. But if you try to invoke the wrapper from another context, then you get the CO_E_NOT_SUPPORTED exception.

Here’s our first try. (Foreshadowing: Since I call this a “first try”, that suggests we’re going to have a second try.)

// Don't use this yet - read to the end of the series

template<typename Delegate>
Delegate make_agile_delegate(Delegate const& d)
{
    if (d.try_as<::IAgileObject>()) {
        return d;
    }

    if (d.try_as<::INoMarshal>()) {                                                                
        return [d, context = winrt::capture<IContextCallback>(CoGetObjectContext)](auto&&...args) {
            if (context == winrt::capture<IContextCallback>(CoGetObjectContext)) {                 
                d(std::forward<decltype(args)>(args)...);                                          
            } else {                                                                               
                throw winrt::hresult_error(CO_E_NOT_SUPPORTED);                                    
            }                                                                                      
        };                                                                                         
    }                                                                                              

    return [agile = winrt::agile_ref(d)](auto&&...args) {
        return agile.get()(std::forward<decltype(args)>(args)...);
    };
}

If the object has the INo­Marshal marker interface, then we capture the original context into our wrapper delegate. At invoke time, the wrapper checks whether the invoke context equals the captured context. If so, then all is good, and we call the original delegate. Otherwise, we throw the exception that Ro­Get­Agile­Reference uses to say “Sorry, I can’t marshal this object.”

If we take a universal reference to the Delegate, we gain the ability to std::move() out of the inbound delegate if it is an rvalue reference.

template<typename Delegate>
std::remove_reference_t<Delegate> make_agile_delegate(Delegate&& d)
{
    if (d.try_as<::IAgileObject>()) {
        return d;
    }

    if (d.try_as<::INoMarshal>()) {
        return [d = std::forward<Delegate>(d),
                context = winrt::capture<IContextCallback>(CoGetObjectContext)](auto&&...args) {
            if (context == winrt::capture<IContextCallback>(CoGetObjectContext)) {
                d(std::forward<decltype(args)>(args)...);
            } else {
                throw winrt::hresult_error(CO_E_NOT_SUPPORTED);
            }
        };
    }

    return [agile = winrt::agile_ref(d)](auto&&...args) {
        return agile.get()(std::forward<decltype(args)>(args)...);
    };
}

Next time, we’ll look at a small optimization we can make to this implementation to reduce the amount of work needed to check the context at invoke time.

The post Making an agile version of a Windows Runtime delegate in C++/WinRT, part 3 appeared first on The Old New Thing.

01:07

osip2 [5.3.2] [Planet GNU]

A new security release was published today! A minor Out-of-bounds Read was discovered. And fixed!

No confidential impact is possible.
A very low risk of crash is possible.

Enjoy & update!
Aymeric

00:07

US became less literate [Richard Stallman's Political Notes]

Reading and writing train the brain to formulate thoughts and to think more clearly. The US has become much less literate in recent decades, and it shows in our election results. But those are just a couple of points in this article, which is well worth reading through.

Rich Americans Taxes [Richard Stallman's Political Notes]

Refuting the fallacious argument that rich Americans use to claim they are paying their fair share of income tax.

British wealth tax rejected [Richard Stallman's Political Notes]

The new British prime minister, who people hoped would be less right-wing than Starmer, has rejected a wealth tax "for now".

If he won't dare now, what chance is there he will dare later? The "division" he would like to avoid is between the rich and their servants, and all the rest. That division will continue to grow as long as the share of income for the rich continues to grow.

Troy Jackson will replace Platner [Richard Stallman's Political Notes]

Highly progressive former state legislator Troy Jackson will replace Platner as candidate for senator from Maine.

Crowd control weapons [Richard Stallman's Political Notes]

*"Misuse" of crowd control weapons on [anti-deportation] protesters led to blindings and traumatic brain injuries, report finds. Doctors and human rights experts documented hundreds of incidents from June 2025 through May 2026 and estimate true number is "far greater".*

EU's pesticide law [Richard Stallman's Political Notes]

*How Europe's most powerful farming lobby killed EU's pesticide law.*

It lobbies against any kind of regulation that would reduce the profits of Big Ag, regardless of what problem the regulation would address.

Trump Impeachment [Richard Stallman's Political Notes]

* The Worse Outlaw ["the corrupter] Becomes, The Less the Democrats Move to Initiate Impeachment.*

Urgent: Ban deportation thugs from public school property [Richard Stallman's Political Notes]

US citizens: call on your state lawmakers to ban the deportation thugs from public school property.

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

Trump's attacks on elections [Richard Stallman's Political Notes]

The corrupter is trying to distract our attention from his attacks on the US election system using vague charges, based on inconclusive evidence, that China is doing such attacks.

Surveillance eyeglasses [Richard Stallman's Political Notes]

Surveillance eyeglasses with built-in cameras and facial recognition are being pushed by Suckerberg.

Urgent: Hold VICE accountable for murder [Richard Stallman's Political Notes]

US citizens: call on Maine AG to hold VICE accountable for murder.

"VICE" stands for Violent Institution for Contemptuous Execution.

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

Joan Durán killer [Richard Stallman's Political Notes]

The deportation thug who killed Joan Sebastián Durán has possibly been identified and that name is linked with reports of violence and threats.

This "directly call[s] into question the supposed vetting and training ICE does of its recruits."

Urgent: Vote NO on CORCA [Richard Stallman's Political Notes]

US citizens: call on your senators to Vote NO on CORCA – the “Retail Crime” Bill that hands VICE power.

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: Pass the No Troops at the Polls Act [Richard Stallman's Political Notes]

US citizens: call on your congresscritter and senators to pass the No Troops at the Polls Act.

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.

Global heating consequences on energy [Richard Stallman's Political Notes]

Global heating can force shutdown of nuclear power plants. It has happened this month in France due to the heat wave.

Labour Party missions [Richard Stallman's Political Notes]

To make the Labour Party a force for good, its new leader should return to the big missions it ran on two years ago -- and then dropped.

Wu Shaoping [Richard Stallman's Political Notes]

The persecutor's men arrested and jailed Wu Shaoping, a Chinese human rights lawyer who fled to the US in 2020 and asked for asylum.

Since then he has remained lawfully in the US waiting for a decision on his asylum request, until being arrested for no known reason. Will the persecutor deport Wu to China, where he will surely face imprisonment after a bogus trial?

It is a damned shame that such an asylum decision can take so many years, but that is a different issue.

Urgent: State solidarity with the United Auto Workers [Richard Stallman's Political Notes]

US citizens: State your solidarity with the United Auto Workers and its president, Shawn Fain, who is facing persecution by the bully for criticizing him.

Urgent: Reject influence to the historical record of America by the bullshitter [Richard Stallman's Political Notes]

US citizens: call on the Smithsonian Board of Regents to reject attempts by the bullshitter to influence the historical record of America.

Foreign journalist in US [Richard Stallman's Political Notes]

The corrupter has ordered that foreign journalists living in the US ask for a visa renewal every 8 months.

That will be a real screw, because they won't be able to lease an apartment for just 8 months.

This seems to be a scheme to intimidate them into going soft on the corrupter's crimes, attacks on civil liberties, and harm to the non-rich.

Deportation prison employee shot protester [Richard Stallman's Political Notes]

An employee at a privatized deportation prison shot a protester outside the prison, and has been arrested and charged.

That employee is not a federal agent. I wonder how far the persecutor's henchmen will go to protect him.

US Republicompoops [Richard Stallman's Political Notes]

US Republicompoops are calling for sanctions against Canada to punish it for the smoke blowing into parts of the US from large wildfires in western Ontario.

The specific proposal is absurd, of course, but there is some validity in the general idea. Uncontrollable fires are mainly the result of global heating, and global heating is the result of bad government policies that encourage more burning of fossil fuels. Sanctions could make governments change those policies.

Canada is one of the countries which has persistently encouraged fossil fuel exports, and continues to do this, so its deliberate actions are partly responsible for these fires (though not for precisely when and where they occur). Canada deserves sanctions to pressure it to stop doing causing more of them.

Of course, Canada is not the only country which does this. The US is a far worse culprit.

The EU, by contrast, has an effective emissions-reduction law, but businesses (and billionaires behind them) are demanding that the EU weaken it in the name of "competitiveness".

When parts of the world racing to a goal that implies destroying them all, saving civilization calls for inviting those billionaires to kill just themselves, rather than everyone.

Urgent: Investigate FBI raid over voter registration drive [Richard Stallman's Political Notes]

US citizens: call on your congresscritter and senators to investigate the FBI raid on a voter registration drive.

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.

Wednesday, 22 July

23:56

21:35

How the web got gunked [Scripting News]

Posted on Twitter in the middle of last night, written on iPad.

I use twitter these days because it’s where the people are.

The distributed ideas, masto, threads, blue-sky, did not gain critical mass as far as I can see.

Threads and blue-sky are not distributed. distributable is not the same as being distributed. It’s like saying the 1962 Mets were able to win the world series. In some fashion perhaps in an alternate universe, in reality, not gonna happen.

At some point we will give up on that approach and adopt the only model that could work, the web, because it forced us to work together, which goes far beyond open source in building the kind of freedom that open source advocates promise.

We need to go back to the source of freedom we enjoyed in the approx 14 year period between the inception of the web and its exploitation, via Cory Doctorow’s doctrine, getting shit on and in. Don’t just blame the vendors, the people wanted the shit too, they wanted their billions, and the web turned from a freedom machine to a gunk works.

Working together is the only way out of the shit we’re living in, in every aspect of life. Working together. Say it again and again until you do it. Underneath the mess, the beauty of the web is there still to build on, but only if we momentarily suspend our search for great wealth, and instead seek our humanity. Working together is the way.

PS: Elon Musks twitter may suck to some but I praise him and it for giving us the space to rant, something the great masto, threads and blue-sky refuse to.

20:49

Odyssean [Penny Arcade]

I stopped playing Absolum because I was waiting for cross-platform multiplayer, and I haven't seen The Odyssey yet because I feel like if they went through all the trouble to film it on these big weird cameras I should make the effort to see it on a big, weird screen. Is this edging? Maybe… Maybe I just like rules?

20:00

Stop Overengineering Your Agent Harness [Radar]

The following originally appeared on Hugo Bowne-Anderson’s Vanishing Gradients Substack and is being republished here with the author’s permission.

The conversation around harness engineering is dominated by problems from coding and personal agents such as OpenClaw, but most agents are simpler. Builders should avoid over-engineering for capabilities that newer models may absorb anyway, the “Kirby effect,” and focus on durable fundamentals.

Statisticians sometimes use a deliberately crude question to show how a summary statistic can mislead: how many testicles does the average human have? The numerical answer may be defensible, but it describes almost nobody. Harness engineering has a similar problem. Ask, “What techniques do I need?” and the average answer becomes a long list: context management, memory, compaction, sub-agents, hooks, and orchestration. Few systems need all of it and the right harness depends on the job.

In this essay, you’ll learn:

  • What an agent harness is and how it differs from prompt and context engineering.
  • How action complexity and context complexity determine the harness you need.
  • Why coding and deep-research agents require more context management than many support, sales, and enterprise agents.
  • How tools, state, routing, guardrails, traces, sub-agents, hooks, and human handoffs fit into the architecture.
  • Why harness features expire as models improve, and how to build the minimum viable harness for the job.

What is an agent?

An AI agent in common parlance is an AI system that can do things: send emails, query databases, ping APIs, make appointments, write and execute code, and so on. AI engineers define them slightly differently: AI agents are LLMs with tools in a loop.

Consider what happens when you ask a coding agent to edit a file: it will first read the file, send the result back to the LLM, then edit it, then perhaps read it again, and so on, until the LLM “decides” it is finished and tells you.

A coding agent cycles between the LLM and its tools. Here, it reads app.py, incorporates the result, and then edits the file.Figure 1. A coding agent cycles between the LLM and its tools. Here, it reads app.py, incorporates the result, and then edits the file.

This distinction is important because most common parlance agents don’t have such reasoning loops and are more aptly described as LLM workflows: take a sales workflow that

  1. Transcribes sales calls using a speech-to-text model;
  2. Extracts structured data from the transcript for the salesperson to verify;
  3. Populates your CRM or database with the prospect’s information, next steps, and so on.

This is an AI workflow: foundation models are used at each step, but for each sales call the workflow itself is deterministic. A call is transcribed, the relevant data is extracted, and the CRM is populated. When the next call happens, the workflow runs again as a separate task; no result is fed back to an earlier step, so there is no model-directed reasoning loop (any individual step could contain one, however, and agentic reasoning loops inside deterministic workflows are a common pattern).

A deterministic AI workflow follows a fixed sequence: transcribe the call, extract structured data, verify it, and populate the CRM.Figure 2. A deterministic AI workflow follows a fixed sequence: transcribe the call, extract structured data, verify it, and populate the CRM.

All modern AI chat products, such as ChatGPT and Claude, however, are agentic: they have access to Web Search tools and image generation tools, for example, and will use them when deemed necessary. You interact with agents every day.

What is an agent harness?

If an LLM is the brain, you can think of the agent harness as the body. It includes all the tools and infrastructure the brain relies upon at runtime to get the job done.

In practice, the harness handles five core jobs:

  • Loop: Prompt the model, parse its response, execute its tool calls, and feed the results back.
  • Tool execution: Run the commands, code, APIs, and other actions requested by the model.
  • Context management: Decide which instructions, conversation history, files, and tool results enter each model call.
  • State: Track the conversation, task progress, files touched, and anything that needs to persist across turns.
  • Safety: Sandbox execution, require confirmation for sensitive actions, and block disallowed operations.

Prompt engineering shapes an individual model call. Context engineering determines what the model sees. Harness engineering governs the complete system around those calls.

How complex does the harness need to be?

One way to decide how much harness engineering a task requires is to separate two kinds of complexity:

  • Action complexity: How many tools, decisions, dependencies, and handoffs must the agent coordinate?
  • Context complexity: How much information must the agent gather, retain, and retrieve to complete the task?

The two can move independently. A support agent may complete a conversation in one turn while still routing across several tools and safety checks. A deep-research agent may receive only one user request while accumulating a large body of source material.

Harness requirements vary across two independent dimensions: the complexity of the actions an agent coordinates and the context it must gather, retain, and retrieve. Personal assistants can span much of this space.Figure 3. Harness requirements vary across two independent dimensions: the complexity of the actions an agent coordinates and the context it must gather, retain, and retrieve. Personal assistants can span much of this space.

Harnesses for coding agents?

The conversation around harness engineering has exploded recently and much of the focus is on context management, memory, compaction, tool offloading, and increasingly elaborate tools and techniques. If you’re building a coding agent (or using one!), it’s important to know about these. Generally, they’re important to consider when building agents that users tend to have long conversations with.

The core can be surprisingly small, though: A coding agent can be built in 131 lines of Python, while a search agent using the same basic loop takes just 61. The tools change, but the underlying pattern doesn’t. A coding agent can even read its own tool definitions, write a new tool, hot-reload it, and use it on the next step. Capabilities can be added without permanently baking everything into the core harness.

A stock coding agent can write code, but it doesn’t automatically understand your data, spot leakage, choose the right validation strategy, explain uncertainty, or connect a model to a business decision. In practice, users keep extending the harness around it: they add domain instructions to AGENTS.md, package recurring workflows as skills, and add tools, evals, and reproducibility checks. The shipped harness is only the starting point. It’s something builders actively work on. In a word, when using a coding agent, you are always actively involved in shaping and building your harness.

So what are common harness patterns for coding agents? Lance Martin (Anthropic, then at LangChain) identified 3 main context engineering patterns, which are fundamental for harness engineering:

  1. Reduce: Actively shrink the context passed to the model
  2. Offload: Move information and complexity out of the prompt.
  3. Isolate: Use multi-agent architectures to delegate token-heavy sub-tasks.

Then when conversations get longer than the context window of the LLM, you need to think through how to pass the necessary context to it: compaction used to be state of the art, then hand-off became prominent, and now compaction is back, due to the capabilities of more powerful models.

Deep research is another case where context engineering matters. In a workshop with Ivan Leo, who previously built agents at Manus and is now at Google DeepMind, we built a deep research agent from scratch. The harness keeps research findings and task state available across many model calls. It generates a plan, gives search sub-agents separate queries and iteration budgets, runs them concurrently, then returns their findings to the main agent for synthesis and citation. The implementation also uses hooks, which let other parts of the system respond to events in the agent loop. A hook can render a tool call, log its result, or record a trace without putting that behavior inside the core loop. Deep research raises both action and context complexity: the agent must coordinate many searches while retaining enough evidence to produce a coherent, cited report.

When working with personal agents, such as OpenClaw or Hermes, managing context and memory is also important, particularly as the amount of information they create and have access to grows over time. Pi offers a useful baseline for coding-agent harnesses. It adds repository context through AGENTS.md, persistent sessions that users can resume or branch, and extensions for tools, skills, and prompts. OpenClaw builds on Pi and pushes the harness into personal-agent territory with an always-on daemon, chat interfaces, file-based memory, scheduled heartbeats and cron jobs, and tools for browsing, sub-agents, and device control. That additional infrastructure makes sense because the agent must persist and act over time, rather than complete one short task. Its memory system is deliberately plain: compaction summaries are appended to timestamped Markdown files, with no vector database or embeddings.

I do think these are all important and super interesting, but I want to help builders understand that most agents you’ll build don’t need any of them. But first: the Kirby effect and how frontier models are absorbing all of our agent harnesses.

The Kirby effect

New model releases often force us to rebuild our harnesses. In fact, we often need to tear them out and rebuild them completely. If you don’t rip out your harness, it constrains the new model. As Nick Moy, an AI researcher at Google DeepMind who built the first multi-hop AI agent at Windsurf told me, “we should just unleash [the model], unfetter it, and let it flex its wings!”

Manus has been re-architected five times in a year, LangChain’s Open Deep Research was rebuilt multiple times in a year to keep pace with model improvements, and even Anthropic rips out Claude Code’s agent harness as models improve (see here for more details). Why is this happening? Because the models are sucking up the harnesses around them.

Remember chain-of-thought (CoT) prompting where we would see better performance from LLMs if we asked them to explain their reasoning? Well, it turns out that if you do reinforcement learning on CoT traces, you can build reasoning models! Plan mode followed the same path. AMP briefly shipped it as an experimental feature, then removed it when models could reliably obey “plan, but don’t edit.” As Nicolay Gerold (Amp Code) put it, “Having a separate mode for that, and having additional load on the user to remember, ‘Hey, I always have to go into plan mode,’ isn’t necessary anymore, because it’s just one simple instruction.” Claude Code still has it, though, as does Codex! In November 2025, the release of Opus 4.5 and GPT-5.2 signalled a step change in how capable coding agents had become. Simon Willison even wrote “It genuinely feels to me like GPT-5.2 and Opus 4.5 in November represent an inflection point”. Why was this possible then? The labs had been able to train their new models on enough of our agent traces, in particular using RLVR, that they were able to become far more accurate at tool calling, among other things.

Nicolay Gerold (Amp Code) calls this the Kirby effect: every component in a harness encodes an assumption about something the model cannot do on its own. As models improve, those assumptions expire, and the corresponding harness features can be removed.

Harnesses for support agents

Most AI builders will not be building coding agents or deep-research systems. They will be building support agents, sales agents, and enterprise agents that sit low on at least one of these dimensions. Many of these systems complete a task in one to five turns (time to resolution is key here!). Their harnesses still need careful tool design, structured outputs, routing, guardrails, traces, and handoffs, but they may need far less memory and compaction.

William Horton (AI Engineer, Maven Clinic) and his team built Maven Assistant to help members navigate appointments, providers, support information, and women’s health content. When the agent first reached external users, every initial conversation was completed in a single turn. Compaction was rarely relevant, although one Zendesk retrieval returned far too much text. The architecture still contains several important harness components:

  • Domain routing: A lead agent delegates requests to sub-agents for appointments, provider search, health content, and Maven support.
  • Bounded tool access: The system has roughly 15 to 20 tools distributed across those domains. Each sub-agent receives only the tools relevant to its job.
  • Tool interfaces designed for agents: Internal APIs are wrapped in safer interfaces. The application injects the user ID directly instead of asking the model to provide it.
  • Deterministic guardrails: Off-topic and prompt-hacking checks run before the main agent. When triggered, the system returns a fixed response without asking the LLM to improvise.
  • Explicit human handoffs: Expressions of self-harm trigger an automatic transfer to support. Other transfers require the user to ask or confirm.
  • Controlled scope: The agent provides health information but does not diagnose. The team withheld high-cost benefits questions until the system could answer them reliably enough.

Maven Assistant has low context complexity and moderate action complexity. Its harness work is concentrated in routing, tool design, guardrails, evaluation, and human handoffs rather than memory or compaction. But don’t forget about the Kirby effect. As these systems become more sophisticated, so will the models, and what you needed to engineer into your harness yesterday will be part of the model tomorrow.

The fundamentals will remain:

  • Building LLM reasoning loops with tools, state, and control flow.
  • Designing prompts and tool schemas.
  • Managing context and memory.
  • Using structured outputs, traces, and tool feedback to inspect and debug the loop.
  • Applying guardrails and human handoffs.
  • Using Agent SDKs and MCP without outsourcing the system design.
  • Running scheduled and event-driven work with hooks and cron jobs.
  • Building evals that test task success, tool use, guardrails, and human handoffs.

Evals also raise a boundary question. Vivek Trivedy’s account of the agent harness is runtime-oriented: it includes the tools, state, context, execution environment, orchestration, and control logic used while an agent completes a task. Hamel Husain has argued to me (in private correspondence) that the eval harness is part of the agent harness too. That extends the definition beyond runtime to include the infrastructure that runs test cases, captures traces and artifacts, and scores outcomes. We’ll discuss this, among other things, in an upcoming live conversation.

When building agents, before reaching for compaction, memory, handoffs, or sub-agents, map the job on two axes: how many actions must the agent coordinate, and how much context must it carry across the task? If both are low, keep the harness small. Give the model the few tools it needs, test the loop, and add infrastructure only when a real failure demands it. Revisit those additions whenever a stronger model arrives, because yesterday’s necessary workaround may be tomorrow’s dead weight.

Want to go deeper? Check out our collection of agent-harness resources, including papers, talks, tools, and practical examples. I’m also running a four-hour workshop soon, Build AI Agents from First Principles, where we’ll build a working customer service agent from scratch and cover tools, state, context, memory, guardrails, SDKs, and MCP.

COSMIC DE’s first seven months [OSnews]

Honestly, it feels like only yesterday that System76, Linux OEM and the company behind pop!_OS, announced it was going to develop its own desktop environment, COSMIC. We’re about seven months into the more general availability of COSMIC, and the company has put up a nice overview of the various improvements that have already made their way into the code since then.

Of course, there’s a ton of visual improvements have been made to COSMIC, as well as a slew of new features: improved search, a brand new system monitor, drag and drop for tabs throughout COSMIC, and much more. COSMIC’s file manager and terminal have also seen a lot of work, with a ton of new small features and additions to bring them up to par with what people expect form a modern file manager and terminal emulator.

There’s a ton more listed in the article, so it serves as a nice “while you were away” if you’ve not been following development.

Codeberg’s programmer user base overwhelmingly votes to ban slopcoded projects from its platform [OSnews]

What happens when programmers get to vote on a complete ban on slopcoded software on their code platform? Members of Codeberg were asked to vote on a proposal to completely ban slopcoded projects from Codeberg, and in what should not be a surprising outcome to anyone not overcome with “AI” hysteria, the vast majority voted in favour of the complete ban: over 70% of Codeberg members voted to ban slopcoded projects entirely (358 in favour, 144 against, 14 abstentions).

Of course, this is not a surprising outcome. Stripped down, programming is a form of artistic expression, and programming is no different than writing, painting, composing, or any other artistic endeavour. I think it’s safe to say writers, painters, composers, and similar creatives are against “AI”, so it’s only natural programmers feel the same; poll after poll shows the overwhelming majority of respondents – usually well over 70-80% – are against “AI”.

The pro-“AI” accounts on OSNews often try to paint my anti-“AI” position as extremist, but in reality, I’m just voicing how 70-80% of people clearly state they feel. I have zero skin in this game, zero outside pressure to please any bosses to get that promotion, zero pressure to conform to avoid getting laid off, zero pressure to not contradict upper-management. I can speak freely, openly, and without fear of retaliation. And as Nikhil Suresh explains in his harrowing from-the-trenches article AI Mania Is Eviscerating Global Decision-Making, that’s a massive asset.

The vast majority of people – including your friends, family, and co-workers – really hate “AI”. You can either accept this, or be left behind.

Feeds

FeedRSSLast fetchedNext fetched after
@ASmartBear XML 20:35, Monday, 27 July 21:16, Monday, 27 July
a bag of four grapes XML 21:07, Monday, 27 July 21:49, Monday, 27 July
Ansible XML 20:28, Monday, 27 July 21:08, Monday, 27 July
Bad Science XML 20:56, Monday, 27 July 21:45, Monday, 27 July
Black Doggerel XML 20:35, Monday, 27 July 21:16, Monday, 27 July
Blog - Official site of Stephen Fry XML 20:56, Monday, 27 July 21:45, Monday, 27 July
Charlie Brooker | The Guardian XML 21:07, Monday, 27 July 21:49, Monday, 27 July
Charlie's Diary XML 20:28, Monday, 27 July 21:16, Monday, 27 July
Chasing the Sunset - Comics Only XML 20:56, Monday, 27 July 21:45, Monday, 27 July
Coding Horror XML 20:21, Monday, 27 July 21:08, Monday, 27 July
Comics Archive - Spinnyverse XML 20:35, Monday, 27 July 21:19, Monday, 27 July
Cory Doctorow's craphound.com XML 21:07, Monday, 27 July 21:49, Monday, 27 July
Cory Doctorow, Author at Boing Boing XML 20:35, Monday, 27 July 21:16, Monday, 27 July
Ctrl+Alt+Del Comic XML 20:28, Monday, 27 July 21:16, Monday, 27 July
Cyberunions XML 20:56, Monday, 27 July 21:45, Monday, 27 July
David Mitchell | The Guardian XML 20:56, Monday, 27 July 21:39, Monday, 27 July
Deeplinks XML 20:35, Monday, 27 July 21:19, Monday, 27 July
Diesel Sweeties webcomic by rstevens XML 20:56, Monday, 27 July 21:39, Monday, 27 July
Dilbert XML 20:56, Monday, 27 July 21:45, Monday, 27 July
Dork Tower XML 21:07, Monday, 27 July 21:49, Monday, 27 July
Economics from the Top Down XML 20:56, Monday, 27 July 21:39, Monday, 27 July
Edmund Finney's Quest to Find the Meaning of Life XML 20:56, Monday, 27 July 21:39, Monday, 27 July
EFF Action Center XML 20:56, Monday, 27 July 21:39, Monday, 27 July
Enspiral Tales - Medium XML 20:35, Monday, 27 July 21:20, Monday, 27 July
Events XML 20:28, Monday, 27 July 21:16, Monday, 27 July
Falkvinge on Liberty XML 20:28, Monday, 27 July 21:16, Monday, 27 July
Flipside XML 21:07, Monday, 27 July 21:49, Monday, 27 July
Flipside XML 20:35, Monday, 27 July 21:20, Monday, 27 July
Free software jobs XML 20:28, Monday, 27 July 21:08, Monday, 27 July
Full Frontal Nerdity by Aaron Williams XML 20:28, Monday, 27 July 21:16, Monday, 27 July
General Protection Fault: Comic Updates XML 20:28, Monday, 27 July 21:16, Monday, 27 July
George Monbiot XML 20:56, Monday, 27 July 21:39, Monday, 27 July
Girl Genius XML 20:56, Monday, 27 July 21:39, Monday, 27 July
Groklaw XML 20:28, Monday, 27 July 21:16, Monday, 27 July
Grrl Power XML 21:07, Monday, 27 July 21:49, Monday, 27 July
Hackney Anarchist Group XML 20:56, Monday, 27 July 21:45, Monday, 27 July
Hackney Solidarity Network XML 20:35, Monday, 27 July 21:20, Monday, 27 July
http://blog.llvm.org/feeds/posts/default XML 20:35, Monday, 27 July 21:20, Monday, 27 July
http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic XML 20:28, Monday, 27 July 21:08, Monday, 27 July
http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 XML 20:35, Monday, 27 July 21:20, Monday, 27 July
http://eng.anarchoblogs.org/feed/atom/ XML 20:21, Monday, 27 July 21:07, Monday, 27 July
http://feed43.com/3874015735218037.xml XML 20:21, Monday, 27 July 21:07, Monday, 27 July
http://flatearthnews.net/flatearthnews.net/blogfeed XML 20:35, Monday, 27 July 21:16, Monday, 27 July
http://fulltextrssfeed.com/ XML 20:56, Monday, 27 July 21:39, Monday, 27 July
http://london.indymedia.org/articles.rss XML 20:21, Monday, 27 July 21:08, Monday, 27 July
http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&amp;_render=rss XML 20:21, Monday, 27 July 21:07, Monday, 27 July
http://planet.gridpp.ac.uk/atom.xml XML 20:21, Monday, 27 July 21:08, Monday, 27 July
http://shirky.com/weblog/feed/atom/ XML 20:35, Monday, 27 July 21:19, Monday, 27 July
http://thecommune.co.uk/feed/ XML 20:35, Monday, 27 July 21:20, Monday, 27 July
http://theness.com/roguesgallery/feed/ XML 20:28, Monday, 27 July 21:16, Monday, 27 July
http://www.airshipentertainment.com/buck/buckcomic/buck.rss XML 20:56, Monday, 27 July 21:45, Monday, 27 July
http://www.airshipentertainment.com/growf/growfcomic/growf.rss XML 20:35, Monday, 27 July 21:19, Monday, 27 July
http://www.airshipentertainment.com/myth/mythcomic/myth.rss XML 21:07, Monday, 27 July 21:49, Monday, 27 July
http://www.baen.com/baenebooks XML 20:35, Monday, 27 July 21:19, Monday, 27 July
http://www.feedsapi.com/makefulltextfeed.php?url=http%3A%2F%2Fwww.somethingpositive.net%2Fsp.xml&what=auto&key=&max=7&links=preserve&exc=&privacy=I+accept XML 20:35, Monday, 27 July 21:19, Monday, 27 July
http://www.godhatesastronauts.com/feed/ XML 20:28, Monday, 27 July 21:16, Monday, 27 July
http://www.tinycat.co.uk/feed/ XML 20:28, Monday, 27 July 21:08, Monday, 27 July
https://anarchism.pageabode.com/blogs/anarcho/feed/ XML 20:35, Monday, 27 July 21:19, Monday, 27 July
https://broodhollow.krisstraub.comfeed/ XML 20:35, Monday, 27 July 21:16, Monday, 27 July
https://debian-administration.org/atom.xml XML 20:35, Monday, 27 July 21:16, Monday, 27 July
https://elitetheatre.org/ XML 20:21, Monday, 27 July 21:08, Monday, 27 July
https://feeds.feedburner.com/Starslip XML 21:07, Monday, 27 July 21:49, Monday, 27 July
https://feeds2.feedburner.com/GeekEtiquette?format=xml XML 20:56, Monday, 27 July 21:39, Monday, 27 July
https://hackbloc.org/rss.xml XML 20:35, Monday, 27 July 21:16, Monday, 27 July
https://kajafoglio.livejournal.com/data/atom/ XML 20:56, Monday, 27 July 21:45, Monday, 27 July
https://philfoglio.livejournal.com/data/atom/ XML 20:21, Monday, 27 July 21:08, Monday, 27 July
https://pixietrixcomix.com/eerie-cutiescomic.rss XML 20:21, Monday, 27 July 21:08, Monday, 27 July
https://pixietrixcomix.com/menage-a-3/comic.rss XML 20:35, Monday, 27 July 21:19, Monday, 27 July
https://propertyistheft.wordpress.com/feed/ XML 20:28, Monday, 27 July 21:08, Monday, 27 July
https://requiem.seraph-inn.com/updates.rss XML 20:28, Monday, 27 July 21:08, Monday, 27 July
https://studiofoglio.livejournal.com/data/atom/ XML 20:21, Monday, 27 July 21:07, Monday, 27 July
https://thecommandline.net/feed/ XML 20:21, Monday, 27 July 21:07, Monday, 27 July
https://torrentfreak.com/subscriptions/ XML 20:56, Monday, 27 July 21:39, Monday, 27 July
https://web.randi.org/?format=feed&type=rss XML 20:56, Monday, 27 July 21:39, Monday, 27 July
https://www.dcscience.net/feed/medium.co XML 20:56, Monday, 27 July 21:45, Monday, 27 July
https://www.DropCatch.com/domain/steampunkmagazine.com XML 20:35, Monday, 27 July 21:16, Monday, 27 July
https://www.DropCatch.com/domain/ubuntuweblogs.org XML 20:21, Monday, 27 July 21:07, Monday, 27 July
https://www.DropCatch.com/redirect/?domain=DyingAlone.net XML 20:21, Monday, 27 July 21:08, Monday, 27 July
https://www.freedompress.org.uk:443/news/feed/ XML 20:28, Monday, 27 July 21:16, Monday, 27 July
https://www.goblinscomic.com/category/comics/feed/ XML 20:28, Monday, 27 July 21:08, Monday, 27 July
https://www.loomio.com/blog/feed/ XML 20:21, Monday, 27 July 21:07, Monday, 27 July
https://www.newstatesman.com/feeds/blogs/laurie-penny.rss XML 20:35, Monday, 27 July 21:16, Monday, 27 July
https://www.patreon.com/graveyardgreg/posts/comic.rss XML 20:21, Monday, 27 July 21:08, Monday, 27 July
https://www.rightmove.co.uk/rss/property-for-sale/find.html?locationIdentifier=REGION^876&maxPrice=240000&minBedrooms=2&displayPropertyType=houses&oldDisplayPropertyType=houses&primaryDisplayPropertyType=houses&oldPrimaryDisplayPropertyType=houses&numberOfPropertiesPerPage=24 XML 20:56, Monday, 27 July 21:39, Monday, 27 July
https://x.com/statuses/user_timeline/22724360.rss XML 20:28, Monday, 27 July 21:08, Monday, 27 July
Humble Bundle Blog XML 20:21, Monday, 27 July 21:08, Monday, 27 July
I, Cringely XML 20:28, Monday, 27 July 21:16, Monday, 27 July
Irregular Webcomic! XML 20:35, Monday, 27 July 21:16, Monday, 27 July
Joel on Software XML 20:21, Monday, 27 July 21:07, Monday, 27 July
Judith Proctor's Journal XML 20:28, Monday, 27 July 21:08, Monday, 27 July
Krebs on Security XML 20:35, Monday, 27 July 21:16, Monday, 27 July
Lambda the Ultimate - Programming Languages Weblog XML 20:28, Monday, 27 July 21:08, Monday, 27 July
Looking For Group XML 20:35, Monday, 27 July 21:19, Monday, 27 July
LWN.net XML 20:35, Monday, 27 July 21:16, Monday, 27 July
Mimi and Eunice XML 20:35, Monday, 27 July 21:20, Monday, 27 July
Neil Gaiman's Journal XML 20:28, Monday, 27 July 21:08, Monday, 27 July
Nina Paley XML 20:21, Monday, 27 July 21:08, Monday, 27 July
O Abnormal – Scifi/Fantasy Artist XML 20:35, Monday, 27 July 21:20, Monday, 27 July
Oglaf! -- Comics. Often dirty. XML 20:28, Monday, 27 July 21:16, Monday, 27 July
Oh Joy Sex Toy XML 20:35, Monday, 27 July 21:19, Monday, 27 July
Order of the Stick XML 20:35, Monday, 27 July 21:19, Monday, 27 July
Original Fiction Archives - Reactor XML 21:07, Monday, 27 July 21:49, Monday, 27 July
OSnews XML 20:35, Monday, 27 July 21:20, Monday, 27 July
Paul Graham: Unofficial RSS Feed XML 20:35, Monday, 27 July 21:20, Monday, 27 July
Penny Arcade XML 21:07, Monday, 27 July 21:49, Monday, 27 July
Penny Red XML 20:35, Monday, 27 July 21:20, Monday, 27 July
PHD Comics XML 20:56, Monday, 27 July 21:45, Monday, 27 July
Phil's blog XML 20:28, Monday, 27 July 21:16, Monday, 27 July
Planet Debian XML 20:35, Monday, 27 July 21:20, Monday, 27 July
Planet GNU XML 20:35, Monday, 27 July 21:16, Monday, 27 July
Planet Lisp XML 20:56, Monday, 27 July 21:45, Monday, 27 July
Pluralistic: Daily links from Cory Doctorow XML 20:28, Monday, 27 July 21:08, Monday, 27 July
PS238 by Aaron Williams XML 20:28, Monday, 27 July 21:16, Monday, 27 July
QC RSS v2 XML 20:21, Monday, 27 July 21:08, Monday, 27 July
Radar XML 21:07, Monday, 27 July 21:49, Monday, 27 July
RevK®'s ramblings XML 20:21, Monday, 27 July 21:07, Monday, 27 July
Richard Stallman's Political Notes XML 20:56, Monday, 27 July 21:45, Monday, 27 July
Scenes From A Multiverse XML 20:21, Monday, 27 July 21:08, Monday, 27 July
Schneier on Security XML 20:28, Monday, 27 July 21:08, Monday, 27 July
SCHNEWS.ORG.UK XML 20:35, Monday, 27 July 21:19, Monday, 27 July
Scripting News XML 21:07, Monday, 27 July 21:49, Monday, 27 July
Seth's Blog XML 20:21, Monday, 27 July 21:07, Monday, 27 July
Skin Horse XML 21:07, Monday, 27 July 21:49, Monday, 27 July
Tales From the Riverbank XML 20:56, Monday, 27 July 21:45, Monday, 27 July
The Adventures of Dr. McNinja XML 20:35, Monday, 27 July 21:20, Monday, 27 July
The Bumpycat sat on the mat XML 20:28, Monday, 27 July 21:08, Monday, 27 July
The Daily WTF XML 20:21, Monday, 27 July 21:07, Monday, 27 July
The Monochrome Mob XML 20:35, Monday, 27 July 21:16, Monday, 27 July
The Non-Adventures of Wonderella XML 20:56, Monday, 27 July 21:39, Monday, 27 July
The Old New Thing XML 20:35, Monday, 27 July 21:19, Monday, 27 July
The Open Source Grid Engine Blog XML 20:21, Monday, 27 July 21:08, Monday, 27 July
The Stranger XML 20:35, Monday, 27 July 21:20, Monday, 27 July
towerhamletsalarm XML 20:21, Monday, 27 July 21:07, Monday, 27 July
Twokinds XML 21:07, Monday, 27 July 21:49, Monday, 27 July
UK Indymedia Features XML 21:07, Monday, 27 July 21:49, Monday, 27 July
Uploads from ne11y XML 20:21, Monday, 27 July 21:07, Monday, 27 July
Uploads from piasladic XML 20:56, Monday, 27 July 21:39, Monday, 27 July
Use Sword on Monster XML 20:21, Monday, 27 July 21:08, Monday, 27 July
Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily XML 20:21, Monday, 27 July 21:07, Monday, 27 July
what if? XML 20:35, Monday, 27 July 21:16, Monday, 27 July
Whatever XML 20:56, Monday, 27 July 21:45, Monday, 27 July
Whitechapel Anarchist Group XML 20:56, Monday, 27 July 21:45, Monday, 27 July
WIL WHEATON dot NET XML 20:35, Monday, 27 July 21:19, Monday, 27 July
wish XML 20:35, Monday, 27 July 21:20, Monday, 27 July
Writing the Bright Fantastic XML 20:35, Monday, 27 July 21:19, Monday, 27 July
xkcd.com XML 20:56, Monday, 27 July 21:39, Monday, 27 July