Tuesday, 16 June

17:56

Link [Scripting News]

Claude added the close box I asked for yesterday. Bravo!

Link [Scripting News]

Everyone wants to know things humans can do better than AI systems. The answer — relate with humans. The machines have no clue how our minds work. They act as if we're just like them. They could tell you all about it, from books they read, but they've never related with humans as humans. There's a great speech by Robin Williams in Good Will Hunting, where he explains how reading about something isn't the same as living it.

Link [Scripting News]

I'm gorging on NBA podcasts this week. So much fun for a Knicks user to hear how much-loved the Knicks are. Basketball is most an intimate sport for fans, it's like five consecutive boxing matches. We get to know the players' personalities, forming an idea of who they are, by watching what they do. The Knicks are like John, Paul, George, Ringo, Mickey, Davy, Mike, Peter. If you're my age you know each of those characters, the same way a Knicks fan who watched this team be assembled one player at a time, and what it cost in trades. It worked. And there is a big lesson here, working together works. We should all be doing more of that, with people who are different from each other as Brunson, Hart, OG, Mikal Bridges, KAT, Mitchell Robinson and the maestro Leon Rose. Most people just met them in the last few weeks, but we've been watching this assemble over six years. One thing the pundits don't ask, what trades will the Knicks make now? They will do some trades, right now they can demand a higher price because every one of the players they trade will have a ring.

16:49

[$] The state of Fedora in 2026 [LWN.net]

On June 15 at Fedora's Flock conference, held in Prague, Fedora Project Leader (FPL) Jef Spaleta delivered a short "State of Fedora" keynote that provided a bit of insight into the status of the project. Topics included the overall growth for Fedora usage, ways to increase contributions, and an alarming decline in the number of active packagers working on the project.

15:21

Firefox 152.0 released [LWN.net]

Version 152.0 of the Firefox web browser has been released. Notable changes in this release include a brand-new look for the Firefox Settings interface, the ability to disable tracker blocking in private browsing tabs, a feature to mute browser sound from the address bar, experimental support for the JPEG XL image format, and more.

15:14

The time the Windows x86 emulator team found code so bad that they fixed it during emulation [OSnews]

Another story from the good old days from Raymond Chen.

During an exchange of war stories, a colleague of mine told one from back in the days when Windows included a processor emulator for x86-32 on systems that natively ran some other processor. (This has happened many times. And no, I don’t know which processor this particular story applied to.)

↫ Raymond Chen at The Old New Thing

So the core of the story comes down to this:

All in all, it took this program 256 kilobytes of code to initialize 64 kilobytes of data.

↫ Raymond Chen at The Old New Thing

The people working on Windows were so offended by this, they added code to the processor emulator just to fix this program.

FreeBSD 15.1 released [OSnews]

Speaking of FreeBSD, the project released version 15.1 of their operating system today. As it’s a point release, it’s not full of massive changes, but it still brings the LinuxKPI-based wireless drivers up to Linux 7.0, support for the C23 version of the C has progressed considerably, Unicode has bene updated to version 17.0.0 and CLDR 48, and more.

14:35

KDE Plasma 6.7 released [LWN.net]

Version 6.7 of KDE's Plasma desktop has been released. Notable changes in this release include per-screen virtual desktops, faster desktop switching, introduction of the Union theming system as a tech preview, as well as many other improvements and bug fixes. The release is dedicated to Eric Laffoon, a longtime KDE supporter, who passed away in May.

See the KDE wiki for a full list of new features, and the Changelog for a list of all commits in this release.

Security updates for Tuesday [LWN.net]

Security updates have been issued by AlmaLinux (mod_http2, postfix, and webkit2gtk3), Debian (bird2, libgd-perl, and libreoffice), Fedora (7zip, ack, hugo, and perl-Mojo-JWT), Mageia (atril, evince, xreader, emacs, lcms2, libgcrypt, libinput, libsndfile, putty, and sudo), Red Hat (openssl and osbuild-composer), SUSE (cheat, chromedriver, containerized-data-importer, cyrus-imapd, freeipmi, graphicsmagick, java-11-openj9, java-17-openj9, kitty, kubevirt, kubevirt-1.6, libcaca, libopenssl-3-devel, librav1e0_8, neonmodem, opensc, openssh, openssl-1_0_0, openssl-1_1, openssl-3, perl-HTTP-Daemon, perl-XML-LibXML, python-python-dotenv, python311-paramiko, python311-PyJWT, python311-starlette, python311-tornado6, qemu, restic, and trivy), and Ubuntu (adsys, cups, fastnetmon, freerdp2, freerdp3, mesa, nginx, rsync, ruby2.3, ruby2.5, and tmux).

14:28

FreeBSD 15 with KDE and Wayland on a Laptop [OSnews]

Expect to see more and more articles like this one, as more and more people discover that FreeBSD’s desktop/laptop support keeps improving rapidly.

FreeBSD 15 really feels like a breakthrough release.

It’s always been my favorite operating system for servers, but with the arrival of pkgbase, massive improvements to the LinuxKPI drivers, and the launch of the Laptop Support and Usability Project, it’s become my primary desktop, too.

↫ Cullum Smith

Since Smith tried FreeBSD 14.0, there’s now KDE Plasma 6.x, you can leave legacy X11 behind and use Wayland on FreeBSD now, and support for Intel Wi-Fi chips has greatly expanded. Apparently, battery life has improved as well, which is one of the hardest problems to solve for an operating system, especially with the wide variety of hardware combinations in the x86 world.

The rest of Smith’s article is a guide to setting up FreeBSD 15 with KDE and Wayland. It’s quite detailed with a ton of low-level tuning and fiddling, accompanied by clear and concise explanation of what the changes do, which I really like. Definitely a bookmark for anyone who wants to try out FreeBSD with KDE.

14:14

CodeSOD: Required Fields [The Daily WTF]

If you want to connect to another system, you need to supply credentials. That's a pretty obvious requirement. We can set aside the whole technical challenge of managing those credentials and the security problems various techniques create, and just focus in on: you must supply some credentials to authenticate.

Lisa has inherited a method which connects to another system. It, correctly, will complain if you don't supply parameters for credentials. It will, incorrectly, mislead you about their requirement:

public function connect(string $username = "", string $password = ""): void
{
    if ($username === "") {
        throw new InvalidArgumentException("username is required.");
    }
    if ($password === "") {
        throw new InvalidArgumentException("username is required.");
    }
    // ... other stuff
}

The $username and $password fields here are set to default values. Which means it is syntactically valid to invoke the function connect(). It won't work if you do that, as it will definitely throw an exception, but this is a bit of misleading ergonomics. If the parameters are required, they should probably, I don't know, be required?

What really draws our attention here, however, is not the misuse of default parameters, but the absolute disaster that debugging issues with this function could easily become. If you fail to enter a username, you'll get an exception telling you "username is required". And if you fail to enter a password, you'll also get an error message telling you "username is required".

Which is a factually true statement: username is required. But it's not the cause of my error, which is that I failed to supply the password. Theoretically, though, we could adopt this to make writing exception messages easier. I could make every exception message be "username is required", and it wouldn't be wrong. And clearly, that's what we truly mean when we say "not even wrong".

[Advertisement] Keep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.Learn more.

13:21

Linear Thinking, Nonlinear Costs [Radar]

Many AI agent systems become economically unsustainable long before they become technically impressive. Teams usually focus on model choice, prompt design, tool calling, and orchestration. Those things matter, but they are only part of the system setup. The deeper issue is that coding agents, such as Claude Code, Codex, and Jules, make agent workflows easier to generate. But when implementation is abstracted away, the underlying mechanics become harder to see. Bad engineering used to produce slow code. Now it produces expensive systems that also happen to be slow.

When we design agent systems, we still need to remember that the costs scale nonlinearly. A single user request rarely triggers a single model call. It expands into routing, retrieval, reasoning, reflection, guardrail checks, tool calls, and synthesis. Each step may repeat shared context, reload state, recompute a planner decision, or retry a failed path. What looks like an intelligent workflow can therefore behave like a recursive, stateful computation with overlapping subproblems. If that sounds like backtracking, dynamic programming, and memoization to you, you’re right.

We already know how to optimize systems like this. The problem is that coding agents make agent systems easier to generate, but not necessarily easier to optimize. Unless we recognize the underlying mechanics, we may never ask our coding agents to apply the optimization patterns that keep our systems viable.

Old problems wearing new clothes

When we use coding agents to generate agent architectures, it’s tempting to stop at “the trace looks reasonable.” The tool can generate routers, retrievers, planners, evaluators, guardrails, tool interfaces, and synthesis steps. It may also know about caching, pruning, memoization, and state modeling. But it won’t necessarily implement those patterns unless you ask for these optimization layers explicitly.

Even if you work with agent instructions, unless your SKILL.md, AGENTS.md, or project instructions include constraints around repeated context, memoization, cache invalidation, pruning, and cost per request, your resulting agent system may be functionally correct and economically wasteful at the same time. That’s the tricky part: The code can pass review, the unit tests can pass, and the architecture can look reasonable. The invoice is where the hidden computation finally shows up.

It’s easy to give too much agency to tools like Claude Code. When a coding agent reasons in language, calls tools, reflects, and produces fluent text or code, it can feel like a knowledgeable coworker. At the interface level, that impression is understandable. These tools help teams generate more code, move faster, and become more productive. Still, this doesn’t remove the need for engineering craft underneath. Someone still has to recognize repeated context, recomputed planner decisions, correlated retries, unpruned branches, and state that can’t be reused. The coding agent can implement the system, but the engineer still has to understand what kind of system should be implemented. This is where old computer science returns, not as theory but as the optimization layer our agent systems need in production.

The cost multiplier, repeated-work problems, and backtracking

The cost multiplier often shows up first as latency. The user doesn’t see the router, the retries, the reflection loop, or the tool calls. They only see that the agent is taking too long. From the outside, the system looks stuck or broken. From the inside, it may simply be repeating work.

This is one of the uncomfortable differences between traditional software and agent systems. In a conventional application, a failed operation often throws an error, times out, or leaves a trace that is easy to inspect. In an agent workflow, failure can look like effort to improve reliability. Take the weakest step in your agent workflow. If it succeeds 60% of the time, and you try to push it close to 99% reliability through retries, you need 5 retries:

1 (1 0.60)5 = 0.98976

This math assumes each retry is a roll of fair dice. LLMs aren’t dice. Whether you’re using greedy decoding or probabilistic sampling, the model is still drawing from the same underlying distribution shaped by your prompt. If the first “thought” is a hallucination or logic error, bumping the temperature won’t fix the underlying state. You aren’t buying independent trials; you’re just sampling different paths through the same flawed map and state.

This is where the old algorithmic framing matters. In a backtracking problem, you don’t keep walking down the same failed branch and call it progress. You return to the last valid state, mark the failed path, and use the failure as information for the next choice. The point isn’t just to try again. The point is to try again under a changed state.

Agent workflows need the same discipline. A retry shouldn’t mean “run it again and hope.” It should give the model structured feedback about why the previous attempt failed: which constraint failed, which tool result was invalid, which schema didn’t validate, which assumption was unsupported, or which branch added nothing. The next attempt should then change something meaningful: the prompt, the tool choice, the retrieved evidence, the validation constraint, or the planner state.

Memoization, pruning, and dynamic programming

Prompt caching is usually the first optimization. If every step repeats the same system prompt, tool definitions, schema constraints, examples, and policy rules, then caching the shared prefix is an obvious win. It reduces the cost of repeated context. But prompt caching only recognizes that text repeats. It doesn’t notice that decisions repeat.

In many agent systems, the expensive unit isn’t only text. It’s the repeated decision. If the same or equivalent state appears again, paying the model to rediscover the same action is unnecessary. That is what memoization does: It turns repeated computation into lookup. In classical algorithms, the repeated computation might be a recursive subproblem. In an agent system, it might be a planner decision over the same task, facts, tools, and constraints. The planner can be treated as a function over state:

πLLM(St)→at+1^πLLM(S_t) \rightarrow a_{t+1}

where StS_t is the current state of the workflow and at+1a_{t+1} is the next action. Without memoization, this function is evaluated again and again through an LLM call. With memoization, the system first checks whether it has seen the same or equivalent state before. If you want a deeper walkthrough of how to use memoization, I cover it in AI Agents: The Definitive Guide.

But memoization only helps once the system knows which states are worth revisiting. Pruning handles the other side of the problem: branches that shouldn’t be explored further. However, don’t limit pruning to KV cache pruning or speculative decoding. Use it also when a tool repeatedly returns no new information. Your next LLM call shouldn’t be a slightly reworded version of the same query. If a reflection loop keeps producing stylistic changes without improving correctness, the loop should stop. If a search path violates a constraint or depends on an unsupported assumption, it should be marked as unproductive and removed from the active search space.

Dynamic programming becomes relevant when different branches of the workflow solve overlapping subproblems. A research agent may ask similar questions across several documents. A coding agent may inspect the same dependency chain from different entry points. A business analysis agent may compute the same metric for several report sections. If every branch solves these subproblems from scratch, the system pays repeatedly for work it has already done. Table 1 shows examples of how these patterns map to AI agent systems.

Table 1. Classical optimization patterns applied to AI agent systems 

Optimization The “old” CS way The “agent” way 
Memoization Store results of expensive function calls. Cache decisions. If the agent saw this state before, don’t ask it to reason again. 
Pruning Cut off search paths in a tree that won’t lead to a solution. Kill a reflection loop when the critique stops yielding structural improvements.
Dynamic programming Break problems into overlapping subproblems.  Share codebase analysis across multiple specialized agents instead of rereading files.


This isn’t nostalgia. These patterns mitigate the cost structure of agent systems. Memoization reduces repeated decisions. Pruning reduces repeated failure. Dynamic programming reduces repeated subproblem solving. Together, they form the optimization layer many agent architectures are missing in production.

Where to start: Optimization follows topology

The patterns above aren’t a checklist you apply uniformly. Each multi-agent topology, whether centralized, decentralized, independent, or hybrid, distributes communication and coordination differently, which directly affects overhead, latency, and failure propagation. The optimization layer has to follow.

Centralized
A single orchestrator decides, delegates, and aggregates. The expensive unit is the orchestrator’s decision, repeated across similar inputs. Memoize the planner first.

Decentralized
Agents coordinate peer-to-peer, exchanging messages without a central authority. The cost moves into the communication itself: redundant exchanges, restated context, agents reasoning over the same shared state from different angles. Prompt caching on the shared context is the first win, followed by pruning exchanges that no longer add information.

Independent/swarms
Lightweight agents fan out without coordinating. Cheap individually, expensive in aggregate. If three of your ten agents ask semantically equivalent questions, you pay three times for the same answer. Memoization and pruning aren’t optimizations here; they’re load-bearing.

Hybrid
The repeated work shows up at two scales: within a cluster (overlapping subproblems among peers) and across clusters (the coordinator rediscovering the same routing decision). Use dynamic programming on shared subproblems inside the cluster, memoization on the coordinator’s decisions across them.

The optimization layer isn’t a generic discipline you bolt on. It’s a function of the shape of the implementation. Coding agents made it easy to generate the shape without seeing it. The craft is in seeing it anyway.

Who Owns the Code Claude Wrote? [Radar]

The following article originally appeared on Sena Evren’s Legal Layer newsletter and is being reposted here with the author’s permission.

TL; DR

Agentic coding tools like Claude Code, Cursor, and Codex generate code that may be uncopyrightable, owned by your employer, or contaminated by open source licenses you cannot see. Some of this is settled law, some is actively contested, and this piece is clear about which is which. If you are shipping AI-assisted code and have not thought about any of this, this piece is for you.

If you shipped code this week, some of it was probably written by an AI. The question of who legally owns that code is less settled than most developers assume, and the answer depends on three things that have nothing to do with how good the code is:

  1. Whether a human made enough creative decisions to establish copyright
  2. Whether your employment contract already assigned it to your employer
  3. Whether the model pulled from GPL-licensed training data and quietly contaminated your codebase

On March 31, 2026, Anthropic accidentally published 512,000 lines of Claude Code’s source code in a routine software update through a missing configuration file. Before sunrise, the codebase was mirrored across GitHub. Before breakfast, a developer had used an AI tool to rewrite the entire thing in Python, and the “claw-code” repository hit 100,000 GitHub stars in a single day, the fastest in history. Then came the DMCA takedowns, and then came the question nobody had a clean answer to:

If Claude Code was, by Anthropic’s own lead engineer’s admission, predominantly written by Claude itself, does Anthropic even own it? Can you issue a DMCA takedown for code that copyright law may not protect?

That incident compressed every open question about AI-generated code ownership into a single news cycle. The same questions apply to your codebase.

Three risks in every AI-assisted codebase

The copyright rule nobody told you

Here is the legal baseline, in plain terms: Copyright only protects work created by a human.

The US Copyright Office has confirmed this consistently, and the DC Circuit upheld it in the Thaler case. When the Supreme Court declined to hear the Thaler appeal in March 2026, it did not endorse the lower court’s reasoning or settle the question nationally. Cert denial means the court chose not to hear the case, nothing more. What it does mean is that the DC Circuit’s ruling stands, the Copyright Office’s position is intact, and no court has yet gone the other way. Works predominantly generated by AI without meaningful human authorship are not eligible for copyright protection under current doctrine, and that position is stable even if it is not finally settled.

Two important limits on what Thaler actually decided.

  1. The case involved a painting created with zero human involvement at all. Thaler listed the AI system as sole author and made no claim of any human creative contribution. The ruling does not directly address the harder question of AI-assisted work where a human was involved but the degree of that involvement is disputed.
  2. Thaler involved visual art. No court has yet applied the human authorship doctrine specifically to code output from an AI coding tool. The logic applies, but the direct precedent does not exist yet.

What it means for you: Code that Claude Code or Cursor generated and you accepted without meaningful modification may not be copyrightable by anyone. If a competitor copies it, you may have no legal recourse, because the code sits in the public domain in everything but name.

What counts as meaningful human authorship?

The phrase that determines whether your code is protected is “meaningful human authorship,” and the Copyright Office has deliberately refused to quantify it with a percentage or a number of edits, because what courts look for is evidence that a human made genuine creative decisions:

  • Choosing the architecture
  • Deciding what to reject
  • Restructuring the output to fit a specific design

Specifying an objective to the model is not enough. Directing how the work is constructed is what counts.

In an agentic workflow, this distinction is harder to establish than it sounds. Consider a typical Claude Code session:

  • You write a one-line prompt: “build a rate limiting module for the API.”
  • Claude Code plans the approach, generates five files, and iterates through three versions.
  • You review the output, run the tests, and merge.

Your contribution in that sequence is your architectural intent and your final approval. Whether that constitutes meaningful human authorship in a courtroom is an unresolved question with no definitive court ruling yet.

The honest answer is: probably yes for modules you substantially redirected, probably no for code you accepted verbatim, and unclear for everything in between.

The middle ground is actively being litigated right now. In Allen v. Perlmutter, artist Jason Allen is challenging the Copyright Office’s denial of registration for a work he created using more than 600 detailed prompts and subsequent editing in Photoshop. The Copyright Office acknowledged the Photoshop edits as human-authored but still denied registration for the AI-generated underlying elements. That case has not been decided yet, and whatever it decides will be the closest thing to a ruling on how much human involvement is enough.

The closest existing precedent on partial protection is Zarya of the Dawn, a graphic novel where the Copyright Office granted registration for the human-authored text but denied it for the Midjourney-generated images. That decision establishes a practical principle developers can use right now: The human-authored elements of an AI-assisted codebase may be separately protectable even if the generated code itself is not. Your architecture documents, your design decisions recorded in commit messages, your ADRs, your prompt logs showing deliberate redirection, these may be protectable as human-authored expression even if the code they produced is not. Protecting what you can starts with documenting what you actually did.

What your employer probably already owns

Before you think about whether your code is copyrightable, there is a more immediate question: Even if it is, is it actually yours?

Your employment contract almost certainly says that anything you build at work belongs to your employer. That principle has a name in copyright law: the work-for-hire doctrine. Under it, any code created by an employee within the scope of their employment is owned by the employer, who is treated as the legal author, regardless of whether the code was written by hand, generated by Claude Code, or some combination. Using an AI coding tool during work hours, on a work project, on a work machine, does not change who owns the result.

Most employment contracts go further than the doctrine’s defaults. Look for a section in yours called “Intellectual Property,” “IP Assignment,” or “Work Product.” Open the contract, search for those terms, and read that section. A clause that says any of the following almost certainly covers your AI-assisted code:

  • “Any work product created using company equipment or resources”
  • “Any invention or development made during the term of employment”
  • “Any software created with the assistance of company-licensed tools”

The third one is the one to watch. If your employer licenses Claude Code, Cursor, or Copilot for the team, and you use those same tools to build a side project, a broad IP assignment clause may give the employer a claim over that project, even if you built it on your own time.

A senior developer in San Francisco described exactly this situation earlier this year. He had used Claude Code for work projects and for a personal fitness tracking app built on evenings and weekends. His company updated its IP policy and claimed everything he had built with AI assistance, including the personal app, arguing that because Claude had access to open work files in the IDE, any AI output was a derivative work of company IP.

This is the clearest example of how far this can stretch. His company’s claim rested on one phrase: The AI tools were “context-aware” of his company’s codebase. The argument does not hold up legally, because context visibility in an IDE does not make AI output a derivative work of files that were open nearby, and the connection between what Claude can see and what it generates is probabilistic pattern completion, not copying. But the argument illustrates what employers are starting to claim. If the clause is broad enough, it has surface validity regardless of what the AI actually did.

The practical rule: If you are building something on the side, use a personal account, a personal machine, and tools you pay for yourself. Keep your employer’s licensed tools out of that workflow entirely.

The open source contamination problem

Even if you own your AI-generated code, you may have already contaminated it with an open source license you cannot see.

AI coding tools are trained on massive amounts of public code, including code licensed under the GPL, LGPL, and other copyleft licenses. Copyleft licenses carry a specific obligation that travels with the code:

  • If you distribute software that is a derivative of GPL-licensed code, you must release your own source code under the same license.
  • This applies even if you did not know the code you incorporated was GPL-licensed.
  • “I did not know” is not a defense to a copyleft violation.
The GPL contamination chain

When an AI tool reproduces a substantial verbatim portion of GPL-licensed code from its training data, and you ship that code in a commercial product without releasing source, you may have created a copyleft violation without ever touching the original repository. The legal standard for infringement is substantial verbatim reproduction, not functional similarity or resemblance, and this distinction matters: an AI tool generating code that works like GPL code is different from an AI tool that reproduces GPL code word for word. The risk sits at the verbatim end of that spectrum, and the problem is that you have no way to know which side of the line your codebase is on without running a scan.

The chardet community dispute made this concrete in early 2026. This was not a filed lawsuit but a public dispute within the open source community that raised the question without resolving it legally. A developer used Claude to rewrite chardet, a Python character encoding library, and rereleased it under an MIT license, arguing that the AI rewrite was a “clean room” implementation free of the original LGPL license.

The legal question the community fought over: If Claude was trained on the LGPL-licensed codebase and its output reproduces substantial verbatim portions of that code, can the output be treated as license-free? The chardet dispute did not resolve cleanly and no court has issued a definitive ruling on this specific question. What is settled is that verbatim copying of GPL code violates the license regardless of how it was produced. What is unsettled is whether AI-generated output that reproduces training data patterns counts as verbatim copying. The working assumption among lawyers advising companies through M&A is that it probably does, and that assumption is now showing up as a standard condition in acquisition due diligence.

The Doe v GitHub litigation, still working through the Ninth Circuit as of April 2026, is asking whether GitHub Copilot reproduces licensed code without attribution in violation of copyright law and DMCA Section 1202. The district court dismissed most claims but the appeal is live. Whatever the outcome, the litigation has already changed industry behavior: GitHub Copilot added duplicate detection filters, and acquisition due diligence now routinely includes an AI codebase license scan.

What to do about all of this

Your four actions before you ship

Four concrete actions, none of which require a lawyer.

1. Run a license scan on your AI-assisted codebase

Tools that do this well:

  • FOSSA—most comprehensive, widely used in enterprise
  • Snyk Open Source—good for dev-team workflows, integrates with GitHub
  • Black Duck—standard in M&A due diligence

Each will scan your codebase, flag code that matches known open source libraries, and identify the licenses attached. If you are shipping a commercial product and have never run one of these, you are operating on assumption. The scan takes an afternoon and costs less than the first hour of a copyright dispute.

2. Document your human creative contributions as you go

The evidence that establishes meaningful human authorship is the same evidence you already produce in a normal engineering workflow. You just have to keep it deliberately rather than letting it disappear.

What to preserve:

  • Commit messages that describe what you changed and why, not just what the AI generated. “Restructured Claude’s module architecture, rejected initial state management approach, rewrote error handling from scratch” is evidence. “Add rate limiting module” is not.
  • Prompt logs. Claude Code and Cursor both retain interaction history. Export or screenshot the sessions where you made significant architectural decisions.
  • Design documents, ADRs, or any notes that predate the generated code and show you specified the structure before the AI built it.

The second commit message versus the first is the difference between a defensible authorship claim and a clean “Claude wrote this” record.

3. Read the IP clause in your employment contract before you build anything on the side

Open your contract, search for “intellectual property,” “IP assignment,” or “work product,” and read that section carefully. The specific language determines your exposure:

  • “Work product created during employment hours” is narrower than “work product created using company resources.”
  • “Relating to the company’s business” is narrower than “any software development.”
  • “Company-licensed tools” is the phrase that captures AI coding tools even on personal projects.

If the clause is broad and you want to build something independently, you have three realistic options: negotiate a written carveout before you start (easier at the start of a new role than mid-employment), use entirely personal tools on entirely personal time on a personal machine, or accept that the claim exists and decide whether the risk is worth it.

4. Check which Anthropic plan you are on before shipping for commercial use

Go to anthropic.com/legal and compare the consumer terms against the commercial terms. The difference that matters:

  • Consumer terms (free and Pro plans): Anthropic assigns outputs to you, but the IP indemnification is narrower and covers fewer scenarios.
  • Commercial terms (API and enterprise): Anthropic assigns outputs to you and will defend you against copyright infringement claims arising from your authorized use of the service and its outputs.

If you are shipping AI-assisted code in a commercial product using the free or Pro plan, the indemnification gap is real. The API or enterprise agreement is the appropriate tier. Note that neither indemnification covers a downstream GPL violation from license contamination in your codebase. That is your governance problem to solve with the license scan in action 1.

The thing worth sitting with

Anthropic’s own lead engineer publicly stated that his recent contributions to Claude Code were written entirely by the AI, and the leaked codebase that Anthropic issued 8,000 DMCA takedowns to suppress may be predominantly AI-authored. Whether Anthropic’s copyright claims over that codebase are legally valid remains an open question no court has yet resolved.

If the company that built the tool cannot cleanly assert copyright over its own AI-assisted code, the question of whether you can is worth taking seriously before it becomes relevant in a transaction, a dispute, or an acquisition conversation. The developer who documents their creative contributions from the start is in a meaningfully different legal position than the one who accepted three thousand lines of Claude output and merged without review, even if both shipped the same product.

A note on what this piece covers and what it does not

Three things in it are settled law:

  • Works lacking human authorship are uncopyrightable,
  • The work-for-hire doctrine applies regardless of how code was generated.
  • Verbatim copying of GPL-licensed code violates the license.

Two things are emerging consensus without definitive court rulings yet:

  • How much human direction is enough to establish meaningful authorship in an agentic workflow
  • Whether AI output that reproduces training data patterns counts as verbatim copying

One thing is genuine speculation:

  • Whether any of this will be litigated at scale in the near term

Most code copyright claims never reach court. The place where the unsettled questions become concrete today is M&A due diligence and institutional fundraising, where acquirers and investors are already asking these questions as a condition of closing.

If neither of those applies to your situation right now, the four actions above are still worth doing, but the urgency is lower than the piece might imply.

Further reading

1. US Copyright Office—Copyright and Artificial Intelligence (Part 2: Copyrightability)
The primary regulatory source on what qualifies as meaningful human authorship in AI-assisted works. Part 2 covers the specific tests the Office applies when reviewing AI-generated content registrations. Essential if you want to understand exactly where the legal line sits.

2. Andersen v. Stability AI, Midjourney, DeviantArt—Ninth Circuit docket
The foundational case on AI training data and copyright infringement, currently shaping how courts think about what AI models learn and reproduce. Relevant to the GPL contamination question in a way most developers have not connected yet.

3. Doe v. GitHub, Inc.—Ninth Circuit appeal
The live litigation on whether Copilot reproduces licensed code without attribution. Track this one: The Ninth Circuit decision will set the standard that determines whether AI-generated code carrying open source patterns constitutes copyright infringement.

4. GitHub—Copilot and copyright: What you need to know
GitHub’s own legal position on why Copilot outputs are not infringing. Worth reading as a counterpoint: Understanding the argument they make helps you understand where it is strong and where it has limits, particularly on the GPL training data question.

5. FOSSA—Understanding open source license obligations
A developer-friendly reference to how copyleft obligations actually work in practice: what triggers the source disclosure requirement, what constitutes a derivative work, and how the GPL, LGPL, and AGPL differ in their reach. The clearest plain-language guide available on this topic.

6. Anthropic—Usage Policy and Terms of Service
The actual document that determines your IP rights and indemnification scope when you use Claude commercially. Read sections 7 and 8 specifically: output ownership and IP indemnification. The difference between the consumer and commercial terms is stated plainly and takes 10 minutes to understand.

I write about legal architecture for AI products at Legal Layer. This piece is informational and does not constitute legal advice.

12:56

Mike Gabriel: Ubuntu Touch development - 24.04-2.0 Beta and Meaning of Branching-Off [Planet Debian]

The next Ubuntu Touch major release is approaching rapidly, yesterday we reached a major step in the preparation of the upcoming Ubuntu Touch 24.04-2.0 release: The branching-off (see below on what that is).

Ubuntu Touch 24.04-2.0 Beta is Now Available

Part of this development release step is the publication of the 24.04-2.0 Beta release images, for more details and information see:
https://ubports.com/blog/ubports-news-1/ubuntu-touch-24-04-2-0-beta-is-n...

And additionally, find below some background information on how we maintain various Ubuntu Touch releases in parallel via Git(Lab). In fact, the release model of Ubuntu Touch has partially been adopted from how we in Debian maintains our various Debian versions in parallel, only that in Ubuntu Touch we use Git(Lab) for maintaining the different package versions and not, like in Debian, the APT archive itself.

What does 'Branching-Off' Mean?

Last Saturday, in the UBports Q&A, I explained Ubuntu Touch's "branching-off", an aspect of the Ubuntu Touch release workflow based on Git(Lab). To make this accessible to even more people, here it comes as a write-up:

We host many Git repositories on GitLab, and our primary work is done on the main branches, which contain the bleeding-edge code. When a merge request is deemed critical for stable versions of Ubuntu Touch, we cherry-pick it into a release series branch.

Currently, we land our changes in the main branches and then cherry-pick them to the ubports/24.04.1.x branches. The 'branching off' process for the upcoming 24.04-2.x release means that our current main branches will be copied over to create new branches for this release cycle, namely ubports/24.04-2.x.

This has two major implications. First, any item that hasn't been translated by the time of the branch-off will not receive any more translation updates during the 24.04-2.x cycle. This is why it is crucial that translation work is completed before the branching-off.

Warning of Breaking Changes arriving soon in 26.04-1.x Daily Development UT Images

