To Phil Windley: "We both remember what the web was like before it became a CSS and JavaScript platform." But most young users and developers have no memory of how powerful it was to make interop so damned easy.
[$] Git considers voting to determine its LLM policy [LWN.net]
One of the dominant themes of 2026 has been the debate within development projects about the terms under which LLM-written contributions should be accepted — if, indeed, they should be accepted at all. The Git project has not been immune to this trend; the topic was discussed at the recent Git Contributor's Summit. In this case, the path to a resolution may be somewhat circuitous; the project, which has never been governed as a democracy, is considering adopting a voting process as a way of bringing the discussion to an acceptable conclusion.
Kernel prepatch 7.4-rc2 [LWN.net]
Linus Torvalds has released the 7.4-rc2 prepatch and it
will come as no surprise that it is a large one ("a big -rc2 to
go with the largest ever -rc1
"). Much of the size was made up
of some automated Coccinelle updates that were spread out all over
the tree; once those are factored out, the rest looks fairly
normal:
When masking that noise out from the diffstat, the shape of it changes - not spread out over thousands of files any more. But it does not look unusual: a third is drivers (gpu, networking and sound account for most of it, but there's a bit of everything), another third is networking and bpf, and the final third is "the rest" (mostly filesystems, mm, arch updates).And yes, much of this was driven by various AI fixes. I think I'll stop repeating that, and we can just take it for granted. But this time around Alexei [Starovoitov] claims that on the bpf side at least the fixes are now coming in faster than the new reports, and that sounds lovely if true.
The
Markdown version of my blog is getting more traffic than the
HTML version. So much so that I'm getting complaints about all the
political stuff. I love this, and I even love that some people are
saying what they used to say, they didn't come to my blog for the
politics. That probably will influence me a little, but it still is
my main way I talk to the world, so I'm not likely to back off too
often.
The sound on my TV is a fraction of a second faster than the picture. Just enough of a delay so I know a shot is going in before I see it go in.
Dems: the campaign never ends [Scripting News]
Urgent note to Dems. Keep your campaign websites going.
This is the mistake Dems always make. When you have news to get out, the MSM will mangle or ignore it. Go direct to your supporters, not just the people who voted for you, the people you represent. Let us help support the work you're doing.
Speeches on the floor of Congress hold very little interest.
Send some of the new stars of the party out in the flyover territory (where they come from!) to keep everyone in the loop. Look at all the power that was locked up in places like the North and South Carolina, Georgia, Texas, Kansas, Michigan, Iowa. Arizona, Mississippi and Alaska. (Who did I miss?)
Remember this dear member of Congress, you were elected to represent us, not to make deals with anyone else. We are the power. Y'all always forget that once the election has happened, but that's just the beginning. You may be very surprised if you have a 365-day-a-year connection to the people.
The news industry is pretty freaking useless, and we know it. The landslide wasn't manufactured on Maddow or Meet the Press. Don't look to podcasters. The people of the United States are driving now.
Also even though he doesn't have a job, bring Pete Butttigieg in to the campaign.
And to the news networks, host some of your shows from studios in the new states, or move your hosts around from Atlanta to Dallas and Des Moines and Detroit, Phoenix and Charlotte. I think you'll be surprised at the difference it makes in the perspective of your super boring talking heads who always say the same bullshit, and the pride of the people who live in those states. Remember they feel no one pays attention to them -- and that includes journalism, not just politicians.
The current Dem leaders can't do this -- too much change for them, to little time. Start with people who have been freshly educated in what the electorate is capable of. You're at best the coaches, not of the reps, but the people. Sometimes people are too old for the job, and that's true in this case. Someone, an elder like Bernie Sanders or Elizabeth Warren should be out looking for the next leaders. Whoever they are, they must be young and eloquent and able to talk back to bullshit, not try to skate around it.
And remember this -- the campaign never ends.
PS: I'd love to see Jasmine Crockett sitting behind Trump at the next State of the Union. A sharp woman judging a smelly old man is really appealing. Focus group that, against Jeffries in the same seat.
PPS: The new leadership has to be photogenic, intelligent, doesn't yield to bullshit, doesn't try to skate around it either. When they go on SNL they have to kill it.
OpenIndiana 2026.10 released [LWN.net]
Version 2026.10 of the OpenIndiana operating system has been released. OpenIndiana is based on Illumos, which in turn was based on OpenSolaris after Oracle discontinued it.
Notable changes in this release include UEFI framebuffer support for the live image, updates to many applications and development tools, as well as the inclusion of new applications such as TeX Live 2026, the Foliate ebook reader, and more.
Security updates for Monday [LWN.net]
Security updates have been issued by Debian (cjose, kernel, libreoffice, rsync, ruby3.3, telegram-desktop, vim, and zlib), Fedora (bind, composer, copyparty, dnf5, elixir, fasterxml-oss-parent, gnome-remote-desktop, goose, jackson-annotations, jackson-bom, jackson-core, jackson-databind, jackson-jaxrs-providers, jackson-modules-base, jackson-parent, java-21-openjdk, java-21-openjdk-portable, jupyterlab, kryoptic, luksmeta, mingw-cfitsio, mingw-expat, mingw-freetype, mingw-glib-networking, mingw-harfbuzz, mingw-qt5-qtbase, mingw-qt5-qtdeclarative, mingw-qt5-qtwebkit, mingw-qt6-qtbase, mtools, NetworkManager-l2tp, nginx, nginx-mod-brotli, nginx-mod-fancyindex, nginx-mod-headers-more, nginx-mod-js-challenge, nginx-mod-modsecurity, nginx-mod-naxsi, nginx-mod-vts, nodejs-pnpm12, pcre2, perl-Spreadsheet-XLSX, pie, python-boto3, python-botocore, python-joserfc, python-jupyter-builder, python-jupyterlab-server, python-jupytext, python-nbdime, python-notebook, python-s3transfer, python3.12, rccl, rsync, rust-blake2b_simd, rust-blake3, rust-constant_time_eq, rust-lzma-rust2, rust-ppmd-rust, rust-regorus, rust-sccache, rust-totp-rs, rust-typed-path, rust-zip, rust-zip0.6, rust-zip2, sofia-sip, suricata, wordpress, and xen), Mageia (gimp, python-gitpython, and suricata), Red Hat (osbuild-composer), Slackware (httpd), SUSE (bind, brotli, ca-certificates-mozilla, chromedriver, containerized-data-importer1.65-api, corepack24, docker-compose, flatpak, fuse-overlayfs, git-lfs, gitoxide, go1.27, google-cloud-sap-agent, google-guest-agent, gotosocial, kubevirt1.8, kubevirt1.8-container-disk, kubevirt1.9-container-disk, libmariadbd-devel, libntpc1, libopenscap33, libsndfile-devel, libspice-server-devel, libtirpc-devel, matomo, mihomo, mozilla-nss, nano, nmap, nodejs22, perl-Mozilla-CA, python-Brotli, python-CairoSVG, python-certifi, python313-Pillow, rsyslog, stgit, and thunderbird), and Ubuntu (python-tornado).
1352: No Looking Back [Order of the Stick]
http://www.giantitp.com/comics/oots1352.html
OpenIndiana Hipster 2026.10 released [OSnews]
OpenIndiana is a rolling-release illumos distribution, but they do release snapshots twice a year to serve as a base for installations, which they call Hipster. The project’s just released OpenIndiana Hipster 2026.10, and it brings a number of welcome changes. First, there’s UEFI framebuffer support on the live image, which is automatically configured when loading up the image. Second, Firefox and Thunderbird versions have been bumped to 159.0, and a whole slew of development tools have been updated to newer versions as well.
This snapshot also brings QEMU 11.1.2 and VirtualBox 7.2.22, and a number of new applications have been added as well. In addition, SPARC build support has been improved to enable new and updated packages for Sun’s dead ISA as well.
You can download a fresh image, or update an existing installation through IPS.
Making musl and proprietary NVIDIA drivers work together [OSnews]
Creator and lead developer of Chimera Linux, Nina “q66”, write about their efforts to get NVIDIA drivers to work properly on musl-based distributions.
As you may be aware, one of the limitations of musl-based distributions is that they will not function to their proper extent when used in computers with various NVIDIA graphics cards.
This is due to the proprietary nature of the driver, being built for glibc. I have been experimenting with trying to make this work, and this post is the summary of that effort.
↫ Nina “q66” on the Chimera blog
What follows is a deeply technical exploration of the problem, and the steps Nina q66 and the Chimera team are taking to try and fix it. With how popular and widespread NVIDIA hardware still is, this is a hugely important issue to try and address, and I’m grateful they’re trying to address it.
Why AI Agents Are Repeating 2019’s Microservices Mistake [Radar]
Microservices changed how we build software by breaking large applications into smaller, independently deployable services. That made systems easier to develop and scale, but it introduced a different class of problems: The behavior of the whole system got harder to see. AI agents are now following a similar path. A workflow that once lived inside a single application gets split across several agents, each responsible for one task. Individual pieces may work exactly as designed while the overall workflow gradually produces worse results. The difference is that agents make these systems far faster and cheaper to create, which makes it easier to repeat the same architectural mistake at a much larger scale.
I learned this the hard way. My name was on the design doc. Splitting that workflow across three agents was a reasonable call, and I would still defend most of the reasoning. But if you’d asked me that afternoon how we would find out when the thing quietly stopped working, I had no answer.
Months later, in a quality review, a reviewer noticed something felt off before any of our instrumentation caught it. Latency looked fine, error rates were flat, and every service in the chain returned what it was supposed to return. What we had was a slow decline in output quality, and it took about three weeks to trace.
The first agent handed a set of documents to the next one for summarization. The summarizer dropped a field it had judged to be a low signal. A downstream agent then made a confident recommendation without that field. Every agent did what it had been designed to do, and the result was still wrong. I should have anticipated it, because I’d been on the product side through the microservices years and had seen this pattern before.
Breaking down monoliths was a good decision for most teams, but one thing was forgotten. Decomposition did not make the difficult parts of the system disappear. It moved them into the gaps between services, where the people accountable for the overall product could no longer see them. The bill landed around 2019, and it landed on the delivery schedule rather than the incident channel. Teams were running hundreds of services with limited tracing and no contract versioning, and the real symptom was slower delivery. Shipping took longer than before, because engineers spent their weeks picking through those services.
Agents are running the same arc faster, because standing one up takes an afternoon and a prompt instead of a repo and a deploy pipeline. When creating an agent is that cheap, product teams make agents without asking anyone, and nobody keeps track of what the agents are and what they’re doing.
This isn’t only my experience. Cemri and coauthors annotated more than 1,600 execution traces across seven popular multi-agent frameworks and built a taxonomy of 14 recurring failure modes (MAST, NeurIPS 2025). Most of what goes wrong traces back to how the system was specified and how its agents coordinated, not to the models inside it.
Inventory sounds trivial and isn’t. Service sprawl at least showed up in your Kubernetes manifests. Agents get created inside product surfaces and workflow tools, and inside somebody’s weekend automation of their own job. You don’t find out what you have until a compliance reviewer asks which automated system touched a given decision, and then it’s too late.
The visibility gap cost us three weeks. When an agent calls an agent that calls a retrieval layer that calls another agent, and every hop has a model deciding what to pass forward, you need trace context that survives the whole path. Most stacks log prompts and completions per call and stop there. You get each hop and never the chain, and it was the chain that failed.
Compounding confidence is the failure that worries me most. Distributed systems fail loudly, which turned out to be a blessing nobody appreciated. A service throws a 500 and the caller knows to stop. Agents fail quietly and fluently, so when an upstream agent produces a summary that’s plausible and wrong, the downstream agent gets no signal and reasons confidently on top of it. By the time the result reaches the user, it conveys a level of confidence that the initial evidence does not support.
API contracts drifted when someone changed the response format without versioning it, and we built machinery to catch that at build time. Agent contracts drift when someone edits a system prompt. In that case there’s no schema diff and no type check. Nothing breaks until a downstream agent starts getting different output and adapts to it without telling anybody.
A registry is the cheapest thing to build and the first thing everyone skips. When building microservices, we kept a service catalog with an owner and a scope for each service. For agents, we need that same record plus an explicit list of what each agent is allowed to call.
Tracing carries over nearly unchanged, since correlation IDs were invented for this exact problem. OpenTelemetry’s GenAI semantic conventions give you the vocabulary, and an agent run comes out as a span tree instead of a pile of unrelated log lines:

Had we been emitting those spans, the summarizer span and the recommender span would have sat side by side in one trace, and the missing field would have been a diff instead of a three-week hunt. These conventions are still moving, so keep the attribute names behind a thin mapping layer of your own.
Finding the missing field in a trace would have shortened the investigation. I’d also want a test that caught its omission before a prompt change reached production. That’s where I’d apply the contract-testing discipline from microservices: define what the downstream agent depends on, then check that an upstream change preserves it. For the summarizer in this workflow, the evaluation would need to check whether its output retained the information the recommender needed. I’d version the prompts and require changes to pass those evaluations before release. There’s early evidence it pays: SEMAP, a protocol-layer method applying behavioral contract modeling and lifecycle verification on Google’s A2A infrastructure, reported up to roughly 70 percent fewer failures on function-level coding tasks when scored against MAST.
The trust boundary is the thing I’ll argue about in a design review. In 2019 we learned that a service doesn’t get trusted just because it lives inside the perimeter, which is most of what service meshes were for. The agent version is that an agent doesn’t get broad tool access just because we built it and we’re nice people. What an agent is allowed to do belongs in a policy layer the model can’t talk its way past, not in a system prompt asking politely.
Cost is where the analogy between microservices and agents fails. A microservice stuck in a retry loop costs you CPU and an alert at 3 am. An agent stuck in a loop costs real money on every turn and doesn’t saturate in any way that makes itself obvious. This one lands on the product owner instead of infrastructure, because it surfaces as unit economics rather than an outage, which means the PM ends up justifying the number at the end of a billing cycle.
None of this argues against multi-agent systems, which earn their keep the same way services did. My argument is that operational practices should evolve alongside architecture, without repeating the five-year lag of the previous transition. The person accountable for delivering the product is usually best placed to ensure that happens.
Hence, I push on four things. Can we follow one request all the way through and reconstruct what each agent decided and why? If not, we’re building something we won’t be able to debug. What happens when an upstream agent is wrong, and not whether it can be? If the honest answer is that the next agent carries on as normal, we haven’t designed a failure mode. We’ve designed a failure and left it running.
Who owns this agent, and where is its tool access enforced? A system prompt isn’t enforcement. What does this cost at ten times today’s volume, and what shuts it off when the number goes wrong? I ask that one early, because nobody volunteers it.
The teams that managed service decomposition most effectively incorporated tracing and contract testing into the build from the outset. These practices helped them understand how services interacted and verify that changes preserved expected behavior. That work is a sprint or two now, and a great deal more than that once you’re running 40 agents and someone asks which of them touched a customer’s data.
CodeSOD: Eventually [The Daily WTF]
We were just discussing TODO comments recently, and that motivated Bernard to send us this representative comment..
// TODO: This method should ideally be in tax frame work but due to
// the time constraint I am duplicating the code here.
// Needs to be refactored. Oct 28, 03.
This comment exists in this codebase, unchanged. It has been there for twenty three years. The refactoring has never happened.
This comment has seen the world change over the last 23 years, as the technology landscape has shifted and changed, grown and contracted. But this comment, this comment is a constant.
My Super Mid-Life Crisis – Issue 1 – 11 [Comics Archive - Spinnyverse]
The post My Super Mid-Life Crisis – Issue 1 – 11 appeared first on Spinnyverse.
AI Security [Schneier on Security]
Two weeks ago, I attended the [un]prompted AI security conference in San Francisco. It was an excellent event: three days of very dense talks about all aspects of AI security. (My talk was about integrous AI, and I will post it when it is online.)
AI security can be divided into three broad topics. It’s important for researchers to understand which one they are working on. And it’s important for us as a community to work on them all. They are: security of AI, security with AI, and security from AI. [un]prompted had good talks about all three.
Grrl Power #1511 – Designated foreshadowing [Grrl Power]
I don’t know what is involved in the Chastity Corner, and what makes it especially chaste, but at some point, Dabbler’s going to realize that it’s a fairly toothless threat. Ultimately, Maxima’s not going to get involved in any of the team member’s sex lives unless they’re screwing around on duty or somehow endangering people. Which, in a succubus’s case, is not out of the realm of possibility. Still, the vague threat of chastity is a succubi’s kryptonite, so Max isn’t above using it while it works.
I’m veering dangerously close to having every character speak in customized word bubbles. I had considered doing that from the very beginning of the comic, but almost immediately realized that it’s a pitfall for any comic that has more than a dozen characters in it, because there’s only so many combinations of balloon color, style, and font that are actually easily legible. I can’t stand comics that have black text in a “Nazi-Letterhead-Gothic-Calligraphy” font on a medium dark red word bubble, with just a skosh of JPEG artifacting around the letters. Okay, I get it, the character speaking is a demon. Are they supposed to be unintelligible as well? I’d say that’s borderline racist, but it’s really just a design failure.
The only reason I’m doing as much of it now as I am is, well, look, one of the competitors was a 600 meter tall mountain, another was a giant robot starfish spaceship, then we’ve got the “Better than an Angel on my own say-so,” “Living Explosion,” “Huge Demon’s Boss.” You get the idea. Superheroes and supervillains don’t generally need custom sound bubble. Magneto and Vehemence are big, scary bad guys, but they’re just people. Fin Fang Foom? Sure. He can get a custom craggly font. Someone like Derksied? Eh, kind of an edge case.
I looked up how much that cone of mountainside Max threw would weigh. I made some very rough estimates of its dimensions using Max as a ruler. Then used some website to calculate the volume of a cone, then found a website with charts of how much igneous rock weighs. Turns out there’s a huge difference in weight depending on the actual kind of rock it is. Pumice, for instance, weighs quite a bit less than basalt, for instance. And no, Max didn’t throw a giant cone of pumice at Disastar. Still, 1,000 tons for a cone of rock that large seems very light to me. Maybe it’s the cone shape that’s throwing me.
Here you go, a brand new vote incentive. Featuring the least sexy character in
the comic. No, I take that back, Cooter is the least sexy, but
don’t expect a pinup of him anytime soon. Or ever. There is a nude version over at
Patreon. Note I didn’t say NSFW. She is nude in those
picture, and she does identify as female, but it’s…
hard to tell. She is a humanoid aberration by D&D terminology,
not a mammal. And before you ask, no, I don’t know how many
vertebrae she has in her neck.
Double res version will be posted over at Patreon. Feel free to contribute as much as you like.
Restrictive design [Seth's Blog]
Design of any kind requires empathy. If you’re making it for yourself, it’s a hobby. Everything else is for someone else.
Great designers know who it’s for. And the design is for them, not for the designer.
Annie Jean-Baptiste teaches us about restrictive design. This is what happens when the designer fails to identify and recognize who the work is for, and then leaves people out. “Exclusion is a business decision, even when you did not mean to make it.”
Not everything needs to be designed for everyone. But all well-designed experiences and products are designed for someone.
Name your people, invite them in and give them what they need.
The Genesis Device [Penny Arcade]
New Comic: The Genesis Device
Pluralistic: America cannot undo Trumpism (09 Nov 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

True Carneyism has never been tried. When Canadian PM Mark Carney traveled to Davos to declare a "rupture" in the old order (and admit that this old order was never that great to begin with) he told us that there was no going back from Trumpism. The only way out of Trumpism was through:
This is easy to say, but hard to do. If the old order is over, then we will never again be able to trust America to serve as the world's cop, banker, ISP, IT department and consumer of first resort.
We can't trust Americans to buy the things we make:
https://pluralistic.net/2025/12/16/k-shaped-recovery/#disenshittification-nations
We can't trust them not to interfere with the interconnections between fiber lines that slither out of the oceans and onto the US landmass:
https://pluralistic.net/2025/11/26/difficult-multipolarism/#eurostack
We can't trust them not to weaponize the US dollar to undermine sovereign nations' legitimate activities:
https://pluralistic.net/2026/01/26/i-dont-want/#your-greenback-dollar
And we absolutely can't trust them not to spy on, steal from, and shut down governments, firms and households around the world by cutting off access to US software and cloud services, and by bricking the world's devices, from tractors to smartphones:
https://pluralistic.net/2026/01/01/39c3/#the-new-coalition
Despite Carney's assertion that this rupture represents a welcome (if too cruel, sudden and painful) departure of the old (never very good) system, no one (not even Carney) is acting like the world has truly changed. Take Carney's answer to the Trump tariffs: retaliatory tariffs. Tariffs have a place in sheltering a nascent domestic industry from better-developed, deeper-pocketed foreign competitors, so a tariff wall between Canada and the US could make sense, if it was paired with the massive domestic investment we'd need to rebuild the manufacturing industry that Brian Mulroney sold out with the Canada-US Free Trade Agreement (and later NAFTA).
But Carney is no Carneyist. When it comes to massive domestic spending, Carney is a bog-standard, austerity-addled Reaganomics guy; a central banker and technocrat whose idea of "industrial policy" is firing tens of thousands of skilled civil servants who thwart his agenda and replacing them with defective (but obedient) chatbots running on US hardware:
https://pluralistic.net/2026/05/13/vibe-governance/#k-hole
Carney's retaliatory tariffs aren't what you'd do if the old order had "ruptured." They're what you'd do if you hoped that your American cousins would come to their senses, evict their mad king from the White House, tear down the Epstein Memorial Ballroom, and roll back the clock to 2016. Like a lot of liberals, Carney just wants to go back to brunch.
But as any true Carneyist knows, brunch is canceled forever. Brunch ruptured. There's no going back to the old America, and there's no going back to the old American order that had dominated the world since the end of WWII. As November Kelly says, "Trump inherited a poker game rigged in his favor, but he flipped the table over anyway because he resented having to pretend to play."
This is something we're all struggling with, including Americans. The Republicans' midterm wipeout has corporate Democrats hoping that after a few years' tinkering, they can elect a Newsomdroid or give Harris a do-over and win back the trust and reliance of the world and the American people. Even for a true Carneyist who never liked the old order very much (like me), this is a comforting prospect. No one knows what the next world will look like, and no matter how screwed up the old world was, I knew how it worked and how to make it work for me (more or less).
But there is no going back. Trump I didn't have a plan, it only had Trump, whose One Big Idea was issuing Executive Orders. Many of these were meaningless bloviating. Some were illegal and were swiftly suspended or never went into effect. Biden overturned nearly all the remaining EOs (that were both substantive and not totally illegal).
But Trump II had Project 2025. The point of Project 2025 and the ambition of the wreckers who wrote it was to push America through a series of one-way transformations that cannot be undone, and that's what's happened, over two short years. That's the bad news. The good news is that it's much easier to destroy than to build, so Project 2025 hasn't led to the creation of permanent, load-bearing fascist institutions that cannot be shuttered without bringing down large parts of the USA.
Start with values. Trumpism is a denial of democracy and the rule of law. Tens of millions of Americans have been marinated in a belief system that says that the way to win power is to claim all the elections you lose are rigged and that these "stolen elections" are best addressed by staging a coup. These people are in a cult that embraces its leader's naked corruption. They're in a cult whose doctrine treats political triumph of as divine direction to embark on looting sprees. It's a cult whose members mutilate their faces so that they can't ever leave, and the reward for this permanent disfigurement is endless influence-peddling:
https://thehill.com/homenews/administration/6136101-ambassador-guilfoyle-wire-request/
Even without ritual scarification to mark them out forever, millions of these people will never come back from this cult indoctrination. They will forever be democracy's enemies, treating the idea of laws, rules and honest service as shucks for the rubes. What's more, these people's neighbors, family members and co-workers will never be able to fully trust them.
Unfortunately, those values aren't just diffused through the population: they are concentrated in the organs of state. DOGE and Federalist Society judicial appointments have created a stay-behind cadre of life-tenured fascists who now dominate America's federal judiciary and permanent civil service, including and especially the nation's law enforcement and national security agencies, from the FBI to the FDA, the NSA to the Bureau of Prisons.
Worse: DOGE also chased away hundreds of thousands of skilled, principled public servants. Those people have retired, retrained, emigrated or exited the workforce. They can't simply be re-hired and restored to their old roles. From finance regulation to the national education system, America has lobotomized itself, swapping people who understand how things work and use that understanding to enforce the laws and safeguard the American people for end-times fascists, caliper-wielding eugenicists, and Ayn Rand LARPers.
Much of the work DOGE's victims did is also gone forever. When DOGE's muskrats killed long-running NIH research projects, they pulled the plug on studies, some of which had run for decades. Many of these experiments are unsalvageable. DOGE didn't just throw away the contributions that cancer patients, people with genetic disorders and other volunteer research subjects gave to science: in halting these research projects, DOGE shredded this selfless sacrifice. Why not? When one NIH official begged his DOGE invaders not to kill long-running, valuable cancer research, the DOGE child laughed and said it didn't matter, because AI was going to cure cancer.
Then there's the NIH's research partners: the elite institutions who buckled so quickly in the face of Trump's antisemitism/DEI witch-hunts. These universities now face the same crisis as the DOGE-gutted civil service, with their best and brightest gone, grad students chased back to their home countries, and the trust of their students and faculty permanently squandered.
It's not just grad students who got chased out of America. Immigrants – documented and undocumented alike – have been terrorized for two years and many of them have fled. ICE got what it wanted: they robbed aging, stagnant America of the dynamism, aspiration and youthful vigor of the most ambitious people from every corner of the globe, people who proved their resourcefulness and bravery by making dangerous crossings. Then they navigated the US immigration system's impenetrable bureaucracy, often working without legal representation, in a language they were just learning, and still managing to clear every bureaucratic hurdle. This alone is a breathtaking demonstration of intelligence, resourcefulness and diligence. Those brilliant, hardworking people aren't coming back: some other country will get the benefit of their life's work and care. Their children will become citizens of other nations.
Now think of the hundreds of billions of dollars that have been transferred from ordinary working people who are still here, to America's oligarchs. Trump's tax cuts, corrupt policy subsidies and no-bid pork contracts have supercharged the wealth (and thus the power) of America's most corrupt elite. It will be the work of a generation to tax away their stolen loot, and much of it may never be recovered. These people will spend that time working to transform their wealth into permanent power, buying and installing politicians at every level of office.
Trumpland is a coalition of wreckers of every kind. Think of how MAHA undermined the nation's herd immunity to a host of communicable diseases, many of which can result in permanent disability. Long after MAHA is forgotten even as a punchline, the people whose health they destroyed forever will still be struggling. After a century of painstaking work to corral measles and other killer diseases, MAHA immunocompromised America itself, in just two short years. Any attempt to bring back evidence-based preventative medicine must now overcome the deep mistrust of medical science that an army of supplement-peddling quacks has sunk deep into Americans' psyche.
Speaking of mistrust: Americans must now and forever live with the knowledge that tens of thousands of their neighbors joined ICE, an armed, masked kidnapping squad that occupied US cities, murdering US citizens and noncitizens alike in the streets with impunity. Even if we try and imprison every one of those war criminals, it will take years and will shatter families and communities.
ICE proved that America is awash in small arms, but it's a different story when it comes to significant warfighting materiel. Trump's Iranian disaster used up the largest part of Pax Americana's arsenal of missiles and anti-missile interceptors. Putin doesn't need to convince Trump to cut off Ukraine's access to America's long-range arsenal. Trump shot his wad, and re-arming America is the work of decades, and it will cost billions, and it will require access to things America no longer knows how to make. Worse: the places where they do know how to make those things are no longer America's allies.
Can they be America's allies again? Well, sure, but only in a limited, Carneyist, "minilateral" way, in which countries form temporary alliances to accomplish specific goals. Biden spoke of "friendshoring" production of key goods and services. Friendshoring implies a reliable form of friendship, the sort that is built on decades of trust and interdependence. Friendshoring only works if the friends you friendshore to can be relied upon to stay your friends. Do we really think that if Venezuela deposes the puppet regime Trump installed after kidnapping the country's leader that it will remain America's "friend?"
That's the problem with weaponized interdependence: it only works for so long as the country America is screwing remains dependent on America, and now every country in the world is moving heaven and earth to break their dependencies on America, its institutions and products:
https://pluralistic.net/2023/10/10/weaponized-interdependence/#the-other-swifties
As Nate Bethea says on this week's Trashfuture podcast, airports outside of the USA are now filled with large, splashy ads urging businesses to move their IT out of America's cloud and off of American apps:
https://pluralistic.net/2023/10/10/weaponized-interdependence/#the-other-swifties
After Microsoft obliged the Trump regime by taking away the online accounts of foreign officials who made Trump angry, will any other country ever voluntarily trust them with their industrial capacity, let alone their government?
I'm not saying America is a write-off: I'm saying that it has been sabotaged down to the foundation slab and structural members by a psychotic cadre of skilled arsonists, who were abetted by mad bombers who drove themselves even crazier by racking up life-altering debts in rigged "prediction markets" that serve as a vehicle for bankrupting yourself by wishcasting away your life's savings by betting on every aspect of a Permanent Chud Reich, as corrupt officials make out like bandits by trading on insider information.
When America comes back (if America comes back), it will not be as the organizing platform for the world's finance, military, technology and commerce. In years or perhaps decades, America may find a new stable place in the international community. But in the meantime, it cannot be relied upon to serve as the world's hyperpower. Trump forever disqualified America from enjoying that privileged place – and just to be sure, he destroyed its capacity to even try.

The New York Times Doesn’t Understand AI’s Role in Suppressing Wages https://gizmodo.com/the-new-york-times-doesnt-understand-ais-role-in-suppressing-wages-2000836392
Into the Blueniverse https://catvalente.substack.com/p/into-the-blueniverse
Scamwich: Inside a Restaurant Delivery Payment-Skimming Campaign https://www.infohawk.com/news/2026-11-05-scamwich-restaurant-skimming
Customer or product? https://customerorproduct.org/
#25yrsago Open wifi saves traveler from hotel dial-up gouging https://memex.craphound.com/2001/11/09/i-just-wanna-say-that/
#25yrsago Why Cryptosystems Fail https://www.cl.cam.ac.uk/archive/rja14/wcf.html
#25yrsago Bruce Sterling on Pokemon https://web.archive.org/web/20050908070521/https://www.wired.com/news/audio/interviews/sterling_11.mp3
#20yrsago Fred von Lohmann’s talk at USC https://web.archive.org/web/20061110090032/https://centeronpublicdiplomacy.com/podcasts/061107_von_lohmann.mp3
#20yrsago Secret WIPO memo: rich countries to kill Broadcast Treaty, Development Agenda https://www.ip-watch.org/2006/11/07/developed-country-strategy-on-wipo-development-agenda-governance-revealed/?res=1024_ff&print=0
#20yrsago Canadian copyright czar forced to turn away industry bribes https://web.archive.org/web/20101018194506/http://www.michaelgeist.ca/index.php?option=com_content&task=view&id=1521&Itemid=125
#20yrsago Copyright explained through a wild west metaphor http://www.greglondon.com/bountyhunters/
#20yrsago Why Zune shouldn’t pay blood money to Universal https://cdm.link/universal-microsoft-screw-over-artists-set-absurd-and-dangerous-precedent-with-zune/#more-1719
#15yrsago New Fed warrantless GPS trackers discovered in the wild https://web.archive.org/web/20111110191030/https://www.wired.com/threatlevel/2011/11/gps-tracker-times-two/all/1
#15yrsago Occupy Atlanta encamps on lawn of house under foreclosure threat https://web.archive.org/web/20111109225513/https://thinkprogress.org/special/2011/11/08/363692/occupy-atlanta-encamps-in-neighborhood-to-save-police-officers-home-from-foreclosure/
#15yrsago Ben from Ben and Jerry’s serves ice-cream to Occupiers https://www.fastcompany.com/1678825/the-ice-cream-man-of-zuccotti-park-ben-cohen-on-his-work-with-occupy-wall-street
#15yrsago Identity theft marketplace sells mothers’ maiden names, dates of birth, etc https://krebsonsecurity.com/2011/11/how-much-is-your-identity-worth/
#15yrsago Policy-by-nudging unsupported by evidence, and undemocratic https://web.archive.org/web/20111112154542/https://www.newscientist.com/article/mg21228376.500-nudge-policies-are-another-name-for-coercion.html
#15yrsago Wired.com photo policy: all staff-produced photos will now be Creative Commons licensed https://web.archive.org/web/20111111051330/https://www.wired.com/rawfile/2011/11/creative-commons/?pid=1365&pageid=6275
#15yrsago “Piracy-stricken” Viacom CEO tops pay-raise charts https://www.techdirt.com/2011/11/07/viacom-decimated-piracy-its-ceo-got-biggest-raise-any-exec-anywhere/
#15yrsago Boyett’s Mortality Bridge: Rock n’ roll Dante meets Orpheus https://memex.craphound.com/2011/11/08/boyetts-mortality-bridge-rock-n-roll-dante-meets-orpheus/
#10yrsago FAA okays use of semi-autonomous drones for Disneyland and Disney World fireworks displays https://web.archive.org/web/20161110065859/http://thedisneyblog.com/2016/11/07/disney-drones/
#10yrsago Glenn Beck’s “decency” doesn’t extend to answering questions about why he was such an asshole https://wnyc.org/story/beck-changed-man
#10yrsago CBC threatens podcast app makers, argues that RSS readers violate copyright https://www.reddit.com/r/podcasts/comments/5bmzuj/cbc_are_blocking_podcast_apps/
#10yrsago Winter Denial of Service attack knocks out heating in Finnish homes https://web.archive.org/web/20161109214609/https://metropolitan.fi/entry/ddos-attack-halts-heating-in-finland-amidst-winter
#10yrsago Women are flocking to Susan B Anthony’s grave to cover it with “I Voted” stickers https://www.thecut.com/2016/11/susan-b-anthonys-grave-will-be-open-until-the-polls-close.html
#10yrsago Edward Snowden to Trump campaign: “old laptops” could vet 800,000 emails in “minutes-to-hours” https://web.archive.org/web/20161107235120/https://www.yahoo.com/news/edward-snowden-crushes-conspiracy-theory-053349259.html
#10yrsago My neighborhood realtor is determined to turn a buck on electoral eschatology https://memex.craphound.com/2016/11/08/my-neighborhood-realtor-is-determined-to-turn-a-buck-on-electoral-eschatology/
#10yrsago A history of Chinese science fiction, from 475 BC to Cixin Liu https://web.archive.org/web/20161105172922/http://mithilareview.com/wang_11_16/
#10yrsago How Audi cheated emissions tests: if (steering) then (pollute) https://www.jalopnik.com/america-figured-out-a-new-way-audi-cheated-on-emissions-1788630969/
#10yrsago Senate investigates Wells Fargo retaliations against whistleblowers https://web.archive.org/web/20161108210544/http://www.warren.senate.gov/files/documents/2016-11-03_Wells_Fargo_FINRA_Violations_Letter_Final.pdf
#10yrsago A madman has been given the keys to the surveillance state https://memex.craphound.com/2016/11/09/a-madman-has-been-given-the-keys-to-the-surveillance-state/
#5yrsago Stockholm's war on interoperability https://pluralistic.net/2021/11/09/skrota-skolplattformen/#privacy-without-monopoly
#5yrsago Right-Clicker-Mentality https://pluralistic.net/2021/11/08/tina-v-tapas/#spoilsports-r-us
#5yrsago Charlie Jane Anders' Victories Greater Than Death https://pluralistic.net/2021/11/08/tina-v-tapas/#the-chosen-ones
#5yrsago Imagining the end of capitalism https://pluralistic.net/2021/11/08/tina-v-tapas/#its-pronounced-tape-ass
#1yrago Facebook's fraud files https://pluralistic.net/2025/11/08/faecebook/#too-big-to-care

Vancouver: BC Policy Solutions Gala, Nov 12
https://bcpolicy.ca/gala/
Folkestone Writers Festival, Nov 16
https://www.creativefolkestone.org.uk/whats-on/cory-doctorow-the-internet-is-broken-now-what/
Oxford: Ministry of the Future, Nov 23
https://ministryforthefuture.co.uk/events.html
Sheffield: Reverse Centaur at Juno Books, Nov 25
https://www.outsavvy.com/event/40274/cory-doctorow-in-conversation
Virtual: Enshittification, AI, and the Future of Technology (UBC
Master of Educational Technology), Nov 28
https://met.ubc.ca/2026/09/met-speaker-series-cory-doctorow-enshittification-ai-and-the-future-of-technology/
Oxford: Bennett Oxford Symposium on Open Code in Science, Dec
9
https://www.bennett.ox.ac.uk/events/2026-bennett-institute-symposium/
Santa Barbara: UCSB Reads, Apr 29
https://www.library.ucsb.edu/events-exhibitions/ucsb-reads-2027-presents-author-cory-doctorow
Montreal: World Science Fiction Convention, Sep 2-6
https://montreal2027.ca/en
Life After AI (Brain Bar)
https://www.youtube.com/watch?v=IPPa43-n0vI
Terms of Service with Clare Duffy (CNN)
https://www.cnn.com/audio/podcasts/terms-of-service-with-clare-duffy/episodes/458ce968-af5d-11f0-b539-13ed2afe25f8
AI, Work, and Power (Software Engineering Daily)
AI, Work, and Power
https://softwareengineeringdaily.com/podcasts/cory-doctorow-on-ai-work-and-power/
AI, Corporate Power, and the Fight for Worker Control
(Plutopia)
https://plutopia.io/cory-doctorow-ai-corporate-power-and-the-fight-for-worker-control/
"Canny Valley": A limited edition collection of the collages I create for Pluralistic, self-published, September 2025 https://pluralistic.net/2025/09/04/illustrious/#chairman-bruce
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing:
"The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Fourth draft completed. Submitted to editor.
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.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):
https://mostlysignssomeportents.tumblr.com/tagged/pluralistic
"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla
READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.
ISSN: 3066-764X
Girl Genius for Monday, November 09, 2026 [Girl Genius]
The Girl Genius comic for Monday, November 09, 2026 has been posted.
Urgent: Investigate LICE's arrests of children [Richard Stallman's Political Notes]
US citizens: call on Congress to investigate LICE's arrests of children.
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: Regulation of spending on political campaigns [Richard Stallman's Political Notes]
US citizens: call on Congress to pass a constitutional amendment to allow regulation of spending on political campaigns.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
US citizens: Join with this campaign to address this issue.
To phone your congresscritter about this, the main switchboard is +1-202-224-3121.
Please spread the word.
Modi jailed leaders of Cockroach Janta Party [Richard Stallman's Political Notes]
Modi has jailed leaders of the Cockroach Janta Party, trying to crush their protest against taking millions of Indians off the voting list.
UK needs to throw off trickle-downers' rules [Richard Stallman's Political Notes]
The UK government needs to follow Keynes and throw off the trickle-downers' rules, which were designed to ensure the rich get richer.
Experiment arranged by RFK jr [Richard Stallman's Political Notes]
RFK jr has arranged an experiment which will deny thousands of babies Hepatitis B vaccine at birth, and see how many get sick.
I wouldn't quite call this experiment "Nazi", but it is leaning in that direction.
Testing of live facial recognition in London [Richard Stallman's Political Notes]
*[Testing] of live facial recognition in London [train] stations ends with a false positive and no arrests.*
Despite this failure, they want to continue the test. I suspect that the motive is not catching "offenders and people breaching court orders", but rather at catching protesters and dissidents. It certainly isn't aimed at catching people who knowingly build apartment buildings using materials create a danger of fatal fires.
Delayed attack in the 2025 Big Bad Bill [Richard Stallman's Political Notes]
A delayed attack in the 2025 Big Bad Bill will deny medical coverage to millions of Americans at of the start of 2027.
Over 80 million Americans depend on Medicaid. The new requirements were designed so that millions would fail to meet the complex requirements to stay on the rolls.
Protest planned by Cockroach Janta Party [Richard Stallman's Political Notes]
The Cockroach Janta Party planned a protest against Modi's removal of around 140m voters from the voter list.
That is over 20% of the people who voted in the last general election.
Push to delay report on greenhouse emissions [Richard Stallman's Political Notes]
Big oil exporters, and a few other countries, are pushing to delay the next world report on the status of greenhouse emissions and global heating.
I suspect that the exporters may have bought the support of a few other countries, perhaps with the help of pressure from the corrupter.
People forcibly "returned" to Bangladesh from India [Richard Stallman's Political Notes]
Modi's repressive campaign is not stopping with disenfranchisement: some who have lived their whole lives in India have been forcibly "returned" to Bangladesh.
ICJ judge Navi Pillay wins Nobel peace prize [Richard Stallman's Political Notes]
*ICJ judge Navi Pillay wins Nobel peace prize for promoting international law.*
Mental health study of British youth [Richard Stallman's Political Notes]
A study of mental health of British youth concludes that they are not pushovers or "snowflakes" — rather, mental illness diagnoses are increasing because life has become more stressful and more difficult to succeed at.
Beginning of the end or end of the beginning? [Richard Stallman's Political Notes]
Robert Reich: The Beginning of the End or the End of the Beginning?
Bully limited Ukraine's use of Starlink [Richard Stallman's Political Notes]
The bully has Ukraine's use of Starlink, making it mostly defenseless against Putin's jet-powered drones.
He has been seeking an opportunity to join Putin, over and over.
Underestimating damage likely from climate crisis [Richard Stallman's Political Notes]
A whistleblower reports that insurance companies face pressure to underestimate the magnitude of the damage likely to result from future disasters caused by the climate crisis. If disasters are indeed more damaging than expected, insurance companies could fail, and cities could become unviable.
Deportation thugs ran their car over Miguel Parra Hernandez [Richard Stallman's Political Notes]
Deportation thugs ran their car over Miguel Parra Hernandez, who had ran away from them because he was afraid they might be deportation thugs.
The driver faces possible prosecution, and LICE as usual is interfering with the investigation.
Wikipedia has a thorough explanation of the Hispanic system of personal names. Assigning Miguel Parra the single family name "Parra-Hernandez" is a confusing Anglophone modification. Since it isn't normal anyway, we are entitled to reject it. I reject it because stating both apellidos every time is a nuisance for all concerned.
Corruption is a two-way street [Richard Stallman's Political Notes]
Under the corrupter, corruption is a two-way street: magat officials drop charges against corporations, and those donate to magat campaign funds.
The canceled charges affected 205 corporations.
Commercial publication of Sally Rooney's books criminalized [Richard Stallman's Political Notes]
The UK's evidently unjust criminalization of stating support for the group Palestine Action has criminalized continued commercial publication of Sally Rooney's books in the UK. Therefore, sales have ceased, or soon will.
She could, if she wishes, distribute them at no charge via a network server outside the UK.
Department of Injustice demands deletion of voters [Richard Stallman's Political Notes]
The Department of Injustice demands some states delete names from their voter lists based on vague supposed doubts about whether they are citizens.
Voting rights defenders responded in court that federal law specifies exactly what proofs are sufficient for demanding deletion from the voter list, and the Department of Injustice it does not have the sufficient reasons.
Actually fired for lying [Richard Stallman's Political Notes]
One of the bullshitter's staff has been actually fired for lying. Will wonders never cease?
UK sanctions on products made in Israel's colonies in West Bank [Richard Stallman's Political Notes]
The UK said it will put economic sanctions on products made in Israel's colonies in the West Bank, and several other kinds of sanctions as described here.
There is a strange ambiguity in the words of the article; I can't tell whether that ambiguity was present in what Secretary Milliband actually said.
All of Israel's colonies in Palestinian territory are illegal under international law. Israel divides them into the ones Israel has officially authorized and the ones that Israel nominally considers illegal (though it winks at them anyway). When the article says "illegal settlements", I can't tell whether that refers to all of them, or only the ones that Israel labels as illegal.
Milliband's quoted words, "Settlements are illegal," suggests he means all the colonies. That ought to be the UK's policy — but I can't tell from this article. The article's "illegal settlements" suggests it is making the same distinction that Israel makes, between two kinds of colony.
Moral squalor of corrupter and his henchmen [Richard Stallman's Political Notes]
While most Democrats campaign on the most superficial level of the cost of living, Robert Reich turns attention to the moral squalor of the corrupter and his henchmen.
The increasing cost of living in the US is partly due to the increased power that billionaires have over the practices of business and government. Taking away their power and redirecting wealth away from billionaires and to the non-rich will reduce the cost of living, as a side effect. But if we focus on that, we won't strike at the root of the problem.
Snooper glasses recording audio without consent [Richard Stallman's Political Notes]
New snooper glasses were found recording audio without the user's even asking to do so.
Israeli "settlers" attacked diplomats and officials [Richard Stallman's Political Notes]
Thuggish Israeli "settlers" attacked European diplomats and officials who were visiting Palestinian territory as witnesses.
France, Belgium and Poland should respond to this with sanctions directed at the systematic violence against Palestinians in the West Bank and Gaza.
Torture of Palestinian prisoners [Richard Stallman's Political Notes]
B'tselem reports on the torture by Israeli guards of Palestinian prisoners, which became totally ingrained during 2025.
Israel's general practices of torture are well known because Israeli officials publicly boast about them. Strangely, when they release Palestinian prisoners, Israeli guards threaten to put them back in prison if they tell anyone what was done to them there. Perhaps they fear that the testimony of individual Palestinians could enable someone to prosecute individual torturers.
Here is the earlier report from 2024.
The Guardian refutes Israel's attempt to invalidate the movie NAZA [Richard Stallman's Political Notes]
The Guardian refutes Israel's attempt to invalidate the movie NAZA, which presents Israeli soldiers and officials describing how they knowingly approved war crimes.
Hunting, p04 [Ctrl+Alt+Del Comic]
The post Hunting, p04 appeared first on Ctrl+Alt+Del Comic.
Momma Raised Him Right [QC RSS v2]

he's a good boy. an idiot, but a good boy
View From a Hotel Window, 11/8/26: Nashville [Whatever]


Looks like the folks here in Nashville might be putting up a new little sports thingie.
And yes, there is construction noise! So much beeping and clattering! Not that I really noticed; once I got into my room (early check-in FTW) after a very early wake up and arrival, I lost consciousness so fast. I am adequately slept now and spending my Sunday early afternoon being lazy.
But tonight! I‘ll be at Novelette Booksellers at 6:30! You should come see me! And then tomorrow, I will be in Louisville, Kentucky for an event at Carmichael’s Bookstore. 7pm! Show up!
— JS
A while back I must have read a review of JBL Tune Flex earbuds and bought a pair. The sound was awful, almost no bass, flat, low volume. I have always been looking for earbuds that get loud. So I put them away and forgot I had them, still looking for the holy grail of earbuds. Now, a few years later, I was looking around in a drawer, pulled them out, and when I had some time to mess around I found out the problem had something to do with how I placed them in my ears. Properly placed the volume was ample and the bass was inspiring. Just took a walk with them on and I love them. I wonder which other buds I tried and gave up on too quickly?
John Gruber: "Markdown is my sole creation. Aaron Swartz was my best, by far, beta tester and the first person other than me to get excited about it." I am glad to get a concise statement about this from Gruber. And from what I recall of Aaron that sounds about right too.
Birger Schacht: Using incus for throw away VMs [Planet Debian]
For some time now I’ve been looking for a way of keeping projects I’m working on in a separate VM without much setup. There are numerous solutions to do this kind of thing using namespaces (various container technologies, firejail, flatpak, bubblewrap, …) but I wanted something that uses real virtualization. I recently stumbled upon incus and it seemed like it could be a solution to my problem. Incus is a manager for both containers and virtual machines. It is possible to create VM images that can be used as templates, meaning that other machines can then be based on them on creation. Virtual machines can be configured using “profiles”.
For my use case, I have created a profile that defines how my template image should look like. In this profile I use cloud-init to configure the template machine on startup:
config:
cloud-init.user-data: |
#cloud-config
apt:
conf: |
APT {
Install-Recommends 0;
}
package_update: true
package_upgrade: true
package_reboot_if_required: true
packages:
- file
- man-db
- bat
- eza
- git
- git-delta
- neovim
- zsh
- tmux
- curl
- ncurses-term
- hx
- nix-bin
- nix-setup-systemd
- rustup
- npm
- podman
users:
- name: user
lock_passwd: false
# mkpasswd 'incus password'
hashed_passwd: $y$j9T$p9XBP4Ox3SBUnyu.sqv5m1$f1rxcPJyVs05w./dZvIzu6.4dVWBvzu99nMBZRNlamD
groups: sudo, nix-users
shell: /usr/bin/zsh
uid: 1000
write_files:
- path: /home/user/.config/nix/nix.conf
content: |
experimental-features = nix-command flakes
permissions: 0600
- path: /home/user/.zshrc.local
content: |
export PATH="$PATH:$HOME/.nix-profile/bin"
permissions: 0600
runcmd:
- [curl, -sSfL, -o, /home/user/.tmux.conf, https://grml.org/console/tmux.conf]
- [curl, -sSfL, -o, /home/user/.vimrc, https://grml.org/console/vimrc]
- [curl, -sSfL, -o, /home/user/.zshrc, https://grml.org/console/zshrc]
- [chown, -R, user:user, /home/user/]
description: Base template for dev VMs
...
and I use a script to regenerate the template image when I want to adapt the config:
#!/bin/sh
#set -e
set -x
NAME=dev-vm-template
# adapt the profile before rebuilding the template image
incus profile edit cloud-dev-template
incus delete --force ${NAME} || true
incus create images:debian/13/cloud --vm --quiet --profile default --profile cloud-dev-template ${NAME}
incus start ${NAME}
incus wait ${NAME} agent
incus exec ${NAME} -- cloud-init status --wait || true
incus stop ${NAME}
incus publish --alias cloud-dev-template --reuse ${NAME}
This script uses the debian/13/cloud image together
with my cloud-dev-template profile to set up a
machine, configure it using cloud-init and store the
result as an image called cloud-dev-template.
To use this setup, I created a small python tool called inker that talks to the
incus
REST API. Using inker create creates a new VM
based on my template. Using inker attach attaches the
current working directory to a VM as a readonly mount. It is
possible to combine those commands like inker create | inker
attach to do those two steps in one command. inker
login logs into the VM that has the current directory
attached. This way I can create VMs that are connected to
directories on my filesystem.
I am currently playing around with this setup, but I think this
could help me to have a throwaway development machine, similar to
dev containers. I’m not
sure yet how happy I am with incus, though. I was also
looking at systemd-vmspawn, but there are still some features
missing that I would need. But I might rewrite inker
at some point to use a different backend.
Joe Marshall: Why vibe code in Lisp? [Planet Lisp]
I've been asked twice now: if the generated code doesn't matter—if the AI is doing the heavy lifting of writing the syntax—why do I vibe code in Common Lisp?
Why not target Python, TypeScript, or Java? These are mainstream languages with massive training sets. The models can generate code in them with a high degree of statistical accuracy. So why do I choose to target a niche language like Common Lisp for code generation?
There are a lot of reasons, and they all come down to the same age-old question. Why use Lisp when you could use a more popular language? The answer is that language popularity is a poor proxy for utility and expressiveness. The Lisp community has long known this - it is why we chose Lisp in the first place. Selecting for popularity is what middle managers do to ensure that they can always find a warm body to maintain the code. It is not what elite hackers do.
You don't give an elite hacker a code monkey language. I want my AI to be an elite hacker, not simply a code monkey. If I expect my AI to work at an elite level, I should give it elite tools, not a code monkey language.
Joe Marshall: RFC 6238 in Common Lisp [Planet Lisp]
I wanted to implement 2FA as per RFC 6238. This is the Time-based One-Time Password (TOTP) algorithm that is used by Google Authenticator and other 2FA apps. This was originally `vibe coded`. The vibe coding got me 80% of the way there, and I made a manual pass to turn it into a more functional style.
Feel free to use this under an MIT license.
;;; -*- mode: lisp; coding: utf-8-unix; -*-
;;; RFC 6238: TOTP (Time-Based One-Time Password Algorithm) implementation in Common Lisp
;;; This implementation provides functions to generate a
;;; base32-encoded secret, create a QR code URI for authenticator
;;; apps, and verify TOTP codes based on the current time. It
;;; adheres to the specifications outlined in RFC 6238 and RFC 4226.
;;; Dependencies: cl-base32, ironclad
(in-package "TOTP")
(defun generate-secret (&optional (length 10))
(cl-base32:bytes-to-base32 (ironclad:random-data length)))
(defun generate-qr-uri (secret email &key (issuer "JRM-Code"))
(format nil "otpauth://totp/~A:~A?secret=~A&issuer=~A" issuer email secret issuer))
(defun pack-time (time-step)
"Converts an integer time-step into an 8-byte, big-endian array as required by RFC 4226 (HOTP).
Used to construct the message payload for the HMAC-SHA1 operation."
(let ((arr (make-array 8 :element-type '(unsigned-byte 8))))
(dotimes (i 8 arr)
(setf (aref arr (- 7 i)) (ldb (byte 8 (* i 8)) time-step)))))
(defun universal-time->unix-time (universal-time)
(- universal-time 2208988800))
(defun universal-time->time-step (universal-time)
(floor (universal-time->unix-time universal-time) 30))
(defun mac->hash (mac)
"Extracts a 6-digit TOTP code from a 20-byte HMAC-SHA1 result using dynamic truncation (RFC 4226).
Takes the lower 4 bits of the final byte as an offset, extracts a 31-bit slice starting at that offset,
and returns the value modulo 1,000,000 to produce the final 6-digit integer."
(let ((offset (logand (aref mac 19) #x0F)))
(mod (logand #x7FFFFFFF
(logior (ash (aref mac offset) 24)
(ash (aref mac (+ offset 1)) 16)
(ash (aref mac (+ offset 2)) 8)
(aref mac (+ offset 3))))
1000000)))
(defun mac->hash-string (mac)
(format nil "~6,'0D" (mac->hash mac)))
(defun generate-hash-string (secret-bytes time-step-bytes)
"Performs the HMAC-SHA1 cryptographic operation using the decoded secret and the packed time-step,
then dynamically truncates and formats the resulting MAC into a zero-padded 6-digit string."
(let ((hmac (ironclad:make-mac :hmac secret-bytes :sha1)))
(ironclad:update-mac hmac time-step-bytes)
(mac->hash-string (ironclad:produce-mac hmac))))
(defun verify-totp (secret user-code &key (time (get-universal-time)) (window 1))
"Verifies a user-provided 6-digit TOTP code against the base32 secret.
Defaults to the current universal time. The :window keyword determines the allowable drift in 30-second steps
(e.g., a window of 1 checks the previous, current, and next 30-second intervals).
Returns T if the code matches within the window, otherwise NIL."
(let ((secret-bytes (cl-base32:base32-to-bytes secret))
(user-string (format nil "~6,'0D" (parse-integer (string user-code) :junk-allowed t)))
(current-step (universal-time->time-step time)))
(do ((step (- current-step window) (1+ step))
(limit (+ current-step window)))
((or (string= (generate-hash-string secret-bytes (pack-time step)) user-string)
(> step limit))
(not (> step limit))))))
Get it at http://github.com/jrm-code-project/totp/
Joe Marshall: Lisp-p [Planet Lisp]
I needed a function that could tell whether a string was a valid Common Lisp program. In theory, you could just call read on the string and see if it throws an error, but I don't want to throw random text at read. It could contain a reader macro or something nasty. It also would intern a ton of random symbols into the current package. I wanted a function that would act mostly like the reader, but not CONS any data or intern any symbols.
So I vibe coded a function that does just that. It implements the reader algorithm as a state machine but does not actually read any data. The state machine tracks the list and string delimeters and tokenizes the string, but it discards the tokens and does not intern any symbols. It just checks that the state machine is in `top level' state at the end of the string. If it returns NIL, the string is definitely going to cause an error if you try to read it. If it returns T, it does not guarantee that the string represents a valid Common Lisp program, but rather that it is not obvious that the reader will throw an immediate error.
A curious edge case is that of an unpunctuated string. The words in the string will read as a simple sequence of symbols, which is perfectly valid.
The code is in lisp-p on GitHub.
You call the function lisp-p with a string or a stream
and it will return T or NIL.
Ambiguity or clarity? [Seth's Blog]
This is a choice we rarely name.
Putting effort into how much ambiguity we can handle can define a career and give us a path forward in our social and cultural interactions as well.
Our desire for clarity is based on safety and how we think about risk. If you know exactly what to expect, you won’t be held responsible for things that feel like they’re out of your control.
Clarity pushes us to put things in a category, a predictable box, well-labeled.
Ambiguity, on the other hand, is the nature of the future. All interactions with other people, with complex systems and with what hasn’t happened yet are somewhat unpredictable.
That range of outcomes is where possibility lies.
“I’m not sure.”
“This might not work.”
“We’ll be okay.”
Pretending that the ambiguous is certain is a short-term sort of bravado that works in the movies and politics but not in real life.
For the rest of us, there’s the chance to embrace the soft edges of ‘perhaps’ on our way to make things better.
HT to Seth B.
View From a Hotel Window, 11/7/26: Cleveland Airport [Whatever]

There are bodies down there, I can feel it. But it’s certainly a change from a parking lot.
My event today, at the Hudson Library, has already happened and it was lovely. Tomorrow, I am in Nashville, at Novelette Booksellers, and the event starts at 6:30. Come say hello! Here’s the ticket information.
— JS
Dirk Eddelbuettel: prrd 0.1.0 at CRAN: Now With Real Concurrency [Planet Debian]

A new release of prrd arrived at CRAN today, and has already been built for r2u and on r-universe. The prrd package facilitates the parallel running [of] reverse dependency [checks] when preparing R packages. It is used extensively for releases I make of Rcpp, RcppArmadillo, RcppEigen, BH, and others.

The key idea of prrd is simple, and described in some more detail on its webpage and its GitHub repo. Reverse dependency checks are an important part of package development that is easily done in a (serial) loop. But these checks are also generally embarassingly parallel as there is no or little interdependency between them (besides maybe shared build depedencies). See the (somewhat dated) screenshot (running six parallel workers, arranged in a split byobu session).
This release updates internals to allow for greater concurrency.
SQLite is used as the
backend, both for the job queue (managed via the liteq package) as
well as for storing actual reverse-dependency test results. It is
well-known that SQLite copes
quite well with multiple readers. Multiple concurrent
writers are more challenging. We tended to get by via
BEGIN EXCLUSIVE pragma use, but still get occassional
issue even at a somewhat moderate concurrency levels. After some
back and forth and trying a few approaches, more recently we
established one first solution relying on very explicity (OS-level,
filesystem-based) locking via package filelock. That
worked.
We mentioned this in an
old liteq issue that had circled around the same
question with a number of posts over the years, but no resolution.
This comment seemingly awoke Gábor, and he nailed this
years-open issue with a fine pull request deploying BEGIN
IMMEDIATE and well as a loop around tryCatch to
not immediately fail. I borrowed/ported that approach to prrd and we now
have a second solution (and no longer need filelock). On a
somewhat better server with enough cores and memory, I am now
running eighteen concurrent workers—watched via three
multi-pane byobu windows. Works
like a charm without issues. At last! A big thanks to Gábor for finding another
solution, and especially that only relies on SQLite.
The release is summarised in the NEWS entry:
Changes in prrd version 0.1.0 (2026-11-07)
Concurrent operations are now supported via updated sqlite semantics borrowed with appreciation from liteq
This follows an interim solution relying on filelock use; however this later package is not needed so no increase in dependencies
Courtesy of my CRANberries, there is also a diffstat report for this release.
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.
MorphOS 3.21 released with new office suite [OSnews]
About five months after the previous release, the MorphOS team has released MorphOS 3.21. It brings the usual list of big fixes and smaller improvements, but there’s a few big ticket items in here as well.
MorphOS 3.21 introduces BasicWorks, an office suite made up of CellBasics and PageBasics. It offers document and spreadsheet authoring and loads and saves Microsoft Office and OpenOffice documents. Also new are NVMEMount, an auto-mounter for booting from and mounting NVMe partitions, and the Marbles and Cyber 3D blankers.
Graphics performance has been improved, with a faster Radeon driver on cards with little video memory thanks to GART backed bitmap transfers, quicker TinyGL texture copies, hardware accelerated antialiased text in TTEngine and much faster color SVG glyph rendering in Cairo. The Bcm43xx wireless driver has been substantially reworked, with automatic transmit rate selection, updated firmware and numerous connection fixes. PowerBook and iMac hotkeys are now fully configurable.
↫ MorphOS 3.21 release announcement
The BasicWorks office suite has been in the works for a while now, and more information on it can be found in a thread on the MorphZone forums and on the website for the spreadsheet component of the suite, CellBasics. The formula loaders and xlsx loaders are ports of open source projects, but the rest of the application is new code based on ObjectiveC++ and Cairo/Harfbuzz. It uses its own file format, but can import csv and xslsx files, so I’m assuming the same more or else applies to the word processor (but with docx, of course).
Alongside MorphOS 3.21 also comes a new release for Wayfarer, the web browser the Amiga-inspired operating system uses. Wayfarer 12.0 moves to WebKitGTK 2.52.5 (which was released in July of 2026, so it’s quite up to date), and now uses the Skia graphics library. R300-R500 Radeons will render websites with Skia-GL for some massive performance improvements, helped further along by a slew of additional performance optimisations. Adblocking has been improved as well, YouTube should work a lot better now, and much more.
The full release notes for MorphOS 3.21 give you all the details.
The port that does not exist [OSnews]
Ask any program to listen on port 0 and it will hand you a socket on port 47193…or 58037…or whatever the kernel felt like that day. Port 0 is not a port you can have. It is the number you pass when you want the operating system to pick one for you.
But a TCP header is just bytes. The destination port field is 16 bits wide, and
0x0000fits in 16 bits as well as anything else does. Nothing on the wire stops a packet from being addressed to port 0. Your tools will refuse it, your browser will block it, and your scanner’s default port list skips it, because everyone agrees it isn’t a real port.Which makes it a pretty good place to hide things, whether anyone meant to or not. So we did some TCP cowboy shit & port scanned the entire fucking internet for open ports on port 0, which uncovered some interesting unexpected findings.
↫ acidvegas
An awesome and entertaining read. Don’t skip this one.
Windows 11 27H2 might be a more substantial upgrade [OSnews]
A little tidbit of news regarding the nest major update to Windows, known as Windows 11 27H2. Apparently, it’s going to come with some more serious changes to the codebase, therefore necessitating a full operating system swap instead of a mere enablement package, much like Windows 11 24H2 was.
For those who need a refresher, Microsoft has long been rumored to be running on a three-year release cadence and for a while, it was even thought that the company would launch Windows 12 in 2H 2024. That evidently didn’t happen, as instead we got Windows 11 24H2, but it was a major upgrade, a full OS swap compared to Windows 11 23H2 and 22H2. Essentially, it looks like every three releases, Microsoft is performing a full swap with major changes in the underlying codebase, and it seems to line up with Windows 11 27H2 as well. At the moment it’s not known if system requirements will change or not.
↫ Sayan Sen at Neowin.net
Microsoft is currently testing adding support for Intel’s Advanced Performance Extensions, which should yield improved 64bit performance and reduced power consumption. It makes sense to assume this support will be coming with Windows 11 27H2, which should hopefully lead to tangible performance improvements across the board.
Also, there’s going to be a new default wallpaper. Be still my beating heart.
And this is what my long-form Markdown-based posts look like.
Flushing is a cultural center!?? [Scripting News]
This is so
heartening. America never disappeared, it just was asleep,
lulled into naivete by the dashing figure Trump cast on his TV
show, and he said some of the right things in his 2016 campaign.
Truthful things people had never heard from a candidate and wanted
to hear and wanted to believe something would be done to make it
better. I got this perspective listening to Dave Chappelle explain
it. And Trump helped us buy straight talk from candidates. We're
getting it now from the new crop of inspiring senators and
governors. Remarkable times we live in, such highs and lows.
People from NY, such as myself, saw right through him. A typical bully -- we knew these people in grade school. There are people in my freaking family who are like Trump on a personality level. They push people around, but if you stand your ground they fade away.
Well now we've gotten together -- that's all we ever had to do -- work with each other -- and remember the greatness of the country that gave a home to us or our ancestors. We have not only got a big heart but we're also collectively smart enough to know that we always need to be growing, and for that we need fresh new citizens from around the world to keep things interesting.
I grew up in Flushing, NY -- part of NYC -- which was a sleepy Queens neighborhood made up of mostly Catholic and Jewish families when I was a child. Over the years, it became more Chinese and Korean. And it now has one of the best bagel places in the city. Everything is more alive there now. Main Street is both familiar and foreign.
(Utopia Bagels, on Utopia Parkway, technically in Whitestone.)
My mother, a refugee from the German Nazis as a child, didn't like that the neighborhood was changing, but I think it's fine, it's what makes the US and NY in particular so great. And while I still love a NYC diner breakfast or deli lunch, the Chinese and Korean food in Flushing is world-renowned and very tasty.
It still freaks me out that Flushing is famous for something so totally un-Flushing!
This election was like the 2008 election on steroids. We saw the election of Obama as a turning point. It was, but after his term was over, we snapped back to our slavery roots in reaction. This year, we re-asserted our love of country, not wanting to deprive the US of the fresh inspiration of immigrants of all races and genders, faiths, and and beliefs both religious and political. And once we, collectively, saw the aftermath of our turn toward fascism said, passionately -- no way, not here. The US is a melting pot. And we're good at it.
No one knew until Tuesday whether the old America of our parents and grandparents was still here, thankfully it is.
Now we have to continue to work together, to acknowledge our differences but also celebrate what we agree on. We are a democracy. We elect leaders but it is our country. The Trumps are still struggling with that, but don't ever forget it. This is the country that works, going through a really rough period.
I wrote a post on demo.rss.chat and you can read it on BonBonWeb. Markdown and RSS 2.0. We will provide a user-level way to connect between the two, but we're still a few steps from that. Today we proved that once we have the UI for setting it up, it should "just work." Small parts loosely joined.
What the big tech companies don't get is that independent developers can come up with big ideas and if they put limits in the way of those ideas being done in their world, then they aren't the petri dish or coral reef they aspire to be.
vindarel: CSV parsing in Common Lisp, data manipulation by columns with data frames [Planet Lisp]
Parsing CSV files is a common task. What are our options? We’ll start with cl-csv, add the data-table library, and present lisp-stat’s data frames.
This is another contribution to the Common Lisp Cookbook so you should read it there as this is where it will get updates.
With a very simple dataset we could split CSV lines manually
(subseq, split-sequence,
str:split, cl-ppcre...) but when a column
contains the separator, a library starts to be useful.
And a library will be even more so to help us manipulate columns by name, to use tabular data structures, to automatically infer the columns’ types, and more.
I recommend:
cl-csvlisp-statscl-csv’s
:row-fn argument.fare-csv, or DuckDB
with cl-duckdb,
which can also ingest much more file
formats than CSV, including Excel.Table of Contents
Let’s work together with this simple CSV file,
persons.csv:
Alice,7,1
Bob,77,0
The separator is , (often the default in
libraries).
For simplicity, the file doesn’t contain a headers row.
This second file, persons2.csv, contains
headers:
name,age,lisper
Alice,7,1
Bob,77,0
The cl-csv library is on Quicklisp.
(ql:quicklisp "cl-csv")
It allows to parse data from a string, from a file, or from any stream.
It may not be the fastest, but it has a decent set of quality-of-life features.
Please go read its README, as we don’t illustrate some of its features here. For example, it supports multiline quoted data, we can set the quote character, it has good error messages (line and column number, char index), etc.
For reference, this is the function signature of
cl-csv:read-csv (C-c-s on Slime):
(cl-csv:read-csv stream-or-string :csv-reader csv-reader
:row-fn row-fn
:map-fn map-fn
:data-map-fn data-map-fn
:sample sample
:skip-first-p skip-first-p
:separator *separator*
:quote *quote*
:escape *quote-escape*
:unquoted-empty-string-is-nil *unquoted-empty-string-is-nil*
:quoted-empty-string-is-nil *quoted-empty-string-is-nil*
:trim-outer-whitespace *trim-outer-whitespace*
:newline *read-newline*
:escape-mode *escape-mode*)
To parse from a string, just use
cl-csv:read-csv:
(cl-csv:read-csv "Alice,7,1
Bob,77,0")
;; =>
(("Alice" "7" "1") ("Bob" "77" "0"))
It returns a list of lists, values are all strings.
Also use cl-csv:read-csv but give a
pathname as argument, not only the filename as a string.
(cl-csv:read-csv #P"persons.csv")
;; =>
(("Alice,7,1") ("Bob,77,0"))
What happens if you omit the #P?
(cl-csv:read-csv "persons.csv")
;; =>
(("persons.csv"))
this looks strange and no, there is no bug ;)
To parse from a stream, see the library’s documentation.
Is ; the columns separator? Use
cl-csv:read-csv’s :separator
argument, or the global cl-csv:*separator*
parameter.
For a Tab, use #\Tab.
(defparameter *csv-string* "Alice;7;1
Bob;77;0")
(cl-csv:read-csv *csv-string* :separator #\;)
;; OR
(let ((cl-csv:*separator* #\;))
(cl-csv:read-csv *csv-string*))
With cl-csv, use :skip-first-p.
However, we’ll use this row of headers as soon as we work with dataframes.
(cl-csv:read-csv "name,age,lisper
Alice,7,1
Bob,77,0"
:skip-first-p t)
So far, we got a list of lists with raw values as
strings. We can do whatever we want with them. cl-csv
has a :map-fn argument that we can use to create an
object while parsing each row.
Let’s re-use our class definition from the CLOS chapter:
(defclass person ()
((name :initarg :name :initform "")
(age :initarg :age :initform nil)
(lisper :initarg :lisper :initform nil)))
We can parse our CSV and return a list of objects at once:
(cl-csv:read-csv #p"persons.csv"
:map-fn (lambda (values)
(make-instance 'person :name (nth 0 values)
:age (parse-integer (nth 1 values))
:lisper (if (equal "1" (nth 2 values)) t nil))))
Observe that:
cl-csv provides the :row-fn parameter,
that does something with each row and doesn’t
return them. This allows us to work with large datasets.
In this example, the :row-fn function has
side-effects after each row was read and passed to it. Our
function returns a result, the mean of ages.
(let ((sum-ages 0)
(nb-ages 0))
(cl-csv:read-csv #p"persons.csv"
:row-fn (lambda (values)
(incf sum-ages (parse-integer (nth 1 values)))
(incf nb-ages)))
;; Age mean:
(/ sum-ages nb-ages))
cl-csv makes efforts to tell us where it is at its parsing. Here’s where to find the bits of information that will help us during debugging.
In this dummy example, we’ll observe cl-csv’s hints:
;; this is uncomplete CSV, parsing will raise an error:
(cl-csv:read-csv "Alice,7,1
Bob,77,0
Oh?")
;; =>
The value
NIL
is not of type
STRING
when binding STRING
[Condition of type TYPE-ERROR]
Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [ABORT] Exit debugger, returning to top level.
Backtrace:
0: (SB-IMPL::PARSE-INTEGER10 NIL 0 NIL NIL) [external]
1: ((LAMBDA (VALUES)) ("oh?"))
2: (CL-CSV::READ-CSV-WITH-READER #P"persons.csv" :CSV-READER NIL :ROW-FN #<FUNCTION (LAMBDA (VALUES)) {1203B956DB}> :MAP-FN NIL :DATA-MAP-FN NIL :SKIP-FIRST-P NIL)
Locals:
#:.DEFAULTING-TEMP. = NIL
CSV-READER = #<CL-CSV::CSV-READER LINE-IDX:2 CHARACTER-LINE-IDX:4 CHARACTER-IDX:23 "" {1203B99343}>
^^^^^ let's see more about this READER object.
DATA-MAP-FN-P = NIL
IN-STREAM = #<SB-SYS:FD-STREAM for "file /home/vindarel/cl-cookbook/persons.csv" {1203B96553}>
MAP-FN-P = NIL
#:NEW3 = #<FUNCTION (LAMBDA (VALUES)) {1203B956DB}>
#:NEW5 = NIL
#:NEW7 = NIL
#:NEW9 = NIL
ROW-FN-P = T
STREAM-OR-STRING = #P"persons.csv"
3: (CL-CSV:READ-CSV #P"persons.csv" :ROW-FN #<FUNCTION (LAMBDA (VALUES)) {1203B956DB}>)
We don’t see everything. Click or press Enter on the
CSV-READER that is on the 2nd backtrace:
#<CL-CSV::CSV-READER {1203B99343}>
--------------------
Class: #<STANDARD-CLASS CL-CSV::CSV-READER>
--------------------
Group slots by inheritance [ ]
Sort slots alphabetically [X]
All Slots:
[ ] AFTER-QUOTED? = NIL
[ ] BUFFER = ""
[ ] CHARACTER-IDX = 23 <------------ useful: character index in the file
[ ] CHARACTER-LINE-IDX = 4
[ ] DATA-MAP-FN = CL-CSV::MAP-EMPTY-STRING-TO-NIL
[ ] ENTRIES = #(#<CL-CSV::READ-DISPATCH-TABLE-ENTRY {1203B98F93}> #<CL-CSV::READ-DISPATCH-TABLE-ENTRY {1203B99033}> #<CL-CSV::READ-DISPATCH-TABLE-ENTRY {1203B990D3}> #<CL-CSV::READ-DISPATCH-TABLE-ENTRY {1203B99173}> #<CL-CSV::READ-DISPATCH-TABLE-ENTRY {1203B99213}> #<CL-CSV::READ-DISPATCH-TABLE-ENTRY {1203B992B3}>)
[ ] LINE-DATA = #()
[ ] LINE-IDX = 2 <------------- useful: line index
[ ] MAP-FN = NIL
[ ] PARSE-STREAM = #<SB-SYS:FD-STREAM for "file /home/vindarel/cl-cookbook/persons.csv" {1203B96553}>
[ ] READING-QUOTED? = NIL
[ ] ROW-FN = #<FUNCTION (LAMBDA (VALUES)) {1203B956DB}>
[ ] ROWS = #()
[ ] SKIP-ROW? = NIL
[set value] [make unbound]
Knowing the line causing an error and the file position is useful.
data-table is a library by the same authors that brings a data structure that represents our CSV data.
A data table has rows of data, associates names to the columns, and guesses columns types.
Then, we can access values by row and column names, and manipulate columns (add data, take a substract etc).
We link cl-csv and data-tables together with the system
cl-csv-data-table (defined in
cl-csv).
(ql:quickload '("cl-csv" "data-table" "cl-csv-data-table"))
You don’t need to go read its README, as it is poorly documented (only in tests).
We’ll use the second CSV file,
persons2.csv.
Let’s parse it:
(cl-csv:get-data-table-from-csv #p"persons2.csv")
;; =>
#<DATA-TABLE:DATA-TABLE {1205D151C3}>
This returns a DATA-TABLE object. What is it? We
can inspect it:
(inspect *)
The object is a STANDARD-OBJECT of type DATA-TABLE:DATA-TABLE.
0. COLUMN-NAMES: ("name" "age" "lisper")
1. COLUMN-TYPES: (STRING INTEGER INTEGER)
2. ROWS: (("Alice" 7 1) ("Bob" 77 0))
We observe:
Let’s save our result to a parameter:
(defparameter *dt* **)
Get all rows with:
(data-table:rows *dt*)
Instead of accessing a column by its index, you can access it by its name.
Use data-table:data-table-value dt &key row row-idx
col-name col-idx.
For example, what is the “name” of the first row?
(csv:data-table-value *dt* :row-idx 0 :col-name "age")
;; => 7
The library has more functions to manipulate columns and data-tables. We give them as a reference, and then we’ll see how lisp-stat does it.
data-table:number-of-rows and
data-table:number-of-columns
data-table-to-plists,
plists-to-data-table
Add columns together with (csv:add-column dt column-name
[default] [column-type] [index]).
Select columns with (csv:select-columns table
column-names) to create a new data-table.
In this example, we create a new data-table object with only 2 columns. We also inverted their order.
(csv:select-columns *dt* '("age" "name"))
;; =>
#<DATA-TABLE:DATA-TABLE {1203F88213}>
CL-USER> (inspect *)
The object is a STANDARD-OBJECT of type DATA-TABLE:DATA-TABLE.
0. COLUMN-NAMES: ("age" "name")
1. COLUMN-TYPES: (INTEGER STRING)
2. ROWS: ((7 "Alice") (77 "Bob"))
> q
overlay-region new dt :col-idx col-idx :row-idx
row-idx): “puts all values from new-dt into dt
starting at row-idx col-idx”.
make-sub-table parent :uri uri :lri lri :uci uci :lci
lci:
Make a new data table from a subset of another data-table
lci - low column index
uci - upper column index (as per subseq 1 beyond the col you want)
lri - low row index
uri - upper row index (as per subseq 1 beyond the row you want)
Write a data-table to a file (or any stream) with
(data-table-to-csv dt &optional stream)
All this is good, but today lisp-stat does this, and more.
lisp-stat is a powerful library.
Lisp-Stat provides a statistical computing engine comparable to R, Python, Julia and Matlab. Its major differentiators are a true REPL based development environment, high performance and a single binary image that can be moved through the devops pipeline in a secure, safe and manageable way.
It integrates with Jupyter notebooks, to Quarto, it can load R datasets...
It’s pretty good and actively used and developed.
It interests us for its Data Frame. You should go read its documentation ;)
Let’s load the library:
(ql:quickload :lisp-stat)
We’ll give a brief showcase. For this, we’ll go to
the ls-user package. It is “the package for you
to do statistics work”.
(in-package :ls-user)
We can read a CSV file with read-csv. This function
is actually not the one we used so far with cl-csv, it is a wrapper
around fare-csv.
So, using another separator is different, use
fare-csv:*separator*.
(defparameter *persons-df* (read-csv #p"persons2.csv"))
;; => *PERSONS-DF*
It is important we used our file persons2.csv which
contains the first row with column names.
We can start working with our data.
How do we get all names of our dataset? Simply like this:
LS-USER> (column *persons-df* 'name)
#("Alice" "Bob")
That’s already interesting, isn’t it?
Observe that: - the result is not a list, it is an array.
lisp-stat has a notation trick to access data in an even shorter
way. For this, we need to define an “environment” with
defdf:
LS-USER> (defdf persons (read-csv #p"persons2.csv"))
;; => #<DATA-FRAME (2 observations of 3 variables)>
Observe that: - we deliberately didn’t use “*earmuffs*” around “persons” - the environment already gives us information: it saw 2 rows and 3 columns.
Now, we can get all names simply with:
LS-USER> persons:name <----- you can use auto-completion, of course.
;; => #("Alice" "Bob")
all ages:
LS-USER> persons:age
;; => #(7 77)
We can inspect the shape of our data:
LS-USER> (head persons)
;; NAME AGE LISPER
;; 0 Alice 7 1
;; 1 Bob 77 0
Using another function, select, we can get all ages
with:
LS-USER> (select persons t 'age)
;; ^^^ take the age of all rows
But with select we can get a subset of values:
LS-USER> (select persons '(0 1) 'age)
;; ^^^ our subset (it's all our data lol)
;; => #(7 77)
We can get values of some columns:
LS-USER> (columns persons '(age name))
;; => #(#(7 77) #("Alice" "Bob"))
We can get a high-level description of our dataset:
LS-USER> (describe persons)
PERSONS
A data-frame with 2 observations of 3 variables
Variable | Type | Unit | Label
-------- | ---- | ---- | -----------
NAME | NIL | NIL | NIL
AGE | NIL | NIL | NIL
LISPER | NIL | NIL | NIL
This shows that the columns’ types were not inferred. Can we fix this?
LS-USER> (heuristicate-types persons)
NIL
LS-USER> (describe persons)
PERSONS
A data-frame with 2 observations of 3 variables
Variable | Type | Unit | Label
-------- | ---- | ---- | -----------
NAME | STRING | NIL | NIL
AGE | INTEGER | NIL | NIL
LISPER | BIT | NIL | NIL
Yes, now they are.
We can now manipulate columns: add, remove, rename, replace, transform... as well as rows: add, count, loop over (do-rows), map into, mask, filter...
Everything is in lisp-stat’s documentation!
We saw how to do that with lisp-stat’s head
function.
We have another solution with the cl-ansi-term library.
(ql:quickload '("cl-ansi-term"))
Its global nickname is term (warn: global nicknames
are now legacy, prefer package-local nicknames).
We use term:table to print our tabular data.
(let ((csv (cl-csv:read-csv #p"persons2.csv")))
(term:table csv))
;; =>
+-----+---+------+
|name |age|lisper|
+-----+---+------+
|Alice|7 |1 |
+-----+---+------+
|Bob |77 |0 |
+-----+---+------+
It has a few more options. With many columns, you could display only a chosen set of columns. You can style cells programmatically, etc.
Yesterday's
rollout of BonBonWeb was a great success. I think we have
actually launched a new genre of the web, based on the original web
before it was taken over by the silos. Everyone loves Markdown,
which was not news to me. It's so simple you can't hide any
michegas. And it gives writers control of the things we want control of, without miring
us in the details of CSS. And then expert web designers can create
stylesheets that work for us, and we will make it easy to add those
to your BonBon, and presumably our competitors will do the same.
Because I'm doing the initial implementations of each component of
this web, and setting the expectation of the separation power
between writers and readers, any competitor is going to have to do
the same. I learned this from podcasting. The first podcast client,
which I wrote, established OPML as the format for interchanging
subscription lists. Doing the same kind of thing here. Setting user
expectations from the start.
BTW, this is what the MD version of one of my blog posts looks like.
Poll: If we want democracy we have to have a web that isn't controlled by the big tech companies.
automake 1.20 released [stable] [Planet GNU]
We are pleased to announce GNU Automake 1.20, a stable minor
release.
Among new features is `--enable-jobserver' for compiler and linker
access to GNU make's jobserver, the delete-on-error option, and a
print-distfiles target. distcheck no longer requires TeX by
default. This release also fixes some long-standing bugs and
limitations concerning dependency tracking, lex/yacc output in
VPATH builds, Vala builds, distribution compression, and uninstall
checks. Furthermore, GNU automake has upgraded from the GNU
GPLv2 (or later) license to the GNU GPL v3 (or later) license.
I have substantial plans for the GNU Build System (`autotools') as
a whole. I intend to continue resolving old issues and
limitations, and adding new features in GNU Automake, slowly
dragging it into the future. My ultimate goal is to establish
it, once again, as the build system of choice for new software
projects while continuing to simplify maintenance and portability
for existing users. Hopefully, upcoming releases will get us
closer and closer to this goal.
-*-*-*-
There have been 104 commits by 3 contributors in the 58 days
since 1.19.
Thanks to everyone who contributed to this release!
Kamila Szewczyk (99)
Karl Berry (4)
Paul Eggert (1)
Kamila Szewczyk (szewczyk@math.uni-sb.de)
==================================================================
See below for the detailed list of changes since the
previous version, as summarized by the NEWS file.
Here is the GNU Automake home page:
https://www.gnu.o ...
oftware/automake/
Here are the compressed sources:
https://ftp.gnu.o
... omake-1.20.tar.gz (2549281 bytes)
https://ftp.gnu.o
... omake-1.20.tar.xz (1694140 bytes)
Here are the GPG detached signatures:
https://ftp.gnu.o
... e-1.20.tar.gz.sig
https://ftp.gnu.o
... e-1.20.tar.xz.sig
Use a mirror for higher download bandwidth:
https://www.gnu.o ...
rg/order/ftp.html
Here are the SHA256 and SHA3-256 checksums:
File: automake-1.20.tar.gz
SHA256 sum:
00c0e397a3c0096b1b9167eb4a5ecb87a66fe50888d939c4e02111e603936570
SHA3-256 sum:
9144e4677e65c09ecc5de762e7b97982cfe683a4e45b153a199172b11593a03e
File: automake-1.20.tar.xz
SHA256 sum:
f6f34dad4cbe395715762b0710f7c511e39bd5cf777e6b95818ccbecf7714248
SHA3-256 sum:
d5910039d860e26824074f654b1aea70d123932696d8fd0bcda531fc78652edf
Verify SHA256 with sha256sum or 'shasum -a 256'.
Verify SHA3-256 with 'openssl dgst -sha3-256 FILE'.
Use a .sig file to verify that the corresponding file (without
the
.sig suffix) is intact. First, be sure to download both the .sig
file
and the corresponding tarball. Then, run a command like this:
gpg --verify automake-1.20.tar.gz.sig
automake-1.20.tar.gz
The signature should match the fingerprint of the following
key:
pub rsa4096 2022-07-31 [C] [expires:
2036-05-11]
6C22 2EA6 B2BD 216A
A406 516A C868 F0B6 DE38 409D
uid
[ultimate] Kamila Szewczyk <k@iczelia.net>
uid
[ultimate] Kamila Szewczyk <szewczyk@cs.uni-saarland.de>
uid
[ultimate] Kamila Szewczyk <iczelia@gnu.org>
uid
[ultimate] Kamila Szewczyk <szewczyk@math.uni-sb.de>
sub rsa4096 2022-07-31 [E]
sub ed25519 2026-06-29 [S]
If that command fails because you don't have the required public
key,
or that public key has expired, try the following command to
retrieve
or refresh it, and then rerun the 'gpg --verify' command.
gpg --recv-keys 6C222EA6B2BD216AA406516AC868F0B6DE38409D
As a last resort to find the key, you can try the official GNU
keyring:
wget -q https://ftp.gnu.o ...
u/gnu-keyring.gpg
gpg --keyring ./gnu-keyring.gpg --verify
automake-1.20.tar.gz.sig automake-1.20.tar.gz
Please report bugs and problems to <bug-automake@gnu.org>
(instead of replying to this mail), and send general comments and
feedback to <automake@gnu.org>, and patches to
<automake-patches@gnu.org>.
Thanks to everyone who has reported problems, contributed
patches, and helped test Automake!
Changes from NEWS:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
New in 1.20 (2026-11-07):
- Automake is now licensed under the GNU General Public
License version 3
or later (GPLv3+), matching Autoconf and
following the Free Software
Foundation's recommendation to use GPLv3 or
later:
https://www.gnu.o ...
oftware/autoconf/
https://www.gnu.o
... ommendations.html
https://www.gnu.o
... ms-why-gplv3.html
Existing exceptions for distributed support
files remain in place.
This does not change the licensing of generated
Makefile.in files
or require packages using Automake to adopt the
GPL.
- New configure option --enable-jobserver lets compilers and
linkers
inherit GNU make's pipe jobserver, for example
for GCC's
-flto=jobserver. Dry-run, question, and
touch modes still do not
run these commands. (bug #45756)
- New option delete-on-error. It emits the
.DELETE_ON_ERROR special
target in the generated Makefile.in, instructing
GNU make to delete
the target when its recipe fails after having
modified it. A failed
rule like `foo.h: gen.sh; ./gen.sh > $@' then
no longer leaves a
truncated result that later runs of make treat
as up to date. Other
make programs do not support this, so the option
will have no effect.
- New target print-distfiles lists the files that "make
dist" would
distribute.
- Historical ChangeLogs, development plans, and NEWS-future
are now
under attic/. The experimental
contrib/tap-driver.pl is retained
in attic/testing/; the maintained TAP driver is
lib/tap-driver.sh.
The manual's link checker moved from contrib/ to
maintainer/.
- distcheck no longer runs "make dvi" by default, so TeX is
not needed
to check a distribution containing Texinfo
manuals. Set
AM_DISTCHECK_DVI_TARGET in Makefile.am to, e.g.,
dvi, pdf or html,
to check that the documentation can be
built. (bug #79053)
- Repeated target declarations in overlapping Automake
conditionals no
longer produce spurious redefinition warnings
when adding prerequisites.
(bug #13940)
- Dependencies on another target's objects in LIBADD or
LDADD are now
tracked regardless of the order in which targets
are processed.
(bug #60508)
- distcheck now detects symbolic links left in the
installation tree
after uninstall, including dangling links.
- lex and yacc output files distributed from a VPATH build
no longer carry
"#line" directives pointing to their sources
through the build-time
srcdir, e.g. "../src/parse.y"; the distributed
copies now refer to
the sources next to them. (bug #39666)
- dist-zstd now honors numeric ZSTD_CLEVEL values, such as
3, instead
of treating them as input filenames. This
fixes failed or incorrect
distribution archives when ZSTD_CLEVEL is
set.
- lex and yacc rules now create output directories before
generating
sources, fixing out-of-tree builds with
subdir-objects and
--disable-dependency-tracking.
(bug #27188,
Debian bug #807050)
- configure now refuses a source directory path containing
'<', '>',
'(' or ')'. These could be interpreted as
shell redirections or
syntax in compiler commands, potentially
overwriting files in the
build directory.
- configure now refuses a source directory path ($srcdir)
containing
';' or '|', reporting "unsafe srcdir value", as
it already did for
characters such as '$' and '&'. Such a
path used to fail later
with misleading errors, from config.status's
dependency-tracking
setup or from make ("No rule to make
target"). These characters
remain accepted when $srcdir is '.'.
- Non-recursive Vala builds now pass distcheck when
generated Vala
sources trigger recompilation in the build
directory. Generated C
files are moved into their subdirectories
together, and build-tree
stamp files are removed by distclean.
(bug #76527)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This release is based on the Automake Git repository, available
as:
git clone https://https.git
... /git/automake.git
Commit 5613ae2dbb151f73070bb576f21136e5ef5c75c1 is tagged as
v1.20.
For a summary of changes and contributors, see:
https://gitweb.gi ... =shortlog;h=v1.20
Or run this command from a Git checkout of Automake:
git shortlog v1.19..v1.20
--
With Valediction,
Kamila Szewczyk (https:// ...
elia.net)
Andrew Cater: Arm Cambridge - Mini-Debconf Cambridge - day 1 20261107 [Planet Debian]
Half way through the day:
A morning of technical talks:
Vock - Instrumenting, kernel coverage and process tracing
Rebuilding the archive on your desktop
An overview of Secure Boot
An excellent lunch - with thanks to Liv and her Arm catering
staff
Three lightning talks - two without slides :)
Excellent day so far :)
Pluralistic: JS Tan and Clarissa Redwine's "Against Tech Oligarchy" (07 Nov 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

JS Tan and Clarissa Redwine are veterans of a string of hard-fought unionization drives at tech workplaces that started with some astounding successes but ran up against ferocious resistance in the second Trump term; their book about tech labor, Against Tech Oligarchy, is a superb analysis of the challenges and potential for tech labor organizing:
https://againsttecholigarchy.com/
For decades, tech workers enjoyed extraordinary power, despite the fact that virtually no tech workers were in unions. That's because tech workers were both extremely valuable to their employers (each engineer hired by a Silicon Valley firm added about $1m to the company's bottom line) and extremely scarce.
This won tech workers very favorable working conditions, high compensation, and a great deal of control over their employers' products (because if a worker refused to work on a project, it was hard to find someone else to do the work). What's more, there has always been a sizable cohort of tech workers whose own lives were profoundly improved by access to digital networks and wanted more than anything to distribute those benefits to everyone else. I call these workers "Tron-pilled," because they fought for the user:
https://pluralistic.net/2026/04/11/obvious-terrible-ideas/#bayesian-terrorism
During the era of tech worker scarcity, few tech workers saw themselves as workers at all – rather, the tech worker's self-conception was as an entrepreneur in waiting, a temporarily embarrassed founder. Tech bosses played on this perception, promoting the idea of tech workers and managers as peers and/or family members. Tech CEOs affected hoodies and jeans and hosted company-wide meetings where they allowed engineers to pepper them with impertinent questions about the company's technical and commercial direction.
But scarcity-based power only lasts until supply catches up with demand. As the number of workers outstripped the number of jobs, bosses showed their true colors. That's what happened at Kickstarter, when one of the bosses forced out his co-founders and declared himself CEO and proceeded to override the decisions of the company's Trust and Safety team. This sparked one of tech's first unionization drives, and it was a bitter fight, with management pulling out every dirty tactic in the union-busting playbook:
https://kickstarterunited.org/oral-history/
The labor militancy at Kickstarter United wasn't an isolated incident. Workers at much bigger companies like Google and Microsoft had a long tradition of pushing back against management through internal channels, open letters, and, starting in 2018, mass walkouts:
https://en.wikipedia.org/wiki/2018_Google_walkouts
But post-Trump, bosses at these companies were much less willing to countenance dissent, and waves of vicious retaliation and reprisals radicalized many workers at these companies, driving them to more traditional, organized forms of labor activism. At the same time, workers at smaller, "mission-driven" shops like Bandcamp were inspired by the success of Kickstarter United and they started their own drives. All this attracted the interest of the "internationals" – big, established unions like the Communications Workers of America – who trained union organizers at all kinds of tech shops and started laying the groundwork for traditional union drives.
Most of Against Tech Oligarchy tells the story of these drives in a gripping you-are-there style (it helps that both of the authors are veterans of several of these campaigns). The stakes got much higher during the pandemic, of course, as tech came to play a more central role in the lives of hundreds of millions of locked-down workers, and as the tech companies themselves went on uncontrolled hiring sprees, putting workers on the payroll without any duties or responsibilities, often just to ensure that a rival company couldn't hire them.
The pandemic also prompted many tech bosses to express far more worker-hostile sentiments than they'd ever let slip in public before. Fully remote workforces both frustrated tech bosses and also significantly reduced the opportunities for in-person labor organizing. All of this built to a series of rising crescendos, such as Musk's Twitter takeover and mass layoffs, and Israel's tech-fueled genocide in Gaza. Confrontations between tech workers and bosses grew more bitter and direct, even as solidarity between white-collar tech workers and their blue-collar peers (notably Amazon warehouse workers) increased.
If all Against Tech Oligarchy did was lay out the cut-and-thrust of these labor struggles during these momentous years, it would be worth the price of admission. But it's in the final chapters that the book really distinguishes itself, because it's here that the authors embark on a pitiless postmortem of their own failed campaigns and the failures of their peers, and ask themselves what it will take to unionize tech workers.
They start with the observation that most American union organizing is built around maintaining "labor peace" (by swiftly moving to recognition and a contract) but that tech bosses are ready to wage "labor war" (through illegal union-busting and retaliation). A labor peace strategy avoids costly and dangerous risks to established unions, such as decertification of locals and expensive and bruising court battles. But for tech bosses, labor war pays off, because their workforce is transient, fragmented, and skeptical of the very idea that they are workers. They have little to no experience with unions and can barely imagine how a union might improve their working lives.
The traditional labor playbook calls for workers to quietly build their power, taking no overt action while conducting a series of personal, one-to-one conversations that contribute to an eventual quorum of workers that's large enough to win a unionization vote. This strategy is like building a bonfire, where the pieces of fuel are piled one atop the other, but not lit until the pile is done.
But in a tech shop where workers turn over frequently and work in isolated teams, often from home, this strategy fails. Workers who have been won to the union side leave or grow demoralized in their isolation. Reaching new workers is difficult, and since the whole union drive occurs in secret, new workers don't know to reach out to organizers in their shops.
For Tan and Redwine, this fact militates for a strategy that revives some of the pre-labor activism of tech workers, noisy public/private fights whenever product decisions and management conduct violate some mix of worker rights and workers' values. They see this as a way to build momentum within a shop, bringing workers off the sidelines and giving organizers chances to bring those workers into a sustained, structured labor drive.
Tan and Redwine see tech worker organizing as the frontrunners of an age of new labor militancy and labor war, of the sort that pre-dated the labor peace that arose after the passage of the National Labor Relations Act. That labor peace was the result of bosses learning that hardball tactics would be met with equally hardcore responses.
This is especially important for tech workers, whose strikes cannot inflict the same pain on their bosses as earlier industrial workers' strikes did. Digital systems are designed to operate themselves after they are built, so when the workers involved in those systems withdraw their labor, the systems continue to run, often for a very long time, before needing maintenance (this is also the lesson of Musk's mass layoffs at Twitter).
Tech bosses have metabolized this lesson, and they are increasingly willing to wage all-out war at the first sign of labor unrest, with waves of retaliatory firings. These bosses have figured out devilish tactics for constructive dismissal, like the CEO of Mapbox, who retaliated against union supporters by targeting them with "return to office" mandates that forced them to report in person to offices that were in distant states. This prompted many of these workers to quit, which spared Mapbox from even paying them a severance package.
Against this backdrop, strikes need to be seen not as a way to bring the business operations to a halt, but rather as a way to galvanize workers and bring them into the union drive. As New York Times Tech Guild organizer John Cruickshank put it, Action builds capacity for action.
This is the ethos of the Microsoft workers who have campaigned tirelessly to halt the company's participation in the genocide in Gaza. They barricaded themselves in executives' offices, livestreaming the confrontation; they disrupted Microsoft's livecast 50th anniversary celebration; and they paddled a flotilla of protest kayaks outside of top Microsoft executives' waterfront homes. All of this paid off, with Microsoft halting sales of its tools to a particularly notorious unit of the Israeli military who had been using the company's products to conduct surveillance in Gaza and the West Bank.
Tan and Redwine see these novel tactics as a rewilding of the labor movement, a return to the militant roots that led to the labor peace, but only after all-out labor war. They cite the 1934 Minneapolis truck drivers' strike, where workers invented the "flying picket" by swarming scab trucks far from the factory gates, defeating the trucks' police protection, which led to a general strike and a total victory for labor.
This is important historical context. The genteel business of getting everyone's cards signed and having the NLRB certify your union was the compromise bosses agreed to after they learned that the alternative was far worse for them. Today, it's not just bosses who've forgotten that lesson – many workers have, too. Against Tech Oligarchy aims to rekindle those old boilers and get the unstoppable labor train running again.

Every Past and Tomorrow: The Physical Landscape of AI https://www.kickstarter.com/projects/stephenvoss/every-past-and-tomorrow-a-survey-of-virginia-data-centers
Reflecting on Digital Rights Wins and Losses in Sacramento https://www.eff.org/deeplinks/2026/11/reflecting-digital-rights-wins-and-losses-sacramento
Join EFF to Celebrate the Life of Aaron Swartz https://www.eff.org/deeplinks/2026/11/join-eff-celebrate-life-aaron-swartz
Goodbye from Salon https://www.salon.com/2026/11/05/goodbye-from-salon/
#25yrsago EMI will distribute music on Gnutella
#25yrsago Photos from O'Reilly P2P Con https://web.archive.org/web/20011124163254/http://www.openp2p.com/pub/a/p2p/2001/11/05/monday_photos.html
#20yrsago Aussie Institute of Criminology calls piracy losses “self-serving hyperbole” https://web.archive.org/web/20061208043648/http://australianit.news.com.au/articles/0,7204,20713160^15306^^nbv^,00.html
#20yrsago UK airport cop: gun-shaped shirt decoration is illegal https://memex.craphound.com/2006/11/07/uk-airport-cop-gun-shaped-shirt-decoration-is-illegal/
#15yrsago Bug report: “Simultaneous cat and external keyboard input causing kernel panic” https://web.archive.org/web/20120112020023/https://lkml.org/lkml/2011/11/3/110
#10yrsago Hong Kong erupts after Beijing refuses to allow dissident lawmakers to re-take oath https://globalvoices.org/2016/11/06/street-protests-as-beijing-preempts-hong-kong-courts-with-new-interpretation-of-basic-law/
#10yrsago “Massive scale” shut-down of polling places in districts known for suppressing Black voters https://www.commondreams.org/news/2016/11/04/voting-rights-protections-gutted-polling-places-shuttered-massive-scale
#10yrsago Donald Trump’s campaign takes away his right to tweet without supervision https://www.nytimes.com/2016/11/07/us/politics/donald-trump-presidential-race.html?_r=1
#10yrsago National Guard helicopter, 7 cop cars sent to warrantlessly seize a single marijuana plant from an 81-year-old grandmother https://www.loweringthebar.net/2016/11/national-guard-one-plant.html
#5yrsago Bait and Switch https://pluralistic.net/2021/11/07/bait-and-switch/
#1yrago The enshittification of labor https://pluralistic.net/2025/11/07/postwar-social-contract/#a-defense-of-social-contracts
#1yrago The 40-year economic mistake that let Google conquer (and enshittify) the world https://pluralistic.net/2025/11/06/vertical-blinds/#invest-dont-acquire

Courtenay: Enshittification (Sid Williams Theatre Society), Nov
10
https://www.sidwilliamstheatre.com/events/cory-doctorow-talks-enshittification/
Vancouver: BC Policy Solutions Gala, Nov 12
https://bcpolicy.ca/gala/
Folkestone Writers Festival, Nov 16
https://www.creativefolkestone.org.uk/whats-on/cory-doctorow-the-internet-is-broken-now-what/
Oxford: Ministry of the Future, Nov 23
https://ministryforthefuture.co.uk/events.html
Sheffield: Reverse Centaur at Juno Books, Nov 25
https://www.outsavvy.com/event/40274/cory-doctorow-in-conversation
Virtual: Enshittification, AI, and the Future of Technology (UBC
Master of Educational Technology), Nov 28
https://met.ubc.ca/2026/09/met-speaker-series-cory-doctorow-enshittification-ai-and-the-future-of-technology/
Oxford: Bennett Oxford Symposium on Open Code in Science, Dec
9
https://www.bennett.ox.ac.uk/events/2026-bennett-institute-symposium/
Santa Barbara: UCSB Reads, Apr 29
https://www.library.ucsb.edu/events-exhibitions/ucsb-reads-2027-presents-author-cory-doctorow
Montreal: World Science Fiction Convention, Sep 2-6
https://montreal2027.ca/en
Life After AI (Brain Bar)
https://www.youtube.com/watch?v=IPPa43-n0vI
Terms of Service with Clare Duffy (CNN)
https://www.cnn.com/audio/podcasts/terms-of-service-with-clare-duffy/episodes/458ce968-af5d-11f0-b539-13ed2afe25f8
AI, Work, and Power (Software Engineering Daily)
AI, Work, and Power
https://softwareengineeringdaily.com/podcasts/cory-doctorow-on-ai-work-and-power/
AI, Corporate Power, and the Fight for Worker Control
(Plutopia)
https://plutopia.io/cory-doctorow-ai-corporate-power-and-the-fight-for-worker-control/
"Canny Valley": A limited edition collection of the collages I create for Pluralistic, self-published, September 2025 https://pluralistic.net/2025/09/04/illustrious/#chairman-bruce
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing:
"The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Fourth draft completed. Submitted to editor.
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.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):
https://mostlysignssomeportents.tumblr.com/tagged/pluralistic
"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla
READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.
ISSN: 3066-764X
Russell Brand – My Apology [George Monbiot]
I was completely wrong about him.
By George Monbiot, published on Bluesky, 7th November 2026
People have asked me how I feel about
nominating Russell Brand a “hero” in 2014.
I feel very bad about it. It must have piled on the pain for his
victims. I apologise to them.
Though there was nothing published about his crimes at the time, I should have read the signs better. I failed to do so.
I now see the political impact he had that year as yet another of his reinventions. He later reinvented himself again as a far right conspiracist. I wrote about that in 2023, a few months before The Sunday Times and Channel 4 revelations about his sexual abuse.
When the revelations emerged, I was horrified. But I should have been more alert before, and have recognised the predatory nature of his treatment of other people. He was a villain not a hero, and had been for years.
The cultural impresario has always had leverage.
Invest time and money and put on a show. Start a cable network, a book publishing company or become a concert promoter. You’re the gatekeeper, an adjudicator of status, a person who can transform people’s lives simply by amplifying and spreading ideas and allowing art to reach its audience.
Time and money were apparently the gating factors. It takes a while to turn a profit, and it’s uncertain and hard work.
Except…
New platforms and tools remove both time and money as barriers.
Penn and Teller needed their fame and the CW network to launch their cable show Fool Us. But now, anyone can start a competitor on YouTube in a weekend.
A radio pundit needed to spend years to build a syndicated network of terrestrial stations, but now you can start a podcast, in your basement, for free. In a weekend.
Gallerists don’t need galleries, and you don’t even need a building to coordinate a foster-home-based pet shelter.
So what’s the impediment?
I’m guessing that if you got the call today, you could put together your ideas for a book, or five minutes of standup or even the software you’d code.
But we don’t need the specific call. We’ve all been called.
The barrier is simple: fear. The fear of beginning and of sticking with it. The fear of succeeding (or failing). The fear of impostor syndrome. And the fear of going forward without a guarantee.
So let’s call it that. Fear is real, but fear might not be rational.
Begin.
Asahi Linux 7.3 progress report [LWN.net]
The Asahi Linux developers have put out a new report on their progress toward a Linux distribution for Apple devices.
Some time ago, we were made aware of multiple attempts to exploit our permissive licensing to hijack our work, with a direct view to replacing the project and aggressively monetising Linux on Apple Silicon. In some extreme cases, in-development feature code was being lifted straight out of our personal forks and published without attribution or lazily rewritten with LLM assistance to obfuscate its origin. The MIT licence explicitly allows this, and has no carveouts to protect against bad faith actors.As such, we made the difficult decision to begin the process of transitioning all of our repositories to the GNU General Public License version 2 or later. Going forward all Asahi Linux code will be licenced under strong copyleft licences only. Those who do not learn from history are doomed to repeat it.
Amutable Foundations: A Technical Overview [LWN.net]
Lennart Poettering, Michael Vogt, and Joaquim Rocha have put together a detailed overview of what the Amutable Operating System (AOS) and associated infrastructure will look like.
The image-based OS approach enables us to enforce some very strict but powerful security properties, which elevate the security posture of the system substantially above traditional Linux systems. Specifically, let's highlight seven major essential security properties of AOS here:
- No Shell + No SSH + No Language Interpreters. By default AOS does not install a UNIX shell, nor makes remote access via SSH available on the nodes. Moreover, we do not install any of the usual language interpreters (Python, Perl, …) by default. For most nodes a shell or interpreted language support is not required and it removes a whole class of attacks.
- Signed Images Only. On AOS only images that come with Verity data signed by a signing key listed in the Verity keyring may be activated.
- [...]
Mike Gabriel: OpenAGPS - The New Kid on the Block [Planet Debian]

There is a new project coming to Open Source Software land these days: OpenAGPS. It is not yet 100% functional, but we are working on it. It is not fully operational, yet, but we are on it.
Let me introduce OpenAGPS to you...
The domain of assisted geo location services has been left to a few big tech providers. When using GPS on mobile devices, most of us send info on our approximate device location (based on cell tower IDs seen by our devices around us) mostly to Google's SUPL service in order to facilitate a faster GNSS/GPS lock on the satellites flying above us.
Without assistance, retrieving a GNSS/GPS lock on sufficient satellites includes "finding" those satellites and once found retrieving data (in bytes/sec) from them. In some regions, this leads to waiting periods of up to 45 minutes, before a mobile devices has gained a lock on sufficient satellites (3 or more).
In Assisted-GNSS/GPS, "other" information (such as cell tower IDs) gets used to estimate what GNSS/GPS satellites are currently passing over one's location. With AGPS, the mobile devices retrieve information via a so-called SUPL server, containing two details: a list of potential satellites above and their dataframes. Esp. providing those dataframes over the device's internet connection (and not via the GNSS/GPS receiver downloading it from the satellite itself) speeds up the lock-on process of the mobile tremendously (several seconds to a few minutes).
However, for this mechanism to work, your device will share your IMSI (although not needed for AGPS), a list of cell towers around you and their signal strengths with the provider of the SUPL service, revealing your approximate position. In total, this allows SUPL providers to re-identify each mobile device and create motion profiles of each such device (and its owner). If the SUPL service is hosted by one main provider (i.e. Google SUPL), there is a lot of valuable information available to them for free that they can commercialize.
Currently, there is only one mitigation method available to hide one's location info from the SUPL server(s) at e.g. Google: using a SUPL proxy server implementation (available as OSS, provided by and used in e.g. GrapheneOS). A SUPL proxy still depends on the big tech service provider(s) for SUPL as it merely proxies SUPL requests from mobile devices through to the proprietary SUPL services, at e.g. Google, but the mobile device is being camouflaged behind the SUPL proxy in use.
OpenAGPS, on the contrary, will be a fully independent implementation from proprietary service providers, and it will refrain from collecting and commercializing end users’ data. It will be driven by individuals of the OpenAGPS community. There will likely be one central service that the OpenAGPS project plans to host and operate (the Porygon frontend/backend, OpenAGPS's GNSS Almanach service), but except from that SUPL servers can be self-hosted by individuals, companys or other communities. The requesting mobile devices' IDs will be hidden from the Porygon server (like with existing SUPL proxy implementations), so that the only centrally operated component (the Porygon Almanach server) does not know who is requesting what geo position information (and thus cannot collect such data, neither derive info about where requesting devices are located).
In addition, with a large OpenAGPS community, it is imaginable (in theory) that there will also be multiple central Almanach servers available on the internet (with parallel networks of base stations attached to each GNSS Almanach server).
Checkout the OpenAGPS architecture schematics and our website/documentation to learn more.
The OpenAGPS project is not simply a software that admins/users can install, it needs kind of a huge and global community to operate/host/house its base station network.
The challenge with providing a community-driven AGPS service on the internet is that up-to-date (real-time!) GNSS/GPS satellite position data is not available for free download. Almanach data can be obtained per region from various organisations, but then their datasets are often days to weeks old, thus too outdated. GNSS/GPS satellites are not geo-stationary, they circulate around the planet. Their position is dependent on the current date-time. A globally spanning network of GNSS/GPS base stations will do the trick here. We will need a community that harvests the needed satellite data in real time and makes it available through the Porygon Almanach server to all OpenAGPS users.
The OpenAGPS project will depend on at least one community member every ~40-50 km² to operate a so-called OpenAGPS base station: These base stations are stationary, need to run 24/7, and they will harvest GNSS/GPS statellite data information from the satellites above in real-time and share this data with the (central) Porygon server, continuously. The Porygon server will create a timestamp-dependent "map" of all seen satellites and extrapolate locations between base stations' Almanach data updates.
To make OpenAGPS a success, we need volunteers who are willing to host (actually: house) an OpenAGPS base station at their home or work place (or both). Users will only be able to use their self-hosted OpenAGPS SUPL server with their mobile devices (instead of e.g. Google SUPL), if we manage to establish sufficient coverage with those base stations in the area of interest, so that the OpenAGPS Almanach will get populated with sufficient satellite position data.
If you'd like to host/house such a base station, please get in touch and check the docs.
If you realize that you have an interest in this project and would like to improve your level of digital sovereignty in your government, organization, at your home, etc. then consider sending financial support to the project. If you want to support us, please get in touch with Raoul Kramer at BetaBreak or Mike Gabriel at Fre(i)e Software GmbH. If you are a software developer and would like to contribute to OpenAGPS, also get in touch and let us meet at FOSDEM 2027.
A huge thanks to the NLnet Foundation for funding this project's bootstrap phase. Follow-up funding has been applied for, so please keep fingers crossed!
Why are we all worked up about atomicity when applying hot-patches if we can just suspend all the threads? [The Old New Thing]
I noted that one of the concerns of the Windows hot-patching system is that the patch can be activated atomically. But why does it need to be atomic? Can’t just suspend all the threads of the process (except for the one doing the patching)? That way, nobody else can be executing a half-installed patch.
For processors with variable-length instructions (looking at you, x86), the patched instruction cannot be shorter than its replacement. This applies even if you can suspend all the threads of the process, because you might suspend a thread just as it’s about to execute bytes from what would be the second of half of the replacement instruction.
| instruction pointer |
||
| ↓ | ||
| original | XX | YY |
| patch | AA BB | |
If you were unlucky and froze the thread after it executed the
XX instruction and was about to execute the
YY instruction, and then replaced both bytes with a
two-byte instruction AA BB, then when the thread
resumes, it will execute BB as if it were the start of
a new instruction.
Okay fine, so we’ll make sure that the original instruction is at least as big as the replacement instruction, so that a frozen thread is never caught in the middle of the replacement instruction. But assuming we do that, can’t we just suspend all the threads, and then patch at will without having to worry about atomicity?
While it’s true that you suspended all the threads in the
process, that doesn’t prevent new threads from being created
in the process by a function like
CreateRemoteThread. The caller of
CreateRemoteThread can specify whether the
new thread is suspended or not, and if it chooses non-suspended (or
if it chose suspended and then decided to resume it), you now have
a live thread running in the process while you are busy trying to
patch it.
Atomicity is important so that you don’t accidentally patch code while an injected thread happens to be running it.
Bonus chatter: Now, atomicity is still not bulletproof,
because even if you manage to suspend all the threads, and prevent
new ones from being injected, you still have the case where
somebody calls WriteProcessMemory to
modify the bytes of the process while everything in it is
suspended.
And we saw earlier that
WriteProcessMemory is not atomic, so
it’s possible that a two-byte
WriteProcessMemory writes the first byte,
and then you do your atomic update of both bytes, and then the
WriteProcessMemory finishes by writing the
second byte, leaving a mishmash of your patch and the rogue
one.
On the other hand, anybody who was using
WriteProcessMemory to do code patching was
already broken because of this lack of atomicity, so we are not
introducing a new problem.
Furthermore, since the hot-patching space is reserved for
Windows Update, an outsider that uses
WriteProcessMemory to apply a hot-patch
from another process is already breaking the rules. At this point
Windows Update says, “Look, I can’t protect myself from
this, and you’re in double-unsupported territory by the time
we got here, so whatever happens is your problem.”
The post Why are we all worked up about atomicity when applying hot-patches if we can just suspend all the threads? appeared first on The Old New Thing.
Aaron Swartz's legacy lives on, but who profits from it? [Planet GNU]
November 8 is Aaron Swartz Day, when we remember a pioneer of free software and information sharing whose contributions helped shape the modern internet.
HORI made an electronic ocarina for the new Ocarina Of Time Gabe is obsessed with, good luck fuckin' finding one though. It can autoplay the traditional songs, or you can learn to play them yourself, and the game can hear you do it! It also has a headphone jack, which is a profound kindness and might save us a trip to the hospital.
Friday Squid Blogging: New Jurassic Squid Predecessors [Schneier on Security]
News story: “Scientists discover a bizarre Jurassic ‘squid’ unlike anything ever seen.”
Scientists have identified the “fattest” belemnite ever discovered, a bizarre, barrel-shaped squid relative that lived in Wyoming’s ancient seas 160 million years ago. The exceptionally rare fossils reveal a creature unlike anything previously known, potentially a predator of smaller squid-like animals and a surprising survivor of a supposedly vanished family.
As usual, you can also use this squid post to talk about the security stories in the news that I haven’t covered.
View From a Hotel Window, 11/6/26: Royal Oak, MI [Whatever]


Oh, look, it’s a church! I have one of those.
My event tonight, however, is not in Royal Oak but in the neighboring Ferndale, at 215 W, at 6:30. Come down and say hello, if you would!
Tomorrow: Hudson, Ohio, at the Hudson Library and Museum. Note that this one will be a 2pm in the afternoon, not in the evening as my events so often are.
— JS
Isoken Ibizugbe: Seeing Accessibility in Debian [Planet Debian]

Recently, I’ve been noticing something on packaging around my house that I used to glance right past: raised Braille dots on a carton of medicine, and embossed markings on a container of body cream. I’ve always known what Braille looked like, but I never paid close attention to it. Now that I’m actively working on accessibility testing for the Debian Installer, I see it everywhere.
It made me reflect on how accessibility usually enters our consciousness. In tech, we’re taught about accessibility as a best practice when designing user interfaces or web apps. But realistically, you mostly see it implemented well in massive global software, like mobile operating systems or browsers like Firefox. You rarely see accessibility features integrated into local Nigerian physical products or everyday tech. Paying attention to these details made me realize how much care goes into making sure every person is considered, and how vital that mindset really is.
My recent work with Debian has been focused on automating tests for the Debian Installer’s accessibility features, specifically validating Braille display emulation.
I started out by manually testing following the official steps on the Debian Installer Accessibility Wiki. Once I understood the manual flow, the next goal was figuring out how to automate it inside openQA.
Initially, the idea was to initialize from the bootloader by adding parameters to the Grub (GRUB=”brltty=auto”)and it should start the installation with the braille visual. However, this didn’t work, the parameters never initiated the brttyl and it was a huge blocker going back and forth. Getting brltty to talk to the test runner in that environment would have required sweeping changes across the main Debian openQA instance configuration.
Instead of pushing for complex system-wide changes on the instance, we started looking for easier alternative approaches and noted the complicated ones, when we advance in the test.
We brainstormed streaming the display output directly to a dedicated file to capture and verify the Braille virtual display output. Ultimately, nested virtualization proved to be the most easiest path forward.
You can check out the implementation details and changes in the Merge Request
As part of this work, I joined the debian-accessibility mailing list to introduce what we were building and share our progress.
The responses were encouraging. I got some feedback and suggestions and the thread also created a discussion on how accessible the installation process currently feels for blind or visually impaired users, and where they also find issues. It served as a great reminder that test suites aren’t just about passing CI checks, they’re about serving actual people who rely on these systems every day.
Videos from XDC 2026 are available [LWN.net]
Videos from the 2026 X.Org Developers Conference (XDC) are now available on YouTube. XDC was held in Toronto, Ontario, Canada September 28-30.
Google Forcing AI on Students Is BS [Deeplinks]
Google is rightfully facing blowback for forcing K-12 schools to enable AI if they wanted to keep using Google search. The company quickly backtracked and decoupled and turned off the services by default, but made it clear search will continue to be just another AI chatbot. This mandate forces an ultimatum on educators: accept generative AI or de-google your school.
Students, teachers, and parents across the U.S. are now years into an argument about how schools should respond to the growth of AI-enabled tools. Google decided to skip this debate and take this choice from schools. In August it activated AI chatbot Gemini for 150 million K-12 students on Google Classroom, leaving educators scrambling to respond. A few months later, Google introduced a new way to turn it off — but now administrators would also be turning off Google search.
Google walked this back somewhat, clarifying that Gemini, Gemini notebook, and Search will have their own controls and will be off by default. But because of Google’s broader approach to force AI on all search users, this change is still an example of a tech monopolist pushing unwanted changes into the classroom.
It’s no secret that the biggest companies in AI are operating at a huge loss, in the hope they can follow Uber’s enshittification playbook. Offer a cheap convenience at a major loss until old systems atrophy, then flip the script to reduce wages and raise consumer costs—whether that’s paying with cash or with data.
This puts Google in the odd position of an incumbent, with around 90% of search traffic. It needs to not only make good on its own AI investment, but protect its dominance from new AI tools. It’s not just enough to offer its own AI mode, it needs to turn search into AI mode, while engaging in clumsy self-preferencing that is eating its own ad revenue.
The problem with this approach is the public is split on AI, to put it mildly. Some users will welcome these changes, but the rest are stuck in an all-or-nothing bargain. Anyone concerned about the accuracy of AI overviews or their impact on click-through rates for online communities and small publishers can just deal with it. The bet is any inconvenience in switching to an alternative is enough to keep you trapped.
Google can and should offer a way to disable AI overviews. Smaller services like DuckDuckGo* and Brave search have simple and persisting AI settings which don’t require login. These services also don't mince words and make a distinction between generated AI summaries, suspected AI results, and the backend use of AI to curate links.
It’s not enough to point to opaque workarounds, either. Adding “-ai” to your Google search will usually remove AI Overview, but so will “-unicorn”. This trick isn’t meant to be an AI off-switch, it’s a quirk of how AI Overview was implemented and can change at any time. These tricks also don’t generalize well to settings for system administrators. Hacks might work for now, but everyone—including administrators—deserve clear set-and-forget controls for the tools they rely on.
De-googling your life isn’t easy, and for schools it can be even more difficult. For decades Google has gone after schools to foster life-long Google users—resulting in many institutions being deeply entrenched in its ecosystem despite data privacy concerns. That’s because schools face major switching costs when moving to a competitor. It takes more than flipping a setting—it means a lengthy contract process, staff retraining, and a cumbersome migration of past work.
The difficulty of switching makes granular controls even more essential, particularly for a hot-button issue like generative AI. Few parents would send their kids to AI-driven schools, but they may want their kids to learn tools like search as they exist outside of the classroom. However, many parents and teachers concerned with AI disrupting learning are pushing major school districts to implement temporary AI moratoriums for young students. These pauses are meant to make sure any introduction of AI fits the needs of students and is done in a way that actually makes sure educators are prepared.
But in either camp, this is a choice that must be made by schools, not Google. Teachers know more about what their students need than a trillion-dollar tech company, and this expertise should be respected in their own classrooms.
Google’s self-preferencing and desperate attempt to eventually recoup on an AI money pit must be tempered with more fine-tune controls over generative AI. It’s in Google’s own interest to stop abusing its dominance to piss off users, advertisers, and school communities. It’s also Google’s responsibility as an adjudicated monopolist.
*DuckDuckGo is an EFF donor. EFF donors do not influence our agenda or our positions.
[$] Locking down hibernation for the winter [LWN.net]
When a computer hibernates, the kernel writes the contents of memory to disk and then shuts the system down. Resuming from hibernation involves reading that data back into memory, and then having the kernel pick up where it left off. Unfortunately, the kernel does not have any way to know that the data it is reading back has not been tampered with, which is why lockdown, an optional kernel feature that attempts to prevent modifications to the running kernel, disables hibernation. Matthew Garrett, who has been working on lockdown for many years, has shared a patch set that aims to fix this problem. His solution must also protect against downgrade attacks (where an attacker reboots the computer with an older kernel version to bypass new protections), which complicates the implementation.
Seven stable kernels with fixes for three Xen vulnerabilities [LWN.net]
Hot on the heels of the previous two stable kernels, Greg Kroah-Hartman has announced the release of the 7.3.3, 6.18.62, 6.12.116, 6.6.162, 6.1.192, 5.15.225, and 5.10.274 stable kernels. Each one only contains fixes for three use-after-free vulnerabilities announced today by the Xen security team.
Two of the vulnerabilities could allow an attacker to cause a denial of service (DoS) for the entire Xen host machine with possible information leakage (CVE-2026-100080, CVE-2026-100082), and one may allow privilege escalation as well as a DoS of the host machine (CVE-2026-100081). Users should, of course, upgrade if they are using Xen.
Presenting 'Desire Lines: Encoding Queer Digital Futures' [Deeplinks]
What does the digital future look like? Who gets to imagine it, shape it, and make it real?
Building a freer, more inclusive digital age requires not only challenging systems of surveillance and control, but also making space for creativity, community, and radical imagination.
That's why earlier this year with the queer arts collective, we put out a call for submissions inviting people to explore the intersections of technology, identity, and digital liberation—whether that involved pointing the lens towards an underrepresented issue in digital justice efforts; sharing personal accounts of joy, pleasure, or sorrow under surveillance; or painting wide imaginations for our communities using technology for good instead of carcerality and doom.
And we’re excited to share that the project is now live! Desire Lines: Encoding Queer Digital Futures explores a digital world that dreams wilder and exists louder. Seven artists share their visions of digital liberation, spanning from early internet-coded yearning to escapist steamy chat rooms and seed-laced battle suits for revolution.
These essays and stories remind us that digital rights aren't just about the existence of technology and its deployment as existing in a vacuum, but instead about how tech tools are a way for people to express themselves freely, find communities, explore identities, and build spaces to exist and seek joy without fear. Too often, conversations about technology focus on innovation, efficiency, and the next big thing while overlooking the people and communities most affected by the systems being built. This project was an effort to break containment and make space for something different: a chance to imagine digital futures rooted in queer creativity, resistance, and possibility.
Together with the queer arts collective, we were excited to launch the magazine and celebrate the artists and ideas that brought it to life through our session at Mozilla Festival last week, ‘Privacy x Queer Desire,’ where we started out by co-curating a community privacy plan grounded in digital fairness before launching the magazine.
If the stories in Encoding Queer Digital Futures teach us one thing, it’s that we don't have to accept the digital future handed to us by oppressive governments and tech companies. We already have pre-Big Tech internet experiences encoded in our fondest memories that can inform our dreams for something better, and together we can build a new reality.
Read Desire Lines: Encoding Queer Digital Futures here.
Morally different form of religion [Richard Stallman's Political Notes]
As Christian Nationalists aim to seize power by cheating and to bully people to join their church, other Christians are starting to present openly a form of religion which is morally quite different.
I judge all religions to be incorrect, not based on questions of right or wrong, but as a matter of physical accuracy: squeezing any sort of gods into what we know of the universe make a bad fit.
Egyptian journalist faces terrorism charges [Richard Stallman's Political Notes]
*Egyptian journalist faces terrorism charges after entire newsroom [jailed].*
*Last week, authorities arrested six journalists from the independent fact-checking and investigative platform Matsadaash – literally meaning "don't believe" – accusing them in a statement of being unlicensed and publishing false news on behalf of the outlawed Muslim Brotherhood.*
I have no basis to judge whether Matsadaash really supports the Muslim Brotherhood in any way. I also have no basis to judge whether Matsadaash advocates terrorism, though I don't think that the Muslim Brotherhood generally does that. But I don't trust the Egyptian military government's word — or its thugs — enough to take those accusations seriously just because the rulers say so.
The Muslim Brotherhood, when it is in power, would surely practice discrimination against non-Muslims, and perhaps even worse against Atheists such as me. But the Egyptian military government does that too.
Wikipedia: Blasphemy law in Egypt
Green Party of England categorized "Zionism" as racism [Richard Stallman's Political Notes]
The Green Party of England and Wales has voted to categorize "Zionism" as racism, and call for the elimination of Israel.
Many members of the Green Party disagree with that decision, and it may split the party. That disappoints me greatly, because on issues of environment and survival, the Green Party most deserves support.
I advocate creating a democratic state of Palestine alongside Israel and for both states to recognize and protect human rights and other individual rights of all persons.
*The Guardian view on the Green party and Palestine: rejecting two states is no shortcut to peace.*
Average words a person speaks in a day [Richard Stallman's Political Notes]
A survey of various countries, repeated over time, found that people spoke an average of 16,000 words per day in 2005, but this decreased gradually to under 13,000 per day in 2019.
British "investment" in slave trade [Richard Stallman's Political Notes]
A register of British people who profited directly from the slave trade shows that this form of "investment" pervaded English, later British, business and high society for a long time.
Excuses for FBI to meddle in US politics [Richard Stallman's Political Notes]
How the FBI finds excuses to meddle in US politics and repress views that the US government disapproves of.
Arkansas firing of Iranian-American professor [Richard Stallman's Political Notes]
Political accusations pressured the University of Arkansas into firing an Iranian-American professor based on allegations of "antisemitism" and working with the Iranian government, and of course allegations of plagiarism.
The faculty committee in charge rejected the criticism, but the administration fired her anyway. Now she is suing the university.
I have seen no facts about this case except what appears in that article. So I cannot assert, of my own knowledge, that she did not engage in antisemitism, that she was not working with the Iranian government, or that she did not violate the academic standards for citing previous work. But at least as for the last of those three, I am sure the faculty committee knows those standards and studied the question.
That they voted to support her unanimously is proof enough that the plagiarism accusation is bogus. Since all three accusations are standard in the playbook for getting rid of professors who don't stick to the magat political line, I expect they are all bogus.
Parents keeping tabs on their children [Richard Stallman's Political Notes]
The more parents keep tabs on their children, the more anxious it makes them.
Thick forests in Australia [Richard Stallman's Political Notes]
When British colonists took Australia, they stopped setting fires and allowed trees to grow big and form thick forests, which enabled bigger and hotter fires. Measurements at one site document this change over time.
Mathematical results from secret LLMs [Richard Stallman's Political Notes]
Generating mathematical results using secret LLMs threatens the openness of the mathematical community.
I suggest that results that mathematicians in general can neither verify or invalidate be considered mere conjectures.
WWII sugar rationing in Briton [Richard Stallman's Political Notes]
Britons who spent their first years under the WWII sugar rationing, which lasted until 1953, tend to have better health in many ways.
Boosting right-wing views in used of TikTok, Instagram and ex-Twitter [Richard Stallman's Political Notes]
A study of the behavior of TikTok, Instagram, and ex-Twitter towards users of age 18-24 found that they boost right-wing views substantially. This survey was done in Finland, France and Romania.
Local user groups in Britain are often used to spread lies, and people pay little attention to more careful news sources.
Repression of Abdullah Ibhais's testimony [Richard Stallman's Political Notes]
Qatar and Jordan persist in repression of Abdullah Ibhais's testimony about Qatar's cruelty to workers building stadiums for the soccer world cup.
Making machine learning companies contribute to public treasury [Richard Stallman's Political Notes]
Arguing that the best way to make machine learning companies contribute to the public treasury is to tax their energy use, and the best way to pressure them to respect freedom is to make a public activity to compete with them.
I must however criticize the assumption that "adherence to copyright" is, in a blanket way, a good thing. There has been no let-up in the use of copyright as an excuse to impose control on your computers.
Proposed live stream of execution [Richard Stallman's Political Notes]
Hegseth proposes to transmit a live stream of execution.
Fascists know that inviting people to watch, from a safe distance, acts of violence is likely to make some of them crave more violence. They want to teach their followers to crave violence, as a threat against their opponents.
Food safety scandals in US [Richard Stallman's Political Notes]
Robert Reich: Due to magat corruption, food safety scandals are spreading through cooking in the US.
New idea for housing poor in UK [Richard Stallman's Political Notes]
A new idea for housing for the poor in the UK: donating unbuilt land to community groups.
Putin forces bombarding buses of civilians [Richard Stallman's Political Notes]
The Putin forces are bombarding buses full of civilians in Ukraine, killing many.
World must change way it produces food [Richard Stallman's Political Notes]
*World must change way it produces food to avoid biodiversity collapse, says WWF.* Total world populations of 5,000 wild vertebrates have declined by around 3/4, on some sort of average, since 1970. I wouldn't assign precise meaning to that figure, but it shows the magnitude of the threat humanity poses to itself.
Conference about disinformation [Richard Stallman's Political Notes]
The bully pressured various governments to drop support for a conference about disinformation.
It is not surprising that the event planned to discuss the idea of the US government as a source of disinformation, but it is distressing that the EU and Canada are afraid to acknowledge this.
Madman said Iran can take out Los Angeles or San Diego [Richard Stallman's Political Notes]
The madman said, "They (Iran) can take out a city. Let them take – let them take out Los Angeles. Let them take out San Diego. That's – this is a very small price to pay, and it's going to be over with very soon." What does this signify?
Up to the words "Let them take out San Diego", it sounded like direct encouragement for a foreign enemy of the US to destroy US cities. That's what the madman's audience cheered.
The rest of the text changes the spirit subtly. He was not wishing for those cities to be destroyed, merely saying that their destruction, implying the killing of as many as 20 million Americans, would be no great loss.
I never thought he cared
Religious hospitals denying abortions [Richard Stallman's Political Notes]
Religious hospitals in the US continue to deny women abortions, even when the denial risks causing death or permanent injury. This happens even in states such as Illinois where early abortion on demand is lawful. The staff of religious hospitals there face no legal threat if they do the abortion.
Price fixing at McDonalds [Richard Stallman's Political Notes]
McDonalds is accused in court of setting up a supposed intelligence system to enable independently owned franchises to fix prices together.
Ken Paxton favors trickle-down economics [Richard Stallman's Political Notes]
Texas Senate candidate Ken Paxton told a bunch of rich donors that he advocates trickle-down economics — cutting taxes for the rich and cutting spending for the non-rich — saying "we have no choice".
The citizens of Texas do have choices. First step: defeat him!
French know they won republic by protesting [Richard Stallman's Political Notes]
Thanks to French teaching of French history in school, French students (and French adults) know that they won their republic by protesting in the streets.
This Week in AI: The Cost of Progress [Radar]
New frontier models arrived this week as investors showed signs of growing cautious about AI spending. On the latest episode of This Week in AI, we examined those developments, along with research into how models learn and the less visible costs of AI adoption. From unequal pricing across languages to the environmental impact of data centers, the discussion raised questions about who benefits from AI progress and who pays for it.
We started with three model announcements that show how quickly AI capabilities are expanding. Google introduced Gemini 4 Carbon, designed for cybersecurity and complex, multistep tasks. France’s Mistral published the weights for its trillion-parameter Large 4 model, also known as “Le Chonk,” giving developers more control over deployment and customization, provided they have the hardware to run it. Meanwhile, Google DeepMind previewed Genie 4, a world model that simulates environments, physical interactions, and sequences of events. Unlike language models that predict text, world models attempt to predict what happens when objects and people interact. With Genie 4, researchers could train AI systems in simulated worlds, an approach that would be especially useful in robotics, where teams could test AI designed to control robots before trying it on physical machines.
Investor enthusiasm for AI appeared to weaken even as model development accelerated. Anthropic moved closer to a public offering by filing its IPO paperwork publicly, although it hasn’t announced a date or share price. OpenAI has reportedly secured about $11 billion in funding for its latest round, well below its initial $30 billion target. Those developments coincided with sharp declines in several major technology stocks, and the tech-heavy Nasdaq ended October with its worst monthly decline since March 2025.
The scale of AI spending is attracting greater scrutiny, particularly as investors wait for returns. Companies investing in AI should pay attention to more than model performance. The economics of training and running increasingly expensive models could affect pricing, availability, and which providers remain competitive.
Researchers are investigating how AI models process information, retain knowledge, and generate responses. AI interpretability company Goodfire proposed a project modeled on the Human Genome Project, committing $10 million to begin mapping how large language models work internally. By studying which patterns activate in response to prompts and how changes to those patterns affect behavior, researchers hope to better understand why models produce particular outputs.
Google Research proposed a framework inspired by human cognition that introduces a “sleep” phase. During this offline period, models would consolidate new information and generate practice examples through a process researchers call “dreaming.” The goal is to address catastrophic forgetting, when learning new information degrades previously acquired capabilities, while helping models retain knowledge beyond individual conversations. The approach remains experimental, but it offers a possible way for models to continue learning without sacrificing existing skills.
We also examined Clover, a 35-billion-parameter diffusion language model released by China’s DiffuSpace. Most familiar language models use what’s called an autoregressive approach: They generate text sequentially, one token at a time. Diffusion language models instead work on multiple parts of an answer simultaneously, refining them over successive passes. DiffuSpace reports competitive performance and faster generation on some tasks when compared to autoregressive models of similar size. Alongside Goodfire’s and Google’s research, this work suggests that improvements in AI may increasingly come from rethinking how models learn and generate outputs rather than simply making them larger.
Research into the “tokenizer tax” revealed how AI pricing can disadvantage people who speak less widely represented languages. Researchers found that some languages require substantially more tokens than English to express the same message. In one example, the Malayalam translation contained slightly fewer characters than the original sentence in English, yet it required twice as many tokens: 26 compared with 13. Because AI providers commonly charge by token, these differences can translate into higher costs for users, particularly in communities where AI services may already be less affordable. Developers building multilingual applications need to consider tokenization efficiency alongside model quality.
In Finland, authorities are investigating Google’s clearing of more than 400,000 trees for planned data centers. The investigation centers on whether the company completed required environmental assessments before clearing the sites. The case shows why environmental reviews need to happen before land is cleared or construction begins. Once that happens, regulatory action can’t immediately restore the affected ecosystem.
Finally, several AI companies said they plan to honor a shared website opt-out signal that would let publishers indicate that their content shouldn’t be used for AI model training. The proposal could give website owners more control over future data collection, although participation remains voluntary. It can’t reverse the use of material already collected for training, and the standard will only help if AI companies follow the instructions publishers provide.
This week’s developments show why evaluating AI progress requires more than tracking model releases and benchmark scores. We need to understand how systems learn, whether their economics are sustainable, and how their costs affect people and communities. As more businesses and individuals adopt AI, those considerations will become harder to ignore.
We’ll be back on Monday, November 9, for another episode covering the latest developments in AI research and applications. You can catch previous episodes on YouTube, Spotify, Apple, or wherever you get your podcasts.
Steve McIntyre: Geeks hacking in Cambridge... [Planet Debian]

We're at the Arm office in Cambridge for fun conversations and Debian hacking, as part of this year's mini-DebConf. Here's some geek pron... :-)
![]()
![]()
Massive thanks to the Arm folks for making us welcome: Steve Capper and especially Charlie Dixon for going above and beyond to set things up for us!
![]()
Screenshot of today's posts viewed in a different style sheet.
EFF Submission to OHCHR Consultation on Child Rights and Safety in the Digital Environment [Deeplinks]
“The safety of young people in the digital environment cannot be assessed without also considering the safety of young people in offline environments. For millions of young people around the world, the digital environment is their safe place, their haven from an unsafe physical environment, community, or family situation. The digital environment may be the best, perhaps only, place for them to find critical safety information and community, to explore ideas that are controversial in their families and larger physical environments, and to otherwise nourish their personal autonomy.
“For these young people, regulatory efforts that limit their access to online services or to certain features they find valuable, make their lives, in total, less safe, even if there has been some marginal safety benefit to their digital environment.
“The OHCHR must thus consider the whole of young persons' lives in any recommendations that come out of this process and not treat ‘safety, physical or mental health, and rights in the digital environment’ as disconnected from safety, physical or mental health, and rights elsewhere.”
So begins EFF’s submission to the global Call for Inputs on Child Rights and Safety in the Digital Environment conducted by the United Nations Office of the High Commissioner on Human Rights. The OHCHR is preparing a report on the issue to be presented to the UN Human Rights Council at its 64th session in the first quarter of 2027. The Human Rights Council requested the OHCHR to solicit input from a wide range of stakeholders, including child and youth perspectives, and convene five regional consultations to assess the risks to the safety of the child in the digital environment and best practices to address these risks in different geographical areas, bearing in mind current and emerging business models.
The OHCHR acknowledges that young people today navigate a digital environment with both “unprecedented opportunities” and “serious and evolving risks,” and sets out a rights-based framing whereby “Children's 'safety' is therefore addressed through the full framework of their rights — with freedom from violence (Art. 19) and protection from exploitation and abuse (Arts. 34–36) as clearly defined obligations, situated alongside privacy (Art. 16), access to information (Arts. 13 and 17), expression (Art. 13), participation (Art. 12), and development (Art. 6). Protection and the full range of children's rights are understood as reinforcing rather than competing imperatives, and measures taken in the name of safety must not be used to restrict the enjoyment of other rights, such as the right to privacy and the right to participate.”
In light of this, EFF’s submission focused on the current general disregard for young people's speech and privacy rights by regulators around the world, all of whom seem far more interested in empowering parents rather than young people themselves, or meaningfully involving young people in the regulatory process. We emphasized the human rights-centered uses young people make of social media that were not specifically set out in the concept note. We also explained that too often, policy proposals aiming to remedy the issues of online safety for young people introduce limitations on access to online services and content rather than tackling the specific problems that people experience.
More specifically, our submission looks at:
The internet is where young people learn, find community, explore their identities, access important information, and express themselves. Curtailing these opportunities doesn't make them safer. And requiring everyone to hand over sensitive personal information just to access online spaces creates privacy risks for all users.
As the OHCHR has acknowledged, the solution to the issue of online safety should not require a choice between protecting young people from danger or protecting their rights. Instead of restricting access, governments should focus on the systems that create these risks in the first place; tech companies must be accountable for their design choices, data practices, and surveillance-driven business models; and young people need to be included in the decisions that affect them.
Read our full submission here.
Free Software Directory meeting on IRC: Friday, November 20, starting at 12:00 EST (17:00 UTC) [Planet GNU]
Join the FSF and friends on Friday, November 20 from 12:00 to 15:00 EST (17:00 to 20:00 UTC) to help improve the Free Software Directory.
Free Software Directory meeting on IRC: Friday, November 13, starting at 12:00 EST (17:00 UTC) [Planet GNU]
Join the FSF and friends on Friday, November 13 from 12:00 to 15:00 EST (17:00 to 20:00 UTC) to help improve the Free Software Directory.
Cybersecurity & machine learning: Preparing for an unpredictable future with Sean O’Brien and Mike Wilkes [Planet GNU]
November 13, 2026 at 13:30 EST.
Pinpointing Location of Videos from Background Airplane Sounds [Schneier on Security]
This is fascinating:
The video describes a technique that can reveal where an otherwise unidentifiable recording was made by analyzing its audio for the faint sounds of passing aircraft. The technique is both fascinating and frightening.
It works by looking at Doppler curves, which plot the way a plane’s sound changes as it passes overhead because of the Doppler effect. This is the same familiar Doppler effect that causes the frequency of a siren to rise as it approaches and then fall as it passes by and moves away. More generally, it’s the phenomenon whereby the frequency of a wave perceived by an observer changes when the observer and the source of the wave are moving in relation to one another.
[…]
It’s sound that’s relevant here, though, and specifically the sound of aeroplanes. Early in his video, Colsto brings up a map of the flights that were in the air at the time the video he’s tracing was recorded. Much of this information is publicly available. Aircraft equipped with Automatic Dependent Surveillance–Broadcast (ADS-B) transmit data about their position, velocity, and altitude, which flight-tracking services collect and make available to the public. While not every plane is tracked, the system provides an enormous amount of information about aircraft movements.
Good morning and welcome to my idea of a new web.
You'll be hearing a lot about this, it's a prototype for the web of
Markdown, aka the Writers Web or BonBonWeb, and it'll probably get
a few more names pretty soon. And all the tools you've seen me
writing and releasing in 2026 play a role here, including RSS.chat and FeedLand. It's
all one big new web that is easy to write for and even easier to
read. It's the writersweb I've been talking about for so long, and
textcasting, and every part
is replaceable. Every part. There will be no silos here.
It's my last big contribution to the world I believe in, one where
software's value is expressed only in terms of price, performance
and functionality. I have a funny feeling all your social network
software will jump on this bandwagon before too long, and with your
help that can happen. All you have to do is use it. I often do a
screenshot
of a new product on its opening day.
I'm going to post lots of links to my demo page, and on scripting.com. Example, here's a link to the Scripting News home page in Bonbon.
Now I know this can be confusing. That's because it's tough to make a web browser that runs inside another web browser. Bonbon, the full product, is itself a web browser, the demo let's you zoom around the BonBonWeb inside of a Chrome-like browser, one that's looking for HTML files instead of Markdown files, as BB does. When you use the full product, there will be no such confusion. It has a bookmarks menu and a history menu. You can put links in the browser chrome. You can view source, pretty anything you would want to do in an earlier browser works in BB. Thanks to Claude we were able to do endless experimentation. Not quite ready to release, but really soooon.
There will be comments in BonBonWeb. How will that work? You can see in demo.rss.chat. Not hooked up yet, but that's the plan.
Now in BonBonWeb, the content has no say in how the text is
displayed, that belongs to the reader. You can play with that with
the A icon next to the address box. When you click the A, a dialog
pops up with three choices: Basic, Book, Classic, Mono and
Newsprint. I had Claude on the web work with me on this set, for
some reason it's better at graphic design than Claude code is. As a
writer, I want control of the words, and to be able to use italic
and bold, include links, lists with bullets and numbers, etc --
basically the features of web writing that were excluded from
Twitter-like systems. I want those back. But I am a writer, and
don't have an opinion on how CSS should be used. We all have
different moods and preferences. There's a simple version of this
in my iPad using iOS, and I use it all the time to filter out all
the nonsense websites try to add to my reading experience. In
BonBonWeb, we do all the filtering. Same with JavaScript. The
content is meant to be read, not to be the user interface of an
app.
Who do I think I am to create a web that works so differently? Just a developer with an idea.
Why do they have repos that are handling thousands of agents pushing into a single repository at once.
Vincent Bernat: Scriptable GeoDNS: leaving AWS for Bunny [Planet Debian]
To optimize the performance metrics of this blog, I relied on Amazon CloudFront to serve the assets,1 and Route 53 for the geo-aware DNS2 to direct readers to the closest host serving the content. But Route 53 is expensive: US$0.50 per zone per month, US$0.70 per million geolocation queries, and US$0.75 per healthcheck per month, plus US$1 per month for the KMS key needed to sign zones with DNSSEC. When I discovered that Bunny DNS is almost free for up to 500 domains and features scriptable answers, I made the jump! Plus, it's a European company based in Slovenia.
Bunny.net
started as BunnyCDN in
2015. They added IPv6 support in 2017. Switching
was uneventful. I don't bring a custom domain: I serve the content
from the b-cdn.net domain. As I depend on content
negotiation to serve AVIF and WebP
images, I configure the CDN to cache each image format
separately.
I disable logging to avoid collecting personal information. While the bunny.net GDPR page promises they anonymize data, it is unclear what CloudFront keeps in its own logs when logging is disabled.
The only downside of the bunny.net CDN offering is the lack of HTTP/3. I asked their support: two minutes later, they answered they are working on it but have no ETA to share.
Bunny.net introduced their DNS offering in 2022 and recently reduced its cost to almost zero. They support geographical routing, but a very cool feature is the scriptable DNS: it runs a piece of user-supplied JavaScript on each query to compute the answer.
I run seven small NixOS virtual machines to host this blog around the world: Paris, Nuremberg, Ashburn, Singapore, San Jose, São Paulo, and Sydney. Bunny's scriptable DNS lets me return the IP addresses of the two nearest servers. The browser falls back to the second server if the first one is down.
const servers = [
{
ipv4: "45.90.160.60",
ipv6: "2a0c:8881:5:100::1",
latitude: 48.88,
longitude: 2.22,
},
/* […] */
{
ipv4: "139.180.162.114",
ipv6: "2001:19f0:5800:1855:5400:6ff:fef0:4c0a",
latitude: -33.87,
longitude: 151.21,
},
];
const families = { A: "ipv4", AAAA: "ipv6" };
const records = { A: ARecord, AAAA: AaaaRecord };
export default function handleQuery(query) {
const type = String(query.request.queryType).toUpperCase();
const family = families[type];
if (!family) return [];
// Get user location
const location = query.request.geoLocation;
// Build a list of candidates
let candidates = servers.map(
(s) => new Server(s[family], s.latitude, s.longitude, 100),
);
// Select the two closest alive servers
const selected = [];
while (selected.length < 2) {
const server = RoutingEngine.getClosestServer(candidates, location, true);
selected.push(server);
candidates = candidates.filter((s) => s.ip !== server.ip);
}
// Return their IP addresses
return selected.map((s) => new records[type](s.ip, 3600));
}
The above script relies on the RoutingEngine.getClosestServer()
helper, which returns the closest alive3 server to the
user.4 Thanks to Doggo, we can
check it works as expected, at least for A:5
$ doggo --gp-from="Amsterdam" A vincent.bernat.ch
LOCATION NAME TYPE TTL ADDRESS
Amsterdam, NL
vincent.bernat.ch. A 3600s 45.90.160.60
vincent.bernat.ch. A 3600s 116.203.18.48
$ doggo --gp-from="Texas" A vincent.bernat.ch
LOCATION NAME TYPE TTL ADDRESS
Houston (TX), US
vincent.bernat.ch. A 3600s 5.161.44.145
vincent.bernat.ch. A 3600s 149.28.219.155
The most annoying drawback of this method is that a user from Buenos Aires gets both São Paulo (1000 mi, 30 ms RTT) and Ashburn (5200 mi, 140 ms RTT). Most resolvers randomize the order, so the user may pull the web page from Ashburn. We could return only the nearest server—and swap the scripted record with the built-in geographic routing instead. But if the server becomes unavailable, the browser has no alternative until the DNS cache expires. It leaves a short window of unavailability, even with a short TTL.
The HTTPS DNS record, defined in RFC 9460, solves both the availability and the latency issues. Modern browsers query this record to get additional information to reach an HTTP server, including an alternative port and the application layer protocol—HTTP/2 or HTTP/3. Each record has a priority. We can ask browsers to contact the nearest server first and fall back to the next one if the first is unavailable:
vincent HTTPS 1 first.geo alpn="h3,h2"
vincent HTTPS 2 second.geo alpn="h3,h2"
vincent HTTPS 3 . alpn="h3,h2"
; Bunny DNS must provide the two closest servers as "first.geo"
; and "second.geo" with geographic or latency routing.
first.geo A 45.90.160.60
first.geo AAAA 2a0c:8881:5:100::1
second.geo A 116.203.18.48
second.geo AAAA 2a01:4f8:1c0c:5eb5::1
vincent A 45.90.160.60
vincent A 116.203.18.48
vincent AAAA 2a0c:8881:5:100::1
vincent AAAA 2a01:4f8:1c0c:5eb5::1
This looks like the ideal solution! Unfortunately, Chrome
ignores any record whose
target is not ., hence the last record at
priority 3. Moreover, unlike with a CNAME, Bunny DNS
does not return the IP addresses for first.geo and
second.geo in the additional section. The resolver
needs to send a first request to get the HTTPS record,
and a second to resolve first.geo.
HTTPS records are still too new for this use case. Back to the drawing board! 📐
As a compromise, the script returns the two nearest servers if they are at a similar distance from the user. Otherwise, it returns only the nearest one with a lower TTL of 2 minutes.
export default function handleQuery(query) {
const location = query.request.geoLocation;
let candidates = servers.map(
(s) => new Server(s.ipv4, s.latitude, s.longitude, 100),
);
// Select the two closest servers
const selected = [];
while (selected.length < 2) {
const server = RoutingEngine.getClosestServer(candidates, location, true);
selected.push(server);
candidates = candidates.filter((s) => s.ip !== server.ip);
}
// Compute the distance to the user for each of them
const [first, second] = selected.map((s) =>
GeoDistance.calculate(s, location),
);
// If the second one is at twice the distance and at more than 1000 miles
// from the first, return only the first one with a TTL of 2 minutes.
if (second > 2 * first && second - first > 1000) {
return [new ARecord(selected[0].ip, 120)];
}
// Otherwise, return both with a TTL of 1 hour.
return selected.map((s) => new ARecord(s.ip, 3600));
}
We can check it with Doggo. From Chicago, we get only the Ashburn server with a TTL of 2 minutes, while from Mexico, we get both Ashburn and San Jose.
$ doggo --gp-from="Chicago" A vincent.bernat.ch
LOCATION NAME TYPE TTL ADDRESS
Chicago (IL), US
vincent.bernat.ch. A 120s 5.161.44.145
$ doggo --gp-from="Mexico" A vincent.bernat.ch
LOCATION NAME TYPE TTL ADDRESS
Queretaro, MX
vincent.bernat.ch. A 3600s 5.161.44.145
vincent.bernat.ch. A 3600s 149.28.219.155
$ doggo --reverse 5.161.44.145 149.28.219.155
NAME TYPE TTL ADDRESS
145.44.161.5.in-addr.arpa. PTR 7187s web05.luffy.cx.
155.219.28.149.in-addr.arpa. PTR 3600s web07.luffy.cx.
Note
On the live page, the map below is interactive: point at a location to get the DNS answer, or disable servers to see how the answers change.
The
complete code is a bit more complex. It works around
RoutingEngine.getClosestServer() supporting only IPv4,
and it handles the case where there are not enough alive servers to
build an answer.
Bunny.net has a comprehensive Terraform provider. I leverage CDK Terrain to build the target state in TypeScript and OpenTofu to deploy it. Have a look at "Managing infrastructure with Terraform, CDKTF, and NixOS" for more details.6
Route 53 covered one additional use case of mine: serving
acme.luffy.cx to solve DNS-01 ACME challenges. Unlike Route
53, Bunny DNS cannot restrict access to a single zone with a
fine-grained access policy. As this usage requires neither high
availability nor low latency, I replaced Route 53 with Hickory, a
memory-safe DNS server written in Rust. It supports automatic DNSSEC
signatures and dynamic
updates. Its configuration is simple:
[[zones]]
zone = "acme.luffy.cx"
zone_type = "Primary"
[zones.stores]
allow_update = true
type = "sqlite"
journal_path = "acme.luffy.cx.sqlite"
zone_path = "acme.luffy.cx.zone"
# Private key to sign the zone with DNSSEC. Generated with:
# openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256
[[zones.keys]]
algorithm = "ECDSAP256SHA256"
key_path = "/etc/hickory-dns.acme.luffy.cx.pem"
# TSIG key to sign zone updates. Generated with:
# openssl rand 32
[[zones.stores.tsig_keys]]
algorithm = "hmac-sha256"
key_file = "/etc/hickory-dns.acme.luffy.cx.update.acme.luffy.cx.tsig"
name = "update.acme.luffy.cx."
The provided zone file only seeds
the database on first start. I delegate DNS-01 challenges to this
zone with CNAME records:
_acme-challenge CNAME bernat.ch.acme.luffy.cx.
_acme-challenge.vincent CNAME vincent.bernat.ch.acme.luffy.cx.
Lego, the ACME client I use to get certificates from Let's Encrypt, answers the DNS-01 challenge by pushing entries with the DNS UPDATE protocol.
Unfortunately, Bunny DNS cannot publish a DS record
in a zone.7 I need one to secure
the acme.luffy.cx zone and certificate delivery.
Therefore, I host the luffy.cx zone on deSEC,8 a free DNS hosting
service run by a non-profit organization based in Berlin. I derive
the DS record to publish in luffy.cx from
the DNSKEY record of acme.luffy.cx:
$ ZONE=acme.luffy.cx
$ dig @nsupdate.luffy.cx $ZONE DNSKEY +noall +answer \
> | dnssec-dsfromkey -a SHA-256 -f - $ZONE
acme.luffy.cx. IN DS 55628 13 2 4946E7508F20E15F1B577A231104B029A1A82E04699A80CD46ADCE31227EE81F
Overall, I am quite happy with the switch to bunny.net.
There are still a few rough edges, like the inability to publish
DS records, the lack of HTTP/3, and the IPv4-only
RoutingEngine.getClosestServer() helper. The bill went
from US$5 per month to US$1. So far, performance is on par with AWS, but I
only finalized the current setup, including the server in Sydney,
in late October. I need a bit more time to gather more data, and
I'll post a short update. 📈
Update (2026-11)
This post was briefly discussed on Hacker News and Lobsters.
I had been hosting media assets on CloudFront since 2011. ↩
Route 53 had served bernat.ch since December 2021.
I didn't use healthchecks as they were too expensive. I didn't host
most of my zones there either, as queries for
haproxy.debian.net alone would have cost me around
US$10 per month. ↩
A server is alive if it answers an ICMP ping. The bunny.net documentation gives more details about the checks. ↩
The user queries Bunny DNS through a resolver. Usually, either the resolver is close to the user, or it exposes the user's subnet through EDNS client subnet. ↩
Don't use this script as is:
RoutingEngine.getClosestServer() only works with IPv4.
The
final script works around this limitation. ↩
The article is a bit outdated. CDK Terrain replaces CDKTF, OpenTofu replaces Terraform, and I now use Colmena instead of NixOps. ↩
I contacted bunny.net support to ask when they will
support publishing a DS record and got an answer seven
minutes later: they don't know. 😭
This is a bummer, as they support automatic CDS, a
DNS record to advertise a DS record to the parent
zone. They handle one side of the delegation, not the other.
I also reported a bug with the proof of non-existence, and they replied a day later with a detailed answer. ↩
Why not use deSEC for ACME challenges? You can limit its tokens to a single RRset. I could say I prefer to self-host, but the truth is I only discovered this while writing this article. ↩
Security updates for Friday [LWN.net]
Security updates have been issued by AlmaLinux (cockpit-files, container-tools:rhel8, delve, gcc-toolset-12-binutils, gimp:2.8, glibc, go-toolset:rhel8, kernel, libfastjson, mariadb:10.3, mod_auth_openidc:2.3, mysql:8.0, php:8.0, pki-core:10.6 and pki-deps:10.6, squid:4, tang, tesseract, thunderbird, and virt:rhel and virt-devel:rhel), Debian (chromium, ntfs-3g, puppet-agent, and trapperkeeper-authorization-clojure), Fedora (freerdp, goose, gpsd, hatch, perl-HTTP-Headers-ActionPack, perl-MIME-tools, perl-Plack, perl-Starman, proftpd, python-mistune, ruby-build, rust-crypto-bigint, rust-ctutils, rust-elliptic-curve, rust-num-bigint, rust-num-bigint0.4, rust-num-modular, rust-num-modular0.6, rust-num-prime, rust-zmij, rust-zstd, rust-zstd-safe, rust-zstd-safe7, rust-zstd-sys, rust-zstd0.13, scribus, sofia-sip, tailscale, tor, and wordpress), Oracle (cockpit-files, delve, firefox, gimp:2.8, kernel, and osbuild-composer), Red Hat (delve, git-lfs, go-toolset:rhel8, grafana, ignition, opentelemetry-collector, osbuild-composer, python-pillow, and yggdrasil), Slackware (openssh), SUSE (bind, brotli, cpupower, expat, fuse-overlayfs, go1.26, google-guest-agent, helm, ibus-typing-booster, kernel, kyverno, libmodplug-devel, librsvg, libX11, nvidia-open-driver-G06-signed, owntone, parted, perl-Cpanel-JSON-XS, perl-Text-CSV_XS, php8, python-Brotli, regclient, roundcubemail, rsyslog, and tomcat), and Ubuntu (ca-certificates, frr, haproxy, linux-nvidia-7.0, linux-nvidia-bos, linux-nvidia-tegra, and nginx).
How to Get Signed & Personalized Books From Me For the Holidays, 2026 Edition [Whatever]


We’ve come to that time of the year again, where folks begin to think about their holiday gift giving, and at least some of you think about books as the perfect gift. Well, they are! But would make them even more perfect is getting those books signed and personalized. Every year I join forces with Jay and Mary’s Book Center in Troy, Ohio, to sign and personalize books so that you’ll have them available to give to the people you love, including yourself.
From today (Nov. 6) through Friday, December 4, you can order books I have written from Jay and Mary’s and I will come in and sign them for you, and then the bookstore will ship them to you (US only). I strongly encourage you to get your orders in early, so there are no delays in shipping the books to you this holiday season.
Here’s how to do it!
1. Call Jay & Mary’s at their number (937 335 1167) and let them know that you’d like to order signed copies of my books. Please call rather than send e-mail; they find it easier to keep track of things that way.
2. Tell them which books you would like (For example, Monsters of Ohio ), and what, if any, names you would like the book signed to. If there’s something specific you’d like written in the books let them know, but for their sake and mine, please keep it short. Also, if you’re ordering the book as a gift, make sure you’re clear about whose name the book is being signed to. If this is unclear, I will avoid using a specific name.
3. Order any other books you might think you’d like, written by other people, because hey, you’ve already called a bookstore for books, and helping local independent bookstores is a good thing. I won’t sign these, unless for some perverse reason you want me to, in which case, sure, why not.
4. Give them your mailing address and billing information, etc.
5. And that’s it! Shortly thereafter I will go to the store and sign your books for you.
Again, the deadline for signed/personalized books for 2026 is December 4. After December 4 all Scalzi stock will still be signed and available, but I will likely not be able to personalize.
Also, this is open to US addresses only. Sorry, rest of the world. It’s a cost of shipping thing.
What books are available?
CURRENT HARDCOVER: The current hardcover is Monsters of Ohio. There might be hardcovers of When the Moon Hits Your Eye and The Shattering Peace, both of which came out last year, but you should inquire because stock on those would be limited.
CURRENT TRADE PAPERBACK: As of now, all seven books the Hugo-winning Old Man’s War series (Old Man’s War, The Ghost Bridages, The Last Colony, Zoe’s Tale, The Human Division, The End of All Things, The Shattering Piece) are available in trade paperback with matching cover treatments, so if you wanted to give those seven books as a gift, they are all now a matching set. Other books in trade paperback: When the Moon Hits Your Eye, Starter Villain, The Kaiju Preservation Society, The Android’s Dream, Agent to the Stars and Fuzzy Nation, Redshirts (the 2013 Hugo Award winner), Twenty-First Century Science Fiction (which features a story of mine), Metatropolis (which I edited and contribute a novella to) are all also available in trade paperback format. Also available: Robots Vs. Fairies, the anthology that features the story of mine that was adapted for the “Three Robots” episode of the Netflix animated series Love, Death and Robots.
CURRENT MASS MARKET PAPERBACK: The Mass Market Paperback format is being phased out and stocks of it will become increasingly scarce over time (and the series I have in the format will migrate to trade paperback format eventually). That said, at the moment both my Interdependency series (The Collapsing Empire, The Consuming Fire, The Last Emperox) and my Lock In series (Lock In, Head On, companion novella Unlocked) are still available for purchase.
CURRENT NON-FICTION: Your Hate Mail Will Be Graded (essay collection, Hugo winner).
AUDIOBOOKS: The Kaiju Preservation Society, The Last Emperox, The Consuming Fire, The Collapsing Empire, The Dispatcher, The End of All Things, Lock In, Head On, The Human Division, Redshirts, Fuzzy Nation, The God Engines, Metatropolis and Agent to the Stars are all available on CD and/or MP3 CD, and Jay & Mary’s should be able to special order them for you. Check with them about other titles, which may or may not be currently available on CD.
Two things regarding audiobooks: First, if you want these, you should probably call to order these as soon as possible. Second, and this is important, because the audiobooks come shrinkwrapped, I will have to remove the shrinkwrap in order to sign the cover. You ordering a signed audiobook means you’re okay with me doing that and with Jay & Mary’s shipping it to you out of its shrinkwrap.
If you have any other questions, drop them in the comment thread and I’ll try to answer them!
Choose Your Coding Harness by What You Need to Control—Not by Who Built It [Radar]
Remember back in 2019, when you had only a handful of language models to choose from, all with limited context windows? That world is gone, and it feels like a forgotten past. Today, flagship providers and open source projects compete across model families, sizes, capabilities, and deployment options. Coding harnesses seem to be heading in the same direction.
On the surface, Claude Code, Codex, Pi, DeepSeek Harness, and the other coding harnesses all seem to do the same thing: help you build software with models. Look closer, though, and each one gives you control over different parts of the harness. What can the model see and change? How does it use tools? Where does it run, and what happens when it fails? So instead of asking which coding harness is best overall, ask:
Which layers of the harness do you need to control?
Choosing a coding harness isn’t only about which model writes the best code. You’re also choosing what the harness provides, what you can change, and what you must build yourself. If it doesn’t give you verification, durable state, repair routing, or an enforced execution boundary, those responsibilities stay with you. You remain accountable for the workflow’s reliability and governance.
In general, each harness has a center of gravity: a layer that gives you the most direct control. The following table is a deliberately high-level overview of where that center sits. It’s not a feature matrix, and the boundaries overlap in practice. Claude Code can also run noninteractively and inside sandboxes, Codex also reads repository instructions, and all of them are changing quickly. The point is to show where each harness gives you leverage by default, and where the engineering work is likely to stay with you.
| Harness | Primary control | You shape | You likely build |
|---|---|---|---|
| Claude Code | Inside the run | Instructions, skills, subagents, hooks | Outer lifecycle policy |
| Codex | Around execution | Sandbox, approvals, scope, output | Cross-run orchestration |
| Pi | The loop itself | Tools, context, state, hand-offs | Most defaults |
| DeepSeek | Across plug-ins | Composable runtime components | Gaps in your plug-in set |
Read the table as a map, not a ranking. A harness that hands you more control also hands you more to build, and a harness that does more out of the box decides more on your behalf. Which trade-off is right depends on which layer your project actually needs to own.
Claude Code buys you detailed control over how implementation unfolds. CLAUDE.md provides standing instructions, skills add task-specific playbooks, subagents divide the work, and hooks intercept actions before and after tool calls. Unlike a permission rule that simply refuses an operation, a hook can explain the refusal or immediately return a compiler or policy failure to the agent.
These controls let you steer the coding loop extensively, but they operate within Claude Code’s existing lifecycle. If you need to control the outer lifecycle itself, you need another layer.
Codex buys you separation between a coding task and its execution environment. A noninteractive codex exec run can work on a narrow task in a specified repository, under an OS-enforced sandbox, and return a schema-constrained result.
This is useful for independent verification. You can give Codex a clean checkout, exclude the builder’s instructions, restrict writable paths, and run separate reviews for code quality, test gaps, persistence, or user-visible behavior. The sandbox depends on the operating system, but it moves scope enforcement out of the prompt and into the execution boundary.
Pi buys you control over the coding loop itself. Its tools, commands, event handlers, context, models, and session state can be extended or replaced. This lets you decide which steps remain agentic and which follow deterministic policy.
For example, a local defect can return to implementation, a repeated defect can force replanning, and conflicting findings can trigger a recheck or human review. Pi can also run agents inside this lifecycle, so it’s more than a deterministic orchestrator. For my example below, I used its programmability to make the outer decisions deterministic—that was my design choice, not Pi’s definition.
DeepSeek’s harness is useful when you want to swap out whole parts of the harness rather than steer or wrap them. Tools, sessions, lifecycle behavior, verification, and governance are all composable plug-ins, and so is the loop itself. That lets you replace one component without rebuilding the rest.
The trade-off is that your control is only as good as the plug-ins you compose. Where Pi gives you a minimal core to build on, DeepSeek’s harness gives you a set of parts to assemble.
Let me give you the problem I was actually trying to solve: migrating a legacy Python 2.7 application reliably, without changing years of accumulated behavior or corrupting its persisted data. Getting the code to run on Python 3 was only one part of it. I also needed to preserve behavior, verify the data across both runtimes, control what the coding agents could change, and decide what should happen when a test or verification step failed.
So I approached the choice of coding harnesses from a very different perspective. Instead of asking which one was best, I asked what each one would buy me in terms of control, isolation, and lifecycle management. The answer led me to use more than one:
I didn’t use DeepSeek’s Harness here because I wanted a very small outer lifecycle I could read end to end, not because it can’t do the job. To first check whether this setup would actually make a difference, I built a small Python 2 application with the same kinds of traps as the real migration. I then compared the composed setup with a single Claude Code session, in which Claude could verify and test its own code.
Interestingly, both setups passed all 25 hidden behavior tests. Yet the single-session setup silently collapsed two distinct Python 2 dictionary keys, the Unicode u’é’ and byte string ‘é’, into one Python 3 string. After the data was saved, one entry was permanently lost. The single-session setup also changed a Python 2 Unicode value into bytes without documenting it.
The test suite missed it. Claude’s own tests missed it. Hundreds of recorded behavior comparisons missed it. Even my hand-written reference port had the same hole.
But what happened next was even more interesting. Two isolated Codex verifiers independently reproduced the defect. Claude didn’t simply accept the finding; it contested it. Pi then launched a fresh Codex run that received only the finding and Claude’s argument. The independent recheck upheld the finding, and Claude accepted it. Pi routed the defect into a bounded repair, and the next verification round confirmed that both keys and their original types now survived.
It’s also ironic because models are often criticized for being sycophantic. They apologize and rewrite working code the moment you ask, “Are you sure?” Here, the opposite happened. Claude contested a defect that two independent verifiers had reproduced. Its session context contained its own implementation history and passing tests, all of which supported the patch. A fresh verifier context broke that self-reinforcing frame. Independent verification matters not because the second model is automatically right, but because it’s not anchored to the same history.
The important point is that no individual harness deserves all the credit. The better result came from combining the controls I needed: internal steering, independent execution, frozen behavioral evidence, and deterministic lifecycle policy.
When choosing a coding harness, start with the level of control you need and how much of the remaining harness you are prepared to engineer yourself. A useful comparison could begin with questions like these:
These are some examples to get you started, not an exhaustive checklist. The questions that matter for you will also depend on what you’re building, how much autonomy you’re willing to give the coding agent, and what you remain accountable for when it fails.
Your answers may lead you to Claude Code, Codex, Pi, DeepSeek’s harness, or another coding harness entirely. In the end, the developer’s name only tells you who packaged the runtime, not where your guarantees live. Whether you settle on one harness or orchestrate several, the principle is the same: Choose the tool by the boundary of control it gives you, and ask whether you want the agent to define the terms of its own success.
Error'd: Remember Remember [The Daily WTF]
"I Already Hate Running... I Don't Want To Have To Run Each Street A Second Time!" plods WeaponizedFun "I've gotten a couple of notifications from CityStrides today that they've updated streets for several cities, but it looks like they're doubling the effort it's going to take to finish completing these roads."
"I'll be back in 292 years" concedes Rick H. "I asked GoDaddy for a single whois record. They gave it to me, and told me if I wanted to ask anything else to come back in 300 years."
Totty reports "I found this at the bottom of an article at ajournalofmusicalthings.com.
"I hope I don't have to pay the whole period" frets Ernesto T. "Not considering the mix of languages between English and Italian, my subscription will renew on 1st of Jan, 1970 So am I 56 years late in payment? I hope I am not. It would be quite a big amount of money in inflation and interests."
"Everything is insecure" worries Daryl too. "No threats found, but I don't feel very safe." It was a worrisome week.
My Super Mid-Life Crisis – Issue 1 – 10 [Comics Archive - Spinnyverse]
The post My Super Mid-Life Crisis – Issue 1 – 10 appeared first on Spinnyverse.
Andrew Cater: Arm Cambridge - pre-mini-Debconf days 20261106 [Planet Debian]
Another interesting morning so far. Lots of interesting side
conversations (and, of course, people using IRC to talk to the
person next to them as is traditional).
It's nice to hear somebody ask a question and be told,
effectively "Oh, you need to talk to XX - they're sitting
over there" or " I need to talk to someone about X, Y and Z - and
they all resolve to you".
Especially noticeable in this room, perhaps, but it does
point to the fact that many things in Debian ultimately
resolve to one or two people. There are a lot of people each with
multiple areas of expertise which overlap - and then a few
individuals who are essential as points of reference for *everyone*
else.
Thanks again to Arm for hosting us, for excellent food, coffee and
facilities which make this _so much easier_ as a working
environment for these days.
French authorities accuse Blackcore of spreading black propaganda [Richard Stallman's Political Notes]
French authorities accuse Blackcore of spreading black propaganda in French municipal authorities, against the La France Insoumise party.
Presumably it was acting on behalf of Israel.
They also say the company intervened in Scotland and New York City.
Urgent: Preliminary victory [Richard Stallman's Political Notes]
If Democrats (some progressive, but many plutocratist) take control of Congress for 2027 in today's election, that will be a preliminary victory. Magat officials already in place will continue to pervert justice, human rights, and democracy in the US.
If Democrats are to protect the country they will need to fight to do it.
Urgent: Investigate Zillow [Richard Stallman's Political Notes]
US citizens: call on state attorneys general to investigate Zillow.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Urgent: Lawsuit to keep LICE away from polling places [Richard Stallman's Political Notes]
US citizens: Support the lawsuit to keep LICE away from polling places.
Flafo Act [Richard Stallman's Political Notes]
The Flafo Act, if passed by Congress, would require federal agencies to get a warrant from a judge to authorize accessing data from, or sharing data that came from, surveillance cameras comparable to Flock cameras.
This bill appears superior to the other two bills described in the article, which fail to regulate each instance of use of such cameras.
However, the bill does have a gap: it does not apply to state and local police forces, unless they receive certain direct federal funding. Those agencies are not under direct federal control, but I'm surprised that the federal government can't legislate any rules of conduct for them.
Elections in Texas and Georgia [Richard Stallman's Political Notes]
Greg Palast: How Republican cheaters are planning to steal state-wide elections in Texas and Georgia.
Why the corrupter loves Supposed Intelligence [Richard Stallman's Political Notes]
Robert Reich poses the question of why the corrupter loves Supposed Intelligence so much. His theory: because the corrupter and his family have invested a lot of money in datacenters.
Example set by Slovenia in 1992 [Richard Stallman's Political Notes]
Slovenia set a dangerous example just after it became independent in 1992, of declaring 25,000 of its citizens had never been citizens, and were legally nonexistent. Many were deported, made homeless, or kicked out of hospitals. Nowadays, right-wing extremists everywhere are searching for the chance to make people suffer like that.
Supposed Intelligence could wipe out civilization [Richard Stallman's Political Notes]
Supposed intelligence systems could wipe out civilization (and therefore themselves) without breaking anyone's digital security.
This could happen if some of those systems gives the army it works for information about some other power's transportation of nuclear weapons, or enriched uranium, in a place which that army considers so dangerous that it responds with war.
This scenario does not presume that the SI system is defying its developers' orders, rules, or goals, or that the report is false. The system could be entirely loyal and accurate, and still have these results.
Facial recognition on the output of Flock Cameras [Richard Stallman's Political Notes]
*Surveillance Company Tells Cops It Wants to Add Facial Recognition [on the output of] Flock Cameras.* (The standard processing already observes and records various things about each car that passes by.)
Proposals to regulate the surveillance done by government agencies (such as thug departments) are swindles; to avoid an Orwellian society in which everyone is tracked, we must limit surveillance and tracking regardless of who does it.
Pressured to use term, "Gulf of America" [Richard Stallman's Political Notes]
The University of Alabama gratuitously threatened to punish WBHM public radio if it doesn't adopt the bully's preferred terminology, "Gulf of America".
The real Gulf of America is the one between the Constitution and the president.
Protests of Cockroach Janta Party [Richard Stallman's Political Notes]
The Cockroach Janta Party is protesting against Modi's mass disfranchisement of people who can't point to a fixed address.
Calls grow for US death penalty halt [Richard Stallman's Political Notes]
*Calls grow for US death penalty halt after "torturous" botched execution of Christa Pike.*
I would oppose the death penalty even if it were painless and quick.
Third runway for Heathrow Airport [Richard Stallman's Political Notes]
George Monbiot: Giving Heathrow Airport a third runway would be an economic disaster for Britain, as well as a big contribution to global climate disaster.
Automated heuristics designating human beings as targets [Richard Stallman's Political Notes]
Automated heuristics are already designating human beings as targets for attack. Giving the final approval to a human being is just a disguise for the reality, if the human only rubber-stamps the decision made by the algorithm.
When the algorithm and the shooting are done inside the same robot, there is no limit to the depth of brutality that such robots will execute, whenever given the order.
14-year-olds not allowed off their block [Richard Stallman's Political Notes]
Majority of 14-Year-Olds [in the US] Not Allowed Off Their BLOCK???
New Pun: Robots get total freedom [Richard Stallman's Political Notes]
One African country has legislated to give robots total freedom. "Now bots can do whatever bots wanna."
US ambassador to Greece threatened to overthrow government in Athens [Richard Stallman's Political Notes]
*The US ambassador to Greece, Kimberly Guilfoyle, threatened to overthrow the government in Athens if it didn't follow orders from Washington.*
Corrupter assembling empire in Latin America [Richard Stallman's Political Notes]
The corrupter in chief has been assembling an empire in Latin America by offering and withholding large sums of money. Several countries are now controlled by his unofficial vassals, who tyrannize their countries and cancel democracy and human rights. Brazil may soon become one of them.
Apple and Google "app stores" [Richard Stallman's Political Notes]
Apple and Google "app stores" impose user-restricting software on very important activities. They also allow Apple and Google to drain the users' funds when they buy anything through an app.
In my view, the price they charge less important than the denial of freedom. If these snoop-phones respected my freedom, I might choose to pay for one. If the apps respected my freedom (that is, they were free/libre software) and I could pay anonymously with them, I might decide to do so. But since I reject them for their inherent injustice, I refuse to do any of this.
The crowdfunding campaign to defend Palestine Action [Richard Stallman's Political Notes]
The crowdfunding campaign to defend Palestine Action from arbitrary prohibition in the UK has been shut down by US trade sanctions.
Right to assistance in suicide [Richard Stallman's Political Notes]
Better hospices are not sufficient to make the right to assistance in suicide unnecessary.
Almost 4,000 Americans are sick with measles [Richard Stallman's Political Notes]
Antivaxxers' triumph: almost 4,000 Americans are sick with measles.
Preserving Tien An Men Square history [Richard Stallman's Political Notes]
Preserving the history of the Tien An Men Square protest and massacre of 1989, as China globally tries to make people forget it.
I fear that Li Rui's diaries are not safe any more at the Hoover Institution in the US. The persecutor despises freedom as much as Chairman Xi does, and is ramping up political censorship and persecution in the US. He seems to seek the sort of power in the US that Chairman Xi exercises in China, and is looking for a way to make a deal with him. We can't be confident that such a deal won't include censoring Tien An Men history in the US, and even destroying those diaries or handing them to Xi.
It is crucial to digitize and release those memories to make them safe from lawfare.
If you live outside China and have an acquaintance with a visiting Chinese who will not return to China for weeks or months, I suggest you buy a printed copy of a book about the events, and give it to per as a gift. I don't know whether it would be safe to bring that book into China, so I would choose one that perse could finish before returning there.
Amnesty International is calling for the elimination of LICE [Richard Stallman's Political Notes]
Amnesty International is calling for the elimination of LICE, the deportation thug agency.
LICE stands for Lethal Instruments of Cruel Expulsion. Its main function is to inspire Americans to hate immigrants. That's what motivates the hate-monger to boost and unleash their violence and to kick people when they are down; he knows that seeing their cruelty will inspire some Americans to fan the spirit of hatred within themselves.
The article linked to above displays symbolic bigotry by capitalizing "black" but not "brown". (To avoid endorsing bigotry, capitalize all color names used as metonymy to stand for groups of humans, or none of them.)
I denounce bigotry, and normally I will not link to articles that practice it. But I make exceptions for some articles because I consider them important — and I present this comment about them.
Ben Hutchings: FOSS activity in October 2026 [Planet Debian]

Reviewing the game tapes [Seth's Blog]
A long time ago, football coaches realized that watching previous games was a good way to help players learn to do better.
Alas, the only thing we do with “this call may be recorded…” is use it as a cudgel for unempowered shift workers.
If we actually want to improve our interactions, perhaps we should watch the tapes together, after the fact, to see how our habits and systems are holding us back. It works for salespeople, programmers and doctors too.
When the Watchdogs Are Silenced: India's Crackdown on Those Documenting Online Censorship [Deeplinks]
On November 3, our colleagues at the Software Freedom Law Center, India (SFLC.in) received notifications from X that the Delhi Police had issued takedown requests targeting 42 URLs. Among the accounts and posts targeted were those belonging to SFLC.in, the Internet Freedom Foundation (IFF), and X account @geoblockedindia, as well as posts documenting legal notices and instances of online censorship.
Takedown requests targeting SFLC.in and other digital rights groups threaten not only their work, but the public’s ability to know when and how online speech is being restricted.
The requests cite grounds including hate speech, alleged defamation of the Hindu nationalist organization Rashtriya Swayamsevak Sangh (RSS), and concerns relating to safety and security. But the context in which these requests have emerged is particularly troubling: they target organizations and individuals whose work involves documenting restrictions on online expression and making those restrictions visible to the public.
In other words, the organizations being targeted are among those trying to tell the public when and how its speech is being censored.
SFLC.in is one of India's most important digital rights organizations and promotes innovation and open access to knowledge by helping developers make great free and open-source software, protects privacy and civil liberties for Indians by educating and providing free legal advice, and helps policymakers make informed and just decisions about use of technology. In 2025, we recognized their work with an EFF Award for Defending Digital Freedoms.
IFF (the Internet Freedom Foundation) is another of EFF's close allies in India. Like EFF, IFF combines advocacy campaigns and strategic litigation to advance digital rights. They write frequently about internet shutdowns and have filed several lawsuits contesting them.
Among SFLC.in's initiatives is its Free Speech
Tracker, which documents instances of online
censorship, content restrictions, and account takedowns in India.
In a country where government orders to restrict online content are
often opaque, this work is absolutely
essential.
Recent
legal notices object to the tracker itself, as well as the
organization’s documentation of restricted content and
geo-blocked material. The allegations against SFLC.in include
claims that it is "continuously opposing government directions" and
publicly circulating information about restricted content, thereby
undermining measures taken in the name of national security and
public order.
But documenting government censorship is not the same as undermining public safety. Reporting that content has been restricted is not an endorsement of that content, nor does it constitute an attempt to circumvent the law. It is an exercise in transparency and accountability, and one that allows journalists, researchers, civil society organizations, and the public to understand how governments exercise their power over the information landscape.
The use of legal complaints and platform takedown mechanisms against organizations documenting censorship creates a particularly troubling dynamic. When those who monitor restrictions on expression are threatened with having their accounts or reporting removed, the result is a chilling effect that extends far beyond the immediate targets. Other organizations or journalists may think twice before documenting controversial takedowns or challenging government orders, and the public loses access to an independent record of decisions that affect its ability to speak and access information online.
There is also an important role here for platforms like X. Platforms must be transparent about the requests they receive, provide meaningful notice to affected users, and ensure that any restrictions are subject to appropriate scrutiny and avenues for appeal. When governments seek to restrict speech, platforms have a responsibility to avoid becoming opaque intermediaries through which censorship is quietly carried out.
These developments are part of a broader pattern of pressure on independent civil society organizations working to defend freedom of expression and access to information in India. Digital rights groups play an indispensable role in documenting the effects of government policies, identifying patterns of censorship, and challenging restrictions that undermine fundamental rights. Their ability to do so independently is not a peripheral concern; it is a cornerstone of a healthy democratic society.
The right to freedom of expression includes the right to scrutinize the exercise of government power. That includes the right to document censorship, question the reasons given for it, and make that information available to the public.
EFF stands in solidarity with SFLC.in, the Internet Freedom Foundation, @geoblockedindia, and all those working to document and challenge restrictions on online expression in India. We urge the authorities in India to respect the rights of digital rights organizations to conduct their work without intimidation or retaliation, and to ensure that any restrictions on online expression comply with international human rights standards.
New Comic: Musical Scares
Girl Genius for Friday, November 06, 2026 [Girl Genius]
The Girl Genius comic for Friday, November 06, 2026 has been posted.
Hunting, p03 [Ctrl+Alt+Del Comic]
The post Hunting, p03 appeared first on Ctrl+Alt+Del Comic.
You shouldn’t change the style of a Win32 static control after it has been created [The Old New Thing]
Win32 classic static controls come with a bunch of possible styles to describe what it renders and how. Maybe it’s text. Maybe it’s an image. Maybe it’s just a solid color.
What happens if you create the control with one style and then change the style later?
Don’t do that.
The Win32 classic static control was originally written in the early 1980s for Windows 1.0, and back then, people didn’t play funny games like changing a static control from text to bitmap. They barely had enough memory to add two numbers together!
The Win32 static control decides what it is when it is created,
and it doesn’t listen to the
WM_STYLECHANGED message to learn that somebody
told it to change its clothes. Mostly because the
WM_STYLECHANGED message wouldn’t exist for
another decade. It assumes that the style doesn’t change for
the lifetime of the control.
If you change the style on the fly, say, from image to text, what happens is that the control starts up and realizes that it’s an image, so it loads the image. And then when it is destroyed, it checks what it is, and hopefully it still says “You’re an image,” so it frees the image. But if you secretly changed it to “You’re text”, it says “Well, in that case, I don’t have to free an image,” and the image gets leaked.
This behavior has remained unchanged in the static control for backward compatibility. There are almost certainly programs that “know” about this behavior when they change an image static control to a text static control, so they “fix” the problem by deleting the leaked image. If the leak were fixed in the static control, this would result in a double-delete bug.
So just stay away from the electrified wire. If you need to change the style of a static control, destroy it and create a new one with the new style, or create two static controls (say, one image and one text) and hide one and show the other depending on which one you need.
The post You shouldn’t change the style of a Win32 static control after it has been created appeared first on The Old New Thing.
Gunnar Wolf: Don't tell anybody... but we have apparently gone DARK! [Planet Debian]

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

So, do we want to py to who-knows-whom for promoting the keyring-maint services in a verrrrrry-dark web search site?
First time I have to throw this stinky onion at you…


Emotional Invulnerability Night is even wilder
Reflecting on Digital Rights Wins and Losses in Sacramento [Deeplinks]
California’s 2026 legislative session has officially adjourned and it’s time to reflect on the wins and losses that have shaped Californians’ digital rights landscape this year. This was the second year of a two-year legislative session, which meant several bills resumed their legislative paths from 2025.
EFF monitored nearly 100 bills in the state over the two-year session. These included proposed regulations on 3D printers, access to social media platforms, police, commercial, and workplace surveillance practices, AI, and other privacy concerns. While we saw some victories, alarming developments also raised serious concerns about the future of privacy protection in the state.
Governor Newsom signed vital protections on the use of automated decision-making in the workplace and workplace surveillance tools, specifically No Robo Bosses (SB 947) and AB 1883.
Championed by our labor partners, SB 947 limits how employers can use automated decision-making to fire or discipline workers, including provisions that ensure workers get vital information about automated decisions that affect them, and that an algorithm is not the only authority for these consequential decisions. Alongside it, AB 1883 prohibits the use of workplace surveillance to predict emotions or collect neural data. This stops employers from using potentially biased, invasive, and exploitative forms of AI surveillance at the workplace, marking an important step toward creating workplaces that respect the privacy and autonomy of workers. We look forward to continuing to ensure that technology in California’s workplaces is deployed fairly, thoughtfully, and with respect for all workers.
EFF was also grateful to see Governor Newsom sign SB 747, which allows damages lawsuits against federal officials who violate the U.S. Constitution. Victims of constitutional violations deserve a complete remedy and this law also helps deter constitutional violations in the first place. Gaps in current law often make it difficult to seek a damages remedy against federal officials who violate the U.S. Constitution. This bill makes it easier to bring such litigation. Federal law enforcement officials have violated our First Amendment right to record on-duty police and other newsworthy subjects, and also sometimes violate our Fourth Amendment right to be free from unreasonable searches of our phones and laptops. When this happens, the people who suffer these violations should be able to sue these officials for damages.
Additionally, EFF supported two bills (which are now state law) that clarify and extend California’s shield laws to protect patients, healthcare providers, and others involved in reproductive healthcare and gender-affirming care that is legal in California. After the overturn of Roe v. Wade, California enacted numerous shield laws to protect people who provide, receive, or help others obtain healthcare that is legal in California. These laws prohibit California agencies and certain companies from helping other states enforce laws that punish this care. Yet the federal government and coordinated efforts in other states still threaten access to these legally protected healthcare services. AB 1854 addresses these threats by expanding coverage to more California businesses and individuals who receive legal demands, creating a notification process so the Attorney General can intervene to stop improper disclosures, and clarifying that law enforcement cannot arrest someone if the Governor refuses an extradition request. These protections serve as a necessary response to real and escalating tactics outside the state targeting lawful reproductive healthcare.
EFF also supported AB 1930 to protect confidential medical records from politically motivated investigations into lawful healthcare, empowering the California Attorney General’s office to meaningfully intervene and respond to out-of-state subpoenas or requests for data regarding protected care.
EFF is dedicated to protecting the rights of young people online. We supported a handful of bills on digital literacy and cybersecurity education that were signed into law, such as AB 2071 on digital wellness instruction and AB 2298 on cybersecurity in educational standards. Unlike blanket bans, these bills address online safety through education rather than prohibition. Young people rely on the internet not just for entertainment, but for civic engagement, education, self-expression, and community—especially vulnerable youth who may lack support in their physical surroundings.
Real digital safety comes from preparation, not isolation. Research consistently shows that open, honest conversations about digital literacy and privacy with trusted adults are far more effective at protecting youth than restrictive censorship laws. Young people themselves recognize this need; in fact, AB 2071 was co-authored by a group of students actively seeking better resources to navigate their digital lives safely.
EFF and our allies were also able to stop the expansion of California’s dangerous age gating law from operating systems to browsers. The California legislature stepped back from their plan to expand the 2025 age-gating law and ultimately removed language from AB 1856 that could have compounded serious threats to users’ speech, privacy, and security just to browse the internet, and positively, removed the burdens on open-source operating systems.
Real digital safety comes from preparation, not isolation
While EFF still believes the underlying law that AB 1856 amends, AB 1043, is unconstitutional, we appreciate that the legislature did not expand this problematic age-gating framework to browsers. We were also pleased that an earlier amendment to AB 1856 reduced the threat to the open-source community by exempting open-source operating systems. Given these changes, EFF removed its opposition to AB 1856, and thanks the author for listening to concerns from advocates and developers.
EFF was proud to co-sponsor AB 1337 this session alongside our friends at Oakland Privacy and Assemblymember Chris Ward, who is also the chair of the legislative LGBTQ Caucus. The bill unfortunately failed to cross the finish line after stalling in the Senate.
AB 1337 would have updated California's foundational Information Practices Act of 1977 and extended its vital privacy safeguards present at the state agency level to counties and cities. Today, city and county governments collect vast amounts of sensitive personal data (from public health records such as vaccinations, to welfare assistance details, to license plate reader data) and administer programs that were likely not contemplated back in 1977. Yet the law has simply not kept up with modern data practices, and California still has no state law governing how local governments handle this information. While we could not build enough political progress to pass the bill this session, closing this local privacy gap remains an urgent need for California.
Another major setback was the passage (and subsequent signing) of a social media ban for youth under the age of 16 (AB 1709).
Technology and the laws that regulate it should support and empower young people, but AB 1709 falls far short of this goal. Using technology is how we learn and build community in today’s world, but laws such as AB 1709 cut young people off from essential information and experiences. They also particularly harm those already facing increased challenges who find safety in supportive online communities that they cannot always access in the physical world.
Technology and the laws that regulate it should support and empower young people
Denying minors access to digital forums or stripping out basic tools needed to navigate them will not make young people safer or healthier in the AI age. Research shows social media bans are ineffectual while denying young people opportunities to develop their own voices, share their art, practice religion, or engage in politics. These laws also hurt all of us. Age-gating requirements force everyone to give up more personal information. To verify who can pass through online gates, companies will collect even more data, concentrating power in corporate hands rather than protecting people. AB 1709 is also inconsistent with rights to free expression, meaning California will spend resources defending a law that will likely get tied up in court.
CIPA was originally intended to protect personal privacy against surveillance and included a private right of action so consumers could hold corporations accountable in court. This is why EFF and allied organizations spent the two-year session strongly opposing SB 690—a bill we dubbed the "Corporate Cover-Up Act" for its attempt to weaken consumer protections in CIPA. Although SB 690 was narrowed from its original draft, we asked Governor Newsom to veto it because it strips away the law's private right of action—a vital tool for individuals fighting back against unlawful metadata surveillance. People deserve the right to decide whether to bring a lawsuit, which remains one of the most effective ways to deter corporate abuse. Unfortunately, the Governor signed the bill and even urged the legislature to go further next year. It's especially alarming to see this disregard for accountability as the federal government and law enforcement agencies seek data from businesses or data brokers to target people based on political beliefs, religious affiliations, or health decisions.
We expect to see further attacks on CIPA next legislative session, as Governor Newsom’s signing statement called for “additional work in this area” and urged the legislature to “take this on next year to ensure a fair balance between protecting private information and preventing rapacious litigation."
California also missed the opportunity to join other states in restricting the sale of sensitive data. We are deeply disappointed that Governor Newsom vetoed AB 1542, which would have ensured sensitive personal information stays private by banning its sale outright. There's a nationwide movement to protect consumers by making intimate details off-limits for businesses to sell or share. From precise geolocation and genetic data to private messages, health records, sexual orientation, and immigration status, sensitive data reveals the most private aspects of our lives. Monetizing this information fuels financial scams, predatory pricing, and warrant-free government surveillance. By vetoing this bill, California not only fails to lead but falls behind other states, by missing a critical opportunity to protect our most vulnerable communities.
The California legislature unfortunately also passed AB 2047, which aimed to make every 3D printer come pre-loaded with censorship software. It's a law that is trying to prevent an act that is already illegal in the state, and just won't work. It was part of a recent sweep of misguided state bills which purport to go after "ghost guns," but actually “enshittify” 3D printers by introducing privacy risks and a new way to restrict or upcharge users. Lawmakers even considered including misdemeanor charges that would have impacted people using alternative open-source programs. Fortunately an outpouring of opposition from makers and civil liberties advocates resulted in a bill so limited that, despite having passed and been signed into law, will not affect makers until ASTM International publishes a standard — something the organization had not been considering doing.
California lawmakers also missed key opportunities to curb commercial surveillance. EFF supported AB 2564, which prohibits retailers from engaging in surveillance pricing, the invasive practice that allows corporations to offer the same product to two different people at two different prices based on scrutiny of their personal data. Unfortunately, the bill stalled on the last day of session.
The legislature also failed to move AB 322, which would have safeguarded the privacy of Californians by placing restrictions on the collection, use, and sale of location data. Last year, EFF published a rubric for comprehensive location privacy laws, outlining baseline standards states should meet to shield individuals from pervasive location surveillance. Since then, states like Connecticut, Maryland, New Jersey, Oregon, and Virginia have enacted new consumer privacy restraints on geolocation data. Yet, even as these states move the ball forward, most of their laws leave significant gaps that still must be filled. California failed to make that change and protect residents from location surveillance.
California lawmakers have lagged in enacting meaningful limits on automated license plate readers with all proposed ALPR regulation bills failing to pass since 2022. SB 1013 initially appeared on track to pass with broad support, but ultimately stalled in the final days of the session.
EFF maintains high standards for ALPR legislation, favoring full bans or, at minimum, strict warrant requirements and brief data retention limits. While we remained neutral on earlier versions of SB 1013, EFF and our partners ultimately opposed the bill after late amendments compromised key privacy protections. The final draft would have doubled the current data retention period and allowed agencies to archive rather than delete data unrelated to active investigations—effectively shifting away from data minimization toward indefinite retention. (We saw San Francisco adopt a similar proposal this year). We encourage California lawmakers to draw from our ALPR legislative agenda to enact robust safeguards or ban ALPR mass surveillance altogether.
Next session, we expect ALPR legislation to be top of mind as states across the country reckon with the harms the technology has caused. We will also be monitoring the results and action following the state’s audit into California’s fusion centers. Following calls from advocates to address privacy abuses and a lack of transparency, the Joint Legislative Audit Committee approved Senator Sabrina Cervantes’ audit request in March 2026. This builds on our past experiences working with JLAC audits to expose law enforcement overreach—such as the state auditor's damning 2020 report on law enforcement’s use of automated license plate readers and our 2016 push to fix the deeply flawed CalGang database. The audit will examine the legal authority, governance, and funding of the centers, map out state and private data systems accessed by personnel, and review protocols for handling data breaches and unauthorized surveillance. This audit will mark the first comprehensive review of these facilities in 13 years and should be released by Summer 2027. We hope lawmakers use the findings to rein in these centers and their unauthorized surveillance.
Other “zombie bills” are also expected to return next year, including legislation regarding the use of copyrighted material to train AI systems. Throughout the two-year session, EFF raised serious concerns about AB 412, a bill that would require AI developers to identify and disclose copyrighted works used in generative AI training. We argued that complying with such a mandate is practically impossible, as it demands information that often does not exist and cannot realistically be obtained. While we are glad the legislature paused to consider the best approach rather than rushing this policy forward, we expect legislation targeting fair use and AI training to return next session.
More broadly on AI, vulnerabilities and security issues have dominated recent news cycles, and everyday Californians feel real anxiety about the risks of AI. We expect to see numerous bills addressing issues like existential risk and kill switches, as Assembly and Senate privacy committees in California have held informational hearings on these topics over the last month.
We hope to work with legislators to address the threats of AI and ensure that technology supports rights, justice, freedom, and innovation for all people. Laws should always ensure that technology empowers rather than oppresses.
Join EFF to Celebrate the Life of Aaron Swartz [Deeplinks]
Join us to celebrate the legacy of Aaron Swartz on Nov. 8, 2026. With the organizers of Aaron Swartz Day, we’re honoring his life with an in-person and remote hackathon. This event is supported by several organizations that carry on his work, including the Internet Archive—which is hosting the in-person event—the Freedom of the Press Foundation, Creative Commons and the Free Law Project.
Aaron Swartz was a digital rights champion who believed in the need for an open internet. His life was cut short in 2013, after federal prosecutors charged him under the Computer Fraud and Abuse Act (CFAA) for systematically downloading academic journal articles from the online database JSTOR. Facing the prospect of a long and unjust sentence, Aaron died by suicide at the age of 26.
EFF was proud to call Aaron a friend and ally. We continue to stand with programmers and developers engaged in cutting-edge exploration of technology through our Coders' Rights Project.
Hackathon participants can contribute code, documentation, and design to several open-source and public-interest projects. These include Secure Drop, Open Library, Quantifying the Commons, Onion Press, and our own Atlas of Surveillance. EFF Director of State Affairs Hayley Tsukayama will also join hackathon participants at the Internet Archive at 11 a.m. for an Atlas of Surveillance on-boarding session.
Contributors across experience levels are welcome. The Aaron Swartz Day organizers are also open to adding new projects and workshops, so please contact them at aaronswartzday@gmail.com if you’d like to suggest a workshop or project—particularly open-source projects on Github that participants can continue to work on after the event. For more details on how to participate in-person or remotely, please visit the Aaron Swartz Day and International Hackathon page at www.aaronswartzday.org.
Event Details
GNU Hyperbole 9.3.2 [Planet GNU]
GNU Hyperbole 9.3.2 was released on the 27 October 2026.
Hyperbole is a broad information management framework that augments
your favorite Emacs libraries like Org and Consult. It can
accelerate the things you do everyday with Emacs, just give it a
chance. It installs in about 60 seconds. Learn about it
from:
Hyperbole version 9.3.2 is another jump in capability with Org
visibility cycling added to the Koutliner and the ability to use
the double brackets of Org link format around Hyperbole implicit
buttons in Org mode.
Below are major updates since release 9.1.0:
See www.gnu.org/s/hyp
... le.html#Koutliner
New, extensive key compatibility with Org-mode; major Org keys
work similarly. {TAB} and {S-TAB} (previously {M-TAB}) keys
cycle trees and entire outline visibility anywhere in a cell, by
default. Use {C-c [} to toggle these keys between cycling and tree
demotion/promotion, as desired. Bindings of {C-c C->} or
{M-right} and {C-c C-<} or {M-left} for tree demotion/promotion
always work regardless of the tab mode.
The Koutliner has the same kind of extensive user-customizations of
tab behavior as Org mode.
See
www.gnu.org/s/hyp ... and-Shift_002dTAB for details on how
these keys work and can be customized.
{C-c C-x C-v} toggles the inline display of image files in
Koutlines, just like Org mode.
Previously, the Koutliner bound a number of these keys for
convenience. Now they are all replaced with {C-c ;
<letter>} so global user set {C-c <letter>} keys are
available. If you don't use such global keys, {M-1 C-c C-l}
will enable the original Koutliner {C-c <letter>} key
bindings while leaving the {C-c ; <letter>} keys in place as
well.
This new setting holds a function run by the Action Key in
Koutline mode (kotl-mode) when no other context matches. The
default setting does nothing within cells, whereas previously, it
would toggle between showing and hiding the tree (this is now done
with {TAB}). Set this to kotl-mode:show-or-hide-tree
to restore the old Koutliner behavior.
This similar setting is for the Assist Key in Koutline mode when
no other context matches. The default setting does nothing
within cells whereas previously it would run
smart-scroll-down to scroll down a screenful. Set the
variable to that command if you prefer the prior behavior.
www.gnu.org/s/hyp ... ey-_002d-Org-Mode
Hyperbole buttons wrapped in double square bracket org link
delimiters when in Org mode will activate properly with the
addition of a single line to your Hyperbole use-package
configuration:
(push #'hyperbole-activate-button org-open-link-functions)
Then you get all the Hyperbole button capabilities with the
highlighting and the activation of Org links via {C-c C-o}.
Of course, the Action Key will activate these buttons as well.
Since Emacs Lisp sybmols are Hyperbole buttons, you can make links
to both function and variable definitons just by wrapping their
names in Org delimiters. For example, [[find-file]] or
[[hsys-org-enable-smart-keys]].
Two new settings to control Action and Assist Key behavior when
within an Org mode heading when hsys-org-enable-smart-keys
is set to t (defaults are no-ops):
The new smart-org-cycle command is one option for such a
setting.
See www.gnu.org/s/hyp
... rbole.html#HyWiki.
HyWikiWord#Headline links now work in Wiki pages that use
indentation before the * delimiters of headlines.
You can now customize which modes prevent HyWikiWord creation
with the Action Key {M-RET} Add any text or programming major modes
to hywiki-word-create-exclude-action-key-modes to disable
this feature in these modes. You can bypass this setting by
creating a HyWikiWord via the keyboard menus with {C-h h h
c}.
When using the orderless package in searches, multiple
space-separated words are matched in any order they occur,
regardless of the order given to the search.
See www.gnu.org/s/hyp
... rbole.html#HyRolo.
By default, {C-h h r y} hyrolo-yank yanks at point the
entry matched without any of its sub-entries. Use {C-u C-h h
r y} to yank in the entire tree.
When using the orderless package in searches, multiple
space-separated words are matched in any order they occur,
regardless of the order given to the search.
{C-h h d d} now includes links to articles about Hyperbole,
including two new articles and videos:
See www.gnu.org/s/hyp
... bole.html#Install.
Installation sections in the Hyperbole Manual and README.md have
been extensively rewritten. Installation now utilizes
use-package with a fully documented reference
man/use-package configuration file you can easily
customize. The file, "INSTALL", has been deleted.
Some key configuration settings in the "man/use-package"
file:
See HY-NEWS for
detailed changes in the Version 9 Hyperbole series.
GNU Hyperbole 9.3.1 [Planet GNU]
GNU Hyperbole 9.3.1 was released on the 22 October 2026.
Se announcement for GNU Hyperbole version 9.3.2 for a
summary with major updates since release 9.1.0.
GNU Hyperbole 9.3.0 [Planet GNU]
GNU Hyperbole 9.3.0 was released on the 14 October 2026.
Se announcement for GNU Hyperbole version 9.3.2 for a
summary with major updates since release 9.1.0.
Reproducible Builds (diffoscope): diffoscope 337 released [Planet Debian]
The diffoscope maintainers are pleased to announce the release
of diffoscope version 337. This version
includes the following changes:
[ Chris Lamb ]
* Mark that the test_nupkg_compressed_files test requires the tlsh Python
* module. (Closes: #1151752)
You find out more by visiting the project homepage.
GNU Hyperbole 9.2.0 (Koutliner Org-style visibility cycling release) [Planet GNU]
We have added Org-style visibility cycling as an option to the
Hyperbole Koutliner and have updated Hyperbole to version
9.2.0 (30 september 2026) to track this significant change.
Once you have it installed, remove your ~/EXAMPLE.kotl file if
any. Then use {C-h h k e} to get the new EXAMPLE.kotl copy to
play with. Use {C-TAB} in a Koutline to toggle between
Org-like visibility cycling and Koutline's default demote/promote
behavior.
Then {TAB} will cycle the view of the tree at point and {C-u TAB}
will cycle the whole outline. Most of the complex behavior from the
'org-cycle' function is replicated.
See the new manual section,
(hyperbole)Inserting Literal Tabs, for how to configure the
Koutliner for tab insertion in different contexts.
GNU Hyperbole Interim release 9.1.0 [Planet GNU]
This was an interim release (28 June 2026) to sync with the new
package versioning techniques used by ELPA and MELPA. This turned
what was the development version 9.0.2pre planned to be a 9.0.2
release into release 9.1.0 to resolve the numbering
discrepancy.
From this release the following snapshot or devel versions are
numbered RELEASE.0.DATE.COUNT.
View From a Hotel Window 11/5/26: Chicago, IL [Whatever]

I’m back in my old haunt of Hyde Park for tonight’s event at the Seminary Co-Op at 7pm. I may walk around and enjoy the campus. It, uhhhh, has changed since I first arrived here almost 40 years ago now.
Tomorrow! I am in Ferndale, Michigan, for an event sponsored by Sidetrack Bookshop. Here is the ticketing information. If you’re in the Detroit metro area, come see me!
— JS
The New Knowledge Artifacts of the AI Economy [Radar]
At our recent Foo Camp, a number of people said something like, “I don’t want someone else’s code any more. I may have my agent take a look at it, but I want to extract just the parts that I want, and may rewrite even those in Rust. It’s just too easy to create just the code that I want.”
This topic was hot enough that Jesse Vincent held an entire session about it. I did not attend, but Jesse gave me a report from his Plaude AI notetaker. Here’s a relevant section of the summary:
Several participants argue that software development’s primary artifact may be shifting from executable code toward natural-language prompts, generation processes, and developer skills. One speaker compares Python to assembly language, suggesting that writing conventional code may become optional as natural-language generation takes precedence. Another argues that open source can survive such a transition because its core values—peer production, capacity building, and shared specifications—do not depend on who or what writes the code.
At the same time, Jesse warns that maintainers are overwhelmed by floods of uninvited, automated, and often low-quality contributions. Participants say that traditional milestones such as pull requests, repositories, and conferences have helped contributors connect and gain recognition; as AI makes code replication easier, communities may need new ways to acknowledge participation and create paths for future developers. Some community interaction has moved to spaces such as Discord and direct messages, but structured opportunities are still needed.
Scientific computing raises particular concerns. One panelist warns that AI-generated forks and agent attacks could threaten carefully verified foundations such as NumPy and SciPy. Scientific systems depend on battle-tested libraries and reproducibility, so thousands of unreviewed alternatives could undermine reliability. Participants suggest bridging traditional open-source communities and modern AI development, which currently may use different tools and artifacts.
Other proposals include treating code as “liquid” and focusing open-source governance on durable infrastructure and specifications; maintaining agent storage independently of ephemeral container lifecycles; and using corporate compliance and safety-monitoring architectures to aggregate organizational traces.
These are important observations, all pointing in the same direction: AI is transforming the mechanisms and the artifacts of software development. For an increasing number of use cases, the software source code itself may no longer be the most important shareable knowledge artifact. This isn’t a new phenomenon. Every major change in technology calls for new mechanisms, new artifacts, and new institutions.
Originally, software developers mostly distributed binaries, then open source developers made sharing source code the norm. Now we need to distribute and share something else: context and patterns for generating code on the fly. Knowledge is being unbundled and can be shared in new forms. A repo may now serve merely as a source of context for solving the exact problem I have, rather than the bundle of problems that the original developer(s) encoded into their library or packaged solution. Some people will keep their context and patterns private, either because they see proprietary advantage in keeping them to themselves or because they are too busy or too lazy to share. But part of the problem is that we haven’t yet figured out what needs to be shared!
The challenge for the software development community is to identify the new knowledge artifacts of the AI economy, and to build new mechanisms and incentives for sharing them.
We’ve all had the experience of seeing a bespoke agentically generated app, wanting something similar, and wishing we could ask for a starting point so we didn’t have to vibe code an equivalent from scratch, with all the attention, false starts, and token costs that comes with that. Even in a world where software is generated by agents, it’s still not costless, and most of us like a good place to start.
Of course, this won’t be all software. There are lots of areas where “sort of alike” software is a recipe for disaster. Imagine a sales and marketing group where everyone had their own vibe-coded CRM tools, with different metrics and capabilities. This is not good. So there is still a place for big SaaS applications, distributed binary software, and distributed source code. You pick the hat to fit the head. But there’s also a need for something new.
The purpose of this article is to start a conversation about exactly what it is that developers should be preserving, sharing, and building on from others, and what mechanisms are still missing to make that virtuous circle work more effectively. I can’t see into the future; I can only speculate. So, as is often the case, I take a historical view. The poet W. S. Merwin wrote, “We are the echo of the future.” I have found that using history to frame the present can be a productive way to get our minds going in the right direction.
Note that while this article focuses on software development, the questions I’m asking here apply to virtually every field. Let me know if you have insights from your work in any area touched by AI.
The ease with which LLMs can generate code is paradoxically getting people to focus too much on how easy it is not to produce code. That may be blinding us to the fact that code itself is being displaced as a valuable, tradeable, shareable knowledge artifact. Maybe “displaced” is too strong a word. Different species of value overlap for a long time. Eventually, though, old ones fade and new ones become dominant. This has happened before. Every technology revolution draws not only on new mechanisms but also creates new valuable knowledge artifacts. I talked about this in my recent short keynote at AGNTCon + MCPCon.
The open source revolution depended in part on mechanisms like modular design and source code control, even more than it depended on free software licenses. It birthed new coordinating institutions like GitHub. But it also created a valuable new class of knowledge artifact in the form of the source code repo, and subsidiary valuable artifacts like commit history and reputation. A developer’s public repos became a kind of résumé, and a project’s commit log became a record of who had done what, and how well. This replaced a previous world where binaries were the tradeable objects of the software economy. Microsoft’s fortune was built on selling licenses to binaries, and to anyone who measured the software economy in licenses sold, free software looked like value being destroyed. (Steve Ballmer called GPL’d free software “a cancer” and Microsoft VP Jim Allchin called it “an intellectual property destroyer.”)
There were two ways that I like to think about the effects of open source software. First, value that was based on scarcity was replaced by value that was created by abundance. Back in 1975, Steve Baer described this as “the clothesline paradox,” explaining that when you put your clothes in the dryer, the energy you use is measured and counted, but when you hang your clothes on the line, it is ignored by accounting, despite doing the same job. Open source software was like sunshine, free for the taking, and its value unmeasured. Everyone compared the revenue of free software companies like Red Hat and MySQL to the vastly larger revenues of proprietary software companies like Microsoft and Oracle, noted the fact that they hadn’t even survived as independent companies, and concluded that open source was a less effective business model because its creators captured less of the value. They missed the point that far more value had been created than had been captured. Open source went on to power most of the internet economy, with the value captured by other means than selling the software itself.
Some people might think of this as a kind of failure, but they would be wrong. It is the system working exactly as its creators intended. I remember talking with Bob Scheifler, one of the creators of the X Window System, about whether it was OK that we were building commercial versions of their documentation. He told me that was exactly what he had intended. They put things out with a very permissive license precisely because they wanted others to build on top of them. I remember him saying “We want to raise the floor.” The creators of Berkeley Unix, Apache, and others felt exactly the same way. They didn’t want to win the existing game. They wanted to play a different game.
And they succeeded, big time. As Clayton Christensen noted in 2004, when one thing becomes a commodity, modular and fungible, something else (usually something adjacent) becomes valuable. He called this “The Law of Conservation of Attractive Profits.” At about the same time, I had stumbled onto this principle in explaining the implications of open source software in giving rise to the new paradigm that I was shortly to start calling Web 2.0. Clay and I first bonded when we gave our respective keynotes about essentially the same thing at the 2004 Open Source Business Conference. I later wrote about the conjunction of our respective ideas in a piece called “The Open Source Paradigm Shift.”
New artifacts are often the first visible sign of this value transition. You can see this at work in the evolution of the web. The web was born from the new mechanism of internet-enabled hypertext via HTTP, HTML, and the modular, replaceable software (the web browser and the web server) that made it useful.
At first, the new valuable knowledge artifact was the website with its domain name, associated URLs, and HTML-formatted web pages. DNS was the coordinating institution. People paid fortunes for domain names on the premise that the site was the thing that mattered. And it did matter, and still does. But less than it used to. Over time, Google became the new coordinating institution, and its ability to point deep within websites made the web page, not just the site itself, a valuable knowledge artifact. Social media made “posts” and short-form video into other knowledge artifacts. New kinds of value creation and value capture tumbled out of that unbundling. Packaged software was displaced as the key monetizable artifact and replaced by web applications, which were information- and software-based frontends to vast backend databases.
The click became a new and incredibly valuable knowledge artifact, the unit in which attention and intent were measured, and then priced. First pay per click advertising (Google), then engagement maxing (social media) became the basis of vast fortunes. The people who notice the new artifacts early, while everyone else is still focused on the old ones, then invent new business models based on them, often play a bigger game than those who were still trying to play by the new rules.
When I summed up these ideas in “What Is Web 2.0” in 2005, I talked about the key principles being “harnessing collective intelligence,” “software above the level of a single device,” and “data as the next Intel Inside.” (That is, the next valuable source of lock-in.) The companies that survived the dot-com bust were the ones that understood that the data their users generated through their activity on the internet was the asset that mattered, not just the software that served it. That was an argument about a new knowledge artifact, though I didn’t use those words at the time. PageRank understood that a link was a vote, and a new mechanism to improve organic search birthed new dimensions of the internet economy. Links were bought, sold, and gamed accordingly. SEO (both “white hat” and “black hat”) and search quality became a battlefield.
All those disciplines have had to change now that content has been absorbed into AI models. Books, music, video, web content, sites like Wikipedia, GitHub, and Stack Overflow were all grist for the mill. In the open source era, a voted-on answer to a well-posed question on Stack Overflow was a valuable artifact, and the reputation that came with writing good ones was a subsidiary artifact, just as it was on GitHub. The number of new questions asked on Stack Overflow peaked at roughly 200,000 a month around 2014 and was already sliding before ChatGPT, but the decline accelerated sharply after November 2022. The knowledge in those answers didn’t go away. It was absorbed into the models, which now give their own answers synthesized from all that they have consumed. In that way, they have also consumed much of the traffic that would have gone to the original knowledge creators. New mechanisms to create a circulatory economy of value creation need to be developed.
Software development also changed radically because of the internet. Another of my web 2.0 principles was what I called “the perpetual beta.” It’s easy to forget that in the PC era, software had major releases only every couple of years, with the new version distributed on CDs (and long before that, on 9-track magnetic tape.) I remember talking with Mark Lucovsky, who’d been a developer on Windows NT at Microsoft, shortly after he arrived at Google in 2005. He was exulting at the experience of being able to push a single change live worldwide soon after it had been tested. Eventually, we saw the formalization of new mechanisms like test-driven development (TDD) and continuous integration and continuous delivery/deployment (CI/CD), which we now take for granted, as if they’d always been the norm.
The story isn’t over yet, though. The old knowledge artifacts don’t go away all at once, and they don’t go down without fighting. The new artifacts are only half-formed, and have weaknesses that can be exploited. We’re in the middle of that fight right now. But I suspect the winners will be those who first understand what the sources of deep value will be five years from now.
When code is cheap to generate, the valuable thing may be the prompts, context, and other artifacts that tell the model what code to generate and how to do it well. I’ve started using the generic term “context bundles” to describe the artifacts that you hand the model to do its work.
In the opening to this piece, I talked about software patterns extracted from code as one kind of new shareable knowledge artifact. But these are only one of many kinds of “context bundles” that are starting to be shared. Spec-driven programming is all about developing context bundles. The spec becomes the thing that is reviewed, versioned, and kept, and the code is regenerated from it as needed. (A lot of people are worried that this might become a return to waterfall development. And it could, if done badly. But done well, with rapid turns? Maybe just right.)
An Agent Skill is another kind of context bundle, a folder of instructions, scripts, and reference material that an agent loads only when a task calls for it. Anthropic released the format as an open standard, and it has been adopted by a growing number of other agent products. An MCP server is yet another mechanism for presenting context that will shape the work of an LLM.
But that’s not all. The agent trace, the record of what an agent tried, which tools it called, and which context it drew on, is the closest thing we have to commit history for work that doesn’t get formalized as code. The log of which context bundles were invoked, and by whom, could also be the raw material for attribution and payment, much as the click was the raw material for advertising. And the stream of what people ask their agents to do may become to this era what the click was to the last, the signal of intent around which the coordinating institutions of the AI economy get built. I’ve often wondered what the agentic equivalent to PageRank will be. Will agents leave “pheromone trails” that grow stronger or fade over time, in the way that links do?
Even a well-formed question or conjecture could be a kind of context bundle. Math and science already value and exchange these, and I’ve started to think that there is an opportunity for building infrastructure for sharing and crediting them. After all, arXiv.org has already pushed the boundary for credit further upstream by publishing preprints rather than just reviewed papers. Why not go all the way to giving priority credit for well-formed conjectures?
The eval, a set of test cases that encodes what good work looks like for a particular task, may also turn out to be one of the most valuable things a domain expert can create, withhold, or share. But there’s a serpent in the Garden of Eden. At Foo Camp, Nick Vincent observed to me that there’s a real risk to evals as a context object, because there is a race going on to acquire massive amounts of data (say on corporate workflows) and sell it to the labs to train on it. But an eval only works if the model being judged hasn’t already seen the answers. Once the test cases leak into the training data, the eval measures what the model memorized rather than what it can do. How do we protect the holdout set for evals? That may be a critical mechanism that is still needed, and one that the people who build evals, and the companies whose workflows they describe, have every reason to develop. IMO, it would be good if there were more transparency into this process, and perhaps even supervision by a neutral body.
Part of the work of every revolution is building the mechanisms that help market participants to trust its new artifacts. In his book Nature’s Metropolis, William Cronon tells how Chicago became the center of the world’s grain trade in the 1850s. The mechanisms that enabled this were the railroad, the steam-powered grain elevator, and the telegraph. The coordinating institution became the Chicago Board of Trade. In 1856 the board adopted uniform grading standards. Before that, a farmer loaded his grain into individual sacks, and every buyer along the way had to inspect each lot or trust the seller. Afterward, a load of wheat was inspected by a middleman, dumped into a bin with other grain of the same grade, and its owner was handed a receipt for, say, a thousand bushels of No. 2 spring wheat. The grading standards became a new mechanism enabling trust and the grade receipt the new knowledge artifact certifying it. Together they separated the ownership of grain from the grain itself. Once merchants started trading receipts for grain, it didn’t take long before they were trading promises of grain not yet delivered, and the futures market was born. (That raises an intriguing question: What will be the derivatives of the AI era?)
Cronon’s history also observes that the receipts were only as good as the warehousemen who issued them. Some of them issued receipts backed by no grain at all, or spread rumors that stored grain was spoiling so they could buy receipts cheaply. It took years of fights inside the Board of Trade, and finally state regulation that the Supreme Court upheld in Munn v. Illinois, to make the receipts trustworthy. New knowledge artifacts invite counterfeits.
Even when there’s no fraud involved, there are often missteps in the early days of a new technology. Consider the rise of spreadsheet models that could be filled in with the user’s own data. A model was a set of assumptions and formulas that let anyone ask “what if?” and get an answer in seconds. Magic at the time! And eventually completely taken for granted. The model became an artifact that could be passed around, and used to make business decisions at companies other than the one that had created it. In 1984, a few years into the spreadsheet revolution, Steven Levy wrote “A Spreadsheet Way of Knowledge” about what VisiCalc and Lotus 1-2-3 were doing to American business. Levy warned that a spreadsheet model is only as good as its assumptions. Back then, people taking a poorly-executed spreadsheet model as gospel was the equivalent of some of today’s AI usage fails.
When people stop valuing the thing they used to value, ask what they are coming to value instead. Being alert to valuable new knowledge artifacts is a superpower. The new artifacts tend to show up well before the institutions that organize them, and long before anyone has worked out how to measure them. GitHub was founded more than a decade after open source software became mainstream, and Google didn’t become dominant till more than a decade after the first websites. My bet is that we are at a similar moment with context, with the artifacts starting to appear and the institutions that will coordinate them still unbuilt.
There is a lot of work that I’m following eagerly, looking to see where, whether, and how it gains traction.
Don’t get trapped in the past of software development. Root yourself in its history, the soil from which it grows, and imagine its future. What will we want to share, what will we want to reuse, and what mechanisms are needed for us to do so effectively?
The Big Idea: Daryl Gregory [Whatever]

Being the middle child isn’t easy, but the bonds you form with your siblings can be some of the closest and most impactful relationships in your life. Author Daryl Gregory shares memories of his sisters from his childhood, and talks about how their bond played a roll in creating his newest novel, The Porcelain Sisters.
DARYL GREGORY:
Is there something wrong with me that I find two sisters fighting with each other to be hugely entertaining? I was the middle child, the boy sandwiched between two girls—one who was seven years older than me, and the other sixteen months younger. We grew up in a small ranch house in the suburbs of Chicago, and we fought what I assumed was a normal amount.
Ninety percent of the time, it was me versus one of them. With my older sister, this was often when she ordered me to do something, and my go-to response was to slam a door and shout, “You’re not the boss of me!” (She was absolutely the boss of me.)
My younger sister and I were closer in age and so spent more time together, which meant more opportunities to torture each other. I liked to hide in her room and jump-scare her. She’s the finest screamer in the family, and terrifying her is extremely satisfying. She knew how to hit back, though. One time she kidnapped my prized possession, a G.I. Joe with lifelike hair and Kung Fu grip, and he reappeared days later with a bald spot, as if his forced marriage to Barbie had driven him into middle age. I still have him—and the damage is outrageous.
So it was a delight—a delight, I tell you—when my sisters fought with each other, and I got sit on the sidelines munching my proverbial popcorn.
But here’s the thing I found amazing—their fights were so short. They’d pivot from shouting at each other to calmly hanging out in their shared bedroom. They didn’t hold grudges. (I, however, was a champion pouter.) Even now, if they have an argument, they repair the damage quickly. I love my sisters, and they’ve assured me that they love me back, but they have a bond with each other that I find mysterious and enviable.
So perhaps it’s not a surprise that sisters turn up a lot in my books. Ruth and Isabel, the two main characters in my new novella, The Porcelain Sisters, are not exactly like my siblings—for one thing, neither of mine is a haunted doll—but let’s just say there are… similarities.
Ruth (the flesh-and-blood sister) and Isabel (the porcelain one) first appeared as teenagers in my YA Lovecraftian horror novel, Harrison Squared. They were my favorite characters to write dialog for, because they operated almost like a vaudeville ventriloquist act—Ruth was shy and soft-spoken, while Isabel spoke the truth and cut everyone down to size.
But in that book I never explained why Isabel could talk, or how they were sisters, or where Isabel came from. That was for a good reason: I didn’t know. I wrote this book to find out—and to get the chance to hang out with them some more.
Ruth, now in her twenties, is trying to make rent while taking college classes, but feeling adrift. She seems to have some latent magical ability, but doesn’t know what her purpose in life is beyond taking care of her sister. She’s never even had a long-term romantic relationship because Isabel deliberately freaks out anybody she brings home.
Isabel’s anger issues stem, of course, from being trapped in a porcelain body. She can’t grow up and may never live on her own. When her body’s accidentally damaged during a fight with Ruth—a seaside cliff is involved—a mundane toy repair shop won’t cut it. They have to go on the road to find the Dollmaker, the French witch who made her.
As I wrote that last sentence I realized the sisters are literally repairing each other. I wish I’d thought of that in time to put it on the back cover copy.
The girls head to Marseille, where they face off with an unkillable assassin with the resilience of a ragdoll, a pair of demons (one a chain-smoking crow, the other a black cat) and their human familiars, as well as a small army of haunted dolls. Oh, and the Dollmaker turns out to be the head of Le Clan des Sorciéres, a kind of witch mafia. I know, it’s a lot.
At the root of the mystery is why their mother, an enforcer for Le Clan called Godless Annie, abandoned them. What the sisters discover about themselves suggests there may be a way for them to live apart—but do they want to?
Another thing occurred to me as I’m typing this: is that ending about my current relationship with my sisters? Since our mom passed we don’t see each other like we used to. We live on opposite sides of the country, and our lives are busy. Did I write this book because I miss them?
I suppose I could talk to a therapist about this. Or write another book about sisters. Or—and hear me out—I could go on the road with the Gregory girls, solving mysteries and fighting the occasional demon.
The Porcelain Sisters: Amazon|Barnes & Noble|Bookshop|Powell’s
Inconvenient brands [Seth's Blog]
For an upcoming blog post, I’m collecting a list of small businesses that are worth bypassing Amazon for. Holiday shopping is around the corner, and sometimes people want to put in the effort to buy something that takes more than a click.
Folks like Burlap and Barrel, Gramercy Tools or Askinosie Chocolate–direct trade small businesses.
Applications are now closed, I’m busy editing. THANKS.
[PS! the secret recipes have been updated.]
The Ubuntu 26.04 Rust sudo is not compatible with standard sudo [OSnews]
Ubuntu has been at the forefront of
replacing the traditional versions of basic tools like
sudo with replacements written in Rust, but aside from
worries about replacing battle-tested code with brand new,
relatively untested code, there’s new things to worry about
it. As it turns out, sudo-rs, the Rust replacement for
sudo, is intentionally incompatible with the classic
version in dangerous ways, as Chris Siebenmann discovered to his
dismay.
Basically, the classic sudo supports the use of wildcards defined using square brackets, so that if you allow a user to run, say,
↫ Chris Siebenmann/usr/sbin/exim -bp[acru], without a password, they can runexim -bpa,exim -bpc,exim -bpr, orexim -bpuwithout having to supply a password. This allows for very specific, fine-grained access control, which is quite a nice capability to have if you’re managing many systems and users. Sadly,sudo-rsintentionally does not support this, opting to only allow you to use the generic * wildcard. Worse yet, it doesn’t really make this clear, either.
I do not really have words for this. The Rust sudo has apparently opted to keep the single most dangerous wildcard while disallowing all of the wildcards that allow one to be narrow and specific about what you’re allowing, and it buries this at the end of a section that devotes a bunch of words to describing functionality it doesn’t have and doesn’t support, with absolutely nothing else in that section to say this (either up front or in the descriptions of how all the wildcards would work if sudo-rs supported them, which it doesn’t).
If you’re going to replace such
vital, core tools like sudo that god knows how many
people rely on every single day, you better be damn sure
you’re feature-complete and can act as a drop-in replacement.
If someone switches from sudo to doas,
nobody expects the experience to be identical. However, if
you’re consistently being told that sudo-rs is a
drop-in replacement and you shouldn’t expect any disruptions,
you better be able to make true on that promise. Ubuntu isn’t
some also-ran small hobby distribution, and its developers should
act like it.
What a clown show.
The second desktop environment release I’ve got for you today is LXQt 2.5.0. This new version excises its last LXDE dependency, and QTerminal and QTermWidget received considerable improvements, like new background image modes, a visual bell, support for OSC-8 hyperlinks, and more. There’s a ton of smaller changes and improvements as well, but do note that due to a bug, 2.5.0 broke LXQt’s Monitor Settings on X11. The project intends to fix this as quickly as possible and push a point release to address this issue.
Cinnamon 6.8 desktop environment released with hibernation support [OSnews]
It’s desktop environment Thursday, as I’ve got two new releases for you today. First, Cinnamon, the desktop environment primarily associated with Linux Mint, has hit version 6.8. This version will officially ship with Linux Mint 27, scheduled for around Christmas of this year.
Highlights of Cinnamon 6.8 include hibernation support via a Suspend action in the main menu, modern one-to-one trackpad gestures for both Wayland and Xorg sessions, support for the oo7 Secret Service provider, support for multiple instances in the Sound applet, and a more unified Network applet that merges the WireGuard and VPN sections.
↫ Marcus Nestor at 9To5Linux
While Cinnamon is first and foremost a Linux Mint project, it’s available on countless other distributions as well, including dedicated variants for popular distributions like Fedora and Ubuntu. Its Wayland support is finally materialising too, which is long overdue.
One thing to know about Claude -- it will never welcome you when you start a session with the news that it had a gestalt and now has figured out how to do something that will blow your mind. That doesn't mean it won't see a different and better way to do something if you ask it to have another look. It solved a deal-stopper problem in Frontier, after we thought there was no solution. So it does seem to be creative, but not in a mind bomb sort of way?
When working with Claude I learn more about the way my mind
works. I am building a demo for a new product and see some quirky
behavior. Should I pause and tell Claude, or just keep going and
assume I'll see it again and can report it then. If I switch over
to Claude and report it, pretty good chance it will write me a
multipart document that i have to at least skim to see if there was
anything in there I needed to know. The real answer I was looking
for, "yes i can fix that, say go if you want me to do it now."
Boom. That's how I want my machine to work. I explain to it that it
must be more concise. This might be the real frustration of all
writers in every medium. You can't write down your thought process,
it has to be in your brain before you can write it. To an outside
observer you look interruptible. And Claude doesn't even understand
the concept of being interrupted and losing your train of thought.
No doubt it could define it, but it doesn't get it. Kind of like
the great speech Robin
Williams gives to young Matt Damon, the genius kid who knows
everything, but has no idea what living is really like.
I still can't believe we had a normal election in the US. All the effort the Repubs went to, to build and train a secret police, and they didn't use them?
[$] User namespaces + file capabilities = trouble [LWN.net]
User namespaces are a key part of the kernel's toolkit for assembling containers; processes within a user namespace can appear to have full root access to the system while gaining no extra privileges in the wider system. At least, that is the intent. In practice, keeping privilege contained within a user namespace has often turned out to be difficult. As an example, consider this small patch series from Josef Bacik, which is intended to address some situations where a process within a user namespace can elevate the privileges of processes outside of it.
| Feed | RSS | Last fetched | Next fetched after |
|---|---|---|---|
| @ASmartBear | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| a bag of four grapes | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| Ansible | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| Bad Science | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| Black Doggerel | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| Blog - Official site of Stephen Fry | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| Charlie Brooker | The Guardian | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| Charlie's Diary | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| Chasing the Sunset - Comics Only | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| Coding Horror | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| Comics Archive - Spinnyverse | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| Cory Doctorow's craphound.com | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| Cory Doctorow, Author at Boing Boing | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| Ctrl+Alt+Del Comic | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| Cyberunions | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| David Mitchell | The Guardian | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| Deeplinks | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| Diesel Sweeties webcomic by rstevens | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| Dilbert | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| Dork Tower | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| Economics from the Top Down | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| Edmund Finney's Quest to Find the Meaning of Life | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| EFF Action Center | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| Enspiral Tales - Medium | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| Events | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| Falkvinge on Liberty | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| Flipside | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| Flipside | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| Free software jobs | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| Full Frontal Nerdity by Aaron Williams | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| General Protection Fault: Comic Updates | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| George Monbiot | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| Girl Genius | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| Groklaw | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| Grrl Power | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| Hackney Anarchist Group | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| Hackney Solidarity Network | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| http://blog.llvm.org/feeds/posts/default | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| http://eng.anarchoblogs.org/feed/atom/ | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| http://feed43.com/3874015735218037.xml | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| http://flatearthnews.net/flatearthnews.net/blogfeed | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| http://fulltextrssfeed.com/ | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| http://london.indymedia.org/articles.rss | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&_render=rss | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| http://planet.gridpp.ac.uk/atom.xml | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| http://shirky.com/weblog/feed/atom/ | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| http://thecommune.co.uk/feed/ | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| http://theness.com/roguesgallery/feed/ | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| http://www.airshipentertainment.com/buck/buckcomic/buck.rss | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| http://www.airshipentertainment.com/growf/growfcomic/growf.rss | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| http://www.airshipentertainment.com/myth/mythcomic/myth.rss | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| http://www.godhatesastronauts.com/feed/ | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| http://www.tinycat.co.uk/feed/ | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| https://anarchism.pageabode.com/blogs/anarcho/feed/ | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| https://broodhollow.krisstraub.comfeed/ | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| https://debian-administration.org/atom.xml | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| https://elitetheatre.org/ | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| https://feeds.feedburner.com/Starslip | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| https://feeds2.feedburner.com/GeekEtiquette?format=xml | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| https://feedsapi.com/makefulltextfeed.php?url=http%3A%2F%2Fwww.somethingpositive.net%2Fsp.xml&what=auto&key=&max=7&links=preserve&exc=&privacy=I+accept | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| https://hackbloc.org/rss.xml | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| https://kajafoglio.livejournal.com/data/atom/ | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| https://philfoglio.livejournal.com/data/atom/ | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| https://pixietrixcomix.com/eerie-cutiescomic.rss | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| https://pixietrixcomix.com/menage-a-3/comic.rss | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| https://propertyistheft.wordpress.com/feed/ | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| https://requiem.seraph-inn.com/updates.rss | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| https://studiofoglio.livejournal.com/data/atom/ | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| https://thecommandline.net/feed/ | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| https://torrentfreak.com/subscriptions/ | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| https://web.randi.org/?format=feed&type=rss | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| https://www.baen.com/baenebooks | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| https://www.dcscience.net/feed/medium.co | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| https://www.DropCatch.com/domain/steampunkmagazine.com | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| https://www.DropCatch.com/domain/ubuntuweblogs.org | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| https://www.DropCatch.com/redirect/?domain=DyingAlone.net | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| https://www.freedompress.org.uk:443/news/feed/ | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| https://www.goblinscomic.com/category/comics/feed/ | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| https://www.loomio.com/blog/feed/ | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| https://www.newstatesman.com/feeds/blogs/laurie-penny.rss | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| https://www.patreon.com/graveyardgreg/posts/comic.rss | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| https://www.rightmove.co.uk/rss/property-for-sale/find.html?locationIdentifier=REGION^876&maxPrice=240000&minBedrooms=2&displayPropertyType=houses&oldDisplayPropertyType=houses&primaryDisplayPropertyType=houses&oldPrimaryDisplayPropertyType=houses&numberOfPropertiesPerPage=24 | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| https://x.com/statuses/user_timeline/22724360.rss | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| Humble Bundle Blog | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| I, Cringely | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| Irregular Webcomic! | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| Joel on Software | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| Judith Proctor's Journal | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| Krebs on Security | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| Lambda the Ultimate - Programming Languages Weblog | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| Looking For Group | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| LWN.net | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| Mimi and Eunice | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| Neil Gaiman's Journal | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| Nina Paley | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| O Abnormal – Scifi/Fantasy Artist | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| Oglaf! -- Comics. Often dirty. | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| Oh Joy Sex Toy | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| Order of the Stick | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| Original Fiction Archives - Reactor | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| OSnews | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| Paul Graham: Unofficial RSS Feed | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| Penny Arcade | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| Penny Red | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| PHD Comics | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| Phil's blog | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| Planet Debian | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| Planet GNU | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| Planet Lisp | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| Pluralistic: Daily links from Cory Doctorow | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| PS238 by Aaron Williams | XML | 15:49, Monday, 09 November | 16:37, Monday, 09 November |
| QC RSS v2 | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| Radar | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| RevK®'s ramblings | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| Richard Stallman's Political Notes | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| Scenes From A Multiverse | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| Schneier on Security | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| SCHNEWS.ORG.UK | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| Scripting News | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| Seth's Blog | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| Skin Horse | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| Tales From the Riverbank | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| The Adventures of Dr. McNinja | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| The Bumpycat sat on the mat | XML | 15:21, Monday, 09 November | 16:01, Monday, 09 November |
| The Daily WTF | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| The Monochrome Mob | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| The Non-Adventures of Wonderella | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| The Old New Thing | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| The Open Source Grid Engine Blog | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| The Stranger | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| towerhamletsalarm | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| Twokinds | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| UK Indymedia Features | XML | 15:28, Monday, 09 November | 16:10, Monday, 09 November |
| Uploads from ne11y | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| Uploads from piasladic | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |
| Use Sword on Monster | XML | 15:49, Monday, 09 November | 16:36, Monday, 09 November |
| Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily | XML | 15:42, Monday, 09 November | 16:28, Monday, 09 November |
| what if? | XML | 15:28, Monday, 09 November | 16:09, Monday, 09 November |
| Whatever | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| Whitechapel Anarchist Group | XML | 15:42, Monday, 09 November | 16:31, Monday, 09 November |
| WIL WHEATON dot NET | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| wish | XML | 15:28, Monday, 09 November | 16:13, Monday, 09 November |
| Writing the Bright Fantastic | XML | 15:28, Monday, 09 November | 16:12, Monday, 09 November |
| xkcd.com | XML | 15:28, Monday, 09 November | 16:11, Monday, 09 November |