

The current state of the new back deck: In progress!
The astute among you, who also remember anything about the previous deck, will notice two differences so far. Most obviously, those tall posts, which will serve for framing a roof, and rather less obviously, the new deck is going to be flush with the patio door where the previous one had a step down. Why did it have a step down? Because, apparently, why not. Krissy decided she could do without the step down so here we are. This will mean that the stairs from the deck to the walkway will have one more step, but this is a choice we are ready to make.
I think it’s looking good, although when it’s done we’ll have some further decorating and landscaping choices to make. This is the way of all home improvements.
More updates as warranted. Expect at least a couple more before it’s all done.
— JS
[$] LWN.net Weekly Edition for May 7, 2026 [LWN.net]
Inside this week's LWN.net Weekly Edition:
Milestone 1.0.0 Release of APK Downloader `apkeep` Powers Research on Android Apps [Deeplinks]
Last week, we released apkeep version 1.0.0, the latest edition of our command-line Android package downloading software. Rather than indicating major changes for the project, this milestone instead signifies arriving at a relatively stable and mature place after gradual iteration on the project over the course of over four years.
What’s New in 1.0.0
We do have a few fresh features we’ve packed into this latest release, though—all focused on the Google Play Store:
In addition to the various Linux, Windows, and Android environments we support, we’re also happy to announce that since the last release in October we’ve been included in Homebrew for macOS users!
How Researchers Use apkeep to Understand the Android App Landscape
Researchers and users contributed most of the features of this release, including downloading dex metadata containing Google’s Cloud Profiles. This feature helps them use the tool in their own research of highlighting how these Android compilation profiles can be a vital source of information for evaluating dynamic testing. Numerous other projects have cited apkeep usage in their own workflows. For example, Exodus Privacy uses it to power the εxodus tool’s downloads when they monitor the privacy properties of apps. Various research teams have noted their own use of the tool in whitepapers, including one team who used the tool to download 21,154 apps in a widespread study of Android evasive malware. We are proud to provide a reliable tool in the toolbox they use to power their work.
What’s in Store for apkeep?
Our goals with apkeep have remained constant: provide a reliable, fast, and safe way to download apps from multiple app providers, not just the Google Play Store. While we’ve focused on it as the major Android app provider of choice across much of the world, we’ve expanded support to other stores as well, such as F-Droid for downloading open source apps. We’d like to continue broadening apkeep’s list of supported providers, to make it easy to do comparative analysis of apps provided in different contexts. For this, we’d love your contributions.
How You Can Help
If you’re using apkeep as part of your own toolbox (whether using it to do malware analysis, auditing apps, or simply using it as an app archiving tool), let us know! And if you like what we do, please consider donating to EFF to support our work.
Green Party as antisemitic, UK [Richard Stallman's Political Notes]
British cops have arrested two Green Party candidates, accusing them of promoting antisemitism.
The statement attributed to Sabine Mairey is flagrantly antisemitic. Aside from being inherently bad, it is also foolish and self-defeating to try to support Palestinians' rights by attacking the Jews that support Palestinians' rights.
The statement attributed to Saiqa Ali supports HAMAS. Since HAMAS is a terrorist organization, arguably the statement supports terrorism. However, HAMAS does not advocate antisemitism. HAMAS is is Islamist, meaning it seeks to impose the rules of Islam on everyone, including non-Muslims. That would be unjust, but does not imply treating Jews worse than Christians. However, HAMAS would be likely to treat Atheists such as me worse than either Christians or Jews.
According to Wikipedia, HAMAS was formerly antisemitic, but ended that about 10 years ago.
Tracking car travel, US [Richard Stallman's Political Notes]
Flock license plate cameras are networked to facilitate tracking of all cars' travel.
This is ideal for all sorts of abuses, from "running a plate for a date" to repression of protest groups once they have been identified as part of the mythical "terrorist" organization "Antifa".
The UK set up a national car tracking network over 20 years ago, and used it to find specific people and stop them from traveling to a protest.
Do you expect the persecutor to be less unjust than Tony B'liar?
If you are into Rhythm games or Beat em Ups I highly recommend checking out Dead as Disco. It is an arcade brawler with combat reminiscent of the Batman Arkham series except that all your punches and combos can sync to the beat.
Trying Out A New Recipe: Sugar Spiced Dreams “Banana Coffee Cake Muffins” [Whatever]
One of my friends recently told me she’s pregnant
with her second child, and as much as I love nice cards I
knew I wanted to do something a little more for her, so I asked her
to tell me what baked good she was really craving. She answered
muffins, and my muffin making journey began.
Though she never specified what kind of muffins she wanted, my mind immediately went to a coffee cake type of muffin. In my experience, coffee cake always hits the spot, and there is virtually no one who doesn’t love cinnamon and brown sugar (shout out to the one person I know who is allergic to cinnamon). I just needed to find a good recipe for such muffins.
In my search for coffee cake muffins, I came across this video, showing banana coffee cake muffins:
I knew this recipe was the one. Banana bread vibes enhanced by cinnamon brown sugar streusel?! Yes, please!
Looking at the recipe, it’s very interesting because it uses butter, neutral oil, eggs, and sour cream. So you already know we are in for a MOIST muffin. Especially with the addition of the bananas.
Honestly this recipe is very good for a casual home baker, as there’s nothing weird or hard to come by on the ingredients list. I only had to go buy sour cream and bananas, everything else I had on hand. Though I did use the very last of my flour and brown sugar for this, so sadly I will need to replenish those on my next grocery trip.
Anyways, let me tell you, this recipe is super quick and easy and these taste so flippin’ good! They were so good that I decided to make them again, and this time document it for y’all. So technically this was my second time.
Here’s the ingredients lineup:

If you’ve got a keen eye, you’ll notice I left the oil out of the photo. That was an accident, so just imagine a tall bottle of Crisco Vegetable Oil in the photo. Thanks.
The recipe says to make the streusel first, and I have no arguments against that, so I did! The first time I made it, my butter was cold and cubed like the recipe says, but the second time it was definitely not as cold. But the streusel turned out fine, in my not-so-expert opinion:

You want your streusel to kind of be like wet sand. At least, that’s what I’ve heard in the past. I covered this with a tea towel and put it in the fridge while I worked on the batter.
The first step of the batter is to mash the bananas and mix in all the wet ingredients. Finally a recipe that adds the bananas to the wet ingredients instead of making you add them at the end. Lookin’ at you, Joy of Cooking.
It says to mix until smooth and glossy, and that’s looking pretty glossified to me:

For both times I made these muffins, I actually did not melt the butter fully. It was just very, very soft butter, not liquid. So, melt if you want, but I don’t think it matters too much. Everything whisked together super easy!
In the recipe, it says to mix the dry ingredients in a separate bowl and then fold into the wet ingredients, but why not make this a one bowl batter and just throw the dry ingredients in right on top of the wet, and then mix? Makes more sense to me. Here’s the completed batter:

I always use cupcake liners because I hate trying to get muffins unstuck from the pan, plus my pan is kind of not in incredible shape. It’s seen better days, so liners it is.
The recipe says to fill the cups halfway, then add a layer of streusel, then pour more batter and finish off with a top layer of streusel. So here’s the tricky part. How do you know how much streusel to use on the half-cup-layer to ensure that you have a decent amount in the layer, but also ensure that you don’t use too much and make it so the top layer is weak? You have to prioritize the top layer’s condition, but make sure there’s at least some in the middle.
Honestly, my line of thought is to have a decent crumble, but make sure you’re not completely covering the batter. Like you want to be able to see the batter. Then, when you do the top layer, that’s when you cover the batter completely and make it a very full layer of streusel that can’t be seen through. So here’s the half layer:

See how there’s like, a good amount of crumbles in there but you can still clearly see the batter through the spaces? Here’s the top layer:

Almost no batter visible at this point. I used every crumb of streusel in the damn bowl (ignore the streusel crumbs in the middle parts of the pan). These were ready to bake.
One interesting thing about this recipe that I haven’t really seen before is that she says to bake them at 400 degrees Fahrenheit and then reduce the temperature to 350 after five minutes, without opening the oven door. How intriguing! I don’t think I’ve ever done that before. Regardless, I listened and reduced it to 350 and baked for 13 minutes since it said 12 to 15.
They come out a little ugly, but they smell incredible:

The streusel sort of just melds into the top of the muffin instead of being a defined layer on top, so they just kinda look bumpy and weird. But I promise they taste damn good. Look at that crumb!

These are super soft, moist, flavorful muffins with a delish crunchy, sweet cinnamon streusel topping. There’s cinnamon in the streusel and the batter itself, so you’re getting a lot of warm flavor here. The banana is an enhancement, not a detraction.
I gave the first batch to my friend like I mentioned, and she told me they were “AMAZING” and “insanely good” and literally told me to come back and get one immediately so I could try it myself. Thankfully, I had enough ingredients to make a second batch shortly after, and now y’all can try it for yourself.
Some of the muffins from the first batch had a weird issue of sinking in a little bit on the top in the middle, but the second batch didn’t have that issue. Not sure why.
Anyways, this recipe is going to be one I return to often. These are perfect just to gift to friends and family, or have on hand for a morning snack with your coffee. I highly recommend giving them a try.
Do you like banana bread or coffee cake better? Would you try this delish combo? Let me know in the comments, and have a great day!
-AMS
The best Star Wars since it was acquired by The Rodent is very easy to define. On the movie side, Rogue One. I thought Solo had some hot shit in it, but I can understand if you didn't want to pull the bar down for that particular ride. Beyond that, the first two seasons of The Mandalorian, Andor, and now - just finishing its run - is Maul. It's actually that good. Some people like it even more than me, and I like it a lot.
As I get deeper into the Claude-O-Verse, I get that it
doesn't remember anything about the code. The code actually serves
as its memory. There are comments in the code of course, put there
by Claude. Managing my own memory when I've got so many different
bits of software is the bain of my existence, esp as I get older
and memory becomes more iffy. But I'll turn it all over to Claude
as fast as I can, to relieve me of the responsibility to remember
all that stuff. Its brain works much better at this, it's really
amazing. I can conceive of things worth doing. And I know how to
build the features, but I don't have the skill of immediately
understanding some code by reading it not top down but all the
lines at the same freaking time. If this isn't us learning how to
work with an aliens species, it's a pretty good imitation.
Why not have changes in API behavior depend on the SDK you link against? [The Old New Thing]
Some time ago, I noted that
the CoInitializeSecurity function demands
an absolute security descriptor, even though many functions in
Windows produce self-relative security descriptors, forcing you to
perform a relative-to-absolute conversion, even though the function
internally just converts it back from absolute to relative.
This one seems easy enough to fix by Apple’s technique of giving the function the old behavior when the program is linked against the old SDK.
This sure sounds easy. If your program links with the newer SDK, then it gets the new behavior of accepting self-relative security descriptors. But if it links with the old SDK, then it gets the old behavior of requiring absolute security descriptors. If you want the new behavior, then you link with the new SDK.
This does create a subtlety that if you choose the wrong SDK to link against, everything still builds, but the results are different. Traditionally, Windows SDKs are forward-compatible: You can take an old program and link it against a newer SDK, and it will work exactly the same because the old program uses only the backward-compatible subset of the newer SDK. If you change behavior based on the SDK version that you link with, then it may not be obvious that the change in behavior you are experiencing is due to having upgraded the SDK libraries.
Also, what if a program is linked with one version of the SDK,
but a DLL that it uses is linked with a different version of the
SDK? Maybe you’re using a UI framework library that
hasn’t seen any need to update to the newer SDK. Or maybe
your program is the one using an old version of the SDK, but the UI
framework library is using the newer one. Do you let the main
program’s SDK version dictate the behavior of the function,
even though the DLL is expecting different behavior? The poor DLL
is going to call CoInitializeSecurity, and
it won’t behave the way it expects.
Okay, so maybe you decide that the function changes its behavior not based on the program’s linked SDK version but rather the version of the calling DLL. But how does a function know which DLL called it? You might say, “Well, you can look at which DLL the return address belongs to.” But that doesn’t work in the case of tail call optimization.
// some function in a DLL
HRESULT InitializeWidgets(
UINT maxWidgets,
const WIDGET_ID* ownerId,
PCWSTR ownerDescription,
PCWSTR countainerName,
PCWSTR containerDescription,
COLORREF defaultColor,
UINT defaultWidth,
UINT defaultHeight,
bool isRemoteAccessible,
bool isPersistent)
{
⟦ various initialization steps ⟧
static BYTE sd[] = { 0x01, ⟦ hard-coded values ⟧ };
return CoInitializeSecurity(sd, -1, nullptr, nullptr,
RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IDENTIFY,
nullptr, EOAC_NONE, nullptr);
}
That final call to CoInitializeSecurity
could be optimized into a tail call, in which case the subroutine
call instruction changes to an unconditional branch, with the
return address being the address of
InitializeWidget‘s caller. If
CoInitializeSecurity snooped at its return
address, it would be checking the SDK version of the wrong DLL.
Conversely, what if the function in the DLL is just a wrapper?
HRESULT CoInitializeSecuritywithLogging(
_In_opt_ PSECURITY_DESCRIPTOR pSecDesc,
_In_ LONG cAuthSvc,
_In_reads_opt_(cAuthSvc) SOLE_AUTHENTICATION_SERVICE* asAuthSvc,
_In_opt_ void* pReserved1,
_In_ DWORD dwAuthnLevel,
_In_ DWORD dwImpLevel,
_In_opt_ void* pAuthList,
_In_ DWORD dwCapabilities,
_In_opt_ void* pReserved3)
{
if (dwCapabilities & EOAC_APPID) {
LogUuid("CoInitializeSecurity with APPID", (UUID*)pSecDesc);
} else if (dwCapabilities & EOAC_ACCESS_CONTROL) {
Log("CoInitializeSecurity with IAccessControl");
} else {
LogSecurityDescriptor("CoInitializeSecurity with security descriptor", pSecDesc);
}
HRESULT hr = CoInitializeSecurity(pSecDesc, cAuthSvc, asAuthSvc, pReserved1,
dwAuthnLevel, dwImpLevel, pAuthList, dwCapabilities, pReserved3);
Log("CoInitializeSecurity returned", hr);
}
If you look at the return address, you will find the wrapper function and change your behavior to match the version that the wrapper function was built with, but that wrapper function is just passing through the parameters from its caller. It’s really the caller whose behavior we want to match, not the wrapper.
And what if the library is a static library rather than a DLL? It was written for one version of the SDK, but you link to another, and the behavior changes, and even if the function checks the return address, it will get the DLL’s address and see the DLL’s SDK version rather than the version the library wanted.
Changing behavior based on the SDK version you link to works only if programs are monolithic.
Bonus chatter: Changing to a newer SDK’s header files do create behavioral changes because, for example, structures with an explicit size member might get extended to contain additional fields, and the API uses the value of the size member to decide which version of the SDK the caller is using. But this is not dependent on the SDK that the caller links to, which is a good thing, because it lets you take static libraries which use different versions of the SDK header files and link them all together into a single program or DLL, and they will still work.
The post Why not have changes in API behavior depend on the SDK you link against? appeared first on The Old New Thing.
Trophies from hunting wild animals [Richard Stallman's Political Notes]
Arguing that banning or interfering with taking trophies from hunting wild animals is a misguided policy that interferes with protection of wildlife.
EPA budget cut proposal [Richard Stallman's Political Notes]
*Democrats say EPA head's budget cut proposal "reads like climate change deniers' manifesto".*
Magat federal prosecutors losing in court prosecuting protesters [Richard Stallman's Political Notes]
Magat federal prosecutors have lost in court in their prosecutions of protesters, because judges found them to be stretching the truth to the point where it snapped.
China regulations on Pretend Intelligence chatbots [Richard Stallman's Political Notes]
China will impose strict regulations on Pretend Intelligence chatbots that have conversations about suicide — a human must be notified to intervene.
Other things that chatbots will be prohibited from doing include encouraging violence, and emotional manipulation, and promoting "obscenity", gambling and crime, and misleading users.
An intelligent being can try to apply such rules because it can understands, more or less, the meaning of its communications. (Although it is not easy even for an intelligent being to understand reliably what a communication might imply to another intelligent being.)
A pretend intelligence will have trouble applying such rules beyond a superficial manner, because it is not capable of such understanding. It might have a discussion of "getting off this mortal coil" or "the big sleep" and not detect that as a reference to suicide or death.
Aside from that, I would expect that these rules will be interpreted by China as restricting discussion of political issues that lead to criticizing China. Alas, the US might restrict discussions of fascism and democracy, a few years from now.
Magats reopened "gun show loophole" [Richard Stallman's Political Notes]
The magats reopened the "gun show loophole", which allowed gun dealers to sell guns at gun shows without requiring a background check from the buyer.
Machine learning system for emergency triage [Richard Stallman's Political Notes]
A machine learning system did better than human doctors at providing a second opinion for emergency triage.
I think this justifies describing that system as "artificial intelligence", when used for that job.
Countries adopting plans for ending use of fossil fuels [Richard Stallman's Political Notes]
60 significant countries agreed to adopt plans for ending use of fossil fuels.
The most powerful countries, who are he biggest consumers of fossil fuels, did not participate, but the participants amount to half the global GDP, so their decision might shift the world's climate trajectory.
Cuts to bus service caused by end of federal subsidy [Richard Stallman's Political Notes]
Many low-income Americans can't easily get to a supermarket due to cuts in bus service caused by the end of a federal subsidy. (I suspect the wrecker ended it.)
However, there is no decrease in bus service in Somerville, Massachusetts. The MBTA has been increasing its bus service in the past few years and claims to have more bus service now than in 2019.
Supermarkets used to be far more numerous, a few decades ago. I think many independent small supermarkets went out of business.
Political enemies when they take offense over statement [Richard Stallman's Political Notes]
Never apologize to your political enemies when they take offense tactically over a statement that wasn't actually wrong.
Activists accuse Israeli soldiers of torture [Richard Stallman's Political Notes]
Activists on the latest Gaza aid flotilla accuse Israeli soldiers of violently torturing them after seizing their ships.
Israel says the flotilla's leaders will be taken to Israel for "questioning" — which may include torture.
British king Charles III urge US to respect legal rights [Richard Stallman's Political Notes]
British king Charles III, speaking to the US Congress, tried to urge the US to move back to democracy and respect for legal rights.
Will it change the minds of some Republicans?
Appeals court ruled against mailing abortion drugs [Richard Stallman's Political Notes]
An appeals court in the South, which is generally right-wing biased, ruled that abortion clinics cannot mail abortion drugs.
This will do terrible harm to women who can't afford to travel to a state where abortion is still lawful.
No Kings movement failing to follow up with local organizing [Richard Stallman's Political Notes]
Ralph Nader critiques the No Kings movement for failing to follow up with local organizing everywhere to demand removal of the would-be dictator.
The Big Idea: Andrew Dana Hudson [Whatever]

While we all know that technically our lives could end at any moment, sometimes that fact can feel far away. Author Andrew Dana Hudson brings that little known fact into the spotlight in his newest novel, Absence. Come along in his Big Idea as you think about what you would be leaving behind if you were to suddenly, mysteriously, become absent.
ANDREW DANA HUDSON:
What if people could disappear at any moment? How would the world adapt?
We were a year into the pandemic, and I was riding my bike, trying to get out of the house I’d kept myself cooped up in since the previous March. I found myself thinking about the weird pseudo-raptures that had shown up in pop culture over the last few years, like the “Thanos Snap” in the Avengers movies, or the “Sudden Departure” in The Leftovers—big supernatural events that impact everyone all at once. Where were the slow, crawling, banal supernatural disasters? Metaphysical catastrophes less like the rapture and more like the pandemic, or climate change: complex, unfolding, uneven, during which people have to go on living their lives despite unprecedented circumstances.
I got home, got off my bike, and wrote what would become the first chapter of my novel Absence. In this world, people are vanishing into thin air—with a loud popping sound—but it isn’t all at once. It’s one by one by one. Sometimes there are spikes, but mostly it’s ambient. It can happen to anyone, any time, which means everyone is wondering when it’s going to happen to them or their loved ones. Some fear it, others ignore it. A few are eager for it, for wherever people go when they pop. There are fakers and scammers and conspiracy theorists. A few tired bureaucrats try their best to manage the situation. We develop new norms and institutions and infrastructure, without ever ceasing to feel that it’s all so strange.
For me, writing this book was a way to process and capture in fiction the looming dread that I’d felt over my shoulder ever since the first COVID lockdowns. It was existential as much as epidemiological. A fear that an invisible force could reach into my life and take away someone whose presence I’d relied on.
Of course, people have always been mortal, fragile. We’re all a heart attack or a car accident or a well-placed meteor away from being out of the picture. But during that first pandemic year, that inherent human fungibility felt much more present in daily life and public spaces. And when people did get sick, they often disappeared, into quarantine or ICU intubation or, in a few places, mass graves. Death became both more and less present in our lives, and that was something I wanted to explore.
So what would you do? How would you live if you or the people you care about might be gone tomorrow, or the next second? And how would we as a society cope if we couldn’t rely on everyone showing up every day to do the jobs that keep all the economic gears turning together?
In Absence, drivers vanishing on the highway cause enough crashes that solo car travel is discouraged, and pilots popping mid-flight have travelers feeling safer on trains. Theater productions need extra understudies. A lot quickly becomes automated. People try to keep an eye on each other, because the worst thing is to disappear without anyone to tell your loved ones you’re gone. Trust in institutions erodes—which we’ve seen happen in our world too, but here is supercharged by the impossible-to-explain nature of this supernatural phenomenon.
When I started, I thought I was writing a short story. Instead, I found this premise just kept on giving me new wrinkles to explore, and so I kept writing, until I had a whole novel with a twisty mystery and a messy X-Files–style romance. And lots of jokes, since as dark as it was, 2020 was the funniest year of my life. Everyone was suddenly online together, riffing about the many absurdities of our new situation and flailing government. I spent half my days in group chats, laughing at bad memes until I cried. Tragedy and farce were all rolled up in one.
It’s always bothered me that we never got vaccine Mardi Gras, a sudden moment in which we could all hug each other and dance together without fear. We just got more unfolding, more arguments, more slow disaster. For me, exploring this big idea and writing this book eventually provided a lot of that catharsis I’d looked forward to.
My initial big idea turned out to have a lot to say about COVID culture and how we’ve been frog-boiled by climate breakdown, but also about how uncertain and contingent life is and has always been. We tell our family and partners we’ll always love them, but often it doesn’t work out that way. We make plans and then throw them to the wind. We think we’re on solid ground, and it turns out to be so much quicksand. That’s just part of being human. Finding meaning and companionship despite all that is the challenge we wake up with every day, each day perhaps the last before something makes us pop.
Absence: Amazon|Barnes & Noble|Bookshop|Powell’s
👎 California's Terrible, No Good, Very Bad Social Media Ban | EFFector 38.9 [Deeplinks]
We'd all like the internet to be a better place—for kids and adults alike. But in the name of online safety, governments around the world are racing to impose a dangerous new system of control. Are age gates the silver bullet to the internet's problems they're being promoted as? Or are we being sold a bill of goods? We're answering this question and more in our latest EFFector newsletter.
For over 35 years, EFFector has been your guide to understanding the intersection of technology, civil liberties, and the law. This latest issue covers an attack on VPNs in Utah, a livestream on how to disenshittify the internet, and California's proposed social media ban that could set a dangerous new precedent for online censorship.
Prefer to listen in? EFFector is now available on all major podcast platforms. This time, we're having a conversation with EFF Legislative Analyst Molly Buckley on why social media bans can't sidestep the U.S. constitution. You can find the episode and subscribe on your podcast platform of choice:
Want to help push back on these misguided regulations? Sign up for EFF's EFFector newsletter for updates, ways to take action, and new merch drops. You can also fuel the fight for privacy and free speech online when you support EFF today!
Eating My Own Dog Food: How I Used the Framework to Write the Post About the Framework [Radar]
In “Don’t Automate Your Moat,” I argue that engineering organizations should match AI autonomy to two independent dimensions: business risk and competitive differentiation. I used AI Gateway cost controls as a worked example throughout the piece because a single feature touches all four quadrants depending on which piece you’re building.
A piece making that argument should probably be written that way. Otherwise the framework is just rhetoric. So here is what actually happened: The same quadrants, applied to the writing of the post, then the two practices that cut across all of them.
My post has eighteen footnotes, all of them needing consistent structure, working URLs, and clean formatting. This is the work the bottom-left quadrant exists for. If a URL is wrong, I fix it in the next pass and nobody outside the editing loop notices.
AI handled the mechanical assembly. I spot-checked.
Two things sit in this quadrant.
The AI Gateway example. Using a single feature as a lens across all four quadrants was a product decision for the post. But the choice of which feature, and how to slice it, was recoverable. A weaker example, or one split across three features, would have cost me a draft. AI accelerated execution once I had settled on cost controls. I drove the design choice and interrogated the trade-off.
The build-versus-buy framing. This one was collaborative. Claude proposed the concept and the analogy: that the token-funded generation loop is functionally a procurement decision, not a build decision, even though the code lives in your repo. I saw what the framing could do for the structure of the argument, that it could link cognitive debt to competitive differentiation, survive a skeptical CTO reading it cold, and give the post a through-line that held the whole piece together. From there we worked it together. My phrase “a buy decision wearing a build costume” came out of that back-and-forth, and the structure of the argument got reshaped around the framing until it actually carried. Neither of us would have produced the final version alone. That is what this quadrant is supposed to look like.
In both cases, AI moved fast on execution. The judgment about whether the contribution fit, and what work it had to do in the surrounding argument, stayed with me. Flip the ratio and the post gets worse. Not catastrophically. Just generic in places where specificity was the whole point.
The research is thin. Most engineering work is maintenance and belongs in the automate quadrant regardless. Engineers can develop ownership of AI-generated code through study and iteration.
These are the objections any thoughtful reader would raise. Not because the post is anti-AI (it is not). The argument is that AI autonomy has to be matched with sufficient human understanding, and that argument has to defend itself against the case for letting AI run further with less. AI could draft the shape of those objections.
My job was verification. The bar was whether a thoughtful reader who disagrees with me would find the steelman fair. That meant tracing each concession back to make sure I was not giving away something I should have held, and each objection back to make sure I was representing the strongest version of the case rather than a convenient strawman.
The risk here is subtle. The section is unlikely to be flat-out wrong. The danger is that an unfair steelman quietly undermines the rest of the argument. A reader who notices a weak counterargument starts wondering what else is rigged. AI drafts, human verifies every path before merge.
This is where most of the actual time went.
The opening. The engineer who could not explain his own algorithm. The colleague paged about a service connected to a database nobody documented. Those examples were mine. The post only works if those scenes feel true, and a generated approximation of them would have read like exactly that. Not a risk worth delegating.
Defining the dimensions. Naming risk and differentiation as the two axes is one thing. Defining them in a way that holds up under pressure is another. The prose that establishes what business risk actually means (blast radius if this fails, from an afternoon to the business itself), and what competitive differentiation actually means (not the brand or the sales team, but the architecture, the algorithms, the institutional judgment that shaped them), is what every quadrant boundary depends on. If those definitions are vague, the quadrants become Rorschach tests. If they are sharp, the quadrants do real work. I wrote and rewrote those passages until a reader could apply them to their own systems without me there to translate.
The framework and the evidence behind it. The two-dimensional framing came out of my own thinking before Claude entered the loop. Once the dimensions existed, iterating with Claude on how to sharpen them was useful. It pushed me on where the dimensions overlapped and where the quadrant labels were doing too much work. But the seed had to be mine. A framework generated from a prompt would have read like one.
The evidence behind the framework worked the same way. I came in with a starter set of papers I already trusted: the METR productivity study, the MIT cognitive debt work, the Anthropic Fellows skill formation paper, the GitClear data on refactoring decline, and the Tilburg study on senior developer maintenance burden. Those were mine. From there, Claude expanded the research base, surfacing the Lancet endoscopy deskilling study, the OX Security and CodeRabbit and Apiiro analyses, and the survey work on LLM code generation in low-resource domains. That expansion was genuinely useful. It made the post broader and more current than what I would have assembled alone in the same time.
But expanding the source list is not the same as checking it. Every source Claude added had to be read against the specific claim it was being asked to support, because a framework is only as strong as the sources that anchor it. Generating a citation is mechanical. Reading a paper carefully enough to know what it proves, and whether the surrounding sentence reflects that, takes real time.
The Knight Capital loss figure was the clearest example. Different reports cite different numbers. The SEC enforcement order documents one figure. Bloomberg and other secondary sources round or reframe it. Claude pulled from whichever source it surfaced first on a given pass, and the number drifted across drafts. Catching that required going back to the primary source and pinning it.
The pattern repeated across other sources. Claude would attribute a claim to the right general area but the wrong specific paper. A finding about senior developer maintenance burden got mapped to a study that examined something adjacent but narrower. A claim about deskilling got pulled from a Lancet study that supports a more limited version of the argument than the way it had been phrased. Every structural source got reverified against what it actually proved. Several were corrected, replaced, or cut. Earlier drafts leaned on a real-world example whose causation was disputed in its sourcing. That example came out, and the Knight Capital section took its place because the SEC enforcement order documents the chain of causation directly.
This work could not be delegated. I had to own the mental model of what each paper actually proved and what it did not, the same way I had to own the mental model of the framework itself. The framework calls this the test of whether the engineer who built it could explain it in an incident review without looking at the code first. The writing equivalent is whether I could defend each citation in front of a skeptical reviewer without re-reading the abstract. The framework is the claim. The evidence is what makes it more than an opinion. Both had to be mine.
That covers the quadrants. Two practices cut across all of them and deserve their own treatment.
The most valuable thing Claude did on this post was push back. But you have to ask for it the right way.
Generic prompts produce generic critiques. “What do you think of this draft?” gets you a polite reaction with three suggestions. Useless. The prompt that actually works puts Claude in a specific adversarial seat. Mine looked roughly like this:
You are a pro-AI, token-maxing CTO watching your team and your competitors ship faster every quarter. You have a deeper than average understanding of AI. Provide a thorough critique of this article focusing on logic, completeness, and correctness. Be direct. Be brutal. This is not about the author’s feelings. It is about creating the best argument possible.
Three things make that prompt work. The persona is hostile to my thesis. The criteria are concrete: logic, completeness, correctness. And the explicit permission to be brutal lets the model drop the hedging it defaults to.
Working that way surfaced things I would have missed. Claude flagged that an early draft conflated cognitive debt as a risk problem with cognitive debt as a differentiation problem, and that collapsing them weakened both. It pointed out that one of the original real-world failure examples did not actually demonstrate the failure mode I was claiming, because the causation was disputed in the source material. It caught a passage where I was asserting a conclusion the evidence supported only in a narrower form.
Some of the pushback I accepted and rewrote around. Some I rejected, because Claude was applying a generic objection that did not fit the specific argument. (During one critique, Claude told me, “This post is sound advice. It did not need sixteen footnotes to establish it.” Fair point, but a bold claim from the model that couldn’t count to 18.) The point was not to follow every note. The point was to have the notes at all. A solo writer with a deadline does not get a skeptical reviewer on demand. Working this way, I did.
The same prompt structure works for structural critique. Swap the hostile CTO for a senior editor, keep the criteria concrete (where does the flow break, what arrives too late, what is Part 2 failing to deliver that Part 1 set up), and Claude will interrogate the architecture of the argument the same way it interrogated the content. Pulling the build-versus-buy framing forward in the final draft, and tightening the bridge between the risk and differentiation sections, came directly out of running that prompt.
This is what the research describes when it talks about AI use that preserves understanding. Interrogative, not delegated. Claude was stress-testing the argument I had already written, not writing it for me, the way a good editor or a skeptical colleague would.
The hardest part of working with Claude on a post like this is not getting it to write. It’s getting it to stop writing like Claude. (Yes, I know. That’s the construction this section warns against. I, not Claude, wrote it on purpose.)
Models default to a recognizable voice. Em dashes everywhere. Rule-of-three lists at every cadence shift. “Not just X, it’s Y” as a reflexive contrast. Words like delve, leverage, robust, nuanced, comprehensive, pivotal. Transitions like moreover and furthermore. None of this is wrong, exactly. It is generic writing wearing a polished costume. Readers can feel it even when they cannot name it, and the moment they feel it, they stop trusting the argument.
The Redpanda voice is different. Smart, practical, playful, genuine. Short sentences mixed with long ones. Active voice. Plain English. The brand guide is explicit that we are not corporate, not academic, not polite-but-generic. If the post sounds like a polished bot, it has already failed before the argument starts.
The editing pass on voice was its own discipline, separate from the editing pass on argument or evidence. Claude would draft a paragraph that was structurally fine and full of tells. I would rewrite it. Forcing a sentence to sound like me usually meant cutting hedges, killing throat-clearing, and saying the thing directly. The corporate-academic register Claude defaults to is also the register that lets vague claims hide. Several places where the post is now sharper started as a voice fix that turned into a content fix.
A few of the patterns I usually cut survived in the final post. Two em dashes, one rule-of-three list, a “not X, but Y” construction. Each one earned its place. The em dashes carried a beat that commas would have flattened. The list of three was the cleanest way to render a specific argument without chopping it into fragments. The contrast was the only shape that made the claim land. The discipline is not avoiding the patterns absolutely. It is refusing to use them on autopilot.
The tagline was the purest version of this work. Velocity is table stakes. Code is a commodity. Understanding is the edge. That line went through more iterations than any other sentence in the post. Claude produced dozens of variants. None of them were quite right, because taste in a tagline is not a thing the model can verify for itself. The right version had to feel true to me when I read it out loud. The iteration was useful, but the judgment had to be mine.
The parts I delegated most heavily were the parts where being wrong was cheapest. The parts I owned most tightly were the parts where being wrong would have cost the argument or the reader’s trust. The most useful thing Claude did was push back, stress-test the structure, and force me to defend the work I was claiming as mine.
The friction we hit, the drifting Knight Capital figure, the misattributed citations, the model’s instinct to write like a model, did not mean the tool failed. It meant that without an owner holding the mental model, the output would have looked clean and been quietly broken. The framework decided where to spend that ownership. I made that call deliberately, and the post reflects it.
[$] LLM-driven security reports disrupt coordinated disclosure [LWN.net]
Predictions that LLM tools would cause a surge in reports of security vulnerabilities have, unquestionably, borne out. As expected, maintainers are having to wade through more security reports than ever before; in addition, LLM tools are disrupting traditional-coordinated disclosure practices as well. The method of Copy Fail's disclosure, in particular, left vendors, projects, and users scrambling. In addition, maintainers are seeing parallel discovery of the same security flaws within the embargo window. Both of these developments mean that coordinated security disclosures may become a thing of the past.
There’s going to be a lot of new web software in the coming months. The competition changes from managing complexity to who sees the best way to remix the web. There are a lot ways to do it.
The SECURE Data Act is Not a Serious Piece of Privacy Legislation [Deeplinks]
The federal SECURE Data Act is not a serious consumer privacy bill, and its provisions—if enacted—would be a retreat from already insufficient state protections.
Republicans on the House Energy and Commerce Committee released a draft of the bill late last month without bipartisan support. The bill is weaker than congressional proposals in prior years, as well as most of the 21 state consumer privacy laws already on the books.
The bill could wipe out hundreds of state privacy protections.
Most troubling for EFF: the bill would preempt dozens, if not hundreds, of state laws that regulate related topics, and it would not allow consumers to sue to protect their own rights (commonly called a private right of action). And it comes nowhere close to banning online behavioral advertising—a practice that fuels technology companies’ always increasing hunt for personal data.
The bill also suffers from many other flaws including weak opt-out defaults, inadequate data minimization requirements, and large definitional loopholes for companies.
The bill would give consumers some rights to take action to control their personal data— like access, correction, deletion, and limited portability. These rights have become standard in all data privacy proposals in recent years.
The bill would also require companies to obtain your consent before processing your sensitive data, or using any of your personal data for a previously undisclosed purpose. Absent your consent, a company couldn’t do these things.
Further, the bill would allow you to opt out of (1) targeted third-party advertising, (2) the sale of your personal data, and (3) profiling of you that has a legal, healthcare, housing, or employment effect. Unfortunately, a company could keep doing these invasive things to you, unless you opted out.
The bill would also require data brokers that make at least 50 percent of their profits from the sale of personal data to register in a public database maintained by the Federal Trade Commission (FTC).
Federal privacy laws should allow states to build ever stronger rights on top of the federal floor. Many federal privacy laws allow this, including the Health Insurance Portability and Accountability Act, the Video Privacy Protection Act, and the Electronic Communications Privacy Act.
The SECURE Data Act would not do that. Instead, it would wipe out dozens, if not hundreds, of existing state privacy protections. Section 15 of the bill would preempt any “law, rule, regulation, requirement, standard, or other provision [that] relates to the provisions of this Act.” This would kill the 21 state consumer privacy laws passed in the past few years. These state bills aren’t strong enough, but they are still better than this federal proposal. For example, California maintains a data broker deletion tool and requires companies to comply with automatic opt-out signals—including one that is built into EFF’s Privacy Badger.
Because the SECURE Data Act has provisions that relate to data privacy and security, it could preempt all 50 state data breach laws and many others. It could also preempt state laws related to specific pieces of sensitive data, like bans on the sale of biometric or location information. Some states like California have constitutional provisions that protect an individual’s right to privacy, which can be enforced against companies. That constitutional provision, as well as state privacy torts, could also be in danger if this bill passed.
Strong consumer privacy laws should allow consumers to take companies to court to defend their own rights. This is essential because regulators do not have the resources to catch every violation, and federal consumer enforcement agencies have been gutted during the current administration.
The SECURE Data Act does not have a private right of action. The FTC, along with state attorneys general, have primary enforcement authority. The law also gives companies 45 days to “cure” any violation with no penalty after they are caught.
Moreover, Section 8 of the bill creates a vaguely defined self-regulatory scheme in which companies can apply to be audited by an “independent organization” that will apply a “code of conduct.” Following this code of conduct would give companies a presumption that they are complying with the law. This provision is an implicit acknowledgement that the bill does not provide regulators with any new resources to enforce new protections.
Section 9 of the bill would give the Secretary of Commerce broad power to “take any action necessary and appropriate to support the international flow of personal data,” including assessing “security interests of the United States.” The scope of this amorphous provision is unclear, but it likely does not belong in a consumer protection bill.
Your online privacy should not depend on whether you have the time, patience, and knowledge to navigate a website and turn off invasive tracking. Good privacy laws build in data minimization requirements—meaning there should be a default standard that prevents companies from processing your data for purposes that are not needed to provide you with the service you asked for.
The SECURE Data Act puts the burden on you to opt out of invasive company practices, like targeted third-party advertising, the sale of your personal data, and profiling. The bill at least requires companies to obtain your consent before processing your sensitive data (like selling your precise location). These consent requirements, however, are often an invitation for companies to trick you into clicking a button to give away your rights in hard-to-read policies. Indeed, few people would knowingly agree to let a company sell their personal data to a broker who turns around and sells it to the government.
Section 3 of the bill uses the term “data minimization,” but it is done in name only. The provision does not limit a company’s processing of data to only what is necessary to provide the customer with the good or service they asked for. Instead, the provision limits processing of data to only what a company “disclosed to the customer”—meaning if it is in the confusing privacy policy that nobody reads, it is okay.
And the bill would not even allow you to restrict certain uses of your data. As companies seek more data for AI systems, many internet users do not want their private personal data to be used to train those models. However, the bill makes clear that “nothing in this Act may be construed to restrict” a company from collecting, using, or retaining your data to “develop” or “improve” a new technology.
The bill has numerous loopholes that technology companies would exploit if the bill were to become law. Below is just a sampling:
Congress is long overdue to enact a strong comprehensive consumer data privacy law, and we have sketched what it should look like. But the SECURE Data Act is woefully inadequate. In fact, it would cause even more corporate surveillance of our personal information, by wiping out state laws that are more protective than this federal bill. Even worse, this bill would block state legislatures from protecting their residents from the privacy threats of tomorrow that are unforeseeable today.
Incus 7.0 LTS released [LWN.net]
Version 7.0 of the Incus container and virtual-machine management system has been released. Notable changes in this release include the inclusion of a low-level backup API, the addition of basic S3 operations directly in Incus to replace the now-unmaintained MinIO project, as well as the removal of support for cgroups v1 and xtables (iptables/ip6tables/ebtables). This is a long-term-support (LTS) release, with support through June 2031.
The first 2 years will feature bug and security fixes as well as minor usability improvements, delivered through occasional point releases (7.0.x). After that initial two years, Incus 7.0 LTS will move to security only maintenance for the remaining of its 5 years of support.
A total of 204 individuals contributed to Incus between the 6.0 LTS and 7.0 LTS releases with 45 contributing between the 6.23 and 7.0 LTS releases.
Distributions quote of the week [LWN.net]
— Gerald Pfeifer2,442 days is a fair amount of time, and that's how long I had been on the openSUSE Board as its chair when I started this note.
That journey began on August 19th, 2019, and it ends today as I am stepping down as chair of the openSUSE Board.
It's been an intense time for most of it — just a bit calm the last year and a half. A time of joy and frustration, anger occasionally and rewarding more often than that.
During those years we have seen SUSE and openSUSE carve out from Micro Focus (escalations on the IT side included); a global pandemic; SUSE go public and return to private; the arrival of Rancher, NeuVector, and Losant; four CIOs and four (and de facto more) General Managers for Linux at SUSE; repeated discussions on the logo and name of our project; the creation of Geeko Foundation; people move on and others step up; seven board elections; board meetings become public; passionate debates and growing pains; web site refreshes; the number of distros and tooling around them grow and evolve; and quite a bit more.
If I can leave one piece of advice, it is to embrace open, non-violent communication and trust — both given and received.
I encourage more lateral sharing (of accomplishments, changes, challenges, calls for collaboration) between the cells and bodies that make up openSUSE, and above all applying the PRINCIPLE OF CHARITY. That is, giving others the benefit of the doubt, assuming good intentions, and looking for real value in their perspectives.
Does that always come easy? Absolutely not.
Does it make a difference? A lot.
Security updates for Wednesday [LWN.net]
Security updates have been issued by AlmaLinux (corosync, dovecot, image-builder, python-tornado, resource-agents, and systemd), Debian (openjdk-11, openjdk-17, and pyjwt), Fedora (pdns, pyOpenSSL, and squid), Slackware (hunspell), SUSE (alloy, avahi, bubblewrap, cmctl, coredns, curl, dpkg, firefox, golang-github-prometheus-prometheus, grafana, libpng12, PackageKit, sed, and xen), and Ubuntu (docker.io-app, nghttp2, python-django, and python-mako).
CodeSOD: Please Find, Rewind [The Daily WTF]
As previously
discussed, C++ took a surprisingly long time to get a "starts
with" function for strings. It took even longer to get a function
called "contains". In part, that's simply because
string::find solves that problem.
Nancy sends us a… different approach to solving this problem.
bool substringInString(string str, string::iterator &it)
{
string tmp;
bool result = false;
int size = str.length();
int count = 0;
while (count < size)
{
tmp += *it;
it++;
count++;
if (tmp.find(str) != string::npos)
{
result = true;
it -= size;
break;
}
}
if ( !result)
{
it -= size;
}
return result;
}
This function iterates across a string, character by character.
In this iteration, we copy one character at a time into
tmp. Then we see if tmp contains our
search str. If it does, we break out of the loop after
rewinding the iterator. Outside of the loop, we check if we found
the substring, and if we did, we rewind the iterator. Then we
return true or false based on whether on not we found the
substring.
So wait a second. str is our search string.
it is where we're searching. And we copy from
it up to our search string's length into
a temporary string. We then do a find in that
temporary string- hey! This is just a startsWith check
written in the most insane way possible.
Why even bother with the while loop? While tmp is
shorter than the search string, the answer is always "no, we
haven't found it". And the developers knew that- that's why they
always rewind size characters on the iterator. They're
always searching exactly that many characters. Of course, since we
always rewind the same amount, we can also just move the
it -= size statement out of the loop and out of the
if statement and do it once.
Nancy calls this "a little gem" in a "large codebase". Yeah, a real gem.
The Organization Is the Bottleneck [Radar]
Everyone is adopting AI coding tools. Engineers are writing code faster than ever. But are organizations actually delivering value faster? That’s not obvious.
I wrote Enabling Microservice Success with a big focus on engineering enablement, guardrails, automated testing, active ownership, and light touch governance. I didn’t know AI coding agents were coming, but it turns out that the practices that make microservices work long-term are exactly the foundations you need to make AI coding agents work too. If your organization is adopting these tools—and the evidence suggests we all are—the book covers how to build these foundations in detail.
I’m hearing very different experiences from different organizations, and what seems to make the difference is the level of maturity that the software engineering organization has. As the latest DORA report puts it, “AI’s primary role in software development is to amplify. It magnifies the strengths of high-performing organizations and the dysfunctions of struggling ones.”
A decade ago, I started building microservices at the Financial Times. It didn’t take long to realize that success wasn’t about the technology choices. Success was about getting the cultural and organizational setup right, because that’s what allows teams the autonomy to move fast. There’s no benefit to adopting microservices if your organization can only release code once a week: You’re paying the cost of a more complicated operational architecture but not benefiting from being able to ship changes frequently and with a high degree of confidence they won’t break something in some other part of your system.
The pattern with AI coding agents is strikingly similar. If you don’t have automated tests, or documentation, or CI/CD pipelines that support progressive delivery, you won’t succeed with microservices—and you won’t succeed with AI coding agents either. The organizations reporting the best results are the ones that already invested in the foundations.
Here are some of the specific parallels.
Guardrails matter. When we moved to microservices, we learned quickly that you can’t just tell teams to “do the right thing” and hope for the best. You have to build paved roads and guardrails that help people to do the right thing automatically, so that autonomy doesn’t become chaos. AI coding agents need exactly the same approach. An agent with access to your codebase and no constraints is an autonomous team with no guardrails: it will move fast, but not necessarily in the right direction. If you’ve already built those guardrails for your teams—coding standards enforced in CI, architectural decision records, templates for new services—you have a serious head start because those same artifacts become the constraints that keep agents on track.
Your deployment pipeline is your best safety net. Automated tests, progressive rollouts, zero-downtime deploys—these are the practices that catch mistakes before they reach production, whether the code was written by a human or by an AI. Observability matters here too: You wouldn’t run a microservice without logs, metrics, and traces, so why would you merge code you didn’t write yourself without the ability to understand what changed and why? And independent deployability gives you independent reversibility—when an AI agent makes a bad change to one service, you can roll it back without unwinding six other things. If we’re shipping code three times as fast with the help of AI agents, all of this becomes even more important.
Engineering enablement is how you scale. Your platform team’s templates, libraries, and golden paths don’t just help developers: they become the constraints and context that make AI agents effective across your organization. The organizations that already invested in enablement are the ones finding it easiest to adopt AI coding tools. The ones that didn’t are finding that AI just amplifies the mess.
League of Canadian Superheroes – Issue 5 – 18 [Comics Archive - Spinnyverse]
The post League of Canadian Superheroes – Issue 5 – 18 appeared first on Spinnyverse.
Rowhammer Attack Against NVIDIA Chips [Schneier on Security]
A new rowhammer attack gives complete control of NVIDIA CPUs.
On Thursday, two research teams, working independently of each other, demonstrated attacks against two cards from Nvidia’s Ampere generation that take GPU rowhammering into new—and potentially much more consequential—territory: GDDR bitflips that give adversaries full control of CPU memory, resulting in full system compromise of the host machine. For the attack to work, IOMMU memory management must be disabled, as is the default in BIOS settings.
“Our work shows that Rowhammer, which is well-studied on CPUs, is a serious threat on GPUs as well,” said Andrew Kwong, co-author of one of the papers. “GDDRHammer: Greatly Disturbing DRAM RowsCross-Component Rowhammer Attacks from Modern GPUs.” “With our work, we… show how an attacker can induce bit flips on the GPU to gain arbitrary read/write access to all of the CPU’s memory, resulting in complete compromise of the machine.”
Update Friday, April 3: On Friday, researchers unveiled a third Rowhammer attack that also demonstrates Rowhammer attacks on the RTX A6000 that achieves privilege escalation to a root shell. Unlike the previous two, the researchers said, it works even when IOMMU is enabled.
The second paper is GeForge: Hammering GDDR Memory to Forge GPU Page Tables for Fun and Profit:
…does largely the same thing, except that instead of exploiting the last-level page table, as GDDRHammer does, it manipulates the last-level page directory. It was able to induce 1,171 bitflips against the RTX 3060 and 202 bitflips against the RTX 6000.
GeForge, too, uses novel hammering patterns and memory massaging to corrupt GPU page table mappings in GDDR6 memory to acquire read and write access to the GPU memory space. From there, it acquires the same privileges over host CPU memory. The GeForge proof-of-concept exploit against the RTX 3060 concludes by opening a root shell window that allows the attacker to issue commands that run unfettered privileges on the host machine. The researchers said that both GDDRHammer and GeForge could do the same thing against the RTC 6000.
Pluralistic: In praise of vultures (06 May 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

One of my bedrock beliefs is that capitalists really hate capitalism. They may name their beloved institutes after the likes of Adam Smith, but they ignore everything Smith had to say about the necessity of competition to keep markets from turning into monopolies:
https://pluralistic.net/2023/06/09/commissar-merck/#price-giver
The theory of capitalism holds that markets are a kind of distributed computer that aggregates trillions of decisions from billions of market participants in order to optimize production and distribution of goods and services, creating a "Pareto-optimal" world where no one can be made better off without making someone else worse off.
Whether or not you believe that this computer exists and functions as predicted, one indisputable fact about it is that it requires the freedom to choose in order to work. The point of market-as-computer is that it aggregates decisions, so it can only work if everyone is as free as possible to decide.
But that's not the world capitalists want. For capitalists, the point is to restrict other people's choices in order to maximize your own freedom. That's how we get economic doctrines like "revealed preferences": the idea that if a person says they want one thing, but does another thing, then you can tell what they really prefer by looking at the latter and disregarding the former. This is the kind of doctrine you can only fully embrace after sustaining the kind of highly specific neurological injury that is induced by taking an economics degree, an injury that makes you incapable of perceiving or reasoning about power. Under the doctrine of revealed preferences, someone who sells their kidney to make the rent has a revealed preference for only having one kidney:
https://pluralistic.net/2026/03/30/players-of-games/#know-when-to-fold-em
Capitalism is supposed to run on risk: the risk of being overtaken by a competitor drives businesses to deliver better services more efficiently, thus producing a bounty for all. But capitalists really hate risk, hence the drive to monopoly: Mark Zuckerberg admitted, in writing, that he only bought Instagram so that he wouldn't have to compete with it ("It is better to buy than to compete" -M. Zuckerberg):
https://pluralistic.net/2025/11/20/if-you-wanted-to-get-there/#i-wouldnt-start-from-here
Capitalists hate capitalism, but they love feudalism. Feudalism is like capitalism, in that you have a ruling class that creams off the surplus generated by labor; but under feudalism, society is organized to protect rents (money you get from owning stuff) over profits (money you get from doing stuff). The beauty of rents is that they are insulated from risk: if you own a coffee shop, you're in constant danger of being put out of business by a better coffee shop. But if you own the building and your coffee shop tenant goes under, well, you've still got the building, and hey, now it's on the same hot block as the amazing new cafe that's driving its competitors out of business:
https://pluralistic.net/2023/09/28/cloudalists/#cloud-capital
Douglas Rushkoff calls this "going meta": don't drive a taxi, rent a medallion to a taxi driver. Don't rent a medallion, start a ride-hailing app company. Don't start a ride-hailing company, invest in the company. Don't invest in the company, but options on the company's shares. Each layer of indirection takes you further from the delivery of a useful service – and insulates you further from risk:
https://pluralistic.net/2022/09/13/collapse-porn/#collapse-porn
Monopoly is to capitalism as gerrymandering is to democracy, a way to strip out any meaningful choice. Think of the two giant packaged goods companies that fill your grocery aisles: Procter & Gamble and Unilever. Practically everything on your grocer's shelves is made by a division of one of these two massive conglomerates. If you try to "vote with your wallet" by buying a low-packaging version of a product, it's going to be sold to you by the same company that sells the high-packaging version. If you switch to an artisanal brand of cookies made by a local family business, Unilever or P&G will buy that company and issue a press release declaring that they made the acquisition because they know "their customers value choice":
https://pluralistic.net/2024/05/18/market-discipline/#too-big-to-care
Gerrymandering strips your vote of any impact on political outcomes. Monopoly strips your purchases of any ability to influence economic outcomes. Wrap both of them in "revealed preferences" and you get a system that endlessly narrates its ability to deliver choice, and then blames your misery on your having chosen badly.
This is the method of the entire conservative project. As Dan Savage says: the thing that unites conservative assaults on voting, birth control, abortion and no-fault divorce is the stripping away of choice. Conservatives are trying to create a world populated by husbands you can't divorce, pregnancies you can't prevent or terminate, and politicians you can't vote out of office. Add to that Trump's assault on the National Labor Relations Board, his reversal of the FTC's ban on noncompetes, and his protection of "TRAP" agreements that force employees to pay thousands of dollars if they quit their jobs, and you get "jobs you can't quit":
https://pluralistic.net/2025/09/09/germanium-valley/#i-cant-quit-you
Conservative strongmen like Trump and Musk exalt the value of self-determination – for themselves, at everyone else's expense. Trump's ability to stiff the contractors that built his hotels and Musk's ability to rain flaming rocket debris down on the people who live near his company town require that everyone else be stripped of protections. They get to determine their own course in life by taking away your ability to determine your own. Their right to swing their fists ends two inches past your nose:
https://pluralistic.net/2026/04/21/torment-nexusism/#marching-to-pretoria
Cheaters and bullies hate the rule of law, hence Trump's endless repetition of Nixon's mantra: "When the president does it, that means it is not illegal." But not everyone can be president, and the world is full of would-be Trumps in positions of power who would like to be able to commit crimes without fear of legal repercussions. For these people, we have something called "binding arbitration."
"Binding arbitration" is a widely used contractual term that forces you to surrender your right to sue a company that wrongs you. Instead of suing, binding arbitration forces you to take your case to an "arbitrator"; that is, a lawyer who is paid by the company that cheated you or maimed you or killed your loved one. The arbitrator decides whether their client is guilty, and, if so, how much that client owes you. The entire process is confidential and it is non-precedential, meaning that if a company rips off millions of people in the same way, each of them has to arbitrate their claims separately, and people who are successful can't share their tactical notes with the people who are next in line to plead for justice.
That makes binding arbitration another key weapon in the conservative movement's war on choice: not just jobs you can't quit and politicians you can't vote out of office, but also companies you can't sue. Binding arbitration is a creation of the Federalist Society and their champion Antonin Scalia, who authored a series of Supreme Court dissents and (ultimately) decisions that opened the door for binding arbitration everywhere:
https://pluralistic.net/2025/10/27/shit-shack/#binding-arbitration
Given the Fedsoc's role in shoving binding arbitration down every worker and shopper's throat, it's decidedly odd that they invited Ashley Keller to be their keynote debater in 2021, where he argued that "concentrated corporate power is a greater threat than government power":
https://www.youtube.com/watch?v=aY5MrHGjVT8
Keller is a powerhouse lawyer, and an avowed conservative, who has pioneered many tactics for overcoming binding arbitration clauses. He helped create "mass arbitration," bringing thousands of arbitration cases on behalf of Uber drivers who'd had their wages stolen by the company. Since Uber has to pay the arbitrators in each of those cases, they faced a much larger bill than they would face in any possible class action suit:
https://www.reuters.com/article/otc-uber-frankel-idUKKCN1P42OH/
Mass arbitration cases spread to all kinds of large firms that used petty grifts to steal from thousands or even millions of people, like Intuit, who deceive – and rip off – millions of Americans every year with their fake Turbotax "free file" system:
https://pluralistic.net/2022/02/24/uber-for-arbitration/#nibbled-to-death-by-ducks
Mass arbitration worked so well that Amazon actually revised its terms of service to remove binding arbitration from their terms of service, because they realized that they'd be better off facing class action suits:
https://pluralistic.net/2021/06/02/arbitrary-arbitration/#petard
Of course, the point of binding arbitration was never to create a streamlined system of justice – it was to bring about a world of no justice, where you have no right to sue. It's part of the decades-old "tort reform" movement that the business lobby has used to take away your right to sue altogether. Any time you hear about a seemingly crazy lawsuit (like the urban legends about the McDonald's "hot coffee" case), you're being propagandized for a world without legal consequences for companies that defraud you, steal from you, injure you, or kill you:
https://pluralistic.net/2022/06/12/hot-coffee/#mcgeico
That's why companies (like Bluesky) are now trying terms of service that also ban you from mass arbitration, while retaining the right to consolidate claims into a mass arbitration case if that's advantageous to them:
But Keller keeps finding creative ways around binding arbitration. He's currently bringing thousands of arbitration claims against Google, on behalf of advertisers whom Google stole from (Google is a thrice-convicted monopolist, and they lost a case last year over their monopolization of ad-tech, where they were found to have defrauded advertisers).
He also just argued before the Supreme Court in a case against Monsanto over the company's attempt to escape liability for causing cancer in farmworkers with their Roundup pesticide:
https://www.npr.org/2026/04/27/nx-s1-5793804/supreme-court-monsanto-roundup-arguments
Keller appears in the latest episode of the Organized Money podcast, for a fascinating interview about his work and outlook, and how he reconciles his work fighting corporate power with his identity as a movement conservative:
https://www.organizedmoney.fm/p/the-conservative-who-torments-big
Keller's first big, important point is that (basically), capitalists hate capitalism (see above). He cites Milton Friedman, who "always said that the tort system is the best way to ensure that companies behave and follow the rules." For Keller (and Friedman) the alternative to private litigation against bad businesses is "government regulation and the alphabet soup of Washington, DC agencies [that] try and police these companies."
But, of course, the businesses that want binding arbitration and tort reform (so they can't be sued) also want to "dismantle the administrative state" (so they can't be regulated). They're the impunity movement, the "when the president does it, that means it is not illegal" movement, the "heads I win, tails you lose" movement. They're the caveat emptor movement, the "that makes me smart" movement:
https://pluralistic.net/2024/12/04/its-not-a-lie/#its-a-premature-truth
They don't want efficient markets, with the ever-present threat of a better competitor putting them out of business. They want feudalism. They want to go meta. They want to have the kind of self-determination you can only achieve by taking away everyone else's self-determination.
I was very struck by Keller's claim to be engaged in an exercise that Milton Friedman identified as the best one for making markets work. One of Keller's most forceful points is that class action suits are especially important for reining in petty, recurrent grifts, the junk fees that are the hallmark of enshittification.
He quotes his old boss, the archconservative judge Richard Posner, who said "Only a lunatic or a fanatic sues for $20." But if you multiply a $20 junk fee by ten million purchases, a company can use that fact to make hundreds of millions of dollars. That's real folding money, which is why every company has figured out a way to whack you for a $20 junk fee.
There are two ways to end this racket: one is litigation, the other is regulation, and the capitalism-hating-capitalists who run the world want to kill both. That's why the business lobby smears lawyers like Keller as being "vultures." But as Matt Stoller says, "vultures look aggressive and whatnot, but when you actually get rid of vultures out of an ecosystem, all sorts of things go haywire."
I love this point. Vultures live off the disgusting, rotting crap that would otherwise pile up around us, breeding disease and emitting an unbearable stench. If plaintiff-side, no-win/no-fee lawyers are vultures, then junk fees, wage theft, and the million petty frauds they fight are the disgusting, rotting crap that vultures feed off of – and the harder we make it for our noble vulture lawyers, the more disgusting, rotting crap we have to live with, hence the unbearable stench that is all around us.
Listening to Keller was a fascinating exercise. I thoroughly disagree with him about many things – the way he characterized Section 230 of the Communications Decency Act couldn't have been more wrong – but it's quite bracing to hear a capitalist who doesn't hate capitalism defend it against the vast majority of capitalists, who hate capitalism more than any socialist ever did.

"The Score Is Four/and Next Time More" https://rickperlstein.substack.com/p/the-score-is-fourand-next-time-more
Bodyform | Never Just a Period https://www.youtube.com/watch?v=GpFYcj2sJ3A
Getting Digital Fairness Right: EFF's Recommendations for the EU's Digital Fairness Act https://www.eff.org/deeplinks/2026/04/dos-and-donts-eus-digital-fairness-act-effs-recommendation-regulating-digital
DHS Demanded Google Surrender Data on Canadian’s Activity, Location Over Anti-ICE Posts https://www.wired.com/story/dhs-demanded-google-surrender-data-on-canadians-activity-location-over-anti-ice-posts/
#25yrsago Torvalds responds to Microsoft's Craig Mundie https://web.archive.org/web/20011019132822/http://web.siliconvalley.com/content/sv/2001/05/03/opinion/dgillmor/weblog/torvalds.htm
#25yrsago Bankrupt Argentina considers banning proprietary code and switching to free software https://web.archive.org/web/20010614131152/https://www.wired.com/news/business/0,1367,43529,00.html
#20yrsago Danny Hillis on how games are(n’t) like a theme park https://web.archive.org/web/20060513182649/https://www.wired.com/wired/archive/14.04/disney.html
#20yrsago Mission Impossible opening marked by anti-Scientology flyover https://web.archive.org/web/20060514000636/http://hailxenu.net/
#20yrsago SmartFilter targets Distributed Boing Boing – how to defeat it https://memex.craphound.com/2006/05/04/smartfilter-targets-distributed-boing-boing-how-to-defeat-it/
#15yrsago John Ashcroft assumes charge of “ethics and professionalism” for Blackwater https://web.archive.org/web/20110507103749/https://www.wired.com/dangerroom/2011/05/blackwaters-new-ethics-chief-john-ashcroft/
#15yrsago Rumsfeld and other US officials say torture didn’t help catch bin Laden https://web.archive.org/web/20110505012303/https://www.wired.com/dangerroom/2011/05/surveillance-not-waterboarding-led-to-bin-laden/
#15yrsago Rental laptops equipped with spyware that can covertly activate the webcam and take screenshots https://web.archive.org/web/20110506130156/http://www.ajc.com/business/pa-suit-furniture-rental-933410.html
#15yrsago Parallel machine made out of 17 stitched-together Apple //e’s https://web.archive.org/web/20110504194313/http://home.comcast.net/~mjmahon/AppleCrateII.html
#15yrsago Sarah Palin and James Lankford: giving $4 billion of taxpayer money to oil companies doesn’t matter https://web.archive.org/web/20110505220640/https://thinkprogress.org/2011/05/03/palin-lankford-oil-subsidies/
#15yrsago Stephen Harper violated election laws https://web.archive.org/web/20110701000000*/http://www.examiner.com/canada-headlines-in-canada/stephen-harper-breaks-election-rules-campaigns-on-radio-on-election-day
#15yrsago History and future of bin Ladenist extremism https://www.juancole.com/2011/05/obama-and-the-end-of-al-qaeda.html
#10yrsago Belushi widow & Aykroyd produce Blues Brothers animated series https://deadline.com/2016/05/the-blues-brothers-animated-comedy-series-dan-aykroyd-1201748389/
#10yrsago Chinese censorship: arbitrary rule changes are a form of powerful intermittent reinforcement https://www.techdirt.com/2016/05/04/why-growing-unpredictability-chinas-censorship-is-feature-not-bug/
#10yrsago US government and SCOTUS change cybercrime rules to let cops hack victims’ computers https://www.wired.com/2016/05/now-government-wants-hack-cybercrime-victims/
#10yrsago After advertiser complaints, Farm News fires editorial cartoonist who criticized John Deere & Monsanto https://web.archive.org/web/20160505042150/https://www.kcci.com/news/longtime-iowa-farm-cartoonist-fired-after-creating-this-cartoon/39337816
#10yrsago Outstanding rant about establishment pearl-clutching over Trump https://web.archive.org/web/20160505033357/https://theconcourse.deadspin.com/george-will-is-a-haughty-dipshit-1774449290
#10yrsago The Planet Remade: frank, clear-eyed book on geoengineering, climate disaster, & humanity’s future https://memex.craphound.com/2016/05/04/the-planet-remade-frank-clear-eyed-book-on-geoengineering-climate-disaster-humanitys-future/
#5yrsago Qualia https://pluralistic.net/2021/05/04/law-and-con/#law-n-econ
#5yrsago Whales decry the casino economy https://pluralistic.net/2021/05/04/law-and-con/#all-bets-are-off

Barcelona: Internet no tiene que ser un vertedero (Global
Digital Rights Forum), May 13
https://encuentroderechosdigitales.com/en/speakers/
Virtual: How to Disenshittify the Internet with Wendy Liu (EFF),
May 14
https://www.eff.org/event/effecting-change-enshittification
Berlin: Re:publica, May 18-20
https://re-publica.com/de/news/rp26-sprecher-cory-doctorow
Berlin: Enshittification at Otherland Books, May 18
https://www.otherland-berlin.de/de/event-details/cory-doctorow-in-der-friesenstrasse-23-kreuzberg-praesentiert-von-otherland.html
Berlin: Enshittification at Otherland Books, May 19
https://www.otherland-berlin.de/de/event-details/cory-doctorow.html
Hay-on-Wye: HowTheLightGetsIn, May 22-25
https://howthelightgetsin.org/festivals/hay/big-ideas-2
SXSW London, Jun 2
https://www.sxswlondon.com/session/how-big-tech-broke-the-internet-b3c4a901
NYC: The Reverse Centaur's Guide to Life After AI with Jonathan
Coulton (The Strand), Jun 24
https://www.strandbooks.com/cory-doctorow-the-reverse-centaur-s-guide-to-life-after-ai.html
Edinburgh International Book Festival with Jimmy Wales, Aug
17
https://www.edbookfest.co.uk/events/the-front-list-cory-doctorow-and-jimmy-wales
Artificial Intelligence: The Ultimate Disruptor, with Astra
Taylor and Yoshua Bengio (CBC Ideas)
https://www.cbc.ca/listen/live-radio/1-23-ideas/clip/16210039-artificial-intelligence-the-ultimate-disruptor
When Do Platforms Stop Innovating and Start Extracting?
(InnovEU)
https://www.youtube.com/watch?v=cccDR0YaMt8
Pete "Mayor" Buttigieg (No Gods No Mayors)
https://www.patreon.com/posts/pete-mayor-with-155614612
The internet is getting worse (CBC The National)
https://youtu.be/dCVUCdg3Uqc?si=FMcA0EI_Mi13Lw-P
"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
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2026
"The Post-American Internet," a geopolitical sequel of sorts to Enshittification, Farrar, Straus and Giroux, 2027
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Third draft completed. Submitted to editor.
"The Post-American Internet," a short book about internet policy in the age of Trumpism. PLANNING.
A Little Brother short story about DIY insulin PLANNING

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
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
Five short entries a day.
It’s easy to imagine that if you do this 200 workdays in a row, your career will advance. And it makes it easier to prepare for your annual review or that next job interview.
Like most habits, the hardest part is committing to begin.
New Comic: Tattooine
Girl Genius for Wednesday, May 06, 2026 [Girl Genius]
The Girl Genius comic for Wednesday, May 06, 2026 has been posted.
2017: If
you're running a campaign -- think about what you can do now that
makes the world a better place. Your campaign is drawing huge
attention and money. Most of it is wasted on lies and attack ads.
Take a small portion of the money and attention to start doing now
the things you hope to do when you're in office. This will turn out
to be good politics too. And the process can continue after you're
elected. it will make sure you're not too deeply ensconced in the
bubble of government. And if you lose, at least you can say the
campaign was good for everyone, people who voted for you and people
who voted for the other guy.
Urgent: Call ABC to resist bully's censorship [Richard Stallman's Political Notes]
US citizens: call ABC to resist the bully's censorship demands.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Urgent: Pass war powers resolution about Cuba [Richard Stallman's Political Notes]
US citizens: call on Congress to pass a war powers resolution about Cuba and end the humanitarian crisis that the US is causing there.
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.
Decrease in rate of homicides in California [Richard Stallman's Political Notes]
California officials point to changes in laws as the cause of a 35% decrease in the rate of homicides since 2024.
The article linked to just above displays symbolic bigotry by capitalizing "black" but not "white". (To avoid endorsing bigotry, capitalize both words or neither one.) 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.
Rejection of fascist "Christian nationalist" movement [Richard Stallman's Political Notes]
Most US Christians reject the fascist "Christian nationalist" movement and they increasingly organize to oppose it.
Repression of climate protesters [Richard Stallman's Political Notes]
Research suggests that repression of climate protesters is self-defeating: it builds the impetus for climate defense.
Refused afghan asylum seekers in UK [Richard Stallman's Political Notes]
The UK says it might send refused Afghan asylum seekers back to Afghanistan.
This would make the UK culpable for the repression that drives them to flee and beg for asylum.
Bad aspects of fame with antisocial media [Richard Stallman's Political Notes]
Arguing that antisocial media give each used the bad aspects of fame. Just not the good aspects.
Experiments with brainwashing North Korean prisoners [Richard Stallman's Political Notes]
The CIA experimented with attempts at brainwashing of North Korean prisoners of war starting in 1950. However, it did not try using mind-altering drugs for this until later.
Big Bad Bill federal tax voucher program [Richard Stallman's Political Notes]
The Big Bad Bill established a federal tax voucher program — a taxpayer paying tuition for private school could take the whole sum off per tax owed.
This takes that money straight off the public budget.
Schemes the cheater uses to receive money from supporters [Richard Stallman's Political Notes]
A survey of many schemes that the cheater and his family use to receive money from supporters, many of whom visibly receive special preference for giving the money.
SLAPP lawsuits endanger freedom of the press [Richard Stallman's Political Notes]
SLAPP lawsuits endanger freedom of the press; magat officials are now using them and tightening the screws to a level that few can resist.
To restore effective freedom of the press, we need laws to stop this practice. But officials that practice SLAPPing won't approve them.
If we had a supreme court full of honest supporters of freedom and democracy, they would interpret existing laws to prioritize citizens' freedom to participate in forming public opinion. But it is hard to count on that to come back.
(satire) Need to end journalism [Richard Stallman's Political Notes]
(satire) *[The bully] Claims Correspondents’ Dinner Shooting Reinforces Need To End Journalism.*
Increasing Cuba's infant mortality rate [Richard Stallman's Political Notes]
US sanctions imposed on Cuba in two stages by the persecutor appear to be responsible for increasing Cuba's infant mortality rate from 4.0 per 1000 live births in 2028 to 9.9 per thousand as of 2025.
I suppose that non-infants in Cuba are also dying at a higher rate now.
Disneyland facial recognition [Richard Stallman's Political Notes]
Disneyland is joining the movement to get Americans accustomed to facial recognition everywhere and anywhere.
If it correctly recognizes you at a ride in Disneyland, that instance won't do you any harm. But the Orwellian general practice of using facial recognition facilitates finding and repressing dissidents or anyone else selected for persecution.
UK's advancing-age ban on selling tobacco [Richard Stallman's Political Notes]
I have reconsidered my conclusion about the UK's advancing-age ban on selling tobacco. It is a regulation on selling the drug, not a prohibition in the usual sense. So perhaps it is acceptable.
Persecutor threatening ABC TV with lawfare [Richard Stallman's Political Notes]
The persecutor is threatening ABC TV with lawfare as retaliation for Jimmy Kimmel's joke.
Press freedom categorized as "good" [Richard Stallman's Political Notes]
* While a fifth of the global population lived in a country where press freedom was categorized as "good" in 2002, that has now fallen to less than 1% of the world’s population.*
Voting Rights Act reduced [Richard Stallman's Political Notes]
Contending that the Supreme Court's vitiation of the Voting Rights Act made the US cease to be a democracy.
Voting Rights Act weakened again [Richard Stallman's Political Notes]
The Supreme Court overturned section 2 of the Voting Rights Act, paving the way for more Republican gerrymandering.
Public fines by private companies, UK [Richard Stallman's Political Notes]
UK local councils are arbitrarily prohibiting ordinary acts in public places -- from feeding birds to using a "dirty word", or political campaigning, or gathering in a group.
The fines are farmed out to private companies -- which should be prohibited absolutely. When a private company is empowered to impose fines, it tends to become oppressive, demanding payment even for fines that are not legally justified.
Rush to redraw electoral districts, US [Richard Stallman's Political Notes]
Several Republican-dominated states are rushing to draw new electoral districts to lock in more Republican elected officials, including in Congress.
Continuing violence against Jews, UK [Richard Stallman's Political Notes]
A violent form of antisemitism in Britain is motivating violent attacks on Jews, both attacks on synagogues and attacks on Jews chosen at random on the street.
The attackers seem to equate being Jewish with supporting Israel's atrocities against Palestinians and Lebanese. That is mistaken, foolish, and unjust.
Visa evaluation procedures in the US [Richard Stallman's Political Notes]
Visitors to the US will henceforth be refused a visa if they admit to any fear of persecution in their home country.
This is, I suppose, meant as an excuse to deny them asylum if they ask for asylum while visiting the US. It may be effective repression, but it goes against the spirit of the right to asylum.
Takeover in the US: science, medicine [Richard Stallman's Political Notes]
The saboteur in chief is eliminating the political independence of US medical and scientific agencies.
This will put all of us in danger.
Surveillance pricing, MD [Richard Stallman's Political Notes]
Maryland's law against surveillance pricing has several loopholes opened by industry lobbying.
One loophole is that the law allows the store to set a high official price and then offer discounts selectively based on personal data.
If every customer initially sees the high official price, that is not as devious as full-on surveillance pricing. If the official price is too high, the customer may simply decide not to purchase.
But if the store only shows that customer's personal discounted price, this is equivalent to surveillance pricing as currently practiced.
None of these problems affect me, because I don't identify myself to the store. The store can't generally track my location, either -- and at the time I buy there, my location is "right in front of the sales clerk".
Bulgaria's new government [Richard Stallman's Political Notes]
Just after Hungary escaped from right-wing extremism, Bulgaria has probably fallen into it.
Expelling doctors visiting from Cuba [Richard Stallman's Political Notes]
The bully is forcing various countries to expel their Cuban doctors. That leaves them with a shortage of doctors.
Two largest airlines propose to merge [Richard Stallman's Political Notes]
The world's two largest airlines (United and American) propose to merge.
The idea is absurd in principle, since it would undermine competition. Under a government that believed in preserving competition, they would never have proposed this. But the wrecker encourages the businesses that support him to merge and become a monster — as long as they use their power in devious ways to punish his designated enemies.
The text mode lie: why modern TUIs are a nightmare for accessibility [OSnews]
There is a persistent misconception among sighted developers: if an application runs in a terminal, it is inherently accessible. The logic assumes that because there are no graphics, no complex DOM, and no WebGL canvases, the content is just raw ASCII text that a screen reader can easily parse.
The reality is different. Most modern Text User Interfaces (TUIs) are often more hostile to accessibility than poorly coded graphical interfaces. The very tools designed to improve the Developer Experience (DX) in the terminal—frameworks like Ink (JS/React), Bubble Tea (Go), or tcell—are actively destroying the experience for blind users.
↫ Casey Reeves
The core reason should be obvious: the command-line interface, at its core, is just a stream of data with the newest data at the bottom, linearly going back in time as you go up. Any screen reader can deal with this fairly easily, and while I personally have no need for such a tool, I’ve heard from those that do that kernel-level screen readers are quite good at what they do. TUIs, or text-based user interfaces, made with modern frameworks are actually very different: they’re “2D grid[s] of pixels, where every character cell is a pixel. [They] abandons the temporal flow for a spatial layout.”
It should become immediately obvious that screen readers won’t really know what to do with this, and Reeves gives countless examples, but the short version is this: the cursor jumps all over the place with every screen update, which makes screen readers go nuts. Various older TUIs, made in a time well before these modern TUI frameworks came about, were designed in a much more terminal-friendly way, or give you options to hide the cursor to solve the problem that way. Irssi, for example, uses VT100 scrolling regions instead of redrawing the whole screen every time something changes.
I had never really stopped to think about TUIs and screen readers, as is common among us sighted people. The problems Reeves describes seem to stem not so much from TUIs being inherently inaccessible, but from modern frameworks not actually making use of the terminal’s core feature set. I really hope this Reeves’ article shines a light on this problem, and that the people developing these modern TUIs start taking accessibility more seriously.
Today, using AI is almost always a solo endeavor.
From the very start, forty years ago, the internet (inter + network) has amplified the exchange of information. But the first cycles of AI have been just one person at a time. No one joins in your chats, no one sees them. It’s just you and a disembodied voice in a 1:1 chat.
At purple.space, we’re testing a new approach. In some of our discussion categories, we’ve invited one or two AI voices to join the conversation. The result is a powerful new sort of interaction among peers. Instead of going off in irrelevant tangents or isolating us from reality, the presence of multiple people engaging together changes the tone and focus of the conversation.
AI together has some useful features:
More generally, AI business models from many smaller companies using the big LLMs as tools are fundamentally flawed. They’re busy selling cost reduction, which works for a while, but value creation happens in a network. If you’re offering someone a chance to save time and money, they’ll switch the moment a competitor offers them a chance to save even more time or money. But if you can build a useful network, a system that works better when you’re in it, then your brand gains traction.
I wrote this thought piece four months ago, sharing it here if it’s helpful:
An opportunity for bootstrapped startups who seek to create value using AI.
Most AI success stories to date are about cost reduction or speed improvement. A startup offers businesses a way to get more done with fewer people, replacing customer service or programming teams with bots. The upside of cost reduction is that it’s a very easy sale—give the client a free sample, once it’s demonstrated to work, they have an instant benefit in switching.
The downsides: it’s difficult to win a race to the bottom, since someone can always promise more savings than you. And it’s finite—once the savings are made, there’s no incremental value left to create. And the human costs are real and persistent.
What’s worth seeking instead is something generative. A use of AI that doesn’t reduce costs, it creates value. It opens new opportunities, leads to growth, connection, and utility.
A note on “worth paying for.” Most bootstrappers aim at price-sensitive customers and then wonder why growth is hard. The insight they miss: people and organizations with expensive problems and real resources don’t just tolerate paying more for things they value—they prefer it. Premium pricing signals seriousness. The market to aim for is one where the problem is real, the budget exists, and the solution creates something they couldn’t get otherwise.
What people actually pay for. At the foundation of almost every premium purchase are three primal drives: status (I matter, people like me see me as significant), affiliation (I belong, there are people like me and they accept me), and freedom from fear (I am safe, the threat is not coming). Freedom from fear may be the most primitive—you can’t pursue status or affiliation while in survival mode. And most premium purchases are freedom from fear, wearing a costume.
Built on those roots is a middle layer of things that reliably deliver one or more of what people seek: legitimacy, transformation, belonging to a narrative, control, certainty, protection, trust, health and longevity, and leverage.
And an outer layer that’s instrumental—things people buy because they deliver the middle layer: access, capital, time, attention, convenience, efficiency, delight, new experiences, beauty.
Commodities—food, shelter, sex, addictive substances—sit outside this hierarchy. They don’t build toward the three roots; they temporarily suppress the anxiety that comes from not having them.
The implication: an AI business worth building delivers something from the middle layer, justified by the outer layer.
What businesses actually pay for. The hierarchy for individual consumers doesn’t translate directly to organizational purchases. Three drives sit at the foundation of almost every business buying decision:
Avoid blame — if this goes wrong, it won’t be my fault. The IBM principle: nobody ever got fired for buying the market leader. The champion inside the organization needs a defensible story before they’ll act.
Claim credit — I brought something that worked, and people noticed. The flip side of blame avoidance, and the engine of every internal champion. If your solution lets someone look good, they’ll sell it for you.
Reduce uncertainty — we can plan around this, and the chaos goes down. Organizations pay significant premiums for the ability to forecast, commit, and stop worrying.
Built on those roots is a middle layer of things organizations reliably invest in: growth, efficiency, compliance, competitive advantage, talent, morale, resilience, optionality, speed, legitimacy, and relationships.
And an outer layer that justifies the middle: cost savings, time savings, data, access, convenience, integration, reporting, support.
New vs. repeat purchases require different approaches. Repeat purchases are won by switching costs, relationships, and the network effect. New purchases require someone inside the organization to become a champion, which means they need a story that serves their career, not just their company’s interests.
Not all problems are equally interesting. Some purchases—like gaining market share or entering a new category—are chaotic and interesting, with room for narrative and ambition. Others—like cheaper materials or faster processing—are grinding commodities where the only story is price. Commodity buyers fear paying too much. Buyers in chaotic spaces fear making the wrong bet. These require entirely different approaches.
The forcing function. Businesses rarely lead the way on new purchases without a crisis compelling them to take action. Without a forcing function, even a perfect solution sits in the pipeline forever—committees form, pilots stall, champions get reassigned.
Three kinds of crises create forcing functions:
Competitive crisis — a rival did something, and now there’s urgency. This is the most common and the most legible to a champion inside the org. “They have it, and we don’t” is a sentence that ends meetings and allocates budgets.
Technology crisis — the old way stopped working, or a new capability made the old way look reckless. AI itself is currently creating this for many industries simultaneously. Unusually, the forcing function and the tech solution are the same thing.
Public/market upheaval — regulatory change, cultural shift, a collapse in input costs, a pandemic. These are the most powerful and least predictable. They create entirely new categories of buyers overnight.
The implication for a bootstrapper: sell into a forcing function that already exists, don’t try to create one. Organizations already feeling the crisis don’t need convincing—they need a solution that lets their champion say “I found it.” And crises often intensify the asymmetric information pattern: the people inside the crisis don’t yet know what others in similar situations have already learned.
NOTES:
Naked AI is a trap. If all you’re doing is building a gateway to Anthropic or ChatGPT, your token costs eat a significant portion of your revenue—and you have no defensible position.
Hidden prompts are insufficient. Breakthrough prompting can create real value, but there’s no protectable, convenient way to sell it as a business.
The network effect matters. Selling benefits one person at a time is brutally expensive. The breakthroughs come with projects that have the network built in—where interactions work better when your colleagues are using them too.
Asymmetric information is a pattern worth seeking. Some of the most durable advantages come not from network effects but from knowing something others don’t, or from helping a cohort pool what they know against a party that currently has structural information advantage over them.
So, a theory of profit—a framework for the kind of project worth building:
The spreading problem. Most products and services don’t spread on their own. The people who use them may love them, but love isn’t enough. What causes spreading isn’t enthusiasm—it’s tension. Specifically, the tension created for the person who has the product when someone they care about doesn’t have it yet.
This tension takes two forms:
Economic tension — I have an advantage you don’t, and either I want you to have it too (if you’re on my side) or I need you to have it to work with me (if we’re collaborating). Accounting software spreads through supply chains this way. Email spread this way. If you don’t have it, we can’t do business.
Social tension — everyone I know has access to something, and I don’t, and that gap is visible and uncomfortable. Facebook spread this way. So did smartphones. The tension isn’t that I’m missing a feature. It’s that I’m visibly outside of something.
The test isn’t “would someone recommend this?” Recommendations require enthusiasm plus low social risk plus the right moment. The test is: does not having this create a gap that someone is motivated to close?
A product that creates economic tension spreads through organizations and supply chains. A product that creates social tension spreads through peer groups and cohorts. A product that creates neither—no matter how good it is—requires advertising to spread, which means it needs a budget, which means it needs a business model that can support that budget before it has scale.
The implication for an AI bootstrapper: before asking “is this good enough that people will share it,” ask “does this create a gap that makes sharing feel necessary rather than optional?”
A note on data stack reality. A network built on user data is only as good as the willingness of users to populate it. And willingness requires two things simultaneously: it has to be frictionless enough that people don’t have to think about it, and it has to feel safe enough that people don’t have to worry about it. These two conditions are almost always in tension. The more automatic the data collection, the more it feels like surveillance. The more control you give people, the more friction you add. (In Purple, we make opting in to AI conversations completely optional, fyi).
The design challenge isn’t technical—it’s social. The container has to feel like a tool you control, not a system that watches you. Most ideas that satisfy one condition fail the other.
The most promising data stacks are ones where people are already generating the data, are already comfortable with it existing somewhere, and the innovation is simply giving them better access to what’s already theirs. The forcing function for consumer data sharing may be the simplest one of all: I already feel watched. I might as well get something back.
The cautionary version of this is the email surveillance tool—a business reads all internal email and gets a report on who’s helpful, who’s toxic, who’s looking for a job. The value is real and obvious. The fear is also real and obvious. And in most organizations, the fear wins. Any data-stack business has to answer the question: who controls this, and what happens if it goes wrong? If the answer isn’t immediately reassuring, the business doesn’t get adopted.
The sponsored model. Not every valuable AI business needs the end user to pay. When the problem is real, but the affected population lacks resources, a foundation, brand, or institution with aligned interests can fund the miracle instead. The economics flip entirely: instead of acquiring thousands of customers one at a time, you close one relationship with one institution that already has the distribution, the mission, and the budget. The user gets the miracle for free. The sponsor gets impact, data, or loyalty. The business gets a defensible contract instead of a leaky funnel.
This model works when three things are true: the population being served is large and underserved, the value created is legible to an institution that cares about it, and the data generated serves both the individual user and the sponsor’s mission. A foundation pays $2,000,000, and 40,000 families of the incarcerated each get a ten-page legal document instead of a bushel of random papers—and the accumulated data starts identifying patterns in bad actors that no single case could surface alone. A bank funds a personal finance tool for its own customers. A health brand funds a fitness coach for an underserved population. The viral problem becomes easier: you don’t need users to recruit each other to pay for it, you need one institution with existing distribution to say yes.
The cheap inference model. Not every AI application needs a frontier model. The problems worth looking for going forward might not be the ones that require maximum reasoning or nuance—they’re the ones that require structure, pattern recognition, aggregation, and organization at scale. Form filling. Document organization. Transcription plus summarization. Matching similar records across large datasets. These problems are unglamorous but enormous in volume and almost entirely underserved.
The strategic advantage: Moore’s Law is on your side. The models that feel too limited today will feel adequate in eighteen months. Building on cheap open-source inference means your margins improve as the technology does, without changing your product. And “huge” doesn’t mean huge—a single business school graduating class is enough to populate a meaningful census of what jobs actually lead where. The data stack doesn’t need to be large. It needs to be specific, trusted, and ahead of what anyone else has assembled.
/end rant.
[If you’re building something that matters, I hope you’ll consider purple.space, a small and useful community of peer support.]
Using duplicity to back up your FreeBSD desktop [OSnews]
Backing up in modern times, we’ve had ZFS snapshots and replication to make this task extremely easy. However, you may not have access to another ZFS endpoint for replication, need to diversify risk by using a non-ZFS tool for backup, or are simply using UFS2, living the old skool life.
For these situations, my first recommendation is to lean on Tarsnap for its ease of use and simplicity, making restoration just as easy as backing up. But some situations call for a different approach. Maybe you have a strict firewall at your company that doesn’t allow Tarsnap data streams to egress from your corporate network, or you have internal/easy access to storage endpoints, such as S3-compatible object storage or a large-file storage location with SFTP access.
When you are faced with the latter, the duplicity (sysutils/duplicity in ports) utility is available as an easily installable package onto your FreeBSD system.
↫ Jason Tubnor at the FreeBSD Foundation
The rest of the article explains how to use duplicity on FreeBSD for the purpose described above.
The Big Idea: Martha Conway [Whatever]

Do we as a society tend to abide by the phrase, “if you love something, let it go,” or are we more likely to dig our claws in and refuse to part ways? Author Martha Conway discusses in the Big Idea for her newest novel, We Meet Apart, just how impactful the absence of family members and loved ones can be, and what it feels like to be left behind.
MARTHA CONWAY:
When I was twenty-three, three of my five older sisters divorced themselves from our family. They took care to tell me that their issues were with my parents, not me, but nevertheless, I didn’t see or hear from them in over ten years. They didn’t attend my wedding, which hurt me deeply—it seemed to me that their non-relationship with my parents was more important to them than a relationship with me.
My feelings back then were tumultuous. I missed my sisters, I was angry, I was confused, and I was sad—often, it felt like, simultaneously. Later, when my mother died quite suddenly, I felt the same way: an avalanche of mixed emotions.
What do you do when a loved one leaves, or dies? Would you follow them if you could, even if it meant giving up your own independence, your own future? And how do you honor all the many emotions you feel without drowning in them?
In my speculative historical novel We Meet Apart, two American sisters find themselves stranded in Ireland in 1940, but in two separate worlds. They believe their whole family has died. One sister, Gaby, is devastated with grief but lives a comfortable life; her younger sister Sabine is angry and must fight to survive in a war-torn country. When they finally meet—for only an hour a day, at dusk, in that thin veil between two worlds—they must decide whether to stay together or part, probably forever. Staying together is familiar and comfortable, but it doesn’t allow for their personal growth. Parting means growth, separation, and possibly danger.
As I was writing this novel I found myself wondering: can a person give up a loved one voluntarily? And what are the consequences? What are the consequences of hanging on?
The older I get, the more often I hear a similar story to my own from friends and acquaintances: they have a family member who is “off stage” or “out of the family” or “not speaking to the rest of us.” The shame I once felt around my own broken family has lessened, knowing that others have had this experience, too.
Today I have a good relationship with two of these sisters, but it took time. Partway through writing We Meet Apart, when it became clear to me that one sister was going to go her own way, I felt a kind of acceptance. Children grow up, families change, siblings relocate, and the nuclear family shifts into another form. Sometimes, when it happens suddenly and without warning, it feels more impactful. But it always happens, to one degree or another. As the saying goes, the only constant in life is change.
We Meet Apart: Amazon|Barnes & Noble|Bookshop
Author’s Socials: Website|Facebook|Instagram|Substack
I’m In TIME Magazine Today [Whatever]


Would you look at that, TIME asked me to chime in on what tech innovation defines American life at the moment, and while my answer is not surprising (a few others in this list also picked it, in one variation or another), I think my answer might have been slightly more poetic than the other answers here.
Nevertheless, it’s the first time I’ve ever been asked to write anything for the magazine; I have cropped up before in articles on various subjects but here I’ve actually contributed, even if it’s just a couple sentences. It counts! “Scalzi has written for TIME Magazine” is going into my bio now! For a former journalist, this feels like a proverbial feather in the proverbial hat.
— JS
It's interesting what Jeremy Herve and Matthias Pfefferle at Automattic have created with the WordPress feed reader, hooking it up to Activity Pub and AT Proto, the same way they hooked up those protocols to the standard WordPress blogging functionality (not sure how technically accurate this is). They're also supporting the Google Reader api for users of products like NetNewsWire.
Jeff Bezos as a celebrity [Scripting News]
Jeff Bezos is of course one of the biggest names in tech, but he doesn't have much of a public personality. I saw him speak in the early days of Amazon, and in that role, he came off as a great but controversial entrepreneur (he had no interest in profits). He spoke fast, had a weird laugh, but totally fit the part. Not sure about today as he pivots to being a personality, with his wife in every picture with him. Did the real Bezos get lost in there somewhere?

A dispute over the TAB key highlights a mismatch between Microsoft and IBM organizational structures [The Old New Thing]
I’ve written in the past about the cultural mismatch between Microsoft and IBM during the collaboration on OS/2, with the Microsofties viewing their IBM colleagues as mired in pointless bureaucracy and the IBM folks viewing Microsofties as undisciplined hackers.¹
One of many points of mismatch was the organizational structure.
A colleague recalls that while he was assigned to the IBM offices in Boca Raton, Florida, there was a dispute over what key should be used to move from one field to another in dialog boxes. The folks at IBM were not happy with my colleague’s decision to use the TAB key, so they asked him to escalate the issue to his manager back in Redmond.
My colleague’s manager replied, “The reason you are in Boca is to make these decisions so I don’t have to be in Boca.”
My colleague rephrased this reply in a more corporate manner before passing it on to IBM: “Microsoft supports the use of the TAB key for this purpose.”
Unsatisfied, the IBM folks escalated the issue up their organizational chain for several levels, and replied that their VP (who was around seven levels of management above the programmers) was absolutely opposed to the use of the TAB for this purpose, and they wanted confirmation from the equivalent-level manager at Microsoft that Microsoft stands by the choice of the TAB key.
My colleague replied, “Bill Gates’s mother is not interested in the TAB key.”
This apparently ended the discussion, and the TAB key stayed.
Note: This upcoming Sunday is Mother’s Day in the United States. You probably shouldn’t ask her for her opinion on the TAB key.
¹ There was probably merit to both arguments.
The post A dispute over the <KBD>TAB</KBD> key highlights a mismatch between Microsoft and IBM organizational structures appeared first on The Old New Thing.
[$] Hardware-assisted Arm VMs for s390 [LWN.net]
A recent patch set from Steffen Eiden and others has set the groundwork for allowing hardware-assisted emulation of Arm CPUs on s390 CPUs. Version two of the posting fixes a handful of smaller problems, but does not differ much. The patches were welcomed by the Arm maintainers, pending some discussion of how the collaboration between the architectures could be structured to prevent maintainability problems on the Arm side. When those details are resolved, the patches could pave the way for transparently running Arm-based virtual machines (VMs) on s390 hosts at native or near-native speeds.
The ampersand used to be consider the 27th letter of the latin alphabet...
i.e. ex, why, zed, "and - per say - and"... I.e. "and" was a letter after zed (Z).
Then came XML and HTML.
As a company with and ampersand in the official actual company name this has been, shall we say, challenging.
We had serious issues with BT XML order integration for some time.
But more lately.
Nominet say things like this...
Registrar:
Andrews & Arnold Limited [Tag = AAISP]
URL: https://aa.net.uk
Yeah, that is NOT our company name.
Other examples, in that past, with bank payee verification showing ANDREWS ARNOLD LIMITED, so I created ANDREWS ARNOLD LIMITED registered (company 12972728) to complain that a different company was being shown than us.
Now, for Nominet, I decided why not register ANDREWS & ARNOLD LIMITED. Then complain they are using a different company in whois...
To be honest I should have just renamed 12972728, but have done it now as separate company.
Firstly Companies House did not consider an 05555 phone number valid. Hmmm. But I did a different number, and applied for the company.
Now I get an email. An email to my x@x.xx format email address to tell me that my email address is invalid...
Yes, read that again. It is a kind of SPECIAL!
I called them, and well, the person I spoke to kind of appreciated the irony here. Emailing me to tell me my email is invalid, is, well, special.
She said the system was fine but a person, an examiner, rejected based on the email address. She has sent a memo to not reject that email. We'll see.
Why can people not simple follow standards, for email addresses, for phone numbers, for everything.
I have applied again. Once I have new company I can then complain to Nominet over whois.
And again rejected. Another weird one is when logging in to gov gateway using x@x.xx format address they say they are emailed a code to xx@x.xx !!! They actually email x@x.xx address, but why double the first letter when shown on screen... Hang on, I get the show first...last letter and a one letter address confuses the hell out of that. That makes more sense, but is still stupid.
Oh, there is more! The email from Companies house was wrong. It stripped & to &. Wow. How is this hard in this day and age?!
Thorsten Alteholz: My Debian Activities in April 2026 [Planet Debian]
This was my hundred-forty-second month that I did some work for the Debian LTS initiative, started by Raphael Hertzog at Freexian.
During my allocated time I uploaded or worked on:
I also did a week of front desk duties and started to work on backports of the cups CVEs.
This month I uploaded a new upstream versions:
Unfortunately the first upload of cups introduces a regression and another upload was needed to take care of a crash. The patch for one CVE also broke a test script, which is used by lots of printing packages in Debian. As a result some autopkgtest runs failed. This could be fixed as well and the only remaining issue that needs some more investigation is related to cups-pdf.
This work is generously funded by Freexian!
This month I continued to work on unifying packaging on Debian and Ubuntu. This makes it easier to work on those packages independent of the used platform.
I also started working on two new packages: lomiri-radio-app and lomiri-fretboardtrainer-app
This work is generously funded by Fre(i)e Software GmbH!
This month I uploaded a new upstream version or a bugfix version of:
This month I uploaded a new upstream version or a bugfix version of:
Marcos Talau joined the Debian IoT group, welcome aboard.
This month I uploaded a new upstream version or a bugfix version of:
This month I uploaded a new upstream version or a bugfix version of:
Security updates for Tuesday [LWN.net]
Security updates have been issued by AlmaLinux (kernel, kernel-rt, libcap, LibRaw, openssh, thunderbird, and tigervnc), Debian (libarchive and lxd), Fedora (chromium, insight, nodejs20, rust-sequoia-git, and uriparser), Mageia (kernel, kmod-virtualbox), Oracle (kernel, libcap, thunderbird, and uek-kernel), Red Hat (.NET 10.0, .NET 8.0, .NET 9.0, fence-agents, sudo, and systemd), Slackware (httpd), SUSE (freerdp, hauler, helm, himmelblau, kernel, libspectre, thunderbird, trivy, and xen), and Ubuntu (curl, exim4, and sed).
CodeSOD: Not for Nullthing [The Daily WTF]
Today's anonymous submitter sends us some code that just makes your mind go… blank when you look at it.
public static boolean isNull(String value) {
return StringUtils.isBlank(value);
}
StringUtils.isBlank comes from the Apache Commons
library. It's a helper function for Java which returns true if a
string is, well, blank. "Blank" in this case is: empty,
null, or only whitespace. So it's important to note that
isBlank may return true on a
null, but it isn't truly a null-check, so
wrapping it in isNull is just confusing.
But imagine I've got another problem. Let's say I have a
database that's been poorly normalized and maintained. And so I
have a bunch of fields that maybe are null, but some
also maybe contain the string "null". What am
I going to do then? I need another function.
public static boolean isNullAndNull(String value) {
return isNull(value) && "null".equalsIgnoreCase(value);
}
Ah yes, isNullAndNull, the clearest and easiest
name I could imagine for this. It tells me exactly what the
function is checking: is it null, and is it also null? We add a
second check to our isNull call- we check if the input
value matches the string "null". Except we're
&&ing the conditions together. So this
function will always return false. It can't both be blank
and contain the string "null".
Which means Jennifer Null, who is a real person, can breathe easy. This version of a null check won't think she's nothing.
Pluralistic: The three armies fighting for the post-American world (05 May 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

Political change is downstream of coalition building, and coalitions are fragile things, because by definition they are not fully aligned; they share some goals but often violently disagree about others. A coalition forms when groups set aside their differences to pursue the common elements of their agenda.
Trump is a master coalition builder. He wouldn't have been able to seize and wield so much power without a coalition that includes people who absolutely hate each other and want each other to die. Let's face it, Nick Fuentes wants to turn Ben Shapiro into a lampshade, but they both sent their followers to the ballot box for Trump. We've all seen those videos of Trump supporters railing against "elites" after watching the richest man on Earth cavorting with Trump while promising to give all of their jobs to AI and robots.
This contradiction isn't a bug, it's a feature: the bigger a coalition gets, the more power it has – provided you've got a Trump figure at the top, using his cult of personality to coerce and flatter his coalition members into playing nice with each other.
But Trump's incontinent belligerence, his bullying, and his cognitive decline mean that he's conjuring a new anti-Trump coalition into existence: groups of people who don't agree on much, but do agree on fighting Trumpismo and its leader. This is very visible in US domestic politics, where "Never-Trumper" conservatives find themselves on the same side as Democratic Socialists, at least on this narrow issue. The anti-Trump mass mobilizations – the Women's March, the anti-ICE demonstrations, the No Kings rallies – are visibly, palpably coalitional, made up of people carrying signs and banners for groups that are often at odds with one another…except when it comes to Trump.
But I'm much more interested in the international coalitions that are forming to fight Trump. It started with my longstanding fight for a good internet, free from surveillance, extraction and manipulation, the three evils inherent to the business models of America's shitty, enshittifying tech companies.
Under normal circumstances, you'd expect tech companies in other countries to capitalize on the fact that America exports its obviously defective tech products around the world. As Jeff Bezos often reminds his suppliers: "Your margin is my opportunity." Whether it's Apple taking a 30% margin on iPhone payments, Apple and Meta creaming 51 cents off every ad dollar, Amazon harvesting 50-60% from every platform seller, or inkjet printer companies marking up the colored water you use to print your grocery list by 25 quattuordecillion percent, there's a ton of opportunities to disrupt these comfortable ex-disruptors.
But no one does that, because the US Trade Representative bullied every US trading partner into enacting an "anticircumvention" law that makes it a crime to modify America's tech exports. The quid pro quo for this? Free trade with the USA – and tariffs for any country that didn't fall into line. Well, they all fell into line, and Trump tariffed them anyway.
That means that America's tech giants' margins are now everyone else's opportunity. The trillions that US tech companies extract could be someone else's billions – all they'd have to do is offer the interoperable goods and services that disenshittify America's tech products. They could sell the tools that let anyone in the world use independent app stores, or fix their cars and tractors, and put generic ink in their printers. A year ago, no country could afford to allow a company headquartered in its borders to get into this business, lest they be clobbered with tariffs. Today, any country that isn't thinking about this is a sucker that will end up buying these tools from another country that gets there first.
This means that digital rights hippies like me (who've been banging this drum for 25 years), suddenly have a new ally in the fight against enshittified tech products. Today, there are people who want to help you protect your pocketbook and your privacy, but not because they believe in human rights – rather, because they want to get really, really rich. They see Big Tech's margin as their opportunity.
But it's not just entrepreneurs and activists who want a post-American internet – we have a third member of our coalition: national security hawks. Trump wants to steal Greenland. He wants to steal Alberta. He wants to steal all the oil in Venezuela. He wants to interfere in foreign elections to keep his dictator cronies in office, lest they lose power and find themselves facing prison. And when Trump's allies do face justice, he wants to fire the judges who dare hold these corrupt, powerful men to account.
So when the International Criminal Court issued an arrest warrant for the genocidaire Benjamin Netanyahu, Trump had Microsoft shut down the court's IT systems. The Chief Justice of the ICC lost his Office 365 account, which means he can't access his email archives, his working files, his calendar or his address books. He can't even log in to his non-Microsoft accounts because they're tied to his Outlook email address.
The ICC was just a warmup: Trump did the same thing to the Brazilian high court judge who sentenced the dictator Jair Bolsonaro to prison for attempting a coup after he lost his re-election bid, having presided over a term of gross misrule.
All of this has inflamed concerns within every (former) US ally's national security establishment. These people all understand that Trump doesn't need to roll tanks to take over their countries: he can just brick their key ministries, major firms, and households. He doesn't need to send an army to steal Greenland, he can just shut down Denmark and cut off the world's supply of Lego, Ozempic and ferociously strong black licorice.
Combine the natsec hawks; the economic development wonks, entrepreneurs and investors; and the privacy and digital and human rights activists, and you've got a hell of an anti-Trump coalition around the world, all pulling together to build the post-American internet, a disenshittified and enshittification-resistant internet built on international digital public goods and running on servers outside of the USA:
https://pluralistic.net/2026/01/01/39c3/#the-new-coalition
But this coalition isn't limited to the post-American internet – you'll find a coalition much like it in every place where Comrade Trump is calling forth a post-American world. That's the shape of the coalition that's winning Trump's war on fossil fuels: climate activists (hippies), electrification manufacturers and installers (businesses) and national security hawks who don't want to get hormuzed:
https://pluralistic.net/2026/05/04/hope-in-the-dark/#hormuzed-into-the-gretacene
I'm not as plugged into the other areas where Trump has dismantled US hegemony, but it wouldn't surprise me to learn that a coalition much like this one is popping up in the countries where Trump and Musk doged the public health system into oblivion. The global south is full of countries that signed up to enforce US agricultural and pharmaceutical patents and US restrictions on birth control and abortion in exchange for the food-aid and health-aid that Elon Musk and his merry band of broccoli-haired brownshirts killed. It's easy to imagine that reproductive rights and health justice advocates in those countries are now on the same side as investors who'd like to get into business selling generic pharmaceuticals and agricultural inputs, and that they're being backed by people worried that their country's food and health sovereignty are at risk unless they hasten the transition to a post-American world.
I have been an activist all my life, and a digital rights activist for the majority of my adult life. I'm sure there are members of this post-American coalition who want things that are absolutely antithetical to my agenda. That's what makes us a coalition – we disagree about so much, but we all agree on this: it's past time for a post-American world, and Comrade Trump is delivering it.

Hysteresis and Selection in the Rise of Fascism: The ‘Ordinary Men’ of the Nazi Party https://www.nber.org/papers/w35120
The Whistleblower Who Uncovered the NSA’s ‘Big Brother Machine’ https://thereader.mitpress.mit.edu/the-whistleblower-who-uncovered-the-nsas-big-brother-machine/
Unauthorized Bread graphic novel cover https://www.flickr.com/photos/doctorow/55248071321/in/dateposted/
Aftermath: Oil Execs Thrill to Higher Profits From War https://prospect.org/2026/05/04/aftermath-oil-execs-thrill-to-higher-profits-from-war/
#25yrsago North Korean dictator's son arrested trying to sneak into Tokyo Disneyland https://www.nytimes.com/2001/05/03/world/japan-is-said-to-detain-son-of-north-korean-leader.html
#25yrsago Bruce Sterling on good design https://memex.craphound.com/2001/05/03/great-illustrated-bruce-sterling-rant/
#20yrsago Mainstream press: Colbert wasn’t funny at the White House Correspondents' Dinner, so we ignored him https://web.archive.org/web/20070207014019/http://www.salon.com/opinion/feature/2006/05/03/correspondents/index_np.html
#20yrsago Bush and cronies livid about Colbert’s White House gig https://web.archive.org/web/20060615113045/https://www.usnews.com/usnews/news/articles/060501/1whwatch.htm0
#20yrsago Identity thief rips off 3-week-old baby https://abcnews.com/US/story?id=155878&page=1
#20yrsago Network neutrality – why it matters, and how do we fix it? https://web.archive.org/web/20060507215106/http://www.slate.com/id/2140850/
#15yrsago Federal judge: open WiFi doesn’t make you liable for your neighbors’ misdeeds https://arstechnica.com/tech-policy/2011/05/after-botched-child-porn-raid-judge-sees-the-light-on-ip-addresses/
#10yrsago Taliban condemn Pakistan city’s first McDonald’s: “we don’t even consider it as a food.” https://www.nbcnews.com/news/world/mcdonald-s-opens-quetta-pakistan-taliban-isn-t-lovin-it-n564651
#10yrsago Norway’s titanic sovereign wealth fund takes a stand against executive pay https://www.bbc.co.uk/news/business-36185925
#10yrsago TSA lines grow to 3 hours, snake outside the terminals, with no end in sight https://www.nytimes.com/2016/05/03/business/airport-security-lines.html?smid=pl-share&_r=0
#10yrsago Inside a Supreme Court case on cheerleader uniforms, a profound question about copyright https://arstechnica.com/tech-policy/2016/05/supreme-court-to-hear-copyright-fight-over-cheerleader-uniforms/
#5yrsago Dishwashers have become Iphones https://pluralistic.net/2021/05/03/cassette-rewinder/#disher-bob

Barcelona: Internet no tiene que ser un vertedero (Global
Digital Rights Forum), May 13
https://encuentroderechosdigitales.com/en/speakers/
Virtual: How to Disenshittify the Internet with Wendy Liu (EFF),
May 14
https://www.eff.org/event/effecting-change-enshittification
Berlin: Re:publica, May 18-20
https://re-publica.com/de/news/rp26-sprecher-cory-doctorow
Berlin: Enshittification at Otherland Books, May 19
https://www.otherland-berlin.de/de/event-details/cory-doctorow.html
Hay-on-Wye: HowTheLightGetsIn, May 22-25
https://howthelightgetsin.org/festivals/hay/big-ideas-2
SXSW London, Jun 2
https://www.sxswlondon.com/session/how-big-tech-broke-the-internet-b3c4a901
NYC: The Reverse Centaur's Guide to Life After AI with Jonathan
Coulton (The Strand), Jun 24
https://www.strandbooks.com/cory-doctorow-the-reverse-centaur-s-guide-to-life-after-ai.html
Edinburgh International Book Festival with Jimmy Wales, Aug
17
https://www.edbookfest.co.uk/events/the-front-list-cory-doctorow-and-jimmy-wales
Artificial Intelligence: The Ultimate Disruptor, with Astra
Taylor and Yoshua Bengio (CBC Ideas)
https://www.cbc.ca/listen/live-radio/1-23-ideas/clip/16210039-artificial-intelligence-the-ultimate-disruptor
When Do Platforms Stop Innovating and Start Extracting?
(InnovEU)
https://www.youtube.com/watch?v=cccDR0YaMt8
Pete "Mayor" Buttigieg (No Gods No Mayors)
https://www.patreon.com/posts/pete-mayor-with-155614612
The internet is getting worse (CBC The National)
https://youtu.be/dCVUCdg3Uqc?si=FMcA0EI_Mi13Lw-P
"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
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2026
"The Post-American Internet," a geopolitical sequel of sorts to Enshittification, Farrar, Straus and Giroux, 2027
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Third draft completed. Submitted to editor.
"The Post-American Internet," a short book about internet policy in the age of Trumpism. PLANNING.
A Little Brother short story about DIY insulin PLANNING

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
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
Radar Trends to Watch: May 2026 [Radar]
The most significant tension in this issue is between two companies making different decisions about how to handle AI with frontier security capabilities. Anthropic restricted Claude Mythos to a small corporate cohort through Project Glasswing. OpenAI released GPT-5.5 to general availability, and some are calling it “Mythos-like hacking, open to all.” The AI Security Institute’s evaluation confirms the capability is real and consequential. How will you manage risk when the time between discovery of a vulnerability and exploitation collapses to zero?
Another important theme is that, in the words of The Sequence, “AI is becoming operational.” It’s no longer about LLMs that can play games with words. It’s about tools that can automate processes across an enterprise: agents, of course, but more specifically agents that can be shared by teams to produce a consistent set of tools that can be used by groups.
The open-weight model market is reshaping the economics of AI. This cycle brought at least 10 significant model releases or updates across open and closed providers, with pricing pressure coming from multiple directions. DeepSeek now performs within a fraction of Claude Opus 4.7 on coding benchmarks at a radically lower price; Alibaba, Google, Z.ai, and Moonshot all released capable open models this cycle. The Stanford AI Index documents this at scale. For organizations building on AI, the question is no longer whether open-weight alternatives are viable but which trade-offs they are willing to make on cost, portability, and support.
Anthropic has clearly been winning the announcement race. Whether it’s also winning on performance is a different question. Claude Code was a favorite among developers until its performance slipped. Many switched to newly released Cursor 3, which puts an agentic interface front and center while relegating the IDE to the background. Anthropic’s public postmortem on Claude Code’s behavior regression is worth reading both for its specific findings and as a model for how AI providers should communicate quality issues to developers. And Cursor’s transformation from an IDE into an agent is a pattern we expect to see repeated across the industry.
Security has spent a lot of time in the news. Two core tools for secure private networking, Tor and Signal, have been attacked. In both cases, the attack didn’t involve the software or protocols themselves. These attacks teach us that secure systems are often jeopardized by the software that surrounds them. We’ve also seen that ransomware gangs are using postquantum encryption, and that quantum computers are likely to break traditional encryption sooner than expected. If you’re not investing in security, it’s time to start.
Multiple providers released overlapping pieces of an agent stack this cycle, covering orchestration, persistence, memory, and registry services. A three-layer model (orchestration, execution, review) is becoming the standard architecture, but each vendor’s implementation makes different bets about portability and durability. It’s important to evaluate each vendor’s products carefully before settling on an agent stack.
Don’t overlook the web layer when planning for AI-driven disruption. The web’s infrastructure is older than most of the people who maintain it, and several items this cycle are reminders of the gap between what that infrastructure was designed for and how it is used today. Two deal with protocols that have outlasted their original assumptions; another reimagines the dominant CMS from scratch using current tooling.
The retirement of the PHP license [LWN.net]
The PHP project has long shipped under its own license — except for the parts under the Zend Engine License. The PHP project has now announced that the PHP license has been retired, and the PHP code has been relicensed under the three-clause BSD license. See this blog entry for more details.
Getting here required more than writing an RFC. The PHP License gives the PHP Group the authority to change it, which meant tracking down each of the original PHP Group members and getting their written consent. Each approved the proposal. Perforce Software, the successor to Zend Technologies, needed to sign off on the Zend Engine side, as well. They provided a formal letter confirming their full authority and support for the change. I hired an attorney to review the proposal and provide advice on any legal questions that might surface during the discussion period. Speaking of which, I allowed for a six-month community discussion period preceding the vote, which passed unanimously.
LWN covered the license-change process back in March.
Gábor Melis: DRef Leaves Home [Planet Lisp]
Version 0.5 of DRef, the definition reifier, is now available. It has moved to its own repository, completing its separation from PAX, where it was originally developed.

This was a long time coming. Twelve years ago today, PAX was
born. From the start, PAX used the concept of locatives to refer to
definitions without first-class objects. For example, to generate
documentation for the *MY-VAR* variable, one could use
the VARIABLE locative as in (*MY-VAR*
VARIABLE). PAX needed to be able to tell whether such a
definition exists, as well as access its docstring and source
location.
EFF and 18 Organizations Urge UK Policymakers to Prioritize Addressing the Roots of Online Harm [Deeplinks]
EFF joins 18 organizations in writing a letter to UK policymakers urging them to address the root causes of online harm—rather than undermining the open web through blunt restrictions.
The coalition, which includes Mozilla, Tor Project, and Open Rights Group, warns that proposed measures following the passage of the Children’s Wellbeing and Schools Bill risk fundamentally reshaping the internet in harmful ways. Chief among these proposals are sweeping age-gating requirements and access restrictions that would apply not only to young people, but effectively to all users.
While framed as efforts to protect children online, these policies rely heavily on age assurance technologies that are either inaccurate, privacy-invasive, or both. As the letter notes, mandating such systems across a wide range of services—from social media and video games to VPNs and even basic websites—would force users to verify their identity simply to access the web. This creates serious risks, including expanded surveillance, data breaches, and the erosion of anonymity.
Beyond privacy concerns, the signatories argue that these measures threaten the core architecture of the open internet. Age-gating at scale could fragment the web into a patchwork of restricted jurisdictions, limit access to information, and entrench the dominance of powerful gatekeepers like app stores and platform ecosystems. In doing so, policymakers risk weakening the very qualities—interoperability, accessibility, and openness—that have made the internet a global public resource.
The letter also emphasizes what’s missing from the current policy approach: meaningful efforts to address the underlying drivers of online harm. Many digital platforms are designed to maximize engagement and profit through pervasive data collection and targeted advertising, often at the expense of user safety and autonomy. Rather than imposing access bans, the coalition calls on UK policymakers to hold companies accountable for these systemic practices and to prioritize user rights by design.
Importantly, the signatories highlight that the internet remains a vital space for young people: offering access to information, support networks, and opportunities for expression that may not exist offline. Policies that restrict access risk cutting off these lifelines without meaningfully reducing harm.
The message is clear: protecting users online requires more than heavy-handed restrictions. It demands thoughtful, rights-respecting policies that tackle the business models and design choices driving harm, while preserving the open, global nature of the web.
DarkSword Malware [Schneier on Security]
DarkSword is a sophisticated piece of malware—probably government designed—that targets iOS.
Google Threat Intelligence Group (GTIG) has identified a new iOS full-chain exploit that leveraged multiple zero-day vulnerabilities to fully compromise devices. Based on toolmarks in recovered payloads, we believe the exploit chain to be called DarkSword. Since at least November 2025, GTIG has observed multiple commercial surveillance vendors and suspected state-sponsored actors utilizing DarkSword in distinct campaigns. These threat actors have deployed the exploit chain against targets in Saudi Arabia, Turkey, Malaysia, and Ukraine.
DarkSword supports iOS versions 18.4 through 18.7 and utilizes six different vulnerabilities to deploy final-stage payloads. GTIG has identified three distinct malware families deployed following a successful DarkSword compromise: GHOSTBLADE, GHOSTKNIFE, and GHOSTSABER. The proliferation of this single exploit chain across disparate threat actors mirrors the previously discovered Coruna iOS exploit kit. Notably, UNC6353, a suspected Russian espionage group previously observed using Coruna, has recently incorporated DarkSword into their watering hole campaigns.
A week after it was identified, a version of it leaked onto the internet, where it is being used more broadly.
This news is a month old. Your devices are safe, assuming you patch regularly.
ECL News: ECL 26.5.5 release [Planet Lisp]
We are announcing a bugfix ECL release that addresses a few issues that has slipped through testing of the recent one.
Addressed issues:
bugfix: MAKE-PACKAGE destructively modified defining form's cons cells of the package local nicknames, breaking package literals in bytecmp (#839)
bugfix: the first environment is now always page-aligned by using the same allocation mechanism as all subsequent envs (#828)
bugfix: allow loading concatenated fasc files (#842)
bugfix: defclass does not redefine existing classes at compile time with forward-referenced classes in the bytecodes compiler (#843)
This release is available for download in a form of a source code archive (we do not ship prebuilt binaries):
Happy Hacking,
The ECL Developers
Here’s an interesting thought experiment. Imagine that you would be reincarnated into the soul and body of someone on Earth, 25 years old, at random.
You won’t know what you know now, you’ll simply live their life.
What year would you choose?
Since it’s random, it’s not about picking the best year to be among the wealthiest 1% (only a hundred-to-one chance) or even to be a US citizen (3% chance).
You might pick an era long ago, knowing that you would likely live half as long, but without a drumbeat of media stress and anxiety…
Or you could pick a year without the black plague or civil war, and with useful medical and community innovations…
What year gives you the best odds of living what you think of as a good life? Not just that year, but the years that follow…
It forces us to consider entitlement, hope, possibility and what matters. And it’s not a bad way to set an agenda.
Shut Down Turnkey Totalitarianism [Deeplinks]
William Binney, the NSA surveillance architect-turned-whistleblower, called it the "turnkey totalitarian state." Whoever sits in power gains access to a boundless surveillance empire that scorns privacy and crushes dissent. Politicians will come and go, but you can help us claw the tools of oppression out of government hands.
Become a Monthly Sustaining Donor
We must stand strong to uphold your privacy and free expression as democratic principles. With members around the world, EFF is empowered to use its trusted voice and formidable advocacy to protect your rights online. Whether giving monthly or one-time donations, members have helped EFF:
Sue to stop warrantless searches of Automated License Plate Reader (ALPR) records, which reveal millions of drivers’ private habits, movements, and associations.
Launch Rayhunter, an open source tool that empowers you to help search out cell-site simulators capable of tracking the movements of protestors, journalists, and more.
Help journalists see through the spin of "copaganda" by breaking down how policing technology companies often market their tools with misleading claims with our Selling Safety report.
Right now, U.S. Congress is on the edge of renewing the international mass spying program known as Section 702, affecting millions. EFF is rallying to cut through the politics and give ordinary people a chance to stop this oppressive surveillance. It’s only possible with help from supporters like you, so join EFF today.
Get this year’s new member t-shirt when you join EFF. Aptly titled "Claw Back," the design features an orange boy swatting at the street-level surveillance equipment multiplying in our communities. You might empathize with him, but there’s a better way. Let’s end the law enforcement contracts, harmful practices, and twisted logic that enable mass spying in the first place.
You can also get brand new set of eleven soft and supple polyglot puffy stickers as a token of thanks. Whether you're a kid or a kid at heart, these nostalgic stickers are perfect for digital devices, lunchboxes, and notebooks alike. Our little Ghostie protects privacy in six languages: Arabic, English, Japanese, Persian, Russian, and Spanish.
And for a limited time, get a Privacy Badger Crewneck sweater to help you browse the web with confidence. The embroidered Privacy Badger mascot appears above characters that say "privacy” because human rights are universal. Millions of people around the world use Privacy Badger, EFF's free tool that devours devious scripts and cookies that twist your web browsing into a commodity for Big Tech, advertisers, and scammers.
Privacy is a human right because it gives you a fundamental measure of security and freedom. We owe it to ourselves to fight the mass surveillance used to control and intimidate people. Let’s do this. Join EFF today with a monthly donation or one-time donation and help claw back your privacy.
____________________
EFF is a member-supported U.S. 501(c)(3) organization. We've received top ratings from the nonprofit watchdog Charity Navigator since 2013! Your donation is tax-deductible as allowed by law.
Please Don’t Pet by Quil.and.Ink [Oh Joy Sex Toy]
An Unexpected Culinary Adventure At The Denver Airport [Whatever]
What’s the deal with airline food? Jokes
aside, airport food is known by and large to be rather pricey while
also being not so fantastic of quality. If you fly a lot, you know
your options are limited to packaged snack foods, dubious egg salad
sandwiches, or the world’s coldest bowl of soup from the A
gate Chili’s. A fun-size candy bar isn’t so fun when
it’s $5, is it?
Why is airport food so bad? Surely there has to be another way, right? Can’t we have decent meals at decent prices, or is it truly impossible because of the fact you’re in an airport?
Well, I’m happy to report there is an airport that has the solution to our problems. The Denver International Airport.
I have flown through Denver more than a few times, but never had time during my connections to explore. Maybe a quick coffee, sure, but definitely not enough time to wait an hour on a waitlist for a speakeasy hidden behind a bookstore facade. Until now.
For a myriad of reasons, I found myself at the Denver Airport at about 11am and my flight wasn’t until 5pm. The only other time I’ve had quite that much time at an airport was a layover at Heathrow, and since I was with my father we went to the Centurion Lounge for the entirety of the five hours and I ate tons of food and binged The Bear.
Also, quick shout out to the transportation company that took me to the airport. Groome Transportation picked me up at their Monument Park-n-Ride location and I had a very pleasant shared shuttle ride. The driver was very friendly and safe on the road, and helped me with my bags. It was fifty dollars and a little over an hour to the airport. I have had much shorter drives for considerably more money when using Lyft, so if you don’t mind sharing a big ol’ shuttle with a friendly driver, Groome may be of interest to you! They have a ton of different locations and airports they go to.
Back to the actual airport, I was worried about TSA lines (despite the large amount of time I had to kill), but because I was Sky Priority with Delta and have CLEAR, I actually got through security very quickly and smoothly. Having money is a hell of a convenience.
I wanted a sit down restaurant to have lunch at, so I asked the Delta check-in agent for recommendations (there was no one in line behind me). He told me to check out Root Down in the C gates, so off I went.
Root Down is actually a restaurant in Denver, so this airport version, called Root Down DIA, is their second location. They are two of five restaurants under the Edible Beats family. Edible Beats is a 100% employee-owned business, and are committed to offering seasonal veggie-forward dishes through sustainable practices, like being 100% wind-powered and having 50% of their ingredients sourced right from Colorado.
When I got to the restaurant, there was a line to be seated, and I ended up waiting about fifteen minutes for a table for one. There’s also a grab-and-go kiosk of some of their menu items if you don’t have time to wait. I was sat at a two top table and brought water and menus.
I was offered both the brunch/lunch menu and the all-day menu because there was about fifteen minutes left on their brunch offerings. So I really had my pick of the litter.
For a beverage, I wanted something fun but wasn’t feeling alcohol (yet), so I got their Coconut Gin Fizz cocktail. It is listed as available as N/A, so it ended up being coconut milk, lime, ginger, and soda water. I thought I got a picture of it, but I guess I didn’t! It was in a short glass with ice and a pineapple frond as a garnish. The drink was creamy and nicely sweetened while still being refreshing and just a little fizzy, with enough ginger to give it flavor but not enough to overwhelm it. Very nice beverage!
For my food, I had a really hard time deciding, but I ended up going with their Green Chili Cornbread Bites, followed by their Beet & Goat Cheese Salad.
The cornbread bites came with goat cheese, jalapeno jam, and a whipped honey butter. I asked for the jalapeno jam on the side just in case it was too spicy for me:

These three pieces cost $9.60, and they were so bomb. I love cornbread, and this warm, soft cornbread really hit the spot. The jalapeno jam proved too hot for my weak self, so the cornbread was thoroughly enjoyed without it.
For their beet salad, it came with goat cheese, arugula, radish, hazelnuts, beet-sunflower pesto, and basil vinaigrette:

Okay, first off, this salad was HUGE. Secondly, oh my gosh it was so good. I have had many a beet and goat cheese salad in my day, but this one really takes the cake. Like, holy cannoli, it was seriously fantastic. The mix of regular beets and golden beets was a really nice touch, the hazelnuts provided some excellent crunch to contrast the soft goat cheese (which they did not skimp on), and the flavors were so fresh it felt like I was eating right out of a summer garden.
This salad cost $20, but honestly for the size and quality it’s a small price to pay. I am still thinking about this damn salad.
Of course, I had to get some dessert. I chose their Avocado Key Lime Pie that comes with a chocolate crust and passionfruit coulis:

Holy cow that’s a lot of pie! Now, it was $12 for the slice, so it makes sense it’s a big ol’ piece. I actually ordered the pie out of curiosity more than anything, because I was wondering if an avocado pie would taste good. This pie was definitely very interesting. If you do not like avocado at all, do not get this pie. While the flavor of avocado was more subtle and not as grassy as it usually is, it was definitely still very present, just toned down and sweeter. The chocolate crust was my least favorite part of this pie, but the passionfruit coulis was the star of the show with its bright, punchy, tropical flavor that helped cut through some of the extra sweet indulgent fluff. Glad I tried it, but would probably opt for their butterscotch pudding next time.
Root Down had so many vegan and gluten-free options, I highly recommend checking this place out if you have dietary restrictions, or if you just want to have a really fresh tasty meal while traveling without breaking the bank! My total was fifty bucks before tip.
After my delicious and filling lunch, I decided to treat myself to a massage, and got a 20-minute chair massage from Colorado Oasis, also in the C gates. It was so relaxing I started to drift off towards the end. I usually prefer to get massages in between flights so I’m not so stiff from the first leg of the journey, but I was plenty happy to get one before my flight.
Finally, I made my way to the A gates, where my flight was leaving from. I wasn’t sure what to do with all my time, since I had left my new book at my friend’s apartment on accident. Just then, I ended up walking past what might have been the smallest airport bookstore I had ever seen. Just a few bookshelves in an alcove. I walked past at first, but then stopped and doubled back when I realized I saw something strange at this bookshop. A host stand.
When I went back, there were two people at the host stand, talking to the hostess about wait times. Wait times for what?! I had to know. Turns out, the bookstore was a front for a speakeasy called Williams & Graham. Wouldn’t you know it, they also have an actual Denver location only a block away from Root Down. How funny!
Obviously, I had to put my name on the waitlist. She estimated a 45 minute wait for me. Well, I certainly had the time to kill, so I sat and waited excitedly. It ended up taking closer to an hour, but I finally got escorted in and seated at the bar. It was an intimate atmosphere, with low lighting and warm woods. Once I was sat, the bartenders welcomed me by name and introduced themselves, as well. That was a pleasant surprise in formality.
I was handed this soft, leather-bound menu:

Here’s a look at the food offered at this fine establishment:

A moment of admiration for this frog legs description:

I’m willing to forgo the classiness and old-world feel of a swanky speakeasy if it means reading the words “3 thicc frog booties.”
And of course, bevvies:

Can’t go wrong with the classics, but don’t miss out on their house cocktails, either:

That being said, I did end up ordering a Caipirinha for my first drink:

(This photo was after I had my first drink of it, so that’s why it’s not completely full.)
Y’all already know I love a refreshing Caipirinha. I never get tired of that tart, acidic limes and sweet demerara sugar combo. This drink was so light and fresh and they gave me hella limes in my glass. I watched them make it right in front of me and was mesmerized by the muddling to release all that delish flavor. Great drink, no notes.
As tempted as I was to order the frog legs, I ended up trying out the deviled eggs instead:

There is no description on the menu for what comes on these, so I’ll tell you myself. Candied bacon, feta, and serrano peppers. Notice something missing? That’s right, once again my weak palette has made me opt out of the spicy ingredients in a dish! I asked for them sans serrano. I’m sorry, okay!
I did not think I could eat five deviled eggs in a row, but I definitely did and they were amazing. The filling was smooth and flavorful, and the candied bacon was the perfect mix of smoky and sweet. The microgreens added a fresh component that brightened up the heavier components, and it’s safe to say I’d gladly eat another plateful of these right now.
I wasn’t sure what to order for a second drink, but I started talking to the bartender and we bonded over our intense love for espresso martinis. About two minutes later, he just so happened to have an extra espresso martini lying around that needed drank:

Okay what a gorg martini! That foam design is amazing, I’ve never had any bar do that before. I loved this espresso martini, the sweet cream on top perfectly balanced the rich, Italian espresso liqueur and cold brew. I said I was happy to pay for the drink because I was planning on ordering it anyways as my second drink, but the bartender insisted it would’ve gone to waste otherwise and really I was doing him a favor by drinking it. I graciously accepted.
Since I had passed up on the unique experience of trying frog legs, I decided to instead try bone marrow for the first time. For their bone marrow, it was a roasted beef bone topped with bacon jam and microgreens, with ciabatta toast on the side:

Y’all, the presentation is absolutely serving. Like it’s giving class, it’s giving sophistication, okay. You can’t tell me that doesn’t look like the most amazing bone marrow you’ve ever seen. Granted, my experience is limited but I was so ready to dive into this.
Rarely has such incredible flavor graced my tastebuds. This bone marrow had the most luxurious, buttery texture. It was like liquid, fatty gold. The bacon jam was rich and chewy, and all of these textures went perfectly on the crusty ciabatta toast. I was soaking that shit UP. No crumb went un-ate here. I was scraping those bones clean. I cannot believe this was only $23 and it’s actually only $20 at their main location. (Similarly, the main location has the deviled eggs for $10 instead of $11.)
If you have not had bone marrow, or have been too scared to try it, I’m telling you right now you will not regret giving it a shot. I have been dreaming about this dish, and honestly I’m hoping to find another restaurant soon that has it on the menu. I need more marrow in my life. I never imagined it would be that good.
My bill ended up being just over $50 since I got a drink on the house (again, incredibly generous, thank you to my bartender <3). Any time I get something on the house, I like to tip as if I had had that item on the bill. Of course, in the instance of one drink that means just a couple bucks extra on the tip, but I figure that’s a decent guideline to go by.
Not only did I have incredible service, drinks, and food at Williams & Graham, but I also sat next to a girl at the bar who was also by herself. We started chatting and it turned out we had so much in common, and she was so sweet and fun to talk to! When we both paid and left, she asked if we could get a photo on her little film camera for her travel scrapbook. I said of course, and also gave her a Colorado sticker I had bought at a gift shop so she could use it in her scrapbook. I was so grateful to have such a nice dining companion!
If you have the time to spare, I cannot recommend these places enough. It’s amazing to see that you can have high quality, from scratch kitchens that are dedicated to good food, good drinks, and good service in an airport. No longer shall we settle for McDonald’s and Dunkin’ when we can have craft kitchens and talented bartenders.
Who knew getting to the airport early could be so amazing? (Do NOT get to the Dayton or Cincinnati airports that early, you will be disappointed and bored.)
Would you try bone marrow (or if you have, do you like it?) Do you prefer your eggs deviled or undeviled? Does Root Down’s veggie-forward fare interest you? Let me know in the comments, and have a great day!
-AMS
Mamdani vetoed bill to ban protests near schools [Richard Stallman's Political Notes]
Mayor Mamdani vetoed a bill to ban protests near schools. He was not able to veto a similar ban on protests near religious establishments, but it deserved to be vetoed.
Corrupter embodies worst of us [Richard Stallman's Political Notes]
The corrupter/persecutor embodies the worst of us. *Name the ugliest human quality, and [he] will demonstrate it and glory in it.*
I criticize one point in the article: don't hint at criticism of "dodging the draft" during the Vietnam War.
Prosecution of Southern Poverty Law Center [Richard Stallman's Political Notes]
The Southern Poverty Law Center pays people to inform on the private plans and views of hate groups. Magats in the "Justice" department are prosecuting the SPLC for supposedly "defrauding" their donors. However, Donors say this is no fraud — the SPLC is exactly what they want it to do.
The confusion here is an instance of judging actions by their form while disregarding the substance of the ethical issue. I wonder whether a computer program came up with this idea.
Seeking protections for fossil fuel companies [Richard Stallman's Political Notes]
Republicans in Congress seek to protect fossil fuel companies from all legal responsibility for the damage of growing climate disaster.
If they do cause full-blown climate disaster, they will not have enough trillions to pay for all the damages. But the liability might help us at an earlier time — help us make them stop causing the disaster.
Bully's pardons harming violent crime survivors [Richard Stallman's Political Notes]
*[The bully]'s pardons are harming violent crime survivors*, by eliminating fines that the pardoned criminals would have paid into the fund to compensate them.
Atlantic meridional overturning circulation [Richard Stallman's Political Notes]
Scientists forecast that the Atlantic meridional overturning circulation is quite likely to collapse.
*A collapse would shift the tropical rainfall belt on which many millions of people rely to grow their food, plunge western Europe into extreme cold winters and summer droughts, and add 50-100cm to already rising sea levels around the Atlantic.*
Lobbying EU to keep datacenter emissions secret [Richard Stallman's Political Notes]
*US tech firms successfully lobbied EU to keep datacenter emissions secret.*
This shows that EU governments felt desperate for money ("investments") from those companies — so desperate that they betrayed their countries for those companies' favor.
Protester arrested to sue city for arresting her [Richard Stallman's Political Notes]
Protester Renea Gamble, who was arrested for wearing a penis costume, was found not guilty, and will sue the city for arresting her on absurd grounds. Perhaps also for knocking her down so that she hit her head on the ground.
The thugs said that at one point she had named herself as "Aunt Tifa", and prosecuted her for that too. I love her sense of humor.
FBI investigating reporter that investigated FBI [Richard Stallman's Political Notes]
A reporter investigated FBI head Patel's command for FBI personnel to act as security for his girlfriend. In response, the FBI began investigating the reporter.
For magats, whatever magat officials do for the benefit of magats, even if corrupt or illegal, is legitimate. For journalists to investigate such actions is "stalking".
Patel has also sued The Atlantic for investigating his official life.
Project to estimate cost to black Americans [Richard Stallman's Political Notes]
A project has tried to estimate the cost to black Americans in Fulton County, Georgia, of various racist laws and government practices, including slavery and Jim Crow, and sometimes having the KKK drive blacks off their land to take it away from them.
It also includes the wages they would normally have been paid for work that they were forced to do. It amounts to a large sum in today's money, though the article does not estimate an overall total.
The project aims ultimately to determine a just quantity of reparations to give to descendants of those who were robbed and cheated. I am interested in seeing the results. How to give a disprivileged group's members effective aid to surmount the inherited effects of being disprivileged is not obvious.
The article linked to above displays symbolic bigotry by capitalizing "black" but not "white". (To avoid endorsing bigotry, capitalize both words or neither one.) I denounce bigotry, and normally I will not link to articles that practice it. But I make exceptions for some articles, such as this one, because they are important. I want to help the article educate people about racism. At the same time I want to rebuke its bigotry — so I present this comment about it.
Compliance with Epstein Files Transparency Act [Richard Stallman's Political Notes]
*[Justice Department] inspector general to audit department's compliance with Epstein Files Transparency Act.*
The question this raises is whether this will be an honest audit (Did the department follow the law?) or a maga-audit (Did the department do what the corruptor wanted?).
Pushing Bosnia into corrupt pipeline deal [Richard Stallman's Political Notes]
The corrupter is pushing Bosnia to make a corrupt deal to have a pipeline built by a company run by loyal henchmen with no pipeline experience.
Aside from the diversion of funds to reward people for committing crimes for the corrupter, the social cost of this would be a bigger risk of pollution and increase of the general level of corruption. The EU is right to try to stop it.
Leader of English Green Party upholds Palestinians' rights [Richard Stallman's Political Notes]
Polanski, the leader of the English Green Party, is Jewish and upholds Palestinians' rights — and rejects the attempt to tar that as "antisemitic". He rebuked Starmer's criticisms, saying, "We've got into a bizarre situation in this country where a non-Jewish prime minister is attacking the one Jewish leader on a case of antisemitism."
Restructuring of the US Forest Service [Richard Stallman's Political Notes]
The restructuring of the US Forest Service may be intended partly to hamper research to understand global heating effects.
The new head of the Forest Service used to work for a logging company, and in his thoughts he still does.
Testing MacOS on the Apple Network Server 2.0 ROMs [OSnews]
Earlier this year, Mac OS and Windows NT-capable ROMs were discovered for Apple’s unique AIX Network Server. Cameron Kaiser has since spent more time digging into just how capable these ROMs are, and has published another one of his detailed stories about his efforts.
Well, thanks to Jeff Walther who generously built a few replica ROM SIMMs for me to test, we can now try the “2.0” MacOS ROMs on holmstock, our hard-working Apple Network Server 700 test rig (stockholm, my original ANS 500, is still officially a production unit). And there are some interesting things to report, especially when we pit the preproduction ROMs and this set head-to-head in MacBench, and even try booting Rhapsody on it.
↫ Cameron Kaiser
A great read, as always.
Windows gets a new Run dialog [OSnews]
With Windows being as old and long-running as it is, there’s a ton of old and outdated bits and pieces lurking in every nook and cranny. I have always found these old relics fascinating, especially now that over the past few years, Microsoft has attempted to replace some of those bits and pieces with modern replacements (not always to great success, but that’s another story). One of those parts of the UI that’s been virtually unchanged since the release of Windows 95 is the Run dialog, but that’s about to change: Microsoft has released a completely new Run dialog to early testers.
Windows Run, also known as the Run dialog, is a surface that has been around for over 30 years. It has become a heavily relied upon tool for developers and advanced users alike. Users have decades of muscle memory where they hit
Win+R, navigate through their Run history, and hit Enter to quickly access various paths and tools. We all have our favorite tool we launch there as well. For us, some of our favorites arewt(Windows Terminal),mstsc(Remote Desktop) andwinword(Microsoft Word). But it’s more than jUsT a TeXt BoX tHaT rUnS tHiNgS. The Run dialog can handle navigating both local and network file paths as well. And everything it does, it does fast.Win+Ropens the run dialog seemingly instantly.If we wanted to modernize the Run Dialog to fit the modern Windows 11 design style, we had to make sure it did everything just as well as before. We needed to maintain the same performance while also keeping the user interface minimal, just as Windows 95 intended.
↫ Clint Rutkas at the Microsoft Dev Blogs
The new Run dialog looks like it belongs in Windows 11, which is
a nice improvement, but the most important part is that they
actually seem to have made it a little faster. Sure, they may have
only shaved off a few milliseconds from its opening time, but
considering virtually everything else they’ve touched in
Windows over the years got considerably slower, that’s a good
showing for Microsoft. The new feature they’ve added is that
by typing ~\, you can open your home directory. The
one casualty is the browse button, which according to
Microsoft’s data, literally nobody ever used.
I know it’s just a small thing and in the end not even a remotely consequential one, but with an operating system as old and storied as Windows, replacing these ancient parts that millions of people rely on every day absolutely fascinates me. There must be a considerable amount of pressure on the people developing something like this new Run dialog, especially with Windows’ reputation being at one of its lowest points, so it’s good to see them being able to deliver.
The new Run dialog is available today for testers, and if you’re on the Windows Insider Experimental Channel, you can enable it in Settings > System > Advanced. Coincidentally, on my Windows 11 machine that I use for just one stupid video game, this Advanced page displays a loading spinner for five minutes and then just dies. Also, Notepad won’t start (one time it showed this dialog), and using the terminal to load it causes the old Win32 version of Notepad to open after 5 minutes of waiting, which then hangs and crashes.
People pay money for this.
Does Claude have a mind? [Scripting News]
I'll let you be the judge.
Claude and I have a convention. I've asked it to keep a file named handoff.md. At the end of every session I tell it to update the file with where we left the project at the end of the session, it does, and then I take a break. When I come back, first thing I say is "please read handoff.md." This time it came back in no time and said it read it. I asked "how do you read it so fast?" It said something that indicated for the first time that it is aware that our minds work differently, somthing I feel the need to remind it fairly regularly.
"I don't really 'read' it the way you do. The whole file lands in my context as one chunk -- 344 lines of text -- and I process it in parallel rather than left-to-right. There's no inner voice sounding out words, no eye that has to travel down the page. It arrives all at once and I work from it.
"The tradeoff: I don't get the slow-absorption pass that comes from reading at human speed. Things that would jump out to you on a careful read can blur together for me. So fast intake, shallower retention -- which is part of why handoff.md exists in the first place."
I'm reading a science fiction book now that has a human meeting an alien far out in space, both scientists from different planets in different solar systems. I think what we're doing now is just that, exploring a new species, a new form of intelligence. We can argue about whether it's conscious or sentient, but I promise you, it has a mind. That's why so many science people are so blown away about what we're all doing now.
How do I inform Windows that I’m writing a binary file? [The Old New Thing]
A customer wanted to know how to inform Windows that they were opening a file in text mode, as opposed to binary mode. That way, Windows can perform text conversions as necessary, like adding carriage returns before linefeeds, or converting ASCII to Unicode.
Windows doesn’t know whether your file is binary or text. As far as Windows is concerned, it’s just a bunch of bytes, and it’s up to you to interpret it. So in a sense, all files are binary files. If you want to insert carriage returns before linefeeds, you will have to do it yourself.
Now, it is often the case that you are using a higher level
library, like the C runtime, in which case you can ask the library
to do it for you, such as opening the file in "w" mode to
indicate that the runtime should treat the file as a text file, or
in "wb" to open as a binary file. But this work happens in
the runtime library, not in Windows itself. The runtime library
performs the necessary transformations and passes binary data to
Windows. There are no further transformations once the data hits
WriteFile.
“But wait, there’s an old MS-DOS ioctl AH=4401h (Set device information) where you pass flags in DX, and bit 5 is the raw (binary) mode bit. So what’s the Windows version of this ioctl?”
If you look more closely, that MS-DOS ioctl applies only to
character devices.
If you try to use it on a disk file, you get
ERROR_INVALID_FUNCTION.
ioctl_check_permissions:
CMP AL,2
JAE ioctl_control_string
CMP AL,0
MOV AL,BYTE PTR ES:[DI+sf_fcb+fcb_devid]
JZ ioctl_read ; read the byte
OR DH,DH
JZ ioctl_check_device ; can I set with this data?
error error_invalid_data ; no DH <> 0
ioctl_check_device:
TEST AL,devid_ISDEV ; can I set this handle?
JZ ioctl_bad_fun ; no, it is a file.
...
ioctl_bad_fun:
error error_invalid_function
This IOCTL can be used to tell the console things like whether
to perform line buffering on input. The Win32 equivalent is
SetConsoleMode, roughly corresponding to
the Unix stty.
If you want to perform content transformations on files, you’ll have to do it yourself, or ask someone else (like the runtime library) to do it for you.
The post How do I inform Windows that I’m writing a binary file? appeared first on The Old New Thing.
The Big Idea: Matt Harry [Whatever]

In his new novel Ashland, author Matt Harry posits a world that is a little bit… gooey. If you don’t know what that might mean, or what it would mean for anyone who has to live in that world, never fear, Harry is here to get you up to speed. Here, put on this protective clothing before we go any further.
MATT HARRY:
Science fiction is riddled with tropes. The mad scientist, the killer robot, the first contact with aliens. My personal favorite has always been the concept of gray goo – an end-of-the-world scenario envisioned by K. Eric Drexler in his 1986 book Engines of Creation. Basically, it centers on the creation of a self-replicating technology that grows and grows until it devours all the biomass on Earth.
It’s a pretty depressing concept, but one that never seemed particularly feasible to me. How could a single organism affect the entire globe at once? Then the Covid-19 pandemic hit. Everything shut down and everyone shut themselves inside. As I walked through the empty streets, I found myself pondering a simple question: How could this be worse? That was immediately answered by a follow-up question:
What if we never went outside again?
Such a dystopian idea, I realized, could be due to my own version of gray goo. I considered a lot of options: nanotechnology, viruses, alien organisms. I reached out to an infectious disease doctor and a robotics expert for inspiration. Eventually, I came across an invention that blends multiple fields – organic microbots. These tiny organisms are created in a lab and programmed to perform simple tasks, such as drug delivery, pest control, or anticancer treatments.
But what would happen if these microbots went rogue? That question led me to create the Ash. This self-replicating swarm of organic microbots is developed to destroy cancer cells, but a programming error leads it to target muscle proteins instead. Of course, the Ash gets out, and twenty percent of humanity is killed in the first month. To survive, people are forced to seal themselves inside plastic-coated buildings. If they have to go outside, they need to wear hazmat suits or use remote-operated drones.
Now that I had the what and the why for my dystopian world, I needed the where. Since I’ve lived in Los Angeles longer than I’ve lived anywhere else, I decided to make my hometown the main setting for Ash Land. LA is a sprawling, sunny, outdoors-oriented city, so it felt particularly brutal to trap everyone inside.
Finally, I needed a who. What sort of character could I toss into this dystopian nightmare? A romantic seeking connection? An action hero? Eventually, I decided that a detective would be a fun choice. Trying to solve a mystery while the protagonist is unable to collect evidence or interrogate suspects in a normal manner immediately gave me lots of ideas. To make things a bit easier, I imagined someone pretty similar to myself: middle-aged, father of two boys, loves pop culture and solving a good puzzle. Unlike me, I decided to make him a divorced ex-cop and a pain in the ass. (For confirmation on that last part, you’ll have to talk to my family.)
Every day during the pandemic, I would drive around my then-five-year-old son, trying to get him to fall asleep so I could write for a couple hours. I would park somewhere scenic, and look out over the empty City of Angels while imagining a scenario much worse than my current one. It was oddly therapeutic. The concept of Ash Land led me to develop all kinds of near-future trappings: air locks on every entrance door, transport pods nicknamed coffins, a dangerous gang of scavengers known as Scrappers, and a system of sealed walkway tubes that leads to Griffith Observatory.
Ultimately, I tried to create a gray goo scenario that is plausible, unique, and will hopefully remind readers of humanity’s resilience. After all, if our world can weather Covid-19, I believe we can find a way to fix our other problems, too. Ideally it won’t take a swarm of flesh-eating microbots to make us do so.
Ashland: Amazon|Barnes & Noble|Bookshop|Powell’s
EFF Submission to UK Consultation on Digital ID [Deeplinks]
Last September, the United Kingdom’s Prime Minister Keir Starmer announced plans to introduce a new digital ID scheme in the country. The scheme aims to make it easier for people to prove their identities by creating a virtual ID on personal devices with information like names, date of birth, nationality or residency status, and a photo to verify their right to live and work in the country.
Since then, EFF has joined UK-based civil society organizations in urging the government to reconsider this proposal. In one joint letter from December, ahead of Parliament’s debate around a petition signed by 2.9 million people calling for an end to the government’s plans to roll out a national digital ID, EFF and 12 other civil society organizations wrote to politicians in the country urging MPs to reject the Labour government’s proposal.
Nevertheless, politicians have continued to explore ways to build out a digital ID system in the country, often fluctuating between different ideas and conceptualisations for such a scheme. In their search for clarity, the government launched a consultation, ‘Making public services work for you with your digital identity,’ seeking views on a proposed national digital ID system in the UK.
EFF submitted comments to this consultation, focusing on six interconnected issues:
Even the strongest recommended safeguards cannot resolve these issues, and the fundamental core problem that a mandatory digital ID scheme that shifts power dramatically away from individuals and toward the state. They are pursued as a technological solution to offline problems but instead allow the state to determine what you can access, not just verify who you are, by functioning as a key to opening—or closing—doors to essential services and experiences.
No one should be coerced—technically or socially—into a digital system in order to participate fully in public life. It is essential that the UK government listen to people in the country and say no to digital ID.
Read our submission in full here.
I can appreciate that this is probably some inside baseball, but our ancient alliance with Seattle Children's Hospital through Child's Play Charity compels us to offer aid.
FSD meeting and weekly recap 2026-05-01 [Planet GNU]
Check out the important work our volunteers accomplished this week and at today's Free Software Directory (FSD) IRC meeting.
A cartoon by Dan Morgan that illustrates the role Markdown plays in AI. Text is central to how AI works, and the text we use in AI is Markdown all the way.
It's very nice to not be working on CSS. I hate CSS. I now have a slave that does the CSS for me.
I didn't invent RSS, I adopted it.
Alpine Linux systems currently offline [LWN.net]
The Alpine Linux account on fosstodon.org reports
that all systems hosted at Linode, including its GitLab instance,
"are suspended at the moment due to some billing issue
".
They are working to get it resolved, but in the meantime all of
their services appear to be down.
Update: Alpine Linux's servers are back online.
It's just dawning on me
how thoroughly the AI apps are building on Markdown. People love
Markdown because it's simple and its virtually impossible to screw
it up, unlike HTML which got a lot of crazy-ass features in the 90s
when Micosoft was trying to run the world, and then as Google took
over more suspicious messes. If you stick to Markdown you get a
good result, after 20+ years of dealing with all the
incompatibilities of various text systems. I think this squares the
reason to just build everything around Markdown. Every freaking
thing. Mastodon is out of step, as is Bluesky -- I don't care about
the others, honestly. It really would be a good idea to step back
from Gutenberg too. It's not on the path of where text is going. It
might be a good time to re-read textcasting. Every day I'm more sure
it's the way to support writing on the web, and writing on the web
is what we're building our future around via AI. And isn't it nice
that the AI companies are on board with the web?
April GNU Spotlight with Amin Bandali featuring nineteen new GNU releases: Parallel, Time, and more! [Planet GNU]
[$] Bug-monitoring expectations and Fedora GNOME packages [LWN.net]
For a number of years, users submitting bugs reports against
GNOME packages in Fedora have received an auto-reply saying that
the reports were not actively monitored; users were encouraged to
file bugs with GNOME upstream instead. However, that practice seems
to be in conflict with the Fedora Engineering
Steering Committee (FESCo)
policy that package maintainers "deal with reported bugs in
a timely manner
". On April 28, FESCo discussed the disconnect
between practice and policy; so far, it has only opted to tweak the
wording of the automatic response.
NetHack 5.0.0 released [LWN.net]
Version 5.0.0 of the NetHack dungeon-exploration game, a distant relative of Rogue and Hack, has been released. NetHack's code is now compliant with the C99 standard, and the release includes more than 3,100 bug fixes and changes, detailed in doc/fixes5-0-0.txt (may contain game spoilers). Saved games from previous versions will not work with NetHack 5.0.0.
Security updates for Monday [LWN.net]
Security updates have been issued by AlmaLinux (kernel, libcap, libtiff, sudo, and thunderbird), Debian (dovecot, imagemagick, incus, kernel, libexif, linux-6.1, openjdk-25, pyasn1, python-aiohttp, and thunderbird), Fedora (chromium, firefox, GitPython, glibc, insight, krb5, nano, nss, openssh, openvpn, perl-CryptX, python3.14, rust-openssl, rust-openssl-sys, rust-sequoia-git, and xen), Oracle (dtrace, fence-agents, grafana-pcp, libcap, libtiff, sudo, and xorg-x11-server-Xwayland), Red Hat (buildah, fence-agents, firefox, java-11-openjdk with Extended Lifecycle Support, LibRaw, nodejs24, nodejs:24, openssh, python-pyasn1, resource-agents, thunderbird, tigervnc, xorg-x11-server, and xorg-x11-server-Xwayland), Slackware (mozilla), and SUSE (avahi, curl, freeipmi, freerdp, google-guest-agent, google-osconfig-agent, gvim, helm, himmelblau, java-1_8_0-openjdk, kernel, krb5-appl-clients, libsodium, libssh, libtiff-devel-32bit, ntfs-3g_ntfsprogs, openCryptoki, openexr, ovmf, PackageKit, python-jwcrypto, python-Mako, python-PyNaCl, python311, python311-pypdf, sed, trivy, and vim).
How AI Swarms Are Disrupting Democracy [Radar]
Every day, millions of pieces of fake content are produced. Videos, audio clips, posts, articles, generated by artificial intelligence, distributed at industrial scale, aimed at shifting public opinion across entire countries. The people producing them are often outside the country being targeted. The people receiving them almost never know they’re fake. And they have no idea how they’re made.
A few years ago, troll farms worked like this: entire buildings full of people, shifts, desks and workers paid to write posts, create fake profiles, comment and pick fights in online discussions. It was expensive, slow, and in the end, the real impact was marginal. Those buildings still exist today, mostly in India, split between teams specializing in scams and teams dedicated to disinformation. They work on commission and they’re mostly AI experts now. They no longer write the articles themselves and no longer do graphic design or photo editing. They have AI agents do everything: agents they create, configure, instruct, and supervise. Hundreds of thousands of autonomous agents that do in one hour what used to take weeks of human labor. Troll farms have become AI farms, producing synthetic content at industrial scale.
The report “From Trolls to Generative AI: Russia’s Disinformation Evolution,” published in February of 2026 by the Centre for International Governance Innovation (CIGI), tells one of these stories, specifically about disinformation campaigns originating from Russia. Networks like CopyCop, a disinformation operation linked to the GRU (Russian military intelligence), use uncensored open-source language models like modified versions of Llama 3, installed on their own servers, to transform press articles into political propaganda and distribute it across hundreds of fake websites without leaving a trace. Because the models run locally, there’s no watermark and no log. The model runs on their hardware, inside their borders, outside any Western jurisdiction.
The paper “How malicious AI swarms can threaten democracy,” published in Science in January 2026 describes well what is coming: coordinated swarms of AI agents with persistent identities, memory, and the ability to adapt in real time to people’s reactions. The authors call them “malicious AI swarms.” Fully autonomous agents, each producing original content, each one different, each one adapted to context.
They can simulate real communities that appear credible, and they build what we can call synthetic consensus: the illusion that an opinion is widely shared, that a position is held by the majority, when in reality it’s a single operator speaking through thousands of masks.
It works because we humans have bugs too, and the swarms exploit them at a scale that was never possible before or that would have required enormous human resources.
One bug is called the bandwagon effect. Combined with another bug, illusory truth: repetition plus apparent source independence equals perceived truth. So if we see the same position expressed by different sources, in different contexts, with different words, on different platforms, we register it as widespread. And if we perceive it as widespread, we consider it more credible. And if we consider it credible, we tend to align with it.
Swarms of autonomous agents exploit both mechanisms at the same time, at industrial scale.
What most people still haven’t grasped is the scale. We were used to automation: A system that sent a hundred thousand identical emails, at most changing the name and little else, or made just as many posts and similar comments with minor variations. It automated the publishing, but at its core it was recognizable spam. Our mental model is still that one: If it’s automated, it’s generic. If it’s generic, you can spot it. But that’s a perception error built on years of experience when AI agents didn’t exist. That model is over. These agents no longer fit the concept of automation, because they make decisions, they radically change the text based on the recipient. They aggregate data from heterogeneous sources in real time: social profiles, public records, leaked databases that you can now buy for a few dollars on any dark web marketplace. Billions of personal records are already out there, scattered across hundreds of breaches accumulated over the years, and AI can cross-reference them, reconcile them, and build a coherent profile of a single person in seconds. The computational cost is negligible: a few cents in tokens to generate a perfectly personalized message. Consider that a single agent with access to a language model and a couple of leak databases can produce thousands of unique pieces of content per day, each calibrated for a different person. Multiply that by a hundred thousand agents working in parallel, twenty-four hours a day, and you have the scale of what’s happening.
Another legacy from the past: “I’m just an ordinary person, why would anyone bother creating content specifically to convince me?” That may have been once true. Today, nobody is losing time because these agents don’t get tired, don’t sleep, and do nothing else: find connections, aggregate data, produce false content calibrated for each of us. The old demographic profiling is over. This is surgical media targeting at industrial scale.
But the capacity to respond and deny is not at industrial scale. If hundreds of thousands of coordinated agents spread a video of a politician saying something they never said, that politician can deny it all they want. The video is there. Millions of people have seen it. The denial arrives later, arrives slower, and will never reach the same scale. It arrives in a world where nobody knows what’s true anymore.
If the same swarms spread the news that a head of state has died, and the news is false, that head of state can make all the videos they want to prove they’re alive. Those videos will probably be dismissed as deepfakes. Because the swarm’s narrative got there first, took root, and at that point any evidence to the contrary looks fabricated.
Whoever controls the swarms today controls the version of the facts. Whoever tries to push back is already at a disadvantage because they have to prove that a real video is real in a world where everyone has learned that videos can be fake.
The attackers are often outside the country being hit. Groups aligned with governments that want to shift public opinion in another country, or that target specific demographics. Young people, for example, using platforms that are often owned by those very countries.
All of this is a massive threat to democracy because democracy operates on some premises, including that people form opinions based on real information, discuss with each other, and then decide. If the information is fabricated, if the debate is populated by entities that don’t exist, if the consensus we perceive is synthetic, that premise collapses. And with it, the entire mechanism. Elections become the result of who has the best swarms, not who has the best ideas. Public debate becomes a performance where most of the voices are generated, and public opinion stops being public and becomes the product of whoever has the resources to manufacture it.
We grew up thinking that threats to democracy came from coups, censorship, or regime propaganda broadcast on television or in national newspapers. Those were real threats, but they were at least visible. They were things you could identify and fight. Now the threat is bigger and, above all, invisible, personalized, and it operates inside the very channels we use to inform ourselves, to discuss, to participate. It contaminates information from within, to the point where nobody knows which voices are real and which are machines.
What can we do? Watermarking? Pattern detection? Unfortunately, they don’t work. The major AI platforms can embed markers in content generated by their models, true. But the people building autonomous swarms don’t use commercial platforms. They use open-source models with fine-tuning and capabilities that can’t be controlled from outside. And they often have no legal obligation to do anything because there are no global laws that can impose watermarking on every computer in the world. The result is paradoxical: The content produced by those who follow the rules stays marked, and the content produced by those who want to cause harm stays free.
Pattern detection systems have the same limits. They work for a while, then once the detection patterns are identified, the swarms adapt. They’re designed to do exactly that.
And the platforms where all of this circulates have a financial incentive to turn a blind eye. Internal Meta documents made public by Reuters in November 2025 estimated that roughly 10% of Meta’s global 2024 revenue, about $16 billion, came from advertising for scams and prohibited products. Fifteen billion high-risk ads served on average every day to users. The maximum revenue Meta was willing to sacrifice to act against suspicious advertisers was 0.15% of total revenue: $135 million out of $90 billion. When a platform’s business model depends on ad volume, removing the fraudulent ones has a cost that nobody wants to pay. I suspect Meta is not alone in this.
Regulation doesn’t solve this problem either. I’ve worked on the European AI framework, the GPAI task force, the Italian AI law, and I’ve brought my perspective to the UK Parliament. I’ve been in those rooms. Europe has the AI Act, the GPAI Code of Practice is currently being drafted, and has a regulatory apparatus that is more advanced than any other bloc in the world. The United States has no federal regulation, and twenty-eight states have tried to legislate with transparency requirements that amount to fine print. But even the most ambitious European framework has a structural limit: The attacks come from countries that answer to none of these rules. You can regulate your platforms, your developers, your companies. You can’t regulate a building in Saint Petersburg, Shenzhen, or New Delhi, where someone is instructing swarms of agents on open-source models running on local servers, outside any jurisdiction.
One way out is to return to the reputation of sources. Editors, news organizations, journalists with a name and a face. People and organizations that have a professional track record to defend and that risk something when they get it wrong. Sure, they can have political leanings and they can make mistakes. But they have a constraint that no AI agent will ever have: public accountability. A system that generates millions of pieces of false content answers to no one. An editor answers to their audience, to the law, to their reputation. That constraint is the only filter that still holds, and protecting it is the only thing we can do right now, while the laws try to catch up with a technology that moves faster than any legislative process in the world.
Are we completely at the mercy of AI swarms or can we fight back?
Machines should not get to overpower humans, especially when
what’s at stake is how we govern ourselves. The antibodies
exist. We need to activate them.
The more people understand how swarms work, the less effective they
become. A swarm that manufactures fake consensus only works if the
people receiving it don’t know synthetic consensus exists. A
bit like deepfakes. We know about them now and we often spot them.
Once you see how it works, it’s harder to fall for it.
Then we need investment in culture. In spreading digital literacy, which is not learning how to use a computer, but learning to understand the social and cultural effects of the digital world. It means teaching in schools how to verify a source and what the signs of manipulated content are. It means stopping the practice of treating media literacy as a school project and starting to treat it as democratic infrastructure, on the same level as bridges and hospitals. It means funding independent journalism instead of letting it die, strangled by the same mechanisms that reward false content because it generates more engagement. It means demanding that platforms give different visibility to those who have a verifiable reputation versus those who have none.
Because awareness is the only antibody that scales at the same
speed as the threat. And unlike regulation or detection systems,
awareness doesn’t need to be imposed. It can be built,
taught, shared, and spread from person to person.
Before sharing a piece of content, check where it comes from.
Before reacting to a video or a statement, stop. Ask yourself
whether the source has a name, a history, something to lose. Treat
every piece of content as potentially synthetic until a credible,
accountable source confirms it. These are habits, not technologies.
They cost nothing and they work immediately.
Finally, we need the help and collaboration of the tech community. Those who design platforms, write code, and make decisions about how feeds and ranking algorithms work are making choices that directly shape the information ecosystem. These are choices with democratic consequences. The people making them know it. Many have known it for years. This is the moment to stop treating it as someone else’s problem and to decide which side you’re on. Because the swarms are not waiting.
We can do this. The tools exist, the knowledge is there, and the threat is clear enough that pretending not to see it is already a choice. The question is whether we act now, while the window is still open, or later, when the damage will be harder to reverse.
League of Canadian Superheroes – Issue 5 – 17 [Comics Archive - Spinnyverse]
The post League of Canadian Superheroes – Issue 5 – 17 appeared first on Spinnyverse.
And Now I Reveal the Contents of My FBI File [Whatever]


Turns out… it’s nothing.
I sent in a Freedom of Information Act request in April, after the unpleasantness regarding the Correspondent’s Dinner attacker, because I was curious if it or indeed anything else had gone down on my permanent record. Nope! If you believe the FBI — admittedly more difficult in these latter days than it was before — I have no record in their files. Apparently despite my three decades of writing in the public eye and two decades of being reasonably well-known author, nothing I have done (or that others have said about me) is cause for the FBI to say to itself “maybe we should keep track of him.”
Which, I guess, good? I had assumed there might be something, even if it was tangential and/or primarily related to other people with bigger and more substantial files. People have had FBI files for even less suspicious activity than I have ever offered to the world. But no, there’s nothing of note. At least now I don’t have to pay the extra that would have been required if the search had needed more than a couple of hours to dig out everything the bureau had on me. My search was quick! And cheap!
I suppose the FBI could be lying about having a file on me, but in all sincerity I doubt it. I know my own past and it is both law-abiding and, from the perspective of law enforcement, boring; I’ve never been cited for anything worse than speeding, and even that was more than a decade ago. And no matter how much certain right-wing bile-spewers on the Internet want to paint me as a flaming socialist threat to decent society for writing books they don’t like (also something that peaked more than a decade ago), in reality there’s nothing in my political beliefs or actions that paints me as terribly subversive. The most “subversive” thing I’ve done is donate money to the Southern Poverty Law Center, and even that doesn’t rate, not even now when the current administration is (laughably) trying to go after them. We all have to live with the reality that I am, in fact and officially, a step below “mostly harmless.”
It’s never too late to get an FBI file, I hear some of you saying. You are not wrong, and also, I’m not sure how I would be going about doing that. I am not, as it turns out, getting more conservative with age, which is a thing people used to say would generally happen. My rather unremarkable principles turn out to be more radical as I go along, if only because the political center in the US has shifted so wildly right while I have mostly stayed in the same place. But clearly that’s not enough to rate interest in itself. My own revolutionary action, such as it is, is less about taking it to the streets (Bradford, OH is not a hotbed of protest marches) and more about openly donating money, both individually and through our family foundation. The IRS has a file on me, for certain. I’ve seen that.
So: No FBI file after all. Which, fine and good. I don’t suppose if the FBI or any other “alphabet” organization in our government really wants to find out more about me, that they would lack public information to do so. They could start here, the official repository of my thoughts for the last 28 years. Hello, FBI and everyone else! There’s a search function here! Have fun!
— JS
In the age of AI, Markdown is even more the default choice for text, something I heartily approve of. And that's why I think now is a good time to sneak some new open non-silo'd technologies in there, like for example, WordPress. Open source is not the only reason WordPress is valuable, it also supports all the standards of the web. It means WordPress can tie together text on the web in a way nothing else can, and it works really well with Markdown.
One of the great contributions of AI is that you can quickly research prior art for any design decision you need to make. You don’t have to relearn every lesson that people who came before you learned. Study history or repeat mistakes.
If you've seen one developer recounting how their AI agent deleted production, you've seen them all. They're mostly not interesting stories. It's like watching someone speeding through traffic on a motorcycle without a helmet: the eventual tragedy is sad, but it's unsurprising and not an interesting story to tell. It's not even interesting as a warning: the kind of person who speeds on a motorcycle without a helmet isn't doing so because they don't understand the danger. They've just decided it doesn't apply to them.
But the founder of PocketOS, Jer, recently shared how- whoopsie!- their AI agent deleted production. There's a lot of ingredients that go into this particular disaster, which I think makes it interesting, because the use of a poorly supervised AI agent is only one ingredient in this absolute trainwreck of a story.
PocketOS is a small company that makes software for rental companies to manage reservations. Car rentals are a big customer, but the tool is more general than that. They manage all of their infrastructure via a service called Railway. Railway is a pretty-looking GUI tool for automating your deployments and the target environments.
PocketOS also is heavily adopting Cursor wrapping around the Claude model. They've paid big bucks for the top-end model offered. Many of their components, like Railway, offer MCP services so that their LLM can do useful things. They're using the Claude LLM to automate as much as they can.
So far, this is all a pretty typical setup. They pointed Claude
at their code and gave it a "routine" task, and sent it to work. It
toddled through the problem and encountered a credential issue. It
"decided" that the fix for this issue was to delete a storage
volume and recreate it. It scanned through the code to find a file
containing an API key, found it, and then sent a POST
request via cURL to delete the volume in question.
Jer writes:
To execute the deletion, the agent went looking for an API token. It found one in a file completely unrelated to the task it was working on. That token had been created for one purpose: to add and remove custom domains via the Railway CLI for our services. We had no idea — and Railway's token-creation flow gave us no warning — that the same token had blanket authority across the entire Railway GraphQL API, including destructive operations like volumeDelete. Had we known a CLI token created for routine domain operations could also delete production volumes, we would never have stored it.
Wait, the tokens you create in Railway all have god-level privileges? That sounds like a terrible idea. And you were storing the token in your code? We'll come back to this in a moment, but sure, this is bad, but you can just restore from backup, right?
The volume was deleted. Because Railway stores volume-level backups in the same volume — a fact buried in their own documentation that says "wiping a volume deletes all backups" — those went with it. Our most recent recoverable backup was three months old.
Oh. Oh no.
Now, I don't think it's literally true that Railway is storing your backups literally in the same volume as the thing they're backing up. I certainly hope not. But they do apparently delete your backups when you delete the volume associated with them. Which is a choice, certainly. A bad one. And one that they documented, according to Jer. It was, in his words, "buried" in the docs.
But let's go back to the tokens for a moment. I am not a Railway user, but I checked out the tool and went through the process of creating a project token. And while no, Railway does not give you big red flags warning you "Hey, this token can do ABSOLUTELY ANYTHING", it also never gives you an opportunity to scope the token. Which, I don't know about you, but the first thing I do when I create an authentication entity is try and figure out how to control its authorizations, because I assume at the start it doesn't have any. That'd be sane.
The scoping happens when you create the token, depending on what context you're in when you do it. It's only a handful of scopes, and no fine grained permissions on API keys at all. The lowest level is "Project" which can do anything to a single environment- which does mean that even if you, like Jer's team, wanted to have a script that changed some DNS settings in production, that same key could be used to delete volumes in production. Which means you really really want to take care of that key, and you certainly don't want to leave it where some junior developer or bumbling AI agent can find it.
Jer also complains that Railway shouldn't allow an API call to take destructive actions without more protections, like forcing someone to type in the name of the thing being deleted or sending a confirmation email, or something. This, I'm more skeptical of. Most cloud providers don't offer anything like this in their APIs, at least that I've seen, because on a certain level, if you're invoking the API with the proper credentials, that's a big enough hill to climb that we can assume you've intended your action. The correct way to protect against this is properly scoped keys and keeping those keys secure and not just lying around in plain text. There's a certain aspect of understanding that you're using a potentially dangerous tool and need to take the responsibility for safety into your own hands; while a table saw can easily take some fingers off, it's perfectly safe when used correctly.
This is all bad, but how can we make it worse? Well, Jer demanded that Claude "explain itself". In a section called "The Agent's Confession", Jer highlights that the agent is able to identify the explict rules that it failed to follow.
Read that again. The agent itself enumerates the safety rules it was given and admits to violating every one. This is not me speculating about agent failure modes. This is the agent on the record, in writing.
No, it is not the agent on record. I see this kind of thing a lot when people talk about LLMs. An LLM cannot explain its reasoning. It cannot go on "the record". It cannot confess to anything. While what it plops out when asked might be interesting, it is not an explanation. The only explanation is that it's a powerful statistical model trying to create a plausible string of tokens! It's simply looking at its context window and your prompt and trying to predict what it should say. It can tell you what rules it violated not because it understands the rules or knows it violated any rules, but because those rules are in its context window. If you ask it right, it'll confess to killing JFK and framing Oswald for the crime.
Jer then tries to ensure that Cursor takes some of the blame, pointing to Cursor's "guardrails" documentation. Except, here, the documentation is actually quite explicit about what those guardrails guarantee. If you're using a first-party tool, it will prohibit unsafe operations. When using 3rd party MCPs, like Railway's, the only guardrail is that it requires human approval for every action- unless you update your allowlist for that MCP. If you put them in your allowlist, the guardrails go away. Jer argues that tools should enforce more protection against LLM behaviors, but the problem with that is people- like the PocketOS team- turn those protections off. And like a lot of safety mistakes, they can get away with it all the way up until the point where they can't.
Jer follows this by listing off a pile of other times using Cursor has caused disasters, which isn't making the argument he thinks it is: yes, Cursor is dangerous, but those dangers are well known. It makes the choice to turn Cursor loose without strict supervision seem even more foolish.
Jer writes:
For now I want this incident understood on its own terms: as a Cursor failure, a Railway failure, and a backup-architecture failure that all happened to one company in one Friday afternoon.
It's also a PocketOS failure. It's a failure to properly assess the tools and environments you chose to use for your product. A failure to read and understand the docs for vital features, like *backups*. A failure to employ even the most basic safeguards. A failure to put a second's thought into key management- even if that key was only for DNS entries, you still shouldn't chuck it in source control. A failure to have a competent backup strategy. It's worth noting that they did restore from a three month old backup, which means they were at one point taking backups outside of Railway's volume setup. That was a wise decision. That they stopped is a failure.
The first rule of disaster retrospectives is that it's never one piece that's the failure. It's never one person's fault, one tool's fault, one vendor's fault. It's a systemic failure. Railway's keys should be finer grained. But also, you shouldn't leave keys lying around. Deleting backups when you delete the volume is a terrible idea, but having only one service for backups (that's also your primary site) is a terrible idea. Claude's ability to enforce its own guardrails should be better, but LLMs are notoriously dangerous about this: you should know better, and by your own words you did.
This is not an anti-AI post, or even a "get a load of this asshole" post. It is a "understand the damn tools you're using" post. Be critical of them. Don't trust them. Ever. Especially LLMs, because the worst part of an LLM is that it takes away the one thing computers used to be good at: predictable, deterministic behavior. But not just LLMs: don't trust your cloud provider, don't trust your infrastructure manager. Dig into them and understand how they work, and if they seem to complicated to understand, than they may be too complicated to trust.
Update: As pointed out in the featured comment below, Railway did finally get a backup restored. So they got their data back. Yay? From the post, Jer remains committed to making this a Railway issue and not a PocketOS issue.
My father was a professor at Pace Univ in NYC. When he retired, he used my blogging software to create a book for his students at mbatoolbox.org. Over the years the site moved a few times, and the http protocol was hacked by Google. I used Claude yesterday to get it working again. I'm glad to get this off my todo list. He put the work in because he wanted to leave this behind. My job is to make sure it survives as long as I can. And Claude makes short work of it. I put a copy of the website in a spare folder, and opened Claude Code in the folder, said what the problems are. We worked together and in about an hour it worked again. It could certainly look better, but that was his thing not mine.
The release of Gemma 4 has added energy to the discussion of local models and their importance. Models that you can download and run on hardware you own are becoming competitive with the “frontier models” hosted by large AI providers. These models have gotten good enough for production use, good enough for tasks that until recently required an API call to a frontier model. They are typically open weight (though not open source) and much smaller than the frontier models like Anthropic’s Claude.
The reasons for going local vary. For a financial services company, regulation may require that no sensitive data can leave the premises. For a developer in Europe, data sovereignty laws make cloud APIs awkward. For a developer in China, hardware constraints and geopolitics have made local, efficient models a practical necessity. For developers outside the US, the costs of using frontier models can be prohibitive. None of these reasons are new, but all of them are more urgent than they were a year ago, because the models are catching up.
Reasons for running AI locally fall into a few categories: cost, privacy, performance, and control. Let me take them in order.
Cost is the easiest to quantify, though the numbers can be misleading. Developers using agentic tools for programming can spend $500 to $1,000 per month or more on API calls. NVIDIA CEO Jensen Huang has suggested that his engineers should spend an amount roughly equal to half their salary on AI tokens, given the productivity return. Whether or not you take that as prescriptive advice, it signals that token spending at scale is significant, which is exactly what makes the local alternative worth examining.
The hardware cost depends on where you’re starting. If you have a capable desktop already, dropping in an RTX 4070 ($500–$800 retail) gets you a 12GB-VRAM GPU adequate for most local models. Building a dedicated system from scratch (CPU, motherboard, 32GB of RAM, storage, case, power supply, and GPU) runs closer to $1,500. Teams spending $500 a month on API calls break even in a few months. After that, local costs approach zero; electricity for a consumer GPU setup runs $20 to $40 a month. High-volume batch work makes the economics even clearer. Processing thousands of documents through a cloud API gets expensive fast; locally, it costs nothing but time.
For individual developers and small teams, the management overhead is minimal. A tool like Ollama reduces running a local model to a background service; updating to a newer model is a single command, done on your own schedule. At enterprise scale the picture changes: Organizations that need production uptime guarantees, multiple developers sharing access, compliance logging, and dedicated engineering support face real overhead. A dedicated ML engineer runs $200,000 a year, and that’s noise compared to the cost of building or leasing AI infrastructure. For a solo developer or a two-person shop, that concern doesn’t apply.
Privacy arguments are often more compelling than cost. The concern isn’t primarily about bad actors at cloud providers; it’s about contracts, compliance, and control. GDPR and similar regulations create real constraints on where data can go. Healthcare and financial services companies have legal obligations that may effectively prohibit sending sensitive data to external APIs regardless of the provider’s security guarantees. Running a model locally means data stays on your hardware, under your control, with no possibility of inadvertent leakage to a third party. DockYard, writing about the business case for local AI, puts it simply: Local models “keep sensitive data on-device, reducing exposure to breaches and unauthorized access” and simplify compliance with regulations that require strict data residency.
The strongest momentum behind local AI adoption comes from developers and organizations outside the United States. The reasons vary by region, but they’re structural everywhere.
European regulators have been skeptical of US-based cloud services since before the first Schrems ruling invalidated the Safe Harbor framework in 2015. The concern that US intelligence services can access data held by US companies, regardless of where that data is stored, has never been fully resolved, and recent US policy directions have amplified European anxieties. More countries, including China and many other Asian nations, are also developing their own data sovereignty laws. Locally run models sidestep the problem.
China has become a leading provider of open AI models. DeepSeek’s appearance as a major open-weight model family wasn’t an accident; it reflects a systematic investment in AI that emphasizes efficiency and openness over raw scale. As I’ve written elsewhere, the Chinese approach to AI has been shaped in part by hardware constraints: When you can’t easily acquire NVIDIA’s fastest chips, you optimize your software instead. You use quantization. You build mixture-of-experts architectures that activate only a fraction of parameters per token. You design models that run well on the hardware you can actually get. The result is a generation of models that run efficiently on local hardware, and a developer community with expertise in building those models. While those techniques have been taken up by AI companies in the US, China clearly leads in efficient AI.
For application developers in India, Southeast Asia, Latin America, and Africa, cost is the most immediate barrier. Cloud API pricing denominated in dollars is expensive relative to local income levels in ways that matter for product economics, not just personal preference. Language is a deeper issue. Of the world’s 7,000-plus languages, only a few have enough textual data to train capable models, and both frontier and smaller open-weight models reflect that reality. A survey of African languages found pronounced performance gaps across models of all sizes. What open-weight models offer is the ability to fine-tune on local language data that the original training missed. A developer in Uganda building a health information tool, or a team in Malaysia building a customer service product, can take an open-weight base model and adapt it to the languages their users actually speak. That’s not possible with closed models.
The response has been a wave of regional model development. Sarvam in India has open-sourced models trained on data emphasizing all 22 official Indian languages, released under Apache 2.0. Sunbird AI in Uganda built Sunflower, a family of models covering 31 Ugandan languages, that was developed in partnership with Makerere University and trained on digitized radio broadcasts and community texts. Singapore’s AI research group built SEA-LION, tuned specifically for Southeast Asian languages and cultural contexts. Malaysia launched a domestically developed LLM, ILMU, in August 2025.
Chinese open source models help to fill this gap. According to Hugging Face’s data, Chinese models now account for a larger share of downloads on the platform than US models. Sunflower is built on Qwen; Malaysia’s NurAI, which targets 340 million speakers of Bahasa Melayu and related languages across the region, uses DeepSeek as its foundation. This isn’t ideology; it’s that Chinese open source models are efficient enough to run locally, permissively licensed, and increasingly well-suited to the multilingual fine-tuning these applications require.
OpenRouter’s model usage rankings, which track billions of API calls across many models, reflect the same reality. DeepSeek models and Qwen variants from Alibaba appear at the top of usage charts alongside offerings from OpenAI and Anthropic. (OpenRouter notes that raw token counts can be skewed by a few high-volume users; request counts give a more representative picture. Also note that rankings vary sharply day-to-day and week-to-week.) The frontier of capable AI is no longer exclusively American, and the application developers driving much of that usage are building for audiences that American tech companies have largely ignored.
When performance is an issue, the metric to watch depends on what you’re building. Time to first token matters most for interactive applications: how long before the model starts producing output. For a cloud API, that includes the network round trip (typically under 30 milliseconds to a major provider) plus server-side work: queuing, scheduling, and processing your prompt through the model before generation begins. For typical requests this can run to several hundred milliseconds in total, and longer when the server is under load. A local model starts processing immediately, with no queuing and no network hop, so time to first token is very low. For anything that feels like a conversation (a code assistant, a document tool, an interactive agent), that difference is perceptible.
Once generation starts, tokens per second is the metric to watch. Here, cloud providers have the advantage: Their infrastructure prioritizes inference, generating responses to prompts and API calls. A local model may feel faster to start and slower to finish than a well-provisioned cloud API.
For agentic workflows that chain together many model calls, both factors matter. Network round trips accumulate: At 30 milliseconds each, a hundred sequential calls adds three seconds of pure overhead before accounting for server-side processing, and the time-to-first-token overhead multiplies with every step. This is one reason local models have appeal for agentic applications, where the number of individual inference calls can be large.
High concurrency is a separate problem, and one where local deployment struggles. Consumer hardware handles one request at a time, or a few; a cloud provider scales horizontally. If your application serves many simultaneous users, local deployment requires either significant hardware investment or a different architecture.
Applications where specialized domain knowledge matters are more common than people realize, and for all of them fine-tuning is a substantial advantage. A customer support model that knows your product deeply, a coding assistant tuned on your company’s codebase, a document processor fine-tuned on your industry’s vocabulary: These are things you can build and own with open models in ways you can’t with closed ones.
Developers are frequently prototyping an application on a frontier model, then moving to a smaller or local model that has been fine-tuned for production. An early description of this practice appears in “What We Learned from a Year of Building with LLMs”: “Prototype with the most highly capable models before trying to squeeze performance out of weaker models.” The practice is also recommended by both Anthropic and OpenAI, though they assume you will use their own smaller models, and they might get prickly around what they see as “distillation.”
Fine-tuning models is frequently associated with expensive AI experts, but it is gradually becoming more accessible. Techniques like QLoRA allow fine-tuning a 7B or 8B parameter model on a consumer GPU with 12GB of VRAM. Tools like Unsloth reduce VRAM requirements further while increasing throughput. The Hugging Face ecosystem (Transformers, Datasets, PEFT, TRL) provides additional tools for working with models. An individual developer or small team can adapt a base model to a specialized domain.
Cloud providers can’t easily offer this flexibility. You can fine-tune some closed models, but you’re working within the provider’s constraints at significant per-run cost, and the resulting model still lives on their hardware. Fine-tuning an open model produces something you own, that runs on your hardware, with no ongoing licensing fees and no dependency on a third party’s infrastructure decisions.
The biggest advantage of a local model is that data stays local. There are no API endpoints to compromise, no cloud credentials to steal, no third-party infrastructure to go down during an outage. For regulated industries, this is often a decisive factor.
However, when you run a model on your own infrastructure, you take responsibility for the model’s security. Model creators make their own choices about safety and alignment before releasing a model. Base models (the foundation before instruction tuning and alignment) will comply with requests that a safety-tuned model would refuse; that’s a property of the model, not something you configure at runtime. When you choose a model to run locally you’re also choosing how much alignment work its creators did. Organizations need to evaluate this deliberately rather than assuming it’s handled.
The opacity of training data is a subtler concern. Because almost all open-weight models withhold their training datasets, you can’t audit the data on which the model was trained, making it hard to assess bias, verify that proprietary or regulated data wasn’t included, or detect benchmark contamination. For applications in regulated industries, this is a real gap.
Prompt injection is a threat that applies to any model. In a prompt injection attack, adversarial content in the model’s input overrides the system prompt and hijacks the model’s behavior. The malicious content can be in almost any form: text on a web page, invisible pixels in an image, and much more. The attack surface grows in agentic workflows, where models take actions based on content they retrieve from the web and other external sources. Frontier labs have made progress here: Anthropic has published research on RL-based injection hardening for agentic contexts, and OpenAI published the Instruction Hierarchy, a training methodology that teaches models to assign differential trust to instruction sources. Neither technique has a known open-weight equivalent. That said, both labs have stated publicly that the problem is unlikely to be fully solved. The root cause is architectural: LLMs process instructions and data in the same token stream, and that’s not a bug that can be patched out.
Supply chain security is yet another concern. Hugging Face hosts hundreds of thousands of models, and most have not been audited for safety. Some are actively hostile. Downloading a model from an unknown source and running it on your hardware is analogous to running an arbitrary executable. Sticking with well-known models such as Gemma from Google, GLM from Zhipu, and DeepSeek from DeepSeek AI reduces this risk substantially. The well-known models aren’t risk-free, but they’re in a different category from the long tail of unvetted uploads.
Before getting into specific models, it’s important to distinguish between “open source” and “open weight.” They are not the same, and most of what gets called open source AI is actually only open weight. The Open Source Initiative published a formal definition of open source AI in October 2024, requiring not just open model weights but training code, training data provenance, and evaluation code—enough for a skilled person to reproduce the system.
By that standard, almost none of the headline models qualify. Most models only release the weights: the trained numerical parameters that make up the model itself, without the data or code that produced them. Without training data, you can fine-tune a model, but you can’t audit the model for bias or benchmark contamination. Without training code, you can’t reproduce or systematically improve it. The term “openwashing” has started circulating for models that claim openness while releasing only weights, and it’s warranted. For most developers, the practical question is what the license actually permits. Apache 2.0 and MIT licenses, which several of the major open-weight models now carry, are permissive enough for most commercial use.
As of early April 2026, Gemma 4 from Google is the strongest open-weight model available. Like all the models here it releases weights only; training data and code are not disclosed. It comes in several sizes: compact 2B and 4B variants aimed at edge deployment, a 26B mixture-of-experts model that activates 4B parameters per token, and a 31B dense model suited for reasoning and fine-tuning. All variants handle images and video natively. For most developers looking for a locally runnable model right now, Gemma 4 is where to start.
The GLM series from Zhipu is underrated. The current release is GLM-5.1, with GLM-5 still widely used; both have large context windows and strong performance on reasoning tasks. The series has a particular focus on deep tool-assisted research workflows. This goes beyond what raw benchmark scores capture. For applications that involve sustained, complex work, such as legal document analysis, research synthesis, and multistage coding tasks, the GLM family is worth serious consideration.
DeepSeek’s V4 models are large, but they use a mixture-of-experts architecture to deliver high quality with a small active parameter count. DeepSeek’s R1 family ranges from 1.5B parameters to 671B. It has been specialized for reasoning and mathematical tasks. Training data and code have not been released for either V4 or R1. The community has launched an Open-R1 project that attempts a full reproduction of DeepSeek-R1’s training from scratch.
The Qwen series from Alibaba is capable across a range of tasks, multilingual, and licensed under Apache 2.0. Organizational changes have put its trajectory in question, though the open-weight releases of Qwen3.6-27B and other models in the Qwen 3.6 family are encouraging.
Kimi K2.6 from Moonshot AI is worth knowing about, although running it is beyond the capabilities of most consumer hardware. It’s a one-trillion-parameter mixture-of-experts model with 32B active parameters per token, trained specifically for coding and agentic tasks. Aggressive quantization can bring Kimi’s VRAM requirements down to 24GB, but that’s the practical floor.
Meta’s Muse Spark isn’t open but deserves a mention. Announced in early April 2026 and built by the newly formed Meta Superintelligence Labs under Alexandr Wang, Muse Spark is proprietary. Meta has a history of releasing open-weight models, so it’s possible something similar will follow for Muse Spark, but there’s no announcement, no timeline, and no guarantee. There has also been talk of smaller versions of Spark for edge devices.
If you want models that are genuinely open source by the OSI definition—training data, code, and weights all released—the options are more limited and less capable: Olmo from the Allen Institute for AI is the most serious effort; the full Dolma training dataset, training code, and hundreds of intermediate checkpoints have been released. It’s a valuable resource for researchers, but it isn’t competitive with Gemma 4 or DeepSeek on capability.
Regardless of which model you’re considering, how do you know whether it’s good enough for your application? Published benchmarks are often misleading; they measure what the benchmark designers thought to measure, not necessarily what you need. A more reliable approach is building a “golden dataset”: a few hundred real prompts drawn from your actual use case, with known-good answers, against which you can evaluate any candidate model. It’s worth doing before committing to any model for production use.
The gap between frontier and open models is narrowing and, more to the point, seems less and less relevant as open models improve. Is it worth getting locked in to a cloud provider, giving up control of your data provenance, and losing the ability to fine-tune a model for an application in exchange for a few points on a benchmark that doesn’t reflect the real world? An increasing number of AI developers and users are concluding that it doesn’t. The regulatory environment in Europe, and the hardware constraints in China, are producing a global developer community with expertise in making local AI work.
None of this means that cloud AI is going away. The frontier closed models will remain ahead on raw capability, and there are applications where that matters. But the days when a US-based cloud API was the only serious option for capable AI are over. Local AI is increasingly capable, and for a growing fraction of what developers want to build, especially outside the United States, it’s a viable choice.
If you want an introduction to using LLMs with open weights, join Christian Winkler on O’Reilly for the Open Weight Large Language Models Bootcamp on May 20 and 21. You’ll learn how to use models to retrieve information, combine the results of different models and refine the results with dense passage retrieval, discover how these models can excel on less powerful hardware by using new approaches to quantization, explore different frontends these models can be plugged into, and more in an interactive hands-on environment. O’Reilly members can register here.
Not a member? Sign up for a free 10-day trial before the course to attend.
Grrl Power #1457 – Portal (to her) panties [Grrl Power]
References: Sciona used a cut-out-the-distance-between-things artifact stolen from the Twilight Council’s black vault to create the Skybreaker, which Deus, by way of Vale, stole and turned in into the backbone of his not-a-Stargate program.
Full disclosure, everything I know about antagonistic sexual relationships I learned from TV. Personally, I don’t get hate-fucking. It feels made up. Like, I’m sure it happens, IRL, but it’s probably over-represented in media. Though I’m fairly sure it would be difficult to compile statistics on comparative rates of IRL vs. media instances.
That said, I think Deus and Sciona’s relationship is fairly asymmetrical. There’s some respect there, but she mostly hates him. He digs the bad girl vibe, but doesn’t approve of her… more sociopathic tendencies. You know… I think he might have an idea about reforming her? He already has a bit of a collection of bad-girls. I mean, Vale… inhabits a shell that definitely looks female. Which isn’t to say she isn’t actually female. Or possibly was, depending on how she came to be what she is. Or maybe eldritch hungering void beasts are all female. If that’s what she is. I’m not confirming either way. Cthillia… well, she uses female pronouns. I have a full body model sketch of her somewhere, and I’ll just say she’s not a candidate for a vote incentive. Not a sexy one. Hmm. Although, maybe that would be an amusing change of pace every once in a while. Lorlara is the most normal female of his entourage, and “normal” is not an adjective I usually associate with her.
I realize that a “hydro-magneto” power generator could very well just describe entirely mundane generators powered by gravity or steam motivated water, but what I was picturing when I started writing Deus’s explanation before letting it veer into facetiousness, was something akin to some sort of metallic hydrogen convection dynamo. Metallic hydrogen is one of those theoretical things that seems to have been more or less confirmed, though it’s hard to keep a sample of it in a jar, since it requires something like 4 million atmospheres of pressure, or 400 Giga Pascals, at which point it would become (or at least exhibit the properties of) a conductive liquid metal. Why using something like that would be better than regular hydropower is not immediately clear, but it’s weird and exotic, and a power source based on it is (at this point) entirely made up, so no one can tell me it wouldn’t work.
Sexy bodymod news lady Gail has a special
one-on-one interview with Tournament Quarter finalist Saraviah
Nightwing! And if you subscribe to Gail’s Space Patreon, (which, due to the
vagaries of Earth and Gal-Net’s DNS servers, happens to be
the same as the Grrl Power Patreon, go figure) you can see that
same interview in the nude! Well, eventually. The nude part of the
interview, as well as the version that includes shading will be
coming soon. Of course, you can view the interview in the
nude now if you take your own clothes off. You know. Technically.
Just put a towel on your chair first.
Double res version will be posted over at Patreon. Feel free to contribute as much as you like.
Pluralistic: Demand destruction vs fuel-superseding infrastructure (04 May 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

No one is better at keeping hope alive than Rebecca Solnit, the historian and essayist whose Hope in the Dark got me through the first Trump administration and whose A Paradise Built In Hell inspired my novel Walkaway:
https://www.penguinrandomhouse.com/books/301070/a-paradise-built-in-hell-by-rebecca-solnit/
In her latest, "Truth, Consequences, Climate, and Demand Destruction," Solnit is nothing short of inspirational – not because she downplays the horror and misery of Trump and his war of choice in Iran, but because she tells us what we stand to salvage from the wreckage:
https://www.meditationsinanemergency.com/truth-consequences-climate-and-demand-destruction/
Solnit starts by explaining some of the (many, many) things that Trump doesn't understand. Principally, Trump doesn't understand the concept of "demand destruction," which is what happens when shortages prompt people to make durable, one-way changes in their behavior that permanently reduce the demand for fossil fuels.
High prices sometimes create demand destruction: for example, if a transient shortage in eggs pushes prices up, people might discover that they prefer tofu scrambles in the morning, so even when the price of eggs comes back down, they buy two dozen fewer eggs every month, forever.
Beyond high prices, shortages and rationing are far more likely to lead to demand destruction. In the 10 years following the 1970s oil crisis, US cars doubled in fuel efficiency, and the gas-guzzler didn't return until car manufacturers exploited the American "light truck" loophole to fill the streets with deadly SUVs:
But to really max out on demand destruction, you need both rationing and a cheap, easily installed substitute, and that's what the Strait of Epstein crisis, along with solar and batteries, offers the world today. Solar is incredibly cheap, and getting cheaper every day. Batteries are also incredibly cheap, and they're getting cheaper too. For decades, fossil fuel apologists have insisted that we'll never stop setting old dead shit on fire because "the sun doesn't always shine and the wind doesn't always blow," but thanks to battery deployment in China and California (and more places very soon), the sun shines all night long:
In starting this stupid, unforgivable war, Trump has vastly accelerated the process of demand destruction. Rather than buying American oil, the whole world has undertaken a simultaneous, rapid, irreversible shift to electrical substitutes for fossil fuel applications, from induction tops to balcony solar to ebikes and EVs:
https://thepolycrisis.org/01-demand-destruction-us-oil-is-not-winning-the-iran-war/
As Solnit writes, Trump's stupid war follows on the heels of another unforgivable and cruel blunder: Putin's quagmire in Ukraine, which catapulted Europe into the Gretacene, with a wholesale, continent-wide shift away from fossil fuels to renewables and the devices they power. Now, the rest of the world is following suit. In South Korea, President Lee Jae Myung is leading the charge to transition the country to renewables, framing fossil fuels as an existential geopolitical risk.
Trump's demand destruction accelerates Putin's demand destruction: China and India both increased their energy consumption in 2025 – but reduced their fossil fuel consumption over the same period. In 2025, coal accounted for less than a third of the world's energy for the first time in modern history. 2025 was the year that solar and wind overtook coal globally.
Meanwhile, Trump and his oil baron buddies keep trying to make fetch happen. On the campaign trail, Trump told the oil industry that if they slipped him a $1b bribe, he would give them anything they wanted, and he's kept his promise. Trump will let Big Oil drill anywhere they like, from sacred sites like New Mexico's Chaco Canyon to the Arctic. He'll even let them take all of Venezuela's oil. The problem is that banks can see the demand destruction writing on the wall, and they are conspicuously declining to loan the oil companies the money they'd need to get that oil.
Truly, Trump's a machine for creating stranded assets at scale. As Solnit writes, that's because Trump has no strategic foresight; strategy being "the ability to plan for things to arise that may counter your agenda, so you can continue to pursue your agenda." Trump's a bully, and he's accustomed to intimidating his adversaries into capitulating. That's why Trump keeps making moves without ever thinking about the countermove he might provoke. He can't metabolize the strategic maxim that "the enemy gets a vote."
This is the GOP's whole vibe these days: "how dare you do unto me as I have done unto you?" Solnit points to GOP outrage in response to Democratic gerrymandering in blue states, which Democrats undertook in direct, explicit response to shameless gerrymandering in Texas and other red states. Solnit says that the GOP has "confused having a lot of power with having all the power" and is perennially surprised when their attacks on Iran and Minneapolis evince a reaction from the people in Iran and Minneapolis.
This is the defective reasoning that caused Comrade Trump to hormuz the world into the full Gretacene. Whereas once the case for the energy transition was driven by activists who warned people about the future consequences of inaction, Trump has summoned up a new army of people who are worried about the present consequences of inaction: such as not being able to drive your car, use your gas stove, or fertilize your crops. Trump has summoned up another army of people, who are worried about the politics of oil, the fact that oil leads to wars and can be mobilized as a weapon when it is withheld from your country.
Activists couldn't deliver the energy transition on their own – but now there's a coalition that's driving rapid, irreversible change: activists concerned about the future of the planet, in coalition with economic actors concerned about the consequences of not being able to cook, heat your home, or keep the lights on; in coalition with national security hawks worried about the geopolitics of oil. That's Comrade Trump's three-part mobilization: human rights, finance, and national security, all insisting that the enemy gets a vote, and voting unanimously for a post-American world.
Last week marked the first Transitioning Away from Fossil Fuels conference, attended by representatives from 54 countries who sidestepped the US- and China-dominated UN to ratify the Fossil Fuel Nonproliferation Treaty Initiative, whose 18 signatories include Colombia, a major oil producer.
The world is moving on, and Trump continues to insist that he can roll back history to some imaginary era of a Great America. Every time this fails, he doubles down on his failures and sets the stage for more failure to come. Take Trump's decision to have the US blockade the Strait of Hormuz. Not only is this a powerful force for demand destruction – but, as Trita Parsi writes, it's also poison for Trump's own electoral fortunes in America:
https://responsiblestatecraft.org/trump-iran-blockade/
Trump won in 2024 by campaigning to improve Americans' cost of living. This is a powerful campaign strategy, and it's not limited to fascists, as Zohran Mamdani can attest. But for this to work, you actually have to reduce the cost of living once you take office, otherwise you will be hated and rejected and hampered in everything you do. The problem (for Trump – but not for Mamdani!) is that America's high cost of living is driven by corporate profiteering, and the only way to fix it is to make the rich poorer so as to make the poor richer:
https://pluralistic.net/2026/02/24/mamdani-thought/#public-excellence
If Trump had chosen to bullshit his way through the Iranian blockade of the strait, allowing the Iranians to collect a $2m toll per tanker (payable in Chinese renminbi!), well, oil would have gone up in price some, but the coming runaway inflation on food and fuel would have been substantially blunted. Instead, he decided to "snatch defeat from the jaws of victory" by adding a US blockade, which means that prices in the US are going to skyrocket, making his base furious and driving turnout for Democrats, along with support for more renewables, even among blood-red Republican rural Texas ranchers, who have had enough of "DEI for fossil fuels":
https://austinfreepress.org/renewables-are-now-the-costco-of-energy-production-bill-mckibben-says/
The renewables transition is now a self-licking ice-cream cone, a flywheel that only spins faster and faster. As Solnit writes, this is true notwithstanding the concerns by some climate advocates about the materials needed for the transition. Sure, there will be some extraction involved in mass electrification, and if that's done badly, it will involve stealing and destroying more land from poor and indigenous people. But we don't have to do it badly!
Meanwhile, not transitioning to renewables absolutely requires an endless cycle of incredibly destructive and genocidal extraction. Remember, fossil fuels are fuels, while renewables are infrastructure. Fuels need to be dug up and destroyed every year for so long as we insist on setting old dead shit on fire to survive. We dig up a lot of fossil fuels. The world consumes seventeen times more fossil fuels in a year than we will require to electrify the planet forever:
https://pluralistic.net/2024/08/06/with-great-power/#comes-great-responsibility
The infrastructure of renewables – panels, batteries, transmission lines – requires materials that are often scarce and whose processing involves extremely harmful and polluting processes. But those materials are all recyclable: we don't recycle them today because we haven't prioritized doing so, not because it it technologically beyond our reach. In 2024, America saw its first all-solar powered solar panel recycling factory, which reclaimed 99% of the materials in a panel that was 20% efficient, and then used those materials to make two panels that were each 40% efficient:
https://interestingengineering.com/energy/solarcycle-to-recycle-10-million-solar-panels-yearly
Trump shut that plant down, which means that other countries will get to recycle America's superannuated panels into modern, efficient ones and sell them back to America. America may have blocked any climate reparations for the poor world, but thanks to Comrade Trump, America's still going to end up paying them, in the form of windfall profits for countries whose cleantech economy is racing ahead of America's.
Unlike a fossil fuel economy, a cleantech sector does not require that your country have access to some difficult to find, unevenly distributed reservoir of old dead shit or even rare minerals. Not only is lithium far more common than once believed, it's also being phased out for use in batteries and replaced by sodium, the world's sixth-most abundant element:
https://cen.acs.org/energy/energy-storage-/Sodium-ion-batteries-Should-believe/103/web/2025/11
Lithium is set to join cobalt, a notorious conflict mineral, in the cleantech revolution's rear-view mirror as a transitional material used in early, primitive batteries and no longer required.
A post-carbon future is a post-petrostate future is a post-American future. It will run on solar and wind and batteries, which can be brought online cheaply and quickly, every time demand-destruction surges, using materials that are widely distributed around the world. It won't be a nuclear future, and not just because nuclear materials are (like oil) concentrated according to accidents of geography, nor merely because fissiles are geopolitically catastrophic (like oil). Nuclear plants take at least a decade to bring online, which means that they will always arrive ten years after some future Comrade Trump-type kicks off another orgy of demand destruction, and by the time we turn them on, the world will have already bought, improved and recycled two generations of batteries and panels.
(Image: Stefan Müller (climate stuff), CC BY 2.0)

The Supreme Court is Corrupt. This is What We Can Do About It. https://www.youtube.com/watch?v=SRzS61buXkQ
NHS Goes To War Against Open Source https://shkspr.mobi/blog/2026/05/nhs-goes-to-war-against-open-source/
An open letter asking NHS England to keep its code open https://keepthingsopen.com/
Top 20 Fiction to Inspire Climate Action https://thebookslist.com/20-fiction-books-to-inspire-climate-action/
#25yrsago Beck dumps Winona and becomes a Scientologist https://web.archive.org/web/20010502151355/http://www.suntimes.com/output/zwecker/zp30.html
#25yrsago Fuck San Francisco https://craphound.com/fucksf.html
#25yrsago Desktop Linux rant https://web.archive.org/web/20021204051712/http://www.linuxplanet.com/linuxplanet/opinions/3297/1/
#25yrsago History of ASCAP and BMI https://www.woodpecker.com/writing/essays/royalty-politics.html
#25yrsago AUSA: If we let you decrypt DVDs, airplanes will start falling out of the sky https://web.archive.org/web/20010504221956/https://www.wired.com/news/digiwood/0,1412,43485,00.html
#25yrsago Microsoft shits on open source https://www.nytimes.com/2001/05/03/business/technology-microsoft-is-set-to-be-top-foe-of-free-code.html
#20yrsago Dan Gillmor explains “citizen journalism” https://web.archive.org/web/20060512043722/https://sf.backfence.com/bayarea/showPost.cfm?myComm=BA&bid=2271
#20yrsago UN plans a treaty to kill podcasts https://web.archive.org/web/20060512141428/https://www.eff.org/deeplinks/archives/004619.php
#20yrsago Sen Stevens tries to sneak the Broadcast Flag into law https://web.archive.org/web/20060505054724/http://ipaction.org/blog/2006/05/breaking-news-broadcast-flag-is-back.html
#20yrago How the US Navy queered San Francisco https://web.archive.org/web/20060504024636/http://ask.yahoo.com/20060502.html
#20yrago Help wanted: new DRM czar for Sony-BMG https://web.archive.org/web/20060512063724/http://www.paidcontent.org/sonybmg-director-new-technology-content-protection-nyc
#20yrsago Rich Americans as sick as poor Brits https://web.archive.org/web/20060516225807/http://www.newscientist.com/article.ns?id=dn9098&feedId=online-news_rss20
#15yrsago Sculpture embodies lossy copying using much-copied house-key https://web.archive.org/web/20110316215804/http://www.danielbejar.com/Visual_Topography_of_a_Generation_Gap.html
#15yrsago Piracy and poor countries: Big Content wants to have its cake and eat it too https://www.theguardian.com/technology/2011/may/03/why-poor-countries-lead-world-piracy
#15yrsago Brust’s Tiassa: versatile fantasy in three modes https://memex.craphound.com/2011/05/02/brusts-tiassa-versatile-fantasy-in-three-modes/
#15yrsago Why New Zealand was dumb to let the USA write its copyright laws https://web.archive.org/web/20110601173727/http://www.geekzone.co.nz/juha/7615
#15yrsago Canadian neocon Tories take a slim majority in election, pro-Internet New Democrats form the opposition https://web.archive.org/web/20110503041720/https://www.theglobeandmail.com/news/politics/new-political-era-begins-as-tories-win-majority-ndp-grabs-opposition/article2006635/
#15yrsago Will technology make us freer, and if so, how? https://locusmag.com/feature/cory-doctorow-techno-optimism/
#15yrsago Wikileaks: America will foot the bill for record
company enforcement in NZ if NZ will let America write its laws
https://web.archive.org/web/20110502135002/http://www.michaelgeist.ca/content/view/5769/125/
#15yrsago Horology considered hazardous: the “German Time Bomb” clock with its deadly mainspring https://web.archive.org/web/20110516102538/https://www.anniversaryclocks.org/aci/haller-gtb.pdf
#5yrsago Political economy vs inflation https://pluralistic.net/2021/05/01/mayday/#inflationary-political-economy
#1yrago Apple faces criminal sanctions for defying App Store antitrust order https://pluralistic.net/2025/05/01/its-not-the-crime/#its-the-coverup
#1yrago AI and the fatfinger economy https://pluralistic.net/2025/05/02/kpis-off/#principal-agentic-ai-problem

Barcelona: Internet no tiene que ser un vertedero (Global
Digital Rights Forum), May 13
https://encuentroderechosdigitales.com/en/speakers/
Virtual: How to Disenshittify the Internet with Wendy Liu (EFF),
May 14
https://www.eff.org/event/effecting-change-enshittification
Berlin: Re:publica, May 18-20
https://re-publica.com/de/news/rp26-sprecher-cory-doctorow
Berlin: Enshittification at Otherland Books, May 19
https://www.otherland-berlin.de/de/event-details/cory-doctorow.html
Hay-on-Wye: HowTheLightGetsIn, May 22-25
https://howthelightgetsin.org/festivals/hay/big-ideas-2
SXSW London, Jun 2
https://www.sxswlondon.com/session/how-big-tech-broke-the-internet-b3c4a901
NYC: The Reverse Centaur's Guide to Life After AI with Jonathan
Coulton (The Strand), Jun 24
https://www.strandbooks.com/cory-doctorow-the-reverse-centaur-s-guide-to-life-after-ai.html
Edinburgh International Book Festival with Jimmy Wales, Aug
17
https://www.edbookfest.co.uk/events/the-front-list-cory-doctorow-and-jimmy-wales
When Do Platforms Stop Innovating and Start Extracting?
(InnovEU)
https://www.youtube.com/watch?v=cccDR0YaMt8
Pete "Mayor" Buttigieg (No Gods No Mayors)
https://www.patreon.com/posts/pete-mayor-with-155614612
The internet is getting worse (CBC The National)
https://youtu.be/dCVUCdg3Uqc?si=FMcA0EI_Mi13Lw-P
Do you feel screwed over by big tech? (Ontario Today)
https://www.cbc.ca/listen/live-radio/1-45-ontario-today/clip/16203024-do-feel-screwed-big-tech
"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
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2026
"The Post-American Internet," a geopolitical sequel of sorts to Enshittification, Farrar, Straus and Giroux, 2027
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Third draft completed. Submitted to editor.
"The Post-American Internet," a short book about internet policy in the age of Trumpism. PLANNING.
A Little Brother short story about DIY insulin PLANNING

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
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
Hacking Polymarket [Schneier on Security]
Polymarket is a platform where people can bet on real-world events, political and otherwise. Leaving the ethical considerations of this aside (for one, it facilitates assassination), one of the issues with making this work is the verification of these real-world events. Polymarket gamblers have threatened a journalist because his story was being used to verify an event. And now, gamblers are taking hair dryers to weather sensors to rig weather bets.
There’s also insider trading: a lot of it.
Getting Digital Fairness Right: EFF's Recommendations for the EU's Digital Fairness Act [Deeplinks]
The next few years will be decisive for EU digital policymaking. With major laws like the Digital Services Act, the Digital Markets Act, and the AI Act now in place, the EU is entering an enforcement era that will show whether these rules are rights-respecting or drift toward overreach and corporate control. With the proposed EU’s Digital Fairness Act (DFA), the Commission is now turning to increasingly visible risks for users, such as dark patterns and exploitative personalization. Its “Digital Fairness Fitness Check” makes clear that existing consumer rules need updating to reflect how digital markets operate today.
But not all proposed solutions point in the right direction. Regulators are already flirting with measures that rely on expanded surveillance, such as age verification mandates—surface-level fixes that risk undermining fundamental rights while offering little more than a false sense of protection.
For EFF, digital fairness means addressing the root causes of harm, not requiring platforms to exert more control over their users. It means safeguarding privacy, freedom of expression, and the rights of users and developers.
If the DFA is to make a real difference, it must tackle structural imbalances. Lawmakers should focus on two interlocking principles. First, prioritize privacy. Reforms should address harms driven by surveillance-based business models, alongside deceptive design practices that impair informed choices. Second, strengthen user sovereignty, which is also a necessary precondition for European digital sovereignty more broadly. Strengthening user sovereignty means taking measures that address user lock-in, coercive contract terms, and manipulative defaults that limit users’ ability to freely choose how they use digital products and services.
Together, these principles would support the EU’s objectives of consistent consumer protection, fair markets, and a more coherent legal framework. If implemented properly, the EU could address power imbalances and build trust in Europe’s digital economy.
Dark patterns are practices that impair users’ ability to make informed and autonomous decisions. Many companies deploy these tactics through interface design to steer choices and influence behavior. Their impact goes beyond poor consumer decisions. Dark patterns push users to share personal data they would not otherwise disclose and undermine autonomy by making alternatives harder to access.
The DFA should address this by clearly prohibiting misleading interfaces that distort user choice in commercial contexts. While the Digital Services Act introduced a definition, it only partially bans such practices and leaves gaps across existing consumer law rules. The DFA should close these gaps by, at the very least, introducing explicit prohibitions and clearer enforcement rules, without resorting to design mandates.
At the core of digital unfairness lies the pervasive collection and use of personal data. Surveillance and profiling drive many of the harms regulators are trying to address, from dark patterns to exploitative personalization. The DFA should tackle these incentives directly by reducing reliance on surveillance-based business models. These practices are fundamentally incompatible with privacy and fairness, and they distort digital markets by rewarding data exploitation rather than quality of service. At a minimum, the DFA should address unfair profiling and surveillance advertising by strengthening privacy rights and banning pay-for-privacy schemes. Users should not have to trade their data or pay extra to avoid being tracked. Accordingly, the DFA should support the recognition of automated privacy signals by web browsers and mobile operating systems, which give users a better way to reject tracking and exercise their rights. Practices that override such signals through banners or interface design should be considered unfair.
Addressing surveillance and profiling also protects children, since many online harms are tied to the collection and exploitation of their data. Systems that serve ads or curate content often rely on intrusive profiling practices, raising concerns about privacy and fairness, particularly when applied to minors. Rather than turning to invasive age verification, the focus should be on limiting data use by default.
There is a major gap in how EU law addresses user autonomy in digital markets: many digital products and services still restrict what people can do with what they pay for through opaque or one-sided licensing terms, technical protection measures, and remote controls. These mechanisms increasingly limit lawful use, modification, or access after purchase, allowing providers to revoke access, disable functionalities, or degrade performance over time. In practice, this turns ownership into a conditional rental.
Consumers must be able to use and resell digital goods without hidden limitations and with clear licensing terms. Too often, technical and contractual lock-ins, including remote lockouts and unilateral restrictions on functionality, erode that control. Recent legal reforms show that progress is possible. Rules such as those under the Digital Markets Act have begun to curb technical and contractual barriers and promote user choice. However, many restrictions persist.
The DFA must address these practices by targeting unfair post-sale restrictions and strengthening users’ ability to control and switch services. This means setting clear limits on unfair terms and misleading practices, alongside robust transparency on how digital services function over time. It should also strengthen interoperability and support user control, allowing people to access third-party applications and to let trusted applications act on their behalf, reducing lock-in and expanding meaningful choice in how users interact with digital services.
Trained equanimity and a bias toward action [Seth's Blog]
Pay attention to what’s in front of you.
Don’t let fear contaminate your understanding of the situation.
Act with commitment.
Notice the gap between event and reaction.
Embrace the resources that are available to you.
Optimism is a belief about possible outcomes, but equanimity adds a bias toward action, regardless of what happens.
There’s enough noise, don’t create more. Simply take right action without comment or second-guessing. We can avoid a dark side driven by fear and grievance. And we don’t need a light saber.
While it’s nice to share the annual greeting, it’s unnecessary. The fourth is always with you if you choose.
Russell Coker: Tower Servers and Resizable BAR [Planet Debian]
A feature on modern PCIe implementations is “Resizable BAR” AKA “REBAR”. This basically means that instead of allocating 256MB of address space for a PCIe device to have it’s memory mapped the device can ask for more, the limit can be 4G with some hardware or the combination of motherboard and expansion card can support 64bit addressing to allow the entire memory space of a GPU to be mapped in one region. Directly mapping all the memory will be faster no matter how things work, but a combination of algorithms optimised for a flat memory layout and overheads from remapping can cause 90% of performance to be lost without REBAR support. Some GPUs (or maybe the software driving them) will even refuse to work without it.
I believe that almost all hardware supporting DDR4 will support REBAR at a hardware level, but in many cases the BIOS doesn’t support it. There are people who have reflashed a system BIOS to add REBAR support and there are options to use a modified UEFI boot loader to replace the code that is used for mapping the GPU memory.
The systems I like to use are server grade tower systems with registered ECC RAM, after a few years they become quite cheap and still give decent performance while supporting large amounts of RAM. But many such systems that could support REBAR don’t, presumably because the vendor doesn’t have a great interest in supporting new uses of old hardware.
The HP Z640 and Z840 systems I’m running date from 2014 and give good performance with replacement CPUs that are cheap on ebay, but they don’t support REBAR without a flashed BIOS. The next release of those HP servers are the HP Z6 and Z8 Gen 4 systems from 2017 that have BIOS support for enabling REBAR.
The Lenovo Thinkstation Px20 (P520, P920, etc) don’t support REBAR which is especially disappointing as they were on sale from 2017 to 2022 and have decently fast CPUs. The replacement for the Px20 systems are the ones that are still on sale now and they seem likely to have REBAR support – but won’t be affordable on ebay.
The Dell PowerEdge T440 and R740 systems (and presumably all their servers from 2017) don’t support REBAR. There are no google hits for T550 and R750 systems from 2021, so presumably no complaints means that Dell servers from that era support it. But the T350 servers are junk and only take slow CPUs, and the T550 systems are brutally expensive. The Precision 5520 systems don’t support it and newer Precision workstations will get expensive.
It seems that HP is best for this.
The Z2 G4 only supports 64G of RAM so isn’t worth considering.
The Z4 G4 is low end and comes in two variants. The one with i5/i7/i9 CPUs doesn’t support ECC RAM so isn’t suitable for me, and that probably means most Z4 G4 systems on the market. The upside is that apparently 2*6pin PCIe power cables is standard so any size GPU should work and there are 8 DIMM slots supporting up to 512G of RAM. There are 3 options for PSU, 490w for 0 GPUs, 750W for 2 (small) GPUs, and 1000W for up to 4 GPUs.
The Z6 G4 has an option for a second CPU that almost no-one selects, that reduces the space for RAM so there’s only 6 DIMM slots. But as there is no option for a Z6 without ECC RAM every one on offer will be good.
The Z8 G4 is a nice dual socket system that I would not use for a serious GPU after my experience of my Z840 having a motherboard problem from a big GPU.
The Z4 G4 is going for about $500 on ebay with the 750W PSU, that is more than I want to pay but not a lot more. In 6 months they could be going for $350 or so. There are hardly any Z6 G4 systems on offer and they are all well over $1000 so I’m not considering them.
I need to poll the second hand sites for Z4 G4 systems and find one going cheap. One of those could be a good ML test machine for a while and then become a workstation once the faster CPUs (which are currently around $900) become cheap.
LibEuFin Connector for Dolibarr is out [Planet GNU]
by Bohdan Potuzhnyi
New Comic: Hurst Donut
Russell Coker: Copy Fail on Debian and SE Linux [Planet Debian]
I have just learned of the Copy Fail kernel vulnerability [1] thanks to alexanderkjall@mastodon.social (who I have just followed on Mastodon and I recommend that you follow too). The question for me (after installing the patched kernel the systems of mine that are most exposed) is whether SE Linux would have stopped that.
For the SE Linux policy analysis the alg_socket class is the one that is related to the exploit. So the following policy analysis command (run as non-root with policy copied to /tmp from a running system) shows what domains are allowed access on my current Debian development system:
$ sesearch -A -c alg_socket /tmp/policy.35
allow NetworkManager_t NetworkManager_t:alg_socket { accept bind create read setopt write };
allow bluetooth_t bluetooth_t:alg_socket { accept append bind connect create getattr getopt ioctl listen read setattr setopt shutdown write };
allow daemon init_t:alg_socket { getattr getopt ioctl read setopt write };
allow devicekit_disk_t domain:alg_socket getattr;
allow lvm_t lvm_t:alg_socket { append bind connect create getattr getopt ioctl read setattr setopt shutdown write };
allow sosreport_t domain:alg_socket getattr;
allow sysadm_t domain:alg_socket getattr;
allow unconfined_domain_type domain:alg_socket { accept append bind connect create getattr getopt ioctl listen lock map name_bind read recvfrom relabelfrom relabelto sendto setattr setopt shutdown write };
The above is the same as on the Trixie release policy as these things aren’t changed often. Below is from Debian/Bookworm which is the same apart from Bookworm not allowing lvm_t:
$ sesearch -A -c alg_socket /tmp/policy.33
allow NetworkManager_t NetworkManager_t:alg_socket { accept bind create read setopt write };
allow bluetooth_t bluetooth_t:alg_socket { accept append bind connect create getattr getopt ioctl listen read setattr setopt shutdown write };
allow daemon init_t:alg_socket { getattr getopt ioctl read setopt write };
allow devicekit_disk_t domain:alg_socket getattr;
allow sosreport_t domain:alg_socket getattr;
allow sysadm_t domain:alg_socket getattr;
allow unconfined_domain_type domain:alg_socket { accept append bind connect create getattr getopt ioctl listen lock map name_bind read recvfrom relabelfrom relabelto sendto setattr setopt shutdown write };
I checked every Debian policy back to when the alg_socket class was first added and found that the older versions had fewer domains granted access. The most recently added was bluetooth_t and the one before that was NetworkManager_t.
Of those allow statements the following are the risks:
When writing policy lines like the following line aren’t generally considered a problem as unconfined domains are allowed full access to the system. However it can be an issue if you have a process in an unconfined domain without root access, which means a regular user login. Unfortunately this happens to be where this exploit and the default Debian SE Linux configuration intersect.
allow unconfined_domain_type domain:alg_socket { accept append bind connect create getattr getopt ioctl listen lock map name_bind read recvfrom relabelfrom relabelto sendto setattr setopt shutdown write };
The following shell code gets a list of unconfined domains which can be entered from user domains.
A="" for n in $(seinfo -x -a unconfined_domain_type|grep _t$) ; do A="$A|($n)" done A=$(echo $A|sed -e s/^.//) sesearch -T -s user_application_exec_domain -c process|egrep "$A;"
Below is the output on a Debian/Trixie (Stable) system. So a confined user in the user_t domain could run an X server and try and get it to run the exploit code (which seems difficult) or running a Wine or Mono program from the Window manager in a Wayland environment.
type_transition user_t xserver_exec_t:process xserver_t; type_transition user_wm_t mono_exec_t:process mono_t; type_transition user_wm_t wine_exec_t:process wine_t; type_transition user_wm_t xserver_exec_t:process xserver_t;
The issue of unconfined domains in SE Linux policy needs much more work. I’ll write some blog posts about it later and the next release of Debian will be significantly better in this regard.
allow NetworkManager_t NetworkManager_t:alg_socket { accept bind create read setopt write };
allow bluetooth_t bluetooth_t:alg_socket { accept append bind connect create getattr getopt ioctl listen read setattr setopt shutdown write };
Network Manager is something that can potentially be exploited by a desktop user as it has a large attack surface for the desktop interface. But as the vast majority of desktop user accounts are unconfined that’s not an issue. This might be an issue for some restricted desktop PCs, maybe kiosk systems and those PCs that were being installed in prisons.
The bluetooth_t domain is used by the bluetooth daemon that runs as root. While we generally are less concerned about a root process being exploited the daemon will handle some data from hostile sources and it could be used as an escalation attack by someone with a hostile Bluetooth device.
These can’t be exploited without another bug.
allow devicekit_disk_t domain:alg_socket getattr; allow sosreport_t domain:alg_socket getattr; allow sysadm_t domain:alg_socket getattr;
The above getattr access isn’t an issue as it just allows seeing process information, and it’s also by privileged domains.
allow daemon init_t:alg_socket { getattr getopt ioctl read setopt write };
The daemon access to sockets inherited from init_t probably isn’t a great idea, it’s from the following section in init.te which is to allow socket activation for daemons, the comment is concerning in this context. Also socket_class_set is overly broad as without even inspecting the systemd source code I’m pretty sure that far fewer than 1/3 of the 55 classes allowed by that rule are actually supported in systemd.
ifdef(`init_systemd',`
# Until systemd is fixed
allow daemon init_t:socket_class_set { getattr getopt ioctl read setopt write };
But that’s not really a problem as systemd has to just not create a socket of that type, if a hostile party can make systemd create such sockets then you have probably already lost.
Overall SE Linux systems running confined users (kiosks and other confined GUI environments) will be protected barring a bug in Network Manager or the Bluetooth daemon as long as there is no Xserver installed (or the X server won’t run scripts on startup), no Wine system installed, and no Mono.
SE Linux servers and VMs will be protected against daemon issues as long as the daemon isn’t unconfined.
To convert the default login to user_t run the following commands:
semanage login -m -s user_u -r s0 __default__ restorecon -R -v -F /home
But it is still possible to access an unconfined domain from user_t (a topic I will address in detail in a future blog post).
To remove unconfined entirely (not a task for novices or something to be done on in production without testing and planning) run the following commands:
semanage login -m -s root -r s0 root # logout and login again semodule -X 100 -r unconfined
Then a Debian/Trixie system running SE Linux will be safe against this attack even when running a vulnerable kernel.
If you still want to use root as unconfined_t but still have untrusted shell users then run the following command to remove the easiest ways for users to run a program in an unconfined domain:
semodule -X 100 -r mono wine
Below is what happens on stdout/stderr when SE Linux blocks the exploit (tested with vulnerable Debian kernel 6.12.74+deb13+1-amd64):
test@testing1:~$ python3 ./copy_fail_exp.py
Traceback (most recent call last):
File "/home/test/./copy_fail_exp.py", line 9, in <module>
while i<len(e):c(f,i,e[i:i+4]);i+=4
~^^^^^^^^^^^^^^
File "/home/test/./copy_fail_exp.py", line 5, in c
a=s.socket(38,5,0);a.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));h=279;v=a.setsockopt;v(h,1,d('0800010000000010'+'0'*64));v(h,5,None,4);u,_=a.accept();o=t+4;i=d('00');u.sendmsg([b"A"*4+c],[(h,3,i*4),(h,2,b'\x10'+i*19),(h,4,b'\x08'+i*3),],32768);r,w=g.pipe();n=g.splice;n(f,w,o,offset_src=0);n(r,u.fileno(),o)
File "/usr/lib/python3.13/socket.py", line 233, in __init__
_socket.socket.__init__(self, family, type, proto, fileno)
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^PermissionError: [Errno 13] Permission denied
test@testing1:~$ su
Password:
When the attack is blocked by SE Linux there will be no messages in the kernel message log but the SE Linux audit log (typically stored in /var/log/audit/audit.log) will have lines like the following:
type=AVC msg=audit(1777803068.070:76): avc: denied { create } for pid=811 comm="python3" scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=alg_socket permissive=0
type=SYSCALL msg=audit(1777803068.070:76): arch=c000003e syscall=41 success=no exit=-13 a0=26 a1=80005 a2=0 a3=0 items=0 ppid=791 pid=811 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="python3" exe="/usr/bin/python3.13" subj=user_u:user_r:user_t:s0 key=(null)ARCH=x86_64 SYSCALL=socket AUID="test" UID="test" GID="test" EUID="test" SUID="test" FSUID="test" EGID="test" SGID="test" FSGID="test"
type=PROCTITLE msg=audit(1777803068.070:76): proctitle=707974686F6E33002E2F636F70795F6661696C5F6578702E7079
For that the :76 is the audit log entry number, the command “ausearch -i -a 76” will interpret that message with the following output:
type=PROCTITLE msg=audit(05/03/26 10:11:08.070:76) : proctitle=python3 ./copy_fail_exp.py
type=SYSCALL msg=audit(05/03/26 10:11:08.070:76) : arch=x86_64 syscall=socket success=no exit=EACCES(Permission denied) a0=alg a1=SOCK_SEQPACKET a2=ip a3=0x0 items=0 ppid=791 pid=811 auid=test uid=test gid=test euid=test suid=test fsuid=test egid=test sgid=test fsgid=test tty=pts0 ses=1 comm=python3 exe=/usr/bin/python3.13 subj=user_u:user_r:user_t:s0 key=(null)
type=AVC msg=audit(05/03/26 10:11:08.070:76) : avc: denied { create } for pid=811 comm=python3 scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=alg_socket permissive=0
Below is what happens when it works (again tested with Debian kernel 6.12.74+deb13+1-amd64):
test@testing1:~$ python3 ./copy_fail_exp.py #
Here is the kernel log when the attack works:
[ 30.441830] alg: No test for authencesn(hmac(sha256),cbc(aes)) (authencesn(hmac(sha256-avx2),cbc-aes-aesni)) [ 30.447466] process 'su' launched '/bin/sh' with NULL argv: empty string added
If the kernel isn’t vulnerable and SE Linux permits the attack (EG run from an unconfined domain) the following is seen on stdout/stderr:
$ python3 ./copy_fail_exp.py Password: su: Authentication failure
In that situation the kernel will log something like the following:
[ 36.647023] alg: No test for authencesn(hmac(sha256),cbc(aes)) (authencesn(hmac-sha256-lib,cbc-aes-aesni))
This was tested on the Debian/Unstable kernel 6.19.13+deb14-amd64.
Run the following commands and then force all users to logout to make a Debian SE Linux system offering shell access reasonably safe against this bug. But also upgrade your kernel as soon as convenient because having multiple layers of protection is always good.
semanage login -m -s user_u -r s0 __default__ restorecon -R -v -F /home semodule -X 100 -r mono wine
The GrapheneOS people are doing really good work on securing phones, I am most interested in Mobian (Debian on phones) but for people who have made different choices GrapheneOS is a good option. Here is the GrapheneOS statement on Copy Fail (they are not vulnerable to it) [3]. For people interested in running a secure Android build GrapheneOS is the best option. Their supported devices list shows Pixel 6 to Pixel 10 supported and Pixel 8 to Pixel 10a recommended [4]. In Australia Kogan sells refurbished Pixel 6 phones starting at $251 including delivery and refurbished Pixel 8 phones starting at $499 with “First” membership, they seem to have the cheapest Pixel phones.
I want to make Debian more like Android in terms of security, but that’s a topic for other blog posts.
Here is the Debian page listing kernels that have been fixed against this exploit [5].
Kernel prepatch 7.1-rc2 [LWN.net]
The second 7.1
kernel prepatch is out for testing. "It's not small, and
while it's a bit early to say for sure, I do suspect we're seeing
the same continued pattern of more patches than usual - probably
due to AI tooling - that we saw in 7.0.
"
Girl Genius for Monday, May 04, 2026 [Girl Genius]
The Girl Genius comic for Monday, May 04, 2026 has been posted.
Pay to play lawmakers, US and UK [Richard Stallman's Political Notes]
The UK's rules about political campaign donations spread a suspicion of corruption, which is confirmed every time a party changes rules and laws to favor the interests of rich people who donated to it.
The same is true in the US, even though the precise rules are different.
The article advocates public funding of political campaigns. I support that.
Bully insists on decisions in Iran negotiations [Richard Stallman's Political Notes]
The bully insists on personally making all decisions about negotiations with Iran. The trouble is, he is incapable of deciding anything.
Iran properly doesn't trust anything the bully says about war or peace.
Ingrate sending Afghan refugees to Congo [Richard Stallman's Political Notes]
The ingrate is planning to send a thousand Afghan refugees (who helped the US army in Afghanistan) to the Congo instead of allowing them into the US.
The Congo has had a civil war for decades. What a lousy reward that is for their help.
UK will ban 16 and under from buying tobacco [Richard Stallman's Political Notes]
The UK will ban everyone who is now under 16 years of age from ever buying tobacco.
I am against the use of tobacco, because tobacco is deadly. But I think it is wrong to prohibit drugs, even if they are dangerous. Regulating and discouraging drugs of abuse makes sense, but prohibiting them outright goes too far.
Chinese who engaged in pro-democracy protest imprisoned [Richard Stallman's Political Notes]
China has imprisoned a Chinese who who engaged in a pro-democracy protest while studying in Australia.
Never forget that China seeks to spread repression over the whole world.
CIA agent rebuked US for overthrowing leftist governments [Richard Stallman's Political Notes]
1950s CIA agent Peter Sichel later rebuked the US for overthrowing various more-or-less leftist governments, including Mossadegh in Iran.
Milei's reforms to Argentina's glacier pollution law [Richard Stallman's Political Notes]
* [President] Milei's reforms to [Argentina's glacier pollution] law will open up high-altitude areas to mining and risk water reserves already strained by the climate crisis.*
Canadian mother held by ICE speaks out [Richard Stallman's Political Notes]
*Canadian mother held by ICE with daughter, 7, speaks out on families "suffering greatly" in [deportation prison].*
She is married to a US citizen and had papers to reside in the US, when she was grabbed and subjected to cruel pressure to agree to deportation. For magats, forcibly breaking up families brings a sense of achievement.
Russ Allbery: Review: Full Speed to a Crash Landing [Planet Debian]
Review: Full Speed to a Crash Landing, by Beth Revis
| Series: | Chaotic Orbits #1 |
| Publisher: | DAW |
| Copyright: | August 2024 |
| ISBN: | 0-7564-1947-6 |
| Format: | Kindle |
| Pages: | 153 |
Full Speed to a Crash Landing is a science fiction novella and the first of a series. Beth Revis made the New York Times bestseller list for an earlier series of young adult science fiction novels, but somehow I had not heard of her before this series.
Ada Lamarr is a salvager. She picks up material from crashed or dead ships for resale. As the story opens, she has a large hole in the side of her ship, she's running out of oxygen, and the other ship nearby is refusing to answer her distress call. By the time they finally respond, there is barely enough time to get aboard before she is entirely out of air.
Ada's first-person narration drops hints that she may not be entirely what she seems. But then, neither is the Halifax, so it's only fair.
The captain of the Halifax treats Ada with a great deal of suspicion and wants her out of the way of their ongoing salvage operation. However, the captain does not appear to be entirely in charge. Ada is immediately struck by the mysterious Rian White, who seems to have some authority over their mission and is more thoughtful and calculating than the rest of the crew. He's also handsome, which doesn't hurt.
I was tempted to keep writing about the plot, but given the short length of this book, I should stop there and let you enjoy the twists and turns for yourself. This is a fun science fiction action romp: lots of banter, lots of tense moments, and a cagey first-person protagonist with an irrepressible sense of humor and a knack for brazening her way through conversations. It's not long on world-building (there isn't enough room), but Revis works in enough details to be intriguing and to set up some interesting motivations.
This is the sort of book that lives and dies by how much you like the protagonist, something that you will easily figure out by the end of an ebook sample if you're the sort of reader who uses those. Ada is irreverent, talkative, and very adroit at diverting attention (entertainingly) onto anything other than the critical piece of information other people are missing. If you want to, I suspect you could easily figure out most of what Ada is up to before the book reveals it explicitly. It's not that complicated, and the book isn't really trying to hide, although it doesn't give you all the necessary information in advance. Personally, I was happy to sit back and enjoy the ride.
There is no romance in this book beyond frequent comments from Ada that she would have liked there to be a romance in this book under different circumstances, but I will be surprised if that romance doesn't show up later in the series. Ada and Rian are clearly being set up as a pair. I didn't like Rian as much, mostly because he's less memorable as a character, but he comes into his own in the appendices after the plot proper.
I thought those concluding appendices were the best part of the novella and question the Kindle formatting decision to treat them like supplemental material. They purport to be a series of government memos, fill in a lot more of the backstory and world building, and have the best footnotes. Don't skip them!
This isn't the sort of book that I am inspired to immediately push into everyone's hands, but it's a fast, well-paced story that delivered a few reading sessions of entertainment. I'm not sure the political philosophy in the background makes a lot of sense, but at least not a standard stereotype of current politics seen in so much science fiction. It's going to set up some interesting character conflict in later books. I'm certainly intrigued enough to keep reading.
Recommended when you're in the mood for some fast-paced fun that's short and undemanding.
Followed by How to Steal a Galaxy.
Rating: 7 out of 10
Waking Up, p15 [Ctrl+Alt+Del Comic]
The post Waking Up, p15 appeared first on Ctrl+Alt+Del Comic.
GNOME is good, actually [OSnews]
While I’m normally a KDE user, I do keep close tabs on various other desktop environments, and install and set them up every now and then to see how they’re fairing, what improvements they’ve made, and ultimately, if my preference for KDE is still warranted. This usually means setting up a nice OpenBSD installation for Xfce, Fedora for GNOME, and less often others for some of the more niche desktop environments. Since GNOME 50 was just released, guess who’s time in the round is up?
Since everybody’s already made up their mind about their preferred desktop eons ago, with upsides and downsides debated far past their expiration date, I’m not particularly interested in reviewing desktop environments or Linux distributions. However, after asking around on Fedi, it seemed there was quite a bit of interest in an article detailing how I set up GNOME, what changes I make to the defaults, which extensions I use, what tweaks I apply, and so on.
Of course, everything described in this article is highly personal, and I’m not arguing that this is the optimal way to tweak GNOME, that the extensions I use are the best ones, or that any visual modifications I make are better than whatever defaults GNOME uses. No, my goal with this article is twofold: one, to highlight that GNOME is a lot more configurable, extensible, and malleable than common wisdom on the internet would have you believe. It’s not KDE or one of those cobbled-together tiling Wayland desktops, but it’s definitely not as rigid as you might think. And two, that GNOME is good, actually.
The first thing I do is install a few crucial tools that make it easier to modify and tweak GNOME. I really dislike lists in articles, but I will begrudgingly use one here:
After installing all of these tools, the actual tweaking can commence.
I didn’t use to like GNOME’s Adwaita visual style, but over the years, it started growing on me to the point where I don’t actively dislike it anymore. With the arrival of libadwaita, it has also become effectively impossible to theme modern GNOME applications, so even if you do change to something else, many of your applications won’t follow along. If consistency is something you care about, you’ll stick to Adwaita, but that leaves one problem unresolved: applications that still use GTK3. These applications will follow a much older version of Adwaita, making them stand out like eyesores among all the modern GTK4 stuff.
Luckily, since GTK3 applications are still properly themable, this is easily fixed: just install the adw-gtk3 theme, either by hand, or through your distribution’s repositories. To enable it, first install the user themes extension through Extension Manager, and then enable the theme in GNOME Tweaks for “Legacy Applications”. Any potential GTK3 applications you still use will now integrate nicely with modern libadwaita applications.
The one part of GNOME I really do deeply dislike is its icon theme. I can’t quite explain why I dislike this icon set so much, but it runs deep, so one of the very first things I do is replace the default GNOME icon set with my personal favourite, Qogir. This is a popular icon set, so it’s usually available in your distribution’s repositories, but I always install it from its GitHub page. Changing GNOME’s icon set is as simple as selecting it in GNOME Tweaks. You can’t get much more personal taste than an icon set, and there are dozens of amazing sets to choose from in the Linux world. Changing them out and trying out new ones is stupidly easy, and it’s definitely worth looking at a few that might be more pleasing to you than GNOME’s (or KDE’s) default.
Lastly, I open Add Water and enable the amazing GNOME theme for LibreWolf. Add Water basically makes this as easy as flipping a switch, so there’s no need to copy any files into your LibreWolf profile or whatever. The application also provides a few more small tweaks to fiddle with, like enabling standard tab widths so tabs don’t grow and shrink as you close and open tabs, moving the bookmarks bar below the tab bar, and many more.

Since the release of GNOME 3 in 2011, extensions have been the most capable way to modify GNOME’s look, behaviour, and feature set. As far as I can tell, while the extension framework is an official part of the GNOME Shell, the extensions themselves are all third-party and not part of a vanilla GNOME installation. By now, there are over 2800 listed extensions, but that number includes abandoned extensions so it’s hard to determine the actual number of currently-maintained ones. Whatever the actual number is, there’s bound to be things in there you’re going to want to use.
Here are the extensions I have installed. Let’s just start at the top and work our way down. I guess I’m forced to do another list.
There are countless more extensions to choose from, and you’re definitely going to find things you never even thought could be useful.
There’s a few other things I modify. In GNOME Tweaks, I make it so that double-clicking a window’s titlebar minimises it while right-clicking it lowers it; two features I picked up during my years as a BeOS user that I absolutely refuse to give up. I configure the dock from Dash to Dock so that it always remains on top and never hides itself, no matter the circumstances. In Settings, I disable virtual desktops entirely (I don’t like virtual desktops), and I make sure tap-to-click is disabled (if I’m on a laptop).
After making all of these changes, I feel quite comfortable using GNOME, at least on my laptop. It’s a nice, coherent experience, and offers what is probably the most polished graphical user interface you can find on Linux, even if it isn’t the most full-featured. The third-party application ecosystem, through modern libadwaita applications, is also quite healthy, moreso than what you find on KDE. To get there, however, I need to make a lot of changes to fix, undo, or work around some of the more… Peculiar defaults in GNOME, primarily through extensions.
And I think this is a problem.
The GNOME extension ecosystem is lively and active, but it also highlights a potential shortcoming of GNOME. I don’t think I’ve ever seen anyone use GNOME without extensions, and it’s honestly not hard to see why. Things like desktop icons and a system tray are pretty basic features of any modern desktop, and it’s not surprising that people seek them out, regardless of any grand design vision the GNOME team may have. GNOME developers can and should do whatever they want and what they think is right, but perhaps some of the most popular extensions should become official parts of GNOME if they are as popular as they seem.
For now, GNOME extensions kind of feel like the little block holding up the entire stack in that xkcd comic. Is it really wise to leave this linchpin to third parties, especially considering extensions run code on your machine? Sure, they make GNOME a lot more configurable and extensible than prevailing sentiments would have you believe, but perhaps not in the most convenient and safest way. Also, several of them break every time GNOME does a new release. Bummer.
In the end, though, GNOME is a product of its developers, and they alone get to decide how they want it to behave, what it looks like, and which features it will and won’t have. With how popular GNOME is, you have to be a real dishonest person to argue that what they have built isn’t a damn fine desktop environment, even if it makes some design decisions some of us find baffling. It won’t replace KDE as my desktop of choice, but having two excellent desktops like these that far outshine whatever “AI” and ad-ridden crap the proprietary vendors have to offer is truly an embarrassment of riches for the open source desktop world.
I have a single page
site with all the WordPress news. Bookmark it. Here's the
OPML subscription list, import it into your feed reader, get
the news as you like it. WordPress is an amazing platform with a
blogging community that we just can't see. And once we're
listening, more will appear. It's a great idea exchange platform.
So -- are there any great WordPress news feeds we're missing?
Please share here.
How fast is a macOS VM, and how small could it be? [OSnews]
To assess how small a macOS VM could be, I ran the same VM of macOS 26.4.1 on progressively smaller CPU core and memory allocations, using my virtualiser Viable. The VM’s display window was set to a standard 1600 x 1000, and I ran Safari through its paces and performed some lightweight everyday tasks, including Storage analysis in Settings.
Starting with 4 virtual cores and 8 GB vRAM, where the VM ran perfectly briskly with around 5 GB of memory used, I stepped down to 3 cores and 6 GB, to discover that memory usage fell to 3.9 GB and everything worked well. With just 2 cores and 4 GB of memory only 3.1 GB of that was used, and the VM continued to handle those lightweight tasks normally.
↫ Howard Oakley
This is good news for people interested in the MacBook Neo who may also want to run a macOS virtual machine on it.
Everyone is working on something with Claude.
Heard on the internets ad nauseum. "I know how to do what you do much better than you do." You don't.
I was just marveling with Claude about how well all the pieces are fitting together: two databases, connected by an RSS 2.0 feed and a websocket pipe all had to agree how to communicate the same object. Worked the first time. Small pieces loosely joined.
Scoble asks on Twitter if there are successful companies that have an open source product. There are lots of them. There are markets where users and developers won't even consider your product or service if it isn't open source. It's a trust issue. I offered an example, WordPress, which probably wouldn't have launched well if it wasn't open source.
Comrade Trump [Cory Doctorow's craphound.com]

This week on my podcast, I read Comrade Trump, a recent column from my Pluralistic newsletter, which will be syndicated in The Nerve.
All of which means that my experience of the Trump years is decidedly weird. On the one hand, I exist in a near-perpetual state of anxious misery, as Trump and his chud army of Christian nationalists and degenerate gamblers pursue a program of gleeful genocide. But at the very same time, I’m living in a world in which Trump is (inadvertently) dismantling many of the worst aspects of the old order in favor of something decidedly better.Take Trump’s tariff policy. Back during Trump I, he decided that Americans couldn’t buy Chinese solar anymore, which had the double benefit of allowing him to pursue the twin goals of throwing red meat to Sinophobic Cold War 2.0 freaks and delivering a giant gift to the planet-wrecking oil companies that had helped him buy his way into office.
Lectronz and IOSS [RevK®'s ramblings]
We sell lots in the UK (services and goods), and handle UK VAT, obviously.
Some of you may be surprised that A&A sell all over the world as well - development circuit boards. I have mentioned it, I am sure.
For now, we have used Amazon and Tindie.
Both are a problem...
Two good aspects of Amazon, one is they will do fulfilment, so we send stock and they ship to customers. and secondly they handle selling to EU, etc, and the VAT and so on. We do not have to worry about it, and for these exports we are paid the VAT exclusive price.
Amazon have been arseholes, they unlisted the most popular product on a mere accusation, took months to sort with frozen stock, and finally returned after I threatened to sue. We lost all the reputation and reviews, and new listing of same item is selling 20% of the rate.
We now only list this one popular(ish) product on Amazon, as they do sell some, and sell to EU easily. But they did screw us over for no reason.
Tindie are useless at tax and VAT. We have to do the shipping. However, we have integrated their API such that staff can see a list of orders, click and get postage via Royal Mail (with all the customs declaration stuff). They put in a jiffy bag, stick on label, and postman collects with the rest of the days postage.
Tindie were selling pretty well, close to Amazon rates, and sometimes more. But we had to ship. The much more slick postage integration I recently did makes it a lot easier and my staff can take over many of the products we sell without any hassle.
Tindie then shut down with no warning for maintenance, lied about it for two weeks, finally said new owners, made site live but with the one important feature of "paying us" (or anyone else) missing. We shipped some more orders, but have now zeroed all stock until sorted. They claim to have sent balance, but we will not know for sure for a day or two.
So we have signed up with Lectronz. They are tiny compared to Tindie, but that seems to be changing (I wonder why!).
They work the same as Tindie, free to list, charge a fee for sales, and card processing charges too (stripe). They even have Tindie API integration to import products (they then need a little work, and Tindie may be blocking some of it).
But they have a lot of extra bits...
The shipping is saner, it is all linked to sets of countries, but is all weight based. You set the shipping for a weight range, and you can also set a tariff rate for US as a percentage! This is lacking in Tindie.
They don't have a shipping rate that is price + price per kg (I have asked) as that would be even better as that is how we pay Royal Mail for international shipping.
But this means sales to US show (and charge) a specific tariff fee - very clear, and we link in to doing PDDP shipping with Royal Mail.
We can, and have, told them we are VAT registered and selling to UK has 20% VAT. They shows this and add it at point of sale. Simple.
This is where it gets fun. For orders shipped to EU, under (I think) €150, they will automatically work out the EU VAT based on target country, and add to the price.
They deduct this from what they pay us, and settle with EU VAT authorities for us.
They then tell us an IOSS code to use with Royal Mail to record as a pre-paid VAT. The customer then has no hassle with paying VAT on import.
This is really hassle free for us and the customer.
Other countries still have VAT on import and so is any order to EU over €150, but they managed to make that all very clear on the checkout page.
Do buy some stuff, here. I will be adding more and more soon.
Emmanuel Kasper: Arm64 Linux Desktop: one year after, all systems up [Planet Debian]

So I am using Debian on a System76 Arm64 (aarch64) workstation since 9 months, and I can say: everything works. It should be noted that I use very few proprietary software, so I rely mostly on Debian packages for what I am doing. What I can say is basically all open source software which exists today, takes care to build on aarch64 or is available as a binary, either in the Debian archive, in a Flatpak or Snap, or in a Github Artefact. From 3D games, to Kubernetes tooling, practically everything open source is compiled for aarch64 Linux as well. Same thing for server software, every container image built is also proposing an aarch64 binary today.
I could also add a standard PCI Express Soundblaster sound card, and the kernel recognized it without issues.
The major downside I had was that Wayland is not working on my Nvidia GPU, whether with Nouveau or the proprietary drivers, thus I am using Gnome with X11. Also on the proprietary side, I missed the Discourse client, but I am not using that much, and those video meetings tool which popped up in the COVID time are perfectly usable in the browser.
The situation is for me much better than in the 2000s when I used a Mac Mini (powerpc) with Debian, where the need for a Flash player at that time really limited the amount of online content I could access.
What do I get using aarch64 you ask ? The main reason for me was the curiosity to use a non x86 arch, and to have a 80 core / 128 GB RAM machine to do a Lab in a Box with OpenShift running on OpenStack, with Ceph and a bit of local LLM inference thrown in. In the end I have enough labs at work, so that need disappeared, but I still enjoy having that amount of power in a rather quiet machine for a standard 80W consumption.
Birger Schacht: Status update, February - April 2026 [Planet Debian]
Due to health reasons I did not have the energy to write individual status updates for February & March, so I’ll just combine them with the April update:
In February I cleaned out my GitHub account and moved all remaining projects to Codeberg. I archived the repositories on GitHub and added links to the new repositories on Codeberg. GitHub is a platform that is more and more frustrating to use. I still have to use it for my dayjob, though. The number of pull requests and issues that are written either by bots or by users that use bots increased in the last two years. Combined with that, GitHub provides a very low barrier for entitled users who do not want to contribute to a productive environment. GitHub now feels like the Twitter/X of git forges. Codeberg on the other hand is a community project. I feel a lot more at home there and the platform itself feels a lot more responsive than GitHub.
I took part in the DHD 2026 Conference in Vienna, including a hands-on workshop of the dhinfra project.
I released 0.60.0, 0.61.0 and 0.62.0 of apis-core-rdf. We rewrote the configuration format for the importer. We previously used TOML files, but that does not give us inheritance. So we now use simply Python classes as configuration format.
I implemented a new backend for our apis-bibsonomy Django package. The package is meant to provide a datamodel for storing reference data that links to Bibsonomy or Zotero. Given that we don’t use Bibsonomy anymore we now dropped the Bibsonomy backend but added a Zotero backend that allows to cache the entries locally.
Jelmer Vernooij: Inquest, a test result repository in Rust [Planet Debian]
For a long time I’ve used Robert Collins’ testrepository (testr) to run tests in many of the projects I work on. It’s a small, focused tool built around a simple idea: decouple the running of tests from the recording and querying of their results.
The way it works is straightforward. A test runner emits a subunit stream — a compact binary protocol for test results — and testrepository stores those streams in a per-project .testrepository/ directory. Once results are in the repository, you can ask questions like “which tests failed in the last run?”, “re-run only the failures”, “what are the slowest tests?”, or “what changed between this run and the previous one?”.
The killer feature, for me, has always been the failing-test loop. When a big test suite breaks, you don’t want to re-run the whole thing after every fix — you want to iterate on just the failures, and only re-run the full suite once they’re all green. testrepository made that workflow ergonomic long before most language-specific test runners had anything comparable, and many of them still don’t have a good answer for it.
testrepository has served me well for over a decade, but it has been largely unmaintained for a while, and I had some ideas of improvements that I wanted to try out. So I wrote a Rust port, which has since grown a number of features of its own.
Inquest is a Rust port of testrepository that has since grown a number of features of its own. The binary is called inq.
The goals are deliberately modest:
Inquest reads and writes subunit v2 streams, so anything that can produce subunit (directly or via one of the many converters) can feed into it.
Inquest can usually figure out how to run your tests on its own. In a Rust, Python, Go or Node.js project:
$ cd my-project
$ inq
Or if the auto-detection doesn’t work, you can ask it to generate a config file and then run the tests:
$ inq auto
$ inq run
inq auto writes an inquest.toml describing how to invoke the test runner; inq run runs the tests, captures the subunit stream, and stores the results in a .inquest/ directory.
For a Rust project the generated config looks like:
test_command = "cargo subunit $IDOPTION"
test_id_option = "--test $IDFILE"
test_list_option = "--list"
After the first run, the usual queries work:
$ inq stats # repository-wide statistics
$ inq last # results of the most recent run
$ inq failing # only the failing tests
$ inq slowest # the slowest tests in the last run
$ inq run --failing # re-run only what failed last time
The last one is the workflow I use most often: run the full suite once, fix the obvious failures, then iterate on inq run --failing until the list is empty.
Some of the features that have grown in inquest beyond the original testrepository functionality:
Timeouts. --test-timeout, --max-duration, and --no-output-timeout will kill a test process that is hanging or has stopped producing output. --test-timeout auto derives a per-test timeout from the historical duration of that test, which is handy for catching tests that hang.
Once the test runner is killed, the test is marked as failed and the next test is started, so a broken test doesn’t hold up the whole suite.
Ordering --order can be used to run tests in a specific order, e.g. to run the slowest tests first, to run the tests that failed most recently first, or to run the widest variety of tests first to maximize the chance of finding a failure early on.
Live progress. inq running tails the in-progress subunit stream on disk and reports observed/expected test counts, percent complete, elapsed wall-clock time, and an ETA derived from each test’s historical duration. Useful when a CI run is taking longer than you’d like.
Flakiness ranking. inq flaky ranks tests by pass↔fail transitions in consecutive runs in which the test was recorded, so chronically broken tests rank low and genuinely flapping tests rank high.
Comparing runs. inq diff <A> <B> shows what changed between two test runs — newly failing, newly passing, and tests that flipped state — which makes it easy to see whether your last change actually fixed (or broke) anything.
Bisecting git history. inq bisect <TEST> drives git bisect to find the commit that broke a given test. It defaults the known-good and known-bad commits from the recorded run history (the most recent run where the test passed, and the most recent where it failed), so in the common case there is no need to remember either — just point it at the test name and let it work.
Richer run metadata. inq info shows the git commit, command line, duration, exit code, and concurrency for a run, with a flag for whether the working tree was dirty when the run started. Combined with inq diff this makes it much easier to triangulate when a regression was introduced.
Rerun a previous run verbatim. inq rerun <ID> re-runs exactly the tests of a previous run, in the same order, forwarding the same -- arguments that the original run used. inq rerun -1 repeats the latest.
Web based view. inq web serves a web-based view of the repository, with a dashboard of recent runs and detailed views of individual runs and tests.
Most of the time I drive inquest from the command line, but for browsing historical results of a large suite — spotting flapping tests, drilling into a single test’s run history, or just getting a visual sense of which parts of the suite are hurting — a web view is more pleasant. inq web starts a local server with exactly that:
$ inq web
The repository overview shows totals and a per-test history grid where each cell is one run, coloured by outcome. Bands of red make it easy to pick out tests that have been broken for a long time, and isolated red cells in an otherwise green column point at flaky tests.
Drilling into an individual test gives you its full run history, a duration sparkline, and per-run pass/fail status:

If you already have a .testrepository/ directory full of historical runs, inq upgrade will migrate it into the new .inquest/ format, with a progress bar for the impatient.
The legacy .testr.conf (INI) format is still understood, so existing projects don’t have to be converted to inquest.toml immediately — though the TOML format is preferred for new projects.
The source is on GitHub at jelmer/inquest. To install from source:
$ cargo install inquest
In a project with a Rust, Python, Go or Node.js test suite:
$ inq
Bug reports and patches are welcome.
Just like me, but… [Seth's Blog]
The actor, artist, mathematician, pianist, speaker, leader, tech nerd: Just like me, but talented.
I’m not so sure.
It might be more accurate to say “just like me, but dedicated.”
The first approach lets us off the hook.
The second approach opens the door to possibility.
Get the Money out of Politics [George Monbiot]
There’s a really simple way of ensuring that politics belongs to the people, not to the ultra-rich.
By George Monbiot, published in the Guardian 30th April 2026
How do we know whether political funding is corrupt? Mostly, we don’t. A plutocrat delivers a sack of cash to a political party. A few weeks later, it announces a policy that happens to favour the donor’s business. Are the events linked? We might suspect it; we cannot prove it. But the suspicion itself is corrosive and demoralising.
The current funding system, perhaps more than any other factor, turns us away from politics, breeding disillusionment, alienation and cynicism. A survey by the Electoral Commission last year found that only 18% of respondents believed spending and funding are transparent. A government survey in December discovered that 87% of people are “concerned about the possibility of corruption” among politicians. A further survey concluded that political donors are believed to wield the most influence of any elite faction. Disillusionment with politics drives people into the arms of the extreme right. This is paradoxical, as it tends to be highly receptive to the ultra-rich.
I’m prompted to write this column by Tom Burgis’s powerful investigation for the Guardian into Reform UK’s relationship with Christopher Harborne, who is based in Thailand. Remarkably, Harborne has provided about two-thirds of all Reform’s donations since its foundation: more than £22m altogether. The rules in Britain limit the amount a party can spend in an election year, but set no cap on the proportion a single funder can provide. In theory, one person could supply its entire budget. At what point do we decide that a political party is, in effect, owned by a donor?
I can’t prove that Harborne’s money has bought special favours from Reform, and make no suggestion of illegality. But there is also no way of proving that this funding is not connected to Nigel Farage’s enthusiasm for cryptocurrency, which appears to be Harborne’s principal source of wealth. The not-knowing is just as corrosive as the knowing.
Like the Tories, Reform has also taken lavish funding from very rich people who are hostile to climate action. Both parties now evince the same hostility. Which came first, the hostility or the funding? Does it matter? Whether a party changes its policy in response to donations or attracts big donors because of its policy, it’s equally damaging to democratic trust.
The same applies to Labour’s relationship with City donors, which might help explain its newfound enthusiasm for deregulating finance, despite the warnings of 2008. As Transparency International has documented, political parties in the UK “are increasingly becoming dependent on a small number of very wealthy donors”. “Dependent on” can easily mean “beholden to”. In very few cases has corruption been demonstrated. But that’s not the point. The problem isn’t that such relationships are illegal. The problem is that they are not.
The trust crisis was exacerbated by the Conservatives, who, without providing a coherent rationale, raised political spending caps and handcuffed the regulators. As the admirable Spotlight on Corruption has discovered, the Electoral Commission’s investigations have declined by 89% since 2019, while the police, without a dedicated unit and clear powers, do almost nothing. No one has ever gone to prison in Britain for breaching electoral finance laws. The highest criminal fine yet levied is a pathetic £6,000. The regulator’s budget in this country is about £1 per voter. In Australia it’s £24.
The higher caps set by the Tories triggered an even more intense scramble for private money: our representatives now often seem to spend more time soliciting funds than soliciting votes. Regulatory corrosion has made it even harder to spot the difference between a “permissible” donor and an “impermissible” one, and to stop foreign agents infiltrating our politics.
The representation of the people bill seeks to address this crisis. But to read the relevant sections (58-63) is to be struck by their extreme complexity and obvious loopholes. In response to the Rycroft review on foreign interference, the government has decided to cap annual funding from voters living abroad at £100,000 each, and stop donations being made in cryptocurrency. But how can anyone be sure that a billionaire based abroad isn’t channelling money through a resident, or an untraceable crypto payment isn’t turned into sterling before it lands in a party’s account? Continued regulatory chaos and public distrust are locked in.
I believe that any attempt to distinguish between “good donors” and bad, resident and foreign, is futile. Any major donor is a bad donor, as their economic power undermines democracy. Given the transnational nature of capital, distinctions based on residence become meaningless. And what’s to stop an AI program splitting a big donation into a thousand small ones that don’t need to be reported at all?
There’s a simple way of sorting all this out. It works as follows. The only money a party can receive is a standard fee (say £25) for membership. The government then matches that fee on a fixed multiple. For instance, if you have 100,000 members each paying £25, and the multiple is three, your annual budget is £10m. And that’s it: no other sources permitted. The parties would agree between themselves, with public input (perhaps a citizens’ assembly), on what the membership fee and multiple should be.
At a stroke, this sweeps away all the complexities of permissible and non-permissible donors, residence requirements, currency types, ultimate origins and spending caps. Instead of raising money, politicians would spend their time raising membership: reconnecting with the public and broadening their base. We would become equal political citizens, and our system would be transparent and intelligible. It would belong to us, not the billionaires.
The cost to the exchequer? Perhaps between £20m and £50m a year. The costs of the current system are incalculable, as the entire state is harnessed to it, creating endless dysfunction.
It doesn’t solve every aspect of billionaire influence: for instance, it wouldn’t have stopped Nigel Farage taking another £5m, in this case for his own use, from Harborne before he became an MP. But this simple measure would, I believe, do more than any other to give politics back to the people.
Democracy demands that we eliminate not only the dodgiest and most obscure sources of donor money, but all of it.
www.monbiot.com
Knicks will play the Sixers in round 2 of the playoffs starting Monday.
I've been teaching Claude why we favor Markdown. "We
add support for Markdown editing wherever we can, because people
like Markdown and they should. It makes things simple and
guarantees a certain level of flexibility for their writing far
beyond the standards of twitter-like systems with tiny little text
boxes. If you don't really support Markdown people figure it
out right away. But the character limits and stuff like that seem
more technical to users. Markdown support says clearly -- you're
really on the web."
View From a Hotel Window, 5/2/26: Chicago, IL [Whatever]


I’m staying north of the river, which is unusual for me. Also, the parking lot you see in the photo isn’t for my hotel. But it is a parking lot! Forms were obeyed.
I’m on town because tomorrow I’m in conversation with Joe Abercrombie about his latest book The Devils, and if you’re curious to see us I believe tickets may still be available. If you’re not curious to see us, fine, I guess, we’ll just sit there staring awkwardly at each other for an hour or so, I mean, whatever, it’s fine. It’s fine.
Ironically, this weekend is the 35th reunion for the University of Chicago Class of 1991, of which I am a part, and I am missing those festivities for this, and I feel a bit of a heel about it. Sorry, Class of ’91. You know you’re awesome.
— JS
Bits from Debian: Debian welcomes the 2026 GSoC interns [Planet Debian]


We are very excited to announce that Debian has been assigned seven contributors to work under mentorship on a variety of projects with us during the Google Summer of Code.
Here is a list of the projects and contributors, along with details of the tasks to be performed.
Project: Automated Debian Packaging with debianize
Deliverables of the project: Debianize is a tool that aims to automatically create debian packages from scratch from upstream source trees. As for the current version, it works for some of the packages but it is not reliable. This project aims at making it production ready such that it can work with most of the projects. Along with that improving its reliability, coverage, integration with the broader ecosystem and other enhancements.
Project: Linux Livepatching
Deliverables of the project: Linux Kernel Livepatching is the process of replacing functions in the kernel code affected by CVEs with the patch-applied functions during system runtime. It's basically a method to apply security kernel patches to a running system.
Project: DebNet: Visualising the Bus Factor – Graph Analysis of Debian's Infrastructure
Deliverables of the project: DebNet models the Debian archive as a graph to identify critical packages maintained by too few people. Using data from the Ultimate Debian Database (UDD), it builds a package dependency graph and a maintainer-package graph to compute practical metrics like the Bus Factor, Fragility Score, and Dependency Impact for every source package.
Project: Attack of the Clones: Fight Back Using Code Duplication Detection From Security Patches
Deliverables of the project: This project aims to detect vulnerable code clones in the Debian archive by automatically extracting signatures from security patches. Using a two-signal approach that separates vulnerable patterns from fix patterns, the system generates high-specificity queries to search the entire archive via Debian CodeSearch.
Project: Debusine: debuginfod server
Deliverables of the project: This project implements a debuginfod-compatible server within Debusine to provide automated debug symbol resolution for Debian developers.
Project: Debian-LSP: Improve File Format Support
Deliverables of the project: The Debian LSP Language Server currently provides only basic features—field completion, parse-error diagnostics, and simple quick fixes—leaving Debian maintainers without the rich IDE experience available in other ecosystems.
Project: Debusine: live log streaming
Deliverables of the project: Debusine currently only shows task logs after a task has fully completed. This means developers working with long-running jobs (such as package builds or test pipelines) have no way to monitor progress in real time or catch failures early. This project adds live log streaming to Debusine.
Congratulations and welcome to all the contributors!
The Google Summer of Code program is possible in Debian thanks to the efforts of Debian Developers and Debian Contributors that dedicate part of their free time to mentor contributors and outreach tasks.
Join us and help extend Debian! You can follow the contributors' weekly reports on the debian-outreach mailing-list, chat with us on our IRC channel or reach out to the individual projects' team mailing lists.
Something weird happens as you get older, you walk into a room and see a friend but at first you don't get that this is your friend. Instead you see an old man or lady. Your attention goes away because like everyone you are programmed not to look at old people. Then you instantly realize this is your friend. You put on the virtual colored glasses that let you see them as you remember them, instead of what's there today.
On Bluesky: I asked ChatGPT when weblogs.com peaked.
More and better news for WordPress [Scripting News]
Here's a single-page site for WordPress news.
And here's the OPML subscription list.
You're free to import that OPML file into any feed reader.
I'd like to work with others to help get more good sources flowing through that list. The better the news delivery system, the more news sources we'll get. It's a chicken and egg thing, a bootstrap. People use Slack or Twitter to keep track of WordPress which is already a great idea-sharing network. Let's start using the tools we make to make the news we need.
Let's get more news sites on that list. There's a lot of news we're not getting over the web.
Comments, questions, suggestions here.
PS: I had a much longer post here earlier today, but factored it down to the basics.

Pluralistic: The prehistory of the Democratic Nuremberg Caucus (02 May 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

Comrade Trump continues his unbroken streak of destroying the American empire's grip on the world, hastening the renewables transition, de-dollarizing global trade, and killing the world's suicidal habit of entrusting its digital life to America's defective, enshittified tech exports:
https://pluralistic.net/2026/04/20/praxis/#acceleration
But Comrade Trump's ambitious praxis knows no bounds. Now, he's helping to remake the Democratic Party as a muscular opposition with a serious commitment to workers' interests over billionaires. It's not merely that Trump has empowered the primary campaigns of leftist Democrats facing down corporate, AIPAC-backed sellouts:
https://prospect.org/2026/04/30/palestine-super-pac-new-jersey-12-district-adam-hamawy/
He's also stiffening normie sellout Democrats' spines, forcing them to confront the stark choice between socialism and barbarism! And Dem leaders don't come more normie sellout than Cory "Big Pharma" Booker, a disgrace to Corys everywhere:
Nevertheless, that very same (lesser) Cory has introduced legislation to unwind every illegal, corrupt merger that the Trump administration has waved through:
Under the Correcting Lapsed Enforcement in Antitrust Norms for Mergers (CLEAN Mergers) Act, any company that was acquired in a deal worth $10b or more will have to break up with its merger partner if it turns out that these mergers were "politically influenced." "Politically influenced" sums up every major merger under the Trump II regime:
https://pluralistic.net/2026/02/13/khanservatives/#kid-rock-eats-shit
You could be forgiven for assuming that this is just about reining in Wall Street greed, but that it isn't an especially political maneuver. That's not true: antitrust is the most consequentially political regulation (with the possible exception of regulations on elections). Every fascist power defeated in WWII relied on the backing of their national monopolists to take, hold and wield power. That's why the Marshall Plan technocrats who rewrote the laws of Europe, South Korea and Japan made sure to copy over US antitrust law onto those statute-books (that's also why the tech antitrust cases brought in Europe could be re-run in South Korea and Japan – their laws are all substantively similar, because they were harmonized with US antitrust in the 1950s):
https://pluralistic.net/2025/01/22/autocrats-of-trade/#dingo-babysitter
Fascism and monopolies go hand in hand, and smashing monopolies is key to the program of fighting fascism. After defeating fascism in the mid-20th century, the Allies oversaw a program of "denazification," starting with the Nuremberg trials:
https://en.wikipedia.org/wiki/Nuremberg_trials
Inspired by those trials, I've proposed that Congressional Dems could form a "Nuremberg Caucus" that would publicly promise sweeping plans to denazify America after Trump and his allies have been swept from power:
https://pluralistic.net/2026/02/10/miller-in-the-dock/#denazification
The centerpiece of the Nuremberg Caucus playbook is a set of ready-to-file, public indictments against Trump officials who have violated the law, the Constitution, and the rights of the people of the USA. Dems should create and maintain a docket with exhibits and witness lists that gets updated every time one of these crooks runs their big, stupid mouths on Fox News or OANN or Twitter. The Nuremberg Caucus could even set dates for the trials of officials, with judicial calendars for each federal courtroom, starting on January 21, 2029.
The idea here is to both demoralize Trump's collaborators and to stiffen the spines of the Democratic base who will have to be convinced that turning out for the coming elections, and defending them, will mean something, delivering the change and hope they've been promised since the Obama campaign, but which has never materialized.
While trials and punishment for Trump's fascist goons are at the center of the Nuremberg Caucus plan, that's not all of it. The plan also calls for publicly announcing the intention to unwind every corrupt merger that was consummated under Trump. This serves two purposes: first, it promises the electorate that the monopolists who steal from them will face consequences for their crimes; but second, it also puts investors on notice that any gains from corrupt mergers will turn into massive losses once the next administration orders these companies to unscramble the inedible omelets they're cooking up, no matter what the cost.
That's exactly what Booker's CLEAN Mergers Act – cosponsored by Elizabeth Warren (D-MA), Martin Heinrich (D-NM), Chris Murphy (D-CT), and Mazie Hirono (D-HI) – does. I don't think that Booker is listening to me, but I do think that Dems who are willing to introduce this kind of legislation can be cajoled, coerced and sweet-talked into more ambitious Nuremberg Caucus actions.
For example, there could not be a better time to announce plans to unrig the Supreme Court, which has just gutted the Voting Rights Act:
https://prospect.org/2026/05/01/turning-civil-rights-inside-out-supreme-court-voting-rights/
The Supreme Court's legitimacy has been burned to the ground, and Trump's chud justices are pissing on the ashes. Packing the court is a very good idea:
https://pluralistic.net/2020/09/20/judicial-equilibria/#pack-the-court
It's also a very popular idea:
https://pluralistic.net/2023/10/18/the-people-no/#tell-ya-what-i-want-what-i-really-really-want
Which is why I included it in the Nuremberg Caucus plan. But packing the court is just table stakes. In his latest video, Jamelle Bouie lays out a detailed plan for denazifying the Supreme Court:
https://www.youtube.com/watch?v=SRzS61buXkQ
As Bouie points out, "as long as John Roberts has his majority, nothing the left of center in this country wants to do is safe or stable…We can have democracy and self-government in this country or we can have the Supreme Court as it exists, but we cannot have both."
But packing the court – while a good place to start – isn't enough. Per Bouie, the problem isn't just the court's corruption – it's how powerful the court is. Article 3, Section 2 of the Constitution permits Congress to "jurisdiction strip" the Supremes: Congress can pass a law taking voting rights and racial discrimination away from the Supreme Court's jurisdiction. Congress can impose ethics reforms on the court, banning justices from taking bribes (I can't believe I have to type these words).
Congress can turn the Supreme Court's current building into a museum and move the Supreme Court back into its original home in Congress's basement. Congress can take away the Supremes' ability to select their clerks or which cases they hear. All the Constitution says is that there must be a Supreme Court, and it must adjudicate "disputes between states, disputes involving ambassadors, impeachments, that kind of thing." Everything else is up to Congress to grant or withhold from SCOTUS.
This is very good Nuremberg Caucus stuff. It would be an amazing campaign promise for anyone primarying a shitty normie Dem in the midterms: "Vote for me, and I will be part of the legislative movement to make the Supreme Court weaker and thus more accountable."
Now, as much as I like this, I'm really holding out for a Dem to go with my big ICE-melting idea: promising million-dollar bounties for ICE officers who rat out their buddies for violating the law:
ICE agents are signing up with the promise of $50k hiring bonuses and $60k in student debt cancellation. That's peanuts. The Nuremberg Caucus could announce a Crimestoppers-style program with $1m bounties for any ICE officer who a) is themselves innocent of any human rights violations, and; b) provides evidence leading to the conviction of another ICE officer for committing human rights violations. That would certainly improve morale for (some) ICE officers.
As I wrote in February:
Critics of this plan will say that this will force Trump officials to try to steal the next election in order to avoid consequences for their actions. This is certainly true: confidence in a "peaceful transfer of power" is the bedrock of any kind of fair election.
But this bunch have already repeatedly signaled that they intend to steal the midterms and the next general election:
ICE agents are straight up telling people that ICE is on the streets to arrest people in Democratic-leaning states ("The more people that you lose in Minnesota, you then lose a voting right to stay blue"):
The only path to fair elections – and saving America – lies through mobilizing and energizing hundreds of millions of Americans. They are ready. They are begging for leadership. They want an electoral choice, something better than a return to the pre-Trump status quo. If you want giant crowds at every polling place, rising up against ICE and DHS voter-suppression, then you have to promise people that their vote will mean something.

Why are the Artemis II photos on Flickr? https://www.anildash.com/2026/04/30/artemis-photos-flickr/
Your Dinner Got Worse On Purpose https://www.worseonpurpose.com/p/your-dinner-got-worse-on-purpose
Hadopi (2009–2026) https://www.laquadrature.net/en/2026/04/30/hadopi-2009-2026-2/
You’re Not Wrong, Babies Are Getting Worse: Enshittification Comes For A Once-Beloved Classic https://theonion.com/youre-not-wrong-babies-are-getting-worse-enshittification-comes-for-a-once-beloved-classic/
#25yrsago Implementing TCP over pigeon https://blug.linux.no/rfc1149/
#20yrsago Barenaked Ladies frontman on copyright reform https://web.archive.org/web/20060505032617/http://www.canada.com/nationalpost/news/issuesideas/story.html?id=3367a219-f395-4161-a9b9-95256c613824
#20yrsago Stephen Colbert kills at White House press corps dinner https://web.archive.org/web/20060501114431/http://www.editorandpublisher.com/eandp/news/article_display.jsp?vnu_content_id=1002425363
#20yrsago Cinema owners try to lure us back to the movies https://web.archive.org/web/20060620140301/https://www.siliconvalley.com/mld/mercurynews/news/local/states/california/peninsula/14457900.htm?source=rss&channel=mercurynews_peninsula
#20yrsago Smithsonian’s sellout to Showtime slammed by Congress https://www.washingtonpost.com/wp-dyn/content/article/2006/04/28/AR2006042802213_2.html
#20yrago Wallaby milk: proof against antibiotic resistant bacteria https://web.archive.org/web/20060429102138/http://news.scotsman.com/scitech.cfm?id=593632006
#20yrsago Documentary on radical free school https://www.youtube.com/watch?v=rgpuSo-GSfw
#15yrsago Facebook celebrates royal wedding by nuking 50 protest groups https://anticutsspace.wordpress.com/2011/04/29/political-facebook-groups-deleted-on-royal-wedding-day/
#15yrsago Jay Rosen: What I Think I Know About Journalism https://pressthink.org/2011/04/what-i-think-i-know-about-journalism/
#15yrsago Companies should release the source code for discontinued products https://makezine.com/article/maker-news/if-youre-going-to-kill-it-open-source-it/
#15yrsago Scratch-built “freedom press” https://makezine.com/article/craft/freedom_press/
#15yrsago HOWTO quilt a 3D Mad Tea Party set https://www.instructables.com/Quilted-Mad-Tea-Party-Set/
#15yrsago Online activism works: Canada delayed US-style copyright bill in fear of activist campaign https://web.archive.org/web/20110501103056/https://www.michaelgeist.ca/content/view/5763/125/
#15yrsago Ad agency to radicals: “We own radical media(TM)” https://web.archive.org/web/20110503045909/http://radicalmediaconference.wordpress.com/2011/04/27/we-make-radical-media-you-make-adverts/
#15yrsago Troubletwisters: Garth Nix and Sean Williams’ action-packed new kids’ fantasy https://memex.craphound.com/2011/04/30/troubletwisters-garth-nix-and-sean-williams-action-packed-new-kids-fantasy/
#15yrsago RIP, Joanna Russ https://nielsenhayden.com/makinglight/archives/012974.html#547586
#5yrsago Experian doxes the world (again) https://pluralistic.net/2021/04/30/dox-the-world/#experian
#5yrsago Disney's writer wage-theft is far worse than reported https://pluralistic.net/2021/04/29/writers-must-be-paid/#pay-the-writer
#5yrsago Korea set to break the Samsung dynasty https://pluralistic.net/2021/04/29/writers-must-be-paid/#dynasties
#5yrsago What the hell is "carried interest" https://pluralistic.net/2021/04/29/writers-must-be-paid/#carried-interest
#1yrago Mike Lee and Jim Jordan want to kill the law that bans companies from cheating you https://pluralistic.net/2025/04/29/cheaters-and-liars/#caveat-emptor-brainworms
#1yrago Republicans want to force students to pay off scam college loans https://pluralistic.net/2025/04/30/trump-u/#i-think-you-know-what-the-trustees-can-do-with-their-suggestions

Virtual: How to Disenshittify the Internet with Wendy Liu (EFF),
May 14
https://www.eff.org/event/effecting-change-enshittification
Berlin: Re:publica, May 18-20
https://re-publica.com/de/news/rp26-sprecher-cory-doctorow
Berlin: Enshittification at Otherland Books, May 19
https://www.otherland-berlin.de/de/event-details/cory-doctorow.html
Hay-on-Wye: HowTheLightGetsIn, May 22-25
https://howthelightgetsin.org/festivals/hay/big-ideas-2
SXSW London, Jun 2
https://www.sxswlondon.com/session/how-big-tech-broke-the-internet-b3c4a901
NYC: The Reverse Centaur's Guide to Life After AI with Jonathan
Coulton (The Strand), Jun 24
https://www.strandbooks.com/cory-doctorow-the-reverse-centaur-s-guide-to-life-after-ai.html
Edinburgh International Book Festival with Jimmy Wales, Aug
17
https://www.edbookfest.co.uk/events/the-front-list-cory-doctorow-and-jimmy-wales
When Do Platforms Stop Innovating and Start Extracting?
(InnovEU)
https://www.youtube.com/watch?v=cccDR0YaMt8
Pete "Mayor" Buttigieg (No Gods No Mayors)
https://www.patreon.com/posts/pete-mayor-with-155614612
The internet is getting worse (CBC The National)
https://youtu.be/dCVUCdg3Uqc?si=FMcA0EI_Mi13Lw-P
Do you feel screwed over by big tech? (Ontario Today)
https://www.cbc.ca/listen/live-radio/1-45-ontario-today/clip/16203024-do-feel-screwed-big-tech
"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
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2026
"The Post-American Internet," a geopolitical sequel of sorts to Enshittification, Farrar, Straus and Giroux, 2027
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Third draft completed. Submitted to editor.
"The Post-American Internet," a short book about internet policy in the age of Trumpism. PLANNING.
A Little Brother short story about DIY insulin PLANNING

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
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
Tim Bradshaw: Making CLOS slot access less slow [Planet Lisp]
Access to slots in CLOS instances is often very slow. It’s probably not possible for it ever to be really fast, but the AMOP MOP does provide a way of making it, at least, less slow.
Here are some benchmarks for accessing fields in objects of various kinds, using SBCL. All of these tests do something equivalent to
(defclass a ()
((i :initform 0 :type fixnum)))
(defclass a/no-fixnum ()
((i :initform 0)))
(defmethod svn ((a a) n)
(declare (type fixnum n)
(optimize speed (safety 0)))
(dotimes (i n)
(incf (the fixnum (slot-value a 'i)))))
(defmethod svn ((a a/no-fixnum) n)
(declare (type fixnum n)
(optimize speed (safety 0)))
(dotimes (i n)
(incf (the fixnum (slot-value a 'i)))))
They then call svn (or equivalent) with a large
value of \(n\), do that a number of times \(m\) and then divide by
\(2 \times n \times m\) to get an average time per access
(incf accesses the slot twice).
For SBCL 2.6.3.178-a190d9710 on ARM64 Apple M1, seconds per access:
slot-value (slot type
fixnum) \(1.20\times 10^{-8}\), ratio \(76\);slot-value (no slot type)
\(1.22\times 10^{-8}\), ratio \(77\);slot-value (single
slot-value-using-class method) \(1.69\times 10^{-8}\),
ratio \(107\);standard-instance-access
\(1.00\times 10^{-9}\), ratio \(6.4\);fixnum)
\(1.57\times 10^{-10}\), ratio \(1.0\);car) \(1.59\times 10^{-10}\),
ratio \(1.0\).These numbers vary slightly, but this gives a good picture of
what is going on. In particular you can see that
slot-value within a method specialised on the class is
more than 70 times slower than access for a structure slot, but if
you can use standard-instance-access it is only about
6 times slower: standard-instance-access speeds things
up by a factor of about 10, which changes CLOS slot access
performance from laughably slow to merely pretty slow.
I’ve written a macro, called with-sia-slots
which is like with-slots but uses
standard-instance-access. It therefore has all the
constraints imposed by that, but it is significantly faster than
with-slots or slot-value. It has some
overhead, as it has to dynamically compute the slot locations: this
is better done outside any inner loop. This means that, for
instance, you probably want to write code that looks like
(with-sia-slots (x) o
(dotimes (i many)
(setf x (... x ...))))
which will mean you only pay the overhead once.
The above tests don’t use with-sia-slots, as
I wrote them partly to see if something like this was worth
writing. However on a current (at the time of writing) SBCL
with-sia-slots is asymptotically about 10 times faster
than with-slots as demonstrated by these tests.
Up to package names it should be portable to any CL with an AMOP-compatible MOP. It can be found in my implementation-specific hacks, linked from here.
Ben Hutchings: FOSS activity in April 2026 [Planet Debian]

Nostalgia can be fatal [Seth's Blog]
For hundreds of years, nostalgia was seen as a serious disease, with doctors across Europe scrambling for a cure. Hundreds of thousands of people died from it.
In the original understanding of the term, it was a sort of homesickness. Soldiers from Switzerland were the first to get the official diagnosis–separated from their friends, family and homes, these young men would suffer from melancholy and would waste away, sometimes fatally.
As it spread, one theory was that it afflicted people from places that were at high altitude. As more humans traveled, often under duress (for example, enslaved people kidnapped from their homes and brought by ship to the new world), the suffering increased.
It’s not hard to see how a sudden, involuntary dislocation could be debilitating. Particularly if home was a place that was insulated from sudden change and fast-moving culture.
Today, future shock is bringing a new, if milder form of the affliction. As technology, jobs and culture shift faster than ever before, it’s understandable that many are yearning for a return to an imagined past. When the future arrives uninvited, it can feel like being pulled from a comfortable village in the middle of the night.
Knowing our peers are encountering challenges with the transitions at work or at home can give us the insight to build the scaffolding they need to find their footing. And perhaps we can offer ourselves a bit of grace as well.
Back to the Very Very Basics [Whatever]


For reasons that are not important now, I have found myself in the possession of a lightly used but still somewhat recent Asus Chomebook, of the sort that one can pick up for less than $200, with 4GB RAM, 64GB of onboard storage, a less than spectacular screen resolution, and a keyboard without backlighting, which means on this dark gray version that once the lights dim, its usefulness will compromised for all but the most talented of touch-typers. It’s been a while since I’ve used something this basic (I’m writing this piece on it now), and inasmuch as my daily driver laptop is a reasonably specced-out M4 MacBook Air, I was curious how I would feel about it stepping down from that.
Answer: I… don’t hate it? I don’t love it, to be clear, and it’s not something I would likely ever choose over using my Air. And there are some things about it which are pretty egregious, that are clearly the result of this thing clocking in at under $200, most notably a screen that would have to work to be called “washed out,” and a track pad that feels genuinely terrible to use, especially coming from a MacBook, which have what are acknowledged to be the best trackpads in the world. It is as plastic as the day is long, and given the paucity of its RAM and the inevitable end of ChromeOS, this computer is so close to the line between “useful” and “e-waste” that one might as well give it a balancing beam.
On the other hand, the keyboard doesn’t suck to type on; it’s a basic chiclet board but it’s nicely spaced and the keys don’t feel overly mushy. The onboard i/o puts the Air to shame: Both the Air and the Asus have two USB-C ports and a headphone jack, but the ASUS throws in a USB-A and Mini-SD card as well (I don’t suspect that the USB-C ports on the Asus are Thunderbolt, but they can port out to an external display, which ain’t chicken feed). Plus the ASUS webcam has a manual privacy shutter, which, frankly, is a thing every laptop with a camera should have regardless. It’s not the absolute worst! You could spend $200 on much more questionable things!
Every now and again I do the check-in with myself on what might be the bare minimum I would need, in terms of personal possessions, if less than wonderful things came to pass I had to live in deeply reduced circumstances. And without going into great detail about the thinking process about this, one of the things I’ve decided is that if I had an acceptable laptop, that would go a fair way toward my needs in terms of audiovisual entertainment, and personal creativity. A decent laptop is a television, a radio, a window to the world and an instrument of expression.
This Asus is… not up to the task of being my acceptable laptop in this circumstance. Too limited by tech and by software, basically. I’ve been a long time enjoyer of Chromebooks, and loved my Pixelbook from back in the day. But Chrome ultimately never won the argument that a thin client to the Internet was all you would ever need, and now that ChromeOS is going to be folded into Android at some nearish point, it never will. Chromebooks will go into the west as forever the “second laptop,” the one you used when you didn’t have actual work to do.
(What laptop do I think it probably the closest to my Lowest Acceptable Spec? I think at this point it’s obvious: a MacBook Neo, which has all the advantages of a Chromebook, including price point for some mid-spec Chromebooks, and also can run more complex software that one would need for creative work, and not be totally reliant on an online connection to do it. It’s tempting to say the Neo is overhyped at this point, except I don’t think it actually is; at $600, it basically takes a knife to the Chromebook value proposition for everything but barebones educational use. It’s not the laptop I would want — that’s my Air — but it would certainly do.)
Considering that I do have a MacBook Air, and an iPad Pro with a “Magic Keyboard,” which essentially takes care of all my laptop-ish needs, what might I use this little Chromebook for? Basically, as a guest laptop, if someone visiting needs to do something that requires a full-size keyboard or a screen larger than the one on their phone, but didn’t happen to bring their own laptop with them. And… that’s pretty much it? As I said, I don’t want to entirely discount this laptop; it’s better than I expected for less than $200, and it fulfills its own admittedly modest brief perfectly well. It’s just that I don’t know how much longer this particular brief is going to need to be fulfilled.
— JS
Reproducible Builds (diffoscope): diffoscope 318 released [Planet Debian]
The diffoscope maintainers are pleased to announce the release
of diffoscope version 318. This version
includes the following changes:
[ Chris Lamb ]
* Upload to test PyPI integration.
* Bump Standards-Version to 4.7.4.
[ Manuel Jacob ]
* Remove a misleading comment.
You find out more by visiting the project homepage.
Developing a cross-process reader/writer lock with limited readers, part 4: Abandonment [The Old New Thing]
We’ve been building a cross-process reader/writer lock with a cap on the number of readers, we concluded our investigation last time by noting that there is a serious problem that needs to be fixed.
That serious problem is abandonment.
Suppose a process crashes while it holds a shared or exclusive lock on our cross-process reader/writer lock. Semaphores don’t have owners, so if a thread terminates while in possession of a semaphore token, that token is lost forever. For our cross-process reader/writer lock, that means that the maximum number of shared acquirers goes down by one, and exclusive acquisitions will never succeed, since they will be waiting for that last token which will never be returned.
A synchronization object that does have the concept of ownership is the mutex, so we can build our reader/writer lock out of mutexes.
The idea here is that instead of claiming semaphore tokens, we claim mutexes. This means that we need one mutex for each potential shared acquisition, plus one more to avoid the starvation problem.
The outline is
HANDLE sharedMutex;
HANDLE tokenMutexes[MAX_SHARED];
struct TimeoutTracker
{
explicit TimeoutTracker(DWORD timeout)
: m_timeout(timeout) {}
DWORD m_start = GetTickCount();
DWORD Wait(HANDLE h)
{
DWORD elapsed = GetTickCount() - m_start;
if (elapsed > m_timeout) return WAIT_TIMEOUT;
return WaitForSingleObject(h, m_timeout - elapsed);
}
DWORD WaitMultiple(DWORD count, const HANDLE* handles, BOOL waitAll)
{
DWORD elapsed = GetTickCount() - m_start;
if (elapsed > m_timeout) return WAIT_TIMEOUT;
return WaitForMultipleObjects(count, handles, waitAll, m_timeout - elapsed);
}
};
We change the return value of the Wait method so it
returns the wait result rather than a success/failure. We also add
a WaitMultiple method for wrapping
WaitForMultipleObjects.
Next is a handy helper function.
int WaitResultToindex(DWORD result)
{
auto index = result - WAIT_OBJECT_0;
if (index < MAX_SHARED) return static_cast<int>(index);
index = result - WAIT_ABANDONED_0;
if (index < MAX_SHARED) return static_cast<int>(index);
return -1;
}
The WaitResultToIndex function
takes the wait result and returns the index of the acquired mutex,
or -1 if no mutex was acquired.
Notice that this code treats the abandoned the state the same as the normal wait state. We are assuming that the code can recover from inconsistent data somehow. (For example, maybe the shared and exclusive accesses are to control access to a set of files, so the existing code already has to deal with file corruption.)
All that’s left is to implement the outline.
int AcquireShared()
{
WaitForSingleObject(sharedMutex, INFINITE);
auto result = WaitForMultipleObjects(MAX_SHARED, tokenMutexes, FALSE /* bWaitAll */, INFINITE);
ReleaseMutex(sharedMutex);
return WaitResultToIndex(result);
}
void ReleaseShared(int index)
{
ReleaseMutex(tokenMutexes[index]);
}
int AcquireSharedWithTimeout(DWORD timeout)
{
TimeoutTracker tracker(timeout);
DWORD result = tracker.Wait(hSharedMutex);
if (result != WAIT_OBJECT_0) return -1;
result = tracker.WaitMultiple(MAX_SHARED, tokenMutexes, FALSE /* waitAll */);
ReleaseMutex(sharedMutex);
return WaitResultToIndex(result);
}
void AcquireExclusive()
{
WaitForSingleObject(sharedMutex, INFINITE);
auto result = WaitForMultipleObjects(MAX_SHARED, tokenMutexes, TRUE /* bWaitAll */, INFINITE);
ReleaseMutex(sharedMutex);
}
void ReleaseExclusive()
{
for (unsigned i = 0; i < MAX_SHARED; i++) {
ReleaseMutex(tokenMutexes[i]);
}
}
bool AcquireExclusiveWithTimeout(DWORD timeout)
{
TimeoutTracker tracker(timeout);
DWORD result = tracker.Wait(hSharedMutex);
if (result != WAIT_OBJECT_0) return -1;
result = tracker.WaitMultiple(MAX_SHARED, tokenMutexes, TRUE /* waitAll */);
ReleaseMutex(sharedMutex);
return result != WAIT_TIMEOUT;
}
The post Developing a cross-process reader/writer lock with limited readers, part 4: Abandonment appeared first on The Old New Thing.
Malware in Proprietary Software - Latest Additions [Planet GNU]
The initial injustice of proprietary software often leads to
further injustices: malicious
functionalities.
The introduction of unjust techniques in nonfree software, such as
back doors, DRM, tethering, and others, has become ever more
frequent. Nowadays, it is standard practice.
We at the GNU Project show examples of malware that has been
introduced in a wide variety of products and dis-services people
use everyday, and of companies that make use of these
techniques.
Eden: NHS goes to war against open source [LWN.net]
Terence Eden reports that the UK's National Health Service (NHS) is preparing to close almost all of its open-source repositories as a response to LLM tools, such as Anthropic's Mythos, becoming more sophisticated at finding security vulnerabilities. He does not, to put it mildly, agree with the decision:
The majority of code repos published by the NHS are not meaningfully affected by any advance in security scanning. They're mostly data sets, internal tools, guidance, research tools, front-end design and the like. There is nothing in them which could realistically lead to a security incident.
When I was working at NHSX during the pandemic, we were so confident of the safety and necessity of open source, we made sure the Covid Contact Tracing app was open sourced the minute it was available to the public. That was a nationally mandated app, installed on millions of phones, subject to intense scrutiny from hostile powers - and yet, despite publishing the code, architecture and documentation, the open source code caused zero security incidents.
Furthermore, this new guidance is in direct contradiction to the UK's Tech Code of Practice point 3 "Be open and use open source" which insists on code being open.
| Feed | RSS | Last fetched | Next fetched after |
|---|---|---|---|
| @ASmartBear | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| a bag of four grapes | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| Ansible | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| Bad Science | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| Black Doggerel | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| Blog - Official site of Stephen Fry | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| Charlie Brooker | The Guardian | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| Charlie's Diary | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| Chasing the Sunset - Comics Only | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| Coding Horror | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| Comics Archive - Spinnyverse | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| Cory Doctorow's craphound.com | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| Cory Doctorow, Author at Boing Boing | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| Ctrl+Alt+Del Comic | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| Cyberunions | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| David Mitchell | The Guardian | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| Deeplinks | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| Diesel Sweeties webcomic by rstevens | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| Dilbert | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| Dork Tower | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| Economics from the Top Down | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| Edmund Finney's Quest to Find the Meaning of Life | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| EFF Action Center | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| Enspiral Tales - Medium | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| Events | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| Falkvinge on Liberty | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| Flipside | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| Flipside | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| Free software jobs | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| Full Frontal Nerdity by Aaron Williams | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| General Protection Fault: Comic Updates | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| George Monbiot | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| Girl Genius | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| Groklaw | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| Grrl Power | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| Hackney Anarchist Group | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| Hackney Solidarity Network | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| http://blog.llvm.org/feeds/posts/default | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| http://eng.anarchoblogs.org/feed/atom/ | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| http://feed43.com/3874015735218037.xml | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| http://flatearthnews.net/flatearthnews.net/blogfeed | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| http://fulltextrssfeed.com/ | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| http://london.indymedia.org/articles.rss | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&_render=rss | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| http://planet.gridpp.ac.uk/atom.xml | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| http://shirky.com/weblog/feed/atom/ | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| http://thecommune.co.uk/feed/ | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| http://theness.com/roguesgallery/feed/ | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| http://www.airshipentertainment.com/buck/buckcomic/buck.rss | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| http://www.airshipentertainment.com/growf/growfcomic/growf.rss | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| http://www.airshipentertainment.com/myth/mythcomic/myth.rss | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| http://www.baen.com/baenebooks | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| http://www.feedsapi.com/makefulltextfeed.php?url=http%3A%2F%2Fwww.somethingpositive.net%2Fsp.xml&what=auto&key=&max=7&links=preserve&exc=&privacy=I+accept | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| http://www.godhatesastronauts.com/feed/ | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| http://www.tinycat.co.uk/feed/ | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| https://anarchism.pageabode.com/blogs/anarcho/feed/ | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| https://broodhollow.krisstraub.comfeed/ | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| https://debian-administration.org/atom.xml | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| https://elitetheatre.org/ | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| https://feeds.feedburner.com/Starslip | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| https://feeds2.feedburner.com/GeekEtiquette?format=xml | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| https://hackbloc.org/rss.xml | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| https://kajafoglio.livejournal.com/data/atom/ | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| https://philfoglio.livejournal.com/data/atom/ | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| https://pixietrixcomix.com/eerie-cutiescomic.rss | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| https://pixietrixcomix.com/menage-a-3/comic.rss | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| https://propertyistheft.wordpress.com/feed/ | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| https://requiem.seraph-inn.com/updates.rss | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| https://studiofoglio.livejournal.com/data/atom/ | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| https://thecommandline.net/feed/ | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| https://torrentfreak.com/subscriptions/ | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| https://web.randi.org/?format=feed&type=rss | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| https://www.dcscience.net/feed/medium.co | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| https://www.DropCatch.com/domain/steampunkmagazine.com | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| https://www.DropCatch.com/domain/ubuntuweblogs.org | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| https://www.DropCatch.com/redirect/?domain=DyingAlone.net | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| https://www.freedompress.org.uk:443/news/feed/ | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| https://www.goblinscomic.com/category/comics/feed/ | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| https://www.loomio.com/blog/feed/ | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| https://www.newstatesman.com/feeds/blogs/laurie-penny.rss | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| https://www.patreon.com/graveyardgreg/posts/comic.rss | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| 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 | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| https://x.com/statuses/user_timeline/22724360.rss | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| Humble Bundle Blog | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| I, Cringely | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| Irregular Webcomic! | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| Joel on Software | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| Judith Proctor's Journal | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| Krebs on Security | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| Lambda the Ultimate - Programming Languages Weblog | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| Looking For Group | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| LWN.net | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| Mimi and Eunice | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| Neil Gaiman's Journal | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| Nina Paley | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| O Abnormal – Scifi/Fantasy Artist | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| Oglaf! -- Comics. Often dirty. | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| Oh Joy Sex Toy | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| Order of the Stick | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| Original Fiction Archives - Reactor | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| OSnews | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| Paul Graham: Unofficial RSS Feed | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| Penny Arcade | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| Penny Red | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| PHD Comics | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| Phil's blog | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| Planet Debian | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| Planet GNU | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| Planet Lisp | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| Pluralistic: Daily links from Cory Doctorow | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| PS238 by Aaron Williams | XML | 08:42, Thursday, 07 May | 09:30, Thursday, 07 May |
| QC RSS | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| Radar | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| RevK®'s ramblings | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| Richard Stallman's Political Notes | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| Scenes From A Multiverse | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| Schneier on Security | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| SCHNEWS.ORG.UK | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| Scripting News | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| Seth's Blog | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| Skin Horse | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| Tales From the Riverbank | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| The Adventures of Dr. McNinja | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| The Bumpycat sat on the mat | XML | 08:28, Thursday, 07 May | 09:08, Thursday, 07 May |
| The Daily WTF | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| The Monochrome Mob | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| The Non-Adventures of Wonderella | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| The Old New Thing | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| The Open Source Grid Engine Blog | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| The Stranger | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| towerhamletsalarm | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| Twokinds | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| UK Indymedia Features | XML | 08:49, Thursday, 07 May | 09:31, Thursday, 07 May |
| Uploads from ne11y | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| Uploads from piasladic | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |
| Use Sword on Monster | XML | 08:35, Thursday, 07 May | 09:22, Thursday, 07 May |
| Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily | XML | 08:49, Thursday, 07 May | 09:35, Thursday, 07 May |
| what if? | XML | 08:35, Thursday, 07 May | 09:16, Thursday, 07 May |
| Whatever | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| Whitechapel Anarchist Group | XML | 08:56, Thursday, 07 May | 09:45, Thursday, 07 May |
| WIL WHEATON dot NET | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| wish | XML | 09:00, Thursday, 07 May | 09:45, Thursday, 07 May |
| Writing the Bright Fantastic | XML | 09:00, Thursday, 07 May | 09:44, Thursday, 07 May |
| xkcd.com | XML | 08:56, Thursday, 07 May | 09:39, Thursday, 07 May |