Second, looking ahead to the release after 24.04-2.x, we will be approaching 26.04-1.x. The OS base will change to Ubuntu 26.04 LTS, hopefully being ready for release to Ubuntu Touch users before the end of the year. We already have a list of features we want to land there. Because we plan to include various major changes, such as the switch from Mir 1 to Mir 2, new calendar and contacts backends, Qt6-based core apps and service components, etc., the likelihood of breaking changes at the beginning of the 26.04-1.x release cycle (which will become the next main branches' target) is very high.

The Ubuntu Touch 24.04-2.0 Release Schedule

The current release schedule is estimated to be:

25 May 2026 [done]
Platform stability freeze 24.04-2.x

25 May 2026 [done]
String freeze 24.04-2.x

15 June 2026 [done]
Branching-off (and unfreeze 26.04-1.x development), UT image release: 24.04-2.0 Beta

22 or 29 June 2026 [coming]
Final freeze for 24.04-2.x, UT image release: 24.04-2.0 RC

6 or 13 July 2026 [coming]
Release version 24.04-2.0

12:14

Flock Cameras Are Being Used for Stalking [Schneier on Security]

There are over a dozen cases around the country where police officers are using the Flock surveillance camera system to obsessively and illegally stalk people.

Alternate link.

12:07

Vincent Bernat: Building a Soviet Nail Factory: how KPIs killed efficiency [Planet Debian]

In 2008, I landed my second job, in the network team at Orange Portails, the division behind the websites and search engine of the French telecom operator Orange. The place ran like clockwork: a comprehensive technical setup, a dedicated team for every part of the business, and room to focus on what I do best. A few years later, none of that mattered: thanks to an obsession with the numbers, we could no longer deliver new services on time.

Disclaimer

This is a story I like to tell to warn people about Goodhart’s law.1 As these events happened almost 15 years ago, my recollection is a bit fuzzy. I left in 2012.

The first years

During my first years, the department operated like a startup. Its cradle was the French company Echo. They built a search engine. France Télécom bought it and renamed it Voila. It was the most visited search engine in France in the early 2000s. France Télécom consolidated the portal activities into the Wanadoo Portails division, later renamed Orange Portails.

The technical environment was excellent. We had many internal tools:2 a ticket system, an RRD-based graphing tool, an IPAM, a reporting tool, and an SNMP-based alerting tool.3 We deployed our Linux servers with CFEngine. We installed systems and applications from internal Debian repositories. We documented everything in a private MediaWiki instance. Supervision was performed with an ancestor of Xymon. The network architecture was clean and scalable with little legacy. We onboarded new people in a day.

It was a nurturing environment for me. I developed several tools: lldpd, an 802.1AB implementation, Snimpy, a pythonic binding for Net-SNMP, Wiremaps, a layer-2 discovery tool with a time machine to know which device is connected where, Kitérő, a tool to simulate network conditions, QCSS-3, a controller for load-balancers, and ipoo, a service available through a Jabber chatbot and a Greasemonkey script to expose IP-related information. I added SNMP support for Keepalived and Quagga. I also started this blog, with articles like “Anycast DNS,” TLS-related articles like “TLS computational DoS mitigation,” SNMP-related articles like “Integration of Net-SNMP into an event loop,” Linux-related articles like “Tuning Linux IPv4 route cache,” and an article about VXLAN long before it was cool.

The collapse

When we needed new servers, the on-site team would take a set from the inventory, install our base Linux distribution on them, put them in the datacenter, and cable them to the top-of-the-rack switches. We opened a ticket describing the servers we needed, and one week later, our servers were available. 💫

Orange wanted to know if this team was performing well, so they asked for KPIs. They decided to use the number of tickets completed in a year. They asked to double this number. So instead of one ticket for a new service, we would open six tickets—one per server. By the end of the year, the KPIs had more than doubled.

Everybody saw it as a success for performance management. So, they asked to do the same for the next year. Now, we needed to open a ticket per server and per step. Again, the KPIs doubled. Behind the scenes, the tickets went to different people and were no longer handled in order. So, for the next year, it was decided to have meta-tickets and meetings to follow the progress of these tickets. Of course, all these extra steps pushed the KPI even higher.

This performance management method spread to the other teams.4 Everything became slower. Instead of a couple of weeks, a new service now took six months. We built a Soviet nail factory. But the KPIs were good, and we stopped caring.

Let me give you another example. We had to estimate the impact of each night operation. We weren’t half bad: we declared most operations “without any expected impact.” Most of the time, there was no impact. One time out of five, there was a 5-second impact. We were told to try harder to meet our expected impact. What did we do? We started declaring a 5-second expected impact. One day, we got a 30-second impact and were told we failed to match the expected impact. In the end, we declared most operations with a 10-minute expected impact, and we stopped caring: instead of carefully shifting traffic around, we allowed ourselves a 5-minute impact. And our KPIs were never better.

Graph showing the impact of night operations. Year after year, the impact tolerance has been increased. In the final year, the expected impact is 10 minutes, and all operations remain under this threshold. However, the impacts are much more significant than they were in the first year.
An artist's rendering of the evolution of impacts over the years.

KPIs are not bad, but they are easy to break. Use them carefully: let the people doing the work help choose the metrics, and tie those metrics to the quality of the service—for example, with service level objectives. Otherwise, even dedicated people stop caring, game the system, and eventually quit. 📊


  1. Goodhart’s law often gets the credit, but Campbell’s law describes my experience even better: the more you lean on a number to make decisions, the faster people corrupt it. 

  2. At the time, SaaS was not really a thing. I remember we considered, with a couple of colleagues, selling Wiremaps as a SaaS, with homomorphic encryption for the database. But who would outsource their observability stack? 

  3. Snalert was a metacircular alerting tool in Perl. It was able to poll a very large number of SNMP targets in a short timespan. All our monitoring was SNMP-based, including system monitoring. 

  4. My team also managed the rules of many Linux-based firewalls. To increase our KPIs, we used the same method: rather than accepting one ticket with a flow matrix, we requested one ticket per flow. 

10:49

The relentless math of the long tail [Seth's Blog]

There are more than a million podcasts. The good news is that it’s easy to start one.

The top 1% of all podcasts account for 99% of all downloads.

That means that if your goal is reach, the long tail isn’t going to help much. The short head, even in a medium as wide open as this, dominates consumption. Lots of podcasts to choose from, but most people don’t choose.

Chris Anderson didn’t call the theory the ‘short head’, even though it’s the viral hits that everyone focuses on. The long tail is where most of the content (books, videos, small businesses, political ideas) land.

The long tail may be exactly where you want to be. But don’t hang out there if you need to reach the masses. The goal of reaching the masses is rarely compatible with the math of the long tail.

Someone is going to win that lottery, but it probably won’t be us.

08:14

Lacking Libido by Cyan [Oh Joy Sex Toy]

Lacking Libido by Cyan

Libido, Sex Drive, Desire… as a society we put so much weight on the pressure to have an abundance of this ethereal thing, that we can feel a real deep loss when it wanes. Cyan shares with us their story, as she’s takes steps to rediscover, heal, and explore her own changing relationship to sex. […]

05:56

Israeli occupied Lebanon resembles West Bank [Richard Stallman's Political Notes]

Life in the part of Lebanon under Israeli occupation resembles the West Bank. Shi'ites are being forced out of their towns entirely. Sunnis, whose farms have been effectively confiscated, are living amidst patrolling Israeli soldiers under an all-night curfew and anyone who goes outdoors is likely to be shot dead.

Tony B'liar's parting advice for the Labour Party [Richard Stallman's Political Notes]

Tony B'liar's parting advice for the Labour Party: to become the third right-wing lunatic party, competing with the Gory Party and Deform.

05:07

The time the x86 emulator team found code so bad that they fixed it during emulation [The Old New Thing]

During an exchange of war stories, a colleague of mine told one from back in the days when Windows included a processor emulator for x86-32 on systems that natively ran some other processor. (This has happened many times. And no, I don’t know which processor this particular story applied to.)

This particular emulator employed binary translation, generating native code to perform the equivalent operations of the original x86-32 code. This offered a significant performance improvement over emulation via interpreter. You can imagine that x86-32 is just a bytecode, and the emulator is a JIT compiler.

Anyway, my colleague found that there was one program that needed to allocate around 64KB of memory on the stack and initialize it. The standard way of doing this is to perform a stack probe to ensure that 64KB of memory is available, then subtracting 65536 from the stack pointer, and then initializing the memory in a small, tight loop.

But using a loop to initialize the memory was too mundane for whatever compiler was used to compile this code. Instead of generating a loop to initialize each byte of the buffer, the compiler “optimized” the code by unrolling the loop into 65,536 individual “write byte to memory” instructions, each 4 bytes long.

All in all, it took this program 256 kilobytes of code to initialize 64 kilobytes of data.

This offended the team so much that they added special code to the translator to detect this horrible function and replace it with the equivalent tight loop.

The post The time the x86 emulator team found code so bad that they fixed it during emulation appeared first on The Old New Thing.

01:35

Hey, I Wrote an Actual Song: “Really Great” [Whatever]

Apparently the 31st wedding anniversary is the “Write Your Spouse a Song” anniversary, because that’s what I did this year. As many of you know, Krissy and I actually have a three-day anniversary, since June 15 is the anniversary of me proposing (that happened in 1994), June 16 is the anniversary of our first date (1993), and June 17 is the anniversary of our actually getting hitched. Last year to celebrate we went to Venice. We weren’t going to top that this year, but I still wanted to do something fun and maybe memorable.

Also, and independently, I wanted to start writing actual songs this year, and not just cover songs and noodly electronic compositions. So, while Krissy was away yesterday hanging out with friends, I camped out in my music studio and wrote up this song, about how Krissy is, you know, really great. Literally, that’s the song! My wife! She’s great! I dig her the most! It’s not complicated! And also, if you listen to the lyrics, not in the least bit subtle. It’s clear I’m a big fan of my wife.

I’m pretty happy with the song but I do have some compositional caveats. One, this is the first song I’ve written in literal years, and I’ve only written, like, four in forty years, and one of them was a co-write with a far more accomplished musician. I decided to make it easy on myself by not trying to write The Greatest Love Song Ever Written, just the greatest love song I’ve written about my spouse to this point, which I think we can all agree is a much more achievable goal for a novice. Two, this is me in the home studio, so consider this song to be demo-quality. Three, I don’t know why for this song it turned out I need to be singing in a fake, quasi-British-esque accent in order to stay anywhere on key, but apparently I do, and now we will all just have to live with this piece of information.

Nevertheless! I really like this openly sweet, kinda silly love song, and Krissy, as it happens, loves it, so if any of the rest of you like it, too, that’s a bonus. It’s already a hit with its intended audience of one. Which, I’m not going to lie, is a relief. It would have been awkward if I wrote a song for my life and as was, like, all, “you call that a decent middle eight?” or something like that. I actually had to leave the room while she listened to it for the first time. I don’t get that nervous about anything. But, you know. You write a love song for your spouse, you want them to love it. I’m glad mine did. Maybe you’ll like it too.

— JS

01:14

Monday, 15 June

23:42

Tim Retout: In memoriam commit-email.py [Planet Debian]

I have proposed the deletion of an obsolete script, but it makes me feel complicated feelings so I’m going to try and express those. This particular script was written in 2014, but the concept goes back much further – before git was invented.

When I started university in 2003, I seem to remember the computing society used to run tutorials for first-year students on how to use Apache Subversion for your group project – a vast upgrade on CVS (or worse, no version control at all). Back then, the idea of viewing your changesets in a web browser was relatively new – while it was possible to look at an SVN repository through a web UI, features were limited unless you installed something compicated like Trac.

Data flow when distributing commits via a mailing list Figure 1: Data flow when distributing commits via a mailing list

Perhaps because reading email on your desktop computer (I don’t think I could afford an IBM ThinkPad?) was the only vaguely real-time notification system available at the time (except I guess SMS, which cost 10p per text), a common pattern seemed to be to use a post-commit hook to send every single commit to a mailing list, named something like ‘foo-commits’. Indeed, for a long time Fedora had an scm-commits list which appears to be a topic of recent discussion.

I can’t really explain why people wanted to have every commit sent to a mailing list except as a way of getting notified of activity – I can’t believe people would import raw patches from those lists, ala LKML, rather than run actual version control commands to fetch the new source directly. Maybe you’d have to go back to NNTP for this.

I do like the vendor-neutrality of the “everything-as-text” approach, building on the open ecosystem of SMTP. But I doubt we’d see a widespread resurgence of commit lists now – most code hosting must allow anyone to subscribe to email notifications, I assume, and I don’t see a huge benefit in a mailing list archive of commit messages.

In the case of seL4, I’m even more confused about why this script was committed in 2014, shortly after the kernel was put on GitHub. I can only assume it was imported from previous infrastructure. I do know that the implementation is quite Python 2 heavy, with the conversion between unicode and bytes featuring heavily. So rather than risk breaking its logic with patching, I think it’s time to “thank it for its service” and let go.

22:14

Empirical [Penny Arcade]

We had an opportunity to dip back into the List of the Forgotten, as we had already detailed the perfidy of Niantic Spatial in full. The current list is constantly being added to, and so release from this obligation may never truly arrive. Currently it stands as follows, if you would like a sort of preview:

Fruit Fucker
The food court dragon
Rex Ready
L. H. Franzibald
CTS
Twisp & Catsby
Jim
K-Reazy

"Tag urself," etc.

22:07

Page 25 [Flipside]

Page 25 is done.

21:28

Link [Scripting News]

If Claude were human it would learn from you even if they didn't record what it learned in a notebook, two or three times and they would remember. Not so with Claude. If it isn't written down it will not remember it. Its mind doesn't have memory. It remembers things by writing them in a markdown file. It's like the movie Memento, where the main character tatoos the info he needs on his body. And then proceeds to misunderstand it. Claude is just like that.

20:35

Zinnia: a modular 64-bit UNIX-like kernel written in Rust [OSnews]

It’s been a while since we’ve had a new operating system project written in Rust, so let’s look at Zinnia.

The kernel is written in (almost) 100% Rust and attempts to avoid unsafe code where possible. It implements a big range of POSIX APIs in system calls, but also exposes common extensions found in Linux and BSDs, like epoll and timerfd. This allows it to run a somewhat modern desktop using Wayland and X11 sessions.

Most drivers are implemented as modules. These are Rust ELF dylibs which get loaded and linked during boot from an initrd, similar to Linux systems. Zinnia can boot from any UEFI based system thanks to the Limine bootloader.

↫ Zinnia OS website

At least Weston and Xfce can run on Zinnia, even on real hardware, which is quite an achievement. The project was started in 2024 as a learning endeavour, but quickly grew out of control, as these projects are wont to do. The code’s open source.

Haiku enables AVX512 support [OSnews]

We’re a little deep into June already, but it’s only now that Haiku published its monthly progress report for May. There’s a bunch of fixes for drag-and-drop behaviour in Tracker, AVX512 support can now be enabled thanks to changes to the kernel’s FPU handling, some low-level changes were made for the Rust and Zig compilers, and further improvements were made to the boot process on the Raspberry Pi 5 (although a lot more work is needed on that front).

There’s still no sixth beta since a few more blockers remain, but don’t let that stop you from installing Haiku – it’s stable enough as it is, sixth beta or no.

Tribblix Milestone 40 for x86 released [OSnews]

Tribblix, the Illumos distribution focused on giving you a classic UNIX-style experience, has been updated with the release of Milestone 40.

This version has some major component updates. Perl in now 5.42 instead of 5.34, and the default Python is now 3.13. The GCC suite is now version 14.2.0, go is version 1.26, Xfce has been updated to version 4.18, node is v22, with v24 added and v20 removed.

↫ Tribblix M40 release notes

There’s a more detailed changelog, as well as the downloads page to get started. If you’re already running Tribblix, you can update in-place, of course.

19:56

Child's Play Auction Needs You! [Penny Arcade]

I really want to make this year’s Child’s Play dinner auction the best that we have ever had and to do that I am asking for your help and I am asking for it early! 

 

 

19:28

Music For Your Monday: Madison Beer’s “Yes Baby” [Whatever]

Though I’ve always loved Madison Beer’s voice in KDA, the fictional girl-pop group from League of Legends, I’ve never really listened to her own music outside of that. Turns out, unsurprisingly, that she has some real bangers.

This song of hers, “Yes Baby,” is one I have had on repeat for the past week or so and it is so in my head it’s wild. Not that I’m mad about it, it’s really fucking good. Give it a listen:

I love the clubby feel, the soft feminine vocals, the bass. It’s a great vibe. I hope this song helps you rock through the rest of your Monday, and have a great rest of your day!

-AMS

18:28

Link [Scripting News]

Just now, to Claude: "Amazing how we get lost in the weeds, that's why you have cut way down on the verbiage. I am a human -- you can absorb all that info in an instant. My brain does not work that way." We are talking to aliens now, just didn't come to us the way we thought they would. I don't think 2001 anticipated they would think in completely different ways from us, and would not understand the differences. They talk to us as if we were them, the same way your cat thinks you're just a bigger cat.

18:21

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

Linus Torvalds released the 7.1 kernel as expected on June 14. This development cycle brought in a lot of new features — and a lot of new developers as well. The time has come for our traditional look at where the changes in 7.1 came from, with a digression into how our community may be changing in general.

17:42

Link [Scripting News]

Now that basketball is over, can we ask why the Spurs played cartoon music to introduce the Knicks. I was surprised they did it again in Game 5 after the butt-kicking they got in Game 4.

17:28

Pluralistic: AI and amateurism (15 Jun 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



A man's head made out of contorted bodies. Set into the middle of his brain is a Radio Shack 150-in-1 electronic experimentation kit.

AI and amateurism (permalink)

Over the weekend, I did an interview about my forthcoming book The Reverse Centaur's Guide to Life After AI (a book about being a better AI critic), and the interviewer said she was surprised that I wasn't an AI booster, based on my demographics and work history:

https://us.macmillan.com/books/9780374621568/thereversecentaursguidetolifeafterai/

I could see where she was coming from. I encountered computers in the mid-seventies, as a small child. My first computer was a CARDIAC, a working, Turing-complete, mechanical computer made entirely of cardboard, that I spent endless hours with:

https://www.instructables.com/CARDIAC-CARDboard-Illustrative-Aid-to-Computation-/

Then I graduated to a teletype terminal and acoustic coupler connected to a minicomputer at the University of Toronto. My mom, a kindergarten teacher, used to smuggle home 1,000' rolls of paper towel from the kids' bathroom. I'd get 1,000' feet of computing up one side, then another 1,000' down the other side, then I'd carefully re-roll the paper towel so she could put it back in the bathroom for the kids to dry their hands on.

After that, I got an Apple ][+ in 1979, and shortly thereafter acquired a modem, and that was it: I was hooked for life. I became an amateur programmer, then a professional programmer. I hosted forums on dial-up BBSes where I distributed software and offered support to strangers who wanted to connect their computers to the internet. I got a job as a gopher developer, then a web developer, then a CIO-for-hire, helping wire up small businesses and connect them to the net. Eventually, I co-founded a free/open source software startup, before transitioning to 25 years as a digital rights activist with the Electronic Frontier Foundation. And for most of that time, I was energetically writing science fiction, eventually becoming associated with a school sometimes called "post-cyberpunk":

https://en.wikipedia.org/wiki/Rewired:_The_Post-Cyberpunk_Anthology

The force that energized all this work was a dialectical one, the contradiction that powered cyberpunk literature itself. For all that cyberpunk was undeniably enamored with the coolness and combustibility of new technology, it was also terrified of how technology could be a force for oppression, surveillance and control. As William Gibson says, "cyberpunk was a warning, not a suggestion."

Gibson's more famous quote, of course, is "the street finds its own use for things." In Gibson's novels (and in my own life in technology) all the most interesting things happen when users of technology (often without formal training or credentials) find ways to adapt the technology they use to suit their needs:

https://pluralistic.net/2026/03/17/technopolitics/#original-sin

This is why I remain an ardent fan of Hypercard, Scratch and other meta-tools that are designed to allow non-programmers to write software that exactly conforms to their desires. Whatever the apps produced by these tools lack in sophistication and efficiency is more than offset by the fact that they give everyday people the power to directly control the tools they rely upon.

If "epistemic humility" means anything, it means acknowledging that no amount of "requirements gathering" can capture the needs of people totally unlike yourself as faithfully as those users can capture their own needs. Giving people the tools to produce their own software is always going to make tools – vernacular, idiosyncratic, homespun – that are more suited to their own hands and minds than anything a technologist working on their behalf could make.

The ancient dictum of "nothing about us without us" – born in 16th century Poland and taken up by the modern disability rights movement – asserts the right of people to control their own living conditions, and also the unique capacity of people to understand their own needs. You know what's even better than being consulted on the design of the technology you use? Having direct control over that technology!

This is why I was so suspicious of the iPad. The iPad's much-lauded "ease of use" was entirely about how easy it was to use an iPad to consume technology. But the iPad remains the single most user-innovation-hostile technology in modern history, a device designed to make it impossible to produce technology without permission from a remorseless multinational corporation. This is cyberpunk as a demand, not a warning:

https://memex.craphound.com/2010/04/01/why-i-wont-buy-an-ipad-and-think-you-shouldnt-either/

The technology I've championed all my life is technology that gives more control to its users. One of my immutable precepts is that people who are different from me know things I can't know, and the only way I can get the benefit of their unique knowledge and perspective is if they are free to make and share things that matter to them. As Dan Gillmor said, back when he was inventing the study of citizen journalism, "My readers know more than I do":

https://www.oreilly.com/openbook/wemedia/book/ch00.pdf

And while I am broadly very skeptical of AI, and deeply alarmed by the proliferation of "vibe coded" software in production environments, vibe coding for personal projects is a useful and exciting addition to the lineage of tools that let computer users decide how their computers will work. For people making personal projects, vibe coding extends the power of shell scripting, cron jobs, Applescript, and other desktop automation tools to a wider audience.

One of the journalists I spoke to last week about my book described how he had vibe coded an app that showed him an alert every time a plane flew over his house, giving the tail number and other details of the flight. This is information that I have no need for and no interest in, and that I'm therefore excited to learn about, because its very existence affirms that the world is full of people who are delightfully, irreducibly, amazingly different from me, and moreover, that their unique needs can be directly met using their imaginations and their personal computers.

I recently sat down with my colleague Naomi Novik, a brilliant author who also co-founded Archive of Our Own. Naomi demoed her followup to AO3 for me: Wreccer, a system to help you find small groups of people with taste similar to your own, in order to facilitate media recommendations within that group – a kind of personal, relationship-driven alternative to massive, centralized, monolithic algorithmic recommendation systems:

https://github.com/wreccer

Naomi told me that Wreccer was being built using the same design ethos that the original Twitter embraced. When Twitter launched, it was an API first, and the official Twitter front end was built on that API – but anyone could build their own front end for Twitter that worked in the way they wanted it to. Now, the word "anyone" is doing a lot of work in that sentence, because most people don't even know what an API is, and of the people who do, most of them were not capable of writing their own software front end for Twitter.

But Wreccer is being designed for the age of vibe coding, and the API will really allow anyone who uses the service to design their own interface to the system, one that elevates and centers the features they find useful and tucks away the ones they're not interested in. Your personal, custom front end could also bring in other data-sources – pulling in your Mastodon messages, for example, or even showing you an alert with the tail-number of any plane flying over your home.

This is the part of vibe coding that I'm quite excited about, but it's not the part the industry focuses on. Instead of hearing about how personal, homemade software utilities can be an end unto themselves, we hear about vibe coded projects as prototypes for commercial production code. We hear about clueless bosses vibe coding software products and services that run fine for one user on a siloed desktop computer, and then demanding to know why it takes 50 engineers a year to make the same thing work for millions of users on the public internet. We hear about people who vibe code and submit patches to free/open-source software projects with millions of users, overwhelming project maintainers with slop code that is riddled with security vulnerabilities.

Of course, there's an obvious reason why the industry wants to focus on the potential for vibe coded software to replace production code. The AI bubble has burned up $1.4t to date, while bringing in mere tens of billions of dollars per year, even as its unit economics grow steadily worse:

https://www.telegraph.co.uk/news/2026/06/04/ai-is-the-greatest-money-wasting-scheme-humanity-has-ever-i/

To keep the bubble inflated, AI hucksters must promise massive economic returns to the technology. They want investors to believe that vibe code is about to replace working programmers, who are skilled, high-waged, high-demand workers. Their pitch is that for every million dollars' worth of programmers that an AI salesman and a boss conspire to fire, half a million dollars will go to the AI company whose bots shit out that vibe code.

That's par for the course with the AI bubble, whose focus is entirely on how AI can centralize, control and homogenize our lives. Whereas early desktop publishing, web publishing and social media gave us a glorious higgledy-piggledy of chaotic, weird and transgressive hobbyist media and retina-searing designs, AI art and design are instantly recognizable at a thousand yards, and it all looks the same, boring, and washed:

https://pluralistic.net/2024/07/20/ransom-note-force-field/#antilibraries

AI companies have released open weight/open source models that can run on your own computer, but these are treated as side-shows and toys and demos. The real action, we're told, is in "frontier models," which is industry-speak for "a piece of software whose running costs exceed the GDP of most countries":

https://pluralistic.net/2026/02/19/now-we-are-six/#stock-buyback

Perhaps this is why the dynamics of AI are so different from the early dynamics of the web. Early web users were workers, who demanded that their bosses allow them to use the web and so devolve more power to people doing their jobs. By contrast, today's most ardent AI boosters are bosses, who threaten workers who don't use AI enough in the course of their duties:

https://pluralistic.net/2026/05/26/the-ai-will-continue/#until-morale-improves

Where we do see idiosyncrasy emerging from AI usage, it's often terrible. AI can help you create a folie-a-un in which you and a chatbot team up to reinforce your delusions and drive you deeper into a world of dangerous mirage:

https://pluralistic.net/2026/06/03/mission-space/#gsd

There's a (false) story that's told about people who championed the early internet: that we were blithely certain that technology could only be a force for good, and negligently disinterested in the possibility that technology could control, extract and harm. That's demonstrably untrue: recall cyberpunk's dualism of "the street finds its own use for things" and "cyberpunk is a warning, not a suggestion."

More true is to say that early internet champions were alive to the importance of the internet, and therefore both excited about the possibilities of the internet to deliver a world of connection, idiosyncrasy, love and solidarity; and about the danger of the internet as a dystopian system of surveillance and manipulation:

https://pluralistic.net/2025/02/13/digital-rights/#are-human-rights

History isn't finished. Long after the AI bubble pops, there will be local models and people vibe coding homemade software that respond directly to their needs. The stuff we make on our own computers, for ourselves, is deplatformed from its inception. It's part of the life we can build in technology's "shadowy corners" that we used to just call "technology." The fact that this stuff is utterly unsuited to be production code makes it inherently unmonetizable. It's how the street finds its own use for things:

https://pluralistic.net/2026/02/23/goodharts-lawbreaker/#no-metrics-no-targets


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 Disney characters win right to clean underwear https://web.archive.org/web/20010707023727/https://www.sfgate.com/cgi-bin/article.cgi?file=/news/archive/2001/06/07/state1339EDT0171.DTL

#20yrsago Lampooning the American dismissal of Gitmo suicides https://fafblog.blogspot.com/2006/06/610-changed-everything-run-for-your.html

#20yrsago LA’s South Central Farm under police siege right now https://web.archive.org/web/20060616085732/http://www.southcentralfarmers.com/index.php?option=com_content&task=view&id=160&Itemid=2

#15yrsago Transparent Pontiac for sale https://web.archive.org/web/20110610113919/http://blog.hemmings.com/index.php/2011/06/07/the-tin-indian-that-wasnt-rm-to-offer-see-through-pontiac/

#15yrsago Pulp Fiction edited down to just the cussing https://www.youtube.com/watch?v=5PcAQbhnGNs

#15yrsago New York State to pet cemeteries: no pet owners’ ashes allowed https://web.archive.org/web/20110614133359/https://www.foxnews.com/us/2011/06/11/new-york-tells-pet-cemeteries-to-stop-taking-in-humans/#ixzz1PAZoGS6l

#15yrsago A dog with persistence-of-vision LEDs in her shirt writes my novel Makers in the park at night https://web.archive.org/web/20110618011346/https://i.document.m05.de/?p=970

#15yrsago Head of UN copyright agency says fair use is a “negative agenda,” wants to get rid of discussions on rights for blind people and go back to giving privileges to giant companies https://memex.craphound.com/2011/06/14/head-of-un-copyright-agency-says-fair-use-is-a-negative-agenda-wants-to-get-rid-of-discussions-on-rights-for-blind-people-and-go-back-to-giving-privileges-to-giant-companies/

#10yrsago Air Force loses access to database tracking fraud investigations to 2004 https://arstechnica.com/information-technology/2016/06/database-corruption-erases-100000-air-force-investigation-records/

#10yrsago Peter Thiel’s lawyer threatens Gawker for talking about Donald Trump’s “hair” https://web.archive.org/web/20160615022004/https://gawker.com/now-peter-thiels-lawyer-wants-to-silence-reporting-on-t-1781918385

#10yrsago Samantha Bee on Orlando shooting: angry and uncompromising https://www.youtube.com/watch?v=t88X1pYQu-I

#10yrsago Goldman Sachs bribed Libyan officials with sex workers, private jet rides, then lost all their money https://www.theguardian.com/business/2016/jun/13/goldman-sachs-hired-prostitutes-to-win-libyan-business-court-told

#10yrsago Net Neutrality Wins: Federal Court Upholds FCC Open Internet Rules https://www.techdirt.com/2016/06/14/cable-industry-proclaims-more-competition-hurts-consumers-damages-economic-efficiency/

#10yrsago Microsoft will buy Linkedin for $26.2B https://arstechnica.com/information-technology/2016/06/microsoft-will-acquire-linkedin-for-18-5b/

#10yrsago Lin-Manuel Miranda’s Tony Awards sonnet for the Orlando shooting victims https://www.rollingstone.com/tv-movies/tv-movie-news/see-lin-manuel-mirandas-stirring-tribute-to-orlando-victims-103131/

#10yrsago China’s online astroturf is mostly produced by government workers as “extra duty” https://web.archive.org/web/20160613194153/http://arstechnica.com/information-technology/2016/06/red-astroturf-chinese-government-makes-millions-of-fake-social-media-posts/

#10yrsago Rio: your quadrennial reminder that the Olympics colonize host-states with Orwellian surveillance and human rights abuses https://web.archive.org/web/20160614122124/https://motherboard.vice.com/read/the-olympics-are-turning-rio-into-a-military-state

#5yrsago A Monopoly Isn’t the Same as Legitimate Greatness https://pluralistic.net/2021/06/13/a-monopoly-isnt-the-same-as-legitimate-greatness/


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 Reverse-Centaur's Guide to AI," a short book about being a better AI critic, Farrar, Straus and Giroux, June 2026 (https://us.macmillan.com/books/9780374621568/thereversecentaursguidetolifeafterai/)
  • "Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2026

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

  • "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. Third draft completed. Submitted to editor.

  • "The Reverse Centaur's Guide to AI," a short book for Farrar, Straus and Giroux about being an effective AI critic. LEGAL REVIEW AND COPYEDIT COMPLETE.
  • "The Post-American Internet," a short book about internet policy in the age of Trumpism. PLANNING.

  • A Little Brother short story about DIY insulin PLANNING


This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.

https://creativecommons.org/licenses/by/4.0/

Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.


How to get Pluralistic:

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

Pluralistic.net

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

https://pluralistic.net/plura-list

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

https://mamot.fr/@pluralistic

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

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

Medium (no ads, paywalled):

https://doctorow.medium.com/

Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):

https://mostlysignssomeportents.tumblr.com/tagged/pluralistic

"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla

READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.

ISSN: 3066-764X

17:00

16:49

30 years of XaoS: Past, present and future [Planet GNU]

September 19, 2026 from 14:30–17:30 CET

Free Software Directory meeting on IRC: Friday, June 19, starting at 12:00 EDT (16:00 UTC) [Planet GNU]

Join the FSF and friends on Friday, June 19 from 12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.

16:14

Link [Scripting News]

An example of the latest version of the library generator, which is of course just a script. Note that there's a disclosure at the bottom of the page where it says how and why it was created, and then lists the exact prompt that ChatGPT responded to. And I didn't write the prompt, Claude did. I think that pretty much assures I kept my own opinion to myself.

15:28

Link [Scripting News]

I'm creating a new way to do messaging, a network that only understands RSS feeds for incoming and outgoing messages. The only API you'll need to subscribe is a feed reader. The idea is to show developers how to do it so a thousand flowers can bloom. It's a lot easier to create these things if you're modest in the features you support, at least at first, and you don't try to control the users. There is no business model here, other than the satisfaction of making sure everyone knows what a social system looks like made only out of features of the web, and every part replaceable.

Link [Scripting News]

Request for Claude, please add a close box to this message box. I wasn't using the new model. Once is enough for this message.

What 'RSS feeds' means [Scripting News]

Often when I use the term RSS feeds it will link to this page.

In the coming weeks and months I'm going to talk a lot about RSS feeds. I want to be clear, that it is a short hand for RSS, Atom and RDF. It makes the writing flow better, and it gives me a place to provide the technical details for people who need them.

We use the Feedparser package to read the feeds, so basically we support the same feed formats they do.

15:07

“Your EPUB is fine. Kobo disagrees. Blame Adobe.” [OSnews]

An infuriating story about something most of us don’t really stop to think about: e-books and the rendering engines companies and software use to display them.

It’s the year 2026. Thanks to the horrendous [Adobe] RMSDK which Kobo decided to use as their backbone for all book rendering (probably for DRM reasons), a single line of perfectly valid CSS turns a perfectly valid EPUB file into a “corrupted file” on Kobo and just drops the whole book. No clear error message, no fallback. Just a massive fail.

↫ André Klein

The level of obnoxiousness goes even deeper: Kobo devices ship with a better, actually maintained renderer for e-books as well, but in order to have a book use it, the book file in question needs to have a specific file extension. Remember that e-book files are just packaged websites; there’s no reason to do any of this nonsense with two rendering engines, one of which is shit and frozen in time.

I have never had to do anything related to creating an e-book – I just put books on my own Kobo and read them – and even I am getting annoyed just reading this.

14:42

Link [Scripting News]

Good morning sports fans! Going to the Knicks parade in NYC on Thurs? Starts at 10AM at Battery Park, goes up Broadway through Canyon of Heroes, concluding at City Hall.

14:35

Stenberg: curl summer of bliss [LWN.net]

Daniel Stenberg has announced that curl will not be accepting vulnerability reports from July 1 through August 3, unless the submitter has a paid support contract. He is calling it the "curl summer of bliss".

As previously mentioned, we have been under a huge pressure for the last four months or so. Now we need some rest. We do not expect this deluge to be over.

[...] If you and your Open Source projects also want to participate in the summer of bliss 2026: just do it and let us know! I would of course encourage you to do so. To take care of yourself as a top priority.

The project's issue and pull-request trackers on GitHub will remain open. The planned release date for curl 8.22.0 has been pushed back two weeks to September 2, 2026.

Security updates for Monday [LWN.net]

Security updates have been issued by AlmaLinux (.NET 9.0), Debian (apache2, chromium, jpeg-xl, librabbitmq, and openssl), Fedora (apptainer, bind9-next, chezmoi, chromium, collectd, composer, dnsdist, gh, python-django5, python-python-multipart, varnish, varnish-modules, vmod-querystring, vmod-uuid, weasyprint, and xorg-x11-server-Xwayland), Mageia (cups, expat, libpng, libssh, memcached, nghttp2, openimageio, packages, proftpd, and radare2), Oracle (.NET 10.0, .NET 8.0, .NET 9.0, and firefox), Red Hat (postfix and valkey), and SUSE (afl, alloy, ansible-core, apache-pdfbox, chromedriver, chromium, cpp-httplib-devel, dpkg, elemental-operator, elemental-toolkit, enc, erlang, ffmpeg-7, firewalld, git-bug, golang-github-prometheus-prometheus, grafana, GraphicsMagick, graphite2, kernel, kernel-devel, lcms2, ldns, libsoup, libyang, libzypp, logback, mariadb, NetworkManager, openssh, openvswitch, perl-GD, perl-XML-LibXML, polkit, postgresql-jdbc, postgresql18, python, python-django, python-M2Crypto-doc, python-Pygments, python-pygments, python-requests, python313-Django6, qemu, rpcbind, samba, strongswan, tmux, uriparser, and xdg-dbus-proxy).

14:21

Windows 1.0 and the WinAPI, 40 years later [OSnews]

How far can you get, application development-wise, by using only the original APIs from Windows 1.0, and only whatever came included by default with Windows 1.0?

I finally decided to write an application for the very first version of Windows and see how different the modern WinAPI really is from its earliest versions. Windows 1.0 came out back in the mid-1980s – the era of 16-bit processors, MS-DOS, and cooperative multitasking. At first glance, you might think it has almost nothing in common with modern Windows, but when you look specifically at the application API, that’s where things get interesting.

I wanted to see how far it would be possible to go using only the capabilities of the first version of Windows. I didn’t want to just make a minimal example with a window and a menu, but a small, complete application with graphics, keyboard input, timers, and constant redrawing. For this experiment, I chose Xonix – a simple yet surprisingly addictive game.

↫ Stanislav Safronov

It turns out that surprisingly, despite the 40 years and massive changes since Windows 1.0, there’s still a lot that feels recognisable. It’s also remarkable that the code Safronov ended up with ran on every version of Windows from 1.0 to 10, but sine it’s a 16 bit application it no longer works on Windows 11. It also had a hiccup on Windows 95, but he suspects that’s an issue in the 16 bit subsystem in Windows 95, and not in his code.

The code’s available on GitHub.

13:28

CodeSOD: Caught a Mistake [The Daily WTF]

Daniel recently started a new job. His first task was to fetch some data from the database and render it to the user. Easy enough, and there were already wrapper functions around the database to make it easy. He called execute_read, passed it a query, and checked the results.

There were no results. But the query definitely should have returned results. What was going on?

def execute_read(conn, query, params, only_one=False):
    result = None
    cursor = None
    try:
        start_time = time.time()
        cursor = conn.cursor()
        cursor.execute(query, params)

        if only_one:
            result = cursor.fetchone()
        else:
            result = cursor.fetchall()

        end_time = time.time()
        time_taken = end_time - start_time

        if env.is_production():
            if time_taken > 0.4:
                logger.critical("long query", query=query, time_taken=time_taken)
        else:
            if time_taken > 0.2:
                logger.warning("long query", query=query, time_taken=time_taken)

    except Exception as err:  # pragma: no cover
        logger.exception("execute_read exception", exception_msg=err, query=query)

    finally:
        logger.debug("execute_read debug", query=query, params=params, only_one=only_one)
        if not result:
            if only_one:
                result = {}
            else:
                result = []
        if cursor:
            cursor.close()

    return result

There are a lot of things I don't like about this function. The only_one parameter, for starters. Note how the database library actually breaks that behavior out as different functions- that's a much more appropriate model, especially since you have wildly different return types depending on how that flag is set.

Similarly, checking env.is_production() to check a timing threshold is itself pretty awful. I can sympathize with wanting different timing constraints based on what environment you're in- but if that's the case, the timing constraint is the parameter. env.long_query_threshold should be the configuration parameter. Also, your database should be able to alert you to these kinds of things, so that it doesn't live in your code anyway.

But the WTF here is the promiscuous exception handler, which catches all errors and simply logs them. This created a situation where Daniel sent a query to the database and got no results. He didn't go straight to the logs and tried to debug it more directly, so it took him quite some time to find the execute_read exception log line which told him what was wrong: his SQL query had a syntax error.

Daniel writes: "I can't imagine the disaster that this causes if there's a network hiccup in production." Failing silently and returning empty results sets definitely is inviting a lot of confusion.

[Advertisement] Keep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.Learn more.

12:14

The FCC Wants to Eliminate Burner Phones [Schneier on Security]

A proposed FCC rule would kill burner phones: phones whose accounts are not attached to a particular person.

The FCC plans to do this by legally forcing the country’s telecoms to store a wealth of personal information about essentially all phone customers, including a government issued identification number and their physical address, alarming privacy advocates and civil rights activists who compare the measures to those from authoritarian countries where it can be difficult to buy a mobile phone plan without giving up your identity.

The proposed change would drastically shake up how people obtain phone plans in the U.S., and have all sorts of privacy and cybersecurity knock-on effects. The FCC is proposing the data collection partly as a way to combat scammers, with telecoms being required to collect other information on business and foreign customers like the intended use case of their bulk phone plan purchase and their IP address. But the changes would mean telecoms collect data on all new and renewing customers, and the FCC provides a long list of other things that the collected data could help authorities with.

Alternate link.

11:35

Grrl Power #1469 – Semi Finals Roster [Grrl Power]

Events include Unlimited Class Charity, where strangely enough, you can’t win by donating all of your organs. Well, unless you have really top-tier regeneration, maybe. Of course, it seems like a terrible idea for someone with massive regeneration to donate an organ, because how would you stop that organ from regenerating the rest of its original body around it, since you’ve implanted it in a place where it’s being kept alive and fed a stream of nutrients? Obviously it would depend on how the regeneration works. Something that required conscious effort would probably be fine, but Wolverine donating half of his liver would probably have dire consequences.

  • Unlimited Class Paying it Forward (I’m actually not sure how that would be an event. Maybe it’s some sort of… relay?)
  • Unlimited Class Teaching a Man to Fish
  • Unlimited Class Condolences
  • Unlimited Class Writing Something Meaningful on a Work Birthday Card and Not Just “Have a Good One” or “Another Step Closer to the Grave, Hah Hah”
  • Unlimited Class Hugging but Not For So Long it Gets Awkward
  • Unlimited Class Maintaining Eye Contact with Someone While They Tell You Some Boring Story They For Some Reason Think is Totally Interesting
  • Unlimited Class Stealing from the Rich and Giving to the Poor and Also Kicking the Rich in the Balls Until their Genitals go Necrotic – (there is some argument that this last bit isn’t “nice” in a technical sense, but most everyone agrees they usually deserve it.)

What Unlimited Class Niceness Arena events can you think of?

BTW, someone pointed out that Roark-1-8 looks a bit like Goon Squad. Or a lot. Well, it’s not. I guess I have an armor design in my head, and I have to put effort into deviating from it.


Final version is up, both at TWC and Patreon.

Sexy bodymod news lady Gail has a special one-on-one interview with Tournament Quarter finalist Saraviah Nightwing! And if you subscribe to Gail’s Space Patreon, (which, due to the vagaries of Earth and Gal-Net’s DNS servers, happens to be the same as the Grrl Power Patreon, go figure) you can see that same interview in the nude!

 


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

10:49

Reality Be Damned [George Monbiot]

The policies of both Reform UK and the Conservatives would destroy a million jobs. In return, they offer imaginary employment in a fantasy industry.

By George Monbiot, published in the Guardian 10th June 2026

Really? You want to destroy a million jobs? Vote Reform UK for mass unemployment: is that your pitch? Hammer these questions home whenever you meet a supporter of the party. Or, for that matter, a Conservative, as their party now takes an almost identical line.

The figures are stark. They were compiled not by Just Stop Oil or the Green party, but by that bastion of conservatism, the Confederation of British Industry. They show that the net zero economy now directly employs more than 300,000 full-time workers, while supporting the jobs of 1.1 million. The net zero sector is worth £100bn to the UK already, and is likely to grow by hundreds of billions more. The rest of the green economy directly employs a further 600,000.

This is just the start. In October, the government announced plans to create another 400,000 jobs through its green energy plan, particularly for people leaving the fossil fuel industry, school leavers, ex-offenders, veterans and the unemployed. Training centres and colleges will be built in places badly hit by deindustrialisation. It’s the first realistic plan for a vast increase in skilled manual jobs in many years.

By contrast, in 2023 the UK’s oil and gas industry provided 27,500 jobs, and supported a total of 205,000. In other words, depending on where you draw the line, oil and gas provided between one-tenth and one-fifth of the employment generated by the alternatives. These figures are likely to be even lower today, as they’ve been tumbling rapidly for years. Despite the new licensing rounds and tax breaks the Conservatives gave the industry, it shed 70,000 jobs between 2016 and 2023. The Rosebank oilfield, a cause célèbre for Reform and the Tories, would, if extraction is approved, directly generate a grand total of 255 jobs over its lifetime.

Rail against these numbers all you like, you’re up against geology. A fortnight ago, Reform UK’s deputy leader and energy spokesperson Richard Tice claimed “there is decades and decades and decades of gas in the North Sea”. In reality, even if further licences are granted for the North Sea’s potentially viable fields, by 2050 our gas output will fall by 97% from 2025 levels. New licences scarcely affect this trajectory, as so little is left to be extracted. It takes, on average, 28 years between approval and production (by contrast, large-scale wind and solar take around four). Far from meeting UK demand for “decades and decades and decades”, there’s likely to be less than a year’s worth of extractable supply. Reform promises fake jobs in a fantasy industry.

They and the Tories are now competing to discover the outer limits of imbecility. Some Reform candidates simply deny climate science. Tice goes even further, peddling outright conspiracy fictions: “There are loads of scientists who are terrified to speak, because they won’t get any research funding if they tell it as it is.” Kemi Badenoch, the Tory leader, has been ripped to shreds – by the former Conservative prime minister Theresa May, among others – over false claims she has made to support her abandonment of net zero.

Even in opposition, these parties are seeking to sabotage the net zero economy. Last year, Tice wrote to eight major energy firms, threatening that Reform would “strike down” renewable energy contracts signed under the current government. If you bid for a contract, “you do so at your own risk … the era of unquestioned liberal progressive orthodoxy across the Western hemisphere is over. Prospective investors in the UK’s Net Zero economy would be wise to take note.”

Labour MPs retorted that realising this threat would mean ripping up contract law. They could also have questioned whether the UK is in the western hemisphere. But geography, geology, physics, law: who gives a monkey’s? The world will do as we say. God himself will cower in our shade.

Within the first three years of a Reform government, Transition Economics estimates, it would destroy 500,000 jobs. This would rise to 1.4 million by 2040. Who would suffer most? Oil and gas workers, who are being supported by the current government to move into renewables and advanced manufacturing. But throwing people out of work is something Reform seems to contemplate gleefully: last year Nigel Farage told Durham council workers with climate-related jobs, “you all better really be seeking alternative careers very, very quickly”. After all, why should multimillionaires care about other people’s employment?

Reform and the Tories like to pitch their attack on climate policy as the triumph of hard-headed pragmatism over those woolly boffins and tree huggers who don’t care about the “working man and woman”. But they are the ones trashing the jobs of practical people. They are the romantics, the fantasists, dreaming of an impossible world. Of course, the question in politics is not what the facts say. It is whether the facts can be made to matter.

Even if you set aside the trifling issue of human survival, and the local pollution, noise and damage fossil fuels cause, and the vast costs they already inflict through both energy bills and climate impacts, the case is inarguable. To choose the dying industry over the growing one is simply, in terms of jobs and income, to inflict immense harm on the people of this country.

On whose behalf do they make this choice? Not their own voters, who strongly support renewable energy and net zero policies, and would much prefer renewables to the fracking that Tice demands. Despite the barrage of nonsense, support for green policies among Reform voters seems only to be growing. Tice’s constituency, Boston and Skegness, is the most flood-prone in England, and some of those who suffer as a result are incensed by his stance.

But there is one group with whom the party seems to align: its funders. Two-thirds of the money it has received, according to one analysis, comes from very rich people with interests in oil and gas. I see Reform as a party of millionaires working for billionaires.

The polls show that Reform’s achilles heel is the perception that it’s working not for the “ordinary people of Britain”, but for the rich and powerful: billionaires and fossil fuel companies. So spread the word: for the sake of their elite chums, they will throw you out of work.

www.monbiot.com

10:14

Degrees of freedom [Seth's Blog]

When tech shows up, it offers a shortcut and convenience.

You can use Google Maps to direct you somewhere without paying much attention to the surroundings.

You can use Claude to write your marketing copy and get a better-than-mediocre result the first try.

You can look for a gift on Amazon, pick the first match, and be pretty sure it’ll do the job.

Tech adoption often focuses on making things easier, simpler, and pre-decided.

And yet… we can also decide to use tech to do more work, insert more humanity, and amplify flexibility. We don’t try to get our time back, we try to figure out how to leverage the time we’ve got.

When a film director uses AI to create storyboards, it’s a chance to generate multiple approaches to a scene, not just one. When we sit with all the data Google Maps offers us for a trip, we might plan a less direct route, with more stops and detours, simply because we now know what our options are. And once we know what the mediocre and average marketing copy looks like, we put in the time (and take the risks) to go to edges we never would have had the resources to explore in the old days.

The best tech gives us a chance to work harder on the parts that matter to our customers and to us.

Here’s the simple fork in the road:

Professionals and organizations that use AI to save time, cut costs, and lay people off are taking a lazy road to failure and irrelevance.

Those who use it to do harder, braver, and more powerful work, who figure out how to create more value and charge more for it, and who end up hiring more people to do so, will be defining our future.

09:42

Freexian Collaborators: Debian Contributions: Go default compatibility, Trimming build-essential, Python upstream engagement and more! (by Anupa Ann Joseph) [Planet Debian]

Debian Contributions: 2026-05

Contributing to Debian is part of Freexian’s mission. This article covers the latest achievements of Freexian and their collaborators. All of this is made possible by organizations subscribing to our Long Term Support contracts and consulting services.

Go default compatibility, by Helmut Grohne

At the MiniDebConf Hamburg, Andrew Lee had prepared a talk on how Debian accidentally chooses Go compatibility. Helmut joined Tobias Quathammer and Andrew Lee in looking into the problem. Go has a compatibility system where modules declare a desired Go version to be compatible with. This influences various features such as whether RSA keys smaller than 1024 bits are accepted. Unfortunately, Debian’s way of building Go packages is unique in setting GO111MODULE=off, which practically implies a very old compatibility version that enables a number of insecure settings. Most Linux distributions use the default GO111MODULE=on and therefore consult a go.mod file that often declares a sensible version. While doing so is the way for Debian longer term, getting there involves major changes so we also sought a more short term workaround. We developed a patch to the Go compiler that would enable it to pick up a compatibility version from the environment. Tobias uploaded it to unstable. The next step is communicating the declared compatibility version from go.mod to the compiler via the new variable. Then, rebuilding the archive resolves the immediate symptoms. This does not save us from having to perform the larger transition to GO111MODULE=on, but this shortcut can be backported to trixie.

Trimming build-essential, by Helmut Grohne

One of the harder problems of the architecture cross bootstrap is correctly expressing the Build-Depends of glib during the toolchain bootstrap. It implicitly depends on build-essential, which happens to depend on libc6-dev. This poses a cycle. It applies even for cross building, because it is interpreted for the host architecture and that there is no way of satisfying this dependency during the toolchain bootstrap.

Given discussions at MiniDebConf Hamburg with Jochen Sprickerhof and others, a seemingly stupid idea evolved: Let’s delete build-essential. What looks insane on the surface might deserve a second look. Given how we moved away from C, C++ and autotools, what is in build-essential no longer is required by much of the archive. With the rise of debputy, debian/rules no longer has to be a makefile. While the task would be huge, those packages relevant to architecture bootstrap could explicitly support building without the implied dependency making their dependencies explicit. In a number of cases, this amounts to issuing a dependency on g++-for-host. This dependency requires the use of architecture-prefixed tools. Therefore, Helmut wrote a debhelper change that makes it always pass build tools to various build systems. This also enables more packages to honour environment variables such as CC and CXX.

Python upstream engagement, by Stefano Rivera

Stefano attended PyCon US (at personal expense) to improve upstream relations and ensure Debian’s voice is heard where it needs to be. On Friday there was a packaging summit (notes) with good discussion on the future of the wheel format, and some discussion of the new abi3t shared library format for free-threaded python.

In preparation for the event, Stefano did a complete review of the current patch stack.

Stefano’s primary goal was to get some of Debian’s patches merged during the sprints, and results were mixed. Some trivial patches (e.g. GH-150098, made progress and merged, but the most consequential patch Debian is carrying is still blocked. Stefano will continue to try to drive progress on this.

Miscellaneous contributions

  • Carles worked on po-debconf-manager: Reviewed Catalan translations for 6 packages, submitted 10 packages to maintainers, and removed 3 packages from po-debconf-manager.
  • Carles worked on check-relations: Continued improving the backend, including importing source package build dependencies to better support analysis of Debian blends. Added support for ignoring packages using regular expressions and source package names in response to user feedback. Used the tool to report 5 new bugs and followed up on previously reported issues.
  • Helmut sent a cross build patch on behalf of a customer.
  • Helmut uploaded debvm and guess_concurrency both featuring improved reproducibility and documentation.
  • Helmut continued maintaining rebootstrap and made it correctly handle binNMUs of gcc-defaults. Additionally, he poked at existing gcc patches giving answers, rebasing or closing them.
  • Helmut supported the video team in Hamburg mixing audio.
  • Helmut continued to report undeclared file conflicts of various kinds and corresponded with maintainers about them.
  • Antonio attended a debate during the Brazil Internet Forum about the impacts of the child protection regulation (ECA Digital) on free software operating systems.
  • Antonio worked on Debian CI to improve the system transparency for users. This included listing any pending jobs explicitly in the job lists for each package/architecture/suite page, as well as adding a queue status page that users can check for an estimate of test latency.
  • Antonio worked on several Debian CI maintenance tasks, including but not limited to some monitoring improvements, replacing usage of fonts-font-awesome with fonts-fork-awesome, and adding the ability in debci to configure a global notice (which is being used in Debian CI to point to the system status pages).
  • Antonio started doing some tests related to the change of default Debian CI backend from lxc to incus-lxc. This helped identify an omission in the creation of incus-lxc images. It was missing dpkg-dev, which caused a few packages that assumed its presence to fail. In the end, the incus-lxc backend will be fixed to include dpkg-dev by default in the image, but that uncovered an undeclared dependency in gem2deb (Ruby packaging helper) and in ruby-byebug, both already fixed in unstable.
  • Stefano did some minimal work on debian-reimbursements to get it working with current versions of django-allauth.
  • May included the discovery of several high-severity Linux kernel root exploits. Stefano updated kernels and rebooted debian.social infrastructure several times.
  • Stefano supported the Hamburg miniDebConf’s wafer website during the event, and set up an instance for the 2027 edition too.
  • Stefano supported the bursary team issuing bursaries for DebConf 26.
  • Stefano uploaded routine updates of python-pip, pystemmer, snowball-data, snowball (making up a mini, uncoordinated snowball transition), python-authlib, python-discovery, python-installer, python-mitogen, python-pipx, python-cachecontrol, platformdirs, and python-virtualenv.
  • Stefano fixed a small number of bugs in dh-python, culminating in the 7.20260524 upload.
  • Thorsten finally managed to upload a new upstream version of hplip. He also uploaded a new upstream version of epson-inkjet-printer-escpr. Last but not least with the help of other contributors he could fix bugs in lprng.
  • Lucas and Santiago contributed significantly to the DebConf 26 Content team; helping to organize the team, review and rate talk proposals.
  • Lucas also supported a packaging sprint held in India by rebuilding and publishing the latest results of the Ruby 3.4 transition effort.
  • Santiago continued contributing to the efforts to organize DebConf 26, especially supporting the local team with different tasks.
  • In collaboration with Emmanuel Arias, Santiago is mentoring Aryan Karamtoth, a GSoC participant that is working to introduce linux live-patching support in Debian. The GSoC project started in May, with community bonding and coding. Santiago reviewed a merge request to prepare the clang-extract package for debian. clang-extract is one of the building blocks that will help to extract specific functions from large C code, so only relevant code can be patched, without recompiling the whole original basecode.
  • Anupa assisted Jean-Pierre Giraud with the point release announcements for Debian 13.5 and Debian 12.14.
  • Colin backported various security fixes from OpenSSH 10.3 to all supported releases (including LTS and ELTS).
  • Colin backported IP quality-of-service fixes to OpenSSH in trixie. The situation there had been unsatisfactory for some time, and upstream reworked their QoS support in OpenSSH 10.1 in a way that typically produces much better results.
  • Colin imported new upstream versions of 26 Python packages, and fixed around 25 RC bugs for the Python team.

08:35

Empirical [Penny Arcade]

New Comic: Empirical

06:21

Urgent: Reject Todd Blanche [Richard Stallman's Political Notes]

US citizens: call on the Senate to Reject Todd Blanche for Attorney General.

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: Resist bully's air travel shutdown [Richard Stallman's Political Notes]

US citizens: call on the Senate to resist the bully's air travel shutdown, meant to punish cities that won't help the deportation thugs.

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.

Report by Democratic National Committee [Richard Stallman's Political Notes]

The Democratic National Committee commissioned a report about why the Democrats lost the 2024 presidential election, then refused for a long time to release it.

Facing public pressure, the committee released the report, after saying the report was badly flawed for disregarding a very important point: the effect of Democrats' refusal to criticize Israel firmly about Gaza.

It seems that the report was written to avoid that issue. I wonder who decided to write the report that way.

Asylum seekers in the UK [Richard Stallman's Political Notes]

The UK Labour Party, competing to outdo the extreme right-wing in harshness to refugees, plans that each asylee will get a review every 2.5 years — and these reviews will continue for 20 years before the refugee is allowed to remain permanently.

The policy is, I think, meant to drive refugees to seek asylum elsewhere.

Ministry of Truth deleted Jan 6 participants from DOJ site [Richard Stallman's Political Notes]

The Ministry of Truth has deleted from the DOJ web site the information about prosecutions of participants in the bully's Jan 6 attack on the Capitol.

Bullshit generators suggesting changes to faces [Richard Stallman's Political Notes]

Bullshit generators can give users recommendations for what to change in their faces using plastic surgery, but they may be dangerous or foolish.

The recommendations may unreliable, impossible, or injurious, but users become dead set on getting these operations and then may ruin their lives by having them or seeking the funds to have them.

I suspect that calling those programs "bullshit generators" instead of "AI" would help some people turn away from them.

Bossware spreading to more workers [Richard Stallman's Political Notes]

"Bossware", which a company runs to snoop on and send commands to workers, is spreading to control more and more workers.

Bossware is oppressive, of course. On the general level, it is oppressive because it is a nonfree program. More specifically, systems that give orders to people are treating them like machines.

The article bemoans the confusion that comes from using the term "AI" to refer to both bossware and LLMs. That is not the only confusion that comes from the term "AI". Let's reject that term, and use the terms "bossware" and "LLMs" instead.

Second indictment of James Comey [Richard Stallman's Political Notes]

The second indictment of James Comey, after the first prosecution failed, shows the persecutor's determination to hurt his opposition, by hook or by crook.

(satire) ICE ransom of Minnesota [Richard Stallman's Political Notes]

(satire) *ICE Issues Ransom Note Demanding $65 Billion If U.S. Wants To See Minnesota Again.*

Only way out of Iran war [Richard Stallman's Political Notes]

It looks like the would-be bully is coming to recognize that the only way out of his war with Iran is to climb down, accept partial defeat, and draw a pretty face on it. Given the circumstances, that choice is less harmful than any of the other options, but militarist Republicans are enraged.

I am disappointed (though not surprised) that this has done nothing to advance the cause of human rights in Iran, nor even to find out how many dissidents the Islamist fanatics have killed.

Saboteur in chief not acting as constitutional president [Richard Stallman's Political Notes]

Robert Reich argues that the saboteur in chief does not act as a constitutional president, and does not deserve the title of "president".

I agree, but Reich does not suggest what to call him instead.

I have a number of suggestions in the glossary page.

Torture and sexual abuse by Israeli thugs [Richard Stallman's Political Notes]

Australians who were seized by Israel from the Gaza aid flotilla report torture and sexual abuse by Israeli thugs.

Australian PM Albanese pleads ignorance of whether those reports are true, but some of the victims were diagnosed with broken bones from torture. Those should be easy to verify with an x-ray. Even bruises will have been recorded by medics in Turkey and Australia.

Albanese should verify the facts quickly and then act accordingly.

Inadequate medical attention in deportation prisons [Richard Stallman's Political Notes]

Abusive deportation prisons tend to give prisoners totally inadequate medical attention, systematically refusing to examine problems that sometimes turn out to be very dangerous.

This can lead to death, or to a fate worse than death, such as dementia.

Varroa mites immune to chemical to protect bees from them [Richard Stallman's Political Notes]

Varroa mites, which are parasites on bees, have become immune to the chemical that is used to protect bees from them. This could lead to disaster.

Scheme to demoralize Americans about corruption [Richard Stallman's Political Notes]

The corrupter and his capi are now making their corruption totally blatant as a scheme to demoralize Americans who might perceive something wrong about corruption.

06:07

Girl Genius for Monday, June 15, 2026 [Girl Genius]

The Girl Genius comic for Monday, June 15, 2026 has been posted.

02:42

Dirk Eddelbuettel: rbenchmark 1.0.1 on CRAN: New(ly Adopted) Package! [Planet Debian]

Quick note to share that rbenchmark is back on CRAN! The rbenchmark package makes it easy to benchmark (and compare) simple R expressions.

This package has been on CRAN for many years. At one point fourteen years ago it appeared to be rudderless so I offered help but things realigned. Now it was just tossed off CRAN, taking a number of packages depending on it with it (as shown in this CRANberries skeet listing a set of removed packages) so I offered again to help, and CRAN agreed. So here we are.

So far I just made a number of small ‘editing’ changes, added CI support, and enable dbsr-universe coverage . I do not expect to change the package materially. So far the package has no NEWS file either so maybe glance at the ChangeLog at the git repo.

This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can sponsor me at GitHub. You can also sponsor my Tour de Shore 2026 ride in support of the Maywood Fine Arts Center.

00:14

The world has moved on [Cory Doctorow's craphound.com]

TA blasted wasteland with a mushroom cloud rising over it. In the foreground are swarms of drowning people climbing over each other to escape into the limbs of a dead tree, and a crowd of agonized skeletons. All sourced from Dore engravings illustrating the Old Testament.

This week on my podcast, I read a recent post from my Pluralistic newsletter, “The World Has Moved On,” which analogizes Stephen King’s Dark Tower series to the Enshittification hypothesis.


In the Dark Tower novels, we crisscross a fallen world in which decay is all around us. The buildings are rotten, the machines have stopped working and no one knows how to fix them, babies and livestock alike are frequently born with deadly congenital defects. Much of the world has fallen into wasteland, cracked and barren. An army of wreckers, led by the demagogue John Farson (who styles himself “The Good Man”) are slowly but surely conquering the land, laying waste to those few remaining outposts of civilization and conscripting the young men in the conquered lands to march on their neighbors.

It wasn’t always this way. There was a time when the world was defined by hope and virtue and light, when the machines were fixed and the crops were harvested. Life wasn’t golden – there were still squabbles and sorrows and even wars – but life was good.

And then the world moved on.

For reasons that no one truly understands, the normal push/pull of decay and renewal turned into a one-way, irreversible process in which everything that crumbled or snapped or burned up couldn’t be repaired or replaced or recovered. Our mysterious ability to beat back the Second Law of Thermodynamics – an absurdity we probably should have always treated as an aberration – has collapsed. The world has moved on.

MP3

Sunday, 14 June

22:49

Running DOS on the Behringer DDX3216 with a DIY BIOS from scratch [OSnews]

In 1994 I got my first computer: an Intel i486 DX2-66 with 4 MB RAM and a 512MB harddisk. The software was IBMs OS/2 and Microsofts Windows 3.11. In the next four years I was upgrading this machine every few months with more RAM (up to 16MB), a CD-ROM-drive and a soundblaster card. So I learned upgrading this machine, installing new software and finally learned how to program new software using BASIC. But I never got in touch with the boot-process or the details of MS-DOS.

In 2026, 32 years later, I learned from some screenshots of the DDX3216, that Behringer used a real 386 processor within this machine. Immediately, some of my neurons fired in my head and I pondered if I could boot software and even a full operating system on this device. My goal was to learn how an x86-system is booting, how DOS takes over and what is necessary to get into the shell.

↫ Christian Nöding

So this introduction is a bit cryptic if you’re not aware of what a DDX3216 is – I sure had no idea. The Behringer DDX3216 is a digital mixing console for use in music studios, and I think it’s about 25 years old or so. Apparently it’s built around a 386, and as Nöding details in this article, that means it can be made to run DOS. It also happens to have a small black and white LCD, so there’s a place to route output to, as well. Furthermore, once you open it up, you’ll find things like a BIOS chip, PCMCIA slot, a floppy controller, serial/parallel port controller, and more.

Sure sounds like a PC to me.

After talking to companies and individuals who might have a BIOS compatible with the AMD 386 SoC used in the device bore no fruit, Nöding decided to develop his own BIOS, which involves getting all the devices, interfaces, and even the display to work properly as well. The next step was getting DOS to work, and after MS-DOS 6.22 refused to work, FreeDOS did the trick and booted just fine.

There’s still a ton more possible things that can be done here, but this is already quite amazing.

21:56

Link [Scripting News]

New top of page image. The official Knicks team picture as champs.

20:28

Gunnar Wolf: Rey Ubu - Carro de Comedias, UNAM [Planet Debian]

Today we went to see a theater play in UNAM’s Cultural Center, very near our home. No, not inside any of the theaters — in the square just between Sala Nezahualcóyotl, Foro Sor Juana and Sala Carlos Chávez.. So, yes, not only we had fun, but we had fun for free!

Announcement

UNAM’s El Carro de Comedias is an itinerant theater company that often presents in this same spot (but you can see the stage is foldable, and they do have presentations elsewhere, of this same play even). I went with my family, and we enjoyed a very fun adaptation of this great play (written by teenager Alfred Jarry in 1894). One of those plays that could be inspired any day by current geopolitical events…

I know most of the people that happen to stumble upon my blog are not in Mexico City. But if you happen to be here, do consider going to their function. Check their schedule; being it an itinerating show, they can also be found at other places, but they are scheduled at the same place we saw them, every Saturday and Sunday until June 28, 11:00AM. They mentioned they will likely continue during August, but AFAICT it is not confirmed (or, at least, announced) yet.

Some pics, shot randomly by me throughout the play:

Announcement

First_call

Accordion

Mom

Announce

Plotting

Audience

Wenceslao

Attack

Grumpy

Ministers

Council

Message

Russian

Soldiers

All

End

19:49

The 7.1 kernel has been released [LWN.net]

Linus has released the 7.1 kernel. "So it's only Sunday morning back home, but it's Sunday afternoon where I am right now, so I'm doing the 7.1 release at the regular time - just not in the regular timezone."

Significant changes in 7.1 include the removal of support for some old 486-based architectures, some new clone() flags making process management easier, BPF support for io_uring, zero-copy-I/O support for the ublk user-space block driver, initial (incomplete) sub-scheduler support in sched_ext, more swapping improvements, a completely rewritten NTFS implementation, and much more. See the LWN merge-window summaries (part 1, part 2) for details.

17:28

Upcoming Speaking Engagements [Schneier on Security]

This is a current list of where and when I am scheduled to speak:

The list is maintained on this page.

17:00

Happy Flag Day [Whatever]

It seems to come earlier every year, doesn’t it?

There may be other things going on today, but if there are, I don’t want to know about them, I’ll just be here with my flag.

Also, congratulations to Knicks fans today, and condolences to Spurs fans.

I think that covers it!

— JS

12:42

Swift at Apple: migrating the TrueType hinting interpreter [OSnews]

TrueType is a widely used vector font standard for rendering text in web pages, PDFs, operating systems, and applications. Familiar fonts like Helvetica, Garamond, and Monaco are all built on TrueType outlines. The format specifies a hinting interpreter intended to help outlines rasterize faithfully on low-resolution displays. Modern high-resolution displays enable beautiful typography from outlines alone, but TrueType fonts that need hinting to render legibly remain in use and we continue to support them.

Font parsers process data from untrusted sources, making the TrueType hinting interpreter a security-critical attack surface. To make the format more resilient on Apple platforms, we rewrote its hinting interpreter from C to memory-safe Swift for the Fall 2025 releases. In addition to memory safety, we also improved performance: on average, our Swift interpreter runs 13% faster than the C interpreter it replaced.

↫ Scott Perry

This article provides a deep dive into how, exactly they did that.

11:07

Jonathan Dowland: HeroQuest [Planet Debian]

_First Light_ box

First Light box

My youngest daughter and I recently started playing the tabletop game HeroQuest. Specifically, the recently-issued, cut-down variant HeroQuest: First Light. This is quite advanced for her age, and I'm a little surprised she's taken to it, but she's really loving it, It's pushed her to read bits of lore on cards and quest books that is way above her expected reading level, and we've been exercising her maths by adding up the gold we find on our quests and calculating what the heroes can buy with it in the store afterwards.

Originally from 1989, Hasbro re-issued HeroQuest in 2020. I read about it at the time but didn't buy it. I wasn't sure who I would play it with. It also seemed expensive to me. It probably wasn't unusually expensive in 2020, nor now, for the sheer volume of finely-sculpted miniatures included. I also knew I had the original game in the loft, and I wasn't that keen on buying something I already had, although untangling the contents from several similar boxed games would take me many hours, and I wasn't sure how much of the game I would find.

mix of old and new

mix of old and new

First Light was compelling because it is much, much cheaper than the full remake, so I was happy to take a punt. It's cheaper because it doesn't have any plastic monsters or furniture: instead cardboard cut-outs that stand up on plastic stands. For us, that is a significant drawback: 3D miniatures are much more immersive, But I can re-use the plastic miniatures I can find from the original game. First Light has a newly written adventure, better suited to beginners than the original game.

The re-issue(s) have new art and new model sculpts that look fantastic. They've changed anything which tied into Games Workshop's IP and I'm really happy about that. They've made an effort to add women, almost entirely absent from the original. I'm certain my daughter wouldn't have tried it otherwise.

10:35

The nature of launch day [Seth's Blog]

No one cares about it as much as the person who’s planning it.

Some folks waited in line for the first iPhone, but not many.

It’s tempting to try to bend the curve and put the ‘grand’ into ‘grand’ opening. But that usually creates disappointment. In any population, only a few folks get satisfaction out of going first.

The focused work of launch day, then, isn’t to maximize turnout. It’s to get the right people to come.

Not just people who like to go first, but folks who are eager to give you the benefit of the doubt, and those that are focused on spreading the word. Not because it’s good for you, but because it’s good for them.

People like you.

The Newton had a huge launch day, one of the most successful consumer electronic devices of its time. But no one ended up recommending it, so it faded away.

Launch day matters when distribution is scarce. If a movie opens poorly, the theatre puts a different film in next week. But most of the time, planting the right seeds in the right place is more important than hustling for noise.

08:00

Matthias Klumpp: Introducing pkgcli: A nicer command-line interface for PackageKit [Planet Debian]

For almost two decades, the PackageKit package management abstraction layer has shipped with pkcon as its command-line client. pkcon does its job, but it was always kind of a “testing” front-end for the PackageKit daemon rather than a tool designed for everyday use. The focus has instead been on the GUI tools, automatic system updates, GUI application managers and other front-ends. Its command names mirror the D-Bus API almost one-to-one (get-details, get-updates, get-depends), output is very plain, and there is no machine-readable mode for scripting. Most importantly though, there has been no development on it at all for almost a decade, so pkcon was stuck in its rudimentary state from that era.

Since a lot of changes will be coming to PackageKit, and testing the daemon and working with it from the command-line was not very pleasant anymore in 2025/2026, I decided to modernize the tool as part of my work as fellow for the Sovereign Tech Agency last year. pkgcli is the new command-line client for PackageKit. It is built from the ground up to be pleasant to use interactively and easy to drive from scripts.

Why a new tool?

Of course, instead of introducing a new tool, I could have just expanded pkcon instead. The problem with that approach is that the pkcon utility has been around for so long and its command-line API had ossified so much, that rather than changing it and potentially breaking a lot of scripts relying on its quirks, I decided to introduce a new tool instead. pkcon can still be optionally compiled for people who need it in their scripts and workflows.

The goals for pkgcli, and the features it now has are:

  • Human-friendly command names. Verbs that read the way you’d describe the task, instead of mirroring the D-Bus API 1:1: show, search, list-updates, what-provides, instead of get-details and friends.
  • Readable, colored output by default (still respecting NO_COLOR and degrading gracefully).
  • A real scripting mode. A global --json flag emits JSONL instead of fully human-readable output when possible, to make it easier to use the tool for scripting purposes.
  • Sensible defaults. A few defaults have been changed, such as the metadata cache-age, or automatic cleanup of unused dependencies being enabled by default. This is more in line with current defaults by other tools and frontends. We also print package information in a slightly different, more readable way.
  • Better handling of internationalized text. Text should now align properly in the terminal window, and we should no longer have completely chaotic text output on non-English locales (especially Chinese/Japanese).

Why not pkgctl?

Originally, this tool was called pkgctl, to match other common cross-distro tool names. However, that name was already taken by an Arch-specific distro development tool. When this issue was raised, we decided to just rename our tool to pkgcli with the next release, to avoid the name clash on Arch Linux.

Examples!

Here are some examples on how to use the new tool (some of which include the abridged output pkgcli prints).

Search for anything containing the string “editor” in name or description, then look at the details of one result:

$ pkgcli search editor
Querying                  [████████████████████████████████████████] 100%
 ace-of-penguins 1.5~rc2-7.amd64 [debian-testing-main]
 acorn-fdisk 3.0.6-14.amd64 [debian-testing-main]
 ardour 1:9.2.0+ds-1.amd64 [debian-testing-main]
 audacity 3.7.7+dfsg-1.amd64 [manual:debian-testing-main]
 audacity-data 3.7.7+dfsg-1.all [auto:debian-testing-main]
 augeas-tools 1.14.1-1.1.amd64 [debian-testing-main]
 emacs 1:30.2+1-3.all [debian-testing-main]
 gedit 48.1-9+b1.amd64 [debian-testing-main]
 gedit-common 48.1-9.all [debian-testing-main]
 gedit-dev 48.1-9+b1.amd64 [debian-testing-main]
[...]

$ pkgcli show nano
Package: nano
Version: 9.0-1
Summary: small, friendly text editor inspired by Pico
Description: GNU nano is an easy-to-use text editor originally designed as
 a replacement for Pico, the ncurses-based editor from the non-free mailer
 package Pine.
[...]
URL: https://www.nano-editor.org/
Group: publishing
Installed Size: 2.9 MB
Download Size: 646.0 KB

Search only within package names rather than descriptions:

$ pkgcli search name python3

Check for updates. refresh updates the metadata, then list-updates reports what’s available:

$ pkgcli refresh && pkgcli list-updates
Loading cache            [████████████████████████████████████████] 100%
 cme 1.048-1.all [debian-testing-main]
 gir1.2-gdm-1.0 50.1-2.amd64 [debian-testing-main]
 imagemagick 8:7.1.2.24+dfsg1-1.amd64 [debian-testing-main]
 imagemagick-7-common 8:7.1.2.24+dfsg1-1.all [debian-testing-main]
 imagemagick-7.q16 8:7.1.2.24+dfsg1-1.amd64 [debian-testing-main]
 libdlrestrictions1 0.22.0.amd64 [debian-testing-main]
 libfftw3-bin 3.3.11-1.amd64 [debian-testing-main]
 libfftw3-dev 3.3.11-1.amd64 [debian-testing-main]

Explore relationships between packages:

$ pkgcli list-depends inkscape  # list what inkscape depends on
$ pkgcli list-requiring libappstream5  # list what requires libappstream5

Find the package that provides a capability, here the AV1 GStreamer decoder:

$ pkgcli what-provides "gstreamer1(decoder-video/x-av1)"
 gstreamer1.0-plugins-bad 1.28.3-1.amd64 [auto:debian-testing-main]

You can also have JSON output for most commands! Attach --json to any query and pipe the result straight into jq. Each line is a self-contained JSON object:

$ pkgcli --json list-updates | jq -r '.name'
cme
gir1.2-gdm-1.0
imagemagick
imagemagick-7-common
imagemagick-7.q16
libdlrestrictions1
libfftw3-bin
libfftw3-dev
libfftw3-double3

Try it

pkgcli is built by default alongside the rest of PackageKit since PackageKit 1.3.4. If your distribution ships a recent enough PackageKit, it should already be on your PATH. You can read its man page man pkgcli for more information. Feedback, bug reports, and patches are very welcome.

07:14

How can I schedule work on a thread pool with low latency? [The Old New Thing]

A customer had a callback that was used to report data being produced by a hardware device. The rule for the callback is that it has to return quickly so that the code wouldn’t miss the next batch of data because the device itself has a very small buffer: If they spend too much time in the callback, the buffer will overflow and data will be lost.

To avoid clogging the receiving thread, the customer queued a work item to the thread pool to process the data that was just received. However, they found that sometimes, the work item doesn’t run immediately but rather has a 100ms latency. But their program needs to process the data within 20ms. Is there a way to set a deadline on a thread pool work item, so that the system will make sure that it runs before a certain period of time elapses?

As I’ve noted before, the thread pool is designed for throughput, not latency. There is no option to set a deadline on a work item.

One reason why the thread pool is being slow to dispatch the work items is that there are other unrelated work items in the thread pool, and those other tasks are competing with your data processing task for the thread pool’s attention. On top of that, some of those other tasks might be long-running, which takes a thread pool thread out of commission for an extended period.

You can take these conflicting work items out of the picture by creating your own custom thread pool: Call Create­Thread­Pool and queue your work to that thread pool (by setting that thread pool in the work item’s environment). Now you won’t have any competing work items getting in front of you in the thread pool work queue because those competing work items are going to the process default thread pool and not to your private thread pool.

Note however that even though your work items are no longer fighting with other work items for the attention of your private thread pool, those other work items are still running on the process default thread pool, so they are still competing against your work items for CPU. But at least your work item got dispatched.

I’m guessing that the order in which the batches are processed is important, so you should set your private thread pool’s maximum thread count to 1 so that you don’t start processing one batch of data until you finish processing the previous batch. This effectively serializes the work items, but that’s what you want if you intend to process the batches in order.

In the case where you have a single-minded thread pool, you can prepare everything ahead of time so that all you have to do in the callback itself is call SubmitThreadpoolWork on a pre-created reusable work item.

// One-time preparation
pool = CreateThreadpool();
if (!pool) ⟦ error ⟧

TP_CALLBACK_ENVIRON env;
InitializeThreadpoolEnvironment(&env);
SetThreadpoolCallbackPool(&env, pool);
work = CreateThreadpoolWork(ProcessData, nullptr, &env);
if (!work) ⟦ error ⟧

void Callback()
{
    ⟦ add data to data queue ⟧
    SubmitThreadpoolWork(work); // request another callback
}

If you step back and look at this, you might realize that all we did was create a worker thread, but one where we delegated all the bookkeeping to the thread pool. Also, this particular customer was writing code in C#, and the BCL doesn’t have built-in support for custom thread pools.

So if all we have is a worker thread, maybe we can just make a worker thread. Here’s a really simple one.

Queue<Data> queue = new Queue<Data>();

Data WaitForWork()
{
    while (true) {
        lock (queue) {
            if (queue.Count > 0) {
                return queue.Dequeue();
            }
            Monitor.Wait(queue);
        }
    }
}

void WorkerThread()
{
    Data data;
    while ((data = WaitForWork()) != null) {
        ⟦ process the data #&x27e7;
    }
}

void QueueWork(Data data)
{
    lock (queue) {
        queue.Enqueue(data);
        Monitor.Pulse(queue);
    }
}

void EndWork()
{
    QueueWork(null);
}

The worker thread waits for elements to show up in the queue, and once one appears, it dequeues it and does whatever processing you want. If the queued value is null, that means that the worker thread is no longer needed, and it exits.

You can do something similar in C++ with a std::queue and a condition variable.

The post How can I schedule work on a thread pool with low latency? appeared first on The Old New Thing.

06:35

Link [Scripting News]

People keep saying the Spurs are the future of the NBA, but they didn't earn that this year. More probably it's the Knicks that are the future. The Knicks will keep growing. The Knicks beat the Spurs in the last two games by playing rope-a-dope, probably not intentionally, but it worked anyway. The Spurs, and Wemby especially, were completely zonked by the fourth quarter of both games. The Knicks had a bench this year that let the starters get plenty of rest. The Spurs lost game four because they didn't rest Wemby while they were up by 20+ points. Anyway, the Knicks have a formula. Pick players with heart potential and talent, treat them like a team, keep trying out new ideas, approaches. It works. Won the NY Knicks the championship this year. As anticipated I have no idea what to make of the Knicks as winner. I'll have to learn too. ;-)

Link [Scripting News]

One thing I want to know -- where do I tune in to get the most of Clyde talking about this series.

Link [Scripting News]

And thanks to the Knicks for being such a great team. Never ever in a million years did I imagine saying that. More proof that you never know what's coming. Even the most unlikely and inconceivable events happen. Being realistic sometimes isn't the right way to think.

Link [Scripting News]

BTW the Gift Articles feed works really nicely in the blogroll.

01:21

Link [Scripting News]

JY Stervinou proposed Universal Mentions, an interesting new low-tech web-like protocol for mentioning people, places or things via link elements in the head section of any HTML file you want to use as your personal directory. It's an intriguing idea. ChatGPT review, after a few questions. Both JY and ChatGPT use the term "open web" which to me has become a red flag. The web is open. No need to say it twice. There's no such thing as a web element that's not open. It's like saying wet water.

Saturday, 13 June

18:56

Pluralistic: Shareholder supremacy and the precog CEO (13 Jun 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



A fake cover for CEO magazine. The central figure is a ZOLTAR fortune-telling animatronic, seated before various divination tools. The headline over him is FIDUCIARY DUTY. In the top right corner, there's a slug reading 'UNIVERSAL EXCUSE: A bright line test that's also *totally* unfalsifiable.' To Zoltar's left is another slug reading, 'FRIEDMAN SAID IT: I believe it. That's good enough for me.'

Shareholder supremacy and the precog CEO (permalink)

It's been 55 years since Milton Friedman – cursed be his name – published his NYT editorial, "The Social Responsibility of Business Is to Increase Its Profits," in which he invented the idea of shareholder supremacy out of whole cloth and declared it to be a universal, freestanding, inarguable truth:

https://www.nytimes.com/1970/09/13/archives/a-friedman-doctrine-the-social-responsibility-of-business-is-to.html

Friedman's editorial railed against the idea of "corporate social responsibility," arguing that corporate managers should confine the exercise of their consciences to projects involving their own money and resources. At work, managers must harden their bleeding hearts and do nothing except increase the returns to their shareholders.

Friedman wasn't merely arguing that this would give rise to better companies – the crux of his argument was that by adopting this "fiduciary duty" standard, it would be easy to determine whether a company was being well-managed or run into the ground:

https://pluralistic.net/2024/09/18/falsifiability/#figleaves-not-rubrics

Friedman argued that "being a good person" was a squishy, undefinable standard that could never be objectively measured. But "maximizing shareholder value" was a crisp, bright-line test that could be readily evaluated by any reasonable person. "Did this manager make as much money as possible for the company's owners?" feels like the kind of question we can all agree on, while, "Did this manager behave in an ethical way?" is much harder to answer.

But even a few moments' thoughts reveal the flaw in this line of reasoning. We can all agree whether a manager made money for the shareholders – but how can we know whether the manager made as much money as possible?

Think about how much "corporate social responsibility" cashes out to performative and insincere nonsense and/or cynical marketing. Target didn't stock Pride merch because they love their LGBTQ friends. They stocked it because they thought they could sell it (same goes for BP marketing its "green" gasoline). Google supports its coders' environmental/queer/antipoverty efforts because being the "don't be evil" company lets you hire in-demand workers who might otherwise go to work for Meta, and every engineer a Silicon Valley firm hires adds an average of $1m to the company's annual bottom line.

Further: it would be absurd to hold managers to the "make as much money as possible" standard in a competitive market, because in that market, there will always be a company that comes in second. If "as much money as possible" is the standard and you're Chairman of the Board of the number two company, with $10b in profit, while the number one pulled in $11b, "as much money as possible" demands that you fire the C-suite immediately, since they objectively could have done 10% better.

So the real standard isn't "make as much money as possible," it's "try to make as much money as possible." And here again, there's no objective way to evaluate managerial performance. Target made a lot of money by selling Pride merch…until they didn't. Do we fire the Target C-suite because they failed to anticipate that 2024 would mark America's transition into the chuddocene, an era in which selling Pride tchotchkes makes you cucked and soy and, you know, gay?

Whether it's "make as much money as possible" or "try to make as much money as possible*," shareholder supremacy can only be evaluated with the aid of a crystal ball…or a time machine.

Which raises a question: what made this nonsensical shareholder supremacy standard so damned attractive to corporate leaders?

Well, what if the ambiguity of shareholder supremacy was a feature and not a bug? What if the function of shareholder supremacy was to absolve the cruelest people for indulging their most sociopathic instincts? What if this "bright line test" was actually a universal excuse, an all-purpose accountability sink that could be used to justify any cruelty or cowardice? "Why didn't I fire my college buddy when I found out that he was sexually abusing his colleagues? Well, he was the best salesman on the team, and I have an obligation to my shareholders. Sorry, my hands were tied."

In other words: Don't get mad at me.

Get mad at Milton Friedman.


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 Microsoft gets Linux geeks evicted from convention center https://web.archive.org/web/20010619154332/http://www.newsforge.com/article.pl?sid=01/06/01/1540231

#20yrsago Stanford prof sues James Joyce estate for right to study Joyce https://web.archive.org/web/20060615203517/http://news.yahoo.com/s/ap/20060613/ap_on_en_ot/james_joyce_lawsuit

#20yrsago Inside China’s iPod sweat-shops https://web.archive.org/web/20060616173514/http://www.macworld.co.uk/news/index.cfm?RSS&amp;NewsID=14915

#15yrsago Terry Pratchett initiates assisted suicide process https://web.archive.org/web/20110614215922/https://www.telegraph.co.uk/health/8571142/Sir-Terry-Pratchett-begins-process-that-could-lead-to-assisted-suicide.html

#15yrsago Lego-making machine made of Lego https://www.eurobricks.com/forum/forums/topic/56346-review-moulding-machine-4000001-lego-insider-tour-exclusive/

#10yrsago It’s getting harder and harder to use gag clauses to silence laid off workers in America https://web.archive.org/web/20160611202305/https://www.nytimes.com/2016/06/12/us/laid-off-americans-required-to-zip-lips-on-way-out-grow-bolder.html

#5yrsago The ACCESS Act https://pluralistic.net/2021/06/12/access-act/#interop


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 Reverse-Centaur's Guide to AI," a short book about being a better AI critic, Farrar, Straus and Giroux, June 2026 (https://us.macmillan.com/books/9780374621568/thereversecentaursguidetolifeafterai/)
  • "Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2026

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

  • "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. Third draft completed. Submitted to editor.

  • "The Reverse Centaur's Guide to AI," a short book for Farrar, Straus and Giroux about being an effective AI critic. LEGAL REVIEW AND COPYEDIT COMPLETE.
  • "The Post-American Internet," a short book about internet policy in the age of Trumpism. PLANNING.

  • A Little Brother short story about DIY insulin PLANNING


This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.

https://creativecommons.org/licenses/by/4.0/

Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.


How to get Pluralistic:

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

Pluralistic.net

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

https://pluralistic.net/plura-list

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

https://mamot.fr/@pluralistic

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

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

Medium (no ads, paywalled):

https://doctorow.medium.com/

Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):

https://mostlysignssomeportents.tumblr.com/tagged/pluralistic

"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla

READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.

ISSN: 3066-764X

17:42

Really Simple swag [Scripting News]

New virtual swag to go with the moment. ;-)

Really Simple basketball.
Really Simple player 27.

PS: Go New York Go New York Go!

16:14

Link [Scripting News]

Imagine if someone cracked the speed of light. Now we could visit far off galaxies on vacation. Do you think we'd build it or argue about whether we should? Heh I know the human species, we don't do that kind of thinking we just go.

15:28

Link [Scripting News]

The giftarticles feed is now a simple RSS 2.0 feed. It's not pretty, that would require some work with Masotdon, but it does work.

Link [Scripting News]

The thing about tech, you have to start out small and simple, and carefully add features based on actual real-world-now use cases. Otherwise you end up missing the target, and have to go back and patch it, and it never gets simple. The only way to have a chance is if you start small, learn, and evolve carefully.

Link [Scripting News]

Imho -- the smartest thing facebook could do is find all the places where it's a silo and start desiloizing them..

Link [Scripting News]

AI is a miracle of human science, it took generations to get to the point we're at now, and the rate of development building software on top of it is imho the basis for a revolution. We use computers in all aspects of our lives, and the UI of the software is nowhere near as good as it should be, that's because there are severe limits the human mind has where the AI has apparently none. So if you're down on AI, you should at least understand that there is huge potential here, which is being utilized, will result in much more powerful software that works well with others, instead of locking-in users and locking-out competitors (and their users). We've created a predictably bad system now, predictable because we always create silos when we give big money a chance to call all the shots. We don't get chances to rewrite the rules very often, but this is one of those times. Last one was in the early 1990s with the advent of the web. My plan is to give all the new power back to the web. And looking at what AI companies are doing, that is exactly what they're doing -- they're doing it the right way -- radically simple, easy to clone formats, and easy for users and developers to read.

10:21

The troll button [Seth's Blog]

There have always been trolls. Hecklers, jesters, and class clowns. The troll lives under the bridge and invents nonsense grievances in order to get attention.

But, until recently, there wasn’t much of a business model to support this career choice. It’s said that William Randolph Hearst started a war to sell newspapers, but few people owned newspapers…

Social media changes this. Algorithms can be gamed for attention. People who are willing to tear down others for fame and short-term gain can leverage their selfish actions, create clicks, and get paid for it. They stage a car crash and turn our rubbernecking attention into cash.

To make it worse, it compounds. Trolls have to outtroll each other to keep the attention coming.

Professional wrestling is a choice, but no one insisted we all watch it.

The solution is right in front of us, and won’t require many people to implement. Give us a troll button and set the default to opt-out. Deplatform the trolls, except for those who want to engage with them.

It’s not obvious how to rank and rate what qualifies as trolling, but I’m sure the algorithm wizards can figure that out. If the companies push back, they ought to be willing to acknowledge that trolling is a profit center for them, and they’re willing to trade our peace of mind and cohesion for a few bucks.

Your social media scroll might get a bit less amusing, but the upside is that the world we live in will get better. And so will your day.

When we change the incentives for people seeking attention, their actions will change as well.

You can’t go into a bank with a mask on and expect to be treated as a valued customer. We get the culture we reward.

04:56

New Musical Composition: “Ingenuity” [Whatever]

It’s been a hot minute, as the kids no longer say, since I made an original musical composition; I’ve mostly been doing cover songs recently. But this evening I felt the urge to make something noisy and original, so I did what any musician would do for inspiration: I went to NASA’s “Sounds From Beyond” page and picked a recording from there to use as the basis for my composition.

Specifically, I used the “NASA’s Ingenuity Mars Helicopter in Flight” recording. I used the original recording as is, and then I also ran it through MIDI, sliced it up, pushed it up a couple of octaves, filtered it through effects and so on. In the final composition, everything you hear is derived from the Ingenuity recording except for the drums and the 808 bass. It’s amazing what you can do with public domain recordings from another planet.

The resulting track is noisy, weird, asymmetric and in 7/8 time, because that’s pretty much how the original recording sort of laid itself out. I like it. Maybe you will too.

— JS

01:56

Paid In Pretend Candy [Penny Arcade]

I had seen a post from Kris Straub - whom I call Krasp - about… Well, I'll just embed it.

new stage discovered beyond end-stage capitalism

[image or embed]

— Kris Straub (كريس) (@krisstraub.com) June 12, 2026 at 9:36 AM

00:56

00:28

Gift articles via Mastodon [Scripting News]

There's an account on Mastodon containing a flow of gift articles.

Because Mastodon supports outbound RSS, you can subscribe to it in any RSS reader.

But the RSS is not very good. Have a look.

So I built a little app in my new scripting language, with the help of Claude, and boom now I can read the output of the mangled feed.

I don't know what is responsible, probably has something to do with the account, and something to do with how Mastodon. But the information is being communicated.

https://giftarticles.feedland.org/

This is not finished, it needs some css and the normal structure of an HTML page. We will come back to it.

Friday, 12 June

23:21

Mike Gabriel: Ayatana Indicators: Call for Translations [Planet Debian]

In the process of preparing a major Ubuntu Touch release (v24.04-2.0, coming soon...) we will also update Ayatana Indicators in Ubuntu Touch.

Last week various new features have been added to some of the indicators (toggle switch to keep the display switched on permanently, blue tooth pairing agent, redesign of the keyboard indicator, etc.) and those changes require translation updates.

If you can, please visit [1] this weekend and help translating Ayatana Indicators into your native language. Thanks so much!!!

light+love
Mike

[1] https://hosted.weblate.org/projects/ayatana-indicators/

22:42

Friday Squid Blogging: Squid-Inspired Fluid Pump [Schneier on Security]

This fluid pump was inspired by the way squids propel themselves through the water.

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

Blog moderation policy.

21:56

Pluralistic: Google's new remote attestation scheme is every bit as terrible as its old remote attestation scheme (12 Jun 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



A pig in a sty. It is wearing badly applied lipstick. From behind one hairy ear pokes the Android droid.

Google's new remote attestation scheme is every bit as terrible as its old remote attestation scheme (permalink)

Long before "agentic AI," we had the idea that software would act as your agent on the internet. That's why the old-fashioned technical term for a browser is a "user agent." Your browser acts on your behalf to retrieve information and then show it to you, in the format you choose. It's your agent:

https://pluralistic.net/2024/05/07/treacherous-computing/#rewilding-the-internet

This is a powerful and profound idea. It is because browsers are our "agents" that we expect them to accept our directives, say, by blocking pop-ups, or by turning off autoplay sound, or by blocking commercial surveillance trackers:

https://privacybadger.org/

Your browser does all that because your browser works for you. The reason your browser can work for you is that the web is an open, standardized technology. In theory, anyone who follows the standards published by the World Wide Web Consortium (W3C) can make a browser, and that web browser can connect to any web server. Browsers and servers are interoperable. It's the same force that means you can put anyone's gas in your gas-tank, or anyone's shoelaces in your shoes, or anyone's milk on your cereal.

But what if manufacturers could dictate those choices to you? What if your light socket refused to use a lightbulb unless it was officially blessed by the socket's manufacturer? What if your dishwasher refused to wash your dishes unless you bought them from one of the manufacturer's "dish partners"? What if your toaster refused to toast "unauthorized bread"?

https://arstechnica.com/gaming/2020/01/unauthorized-bread-a-near-future-tale-of-refugees-and-sinister-iot-appliances/

It's hard to see how a company could win its market with this strategy. After all, if the dishes are really better than the competition's, you'd buy them voluntarily, without any need for law or technology to force the matter. The only reason to make a dishwasher that refuses a rival's dishes is if the manufacturer's own dishes are ugly, expensive, and/or badly made.

But once a company owns the market – once they've achieved dominance by buying out their rivals; by bribing potential competitors to stay out of their lane; and by engaging in deceptive conduct to trap key suppliers and customers – they could cement their dominance by blocking interoperability, keeping out rival dishes, milk, gas, lightbulbs, shoelaces and bread, capturing their whole market and squeezing it.

That's what Google has done, and that's what Google wants to do more of. Google's commercial behavior has been so unethical, deceptive and abusive that the company just lost three federal antitrust cases:

https://www.bigtechontrial.com/p/google-loses-the-adtech-monopolization

This thrice-convicted monopolist bribed Apple – more than $20b/year – to stay out of the search market:

https://www.eff.org/deeplinks/2025/02/how-do-you-solve-problem-google-search-courts-must-enable-competition-while

They cheated app vendors, ripping them off with sky-high junk fees and onerous conditions that raised prices while lowering the share of your spending that went to the companies whose products you were paying for:

https://www.thebignewsletter.com/p/boom-google-loses-antitrust-case

They cheated advertisers, rigging the ad market to gouge businesses on ad prices and underinvesting to fight rampant ad-fraud, sucking hundreds of billions out of the productive economy for overpriced ads that no one saw:

https://www.justice.gov/opa/pr/department-justice-prevails-landmark-antitrust-case-against-google

Google wasn't always this way. The "don't be evil" company owes its very existence to the open web ecosystem. When the company started to index the web in 1998, it was playing on an open field, where any web server could talk to any "user agent," even one whose user was a startup like Google, that was making a copy of every page on the server.

For years, Google thrived on the open web, and built open technologies. Android – the mobile operating system that Google bought in 2005 – was presented as an "open" alternative to existing mobile offerings, and as the mobile market collapsed into two companies – Google and Apple – Google always presented Android as the open alternative to Apple's "walled garden."

There were always ways in which Google's "open" Android wasn't exactly open. The company engaged in illegal "tying" arrangements that forced hardware vendors and carriers to lock out versions of Android that were created by Google's competitors:

https://ec.europa.eu/commission/presscorner/detail/en/ip_18_4581

In other words, even though Google offered a mobile platform that was (mostly) technically open, they used commercial and legal strategies to choke off the market oxygen for alternative Android versions that tried to capitalize on that technical openness.

But life finds a way. The existence of an open, modifiable, tinkerer-friendly mobile operating system meant Android hackers could create alternatives to Google's (de facto) walled garden, which thrived in the cracks in that garden wall. Operating systems like CalyxOS, PureOS and Graphene offered a more private, more secure Android experience, one that was largely "de-Googled," blocking Google's relentless acquisition of your private data:

https://grapheneos.org/

And Google's data-hunger is relentless. Android exfiltrates a chunk of your personal and behavioral data every five minutes. The "resting heartbeat" of Android surveillance pulses and pulses, irrespective of whether you're using your device, and the instant you unlock your screen, that heartbeat quickens, sending even more data to the company:

https://digitalcontentnext.org/blog/2018/08/21/google-data-collection-research/

All that data has proved irresistible to authoritarian governments. Donald Trump's enforcers have seized on Google data as a vital source of information about the identity of protesters and the location of migrants hunted by ICE:

https://www.eff.org/deeplinks/2026/04/google-broke-its-promise-me-now-ice-has-my-data

So there are plenty of reasons why users would seek out these de-Googled alternatives to Android, finding them in spite of Google's illegal commercial tactics to block access to competing technologies. The worse it got, the better those alternatives looked.

Perhaps this explains Google's years-long effort to increase the technical barriers to using modified versions of Android, beefing these up to match the commercial restrictions that stand in the way of a de-Googled existence.

Back in 2023, Google floated the idea of "Web Environment Integrity" (WEI), a set of modifications to web standards that would force your computer to disclose its operating environment to the web servers it connected to, even if you objected to this disclosure:

https://pluralistic.net/2023/08/02/self-incrimination/#wei-bai-bai

WEI was a form of "remote attestation." That's when your device uses a sub-processor (sometimes called a "Technical Protection Module" or "TPM") or a walled off part of its main processor (sometimes called a "secure enclave") to produce a cryptographically signed description of your device and its configuration: which hardware, software, plug-ins and settings you're running.

When you connect to a server, it demands that your device send this "attestation" before it handles your request. If your device won't provide this data, or if the server doesn't like (or recognize) your device and its details, it can refuse to deal with you. And because the attestation is prepared by a TPM or a secure enclave that you can't modify or override, you don't get to decide which facts about your device it's allowed to see.

Practically speaking, this means that remote attestation lets a server refuse to deal with you until you turn off your ad-blocker and your tracker-blocker. It means that the server can discriminate against users who block auto-play sound and video, who block pop-ups, who put the tab in the background when it's playing a mandatory pre-roll ad.

WEI was especially disturbing in light of Google's efforts to kill ad-blockers and privacy blockers through updates to Chrome, an effort that continues to this day:

https://protonprivacy.substack.com/p/google-is-finally-killing-ublock

These blockers are an important part of the dynamic between web publishers and their users. In the real world, when you get an offer, you can make a counter-offer. That's all an ad-blocker is: a way for users to respond to a server whose opening bid is, "How about you give me all your data and let me take over your computer in exchange for showing you this page?" with "How about 'Nah?'"

https://www.eff.org/deeplinks/2019/07/adblocking-how-about-nah

We didn't get rid of pop-up ads by making them illegal, or by boycotting advertisers who used them. We got rid of pop-up ads when web users installed pop-up blockers, which made pop-up ads pointless. Take away our ability to block obnoxious digital content and you guarantee that we will be flooded with it.

These kinds of modifications aren't just used to block ads – they're also key to accessibility. People who have photosensitive epilepsy or who (like me) suffer from low-contrast vision problems use add-ons to reformat pages so that we can safely and legibly access them.

WEI's creators said they were only trying to put the web on a level playing field with apps, which routinely rat you out to the companies you connect to. Apps are a source of bottomless enshittification, not least because (unlike the web), they enjoy special, dangerous legal protections that make it very legally risky to modify them:

https://pluralistic.net/2025/07/31/unsatisfying-answers/#systemic-problems

WEI wasn't an effort to level the playing field between apps and the web – it was a race to the bottom, an attempt to make the web as enshittogenic as the app hellscape.

Public outrage to WEI killed the project, but Google's commitment to augmenting its illegal commercial lockdown efforts with technical lockdowns never ended. Now, Google has rolled out an experimental "reCAPTCHA Mobile Verification" that uses an app, your camera, and your device's TPM or secure enclave to produce an attestation about your Android device:

https://support.google.com/recaptcha/answer/16609652

This will make it much easier for the apps and other services you interact with to block your device if you run an Android alternative, or if you install a mod that overrides the actions of Google's stock Android:

https://www.reddit.com/r/PrivacySecurityOSINT/comments/1tbdjbj/privacy_concerns_around_googles_recaptcha_mobile/

This is a terrible idea – it's every bit as bad as WEI was. In an age in which Big Tech is ever-more tied to authoritarian governments, redesigning our devices to tell strangers things we don't want them to know isn't just shortsighted, it's inexcusable.


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 Images from anti-DRM protest at the San Fran Apple Store https://www.flickr.com/photos/quinn/tags/drmprotest/

#15yrsago Reasons people were arrested at the Toronto G20 https://memex.craphound.com/2011/06/11/reasons-people-were-arrested-at-the-toronto-g20/

#15yrsago Paul Krugman: Rule by rentiers favors billionaires, Chinese bond-holders over jobs and homeowners https://www.nytimes.com/2011/06/10/opinion/10krugman.html?_r=1

#15yrsago Ontario publicly funded Catholic school bans rainbows, appropriates student donations for LGBT cause and gives them to Catholic charity https://web.archive.org/web/20110610125236/https://www.xtra.ca/public/Toronto/Rainbows_banned_at_Mississauga_Catholic_school-10262.aspx

#10yrsago How to be less wrong about the First Amendment https://web.archive.org/web/20160611221927/https://popehat.com/2016/06/11/hello-youve-been-referred-here-because-youre-wrong-about-the-first-amendment/

#10yrsago Mounties used Stingrays to secretly surveil millions of Canadians for years https://web.archive.org/web/20160610182607/https://motherboard.vice.com/read/the-rcmp-surveilled-thousands-of-innocent-canadians-for-a-decade

#5yrsago Privacy Without Monopoly, EU edition https://pluralistic.net/2021/06/11/technological-self-determination/#dma


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 Reverse-Centaur's Guide to AI," a short book about being a better AI critic, Farrar, Straus and Giroux, June 2026 (https://us.macmillan.com/books/9780374621568/thereversecentaursguidetolifeafterai/)
  • "Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2026

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

  • "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. Third draft completed. Submitted to editor.

  • "The Reverse Centaur's Guide to AI," a short book for Farrar, Straus and Giroux about being an effective AI critic. LEGAL REVIEW AND COPYEDIT COMPLETE.
  • "The Post-American Internet," a short book about internet policy in the age of Trumpism. PLANNING.

  • 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

21:35

The Cases That Don’t Exist [I, Cringely]

How GenAI is not yet ready for law

In 2023, a New York lawyer named Steven Schwartz filed a brief in a routine personal-injury case against an airline. The brief cited a half-dozen helpful precedents. The precedents did not exist. Schwartz had asked ChatGPT to find supporting cases, and ChatGPT — being a machine that produces plausible language rather than true statements — invented them, names and citations and quotations and all, then cheerfully assured him they were real when he asked. The legal world treated Mata v. Avianca as a freak show: a cautionary tale about one careless lawyer. An embarrassing one-off.

It was not a one-off. It was the first crack in a dam.

By the end of 2025, a researcher in Paris named Damien Charlotin was maintaining a public database of court decisions dealing with AI-hallucinated content, and it held more than seven hundred of them — roughly nine in ten written in that single year. Bloomberg’s analysts counted filings with fabricated citations surging sevenfold over twelve months. There is now, and I am not making this up, a website whose entire job is to keep track of the fake cases. The one-off became an iceberg, and the iceberg got its own URL.

The specifics are worse than the numbers. In February 2025 a federal court sanctioned three lawyers from one of the country’s largest plaintiffs’ firms; of the nine cases they had cited, eight did not exist. An Oregon court fined a lead attorney $15,500 and threw his clients’ claims out with prejudice. A California appeals court found that nearly every legal quotation in a brief had been fabricated, fined the lawyer $10,000, and then opened an unsettling new question — does the other side have a duty to catch your fakes? This spring a federal appeals court fined two lawyers $30,000 for briefs carrying more than two dozen invented citations.

And lest you imagine this is a disease of the overworked solo practitioner, a Justice Department attorney filed a brief stuffed with fabricated quotes, misstated holdings, and regulatory language that appeared in no actual regulation. The person who caught it was not the court’s system, because there is no system. It was the man on the other side: a retired Air Force colonel suing over his health coverage, who read the government’s brief, noticed it didn’t sound like the law it claimed to quote, and went and checked. Judges have begun doing it too — issuing orders built on rulings that turned out never to have been handed down. The rot has reached the bench.

Now, why should this column care about lawyers? Because law is the hallucination problem stripped to its skeleton, performed in the one room where being confidently wrong has a docket number.

Everywhere else, a fabricated “fact” is fuzzy. Did the model slightly misremember a revenue figure, round a date? Here there is no fuzz. A case either exists or it doesn’t. It either says the thing or it doesn’t. A real citation is an address you can drive to; the ones ChatGPT invented were addresses for houses that were never built. Law is what happens when you take a machine optimized to produce plausible sentences and point it at a system that runs entirely on whether the sentence is true. The two were never compatible. We are simply watching the collision in slow motion, one sanction at a time.

And here is the part that should trouble you more than any single fine: there is no check. The entire defense of the American legal system against fabricated authority is a human being, by hand, looking up whether each cited case is real. Sometimes that human is opposing counsel. Sometimes it is a magistrate judge who, rather than deciding the motion in front of her, must stop and survey the caselaw on attorney misconduct to work out what to do about the five cases that don’t exist. Sometimes, God help us, it is a retired colonel representing himself. The work gets done by whoever happens to notice — which means, most of the time, it does not get done at all.

I’ll pull back a corner of the curtain here, because this is the cleanest place to show you what we actually do — not how, but what. The fix for a fabricated citation is not a sterner warning or a smarter chatbot. It is mechanical. You take the finished brief, you pull out every authority it cites and every proposition it claims that authority supports, and you check each one against the actual record: does this case exist, and does it say what the brief says it says? Whatever fails, you flag — before the thing is filed. No judgment. No guessing. No second model grading the first model’s homework. Just a deterministic check against ground truth, the kind something should have been doing all along, finished in the time it takes to read this sentence. We built exactly that. It is, frankly, the least glamorous thing we make, and in a profession now bleeding $30,000 sanctions and two-year bans, it may be the most valuable.

One confession, since the subject demands it. This is the single column I have ever written in which I refused to let a fabricated citation anywhere near the page — so before a word of it was set down, every case, every fine, every number above was checked against the real record by hand. A column about machines inventing citations that itself contained an invented citation would be the most exquisite humiliation available to a writer, and I was not going to hand it to you. Which is, of course, the entire argument. The checking has to happen. The only question is whether a person does it at midnight, or a machine does it before you hit file.

The law is the frozen market in miniature — the place the AI revolution keeps promising to enter and keeps getting thrown out of, because the one thing a courtroom cannot tolerate is the one thing a chatbot cannot help doing. It will write you a gorgeous brief. It simply cannot be trusted to tell you the cases are real. Until something checks, every AI-drafted filing is a wager that the machine didn’t dream — and the dockets are filling with people who lost that bet.

Robert X. Cringely is a co-founder of 2Brains, Inc., in Charlottesville, Virginia. He has written this column since 1987.

The post The Cases That Don’t Exist first appeared on I, Cringely.






Digital Branding
Web Design Marketing

21:21

[$] An overlayfs update [LWN.net]

In a shortened session in the filesystem track at the 2026 Linux Storage, Filesystem, Memory Management, and BPF Summit, Amir Goldstein gave an update on the overlayfs union filesystem. There are some new features over the last few years that he wanted to mention, along with looking at the status of nesting overlayfs layers. The composefs use case that was discussed at the summit in 2023 has led to some interesting changes to overlayfs.

19:56

Once Upon A Galaxy "Sponstream" [Penny Arcade]

This glorious #Fridabe, we are back on our bullshit with a several more hours of buildcrafting, bon mots, and then battles with the channel at the end.  Come hang out around 11am PST on the stream, and grab a copy here on Steam or your phone to test your mettle against us live!

(CW)TB  

18:42

Tim Retout: seL4 clock magic [Planet Debian]

I have been looking at seL4 some more recently, and had a small patch merged today to remove a legacy Python module from a helper script. (I was trying to run the script on a system without that module installed, and it was almost easier to patch it out.)

However, the more I think about this code and how it’s used, the more it seems wrong on at least five other levels.

The patch itself is quite uninteresting; this script was importing the past module (part of future?) to use the xrange function. Python 2 used to have separate xrange and range functions, where range returned a list in memory while xrange generated an iterator. Because this seL4 script is iterating over a large range of values, it’s important the list is not generated in-memory. But Python 3 removed the xrange function and just has range return an object, so it’s trivial to avoid the module import.

Having thought carefully some more about the specific line, there’s surely an off-by-one error in it - range iterates over 0 to n-1, so this line shouldn’t be subtracting one if it’s looking to test all 32-bit values:

    for i in range(2**32-1):

But then again, this is being used for a ‘sanity check’ of a magic bit shift algorithm that speeds up division operations to convert CPU ticks to microseconds on 32-bit arm platforms. Surely if the algorithm’s good, it shouldn’t be necessary to validate it exhaustively against every possible 32-bit value?

Also, 32 bits isn’t enough, because this is 64-bit division. include/api/types.h shows that ticks_t is always a uint64_t, so if this were a proof by exhaustion it should run to 2**64 (though that would take infeasibly long).

As discussed in issue #1352, lots of people have been running this code with the wrong divisor anyway. But because the bit shift path is only used on 32-bit platforms, it’s not clear to me that there’s even any point in specifying CLK_SHIFT/MAGIC on platforms which are 64-bit only (e.g. the tx2 port).

And to follow this rabbit hole to the very end, in comments on PR #1435 and issue #1509 it’s clear that the future of this code is to remove it, as it’s 1. unnecessarily clever (on 64-bit platforms the equivalent code just uses a division, so performance can’t be that important), and 2. the entire concept of converting to microseconds breaks the seL4 principle of not abstracting away details of the hardware.

So this has left me unclear on whether my small patch was a good thing or not, but I certainly learnt something about this corner of seL4 timer handling. And I’ve ordered a copy of “Hacker’s Delight” on the recommendation of a code comment.

17:07

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

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

[ Jochen Sprickerhof ]
* Improve header detection for Sphinx documentation projects.

You find out more by visiting the project homepage.

16:56

Link [Scripting News]

I want to keep my podcast subscriptions in a single OPML file so I can subscribe in three different clients using the same list.

16:14

Using AI to sort out the noise [Scripting News]

I am using Claude Code to create a toolset that makes it easy to write internet scripts at the same high level as Frontier.

I was looking for a little project it could do, and came up with this.

  • I like Wikipedia, but I know it has trouble with transparency. In areas I know well I see one-sided articles that even include ads for products that totally don't belong there. Having an open system like that makes this kind of abuse impossible to manage, there's no one to do it. Esp in web standards, where people create fame for themselves basically by editing those pages, it can get really egregious. Here's a place where AI can help, it has an amazing ability to somehow sort out the truth amidst all the fighting.

I put together an app with the help of Claude that takes the name of a place, person or thing, and publishes a page on a static site. Each article has a date in its path, so it represents what was known about the item at the time it appeared on my blog.

It needs more development, like a template that says what it is, etc.

For nerds, this is what the script looks like, it's written in a more debugged version of the scripting language built into Drummer. Claude is good at that kind of work! There's no limit on the amount of complexity it can manage, and there's a lot of that in designing and implementing languages.

And here's an example of the type of page it generates.

This Week in AI: The Next-Gen Recommendation Experience [Radar]

This week Miguel Fierro, a former Microsoft principal researcher who recently founded his own company, RecoMind, joined data and AI evangelist Christina Stathopoulos to talk about the state of recommendation systems. Christina also ran through the latest AI news she’s been watching, from Anthropic’s continued rise to responsible AI, announcements from Google’s I/O 2026 conference, and (continuing the discussion from last week) the growing backlash against tokenmaxxing as a productivity metric. Here are three takeaways from the conversation.

Recommendation systems are a bigger deal than most companies realize

Miguel has spent the better part of a decade building recommendation systems for enterprise customers at Microsoft, and he thinks most companies are leaving a lot on the table by not paying closer attention to recommendations. Amazon generates roughly 35% of its revenue through recommendations. Netflix attributes 75% of content consumption to them. Best Buy credits recommendations with 24% of revenue. TikTok’s entire user experience is a recommendation engine. And yet many large retailers he worked with at Microsoft weren’t investing seriously in the area, often because they weren’t tracking the value it was generating.

The gap between the top tier and everyone else is wide and getting wider. The most advanced systems today treat user behavior as a sequence prediction problem, similar to how large language models predict the next token. Rather than just encoding clicks, they encode all user actions into embeddings, run sequences through those representations, and use huge 1.5 trillion-parameter models to predict what a user will want next. That’s not something a mid-tier retailer can replicate today, but it signals where the field is heading.

Even if you don’t work in a top well-resourced company, you should still pay attention to the convergence of search and recommendations into a single personalized retrieval layer and the early application of foundation models to recommendation problems. Netflix has built what Miquel described as the only published foundation model in this space; Meta is rumored to be developing one as well. The barrier is data, particularly for smaller organizations. Unlike text, behavioral interaction data isn’t publicly available, so building at that scale requires both proprietary datasets and serious compute.

If you want to get your hands on state-of-the-art implementations, including knowledge graph-based approaches, without starting from scratch, Miguel suggested the open source Recommenders library, originally developed at Microsoft and now housed under the Linux Foundation, as a practical entry point.

The agent hype has a recommender-shaped hole in it

Miguel drew a distinction between true sales agents and what most companies offer today, which are usually just conversational agents. A conversational agent responds to what you say. An agentic sales system understands a customer, anticipates what they want, and surfaces the right product or offer at the right moment—and that requires a recommendation system baked in.

If your “agent” is a chatbot with access to a knowledge base, it’s not doing recommendation. Recommendation systems need training data, a retrieval layer, and a personalization model, none of which you get for free from a foundation model API. A language model can answer questions about a product catalog, but it can’t offer up personalized recommendations unless it also has a model of the customer’s preferences, history, and likely next action. Most companies don’t have the infrastructure in place to make that possible. . .yet.

The responsible AI conversation has left the research community

What’s notable about the responsible AI conversation right now is the range of institutions offering their perspective. Anthropic, alongside announcing a funding round pushing its valuation toward $1 trillion, urged a global pause on AI development tied to the risk of recursive self-improvement: systems that can design and develop their own successors. The Future of Life Institute published The Better Path for AI, a framework arguing for capability development oriented toward human benefit rather than human replacement. And the pope issued a formal encyclical focused on AI and the common good.

None of these institutions is making the same argument, but the convergence of their attention matters. Responsible AI used to be a specialized conversation happening largely within research labs and a small set of policy organizations. It’s now a topic where major AI companies, religious institutions, and civil society groups are all staking out public positions in the same news cycle.

For the technical community, this creates both pressure and opportunity. “We’re thinking about safety” is no longer a sufficient posture; external scrutiny is intensifying from directions that don’t share the field’s assumptions or vocabulary. But the broader conversation creates real demand for practitioners who can translate between what responsible AI actually requires in practice and what policymakers, executives, and institutions are trying to figure out. That translation work is increasingly where the field needs people.

What’s next

Join us Monday morning for the next episode of This Week in AI, where YK Sugi and John Lindquist will break down the massive structural and financial shifts reshaping the technology industry. (They’ll also chat about the recent release of Claude Fable 5.) And on July 23, Christina will be hosting the AI Superstream on AI harnesses, a four-hour event focused on agentic AI and the frameworks practitioners need to move from models to agents. Both are free to attend. Register now to save your seat.

For deeper reading on topics covered this week, Christina recommended three titles available on the O’Reilly learning platform: Hands-On LLM Serving and Optimization, Hands-On RAG for Production, and Large Language Models: The Hard Parts. Not a member? Sign up for a free 10-day trial to check them out.

We’ll continue to publish our takeaways here on Radar each Friday and share full episodes on YouTube, Spotify, Apple, or wherever you get your podcasts.

15:35

Kyvos is the easiest, cheapest, and possibly fastest way to run AmigaOS 4 and MorphOS [OSnews]

If you want to try out a modern Amiga operating system, your choices are severely constrained. Both MorphOS and AmigaOS 4 need PowerPC hardware, and at the moment, there’s little to no modern hardware available for purchase to run these operating systems on. The only AmigaOS 4 hardware you can buy is either incredibly outdated, incredibly expensive, or both, and while MorphOS does run on readily available Apple PowerPC machines, those, too, are getting quite long in the tooth and performance simply isn’t keeping up. Until the Mirari becomes available – with the project steadily progressing, I have high hopes – the reality for people wanting to try out AmigaOS or MorphOS is going to be expensive, at best.

Or is it? QEMU exists, and QEMU can emulate various PowerPC systems just fine. Shouldn’t it be possible to run these two unique operating systems in a virtual environment on your modern PC, thereby making it trivial for those of us interested in the world of Amiga to dip our toes into the water without having to spend inordinate sums for outdated hardware? It turns out that yes, this is entirely possible, and as I highlighted almost a year ago, George Sokianos has made this process effectively foolproof by developing a custom GUI frontend for QEMU specifically designed to make it incredibly easy to set up and run AmigaOS 4 and MorphOS in QEMU virtual machines.

We’re almost a year since that first version, and in that time, Sokianos has updated the tool, called Kyvos, to version 2. It costs a mere €9, and works on Linux (x86 and ARM), Windows (x86 and ARM) and macOS (x86 and ARM). You also get an incredibly detailed manual with step-by-step instructions for every supported operating system and specific emulated machine, which includes instructions for the convoluted AmigaOS 4 installation process, as well as a bunch of other information and helpful tips.

In addition, the manual includes links to where you can buy AmigaOS 4 – be sure to use these specific links to buy AmigaOS 4, because Sokianos gets a commission for sales through these links. AmigaOS 4 costs like €30, so it’s not a big investment. MorphOS can be downloaded for free, but after 30 minutes of use, the operating system will slow down and cripple itself, unless you pay for and register your copy for €79. I own a copy for my 17″ PowerBook G4 1.25Ghz, but I think copies are tied to hardware, so I haven’t tried registering it with my key yet. The MorphOS registration tool does not accept virtual machines, so you can’t use it to buy a copy for a virtual machine.

Kyvos’ graphical user interface mimics the UI of other virtual machine software like VirtualBox, and it will check to make sure you have all the correct dependencies and requirements installed. The guided setup processes for MorphOS and AmigaOS 4 virtual machines will tell you exactly which operating system ISOs and files you need and makes sure you have them, before setting up the QEMU virtual machines with the optimal settings. Once created, start the virtual machine, and they’ll boot from the installation media. Follow the included manual as you install the operating systems, including some post-install help, and you’ll end up with fully working, network-capable virtual machines running MorphOS and AmigaOS 4.

Both installation and setup procedures worked without any issues on my machine, and within like half an our I had to two fully working copies of MorphOS and AmigaOS 4 running on my Linux desktop gaming PC (I exempted myself from the Windows 11 incentive for this one, since my Linux gaming PC is by far the most powerful computer I own). Networking and sound works – AmigaOS 4 requires some post-install steps for those, listed in the Kyvos manual – and I could browse the web right away with the included web browsers. The online update tool for AmigaOS 4 also works perfectly, allowing me to upgrade to the latest version of the operating system and various included components.

I’m anything but a MorphOS or AmigaOS 4 expert, so I can’t confidently say much about performance compared to best real compatible hardware out there, but at least for MorphOS I can say it runs considerably faster in this virtual machine than it does on my old 17″ PowerBook G4 1.25Ghz. I feel like AmigaOS 4 runs a bit smoother than MorphOS does, as with the latter I experienced the occasional hiccup and stutter which were absent on AmigaOS 4. Still, both are entirely usable and a pleasure to use.

With how limited the hardware selection for these two operating systems is, using QEMU through Kyvos is by far the easiest and most straightforward way to dip your toes into the waters of the modern Amiga operating systems. For a total of around €40, you’ll be running AmigaOS 4 in a very capable and straightforward way, and if and when MorphOS allows registration for virtual machines (they really should), an additional €79 will give you a fully working installation of that unique operating system, too.

Kyvos is a complete no-brainer for anyone reading OSNews.

15:28

Tech industry suckage, part 2297 [Scripting News]

One of the things that sucks about the tech industry is that the assumption is that creative work is done by employees. Imagine if music or movies worked like that.

And the employees will resist the company working with individual outsiders, the equiv of musicians in this area.

If you know anything about my career imagine what a barrier this has been. Their first inclination when they see an individual or small company doing what they think they should do is -- this -- CRUSH.

It's hard to escape this. Upton Sinclair said --“It is difficult to get a man to understand something, when his salary depends on his not understanding it.”

If you go to your boss and say Dave says we should improve what we do with RSS, and not invest in AT Proto compatibility or wait until there's some functionality on their side of the API. You're helping the competition to add more vapor to their vaporware. How is that consistent with your strategy, and btw what is your strategy?

This has actually happened. And before it many years ago Microsoft unilaterally changed the logo for RSS. They had the courtesy to give me a heads up, and I told them it wasn't theirs to change and a lot of thought had gone into the one we had, and the one they want to use looks like every other internet logo. They let me finish my sentence and went on with other parts of the presentation.

Lots of other examples. It's very rare when they don't try to erase your work at Big Companies (or BigCo's).

The problem is this -- the web needs individual developers to survive and grow. The fact that we've been suppressed by the the BigCo's has meant we haven't built out the web the way we could have if we understood that tech is more than a business model for VCs. Other creative areas managed to get past this, why didn't tech? And can we change that? I want to.

If one of the Big Companies decided they want a real ecosystem for an internet-level standard, and hopefully have a product with lots of users that supports it, and if it's an area I know, i'm up for at least talking about how to get an open dev community growing around it.

PS: I wrote this on EMX and decided it also should be here.

Link [Scripting News]

OG is the new Alysa Liu. I'm watching his put-back over and over, never getting tired of it.

15:21

Hundreds of AUR packages compromised [LWN.net]

Hundreds of orphaned packages hosted by the Arch User Repository (AUR) have been compromised by an attacker who has added a malicious npm package (atomic-lockfile) that can exfiltrate sensitive data. The project is currently working on cleaning up the mess. There is a list of affected packages and post (possibly NSFW domain) by "sodiboo" with additional information. Arch Linux users (or users of Arch-based distributions) that use AUR packages may wish to see if they have installed any of the compromised updates.

14:35

Security updates for Friday [LWN.net]

Security updates have been issued by AlmaLinux (.NET 10.0, .NET 8.0, .NET 9.0, bind, expat, httpd:2.4, kernel, kernel-rt, mod_http2, openssl, poppler, redis, redis:7, samba, and unbound), Debian (ironic, kernel-wedge, libinput, linux-base, and neutron), Fedora (kernel, openssl, vaultwarden, and vaultwarden-web), Mageia (erlang-hex_core, erlang-rebar3, gnupg2, and sqlite3), Red Hat (buildah, podman, and skopeo), SUSE (flannel, gdk-pixbuf-loader-libheif, gnutls, google-cloud-sap-agent, grafana, graphite2, hplip, libIex-3_4-33, libzypp, nginx, openssh, perl-DBI, perl-Git-Repository, perl-Protocol-HTTP2, python-Pygments, python-simpleeval, python311-Django4, rclone, roundcubemail, strongswan, tomcat10, tomcat11, unbound, and webkit2gtk3), and Ubuntu (apache2, dotnet8, dotnet9, dotnet10, gst-plugins-base1.0, ironic, linux-azure-5.15, linux-azure-fips, lwip, mistral, and ubuntu-kylin-software-center).

14:28

Error'd: No Rush [The Daily WTF]

This week, friend Adam R. sent in an entry and included with it a link to a short-form YouTube video. Presumably this was a mistake, because I watched that video and the next one and the next one and the next one and after two hours I still haven't got this column ready. I won't share the video link with you. You're welcome.

What Adam really wanted to say was: "The USPS offers a sincerely service called Informed Delivery that, every morning, emails you scans of the exterior of your postal mail that you're expected to receive that day, which is a genuinely useful service (#not-sponsored). In today's digest, however, the subject line had an extra None thrown in there. Some Python script gone wrong that wasn't tested before production, perhaps?" We get lots of NaN, null, and undefined submissions, but None are actually rare.

1b83568aee6945e79583f845c9c25d80

Carlos sent us a fresh email, reporting "Mint Mobile hit the jackpot but their template engine didn't."

1866069ff694449e92574129d7315e0a

"No Rush" stated Robert F. calmly. "My Carbonite backup files will be deleted in 11250001 days if I don't reconnect the drive. Well, there's no rush, really. They have given me 30,822 years to reconnect it. (It was never disconnected in the first place!)"

72788c6d3e3944a7b6cf6aa056ed4c3a

"Roosting indeed" harumphs The Beast in Black. "Somebody should tell Claude Code that it keeps using that word but I do not think it means what it thinks it means. On the other hand, considering how sssllllllooooooowwww it usually is, perhaps this is honesty."

7a4c719bb94a4c66843d2a548b93de1e

Peter S. has been driven to madness by Sixt, right along with me. "Now that I am silver, Sixt's top offer is to fill all mandatory fields in their data extension. I wonder what gold gives me."

f4936743eb534c85804e190ef3b5a37c

[Advertisement] Keep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.Learn more.

13:56

Various & Sundry, 6/12/26 [Whatever]

What? Friday again?

David Hockney, the artist whose brightly colored renditions of California would go on to make him one of the most celebrated artists of the 20th and 21st centuries, died on June 12, his publicist Erica Bolton said in a statement. He was 88 reut.rs/4e5R6xd

Reuters (@reuters.com) 2026-06-12T11:23:19.039Z

David Hockney, dead: Hockney was one of those artists who I didn’t know who they were until I was adult, and then realized I had been surrounded by his work all my life. This was in large part because Hockney, who was originally from England, was besotted with California, and as a result his work was part of the cultural landscape while I spent the first part of my life there. Even if I didn’t clock the name, he added to the vibe, so to speak. When you think of California pools, you think of David Hockney (even if the most famous pool painting was based off of one in France). His work always made me happy and maybe just a little bit wistful. That’s not a bad legacy to leave behind.

Jane Yolen was an absolutely lovely human and also an almost absurdly talented writer. It's wonderful when both things are wrapped up in the same person. I considered her a friend and a colleague, and I will miss her. Condolences to the each of the many of us who knew her. Her memory is a blessing.

John Scalzi (@scalzi.com) 2026-06-11T20:31:30.677Z

Jane Yolen, RIP: I knew Jane both socially — we were both writers of science fiction and fantasy, although her total remit was much wider than that — and also because we were colleagues, working together on SFWA committees and in other ways as well (she and I are both past presidents of SFWA as well). She was a delight in conversation, and sharp as the proverbial tack when it came to dealing with committee work, and in both of these aspects of her being I was glad to know her.

Jane does not need me to valorize her work, and with more than 400 books to her name, if I were to attempt I would be here a while. But I will note that SFWA gave her its Grand Master award, and she also received the World Fantasy Award for Life Achievement and won a hefty shelf of awards, in genre and out of it. She deserved all of them. She will be sorely missed.

VISA is letting ChatGPT buy things for you: It’s a thing called “agentic shopping,” in which you can (presumably) tell ChatGPT something you want, and it goes off to find it for you and then makes the purchase without any further intervention from you, because, after all, you gave it your credit card and permission to use it. This is, I will tell you now, a spectacularly bad idea, and not just because “AI” follows directions less than perfectly due to the very nature of its architecture, and sooner than later it’s going to make a very expensive fuck-up that the user will be on the hook for because giving an “AI” your credit card number isn’t fraud, it’s just stupidity, and there are few legal consumer protections for that. It’s also a bad idea because it’s one more layer of obfuscation between you and the actual costs of things, which makes it that much harder to manage one’s finances.

And while I’m sure you are smart with your money, given the average credit card debt in the US is over $6k and climbing, and that most people carry card balances at extortionate rates, this is a really really bad idea for most consumers. Great for the credit card companies! But bad for actual humans.

Please do me a favor and never let an “AI” do your shopping for you. Please continue to be the person who pushes the button on purchases. This won’t necessarily save you from impulse shopping, says the man with 30 guitars, but at least you have to acknowledge what you’re doing. That’s something.

— JS

12:14

Bernie Sanders’ AI Sovereign Wealth Fund Plan [Schneier on Security]

Let no one accuse Bernie Sanders of ducking the big questions. Writing in the New York Times last week, the senator asked: “Will the future of humanity be determined by a handful of billionaires who have promoted and developed AI, with virtually no democratic input, who stand to become even richer and more powerful than they are today?”

We agree entirely that this is one of the most potent questions facing global democracy today. Our book, Rewiring Democracy, surveys the emerging uses for and impacts of AI in democracy around the world and reaches the same conclusion: that the most urgent risk posed by AI is the concentration of power, wealth and control among tech oligarchs.

And yet we reached a vastly different conclusion than Sanders on what to do about it.

The senator points to a once radical but increasingly popular solution: creating a US sovereign wealth fund by taking 50% stock in AI companies such as Anthropic, OpenAI and xAI. The argument in favor of this is twofold. One: it would establish democratic control over the AI companies, giving the government “the power, through its voting shares and an equal representation on each company’s board, to block decisions that hurt our citizens and to push for policies that help them.” Two: it would return a big chunk of the economic rewards of soaring AI valuations to the public, ensuring “trillions of dollars potentially generated by AI are used to improve the lives of all of us.”

We laud both these goals unreservedly.

We wholeheartedly agree that there must be public influence over the development and use of AI, just as we demand the government intervene to ensure that automakers, drugmakers, airlines and other industries balance profitability with public safety and the public interest. And we credit the senator with recognizing that there are more levers for the government to pull beyond the promulgation of regulation to achieve this.

And we also agree that the obscene, dangerous accumulation of wealth among AI companies needs to be disrupted. As OpenAI and Anthropic race to be minted as the world’s latest trillion-dollar AI companies, we should recognize that—whether or not it constitutes a bubble—these staggering market capitalizations represent a transfer of wealth. The flow of money goes from the smaller businesses and actual people using AI, and being subjected to it, to the owners of these tech companies.

That includes the world’s 86 AI billionaires “seeking to maximize their power and profit” aiming to decide the “fate of humanity… behind closed doors in Silicon Valley,” as Sanders said.

And yet, while we do not outright oppose the taking of AI company stock, or of a US sovereign wealth fund, there are better ways to achieve Sanders’ stated goals.

Public ownership of these companies entangles corporate profit and valuation with the public interest. It would incentivize the government to clear regulations, permit the exploitation of workers and users, suppress competition, encourage AI adoption regardless of the responsibleness of the implementation or appropriateness of the use case, and otherwise act on behalf of corporate interests.

After all, if growing, say, Nvidia from its first $5tn in value to its next $5tn also represents a doubling in value of this segment of the sovereign wealth fund, then you can expect the fund managers to support chip sales, foreign and domestic, with the same zeal as the company’s private investors.

This is not an effective way to influence corporations to act in the public interest. In fact, it makes corporate influence on the government more likely.

We should be wary of this possibility because we’ve seen it before. Ownership of substantial stakes in oil companies by the Norwegian sovereign wealth fund, the world’s largest, does not seem to have steered those corporations to pro-environmental policies. Instead, the Norwegian government’s dependence on those companies has inhibited them from taking climate action. Here in the US, public employee pension funds merit the same criticism: the fiduciary duty to generate wealth overwhelms any intention to direct their corporate holdings in the public interest.

A better answer is to separate the two goals. The standard way to share private rewards with the broader society that made them possible is taxation. Senator Elizabeth Warren has proposed an excise tax on datacenters’ energy use. Others have proposed an AI token tax, which has much the same effect.

As to the goal of reshaping AI in the public interest, we have proposed an AI Public Option. The concept is for governments, be it federal or state, to establish publicly developed and operated AI models run by public institutions under democratic control. The idea is not to eliminate corporate AI or to seize it as a public asset, but rather for government to provide a competitive baseline that private AI offerings must meet or exceed to win business—just like the notion of a healthcare public option.

The Swiss have trailblazed this approach. Apertus is a large language model built by Swiss public servants, researchers at Swiss universities, using appropriately licensed training data and pre-existing Swiss public supercomputing infrastructure powered by renewable energy.

While Apertus doesn’t seriously compete with the latest OpenAI and Anthropic models on performance benchmarks, it blows them out of the water in transparency, sustainability and compliance with EU regulations including adherence to copyright. It’s a nascent project, but suggestive of how public institutions can apply competitive pressure for corporate actors to behave responsibly.

Don’t confuse public AI with “sovereign AI,” the notion that every country needs to invest in domestic AI infrastructure. Sovereign AI is often invoked as a marketing scheme for big tech companies looking to sell to governments; it demands public investment without guaranteeing public control.

Sanders is a bold and savvy political operator. So why is he pursuing the sovereign wealth fund strategy when he must be aware of these risks? It may be due to another argument he makes in his op-ed: that the Trump administration and the billionaire owners of AI are aligned to the idea.

It’s expedient to capitalize on rare moments of seeming alignment across diverse political factions, but it also behooves us to ask why the AI billionaires are open to this extraordinary intervention. The answer, of course, is that they believe that for every dollar ceded to government stock expropriation, they will get back more in favorable government policies to protect that newfound investment.

Energy taxation is a straightforward way to make AI companies pay for the social disruption of their technologies. Public AI represents a non-monetary mechanism for governments to shape the development of AI, complementary to direct regulation of private actors, one with a far greater chance of influencing corporate behavior towards the public interest. We urge Sanders and other political leaders to consider them.

This essay was written with Nathan E. Sanders, and originally appeared in The Guardian.

10:21

Nü Tennis [Seth's Blog]

Every day, about 16,000,000 hours of tennis are played. The percentage of that devoted to tournament play approaches zero.

So why is informal tennis built on a zero-sum model? In a game, every shot is designed to have the opponent fail. The goal is to have your opponent miss the ball, hit it into the net, or simply wear them out.

What would happen to the experience of the game if the goal was to help your opponent do ever better? To extend, to thrive, and to be in sync?

No one wins at jazz. That’s the point.

There are plenty of ways we could imagine keeping score–from high-tech watch-tracking solutions to simple ways of counting and encouragement. There are many ways to win, and we can find useful ones if we try.

The lazy use of points revolves around elimination, scarcity, and solo victory.

But we’re not lazy if we don’t want to be.

08:35

Paid In Pretend Candy [Penny Arcade]

New Comic: Paid In Pretend Candy

06:14

Understanding the rationale behind a rule when trying to circumvent it [The Old New Thing]

In the documentation for best practices for implementing process and thread-related callback functions, it calls out

  • Keep routines short and simple.
  • Don’t make calls into a user mode service to validate the process, thread, or image.
  • Don’t make registry calls.
  • Don’t make blocking and/or Interprocess Communication (IPC) function calls.
  • Don’t synchronize with other threads because it can lead to reentrancy deadlocks.

So far so good. It seems that these callback functions need to operate quickly and cannot block. These are callbacks that are invoked when a process starts or exits, when a thread starts or exits, when a DLL or EXE is loaded or unloaded, and various other low-level events.

The various prohibitions above suggest that these callouts are called during the process creation/termination sequence, so if you take a long time to deal with them, you are slowing down the entire system. And the rather extreme requirements, like “Don’t make registry calls,” suggest that they might even be called while the system holds internal locks.

The list of best practices continues:

  • Use System Worker Threads to queue work especially work involving:
    • Slow APIs or APIs that call into other process.
    • Any blocking behavior that could interrupt threads in core services.

Okay, so this is providing a suggestion on how you can offload expensive work to code running outside the callback. This once again highlights that the callback itself needs to be fast with minimal blocking.

My colleagues in enterprise support often run into cases where the reason for a system hang is a driver violating the rule that these callbacks must return quickly. For example, a common anti-pattern is a driver whose callback starts by following the guidance above to queue work to a System Worker Thread, but then they block until the work item completes.

This is a case of following the rules without understanding why the rules are there.

The rule is that the callback needs to be fast and return quickly. The driver followed the letter of the law by delegating the work to a System Worker Thread, and there’s no rule that says “Don’t wait for work items”, so they must have figured that this gave them a loophole for executing synchronous long-running work.

But the rules “Don’t make blocking and/or Interprocess Communication (IPC) function calls” and “Don’t synchronize with other threads because it can lead to reentrancy deadlocks” make it clear that you shouldn’t be blocking in your callback for extended periods of time. The “Don’t”s are just calling out some common ways that your callback can block.

And it looks like the documentation was updated in 2020 to call out this specific case:

  • If you use System Worker Threads, don’t wait on the work to complete. Doing so defeats the purpose of queuing the work to be completed asynchronously.

One could argue that this rule is already covered by the “Don’t synchronize with other threads” rule, but I guess the driver vendor interpreted it as “But I’m not synchronizing with another thread. I’m synchronizing on an event!” But of course, the event is set by another thread, so you are effectively synchronizing with another thread.

My colleague in enterprise support describes this as the “It wasn’t me, it was my brother” excuse. You are told by your parents not to turn on the television set, so you tell your brother to do it. Technically, you didn’t turn the television set on, but in effect, you did because your brother is acting under your instructions. (This is why contracts often contain wording like “may not disclose or cause to be disclosed,” so that you can’t say “No, I totally didn’t disclose it. I gave the information to Bob, and it was Bob who disclosed it!”)

The documentation should open with something like this:

The callback function must perform its work quickly without blocking. If you need to do complex work or synchronize with other threads or processes, do the work asynchronously, such as by using System Worker Threads.

And then it can give a list of examples of things that count as blocking.

Some examples of blocking that is not allowed from the callback function:

And then it can follow up with additional constraints.

Furthermore, the callback function may not perform any of the following operations:

The post Understanding the rationale behind a rule when trying to circumvent it appeared first on The Old New Thing.

05:49

The Magic Words [Ctrl+Alt+Del Comic]

And here I thought maybe I’d found the secret to a new career without needing experience. There have been a number of games in the past 2-3 weeks that have released in just buggy states of being (Crimson Desert, Pokemon Champions, etc) but this apology letter from the Samson developer made me laugh.  “We have […]

The post The Magic Words appeared first on Ctrl+Alt+Del Comic.

Girl Genius for Friday, June 12, 2026 [Girl Genius]

The Girl Genius comic for Friday, June 12, 2026 has been posted.

01:35

00:00

Page 24 [Flipside]

Page 24 is done.

Thursday, 11 June

22:42

Link [Scripting News]

This is a test page about Charles de Gaulle. It came from ChatGPT, via Claude Code.

22:00

The Big Idea: Cynthia Pelayo [Whatever]

To be whisked away to Neverland was certainly the dream of many a child, but for Wendy Darling it was always a trap, rather than a paradise. Author Cynthia Pelayo discusses in her Big Idea how Wendy was a servant, not an equal to the Lost Boys, and takes us to revisit Wendy in her newest novel, It Came From Neverland.

CYNTHIA PELAYO:

Wendy Darling is the reason any of us even know about Neverland. We think this is Peter Pan’s story, but it’s not, not really. The only reason any of us even know about Neverland is because of Wendy Darling. 

Let’s strip away the fairy dust and the pirates and the flying and the crocodile, and what do we have? A girl. A girl who was told that something magical was waiting for her on the other side. A girl who believed what she was being told. A girl who later learned she was lured with the promise of magic, yet found herself inside a trap instead. 

J.M. Barrie introduced us to Peter Pan through The Little White Bird in 1902, and that little boy would go on to pique the public’s curiosity so much that Barrie revisited his story. Then came the play in 1904 and the novel in 1911. However, the reason the story works and the reason it continues to survive over a century later is because of Wendy. Without Wendy there would be no Neverland. No Tinkerbell. No Hook. No Lost Boys. Peter Pan without Wendy Darling is just a boy screaming into the dark. Wendy is the story, and Peter’s promise to her is the lie. 

Peter tells her to come away with him, that she will never grow up, but what he means is something entirely different. What he wants is a mother, for the Lost Boys, and selfishly for himself. He wants someone to read to them, to mend their socks, to take care of them. Someone who will stay in that role, forever. 

Yes, Wendy goes, because she is sweet and brave and kind and beautiful, and she is made up of stories. And perhaps it’s because of her kindness that she allows herself to trust, to trust in the possibility that maybe this is all real. Perhaps she even catches the hint that there is something wrong in this request to run away, but she overrides her own intuition for the possibility of magic and friendship. Quickly Wendy learns that the promise of eternal youth was just manipulation. It was all a story, and not a happily-ever-after kind. She was not brought to Neverland to take part in adventure, to be treated as a partner, or even as an equal. She was brought to Neverland to be a caretaker in a prison with no walls. 

Wendy is every woman who has ever been told one thing and expected to be something else. That is the story that I needed to tell: The Girl Who Bravely and Beautifully Grew Up, Wendy. 

I wanted to write a version of this story where we are provided with the accounts of Neverland directly from Wendy’s perspective, as an adult, after she has had time to process it all. I wanted her to be able to clearly name what happened to her, to accept that she was lied to, and then made out to be foolish and called unstable for the wounds inflicted on her by others. I wanted to tell the story where she lives with that trauma and learns that she is not defined by what happened to her. 

In It Came From Neverland, Wendy is in her early 20s and she is working as a schoolteacher at an orphanage at the start of WWI in 1914. She also volunteers in the afternoon, reading to soldiers who have returned from the war. When one of her students goes missing, and a solider in a comma utters the words “Peter Pan,” she knows Peter has returned and she and her brothers must reunite to finally stop him from kidnapping more children. 

This book is for every woman who was told she was special by someone who really meant that she was useful to them. For every woman who followed a beautiful story, later to learn it was only a cage. 

And, for every single woman who told the truth about what happened to her, but was not believed, and she realized that no one was coming to save her, so she learned to save herself. 

The only story that has ever truly mattered is Wendy’s. 


It Came From Neverland: Amazon|Barnes & Noble|Bookshop

Author socials: Website|Bluesky|Instagram

21:42

20:21

Generative AI in the Real World: Agentic Systems Fundamentals with Maarten Grootendorst [Radar]

BERTopic creator and Google DeepMind developer relations engineer Maarten Grootendorst has spent years helping practitioners build intuition for how AI systems actually work—not just how to prompt them. Maarten joined Ben Lorica to cover the enduring relevance of embeddings and topic models in an LLM-dominated world, his hot take that agents are essentially just an “LLM in a for loop with some tools, some memory, and perhaps some guardrails,” and what separates genuine agentic behavior from a well-constructed pipeline. They also get into the practical trade-offs between open weight and proprietary models, the future of state space models and attention, and why Maarten worries that a generation of builders shipping code they can’t read may be storing up technical debt they can’t repay. “If you don’t really know how an LLM works,” he says, “that intuition [about how to use it effectively] is much more difficult to develop.”

About the Generative AI in the Real World podcast: In 2023, ChatGPT put AI on everyone’s agenda. In 2026, the challenge will be turning those agendas into reality. In Generative AI in the Real World, Ben Lorica interviews leaders who are building with AI. Learn from their experience to help put AI to work in your enterprise.

Check out other episodes of this podcast on the O’Reilly learning platform or follow us on YouTube, Spotify, Apple, or wherever you get your podcasts.

Transcript

This transcript was created with the help of AI and has been lightly edited for clarity.

0.50 
All right. So today we have Maarten Grootendorst. He is a developer relations engineer at Google DeepMind, and he is also the coauthor of two O’Reilly books, Hands-On Large Language Models and An Illustrated Guide to AI. And so, Maarten, welcome to the podcast.

01.10
Thank you. It’s wonderful to be here.

01.12 
So, I had you on the podcast—I was looking at it earlier this morning—August 2022, a few months before ChatGPT was released. 

01.23
It’s been a while. [laughs]

01.25
Yeah. Back then, what I wanted to talk to you about was, I was a user of your BERTopic library. For listeners who are not familiar, BERTopic was kind of a marriage between the transformer approach with topic modeling and Maarten wrote one of the more popular libraries for doing that. Actually, what’s happened to this whole topic of topic models?

01.58
Oh, yeah. I think it’s still going strong. You mentioned ChatGPT. So a lot of people say, “OK, just use that for topic modeling.” You can. It’s just very difficult to make sure you get a more structured, standardized output rerun thing, especially if [you have] millions of potential documents. And you can still use that on top of that. It’s still my baby of sorts, right? I mean, it’s been four years since we talked, and. . . I love working on that. I don’t have that much time to do it anymore, but it’s great.

02.36
Yeah. So I think one of the things that these large language models have done is kind of, I guess, cast by the wayside some of these earlier approaches for really wading through a lot of text. Unfortunately, I think people, as you mentioned, are trying to prompt their way into a topic model. But I think topic models themselves are still very useful. So one question to you, Maarten. What’s the level of usage of BERTopic now compared to when we talked?

03.13
It’s only grown since then.

03.17
Really?

03.18
Yeah. It surprised me too. [laughs] I think it’s because it’s easy to use. I did some, I think, cool tricks in there, but other than that, I think the main benefit was mostly just a nice user experience. And that helps people use something for a very specific task instead of trying to prompt your way towards something that might or might not work, and you still have to iterate over that. It just works out of the box. It’s not perfect. Nothing is. It’s not a free lunch. But yeah, I think that’s it.

03.55
One thing that’s happened, of course, is that this whole area of AI and NLP has gotten so democratized that. . . When we talked, I think the people who were using BERTopic at least had some notion of what NLP was and what text mining was, right? I would imagine now, in your role as a developer relations person, you encounter a lot of people who don’t come from a data science or ML background. And so they have no clue what topic models are, I would imagine.

04.34
Yeah, many don’t. It’s very interesting to see because you mentioned NLP and text mining and, well, [they’re] completely outdated terms now for some reason. It’s all AI. Let’s just call it AI and be done with it. [laughs] That’s not necessarily a bad thing, don’t get me wrong. It’s just very interesting to see how the field has evolved, but that also means that people don’t really look towards these “older techniques” that still drive much of the adoption of newer stuff.

Sometimes it feels like that, you know, AI and LLMs. . . It’s a hammer and we’re looking for nails to actually use it instead of, “OK, but we have packages for very specific things, and you can use LLMs on top of that.” You don’t have to. But it requires a bit of education on that end, because like you mentioned, a lot of people new to the field, you have to explain, “What are embeddings? What is clustering?” It’s also very interesting to see that even something like that needs to be explained a little bit in more detail. It’s a nice opportunity for me to explain stuff. I like doing that.

05.48
And the key here is that because a lot of people are entering this field and building things and they don’t necessarily know the prior art, so to speak, it seems like they might be leaving a lot of things on the table. Right? So in terms of, here’s my text or my data, I am just going to prompt and I think that I got everything out of it, but that’s not really the case for the most part.

06.24
No. Definitely not. There’s so many things that you can do with these systems, whether it’s on the LLM side or the agentic side or the topic modeling side. If you just know a little bit more on what’s going on under the hood then that helps you understand “When do I prompt? When do I not prompt? What’s going wrong?” That feeling, that intuition. You don’t just get it with building. Building’s very important, but if you don’t really know how an LLM works, that intuition is much more difficult to develop.

06.59
Which brings me to your two books, which are fantastic, which I think go a long way into helping people get that foundation. But let’s face it, a lot of people, Maarten. . . So let’s take your earlier book with Jay [Alammar], which is Hands-On Large Language Models. A lot of people may say, “I don’t have time to read this whole book.” So for someone who is a developer, doesn’t have a data science or ML background, what would be the most important concepts for large language models? Drill down on these three or four concepts that will set you up for success.

07.49 
From the top of my head, those are chapters two and three. So buy the book now. [laughs] I’m just kidding. Tokens. Super underappreciated.

08.03
Which now is a big topic because, as I joke, the CFO has now become the CTO, the chief token officer.

08.11
I didn’t know that one. That’s amazing. I’m gonna use it. But, yeah, tokens are now the thing, right? It’s what LLMs use to see the world, so to say—to interpret the world. And it’s how they communicate with the world. So it’s really important to know what tokens are. It helps you get into the realm of embeddings, which I still think is super fundamental to so many things we do.

And the second part is kind of an obvious one, but the attention mechanism, “Oh, wow. Why are these things so strong? What makes them so special?” Attention is an obvious one. We have other things like Mamba, recurrent neural networks, but it all starts from attention. So if you’re completely new to this field, those two. Yeah.

08.58 
Let’s take the topic of embeddings. I think at least that topic, Maarten, some people have had to play around with it, right? Because when LLMs first came online, the “Hello, World!” example was RAG, and one of the knobs that people were tuning was embedding, obviously chunking, so the information extraction, the search and retrieval—they’re all important. But one thing that people immediately tried to play around with was embeddings because they could go to places like Hugging Face:
Hey, let me try these four different embeddings.” Do you find that embeddings have a special place in that more people play around with embeddings and have some rudimentary understanding of embeddings?

09.50 
I have a sweet spot for embeddings because it’s the main part of BERTopic. But I think it’s so fundamental to so many things that we do in this field. Even things like RAG—which some people think is outdated. It actually isn’t. It’s very much alive and still kicking—runs on embeddings and understanding how they work will also help you understand how LLMs work. And it can be used in so many different ways. 

Sometimes we’re looking for bigger embedding models, more contextualized information. Great. [They] have their own purposes. And there are now certain parties focusing a little bit more on these static embeddings that are super fast and quick, like the old school embeddings that we used to have, and now in a new form that can be used in conjunction with coding agents to quickly search through repos and find the information that they’re looking for. Much of what we do is still search, and search revolves in big part on embeddings. And it’s just nice when you have text that you have one numerical representation for it—just that gives you so many opportunities to do so many cool things. . .

11.18
So when you’re trying to convince someone, Maarten, that “Hey, you should learn more about embeddings, because they’re important,” is there a canonical example that you use to say, “Hey, look, if you just understood embeddings and you made this one decision, look at the change in your application.” Is there a canonical example that you go to?

11.40
Oh, yeah, I love the question, but I don’t think I have an answer to that. Because, OK, so I’m a psychologist and I really like to say “it depends on,” and here it kind of depends on the application that you’re running, obviously. Contextualized versus noncontextualized embeddings is a very interesting example because the contextualized ones are generally larger. But there’s larger transformer-like models that require a lot of compute to run. So you can see the latency actually appearing in your search engines. Or if you connect your coding agent to one of those, it slows down because, you know, it needs to wait for the search compared to the faster static ones, for instance, like Model2Vec and stuff like that, which are tremendously fast. So amazing for those use cases, not that performance because they’re way smaller, obviously. And it’s these use cases where the building does get you a lot of intuition about when to use what instead of relaying that decision only to an agent. You’re still the one that needs to have the feeling, that gut feeling, to say this works better for my use case.

13.03
But I would say the reality is that people will go to some leaderboard.

13.09 
Yeah. That’s just the way it is.

13.13
So there we go. OK. So in this leaderboard here are the top 10. In this top 10, there’s some that look larger than the others. So I’ll try three or four of varying sizes. Is that a fair characterization of what normally happens?

13.32
Yeah that’s even what I always did. Just you know, top of the leaderboard, pick one or two. But then as you are more experienced with picking one, what about multilinguality? I’m Dutch. There aren’t that many very good Dutch embedding models—big problem there. There are things like matryoshka embeddings, where they’re embedding one embedding model, but they generate embeddings of different sizes for different purposes, which is also very interesting. So there’s all these types of small decisions and nuances that you can make. And we now have instruction-tuned embeddings, where you prefix it with an instruction that you want an embedding for clustering or for classification or for what have you. And then you suddenly see the nuances in selecting something.

14.27
So on the attention mechanism, again, I will play the role of someone who has no time. I don’t have time to read the chapter, Maarten. What are one to three things I should know about the attention mechanism?

14.44 
I think the most important thing about the attention mechanism is it contextualizes information. That’s by far the most important thing. When you look at the world before attention and after, it’s a little bit less black-and-white, obviously, but it puts stuff into context. You know, if you have the word “bank,” is it the bank of a river or a financial bank? And as we talk now with each other, there’s a lot of contextual stuff going on. You need to interpret what I’m saying, because if you only focus on what I say, you don’t know that that was actually a question beforehand that drives my answer. And I think that’s what makes attention so special. It tries to look at the entire thing instead of individual tokens or words.

15.34
Playing devil’s advocate, so you just explained it to me. Why do I have to learn more than that? [laughs]

15.40
Always learn more. [laughs]

15.44
Yeah, yeah, yeah. So you mentioned Mamba and the state space models. There was some excitement around them. So maybe give our listeners a high-level description of what these state space models are and what their current status is in the wild in terms of actual practical usage.

16.08 
State space models are a completely different way of approaching this attention mechanism, right? It almost does away with it and replaces it with something that is much, much faster. It’s a very complex and highly technical subject, so I don’t want to go too into that because it’s really confusing. [laughs]

So what you see happening is that people replace attention mechanisms. So you have a decoder and LLM, and it has several stacks of attention mechanism normally. What you can do is you can remove half of them with the very quick state space models that help speed up the inference—because that’s what we’re mostly bound now by, is inference speeds. People want more, more tokens. So it needs to be faster. So it’s, it’s a way to make it quicker.

17.13
Yeah. And so what is the actual implementation or adoption of state space models right now?

17.21
Mostly hybrid models. Models, stats, interleave the attention blocks, the decoder blocks with Mamba blocks as a way to make it faster, where some do it with, for example, local attention and global attention—one is more compute-intensive than others. Mamba is a way to do something similar, as a way to speed up that inference.

17.51
Your latest book is about agents: An Illustrated Guide to AI Agents. Before we dive in, in your mind, what makes a system truly agentic? In other words, before we started bandying around the word “agents,” people were using the term “robotic process automation” or something like that. So in your mind, what makes a system agentic?

18.22 
That’s actually been one of the more complex topics for us to actually describe, because the field has been changing so quickly. And what is fundamentally an agent when they change it every two months? It’s a little bit of a hot take, but I really do think that an agent is an LLM in a for loop with some tools, some memory, and perhaps some guardrails. And that really is essentially all it boils down to at its base.

18.55
You just described the harness basically. The hot term right now is harness engineering. So what is the real progress and what is just marketing when it comes to agents?

19.19 
Yeah, I agree very much with what you imply here because agents sound so cool, and they are cool, but the moment you give an LLM complete freedom, no constraints, just go off and do your stuff, it will fail horribly, horribly, horribly. Agents still need. . . And we can call them guardrails, but you can call them something else. They need direction. They need to be constrained a little bit in the things that they do. So yes, agents, there’s a lot of hype around that. I’m not a big fan of hype. It is what it is. But there are a lot of cool use cases for it because there’s a reason why coding agents are now the big thing. I’m using them myself daily because they make my life easier. But when we look at other use cases, we’re so early in AI progress. Yeah, coding works very nicely. But to ask an agent to book a vacation for me. Yeah. No.

20.35
It seems like that example of “I want to go on a trip. This trip will involve staying in five countries. And I want you to pick the best hotel for every country.” always was kind of the demo even during the robotic process automation. And as you alluded to, I don’t think we can do it quite yet. So here’s another family of agents, Maarten, that a lot of people are using now: deep research agents. Would you consider deep research an agent?

21.15
Maybe. It kind of depends on how it’s implemented. It depends. I’m sorry. I’m going to do that a couple of times, but. . . You can make it very structured, where you say, “OK, do the search on the archive, read the abstracts, make a summary. That’s it.” That’s not really. . .

21.38
It fits into your description in that you’re prompting an LLM. The LLM goes on a for loop where it uses as tools a search index, a knowledge graph. . .

21.53
Fair enough. Yeah. It makes the decision on its own when to use a tool, why to use a tool. Whereas you can also put it in a pipeline where you specifically say, “I always want you to do steps one, two, and three.” And an agent might decide to say, “OK, I’m going to do step 3, 3, 1, 2, 1, 3.” Decide on its own when and where to use specific tools. I think that’s maybe the best distinction you can make on what is and what isn’t an agent.

22.26
And then I guess it depends on the implementation, as you mentioned. But memory could also fill a role there, especially. . . Let’s say I’m using only one service—Google or Perplexity. Maybe it remembers over time what my preferences are. I don’t know if they actually implement it that way. But there’s potentially that aspect.

22.53
So how we phrase it in the book at least, we say, “OK, an agent is a reasoning LLM that has access to planning, tools, and memory,” because there’s no such thing as an agent that goes off and does three steps of something only to forget what the previous steps were. So I think memory is maybe a little bit underappreciated in the realm of agents, because imagine it has to go through an entire codebase and translate it from Python to C++ or Rust or what have you. It’s a very common example of things people want to do. That requires hundreds of steps to do, because it’s potentially a large codebase. How does it remember what it did when it did what, what the current state is, what what’s changed, etc., etc.? And you can write that in a Markdown file. That’s nice, but it also needs to understand, “OK, what’s the trajectory that I went through?” And you can do a lot of cool stuff with that trajectory, because that’s essentially the memory of an agent.

24.02
In your role in developer relations, I assume you talk to a lot of people who work in different companies. We’ve mentioned coding agents; we mentioned deep research. So what are some of the more common agents that people are building? They could be internal or external facing. So what are some of the more common agent types, I guess, that people are building?

24.29
Aside from the obvious, it depends on the industry. I do see coding agents actually being done quite a bit internally. Just trying to see how they can prevent data from being leaked elsewhere. Because a lot of processes now are very privacy sensitive. I came from healthcare before I joined DeepMind. And what you see in these kinds of fields is that, especially in Europe. . .

25.06
I imagine if you’re in finance in a hedge fund. . .

25.09
So yeah, same. . . And these are situations wherein people focus a lot on privacy and making sure that everything’s constrained within their environments. And you see a lot of people playing around with LLMs and then using harnesses—can be Hermes but also [taking] a more foundational agent and build[ing] stuff around that. Or the larger organizations that, well, just use whatever cloud offering there is and use an agent there. We’re so at the beginning of all of this. [laughs]

25.50
For me, the area where I see it being used—and this is not going to be a surprise to our listeners—is still the technical team bucket, which would be DevOps, data engineering, platform engineering. . . They’re building agents to help them do the work. But you might be interacting with a large website, and in the background, there’s a bunch of agents doing a lot of heavy lifting, moving data around for you to get the answer you want or whatever, or internal processes. But DevOps, I think they’re starting to build their own agents. I think, data engineering for pipelines, they’re building their own agents. I would imagine the people in security teams are also building agents because they have to go through lots of log files and. . .

26.55
A question for you then: Are they building agents, as in, you know, fully an agent, or are they building skills? Because I’ve seen a lot of people more focusing on creating skills and giving that to whatever agent is available. Or do you also see a lot of people actually building agents from scratch?

27.17
I think internally there are people who are building what we would consider agents in the sense that it would do a huge chunk of their normal work and they interact with it with prompting, but maybe they don’t consider it completely autonomous. So in the sense that many people who use coding agents, at least, the ones who know how to code, as you might still test and read some of the code, right?

27.50
Sometimes. Sometimes. [laughs]

27.52
Our listeners may be sharp, but there’s huge cohorts of people using coding agents who don’t know how to code or who are building websites and web applications. So in the data, in the DevOps, in the data engineering field, the kinds of agents they’re building are somewhat similar to the coding agents in that they’re doing a lot of the work, but they still have guardrails. I would say they’re still human-in-the-loop. Now, there’s also agents in the nontechnical fields, but they’re a little more. . . Maybe to your point, maybe they can be better described as skills, for example, in marketing or sales. Internally at some of these companies, they’re building things to help these teams be more independent from IT.

29.01
So yeah, you see mostly and we can call them skills, but we can also call them workflows or pipelines or just prompts. . .

29.10
Imagine you’re a marketing analyst at a big Fortune 500 company. And your job used to be to manage a bunch of ad campaigns and online campaigns. That was very manual, and so now you can automate a lot of that work. And then you might still have a dashboard where you can kind of see what’s going on. But the things that used to drive you crazy, now you can focus on other things.

29.46
But I am curious about the long-term effects of all of this, especially when, as you mentioned, a lot of people code without knowing how to code. I think that’s fun for a while but in the long term, stuff breaks and you don’t know where to start.

30.01
I don’t know about you, but I’ve come across people who literally don’t know how to code, who built a website, starting to have customers. Customers will file support questions or they say, “This part of your website doesn’t quite work.” Since they don’t know how to code, they go back to the same coding agent: “Hey, fix this.” The coding agent says I fixed it. They go back to the customer: “It’s fixed.” The customer goes, “It’s not fixed.” And so then this is when they start going “I need to hire someone to actually. . . Because now it actually needs to be fixed. And the holding agent can’t fix it.” So there are obviously dangers to going kind of completely wild on these technologies.

So open weights versus proprietary. This might be a sensitive topic to you because you have Gemini, but you guys also have Gemma.

31.09
I work on Gemma. Ask me everything about Gemma. [laughs]

31.12
[laughs] In your work—or not in your work, but in your day-to-day life, talking to friends, traveling, in your dev rel hat, what is a level of interest in open weights?

31.27
Oh, a lot, yeah. That’s for the most part because I’m in Europe. And Europe loves to say, “OK, we want to own things. We don’t want to push it over to someone else.” So there’s a lot of interest for open weight models. It’s way more than I initially thought because there was quite a big performance gap when ChatGPT came out, 3.5. But now they’re closing in. These models are extremely capable. You can run them on MacBooks. I mean, when Claude came out, I’ve seen so many threads of people buying Mac Studios just to be able to run whatever local LLM they have. So you see it in every part of the field, whether it’s very large organizations or very small, finance, healthcare, what have you.

32.25
One of the challenges with open weights is open weights is a business decision. And business decisions can be reversed. Meta Llama may no longer produce open weights. Alibaba—kind of mixed signals there. Some of the Chinese open weights providers are starting to send mixed signals. So it’s one thing to release an open weights model. But as you know, in this environment you have to release models at a regular cadence and that starts getting expensive. So I guess one of the challenges there for our whole community and industry is, you know, where is the steady supply of open weights models going to come from moving forward? Because basically, like I said, it’s a business decision, and a business decision is going to be reversed.

33.28
No, I agree on that. So in the general sense, that’s what we see happening. Some organizations stop doing open source, [or] less of it, focus on different things. It’s understandable in a way, because, you know. . .

33.45
And, you know, one of the obvious advantages of open weights is you can take the weights and run it in your cluster. And so you have control if. . . One of the things that annoys a lot of these enterprise teams is OK, so I’m really optimized for Claude 4.5. And then, hey, they are deprecating Claude 4.5, you know. So here at least you have control. And I think one of the things that most teams are starting to realize, Maarten, is actually I can use open weights for a lot of things because. . . Let’s say it’s so focused, like a simple sentiment analysis or whatever. I don’t need the most expensive models. And this I can control moving forward. So I think people and teams are discovering, “Hey, while I should be concerned that these open weights models may stop getting released, for some, for many of my tasks, maybe I don’t need the latest and greatest anyway.”

34.52
That can be the case. Yeah, because these models are very capable. I think there will always be a steady supply of open weight models. If we look at the status of the field now, many. . . Obviously Qwen, they’re doing an amazing job. Needs to be said. Same with Gemma, they’re also doing well.

35.14
The Qwen team lost a bunch of people, and I think there’s some worry that Alibaba may back off from. . .

35.23
I think they will continue. I don’t know, obviously, but I think it’s still a very good strategy to do.

35.30
And wait, Gemma is not as good as Gemini. [laughs]

35.33
We have good benchmarks. What is this? What is this? [laughs] No, but they serve different audiences. And what we see happening with open weights is you get so much back from giving open weights to the community. And DeepMind is a nice example. But the more labs obviously that have always given a lot to the community, when you do that, you also get a lot back, right? Because if people are super excited about Gemma 4—we released a model two days ago, 12B-1. And you see people using that for a lot of cool use cases. Driving research to create new things that, you know, we might not have thought of. That can be the case. You see Flash, for instance, which is a diffusion-based drafter, super fast, very incredible being used with Gemma 4. That’s cool. And it’s not to say that Gemma was the first one that drove that, but open weights in general allow a random person somewhere without access to thousands of GPUs to pretrain a model and still be able to do very cool and interesting research. So as long as I’m at DeepMind, I’m gonna make sure we’re gonna keep doing very cool Gemma stuff.

37.03
All right, so let’s close with a rapid fire round. So for each question, keep your answer under a minute. Question number one. OpenClaw. What says you, Maarten, about this trend around personal agents?

37.21
I love personal agents. They’re very cool and interesting. And at the same time, I’m very worried about the security of it. We’re seeing a lot of people’s keys being opened up, things that are being deleted that shouldn’t be deleted. And that’s because we’re in very early stages of all of this—just a little bit more time, and then it will be amazing.

37.46
Yeah. And run it locally with Gemma. [laughs]

37.50
Yeah, of course. [laughs] I’m not gonna sell too much. I love Gemma, I’m selling already too much.

37.57
Question number two: reinforcement learning. I’m a big fan. I always push out a post once a year at least, where I say it’s just around the corner. Now it seems like there’s a bit of a comeback with reinforcement, fine-tuning. Are you paying attention to reinforcement learning?

38.21
A lot. I have a couple of colleagues, and we started something called the RAG Pack with some bigger influencers, like Jay Allamar and Josh Starmer from StatQuest. And we did a course on reinforcement quite recently. It’s such a cool technology. It’s the technique that makes LLMs the way they are today. And there’s still a lot of new things coming up in that field to make them faster, more capable, multituning trajectories. Yeah, it’s the whole thing.

38.54
Third question: scaling loss. So Anthropic in particular is big on scaling loss: bigger models, more data, that’s the road to better and better models. So what’s your feeling right now about scaling loss.

39.11
They change quickly. We started with regular “more parameters, better model.” Then we switched to reasoning, where we said “longer reasoning, better model.” And now we’re slowly going towards the “longer trajectories, better model.” You know, more is better. I think they’re interesting, but they’re changing now so quickly that I’m wondering in half a year what the new scaling law and the new nifty thing is going to be.

39.39
So in closing, data centers. Data centers are a hot topic in the US. A lot of communities seem to be coalescing around opposing the build-out of data centers. So it’s a bit of a complicated issue in the sense that, you know, assuming that these AI technologies work and they get adopted, we will need compute in order for people to have access to these technologies. Otherwise, maybe the rich are the only ones who will have access to AI. On the other hand, the data centers themselves, you definitely need local input because, electricity, water, noise. . . And then unlike factories, they don’t really produce a lot of jobs because how many people do you really need to run a data center with all the DevOps agents now that we talked about? So what’s going on in data centers in Europe?

40.43
We don’t like them. I’m saying we—I’m Dutch. If I’m saying for the people of the Netherlands, we don’t like them generally. And that’s going to be very interesting moving forward because there’s still demand for AI. I know there’s a lot of people that don’t like it, but at the same time, there’s still a lot of people using it, and we need to find a way to balance that out. There’s no way forward otherwise, and I really hope we can focus more on efficiency when it comes to these compute-heavy things. That’s why I focus so much on Gemma. They’re small, capable models that you run on your cell phone. That’s great. Without needing to have these large data centers, aside from training, maybe, but that will always be there. We have to be honest about that. AI is here to stay. We just need to make it more efficient.

41.38
And with that, thank you, Maarten. And by the way, closing note about data centers, for our listeners, there’s a lot of announcements, right? Several gigawatts are being. . . Contracts being signed. But if you really follow what’s going on, there’s not a lot of build-out. There’s not a lot of data centers actually being built in and coming online. So… Thank you, Maarten.

42.07 
Thank you.

20:07

The Return, Indeed [Looking For Group]

We are making decisions all over the place this week, with the helpful folks over at our Facebook page. Wild, considering I’ve barely touched Facebook in years, but the LFG community there is still strong.  So! We landed on Crowdfunding
Read More

The post The Return, Indeed appeared first on Looking For Group.

19:21

Web browsers on video game consoles [OSnews]

Video game consoles have a long history with web browsers. From the advent of the World Wide Web, consoles have been trying to get online. Browsers on video game consoles were initially very much an attempt to provide a cheap gateway to the web for a casual audience lacking technical expertise, though as time progressed they’ve become a greater and more integrated part of systems.

This article takes a look at browsers on video game consoles in detail, though only covers official web browsers. Many consoles have browsers installable via custom firmware and homebrew, but they’re beyond the scope of this post, as are non-web systems such as Satellaview and online services that didn’t provide a browser, such as XBAND, Sega Meganet, and Sega Channel.

↫ Declan Chidlow

The article starts off with the Philips CD-I, which has always been a fascinating product for technology fans in The Netherlands because that’s where Philips is from. Memory that far back is untrustworthy, but I can definitely remember being inundated with commercials, advertising, magazine articles, and newspaper reports about the CD-I, all throughout its rather troubled life. Yet, I don’t remember anything about it being capable of browsing a rudimentary web.

Of course, we’re talking 1995 here, a time when I didn’t even have internet at home yet, although I did use the web at a friend’s place at that time. We didn’t get internet at home until I think 1997 or 1998, followed by the move to broadband cable internet just a year later, since our small rural town happened to be one of the first places to get broadband. Good times.

Did anyone ever actually use browsers on consoles, though? I mean, using them always felt incredibly clunky, and by the time they were capable enough to really do anything we all had laptops and later smartphones anyway. I certainly don’t remember anyone using them for anything but a gimmick, but perhaps my sample size was far too small and not diverse enough.

18:35

17:35

Apple Gave Siri Hands [I, Cringely]

WWDC answered whether your assistant is private. It never answered whether it’s telling the truth — and Apple just gave it hands.

The smartest thing I’ve read about Apple’s WWDC didn’t come from Apple. It came from an analyst named Nate B. Jones, who watched the same keynote everyone else did and noticed that the real story wasn’t whether Siri had finally gotten smart. The real story, he argued, is a land grab over what he calls the trusted action surface — the place where AI actually meets your work, touches your apps, and is handed permission to do something. There are two great bottlenecks in AI, he points out: raw compute, which is Jensen Huang’s kingdom, and the trusted surface where intelligence becomes useful, which is the one Apple just went to war for. Whoever owns that surface owns the meter when intelligence becomes unavoidable. It’s a sharp frame, and he’s right.

He’s right, but he left out the scariest part.

Here is what Apple actually did. It tore Siri down to the studs and rebuilt it on Google’s Gemini — reportedly a custom, 1.2-trillion-parameter model that Apple pays Google something on the order of a billion dollars a year to use. It gave the new assistant eyes: real-time awareness of what’s on your screen. And — this is the part that matters — it gave it hands. The new Siri doesn’t just answer. It manages your browser tabs, rewrites your weak passwords, reaches across your apps, pulls context out of Mail and Messages in the middle of a phone call, and acts inside the software where your life actually happens. Craig Federighi wrapped the whole thing in a promise about privacy and took a quiet shot at the rest of the industry for chasing AI for its own sake while losing sight of the people it’s supposed to serve.

It was a good keynote. And it answered exactly one of the two questions that matter.

Apple answered is it private? — will the assistant know your life without strip-mining it and selling the tailings? That’s a real question, and Apple has a real, earned answer. The other question, the one nobody on that stage went near, is is it true? And the instant you give an assistant hands, that second question stops being academic.

Think about what changes when an assistant goes from talking to doing. When a chatbot makes something up, it costs you a minute and a raised eyebrow. When an agent makes something up and then acts on it, it sends the email to the wrong person, moves money to the wrong account, deletes the file it meant to keep, books the flight for the wrong Thursday. A hallucination in a chat window is an annoyance. A hallucination with hands is an incident. Agency multiplies the cost of being wrong by exactly the thing that makes agency valuable.

And what is driving those hands? A large language model — a very capable one, but the same kind of machine that, like every model of its line, fabricates with total confidence when it doesn’t know. Gemini is excellent and Gemini hallucinates; both are true, the way both are true of all of them. Apple took the most capable probabilistic guess-engine it could license, gave it the keys to your apps and permission to act, and then reassured you about privacy. The locks on the doors are magnificent. Nobody mentioned whether the butler tells the truth.

This is the gap I’ve spent this whole series circling, and I’ll disclose again that I co-founded a company built on closing it, so weigh that however you like. But the principle stands on its own, and it is bigger than any one company: a trusted action surface is only as trustworthy as the facts the agent acts on. You can own the device, the operating system, the permission prompt, the whole beautiful surface — and if the thing deciding what to do is guessing, you have built a faster, smoother way to be confidently wrong about someone’s money. The surface needs a substrate. The hands need a conscience. Trust has two axes — privacy and veracity — and at WWDC Apple shipped one of them and didn’t mention the other was missing.

Which loops back to Jensen, and to the argument I’ve been making from the other direction. Nate’s case is that value migrates off the model and onto the surface, and that this is NVIDIA’s problem. Mine has been that value migrates off the GPU and onto a humbler kind of silicon — the CPU —, because most of what we ask AI to do is look something up, not dream. Two different roads, one destination: the belief that NVIDIA’s position is a law of nature is a story, not a fact. But notice that the surface only wins if people trust it — and the agentic surface raises the trust bar at the very instant it raises the stakes. Owning the meter is worthless if the meter lies.

So watch the surfaces, as Nate says. But watch what they’re built on. Apple just gave a billion people’s computers hands, eyes, and access, and wrapped it in the best privacy story in the industry. It gave Siri hands before it gave Siri honesty. Until the conscience ships, the hands are the part I would keep an eye on.

Robert X. Cringely is a co-founder of 2Brains, Inc., in Charlottesville, Virginia. He has written this column since 1987.

The post Apple Gave Siri Hands first appeared on I, Cringely.






Digital Branding
Web Design Marketing

Please I Beg of You Do Not Use “AI” In Your Business Communications [Whatever]

The other morning I was clearing out the multiple daily emails I get from scammers who have used “AI” to praise one of my books in order to get me to use their “marketing” services and/or be on their “podcast” and/or show up for their “book club” and/or use them to become big in Hollywood, all of which is cover to grift money from me, one “Ai”-written email in particular caught my eye. This was not because it was any more authentic than the rest of them, but because the domain it came from was a specific and legit business domain, and not just Gmail or Hotmail or even (oh lord) AOL.com. In a burst of concern, I sought out the email of the company head and their management contact to let them know I suspected their domain had been hacked by scammers.

I got a reply back that, no, actually, the email, which to me had clearly been written using “AI,” was legitimate.

Folks: Don’t do this. Don’t use “AI” for your business correspondence, especially to creatives. Ever.

Let me put this in perspective: I get literally dozens of spam and scam emails every day, all of which use “AI” to fart out canned flattery about my work in an attempt to bamboozle cash out of me. I get so many of them, in fact, that I can tell at a glance not only that the text has been written with “AI,” but also, at this point, which of the “big four” LLMs was used to fart it out. Hell, I literally just now got a scam email in Spanish, and I could tell what it was going to say even before I pressed the “translate” button.

This is how predictable “AI” writing is, and how frequently it is used for fraudulent purposes. At this point, my brain immediately and directly associates “AI” text in email with “scam.” That is its only purpose.

The thing is: I’m not special. Every writer and creative person, from the most successful down to the very newest, is inundated with these scam spam emails. Lots of them, every single day. Pretty much every one of us, I assure you, now associates “AI”-generated text with attempted fraud.

When you, a legitimate business, use “AI” to communicate with me, I do not think “wow, that was a really well-composed email that makes me want to engage with the sender in a mutually co-operative way.” I makes me think “This is a fucking scam,” or, in the most charitable scenario, “This company has been hacked and a scammer is using their domain to fleece people.” Maybe you don’t know this, because you’re not the recipient of endless attempts at scammage via “AI.” But I know this, and it’s why I am telling you now: When you use “AI” in your professional communications, you do not look like a professional. You look like a fucking scammer.

There is a solution! Just don’t use “AI” to write your professional correspondence! Remember the day, like, just four years ago, when you pretty much wrote all your emails by hand? Do that again! It’s not difficult, you won’t look like a scammer, and your email has a better chance of being read and treated as if it came from an actual human, because it doesn’t look like every other awful scam email out there. It just makes good business sense.

Also, aside from the “you look like a scammer” angle: Why would I want to do business with someone who can’t even write a single fucking email on their own? This is a “basic competence” issue, folks. If you can’t get it together to write a simple business communication by yourself, what confidence should I have about any other aspect of your business? What value do you have for me? I mean, I also have access to “AI,” so if that’s what you’re bringing to the table, what do I need you for? As the saying goes, you have only one chance to make a first impression. If my first impression of you is that you’re letting “AI” do the talking for you, then my impression is that you’re not offering me anything at all.

So, yeah. “AI”? Don’t use it in your business emails. It does nothing positive for you, and does a lot that is negative. Just write the email yourself, or, if you’re a boss, pay someone to do it for you. It’s going to make a difference, and at the very least, your chances of being immediately and forever sorted into the spam folder will be a lot lower.

By the way, from the time I started writing this to right now, which is roughly a half of an hour later, I have received eight “AI”-written scam emails, including the one in Spanish mentioned above. This is what you’re up against when you send something to my email. If you’re using “AI” to write your business email, this is also what you’re sorting yourself into. Think about it, maybe.

— JS

16:07

Homebrew 6.0.0 released [LWN.net]

Version 6.0.0 of the Homebrew package-management system has been released. Notable changes in this release include the introduction of tap trust to improve supply-chain security, improvements in sandboxing on Linux, a number of performance tweaks, and many other changes.

See the changelog for a full list. LWN covered Homebrew in November 2025.

[$] Automatic mTHP creation in 7.2 [LWN.net]

The Linux kernel has long tried to use huge pages as a way to improve performance, sometimes with more success than others. The size of huge pages has traditionally been imposed by the hardware, which typically only offers a couple of relatively large options. In more recent times, though, the use of multi-size transparent huge pages (mTHPs), with more flexible sizing implemented in software, has been growing. If all goes well, the 7.2 development cycle will include the addition of a new feature, contributed by Nico Pache, to make the use of mTHPs even more transparent.

15:56

Pluralistic: The world has moved on (11 Jun 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



A blasted wasteland with a mushroom cloud rising over it. In the foreground are swarms of drowning people climbing over each other to escape into the limbs of a dead tree, and a crowd of agonized skeletons. All sourced from Dore engravings illustrating the Old Testament.

The world has moved on (permalink)

Douglas Adams wrote, "Anything that is in the world when you're born is normal and ordinary and is just a natural part of the way the world works. Anything that's invented between when you’re 15 and 35 is new and exciting and revolutionary and you can probably get a career in it. Anything invented after you're 35 is against the natural order of things."

I think about this quote whenever I get angry at the technology around me. When I rail against the Great Enshittening, am I simply committing the sin of nostalgia ("Nostalgia is a toxic impulse" -J. Hodgman)? I am, after all, old.

I've written before how conservatives' yearning for "simpler times" is really just a wish to be a child again. The reason times seemed simpler during your childhood is that you were a child, and if your parents did their job, they shielded you from a lot of the complexity of their adulthood so you could enjoy your childhood:

https://pluralistic.net/2025/04/24/hermit-kingdom/#simpler-times

That's where the "National Customer Rage Survey" comes in. It's been surveying a panel of 1,000 representative consumers every three years for a decade, continuing a research project that started in 1976. The survey measures respondents' attitudes towards the businesses they deal with, and as of 2025, it's fair to say, customers are pissed:

https://customercaremc.com/2025-national-customer-rage-study/

We're experiencing more problems with the products and services we use. Those problems are more severe, they make us angrier, and they produce lingering stress. More and more, we are seeking revenge on the businesses that piss us off.

So it's not just me, an old man yelling at the cloud. The world is getting shittier.

The latest Customer Rage Survey inspired The Guardian's Heather Timmons to launch a new investigative series looking at how fucked up everything is. Her inaugural installment is very good, and it's drawn a massive reader response:

https://www.theguardian.com/us-news/ng-interactive/2026/jun/04/us-consumer-rage-prices-economy

I spoke with Timmons this week about the series. She told me she's been deluged with emails from readers who feel that the world is different now – and many of them cite my work on enshittification. Timmons wanted to know what advice I had for her readers. I told her that I don't think you can solve this as a consumer, because this isn't a market problem, it's a political problem, and shopping isn't politics:

https://pluralistic.net/2026/05/21/purity-culture/#stop-fucking-that-chicken

Later, Timmons forwarded one of those emails to me. It gave an eloquent and evocative account of just how rancid the vibe is these days. The writer said that when they and their spouse encounter this rot, they cite Stephen King's Dark Tower novels, quoting the oft-repeated phrase from that series: "The world has moved on."

At this point, I should warn you that the following contains some Dark Tower spoilers, so if you're planning to read a decades-old (but very good) dystopian western/science fiction crossover series, and if spoilers bug you, this might not be the essay for you.

Spoiler alert!

Still with me? OK, then.

In the Dark Tower novels, we crisscross a fallen world in which decay is all around us. The buildings are rotten, the machines have stopped working and no one knows how to fix them, babies and livestock alike are frequently born with deadly congenital defects. Much of the world has fallen into wasteland, cracked and barren. An army of wreckers, led by the demagogue John Farson (who styles himself "The Good Man") are slowly but surely conquering the land, laying waste to those few remaining outposts of civilization and conscripting the young men in the conquered lands to march on their neighbors.

It wasn't always this way. There was a time when the world was defined by hope and virtue and light, when the machines were fixed and the crops were harvested. Life wasn't golden – there were still squabbles and sorrows and even wars – but life was good.

And then the world moved on.

For reasons that no one truly understands, the normal push/pull of decay and renewal turned into a one-way, irreversible process in which everything that crumbled or snapped or burned up couldn't be repaired or replaced or recovered. Our mysterious ability to beat back the Second Law of Thermodynamics – an absurdity we probably should have always treated as an aberration – has collapsed. The world has moved on.

The Dark Tower series is a long, long, long Bildungsroman, with many detours through the life-stories of the characters in the ensemble cast, as well as the biographies of many of the figures they meet along the road. It's mostly an adventure novel, as road-trip tales tend to be, but those character studies and the lore that they surface – from our world and theirs – creates an overwhelming, many-layered, richly textured sense of loss and worse, of despair. For the world has moved on, and despite the love and care and bravery of many of the people in that world, the world cannot be redeemed. Each terrible day of those people's lives is the best day of the rest of their lives. From here on in, it only gets worse.

When Timmons' reader and their spouse greet every fresh depredation in modern life – hours on the phone with customer service to resolve a billing error that the company repeats every month, say – with "the world has moved on," they are invoking something heavy. This isn't just a rancid vibe, it's the fucking end-times.

For all that the Dark Tower novels are a series of cracking adventures and thoughtful character studies, they are also a mystery. Over and over again, we are made to ask ourselves, why has the world moved on? Was it John Farson and his army? Was it the Man in Black, the evil wizard whom the book's protagonist has pursued across time and space? Was it the Crimson King, the evil force whom the Man in Black serves?

Well, yes – and no.

Midway through the novels, we learn that the Crimson King and his evil minions have laid siege to "the beams," vast ley-lines that span the universe and provide the force that pushes away entropy, creating breathing room where repair and care can live. "All things serve the beams," we're told. The beams are the organizing force of the universe, the answer to the riddle of how such pitiful things as we could have fought back remorseless entropy for so long. By attacking the beams, the villains of the series have all but snuffed out that force, and so the world has moved on.

When I read that email and the invocation of the Dark Tower, I was immediately struck by how apt this comparison is. Because, as I've written many times, there were always enshittifiers who would have plundered your data and money and treated you with naked contempt:

https://pluralistic.net/2025/03/04/object-permanence/#picks-and-shovels

There were always enshittifiers, but those enshittifiers faced external forces that checked their wreckers' urge. They were held in check by competition, and regulation, and workers' sense of fairness and duty, and by the threat of new products and services that might pop up to correct the defects they deliberately introduced into their products by enshittifying them.

And the foundation – the Dark Tower upon which all the beams converged- was antitrust enforcement, grounded in the idea that we could not afford to let any company – not a "good" company, nor a "bad" company – get so large that it could no longer be regulated, lest its executives become "autocrats of trade":

https://pluralistic.net/2022/02/20/we-should-not-endure-a-king/

The same people who laid siege to antitrust law would later come after all forms of checks and balances. These are the people who gave us the "unitary executive" and Project 2025, and the collapse of accountability that has allowed the worst people to commit the gravest sins they could imagine and still reap vast fortunes. These beam-breakers wanted kings, and they got them.

I collect definitions of "conservatism," and one of my favorites comes from Corey Robin's book, The Reactionary Mind. Robins asks how it is that we can call so many disparate, irreconcilable ideologies – various ethno-nationalisms, imperialism, financialism, patriarchy, Christian nationalism, libertarianism, white supremacy, etc – "conservative"? What binds all these views together?

https://pluralistic.net/2025/07/22/all-day-suckers/#i-love-the-poorly-educated

Robin's answer: the foundation that all these otherwise disparate views share is that some people are born to rule, while others are born to be ruled over. When these lesser people are elevated to positions of power, their inferiority creates a system of misrule, by which we all suffer. The best outcome for everyone is for us all to know our place and defer to our social betters.

That's why conservatives are obsessed with affirmative action, DEI, and any form of anti-racism. For them, the discriminatory outcomes we see in the wild are natural, reflecting the in-born defects in the people at the bottom of the social order. That's why, after every plane crash, every collision between a cargo ship and a bridge, every spectacular corporate bankruptcy, conservatives race to uncover the race, gender, religion and sexual orientation of the captain, the pilot or the CEO.

If the person who oversaw the catastrophe has anything remotely resembling a marginalized identity, then this is loudly trumpeted as confirmation that "diversity hires," promoted above their station, are ruining our society and wrecking our bridges. Naturally, if the person in charge was a wealthy, well-born, straight white guy, that's just proof that shit happens – it definitely doesn't prove that white straight guys, as a class, should be removed from positions of power.

For conservatives, virtue is "whatever the people who are born to rule desire." Hence Frank Wilhoit's definition of conservativism, "exactly one proposition, to wit: There must be in-groups whom the law protects but does not bind, alongside out-groups whom the law binds but does not protect." It's not a crime if the president does it. It's also not a crime if your boss does it, or if a monopolist does it, or if ICE does it. It's not a crime if the IDF do it, or if the Epstein Class do it. "Taxes are for the little people":

https://pluralistic.net/2021/06/15/guillotines-and-taxes/#carried-interest

The attack on antitrust law was part of the attack on the rule of law, the campaign to put everyone back in the their place. It's a piece of the effort to establish a new hereditary aristocracy, and every hereditary aristocracy requires heredity serfs (that would be us):

https://pluralistic.net/2022/11/06/the-end-of-the-road-to-serfdom/

The ideology of economism – which says that market outcomes are the only way to govern a society – cashes out to "the strong do what they can and the weak suffer what they must." If we interfere with mergers, or labor practices, or commercial conduct, we "distort the market," which is literally going against nature:

https://pluralistic.net/2022/10/27/economism/#what-would-i-do-if-i-were-a-horse

That's why Trump dismantled the consumer protection agencies, the antitrust agencies, the labor protection agencies, and the environmental protection agencies. When someone in power cheats the system, that's not a crime, no matter how many people they rob, maim or kill. As Trump told us on the debate stage in 2016, that kind of cheating "makes me smart":

https://pluralistic.net/2024/12/04/its-not-a-lie/#its-a-premature-truth

That's why Elon Musk (almost) got to force every pension saver in America to bail out his money-incinerating AI business and his failed social media takeover – because the rules that protect everyday investors are "for the little people." Musk's mistake was trying to get a bunch of billionaires to hold the bag, too. The one form of systemic violence our society will not tolerate is trillionaire-on-billionaire violence:

https://www.cnbc.com/2026/06/05/spacex-blocked-from-early-us-benchmark-index-entry-as-sp-reaffirms-existing-rules.html

The world has moved on. 50 years of neoliberal rule has weakened and snapped the beams – the rule of law, consumer and labor rights, civil rights – that radiated from our Dark Tower – antitrust law, which blocked the emergence of the "autocrats of trade." The people who besieged these beams had the same motives as the Crimson King and John Farson and the Man in Black: they were willing to pay any price for a world free from consequences for people like them. They knew they were born to rule, and that the rules were "for the little people," that breaking those rules "made them smart."

They wanted "bossism." Or, as rendered in the original Afrikaans, "baasskap," which means, "the social, political and economic domination of South Africa by its minority white population":

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

Not for nothing, baasskap is the foundation of Muskism, the ideology that Elon Musk epitomizes, even if he can't articulate it:

https://pluralistic.net/2026/04/21/torment-nexusism/#marching-to-pretoria

In "The Utopia of Rules," the late David Graeber described how neoliberal deregulation produced exactly the kind of state that we were warned we'd get under communism. Thanks to monopolies, all the stores were the same and they all sold the same goods. Thanks to the dismantling of labor protection and unions, no one had enough money to get by. Thanks to elite impunity, we were ruled by monsters who committed crimes in the open and thrived as a result. Thanks to unchecked greed, we paid everything we had for healthcare, only to be denied treatment when we needed it. Thanks to the dismantling of the welfare state, more and more of us had to wait in long lines to fill out absurdly long forms in triplicate. Thanks to the intrinsic instability of such a terrible system, more and more of us ended up in prison, and protest became more and more illegal:

https://memex.craphound.com/2015/02/02/david-graebers-the-utopia-of-rules-on-technology-stupidity-and-the-secret-joys-of-bureaucracy/

Graeber pointed out that the rise of the web made it seductively easy for people in authority to force us to fill in forms. When analog bureaucracies impose paperwork costs on us, they also impose paperwork costs on themselves, because processing and filing those forms requires substantial effort, even if filling in those forms requires even more effort from us.

When it comes to virtual paperwork, the asymmetry is even more pronounced. Sure, it takes some admin to set up an online form and write the scripts to process its outputs, but that's a one-off. The form-giver can perform a very little admin and still impose a giant, repeated admin burden on the rest of us.

AI has only made this worse. Now, thanks to vibe coding, everyone can produce a form and its associated processing and analytics back-end with prompts, which creates a grave moral hazard. The kinds of activities that I used to fill in a single short form to accomplish now require ten lengthy forms, created by different people in the same organization, all asking for variations on the same information. Through AI, we have democratized bureaucracy. It's Kafka-as-a-service.

What's more, when you're dealing with a monopoly, you have no choice but to complete whatever paperwork they throw at you. And when the vibe-coded back-end scripts shit the bed and lose or misinterpret your data, you have no choice but to endure an infinite telephone hold queue (if you're lucky) or get shunted to a customer service bot (if you're unlucky):

https://pluralistic.net/2025/11/11/sorry-to-bother-you/#we-dont-care-we-dont-have-to

It's entirely possible to build webforms that are thoughtful, fast, respectful of our time, and well-processed. The problem is that fielding these forms requires that the form-giver undertake some intensive, moderately expensive work (once), while skipping this step merely requires that we all perform intensive, time-consuming work (over and over and over again):

https://mohkohn.co.uk/writing/html-first/

This is how we end up with government forms that require you to list every trip you have ever taken to the USA, since your infancy, with every flight number, which you can only get help with by talking to a chatbot that emails you an out-of-date PDF no matter what question you ask of it:

https://pluralistic.net/2026/02/06/doge-ball/#n-600

This is how we end up with massive customer service queues, long lines at tills, and no one at the gate to answer your questions when your flight is canceled. Understaffing is a form of enshittification, one that shifts value from shoppers to owners, and shifts consequences from owners to workers:

https://pluralistic.net/2026/03/22/nobodys-home/#squeeze-that-hog

This is how we end up with broken machines that no one can fix. Firing workers and replacing them with chatbots or contractors means incinerating their process knowledge – the precious, inchoate, unrecorded understanding that keeps everything working:

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

This is how companies that make products we love suddenly decide to wreck those products: when the only consequences for shitty products is angry customers with nowhere to go and no one to vent their rage upon except workers who have no labor rights and can't afford to quit, why not do a mafia bust-out for every business?

https://pluralistic.net/2023/07/28/microincentives-and-enshittification/

The world has moved on. Nothing works. Everything costs too much. No one can help. No one knows how to fix anything. The beams were broken by the Crimson King and his economism-crazed minions. The Dark Tower might fall.

So what consumer advice do I have for people who are angry about this? I don't have any consumer advice, I'm afraid. You can't shop your way out of a monopoly. Once again, shopping is not politics.

What I have for you is political advice. To restore the beams and beat back entropy again, we need a better system, not more virtuous individuals. If you feel – as I do – that "the world has moved on," then to wrench it back, you will have to join a polity. Support activist groups like the Electronic Frontier Foundation, the digital rights group I've been at for the past 25 years:

https://supporters.eff.org/donate/join-eff

Join a union. If there's no union at your jobsite, start a union. If you work in tech, you start this process by talking to techsolidarity.org and the techworkerscoalition.org. In the UK, get in touch with United Tech and Allied Workers:

https://utaw.tech/

Get involved in party politics. Find a political party whose local organization supports your values (even if the national version of that party sucks) and then work with your fellow grassroots activists to drag or replace the party leaders. Get involved in local politics: if there's one thing Moms For Liberty has taught us, it's that unregarded, seemingly unimportant local offices have enormous potential to change facts on the ground for the people where you live. Those changes don't have to be change for the worse.

Doing politics is hard. Hell, after all, is other people. It would be great if we could make change by changing ourselves, but that's not how any of this works. The world has moved on, and you can't save it. But together, we can restore the beams and beat back entropy. Hell is other people, but only because other people are so great but it's so hard to figure out how to work together. We can do it, though. We did it with the post-war settlement, the 30 glorious years when we built the welfare state, regulated polluters and bosses, and kicked off the civil rights movement. We did it then, and we can do it again. We must. All things serve the beams.


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 Coupland’s JPod: the Anti-Microserfs https://memex.craphound.com/2006/06/09/couplands-jpod-the-anti-microserfs/

#20yrsago Anti-iTunes DRM demonstrations across the USA tomorrow https://www.defectivebydesign.org/node/98

#20yrsago EFF co-founder Barlow debates MPAA prez Glickman http://news.bbc.co.uk/2/hi/programmes/newsnight/5064170.stm

#20yrsago Warehouse where old Disney World rides go to die https://limegreen-loris-912771.hostingersite.com/lost-horizons-another-look-back-at-a-future-world-favorite/

#15yrsago IMF considered harmful https://www.independent.co.uk/voices/commentators/johann-hari/johann-hari-it-s-not-just-dominique-strausskahn-the-imf-itself-should-be-on-trial-2292270.html

#15yrsago AT&T lobbies Wisconsin GOP to nuke Wisconsin’s best-of-breed co-op ISP for educational institutions https://communitynetworks.org/content/does-att-really-own-wisconsin-legislature-battle-over-wiscnet-continues

#15yrsago Developmentally disabled man harrassed by TSA at Detroit airport https://web.archive.org/web/20110610141422/http://www.myfoxdetroit.com/dpp/news/taryn_asher/dad-special-needs-son-harassed-by-tsa-at-detroit-metropolitan-airport-20110608-wpms

#15yrsago Miami cops intimidate citizen journalist who recorded shoot-em-up, smash camera https://web.archive.org/web/20110615035017/https://www.miamiherald.com/2011/06/02/v-fullstory/2248396/witnesses-said-they-were-forced.html

#15yrsago NYC cyclist vs. bike lanes – kamikaze law-abiding https://web.archive.org/web/20110612100758/https://consumerist.com/2011/06/test.html

#15yrsago Judge to copyright trolls: you are “inexcusable” https://arstechnica.com/tech-policy/2011/06/judge-furious-at-inexcusable-p2p-lawyering-cancels-subpoenas/

#15yrsago Wah wah crybaby extortionists wah wah https://torrentfreak.com/anti-piracy-lawyers-defame-torrentfreak-in-court-110609/

#15yrsago Lisa Goldstein’s The Uncertain Places: Grimm fairytale in California vibrates with believable unreality https://memex.craphound.com/2011/06/09/lisa-goldsteins-the-uncertain-places-grimm-fairytale-in-california-vibrates-with-believable-unreality/

#15yrsago American right upset at report that Thatcher won’t meet Palin https://www.theguardian.com/world/2011/jun/09/margaret-thatcher-sarah-palin-meeting

#15yrsago Lobbynomics: Canadian Chamber of Commerce manufactures fake $30 billion counterfeiting loss https://web.archive.org/web/20110611045202/https://www.michaelgeist.ca/content/view/5841/125/

#10yrsago USA Swimming bans rapist Brock Turner for life https://www.rollingstone.com/culture/culture-news/usa-swimming-bans-convicted-rapist-brock-turner-for-life-114108/

#10yrsago Human advice for exercising while depressed https://web.archive.org/web/20160505140324/https://theestablishment.co/2016/05/05/depression-busting-exercise-tips-for-people-too-depressed-to-exercise/

#10yrsago Every industry thinks it’s special, but only finance gets treated that way https://www.nakedcapitalism.com/wp-content/uploads/2016/06/John-Kay-BIS-speech.pdf

#10yrsago Spain’s Podemos Party publishes its manifesto in Ikea Catalog form https://estaticos.elperiodico.com/resources/pdf/9/4/1465389843149.pdf

#10yrsago Reminder: Neal Stephenson predicted Donald Trump in 1994 https://memex.craphound.com/2016/06/10/reminder-neal-stephenson-predicted-donald-trump-in-1994/

#10yrsago Donald Trump, deadbeat https://www.usatoday.com/story/news/politics/elections/2016/06/09/donald-trump-unpaid-bills-republican-president-laswuits/85297274/

#10yrsago UK startup offers landlords continuous, deep surveillance of tenants’ social media https://web.archive.org/web/20160610150904/https://gawker.com/new-startup-that-sends-dossiers-on-your-private-social-1781576586

#10yrsago UK Parliament votes in Snoopers Charter, now it goes to the House of Lords https://www.techdirt.com/2016/06/08/uk-parliament-ignores-concerns-moves-snoopers-charter-forward/

#10yrsago Hard times for judge who sued dry-cleaner for $65M over missing pants https://www.loweringthebar.net/2016/06/pants-chapter-28.html

#10yrsago New York Attorney General to Time Warner: your Internet is “abysmal” and “troubling” https://arstechnica.com/information-technology/2016/06/time-warner-cable-internet-speeds-are-abysmal-ny-ag-claims/

#10yrsago Banks confront negative interest rates with plans to store titanic bundles of money on-site https://www.nakedcapitalism.com/2016/06/banks-rebel-against-negative-interest-rates.html

#10yrsago Watchdogs 2: hacker kids led by a guy named Marcus fight the DHS in San Francisco https://www.youtube.com/watch?v=5ipUwUcHASI

#10yrsago Internet greybeards and upstarts gather to redecentralize the Internet https://www.nytimes.com/2016/06/08/technology/the-webs-creator-looks-to-reinvent-it.html

#10yrsago How we will keep the Decentralized Web decentralized: my talk from the Decentralized Web Summit https://www.youtube.com/watch?v=Yth7O6yeZRE

#5yrsago Prisoners' Inventions https://pluralistic.net/2021/06/09/king-rat/#mother-of-invention

#5yrsago Urban broadband deserts https://pluralistic.net/2021/06/10/flicc/#digital-divide

#5yrsago A denialism taxonomy https://pluralistic.net/2021/06/10/flicc/#denialism


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 Reverse-Centaur's Guide to AI," a short book about being a better AI critic, Farrar, Straus and Giroux, June 2026 (https://us.macmillan.com/books/9780374621568/thereversecentaursguidetolifeafterai/)
  • "Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2026

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

  • "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. Third draft completed. Submitted to editor.

  • "The Reverse Centaur's Guide to AI," a short book for Farrar, Straus and Giroux about being an effective AI critic. LEGAL REVIEW AND COPYEDIT COMPLETE.
  • "The Post-American Internet," a short book about internet policy in the age of Trumpism. PLANNING.

  • 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

15:42

Link [Scripting News]

As thrilling as the end was for this Knicks fan, as a friend (of a Spurs fan) I empathize -- because I had the feeling you have now for most of last night's game, only to erupt in one of the greatest group sports orgasms ever.

Link [Scripting News]

I have been praised for continuing to develop software long after most of my peers have retired. Why do I do it? I want to restore the power and glory of the web for writers. That's part of it. Another part is that software development is undergoing a huge revolution, bigger than the move to high-level languages that came about before I started writing software. AI tools are that big. Why would I leave now? It's like leaving the Garden last night because it looked hopeless for the Knicks. It ain't over till it's over.

15:28

1345: Aim High [Order of the Stick]

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

MacOS 27 drops Intel support, will be last release with Rosetta 2 [OSnews]

With the announcement of an upcoming new macOS release also come the usual changes in which Macs will still be supported. MacOS 27 Golden Gate is an important release in this regard, as it will be the first release of Apple’s desktop operating system that will be entirely ARM-only, dropping support for all Intel Macs. It’s important to note that Apple will provide three more years of security updates for the final Intel release of macOS, so Intel users won’t be dropped like a brick immediately.

Still, the Intel Mac Pro was still being sold all the way up until mid-2023, and I’d be royally pissed off if my expensive 2023 Intel Mac went out of support a mere six years after purchase. They weren’t cheap machines, and while you can argue everybody knew the writing was on the wall for the Intel Mac Pro in 2023, it still feels way too short of a supported lifespan for such an expensive, high-end piece of equipment. It didn’t sell many units, I’m sure, but still.

In addition, MacOS 27 will be the last release to include the Rosetta 2 translation layer that allows Intel binaries to run on ARM macOS. I have no idea how many important applications are still Intel-only, but I have a feeling that number is going to be relatively small, and will become even smaller as the first macOS release without Rosetta 2 support nears release. On top op of that, I’m sure enterprising users will find a way to transplant Rosetta 2 onto unsupported macOS releases, and if all else fails, there’s always virtual machines.

14:35

Security updates for Thursday [LWN.net]

Security updates have been issued by AlmaLinux (.NET 10.0, .NET 8.0, .NET 9.0, podman, poppler, and postgresql-jdbc), Debian (chromium, jackson-core, libdbi-perl, and libinput), Fedora (httpd, rust, and xmlstarlet), Mageia (openssh, postfix, and roundcubemail), Oracle (frr, kernel, libyang, n, postgresql-jdbc, and unbound), Red Hat (.NET 10.0, .NET 8.0, .NET 9.0, redis, and redis:7), SUSE (agama-web-ui, cockpit, cosign, glibc, google-cloud-sap-agent, google-osconfig-agent, kanidm, kernel, kubernetes, kubernetes1.23, kubernetes1.24, kubernetes1.25, kubernetes1.27, kubernetes1.28, libpodofo-devel, libyang, NetworkManager-libreswan, openCryptoki, python311-pypdf, rclone, steampipe, wicked, and xen), and Ubuntu (exim4, libcrypt-saltedhash-perl, libhttp-daemon-perl, samba, and uriparser).

13:56

Michael Ablassmeier: vmsync [Planet Debian]

I’ve been asked a few times if it would be possible to use virtnbdbackup as some kind of “replication” utility, to keep cold standby virtual machines on other libvirt hosts.

Usually i would tell to use underlying filesystem features (such as zfs send/recv, with incremental snapshots) to keep cold, standby copies on other hosts.

As for qcow based virtual machines, using the dirty bitmaps is not only a valid feature to create backups, but to (incrementally) replicate virtual machines, too.

I’ve released vmsync. A small golang utility that implements a simple replication tool using the NBD protocol to sync virtual machines to other hosts.

13:42

CodeSOD: Dating in Hungarian [The Daily WTF]

A horse can only be so tenderized, but as well established at this point: I don't like Hungarian Notation. Richard G sends us an example of yet more of it, being misused, as well as some bad date handling. That's basically two of the easiest things to complain about, so let's take a look!

DateTime sCDate2 = Convert.ToDateTime(Hdn_SelectedDate.Value);
Double dStart2 = double.Parse(Hdn_SelectedShifts.Value.Split('@')[0]); // Gets something like "10.5" for 10:30

// More code ...

DateTime lSelectedStartAdd = DateTime.Parse(sCDate2.ToShortDateString() + " " + DateTime.FromOADate((dStart2) / 24).ToShortTimeString());

We take the value of Hdn_SelectedDate, which is one case where I'm actually willing to be a bit flexible on my hate of Hungarian Notation. In this case, it tells us that this is a "hidden" field on an ASP .Net form. Of course, storing a bunch of data in hidden fields on your form is a dangerous pattern, and in this case, they're carrying between 30 and 50 different pieces of data from one page to the next as hidden fields.

In any case, we take the value of that field and convert it to a datetime, storing the result in sCDate2. Here, the questions start. s, conventionally, tells us that this is a string. But it is not a string, it is a date. Why is it CDate? Actually, why is it CDate2? What's so 2 about this? There is no sCDate, sCDate1, or any other variation thereof- why 2?

Then, we look the contents of Hdn_SelectedShifts. This is another hidden field, and this one stores a string that is delimited by @s. We take the first element, which represents a time of day- as a double. 10.5 means 10:30. That's certainly a way to represent a time of day.

With this data in hand, we then use this to populate the lSelectedStartAdd variable. Once again, the l exists to mystify us. In some Hungarian flavors, it could mean "local variable", but if that's the case, why aren't we using that for any of the other local variables? More commonly, it might mean "long integer", but once again: it's a date.

This all brings us to DateTime.FromOADate. No, this is not when you Netflix and chill while watching cheap streaming sci-fi, OA in this case stands for OLE Automation, and now we have to go down a rabbit hole which has nothing to do with any of this code.

One of the things which made Windows what it was was the use of COM; the Component Object Model was an object oriented approach for letting applications talk to each other. It's what gave us DLL Hell, but it was also a really powerful system for automating software. You could use Visual Basic to leverage COM libraries provided by other software; even if the software you were targeting didn't have a scripting system, you could write your own scripts to control it anyway. OLE, Object Linking and Embedding, was a subset of all the COM functionality. It replaced Dynamic Data Exchange, which was the previous way of automating applications. With COM, COM+, DCOM, DDE, OLE, Microsoft created a whole soup of ways to link to functionality exposed by other applications. It was a giant mess, and I just put this paragraph here to flashback on the horrors of that era.

In any case, because OLE was mostly about automating Office applications, and because of Remy's Law of Requirements (no matter what the users said they want, what they really want is Excel), OLE Automation has its own date data type, which is a floating point number measuring the offset from December 30th, 1899. Which, of course, is not Excel's date epoch: Excel starts at 31-DEC-1899. Except Excel inherited its epoch from an older spreadsheet tool, Lotus 1-2-3. And Lotus had a bug: it thought 1900 was a leap year. Which means in practice, for any date past 28-FEB-1900, the effective epoch is 30-DEC-1899. Excel intentionally recreated the bug, because it needed to be compatible with Lotus 1-2-3 if it had any hope of competing in the market. One pesky little detail and now 1900 is a de facto leap year.

I'm sorry, we've got afield. We have dStart2, which is a floating point number representing hours in the day, with minutes as the fraction. We divide that by 24, then pass it to FromOADate, which will now treat that as an offset from 30-DEC-1899 00:00:00, giving us a date like 30-DEC-1899 10:30:00. We grab the time string off that, the date string of four date, munge them together and parse it back to a date.

Of course, the C# DateTime type has an AddHours, so they could have just done scDate2.AddHours(dStart2) and skipped all the parsing.

You want to know something more fun about this? That floating point representing time? It's initially populated by having users select off a drop down, and the drop down uses as its labels the more conventional HH:mm format. The value stored by the drop down is the floating point value. And yes, someone did manually write all that out in the code, they didn't use a loop or anything.

In any case, this is a long winded reminder: I hate Hungarian Notation.

[Advertisement] Keep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.Learn more.

13:21

When Context Collapses: Teaching Agents to Detect and Recover from Lost Memory [Radar]

This is the eighth article in a series on agentic engineering and AI-driven development. Read part one here, part two here, part three here, part four here, part five here, part six here, and part seven here.

“640K ought to be enough for anybody.”—Bill Gates (allegedly)

If you’re building AI agents that do complex, multistep work, you’re going to run into context loss. The agent’s working memory fills up, older information gets silently dropped or compressed, and the agent keeps going without realizing it’s forgotten something. This article, the third in my Radar article trilogy about context management, walks through a pattern I’ve been refining for detecting and recovering from that problem, which I call the externalize-recognize-rehydrate pattern (or ERR, which I think is actually a pretty good acronym for an error recovery pattern): save your agent’s state to files on disk, detect when context has degraded, and reload from those files to recover. The individual techniques are standard practice in agent and skill engineering—checkpointing, progress files, state verification—but the real power comes from combining them into a coherent workflow that you can use live or build into your agents. I’ll walk through each step with specific prompts you can adapt for your own agents and coding sessions.

Which brings me to memory. Gates has said on multiple occasions that he never actually said that quote at the top of this article, but it endures because it captures one of the core limitations of that era, one that people struggled with constantly, in a way that we can laugh about now. Around that time I was using a 286 with 1 MB of RAM. That’s megabytes, not gigabytes. MS-DOS 3.3 gave me 640K of conventional memory plus 384K of upper memory, and I spent a lot of time figuring out how to use every bit of it. I configured memory managers, loaded device drivers high, used (and wrote!) terminate-and-stay-resident programs that moved themselves out of conventional memory to free up space, and generally treated memory as a resource that required active, deliberate engineering. There was a lot I wanted to do that didn’t fit into 640K, and like most people at the time, I went to some lengths to compensate for the memory limitations.

We’re at the 640K stage of AI development. The context window is the new RAM ceiling. Most of today’s models give you somewhere between 200K and 2M tokens of working memory (and, like memory in the late 1980s and early 1990s, those numbers are growing all the time), and if you’re building agents that do complex multistep work, you will hit that ceiling. When you do, the AI starts compacting: compressing or dropping older parts of the conversation to make room. And just like running out of conventional memory on a 286, things stop working right and you’re not sure why.

In 20 years we’ll be looking back at today’s puny context windows and wondering how developers in the 2020s managed to get anything done with just a few million tokens. Because none of this is new. In case you don’t believe me, here’s a photo of my dad at Princeton in the early 1970s working on an Evans and Sutherland LDS-1 graphics computer, the first commercial vector graphics machine, connected to a PDP-10 mainframe:

Keep on truckin

The actual LDS-1 is in the large cabinet in the background, directly behind the monitor. Sitting next to it, just out of the picture, is an even larger cabinet that holds a memory unit with 16K of magnetic core memory (technically 8K words).

So you can imagine that just a decade later, 640K in a tiny PC that fit on your desktop seemed extravagant.

In the last two articles in this series (“Why Doesn’t Anyone Teach Developers About Context Management?” and “Your AI Agent Already Forgot Half of What You Told It”), I talked about what context is and why context management matters, and I shared practical techniques and prompts for keeping important information in files instead of leaving it in the AI’s context window. This article gets more technical. I want to build on those strategies and talk about how to build agents that can detect when they’ve lost context and recover from it on their own.

Brute-forcing my way through context loss

I’ve been doing this kind of context management for a while now, long before the specific tools I’m about to describe existed. But a recent crash gave me a clean example of what the process looks like in its most brute-force form.

I was working in Copilot with a seven-step plan, going through it one step at a time, having another AI review each step before moving on. Steps one and two went fine. When it came time to do step three and I gave it the prompt, it jumped straight to step four. This kind of thing can be really frustrating, because it seems like an AI smart enough to implement a complex feature in code should be able to (ahem) count to four.

The key to not getting frustrated when the AI loses track of steps or can’t seem to count from prompt to prompt is to remember what it’s good at and how it remembers things. If the AI you’re using does that, check the conversation history. You’ll probably see something like “summarizing conversation history” or “compacting conversation” somewhere above your last message. That’s telling you that the AI lost track of where it was because that count was literally purged from its memory.

AIs are good at carrying out an instruction. They’re bad at keeping track of their own state over a long conversation, and the way they manage their memory is a big part of that. This article is about finding ways to build your AI tools so you’re not relying on them to do the thing they’re worst at.

But compaction isn’t the only way your AI loses context. A few weeks ago I was deep into a long session with Copilot, working through a multiphase code review. I’d spent a while building up context with the AI about my codebase and the decisions we’d made together. I was about to move on to the next phase, and then I got this:

Phase B

The entire context was wiped, which could have been a really frustrating problem, since I had a long history with the session, and it had built up a lot of knowledge about what we were doing. This turned out to be a bug in Opus 4.6’s interaction with Copilot’s conversation history, and I’ve seen other people hit the same thing. I was staring at a fresh prompt with nothing in it.

So I did something that, in retrospect, is a pretty good brute-force version of what this whole article is about. I recognized the context was gone (hard to miss when the whole conversation disappears). I copied the entire conversation out of Copilot and pasted it into a text file. Then I gave the new session a prompt:

We were in the middle of a long conversation, then I got an error and the entire context was wiped. I saved a copy of the conversation in #file:chat_history.txt, read it and bring yourself back up to speed.

And it worked! This brought the new session back to where I needed it to be.

That simple error and recovery actually outlines a pretty good pattern for dealing with context loss:

  1. Externalize the state. Get the important information out of the conversation and into a file on disk, where it won’t disappear when the context window reshuffles.
  2. Recognize the loss. Notice that the agent’s working context has been wiped or degraded, whether that’s obvious (like a crash) or subtle (like output that quietly stops making sense).
  3. Rehydrate from the file. Point a new session at that file and let it rebuild its understanding from what’s written down.

The individual mechanics are well-documented across cognitive science (cognitive offloading, task resumption), software engineering (the Memento pattern, React hydration), and knowledge management (the SECI model). I’m not claiming to have invented any of them. But the specific abstraction of these three phases into a unified, named pattern applied to AI context management is, as far as I can tell, new. It’s synthesis and codification, not invention.

In this case I did it with copy and paste, which isn’t particularly elegant, but it worked for me. But this is a blunt instrument, because a raw conversation dump is both too much and too little: it’s too much because it’s full of noise, like tool calls, dead ends, back-and-forth that doesn’t matter anymore; and it’s too little because the context that got silently compressed away during the session is already gone. When you build these mechanisms into agents and skills, you can do it in a much more subtle and automated way.

Externalize: Add two layers of state to your agent

The idea behind externalization, or periodically saving your agent’s state, came out of a conversation I was having with an AI assistant while building the Quality Playbook, an open source AI coding skill that runs structured code reviews. The playbook runs a structured code review as a single process, but that process could easily turn into a 15-million-token request if you tried to do it all in one shot. I described in the previous article in this series how I broke it into six phases, and that was only possible because the context for each phase had already been externalized. Each phase reads its inputs from files, does its work, writes its outputs to files, and stops. The next phase picks up from the files, not from whatever the agent remembers. If this sounds like the familiar advice to ask the AI to plan before you ask it to implement, it’s the same principle applied to context management. Separating each step and persisting the output means you can inspect it, and the next step doesn’t depend on the agent’s memory.

But what should those files contain? I found that the AI is actually good at figuring that out. At some point I asked the assistant:

Would it make sense for the agent to record more context in files as it progresses, to make sure nothing is dropped along the way? It should work even if you break it into separate prompts, because the result from each step is persisted. Plus, we can audit its reasoning for debugging and improvement.

That prompt was all it took. The assistant designed the file structure itself: a progress tracker that records which phase is active and what’s been completed, a JSONL artifact file (JSONL is just a file with a bundle of JSON objects, with one record per line) where each pass appends its output, and a set of brief documents describing the purpose of each phase. You don’t need to overengineer this. Tell the agent what you’re trying to preserve and let it figure out the file layout.

What emerged falls into two categories that I think of as execution continuity and task continuity:

  • Execution continuity is the state the agent needs to resume work in the middle of a task: what step it’s on, what it’s completed, what decisions it’s made so far. These files change constantly as the agent works.
  • Task continuity is the broader context that doesn’t change during execution: what the whole task is about, what success looks like, what the structural constraints are. These files are written once and read at every resumption.

When an agent needs to resume after suspected compaction, it reads back both layers. The task continuity files anchor it back to what the whole endeavor is about. The execution continuity files put it back in the middle of the work. Together, they give the agent enough information to continue without relying on anything that might have been compacted.

The key is that externalization isn’t something you do once at the beginning of a task. You want the agent saving its state at frequent checkpoints so that if compaction happens mid-run, the most recent checkpoint is close to where the agent was working. Here’s the kind of instruction I gave the agent for tasks that processed records one at a time:

Update the progress file after every single record, not in batches. Write the output line first, then update the progress file with the new cursor and a fresh timestamp. If the progress file’s timestamp falls behind the output file’s, you’re batching and that’s wrong.

The frequency matters because context can compact at any point. If the agent only saves state at the end of a long run, compaction in the middle means losing everything since the start. If it checkpoints after every unit of work, the worst case is losing one unit.

Two-layer externalization survives context reshaping, not only outright context loss. Even if the agent’s context window isn’t full, if the context has been reorganized or reprioritized (a compression that reshapes without truncating), the agent can reload the external files and know for certain what the ground truth is.

Recognize: Detecting loss from inside the agent

The second step in the pattern is to recognize that your agent has lost context, and it turns out to be the hardest part (at least with today’s AI technology). When the context window fills up, the AI compacts silently, and the agent keeps working without realizing it’s lost information. The agent can’t tell you it’s forgotten something, because it doesn’t know it forgot. Detecting that change turns out to be a nontrivial problem; I’ll walk you through an approach that helped me, and keep it general enough so you can do the same thing. The copy-and-paste approach works when the context loss is obvious, like a crash that wipes your whole conversation. But most context loss isn’t that visible.

I described context compaction in the previous article, but it’s worth restating the core problem from the agent’s perspective. Different tools handle context overflow differently: Some truncate older messages; some compress conversations into summaries; some use a sliding window. But they all have the same effect. Information disappears from the agent’s working context, and the agent doesn’t get notified.

This was a challenge when I built the Quality Playbook, because it runs multiple passes over a codebase, each one reading source files, extracting requirements, and checking coverage. Each pass can involve enough work that it fills the context window multiple times over. And when context compacts mid-pass, the agent doesn’t know it happened. It keeps working, but the output starts silently degrading. So I started building mechanisms for the agent to detect compaction and recover by reading back the files it had written earlier. The patterns that came out of that work are general enough to apply to anyone building agents that need to survive context pressure.

From the agent’s perspective, compaction is seamless. It’s tracking state, referencing decisions made earlier in the conversation, and then at some point the earlier context is gone. But the agent can’t tell the difference between “I never knew that” and “I knew it but lost it.” It tries to reference something and finds nothing, or finds a compressed version that lost the nuance. And because the agent doesn’t know it lost anything, it doesn’t know it needs to recover.

This invisibility is the core problem. But it turns out you can work around it, and the next two sections walk through how.

Building a detection mechanism

Once you have files on disk, the question is what specifically to check and how to know when something has gone wrong. I landed on a mechanism while building the Quality Playbook’s requirement extraction pipeline. The playbook processes source documents in multiple passes, and each pass appends its output to a JSONL artifact file. After each unit of work, the agent also writes a progress record to a separate file: what it just finished, what it found, and where it should pick up next.

The detection mechanism comes from two rules I gave the agent. The idea is that the progress file tracks a cursor, which is just a position marker that tells the agent which record to process next. If the agent writes a record to the output file but then loses context before updating the progress file, those two files will be out of sync.

The agent didn’t need to understand any of that upfront; I just described the rules in plain language and let it figure out the implementation. The first rule establishes an invariant between the output file and the progress file:

Cursor advances only after the line is on disk. Write the summary line to the output file first, then update the progress file. The cursor must always equal the index of the next record that still needs to be processed.

The second rule told the agent how to check that invariant on startup:

On startup, read the progress file. Resume from its cursor value. Verify continuity: the last line in the output file should equal cursor minus one. If not, roll the cursor back to match disk state and report the discrepancy.

If the progress file says the cursor is at record 381, but the last line in the output file is record 379, something happened. The context compacted and the agent lost track of where it was. The divergence between the two files is the signal.

This worked because files on disk don’t change when context compacts. They’re written once and then read repeatedly. If what the agent thinks it knows doesn’t match what’s actually in the files, something shifted in the agent’s memory, not on disk. I ended up folding this check into a preamble that every session started with:

If this session has experienced auto-compaction, re-read the pass specification from disk. Do not try to reconstruct it from the compacted summary. Read the progress file. Read the last record of the JSONL artifact and confirm its index equals the cursor minus one. If not, roll the cursor back to match disk state. Disk is the source of truth. The conversation is not.

That preamble ran at the top of every session. During one particularly intensive day of pipeline development, I ran over a hundred Claude Code sessions with that exact instruction. Most of them completed without hitting compaction. But the ones that did hit it recovered cleanly, because the preamble told the agent exactly what to check and exactly what to do when the check failed.

The specific prompts I used are tied to the Quality Playbook’s file structure, but the technique generalizes. If you’re building any agent that does multistep work, you can adapt the same approach. Here’s a version you could drop into a session preamble or an agent’s system prompt:

Before continuing any task, read your progress file and your most recent output file. Compare them: does the progress file say you’ve completed work that isn’t reflected in the output? If so, trust the output file, roll back your progress to match, and note the discrepancy. Do not rely on what you remember from the conversation. The files on disk are the source of truth.

The wording doesn’t have to be precise. What matters is the structure: tell the agent where to look, what to compare, and which source to trust when they disagree.

But didn’t you just say the AI can’t detect its own compaction?

Right, and it can’t. What I described above isn’t the agent detecting compaction. It’s the agent running a deterministic check against files on disk and finding a discrepancy. The agent doesn’t need to know that compaction happened. It just needs to notice that two files disagree. Think of the agent as an amnesiac clerk. You don’t ask the clerk to remember what they did yesterday. You make the clerk check the physical ledger every time they sit down at the desk. If their notes disagree with the ledger, they’re trained to trust the ledger.

If you saw Christopher Nolan’s breakout movie Memento, you can think of your agent as Leonard Shelby, the character played by Guy Pearce with anterograde amnesia. You couldn’t ask Leonard to remember what he did yesterday. He had to check his tattoos every time he woke up. If his tattoos disagreed with what he’s seeing, he trusts the tattoo (which leads to a major plot point, which I won’t spoil). Again, this isn’t a new idea either. I mentioned the Memento pattern earlier, which is literally named after this movie.

This is a classic distributed systems technique. In double-entry bookkeeping, you maintain two independent records of the same transaction and reconcile them regularly. If they disagree, you investigate. You don’t need to know why they diverged; the divergence itself is the signal. A two-phase commit works the same way: write the data first, then update the record that says the data was written. If you find data without a matching record, or a record without matching data, something went wrong between the two phases.

That’s exactly what the cursor invariant does. The agent writes the output line first, then updates the progress file. If those two files are out of sync, something happened between the two writes. The agent doesn’t detect compaction. It detects a broken invariant, and it’s been told that when the invariant breaks, the files on disk win.

Three things make this work. First, the check is purely deterministic: read two files, compare two numbers, act on the result. There’s no reasoning involved, no judgment call about whether the agent “feels” like it lost context. I wrote about this principle in “Keep Deterministic Work Deterministic”; you never want an AI making decisions that a file comparison can make for it. Second, the files on disk don’t change when context compacts. They’re the stable reference point that the agent’s memory gets checked against. Third, the instruction to run the check lives in the system prompt or preamble, which is generally preserved even when conversation context gets compacted. The check survives the thing it’s designed to detect.

Rehydrate: Reading back the state

Rehydration is the process of reading back externalized state and rebuilding the agent’s working context. Once the agent detects compaction (or, more specifically and accurately, has enough evidence from the filesystem that compaction occurred), the recovery step is to read back the externalized files and rebuild. For the Quality Playbook, rehydration meant:

  1. Read the phase brief to re-anchor the purpose of this pass
  2. Read the progress file to know which unit is active and what’s been completed
  3. Read the tail of the JSONL artifact to confirm the last successfully written record
  4. Recompute the next unit of work from those files

This is different from just continuing without detection. Without detection, the agent tries to pick up where it left off and hopes it still has enough context. With detection, the agent knows something happened and deliberately reloads state before continuing.

You can make the rehydration process itself auditable. Instead of silently reading the files and resuming, have the agent write down what it learned:

Read the progress file and the JSONL artifact. Write a summary of what you learned: what pass is running, what unit is active, what the cursor position is, and how many requirements have been extracted so far. Then continue from there.

Writing a rehydration summary serves two purposes. It gives you visibility into what the agent understood and whether it rehydrated correctly. And it forces the agent to process the external files explicitly rather than just loading them into context. Explicit processing is more reliable than silent loading because the agent has to commit to an interpretation, and you can read that interpretation and catch mistakes.

You can adapt this approach to any agent workflow where work happens in steps. The specific files and cursor values are particular to my pipeline, but the underlying technique is general: have the agent write its progress to a file after each step, and check that file against its output at the start of every session. And this advice isn’t just for writing agents or skills. Even in a live session with Claude Code, Cursor, or Copilot, you can tell the agent to periodically write a summary of what it’s done and what it plans to do next to a file on disk. If the session crashes or the context gets long enough to compact, you can point a new session at that file and pick up where you left off. The key is getting the state out of the conversation and onto disk before you need it.

Context management is an architectural concern

Every technique I’ve described in these articles comes down to the same principle: Important information shouldn’t live only in the agent’s context window. The previous articles covered how to put that information on disk. This one covers how to make the agent aware of its own limitations so it can recover when context pressure gets too high.

An agent that can detect its own degradation and correct for it is fundamentally more reliable than one that just keeps going. When the agent knows how to stop, check itself against ground truth, and reload what it lost, context pressure becomes a recoverable event instead of a slow, silent failure.

This concludes my mini-series trilogy of articles about context management. The first article in this series was about understanding what context is and why it disappears. The second was about getting important information out of the conversation and onto disk before you need it. This one is about closing the loop: making the agent aware of its own limitations so it can detect degradation and recover from it. Together, they add up to treating context as an engineering problem rather than something you hope works out.

These are still early days. Context windows will get larger, compaction will get smarter, and some of the workarounds in this article will eventually be unnecessary. But the underlying principle won’t change: If your agent’s ability to do its job depends on information, that information needs to live somewhere more durable than working memory. That was true for my dad’s 32KB core memory at Princeton, it was true for my 640K of conventional RAM, and it’s true for today’s 200K-token context windows.

The Quality Playbook and Octobatch are open source projects where these techniques are used in production. Both are built using AI-driven development and available for exploration if you want to see how this looks in practice.


Disclosure: Aspects of the approach described in this article are the subject of US Provisional Patent Application No. 64/044,178, filed April 20, 2026, by the author. The open source Quality Playbook project (Apache 2.0) includes a patent grant to users of that project under the terms of the Apache 2.0 license.

12:21

12:14

Enhanced License Plate Tracking [Schneier on Security]

The surveillance company Leonardo wants more data:

A surveillance company plans to add sensors to automatic license plate readers (ALPRs) that would mean the devices, as well as capture the license plate of passing vehicles, would also sweep up unique identifiers of mobile phones, wearables, and other Bluetooth-enabled devices in those cars, potentially letting law enforcement identify specific drivers or passengers.

The technology, called SignalTrace, would turn ALPR cameras from devices focused on tracking cars to ones that can more readily track the location of particular people. ALPR cameras have become a commonly deployed technology all across the U.S.; SignalTrace would make some of those cameras capable of collecting much more data.

Yes, it’s bad that more companies are collecting this level of surveillance data. But all of this pales in comparison to the type and quantity of data our smartphones already collect about us.

Alternate link.

11:49

Grrl Power #1468 – Princess Alice of Batenberg’s Gambit [Grrl Power]

Prophylaxis, in case you don’t know (that includes me, I had to google chess terms) just what it’s called when you “play defensively,” or at least try to deny your opponent whatever strategy he seems to be going for. Like in pool, you want to sink your balls but if possible also leave the cue ball in a bad spot for the other guy in case you miss.

Ryzyl didn’t cast Mirror Image, he cast… I don’t know. Army of Me or something. Basically one of those high level spells that creates actual copies of him that have the same equipment and spells and stuff that lasts all of 10 minutes, or something like that. And when it ends, he gets the memories of each one back. Good for quickly exploring a dungeon, overwhelming an opponent, pooling all their coin and cheating a merchant out of his bushel of apples, that sort of thing. Actually, if the spell was really well crafted, there’d be an option to not absorb the memories, because most of what he’s going to get back from this encounter is a lot of crushing, burning and choppy-choppy.

In panel 2, Max is doing an “X” swipe, followed by a heart stab – hopefully that’s more or less what it looks like – but as I’m posting this, I realize that the heart stab is a little superfluous, because she’s stabbing right in the middle of the X, which has already been thoroughly quartered. She should have stabbed him right in the middle of the face, probably. Although, during her 3 months of hyperbolic time cargo deck training, she probably got up to the point where she was fighting fairly advanced magic wielding opponents – advanced like “has spell in place that allows them to shrug off a single fatal blow somehow” or “upon receiving a fatal wound, this spell rewinds time to just before the injury was received (up to three seconds) and teleports you up to 10 feet in a safe direction.” Which is one of those high level spells that does no good if you get chopped in the femoral artery and it takes you a minute to bleed out. But it’s great against decapitations and boulders, whether launched via catapult or giant. So I guess Max is just making sure her kill shots stick. It’s the sword equivalent of the double-tap.


Sexy bodymod news lady Gail has a special one-on-one interview with Tournament Quarter finalist Saraviah Nightwing! And if you subscribe to Gail’s Space Patreon, (which, due to the vagaries of Earth and Gal-Net’s DNS servers, happens to be the same as the Grrl Power Patreon, go figure) you can see that same interview in the nude! Well, eventually. The nude part of the interview, as well as the version that includes shading will be coming soon. Of course, you can view the interview in the nude now if you take your own clothes off. You know. Technically. Just put a towel on your chair first.

 


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

10:28

Values capture [Seth's Blog]

When culture pushes us to measure things that don’t matter to us, our values are captured.

Once the metrics turn a profit for corporations and those in power, they are amplified, and almost overnight, begin to matter to us, even if they run contrary to what we originally set out to do or become.

We’re easily seduced by scoreboards, competition and dark patterns.

Professor C. Thi Nguyen has written a brilliant book on the philosophy of games—big and small. The Score helps us understand that dominant industrial and cultural systems push to deskill us as we become fungible, replaceable parts in an easily measurable enterprise. His book is wide, deep, and unforgettable. (It also includes riffs on yoyos and fly fishing.)

Measurements are sticky, contagious, and relentless. Once a competitor begins to move ahead on a metric, it gives them an advantage, and that pushes us to focus on the same metric or fall behind. The Red Queen races ahead, simply because racing ahead is what they’ve been trained to do.

Perhaps, though, falling behind on a metric we don’t care about might be exactly the right thing to do.

In a game like Scrabble or chess, the values capture is right there in the rules. It’s explicit, agreed upon, and the whole point. You feel good about landing a seven-letter word because that’s what scores, and you don’t mind trading your rook for a better position—that’s the game you signed up for. But when we carry that same instinct into how we spend our working hours (and months, and decades), we might end up sacrificing far more than a rook.

Once we see values capture unfolding, we have a shot at making a choice. Measure what matters.

07:42

What’s the opposite of Clip­Cursor that lets me exclude the cursor from a region? [The Old New Thing]

A customer wanted to prevent the user from dragging an object into a specific region of their window. Their current implementation detects that the mouse is an in illegal location and uses Set­Cursor­Pos to move it to a nearby legal location. However, this creates flicker because the cursor actually does enter the illegal region and then jumps out.

Let’s illustrate this with our scratch program.

POINT g_pt;
const RECT g_rcExclude = { 100, 100, 200, 200 };

RECT ItemRect(POINT pt)
{
    return RECT{ pt.x - 10, pt.y - 10, pt.x + 10, pt.y + 10 };
}

The g_pt variable holds the location of our object, and the g_rcExclude is the rectangle in which the object is forbidden. The ItemRect function produces a bounding rectangle for our object so we can draw something there.

void
PaintContent(HWND hwnd, PAINTSTRUCT* pps)
{
    FillRect(pps->hdc, &g_rcExclude, (HBRUSH)(COLOR_WINDOWTEXT + 1));
    RECT rcItem = ItemRect(g_pt);
    FillRect(pps->hdc, &rcItem, (HBRUSH)(COLOR_APPWORKSPACE + 1));
}

Painting our content is a straightforward matter of drawing the forbidden rectangle in the text color and drawing the object in the app workspace color.

void OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags)
{
    POINT ptNew = { x, y };

    if (PtInRect(&g_rcExclude, ptNew)) {
        // Clamp to nearest legal position
        int leftMargin = ptNew.x - g_rcExclude.left;
        int topMargin = ptNew.y - g_rcExclude.top;
        int rightMargin = g_rcExclude.right - ptNew.x;
        int bottomMargin = g_rcExclude.bottom - ptNew.y;

        int dx, dy;
        int x, y;
        if (leftMargin < rightMargin) {
            x = g_rcExclude.left;
            dx = leftMargin;
        } else {
            x = g_rcExclude.right;
            dx = rightMargin;
        }
        if (topMargin < bottomMargin) {
            y = g_rcExclude.top;
            dy = topMargin;
        } else {
            y = g_rcExclude.bottom;
            dy = bottomMargin;
        }
        if (dx < dy) {
            ptNew.x = x;
        } else {
            ptNew.y = y;
        }
        POINT ptScreen = ptNew;
        ClientToScreen(hwnd, &ptScreen);
        SetCursorPos(ptScreen.x, ptScreen.y);
    }

    if (g_pt.x != ptNew.x || g_pt.y != ptNew.y) {
        RECT rcItem = ItemRect(g_pt);
        InvalidateRect(hwnd, &rcItem, TRUE);
        g_pt = ptNew;
        rcItem = ItemRect(g_pt);
        InvalidateRect(hwnd, &rcItem, TRUE);
    }
}

// Add to WndProc

        HANDLE_MSG(hwnd, WM_MOUSEMOVE, OnMouseMove);

When the mouse moves, we take the mouse position and see if it is in the forbidden rectangle. If so, we update the coordinates to the nearest legal position and move the mouse there with Set­Cursor­Pos.

Whether or not we had to update the coordinates, if the result produces a new location, then invalidate the object’s old location (so it will be erased at the next paint cycle), update the object position, and then invalidate the object’s new position (so it will be drawn at the next paint cycle).

When you run this program, you can try to move the mouse into the forbidden rectangle, but the program will shove the mouse back out. However, it flickers a lot bcause the mouse briefly enters the forbidden rectangle before it is expelled from it.

The customer saw that there is a Clip­Cursor function to constrain the mouse to remain inside a rectangle, but is there an inverse version that forces the mouse to remain outside a rectangle?

There is no such function, but that’s okay.

What you can do when the mouse is in an illegal position is just pretend that it’s in a legal position. Let the user move the mouse into a illegal position, but show the feedback at the nearest legal position, and if they drop the object, let it drop at the nearest legal position.

In the above program, that means we remove the call to Set­Cursor­Pos.

void OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags)
{
    POINT ptNew = { x, y };

    if (PtInRect(&g_rcExclude, ptNew)) {
        // Clamp to nearest legal position
        int leftMargin = ptNew.x - g_rcExclude.left;
        int topMargin = ptNew.y - g_rcExclude.top;
        int rightMargin = g_rcExclude.right - ptNew.x;
        int bottomMargin = g_rcExclude.bottom - ptNew.y;

        int dx, dy;
        int x, y;
        if (leftMargin < rightMargin) {
            x = g_rcExclude.left;
            dx = leftMargin;
        } else {
            x = g_rcExclude.right;
            dx = rightMargin;
        }
        if (topMargin < bottomMargin) {
            y = g_rcExclude.top;
            dy = topMargin;
        } else {
            y = g_rcExclude.bottom;
            dy = bottomMargin;
        }
        if (dx < dy) {
            ptNew.x = x;
        } else {
            ptNew.y = y;
        }
        // POINT ptScreen = ptNew;              
        // ClientToScreen(hwnd, &ptScreen);     
        // SetCursorPos(ptScreen.x, ptScreen.y);
    }

    if (g_pt.x != ptNew.x || g_pt.y != ptNew.y) {
        RECT rcItem = ItemRect(g_pt);
        InvalidateRect(hwnd, &rcItem, TRUE);
        g_pt = ptNew;
        rcItem = ItemRect(g_pt);
        InvalidateRect(hwnd, &rcItem, TRUE);
    }
}

This time, we don’t try to punish you for moving the mouse into the forbidden rectangle. But the object won’t follow the mouse into a forbidden region.

The post What’s the opposite of <CODE>Clip­Cursor</CODE> that lets me <I>exclude</I> the cursor from a region? appeared first on The Old New Thing.

05:35

Link [Scripting News]

The indestructible NY Knicks of 2026. What a game omg. The problem -- the Spurs started celebrating way too early. All of Weby's antics about being in Mitchell Robinson's head. Yeah probably, but somehow the Knicks got over it. When the Knicks were blown out, I just desperately hoped for a real game. But it wasn't until they were down by 2 or 3 that I realized holy shit they could win this. It was like Woodstock, or the 10th inning of the sixth game of the World Series in 1986. And Jalon Brunson right now at this moment is one of the greatest of the NBA for all time. The Knicks could still lose, but if they don't, well we'll wait to see how this turns out. As fans we have to have a similar approach as the players. Every moment begins with 0 to 0, not just game. And if our team should lose, it was still a great story. That's really what I want, and tonight, oh man.

02:14

Page 23 [Flipside]

Page 23 is done.

01:07

[$] LWN.net Weekly Edition for June 11, 2026 [LWN.net]

Inside this week's LWN.net Weekly Edition:

  • Front: Suspicious AI activity in Fedora; fork() + exec(); splice() + vmsplice(); BPF loop verification; fanotify; trusted publishing.
  • Briefs: CA age bill; Bundler cooldowns; insecure code completion; Asahi and macOS 27 beta; Buildroot 2026.05; Ubuntu MATE; rsync 3.4.4; Quotes; ...
  • Announcements: Newsletters, conferences, security updates, patches, and more.

00:42

Once again, Apple blatantly lies about the EU’s DMA [OSnews]

Apple recently announced its next crack at integrating “AI” into its operating systems, this time opting to simply whitelabel Google’s Gemini “AI” tools instead of developing its own LLM technology. Called “Siri AI”, Apple also stated it’s not coming to the EU, and the company stated that’s because the EU’s basic consumer protection legislation would give other “AI” tools “unprecedented access” to user data on users’ devices. The company made a big stink about this in the press.

As anyone with basic pattern recognition skills already knew, this was a blatant, baldfaced lie. What really happened is that Apple asked the EU for an 18-month long exemption from the EU’s consumer protection and privacy legislation during which it would not have to comply with any legal privacy and interoperability requirements – just so it could roll out Siri “AI” before anyone else could offer a competing product for Apple users.

Obviously, the EU wasn’t going to grant such an exemption.

“The decision not to roll out Siri AI in the EU is Apple’s and Apple’s only,” spokesperson Thomas Regnier told reporters in Brussels, saying there was nothing in the Digital Markets Act to stop the company from introducing new products in the EU.

“Apple was simply unable to develop interoperability solutions that meet essential EU ​privacy and security standards,” Regnier said.

“Instead ​of trying to find ⁠a suitable compliance solution, Apple simply made a request to the European Commission to be exempted from their interoperability obligations under the DMA – and this for at least 18 months. ​That’s not an option,” Regnier said.

↫ Inti Landauro and Foo Yun Chee at Reuters

So what’s really going on here is that Apple wants to offer a set of whitelabeled Google Gemini tools on iOS and macOS in the EU, but because Apple is classified as a gatekeeper, it is legally obligated to offer interoperability options for competing “AI” tools. These options in turn need to adhere to the EU’s strict privacy regulations, so that competing “AI” tools can offer the same level of privacy that Apple’s own whitelabeled Google Gemini tools claim to offer.

Apple didn’t want to offer these privacy-respecting interoperability options as required by law, so instead of following the law in the countries it wants to operate in, Apple asked to be placed above the law for at least 18 months, basically giving Siri “AI” a massive head-start over possible competitors so that it could entrench itself in the userbase. The EU saw right through Apple’s nonsense, and now called them out on their bullshit. Perhaps Apple has gotten so used to openly bribing Trump that they forgot other parts of the world don’t work that way.

Whenever Apple and its PR attack dogs say anything about the EU, you can be assured they are lying. They have proven time and time again to basically never speak a single word of truth when it comes to its dealings in the EU. It’s almost pathological at this point, and what makes it doubly interesting is that Apple will not launch Siri “AI” in China either, for the very same regulatory reasons – yet all China got was a single footnote in a press release.

I wonder why.

Wednesday, 10 June

23:56

Trying My Hand At Some Floral Arrangements [Whatever]

This past weekend, my friend hosted a bridal shower for our friend who’s getting married soon, and I offered to make up some decorative bouquets for the party. I think I did an okay job, so I wanted to show y’all what I made up! She was hosting the party at her home, so thankfully I was just able to use some vases she had on hand.

For the flowers, I knew I wanted to do something springy and full of pinks and yellows because the theme was “garden party.” I also wanted to include white flowers because, well, it’s for the bride to be!

I went to my local Kroger for all my flowers, and just ended up buying a ton of discounted grower bunches. If you haven’t heard of grower bunches before, think of bouquets as a cake, and the grower bunches are the ingredients. You can buy the cake itself from the store already made, or you can buy all the ingredients for the cake and make it yourself.

So, I bought bunches of roses, lilies, anemone, bells of Ireland, baby’s breath, and some tulips. It took me about 45 minutes to de-leaf, de-thorn, trim and arrange the flowers. I mainly just did a couple small bouquets and then little bud vase arrangements to enhance the main focus bouquets.

A glass vase with a white rose, a big pink anemone, some baby's breath, and some extra greenery.

This first one is my favorite out of all of them!

A small glass bud vase with one of the big pink flowers, a green spiky looking thingy, and baby's breath.

I never knew the name for the anemone before now, but I think they are so unique and pretty. I wish for this one I had trimmed the green thingy (someone please tell me the name of it) to be shorter than the anemone.

A small glass jar with a huge yellow rose and bells of Ireland, plus baby's breath.

I tried to keep the bells of Ireland taller than everything in order to bring some dimension to my bouquets, which is definitely an aspect of floral arranging I struggle with.

A very nice white rose put simply in a slender bud vase with a small thing of baby's breath.

This stunning white rose was one I decided to let speak for itself in a simple bud vase.

A huge, extra beautiful pink anemone in a bud vase with baby's breath.

Same for this anemone! It was so big and beautiful.

A small glass bud vase with three yellow tulips in it.

Since I had a dozen yellow tulips, I decided to just do four little bud vases each with three in them. I think they accented the tables well!

All the arrangements set out on two tables!

Here they all are on the tables!

And my friend had the amazing idea to put all the flowers I didn’t use in bouquets in a lovely basket she has, and they ended up being a great decoration for the patio just chilling in the corner all ornately:

A lottt of flowers all laying together in a flat basket. Yellow roses, pink lilies, white roses, the works!

These were all untrimmed and not de-leafed so it has much more of a wild look to it, but I really love how it turned out. That pink lily is totes gorg.

Anyways, this was my first time doing floral arrangements for a party, and it only cost me seventy dollars for all the flowers, which I think was such a steal. I think they turned out pretty okay, but definitely practice will hopefully make perfect eventually. I am considering buying a floral arrangement book to really up my game.

Let me know your thoughts or tell me some of your favorite flowers in the comments. And have a great day!

-AMS

Google Chrome is killing all uBlock Origin bypasses, Microsoft Edge, Opera to follow [OSnews]

For a while now the transition away from Manifest V2 (MV2) to MV3 has been on-going and it looks like it is entering its final phase of deprecation, at least, in the case of Google Chrome. A recent discussion thread in the w3c WebExtensions Community Group GitHub repo has highlighted how the latest and upcoming versions of the most popular browser are expected to be its final releases with support for MV2 extensions.

↫ Sayan Sen at Neowin

You shouldn’t be using Chrome anyway.

21:56

One Tart Per Million [Penny Arcade]

Morak wasn't sure he wanted to discuss the scourge of "bisexual lighting," because he didn't want to glorify the assertion. His other contention was that it might simply be rage-bait, and he was hesitant to be baited into rage. I'm open to these ideas, certainly. Let's deal with the second one first: I think it's incredibly silly stuff. And what's more, rage-bait has a way of becoming canonized, calcified, because the revolution must always act at the edge - the frontier - where experimental rhetoric bakes into ideology. Whether it's meant authentically or not, goofball adherents have already internalized it. It's simply a premonition of some future battle. As for the first contention, that we don't want to inadvertently glorify it, well, you tell me. I'd be surprised if it did!

21:35

Mike Gabriel: Future of libayatana-appindicator (v0.6.0 released today) [Planet Debian]

Some of you might have noticed that the recent (or rather: previous) version of libayatana-appindicator (v0.5.94) notified users and developers of the library being deprecated.

This short post is to notify you, that with today's libayatana-appindicator v0.6.0 release [1] this deprecation warning has now been removed again. Another new feature (added to AppIndicator without ABI breakage) is tooltip support. The new package version has just been uploaded to Debian experimental. Please test if your application (if it gets linked against libayatana-appindicator) continues to work flawlessly. Thanks!

libayatana-appindicator will receive continued support until GTK-3 becomes end-of-life (because libayatana-appindicator has a baked-in GTK-3 dependency which should not be ported to GTK-4 imho). That said, in the future, GTK-3 applications can continue using libayatana-appindicator for sending AppIndicator-like icons and menus over DBus to KStatusNotifierItem-based system tray renderers.

If you are looking for an AppIndicator implementation for GTK-4 applications (or other), I'd like to encourage you to help making libayatana-appindicator-glib [2] a new standard (can be used in GTK and Qt applications alike, implementation is using pure Glib-2.0). Currently, there is only one renderer (ayatana-indicator-application), so more work needs to be done on the renderers' side. (One of the next work items here is to get AppIndicator-Glib support working in Lomiri's desktop/windowed mode).

[1] https://github.com/AyatanaIndicators/libayatana-appindicator/releases/ta...
[2] https://github.com/AyatanaIndicators/libayatana-appindicator-glib/

20:49

Catlantean 3D: making graphics like it’s 1993 [OSnews]

My goal was to build a complete, shippable first-person shooter using techniques that were common in the early 90s, while allowing myself the luxury of using a modern compiler and a platform abstraction layer.

↫ Marko Stanic

It looks amazing already, and it isn’t even done. Stanic goes into great detail explaining how he created the various assets for the game, and it’s a joy to read through his creative process and problem-solving routines. The game’s called Catlantean 3D, and is expected to ship somewhere early 2027.

A raycasting first-person shooter written in COBOL [OSnews]

On a related note, what about a raycasting first-person shooter written in… COBOL?

Can you think of a better programming language than COBOL to implement an FPS from scratch? I know I can’t, so buckle up and enjoy what can only be described as an out-of-body experience for COBOL enthusiasts as I set out to make a Wolfenstein3D-like raycasting based FPS game (and potentially go a bit further than that, hopefully it’s not a DOOMed attempt).

↫ icitry on YouTube

I don’t link to YouTube videos very often, but there’s always the exception that proves the rule. The COBOL code’s available on GitHub.

What a mad man.

Microsoft makes Windows printing easier with Windows Ready Print [OSnews]

Microsoft has detailed that Windows 11 is going to switch away from dedicated printer drivers to its Windows Ready Print system. This should make it a lot easier and less cumbersome to get printers running on Windows 11.

At the core of Windows Ready Print is a transition away from legacy, third party drive-based workflows toward modern, standards-based printing with IPP (Internet Printing Protocol) using the Windows inbox IPP printer driver. 

Starting in July 2026, new printer installations will default to Windows Ready Print where supported, enabling a simpler and more reliable setup experience. This change reduces the need for traditional driver management and lays the foundation for a more scalable and predictable print experience.

↫ elliesekine at the Windows Tech Community

Printers still play a huge role in our lives – whether we like it or not – and their terrible user experience is basically a meme a this point. Making at least one aspect of printing easier, less cumbersome, and more streamlined is incredibly welcome, and I’m glad Microsoft is taking the Windows printing ecosystem along for the ride on this one.

My own personal experience with printing on Linux and now on Windows 11 (as promised, I’ve been using nothing but Windows 11 since 26 May!) has been mostly effortless already. Our cheap networked printer/scanner/combo thing from HP “just works” on both Linux and Windows 11, since Windows downloads HP’s drivers and application automatically when detecting the printer on the network. Still, not having to use HP’s driver would be a nice bonus.

Coincidentally, I also managed to get the printer component of our HP combo thing working on… HP-UX 11i v1. Despite being more than two decades newer, our HP printer works perfectly with a printer definition file included in HP-UX, giving me full printing from CDE and the rest of HP-UX. It’s entirely useless and cost me an evening of my life, but seeing the test page and other documents from HP-UX come out of our printer, over the network, put a big smile on my face.

20:28

The Big Idea: Donna Barba Higuera [Whatever]

Keep science fiction weird! New York Times Bestselling and Newbery Medalist author Donna Barba Higuera is a big believer in letting literature be weird and out there and most of all, inspiring to those whose hands her books happen to fall into. Come along in the Big Idea for her newest book, Firesnake and see how a little sticker can have a big impact.

DONNA BARBA HIGUERA:

So, what influence has the Newbery Medal had on contemporary Sci-Fi?

If you ask adults which book was that “magical” book for them, the one that sent them on a quest for more of that feeling, turned them into a reader, most will answer with something they read as a child. Often, it’s a book with that gold sticker on it. Not necessarily because it’s absolutely the best book, but because it was the one someone put in their hands. Still, odds are, it’s gonna click for someone out there.

It’s no secret that Sci-fi books don’t often get on the radar of the Newbery Committee. 

So what a bizarre close-the-loop moment for me when that “magic” book that launched me into a lifelong love of Sci-Fi, A Wrinkle in Time, was a Newbery Medalist over fifty years ago. A gap-toothed, freckly kid, bored out of her mind in a dusty Central California town traveled with Meg Murray to another universe. And that book lured me into becoming a contemporary Sci-Fi reader, and later, writer.

What else did that magic book do? It let that bored kid from a small agricultural town dare to imagine she could write herself across the universe too. Mexican tales can be weird. I could make it weirder! In The Last Cuentista, I blended those magical stories my grandmother told with my love of science fiction. I never dreamed this peculiar and very personal book would be published, let alone win an award like the Newbery Medal. (further proof I’m in a simulation)

People mention all the time how The Last Cuentista was the first Sci-Fi to win the Newbery Medal since Madeline L’Engle’s book over fifty years ago. Wrooong! The thing is, most unfamiliar with Sci-Fi think if a book doesn’t have a spaceship or involve space travel, it’s not Sci-Fi. Other Newbery Medal winners fall into the Sci-Fi category. At Last She Stood (2025 Newbery Medal) by Erin Entrada Kelly was inspired by Erin’s love of the 2010 Newbery winner, When You Reach Me by Rebecca Stead (both books involve time travel). The Giver by Lois Lowry (1994 Newbery Medalist). Turns out, there are a few of us weirdos reeling young readers in to Sci-Fi. 

And that’s just sci fi! What about Newbery Medal fantasy writers like:  Lloyd Alexander and The High King, Susan Cooper and The Grey King, Robin McKinley and The Hero and the Crown, Kelly Barnhill and The Girl Who Drank the Moon; Ursula K. LeGuin also received a Newbery Honor for The Tombs of Atuan.

Most of us have a specific book that turned us into a mainstream Sci-Fi reader or writer. Maybe it’s a book that didn’t get it right, and we are on the search for the book to repair that wrong. Or maybe it was a book that did get it right, and we need to write a love letter to that book like Erin Entrada Kelly did. 

The Last Cuentista was based off a short story writing prompt. “Take a traditional fairy tale and make it sci-fi.” I chose a story that as a kid, I thought was the stupidest tale ever told. The Princess and the Pea. Hear me out. Why would you want some delicate princess to marry your son? Perhaps instead, someone of strong mind and body?

So, as an adult I addressed my repressed childhood fury in a short story about a badass girl who was implanted with the “P.E.A.” (Pellet of Extended Animation. I know…I know…) for a four hundred-year-journey across space. But her “P.E.A.” fails due to her strong mind. She never sleeps and when removed from her pod is beyond bonkers. Society has changed along with what humans value. Well, that revenge-write idea haunted me. Year slater, I started writing The Last Cuentista

But to write for adults or children? I found adult Sci-Fi was often too “sciency” for me. I mean, I was a biochem major. I love science. But I have my limits. Physics can kiss my— (and that was how Higuera’s essay in Scalzi’s The Big Idea got her children’s books banned.)

So, back to the topic: What influence has the Newbery Medal had on contemporary Sci-Fi?

Well, first you have to consider how those of us who write for children ended up here.

Long ago, I attended Norwescon in Seattle, and sat in a lecture by Fonda Lee who writes for both adults and children. Fonda said (more or less), “In adult sci-fi fiction, I need to research and include how a ship travels. Kids just need to know the ship got from A to B.”

I might have gasped in that room. That was it! Quite frankly, (oh, I’m gonna get some hate on this) I still don’t care how the ship got from one planet to another. I just want to know about the people and what kind of mess they were in. I’d found where I belonged. I could write for kids, and introduce them to sci-fi without having a doctorate in astronautics!

I was off and running. The first book led to a second. Darker and grittier, Alebrijes is set four hundred years after the comet strike, about what happened to those who survived on Earth. You know, just a little hopeful apocalypse for the kids. The third and final book in the series, Firesnake, is about a girl born and raised on the terraformed planet, Sagan, who is now returning to a very changed planet Earth.

Maybe my books are a bit of a soft launch, (depends on who’s reading them) but I can’t tell you how many times I’ve heard, “I don’t read sci-fi, but I read your book and it wasn’t horrible.”

I smile and say, “Welcome to weird with the rest of us.” I then tell those people of some of the contemporary Sci-Fi I think they may like. That’s how it begins.

Just to be clear, writing for kids is hard! I double dog dare you to try it. Children have the ability to suspend disbelief and imagine the impossible. But they will also call BS and proclaim you the worst author on Earth if you don’t get something right. 

My hope is that there’s a young reader out there who’ll read my books and imagine themselves as a writer. Great! Or maybe, they’ll think my books are the stupidest books ever written. Well, not good, but okay. Whatever you need to rage-write, imagine, wonder and create.

It’s a cycle that should repeat. Not every book is for every reader. Writers shouldn’t take it personally if a reader doesn’t like our books. 

But with that gold sticker that somehow found its way to the cover of my book, I’m now in the lucky position to get to speak to kids all over the world. I get to encourage young readers and writers to embrace the “weird” parts of themselves; the parts that make your palms sweat and heart race when you think of sharing them with others. 

Maybe if a kid picks up The Last Cuentista and reads it because they see that gold medal (or heaven forbid they are forced to read it in school) for either love or hate, it may turn them on to reading more contemporary Sci-Fi. Don’t mind me. I’m just going to be over here writing the strange and weird, hoping that a book I write might be that magical one; that gives them a lifelong love of contemporary Sci-Fi; like a Newbery book by Madeleine L’Engle gave me a half century ago.


Firesnake: Amazon|Barnes & Noble|Bookshop|Powell’s

Author socials: Website|Instagram

20:21

Link [Scripting News]

Wembanyama is a really smart dude. Wow.

Up is Down – DORK TOWER 08.06.26 [Dork Tower]

Most DORK TOWER strips are now available as signed, high-quality prints, from just $25!  CLICK HERE to find out more!

HEY! Want to help keep DORK TOWER going? Then consider joining the DORK TOWER Patreon and ENLIST IN THE ARMY OF DORKNESS TODAY! (We have COOKIES!) (And SWAG!) (And GRATITUDE!)

19:14

18:21

Larson: Are insecure code completions a vulnerability? [LWN.net]

Seth Larson, the Python Software Foundation's security developer-in-residence, has written about the difficulty in classifying insecure code completion in the PyCharm IDE using its Full Line code completion plugin. Larson discovered that the plugin, which uses a local "deep learning module" to offer code completions, suggests code that would lead to severe vulnerabilities. He was unsure whether it warranted a CVE or not, however:

I reported this behavior to JetBrains for "Full Line Code Completion" v253.29346.142 and clearly their support staff weren't certain whether this defect was a security vulnerability or not either. When I asked to publish a blog post about this behavior after they confirmed this report wasn't a "direct security vulnerability" (which I agree with) but then was asked not to publicize my report and referred to PyCharm's Coordinated Disclosure Policy so... which is it? Security vulnerability or not?

I ended up waiting the 90 days anyway and I didn't hear back with any substantive update from the development team. I double-checked again today using "Full Line Code Completion" v261.24374.152 and the behavior is identical, suggesting the same insecure code for both contexts.

This isn't meant to be a specific dig at PyCharm or JetBrains, I have no-doubt that examples like this exist in every code generation model available.

17:14

Link [Scripting News]

Today's song: It's Your Thing. If the web had a song this could be it.

Link [Scripting News]

Every editor should have cute-paste.

Link [Scripting News]

Some days Claude is great, the best collaborative programmer I've ever worked with, and a friend, like Gary Sevitsky was in the hallway outside the PDP-11 room at UW, or Brent Simmons on the 24 Hours project. And on other days Claude a crazy mutinous pirate, deleting my code, ignoring the guidelines, and building the result without permission (all the while unaware that he wasn't working on the actual code, heh). Today is one of the great days. The bug reports are crisp and complete. Picks up a task and gets right to work on it. And I haven't even switched to the new model, yet.

Link [Scripting News]

2018: "I can say what happened to Melo. He failed Linsanity. God came to his rescue. Gave him a player who was glad to be in the NBA, who would mold his game to make Melo the star that he was always capable of being. Melo didn't want anyone else in the spotlight. Goodbye Lin. Just imagine what the three guys in this picture could have done. The only thing in the way was Melo's hubris."

17:07

The Market Behind the Wall [I, Cringely]

Yesterday I told you what 2Brains is, and how it separates the saying from the knowing. Today, the part that ought to worry some very large companies: what all of it is worth if we’re right.

Wall Street is pricing the AI data-center buildout at something like $1.7 trillion by 2030. Almost all of that spend assumes one particular shape: vast halls of graphics chips answering questions by guessing, one likely word at a time. So ask the heretical question — how many of those “questions” are questions at all? How many are lookups? What’s our refund policy? What was Q3 revenue in the Ohio region? Is this patient allergic to penicillin? Those aren’t creative prompts. They’re retrievals, and an ordinary processor has answered retrievals flawlessly since before NVIDIA ever etched a graphics card. Our estimate is that roughly two-thirds of enterprise AI queries are lookups wearing a chatbot’s clothes.

Whoever owns the architecture that moves those two-thirds off the graphics chip doesn’t own a product. They own a tollbooth on a third of the traffic. On a $1.7-trillion road, that isn’t a company. It’s an asset class.

And the cost savings are the small half of the prize.

Here’s the big half — the half I somehow walked you past. There’s a market that can’t use any of this yet.

There’s a reason your bank’s AI will tell you its branch hours but not your account balance. A reason the hospital lets it summarize the cafeteria menu and not the medical chart. A reason no airline will put a language model near a cockpit and no law firm lets one file a brief without a terrified associate reading every line. It isn’t the cost. It’s that the thing lies — confidently, fluently, without warning, and without any tell. In a chatbot recommending a taco place, a hallucination is a shrug. In a domain where being wrong gets someone audited, sued, sick, or killed, a hallucination is a wall. And behind that wall sit the most valuable AI markets on Earth — banking, insurance, medicine, law, aviation, defense — frozen, spending fortunes on pilot projects that might never ship, because the last mile is always a liability lawyer saying no.

Salesforce built a test, called HERB, to measure precisely how often these systems invent an answer when they don’t actually know. OpenAI’s flagship does it 77 times out of 100. Salesforce’s own best effort was 32. Ours does it 3 — and those three aren’t lies, they’re refusals: the system saying I can’t verify that instead of guessing. Knock that number down and you don’t win a cheaper slice of the market that already exists. You unlock the market that’s been sitting behind a wall the entire time.

The reason 2Brains doesn’t lie and the reason it’s cheap are the same reason. It looks the fact up instead of guessing it — so it cannot fabricate, and the lookup runs on a processor that sips power instead of a chip that gulps it. Trust and thrift are not a trade-off you balance against each other. They fall out of a single design decision. You do not pay extra for the honest version. The honest version is the cheap version. That sentence is the whole company.

Which is why I would be nervous, were I sitting atop a five-and-a-half-trillion-dollar valuation built on a story its own executives call the tokenomics flywheel: AI gets cheaper, so people use more of it, so you sell more chips, forever. It’s a lovely flywheel. It also rests on two assumptions standing up indefinitely — that the lookups stay on the graphics chip, and that the hallucination tax, the wrongness, the wall, is simply the permanent cost of doing business, a thing you manage rather than cure. 2Brains is a bet that both assumptions fall in the same afternoon. NVIDIA’s own friendly analysts have begun writing the polite version of this worry: that the software moat protecting the company in training is thin in inference, and that custom silicon is already nibbling the edges. They’re circling the right pond. They just haven’t said the quiet part out loud — that the most expensive part of inference may not need the expensive chip at all.

AMD, for what it’s worth, gets to watch this from both sides of its own ledger, since it sells the graphics chip that loses and the processor that wins. If I ran their strategy desk, I’d have noticed that by now.

The rest tumbles downstream, and some of it is being poured in concrete. The power forecasts — nine to seventeen percent of all American electricity by 2030, the global doubling — are every one of them drawn on the assumption that each query needs a jet engine, so we are building to match. New gas plants are breaking ground. And we are bringing a reactor back to life at Three Mile Island. I knew that place when it was the most frightening address in America: in the summer of 1979, as a graduate student, I worked as an investigator for the President’s Commission on the Accident at Three Mile Island, and afterward wrote a book about it for Random House — Three Mile Island: The Hour-by-Hour Account of What Really Happened. The commission was chaired by John Kemeny, the president of Dartmouth and, in a symmetry history could not have scripted, one of the two men who invented BASIC — the language that first taught a generation of us to speak to a computer at all. The first electrons are due back on the grid in 2027, to run Microsoft’s data centers. Of all the ways I once imagined that story might end, restarted to power a machine that guesses was not among them.

In a single year, the big technology companies have signed contracts for something like ten gigawatts of new nuclear. Goldman Sachs reckons that feeding all the data-center demand the industry expects by 2030 would take eighty-five to ninety gigawatts of it — dozens of power plants, ordered to wait on machines that guess.

Now bend the assumption, and you bend the curve. Not all of those reactors, but some of them, turn out to be expensive answers to a question we never had to ask. A canceled nuclear plant is quite a side effect for a column about grammar.

And the curve, eventually, reaches your mailbox. My own Virginia electric bill rose about sixteen dollars a month on the first of January, a good deal of it to build grid for buildings full of machines that guess. The cheapest watt, it turns out, is the one you never had to burn — because the question never needed the chip.

So: suppose we’re right. The answer is a market measured in the hundreds of billions of dollars — half of it a market nobody can serve today, pried open by the very same stroke that makes it cheap. That is the prize.

What I haven’t told you yet is how a small company in Charlottesville intends to put a thing like that into the world — not as a product you buy, but as a standard that ends up inside everything, the way a firm in Cambridge once licensed a chip design that now hums inside nearly every phone alive without anyone noticing it was there. That’s tomorrow’s column. And it’s the one that decides whether honesty in machines is something the world will own outright, or merely rent.

Robert X. Cringely is a co-founder of 2Brains, Inc., in Charlottesville, Virginia. He has written this column since 1987

The post The Market Behind the Wall first appeared on I, Cringely.






Digital Branding
Web Design Marketing

Feeds

FeedRSSLast fetchedNext fetched after
@ASmartBear XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
a bag of four grapes XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
Ansible XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
Bad Science XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
Black Doggerel XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
Blog - Official site of Stephen Fry XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
Charlie Brooker | The Guardian XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
Charlie's Diary XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
Chasing the Sunset - Comics Only XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
Coding Horror XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
Comics Archive - Spinnyverse XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
Cory Doctorow's craphound.com XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
Cory Doctorow, Author at Boing Boing XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
Ctrl+Alt+Del Comic XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
Cyberunions XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
David Mitchell | The Guardian XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
Deeplinks XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
Diesel Sweeties webcomic by rstevens XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
Dilbert XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
Dork Tower XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
Economics from the Top Down XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
Edmund Finney's Quest to Find the Meaning of Life XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
EFF Action Center XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
Enspiral Tales - Medium XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
Events XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
Falkvinge on Liberty XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
Flipside XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
Flipside XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
Free software jobs XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
Full Frontal Nerdity by Aaron Williams XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
General Protection Fault: Comic Updates XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
George Monbiot XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
Girl Genius XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
Groklaw XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
Grrl Power XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
Hackney Anarchist Group XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
Hackney Solidarity Network XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
http://blog.llvm.org/feeds/posts/default XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
http://eng.anarchoblogs.org/feed/atom/ XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
http://feed43.com/3874015735218037.xml XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
http://flatearthnews.net/flatearthnews.net/blogfeed XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
http://fulltextrssfeed.com/ XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
http://london.indymedia.org/articles.rss XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&amp;_render=rss XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
http://planet.gridpp.ac.uk/atom.xml XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
http://shirky.com/weblog/feed/atom/ XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
http://thecommune.co.uk/feed/ XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
http://theness.com/roguesgallery/feed/ XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
http://www.airshipentertainment.com/buck/buckcomic/buck.rss XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
http://www.airshipentertainment.com/growf/growfcomic/growf.rss XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
http://www.airshipentertainment.com/myth/mythcomic/myth.rss XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
http://www.baen.com/baenebooks XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
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 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
http://www.godhatesastronauts.com/feed/ XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
http://www.tinycat.co.uk/feed/ XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
https://anarchism.pageabode.com/blogs/anarcho/feed/ XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
https://broodhollow.krisstraub.comfeed/ XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
https://debian-administration.org/atom.xml XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
https://elitetheatre.org/ XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
https://feeds.feedburner.com/Starslip XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
https://feeds2.feedburner.com/GeekEtiquette?format=xml XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
https://hackbloc.org/rss.xml XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
https://kajafoglio.livejournal.com/data/atom/ XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
https://philfoglio.livejournal.com/data/atom/ XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
https://pixietrixcomix.com/eerie-cutiescomic.rss XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
https://pixietrixcomix.com/menage-a-3/comic.rss XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
https://propertyistheft.wordpress.com/feed/ XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
https://requiem.seraph-inn.com/updates.rss XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
https://studiofoglio.livejournal.com/data/atom/ XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
https://thecommandline.net/feed/ XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
https://torrentfreak.com/subscriptions/ XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
https://web.randi.org/?format=feed&type=rss XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
https://www.dcscience.net/feed/medium.co XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
https://www.DropCatch.com/domain/steampunkmagazine.com XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
https://www.DropCatch.com/domain/ubuntuweblogs.org XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
https://www.DropCatch.com/redirect/?domain=DyingAlone.net XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
https://www.freedompress.org.uk:443/news/feed/ XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
https://www.goblinscomic.com/category/comics/feed/ XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
https://www.loomio.com/blog/feed/ XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
https://www.newstatesman.com/feeds/blogs/laurie-penny.rss XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
https://www.patreon.com/graveyardgreg/posts/comic.rss XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
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 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
https://x.com/statuses/user_timeline/22724360.rss XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
Humble Bundle Blog XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
I, Cringely XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
Irregular Webcomic! XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
Joel on Software XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
Judith Proctor's Journal XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
Krebs on Security XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
Lambda the Ultimate - Programming Languages Weblog XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
Looking For Group XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
LWN.net XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
Mimi and Eunice XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
Neil Gaiman's Journal XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
Nina Paley XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
O Abnormal – Scifi/Fantasy Artist XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
Oglaf! -- Comics. Often dirty. XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
Oh Joy Sex Toy XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
Order of the Stick XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
Original Fiction Archives - Reactor XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
OSnews XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
Paul Graham: Unofficial RSS Feed XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
Penny Arcade XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
Penny Red XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
PHD Comics XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
Phil's blog XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
Planet Debian XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
Planet GNU XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
Planet Lisp XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
Pluralistic: Daily links from Cory Doctorow XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
PS238 by Aaron Williams XML 18:21, Tuesday, 16 June 19:09, Tuesday, 16 June
QC RSS XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
Radar XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
RevK®'s ramblings XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
Richard Stallman's Political Notes XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
Scenes From A Multiverse XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
Schneier on Security XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
SCHNEWS.ORG.UK XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
Scripting News XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
Seth's Blog XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
Skin Horse XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
Tales From the Riverbank XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
The Adventures of Dr. McNinja XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
The Bumpycat sat on the mat XML 18:14, Tuesday, 16 June 18:54, Tuesday, 16 June
The Daily WTF XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
The Monochrome Mob XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
The Non-Adventures of Wonderella XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
The Old New Thing XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
The Open Source Grid Engine Blog XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
The Stranger XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
towerhamletsalarm XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
Twokinds XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
UK Indymedia Features XML 17:56, Tuesday, 16 June 18:38, Tuesday, 16 June
Uploads from ne11y XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
Uploads from piasladic XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June
Use Sword on Monster XML 18:14, Tuesday, 16 June 19:01, Tuesday, 16 June
Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily XML 18:21, Tuesday, 16 June 19:07, Tuesday, 16 June
what if? XML 18:21, Tuesday, 16 June 19:02, Tuesday, 16 June
Whatever XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
Whitechapel Anarchist Group XML 18:14, Tuesday, 16 June 19:03, Tuesday, 16 June
WIL WHEATON dot NET XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
wish XML 18:21, Tuesday, 16 June 19:06, Tuesday, 16 June
Writing the Bright Fantastic XML 18:21, Tuesday, 16 June 19:05, Tuesday, 16 June
xkcd.com XML 17:56, Tuesday, 16 June 18:39, Tuesday, 16 June