Joe Marshall: OpenAPI Access to jrm-code-project.com [Planet Lisp]
It's a web site! It's a service! jrm-code-project.com has an OpenAPI specification and you can use it to generate client code in your favorite programming language (which is Lisp, right?). The OpenAPI specification is available at https://jrm-code-project.com/openapi.yaml. There are the following endpoints:
GET /api/v1/ping - Returns a simple "pong"
response to test connectivity and verify your authentication
tier.POST /api/v1/echo - Accepts a JSON payload and
returns the same payload in the response. For testing your
client.POST /api/v1/auth/token - Exchange your long-lived
programmatic API key for a short-lived JWT Bearer token to
authenticate secure requests.GET /api/v1/pastes - Retrieve a paste's content by
its ID (Publicly readable, no auth required).POST /api/v1/pastes - Create a new code snippet
paste (Requires JWT).DELETE /api/v1/pastes - Delete a specific paste
you own (Requires JWT).GET /api/v1/user/pastes - List all non-expired
pastes associated with your authenticated account (Requires
JWT).POST /api/v1/chef - Programmatic access to The
Chef. Submit your raw Lisp code to be mercilessly roasted.
(Requires JWT and a x-goog-api-key header with your
Gemini API key).I invite you to explore the API and see what you can build with it. If you have any questions or feedback, please don't hesitate to reach out to me at eval.apply@gmail.com.
Sven Hoexter: FrOSCon 2026: TLS Talk [Planet Debian]
Info: German content only, sorry.
I was pondering for the past three years if I should give some sort of TLS basics talk at FrOSCon. I finally stepped up this year and gave that talk today, with the title "TLS, mTLS, SNI, ECH, CAA, HTTPS, PKI, Zertifikate und ein bisschen PQC". I was too optimistic with my 50 slides, and had to drop the Post Quantum Cryptography part at the end. Still got positive feedback from Zugschlus and others - thanks a lot for that <3 - and was asked for the slides. It's not a piece of art, but maybe it helps to release the LibreOffice odp file as well, so others can use it as a base for other events or corp internal talks. So here is the froscon-tls-2026.pdf and froscon-tls-2026.odp, both released under the CC BY-NC license.
The video is also available at media.ccc.de if you want to watch it.
Thanks to everyone who made FrOSCon happen for the 21th time!
Say Hello to My Warty Friend [Whatever]


This little dude was on the doorstep of my garage around 4am (i.e., when the dog told me she really really had to go pee). That’s not a great place for a smallish amphibian to be, considering there are predatory mammals who patrol the territory and would be happy to take a run at a toad. This particular type of toad has a mildly toxic coating that will make such an encounter an unhappy one, so it’s possible he’d survive meet-up, but that wouldn’t stop an exploratory bite.
I tried to nudge it with my phone to get it to hop away, but the toad seemed resistant to being pushed. Then I figured it out: I had left the outdoor garage light on, attracting a bunch of flying insects, and this little dude was hanging around for the snackage. So I turned off the light, thus ruining his smorgasbord, with the hope he would hop away in disappointment. This morning did not find me discovering either his eviscerated body or any frog blood, so I think I may have been successful. I wish this little dude a long and happy life, one, for his own safety, away from my house.
— JS
Thinking out loud on a Saturday morning [Scripting News]
Tech is very competitive, I learned, even when you give your
work away, which I have been doing for a couple of decades. Maybe
even especially when you give it away.
I want to work with other people, and am always making invitations. When I see a product that fits in with what I'm doing my first impulse is how do we connect them? This is one of the basic great things about computers and our networks. But there must be interop between people before there can be interop between products.
Connecting two pieces of tech is mostly mathematics, code writing, not very much in the way of manufacturing, whereas in the physical world two train lines can cross each other but can't connect because they have different rail spacing, or run on a different kind of fuel. In software if there's a huge difference like that you can make a software bridge, as they did with TCP/IP, and it costs a little time to convert each request twice for each transaction, but that cost is pretty close to zero.
That's what I want, working together, but what I get instead is people want to be me. They want to take over the project I'm working on, which if they understood it from my point of view is always the most ridiculous choice possible because it is impossible. So many stories to go with this. One of the most puzzling was when one of my best friends signed up to do a development project with a developer who used to work for me. Long story, but when you come down to it, he wanted to be me, not work with me.
But I didn't want to be Doug Engelbart or Ted Nelson though I learned from them. I certainly didn't want to be Bill Gates or Steve Jobs. I probably would have liked being Dennis Ritchie or Ken Thompson. I have ideas of things that should be done that for some reason no one else sees. I start working and sometimes they take off. Then everyone writes business plans and boom, they start up and shortly thereafter they fail. This happened with RSS. I was meeting with a lot of VCs, I wanted to start a company to build two-way RSS apps and content, as we had pioneered at UserLand. Seemed like a total no-brainer. I felt I had proven I had a clue. But they invested in hired programmers so the VCs could be the vision behind the products (I guess, I don't really know know why) instead of me.
I had a colleague at Berkman tell me to get out of the way because he was going to take over RSS. To this day people don't get why competing with RSS was counter-productive, assuming your goal is interop. When another friend tried to take over OPML, as I was promoting it at the time on my blog and going on a roadshow to answer questions and raise interest, I was so sick of the whole thing, he wasn't the only one, btw, I just stopped promoting it and poof like magic their ventures disappeared. If they had offered friendship and interop, which they didn't, it could have worked. One of these guys even tricked Harvard into hosting an OPML conference. They assumed everyone who repped open tech was legit.
The thing that really pissed me off is that while this was going on, people started writing about me, literally, grammatically, in the past tense. People whose accomplishments weren't that great imho. Look at sports and entertainment, how they celebrate those who made contributions to their arts, I wonder when tech will gain that level maturity. It's childish to not respect those whose work you build on. And btw, unlike sports players, while programmer's minds do eventually lose some brilliance for coding, because it relies so heavily on memory, I've experienced that myself -- our ability to create and set standards doesn't have an actual expiration date. If you want to keep creating at 40, 50, 60 even 70, you probably can.
My life has been full of all kinds of wonderful coincidences, at the exact moment I need it along comes Claude Code, and all of a sudden I can do much bigger projects than I ever could when I was in my 20s and 30s. Which I think is good, not just for me but for the whole thing. Because there are processes and concepts that belong in the toolkit of every developer that were squashed by Apple in the 90s (I'm relearning this now as I'm working on getting Frontier running on Node.js) and now we have a chance to restore it to mostly running condition. Some features will be hard to make work, because of peculiarities in JavaScript.
Maybe as one of my last creative acts, I will try to hook up with a university to build bridges between generations that aren't specific to any timeframe, to making handing off a lifetime of work viable, and maybe the AI tools can facilitate that. Just thinking out loud on a Saturday morning.
BTW, I was talking about this with Doc Searls a couple of years ago and offered a name for the seminar series, The Exit Interview. This gave me a thought, when Berkman had their reunion a couple of summers ago, they did a long video interview with me to explain how we got all the stuff running there that we did. It was going back to Berkman, even though the building is gone (which I kind of like, that's how fast things change) that summed up what had gone wrong. We were off to a fantastic start with blogging, podcasting, politics and education -- we weren't just making software and creating standards, we were involving the creative people the new medium would enable. This is something you don't find often in the tech industry. Academic freedom can be a real thing.
Russell Coker: Hacked by Chinafans [Planet Debian]
On 2026/08/10 at 2:11 am Australian eastern standard time (2026/08/09 16:11 UTC) someone created a post titled “Hacked by Chinafans” on my documents blog [1]. The person in question created an account named “67965e42a3c3” on that site with the email address 67965e42a3c3@google.com associated with it (I tried emailing that address and it bounced).
At 04:28:41am Australian eastern standard time (18:28 UTC) I was sent an email titled “Have you been hacked” by a reader of my blogs who subscribed to the RSS feed of my documents blog (a blog that I never expected anyone to read by RSS). Along the lines of “the wisdom of crowds” should we have “the unexpected observation and problem reporting of crowds”? I appreciate the notification, I might not have noticed until the next time I watched an unusually good movie otherwise.
The account in question was apparently created on 2026-07-21 at 16:43:47 (presumably UTC) even though at the time I believe creating accounts was not permitted. As an aside the timestamp of account creation is stored in the user_registered column of the wp_users table in the database, there doesn’t appear to be a way to access this in a standard WordPress installation other than doing a SQL query.
2026-07-24 15:43:17 status triggers-pending wordpress:all 7.0+dfsg1-1 2026-07-24 15:43:19 upgrade wordpress:all 7.0+dfsg1-1 7.0.2+dfsg1-1
Above are the relevant sections of my dpkg log showing the WordPress versions in use. I was running version 7.0+dfsg1-1 at the time the account was apparently created. I am confident in the accuracy of the dpkg logs and believe that they did not compromise the OS, I am not sure whether they ran hostile SQL code to change fields in the MySQL database so had to consider the possibility that the account creation time could have been set to a deliberately misleading value. I checked backups of the MySQL database stored off-site and found that the account in question was not in the 2026-07-21 backup (which was done before 16:43) but in the 2026-07-22 backup.
The WordPress release history [2] has version 7.0.1 released on 2026-07-09 and version 7.0.2 released on 2026-07-17. So presumably the attacker diffed the code on those releases, found an exploitable bug, and used it to create an account on my blog with admin privs. Then they waited a few weeks to see if I would notice and published a blog post when I didn’t notice.
select $TABLE_PREFIXusers.user_login, $TABLE_PREFIXusers.user_pass, $TABLE_PREFIXusermeta.meta_value from $TABLE_PREFIXusers join $TABLE_PREFIXusermeta on $TABLE_PREFIXusers.id = $TABLE_PREFIXusermeta.user_id and meta_key='$TABLE_PREFIXcapabilities' and meta_value != 'a:1:{s:10:"subscriber";b:1;}';
The blog post they created had a couple of links to Telegram which could presumably be used to contact them. If anyone involved in computer security wants a copy of the original post to do so then they can contact me by any of the usual methods.
I am interested in communication with the attacker if they wish, Telegram is not a service I use but I presume that anyone capable of doing this sort of attack is also capable of finding other ways of contacting me.
I have idly considered changing to a static site generator, here is a good list of static site generators [3].
I have also idly considered other platforms for blogging such as Lemmy. I don’t know if Lemmy is better than WordPress for security and updates, but there are plenty of free instances running where it wouldn’t be an issue I have to work on.
It’s been 15 years since my blog server was cracked by a trojaned ssh client [4]. At least this time it was only one service that was compromised.
Short term dumb, long term smart [Seth's Blog]
Culture provides scaffolding, and learning happens over time.
The result is that we’re each capable of extraordinary feats. People can fly planes, ski down mountains, figure out how to use Photoshop or a solve a crossword puzzle.
But…
Most people only exhibit this skill when there’s months or years of exposure combined with cultural forces that educate and normalize the behavior.
When things are new, we’re often terrible at it.
People didn’t know how to use the microwave oven, the dishwasher or the buttons on the car radio when they were first introduced.
Designers need to pay very careful attention to new user frustration and feedback. But far more than that, they need the patience to invest in cultural awareness that can lead to learning that happens over time.
Russell Coker: AMD Video Drivers, LLMs, and Debian Kernels [Planet Debian]
For a while I’ve been having issues with AMD GPUs, video locking up periodically. I blogged about this late last year but I first had noticeable problems early last year [1]. The problems hadn’t only concerned my workstation but also my home server which is also used as a workstation. I’ve recently upgraded my machines to Debian/Testing, my home server has been generally OK but my workstation has been crashing a lot. Every second day when on kernel 7.1.6 and then when on 7.1.7 it crashed at least once a day.
The AMD GPUs I have are “[AMD/ATI] Baffin [Radeon RX 460/560D / Pro 450/455/460/555/555X/560/560X] (rev e5)” in my main desktop workstation, “[AMD/ATI] Lexa [Radeon 540X/550X/630 / RX 640 / E9171 MCM] (rev c1)” in my build server, and “[AMD/ATI] Baffin [Radeon RX 460/560D / Pro 450/455/460/555/555X/560/560X] (rev cf)” in my home server. They aren’t new GPUs, but also aren’t really old and they all support 4K and better resolution.
When I googled the errors I was seeing I found nothing useful. On the suggestion of a friend I tried asking ChatGPT. Generally I don’t recommend asking LLMs about such things, but it can be a last resort as long as you know what you are doing. ChatGPT asked me to run a number of commands to get information for it to make more informed decisions. I know that the output of lspci and similar commands isn’t a risk, but a novice could be tricked into running commands that expose sensitive data.
ChatGPT did give me some useful information, not a solution but an indication that the problem was due to driver bugs.
Debian/Experimental is for packages that are expected to have problems and generally aren’t recommended even for the people who usually use Debian/Unstable. It’s commonly used for packages that are needed to develop other packages, EG new libraries that aren’t fully usable but which are needed to package newer versions of applications.
I upgraded my workstation to the Debian/Experimental kernel 7.2~rc7-1~exp1 after having tried every other convenient option. Generally I wouldn’t recommend that anyone run an Experimental kernel without a really good reason, but crashing more than once a day is a fairly good reason. That kernel has now given me over 4 days of uptime on a system that previously wouldn’t last a day. I installed it on my dual-socket build server that has an old AMD GPU in it for test purposes and that also hasn’t crashed since. I installed it on my ML test machine which has an Intel B580 Battlemage GPU with 16G of VRAM and was repeatedly getting a kernel panic related to the GPU a few seconds after boot and now it also works correctly.
It seems that the 7.1.x kernels have bugs in the AMD video drivers and in some part of the code that affects Intel video drivers and that the bugs in question are fixed in the tree that will become 7.2. I would not recommend anyone who has a 7.1.x kernel working fine for them try 7.2 RC kernels at this time, but anyone who has GPU related problems (particularly Intel and AMD GPUs) should definitely test it out.
I also don’t recommend upgrading any system with an AMD GPU to Debian/Testing or Debian/Unstable at this time unless you are also prepared to install an Experimental kernel if it becomes necessary.
There are a several kernel log dumps related to this after the break (which won’t be in RSS feeds). This is mainly for Google so that other people who have such issues can get more useful results out of Google searches than I got.
Separate from the issue of whether commercial LLMs like ChatGPT can be useful for solving technical problems there is the issue of whether they are desirable. I think that we really don’t want people solving problems in FOSS systems with closed-source LLMs. This leads to loss of privacy, loss of the control users deserve to have over their own systems, and an implied promotion of non-fee software.
I think that the ideal would be to have a cross distribution effort to generate training data for a support LLM system which can then be further trained by each distribution for a greater emphasis on distribution specific issues.
2026-08-09T23:03:06.004792+10:00 xev kernel: amdgpu 0000:02:00.0: GPU fault detected: 147 0x00024802 2026-08-09T23:03:06.004792+10:00 xev kernel: amdgpu 0000:02:00.0: Process kscreenlocker_g pid 42037 thread kscreenloc:cs0 pid 42044 2026-08-09T23:03:06.004793+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x00000800 2026-08-09T23:03:06.004794+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x0F048002 2026-08-09T23:03:06.004795+10:00 xev kernel: amdgpu 0000:02:00.0: VM fault (0x02, vmid 7, pasid 130) at page 2048, write from 'TC0' (0x54433000) (72) 2026-08-09T23:03:06.008762+10:00 xev kernel: amdgpu 0000:02:00.0: GPU fault detected: 147 0x00004802 2026-08-09T23:03:06.008768+10:00 xev kernel: amdgpu 0000:02:00.0: Process kscreenlocker_g pid 42037 thread kscreenloc:cs0 pid 42044
2026-08-04T01:13:37.505839+10:00 xev kernel: ------------[ cut here ]------------ 2026-08-04T01:13:37.505859+10:00 xev kernel: amdgpu 0000:02:00.0: [drm] drm_WARN_ON_ONCE(cur_vblank != vblank->last) 2026-08-04T01:13:37.505862+10:00 xev kernel: WARNING: CPU: 6 PID: 210534 at drivers/gpu/drm/drm_vblank.c:362 drm_update_vblank_count+0x2f1/0x3c0 [drm] 2026-08-04T01:13:37.505866+10:00 xev kernel: snd_intel_dspcfg wmi_bmof rc_core snd_intel_sdw_acpi drm_ttm_helper uas realtek snd_usbmidi_lib snd_hda_codec ttm mdio_devres snd_hda_core snd_seq_midi drm_kms_helper usb_storage mc snd_hwdep libphy snd_seq_midi_event intel_uncore snd_pcm_oss i2c_algo_bit serio_raw snd_rawmidi pcspkr snd_mixer_oss i2c_i801 video snd_seq snd_pcm i2c_smbus lpc_ich snd_seq_device mei_me e1000e snd_timer mei snd tpm_infineon soundcore joydev bnx2 wmi button nfsd auth_rpcgss nfs_acl lockd grace sunrpc coretemp br_netfilter bridge stp llc sg ghash_clmulni_intel loop msr i2c_dev drm efi_pstore configfs nfnetlink ip_tables x_tables autofs4 btrfs blake2b_generic dm_crypt dm_mod raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx libcrc32c xor raid6_pq raid1 raid0 md_mod ext4 crc16 mbcache jbd2 crc32c_generic virtio_blk evdev hid_generic usbhid hid sd_mod xhci_pci xhci_hcd ahci ehci_pci ehci_hcd libahci crc32c_intel libata usbcore aesni_intel nvme psmouse scsi_mod gf128mul crypto_simd nvme_core cryptd 2026-08-04T01:13:37.505879+10:00 xev kernel: nvme_auth scsi_common usb_common efivarfs 2026-08-04T01:13:37.505880+10:00 xev kernel: CPU: 6 UID: 1008 PID: 210534 Comm: sshd-session Tainted: G D 6.12.88+deb13-amd64 #1 Debian 6.12.88-1 2026-08-04T01:13:37.505881+10:00 xev kernel: Tainted: [D]=DIE 2026-08-04T01:13:37.505883+10:00 xev kernel: Hardware name: Hewlett-Packard HP Z640 Workstation/212A, BIOS M60 v02.61 03/23/2023 2026-08-04T01:13:37.505884+10:00 xev kernel: RIP: 0010:drm_update_vblank_count+0x2f1/0x3c0 [drm] 2026-08-04T01:13:37.505885+10:00 xev kernel: Code: 48 8b 5f 50 48 85 db 75 03 48 8b 1f e8 68 eb 2b cf 48 c7 c1 70 3e cb c0 48 89 da 48 c7 c7 f9 6f cb c0 48 89 c6 e8 af d7 a6 ce <0f> 0b e9 4b fe ff ff 48 8b 4c 24 18 e9 31 fe ff ff 31 f6 48 85 db 2026-08-04T01:13:37.505887+10:00 xev kernel: RSP: 0000:ffffd3cc8681fca0 EFLAGS: 00010082 2026-08-04T01:13:37.505888+10:00 xev kernel: RAX: 0000000000000000 RBX: ffff8c6b42b13710 RCX: 0000000000000027 2026-08-04T01:13:37.505889+10:00 xev kernel: RDX: ffff8c89ef521788 RSI: 0000000000000001 RDI: ffff8c89ef521780 2026-08-04T01:13:37.505890+10:00 xev kernel: RBP: 0000000000000000 R08: 0000000000000000 R09: ffffd3cc8681fb20 2026-08-04T01:13:37.505891+10:00 xev kernel: R10: ffff8c8a6fef3628 R11: 0000000000000003 R12: 0000000000000000 2026-08-04T01:13:37.505892+10:00 xev kernel: R13: ffff8c6c07853828 R14: 0000000000000003 R15: 0000000000000000 2026-08-04T01:13:37.505893+10:00 xev kernel: FS: 00007ffaf2fd5880(0000) GS:ffff8c89ef500000(0000) knlGS:0000000000000000 2026-08-04T01:13:37.505895+10:00 xev kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 2026-08-04T01:13:37.505896+10:00 xev kernel: CR2: 00007fb1718c8000 CR3: 000000074521a004 CR4: 00000000003706f0 2026-08-04T01:13:37.505897+10:00 xev kernel: Call Trace: 2026-08-04T01:13:37.505898+10:00 xev kernel: 2026-08-04T01:13:37.505899+10:00 xev kernel: drm_crtc_accurate_vblank_count+0x41/0xc0 [drm] 2026-08-04T01:13:37.505900+10:00 xev kernel: dm_pflip_high_irq+0x155/0x330 [amdgpu] 2026-08-04T01:13:37.505901+10:00 xev kernel: amdgpu_dm_irq_handler+0x85/0x1f0 [amdgpu] 2026-08-04T01:13:37.505902+10:00 xev kernel: amdgpu_irq_dispatch+0xd2/0x230 [amdgpu] 2026-08-04T01:13:37.505903+10:00 xev kernel: amdgpu_ih_process+0x84/0x100 [amdgpu] 2026-08-04T01:13:37.505904+10:00 xev kernel: amdgpu_irq_handler+0x23/0x60 [amdgpu] 2026-08-04T01:13:37.505905+10:00 xev kernel: __handle_irq_event_percpu+0x4a/0x190 2026-08-04T01:13:37.505907+10:00 xev kernel: handle_irq_event+0x38/0x80 2026-08-04T01:13:37.505908+10:00 xev kernel: handle_edge_irq+0x8b/0x230 2026-08-04T01:13:37.505909+10:00 xev kernel: __common_interrupt+0x45/0xe0 2026-08-04T01:13:37.505910+10:00 xev kernel: common_interrupt+0x42/0xa0 2026-08-04T01:13:37.505911+10:00 xev kernel: asm_common_interrupt+0x26/0x40 2026-08-04T01:13:37.505912+10:00 xev kernel: RIP: 0033:0x7ffaf3c5fd7b 2026-08-04T01:13:37.505913+10:00 xev kernel: Code: 70 c7 00 66 0f 6e f8 c1 ef 02 66 0f 70 f7 e0 83 c7 01 66 0f ef ff 66 0f fa f2 0f 1f 44 00 00 f3 0f 7e 01 66 0f 6f ce 83 c6 01 <48> 83 e9 08 f2 0f 70 c0 1b 66 0f 6f e0 66 0f 6f e8 66 41 0f f9 c0 2026-08-04T01:13:37.505915+10:00 xev kernel: RSP: 002b:00007fff86a5e0e0 EFLAGS: 00000202 2026-08-04T01:13:37.505916+10:00 xev kernel: RAX: 0000000000008000 RBX: 0000562614a04050 RCX: 0000562614982ed8 2026-08-04T01:13:37.505946+10:00 xev kernel: RDX: 0000000000007fe2 RSI: 0000000000000fad RDI: 0000000000002000 2026-08-04T01:13:37.505948+10:00 xev kernel: RBP: 0000000000000000 R08: 000056261498ac40 R09: 0000000000008000 2026-08-04T01:13:37.505949+10:00 xev kernel: R10: 0000000000000066 R11: 0000000000007fe1 R12: 0000000000007efa 2026-08-04T01:13:37.505950+10:00 xev kernel: R13: 0000000000008000 R14: 0000000000008000 R15: 000000000000ffe0 2026-08-04T01:13:37.505951+10:00 xev kernel: 2026-08-04T01:13:37.505953+10:00 xev kernel: ---[ end trace 0000000000000000 ]--- 2026-08-04T01:55:40.844110+10:00 xev kernel: pcieport 0000:00:03.3: AER: Multiple Correctable error message received from 0000:00:03.3 2026-08-04T01:55:40.844130+10:00 xev kernel: pcieport 0000:00:03.3: PCIe Bus Error: severity=Correctable, type=Data Link Layer, (Receiver ID) 2026-08-04T01:55:40.844132+10:00 xev kernel: pcieport 0000:00:03.3: device [8086:6f0b] error status/mask=00000040/00002000 2026-08-04T01:55:40.844134+10:00 xev kernel: pcieport 0000:00:03.3: [ 6] BadTLP
2026-08-11T09:33:33.473855+10:00 xev kernel: amdgpu 0000:02:00.0: GPU fault detected: 147 0x00024802 2026-08-11T09:33:33.473871+10:00 xev kernel: amdgpu 0000:02:00.0: Process kscreenlocker_g pid 150905 thread kscreenloc:cs0 pid 150912 2026-08-11T09:33:33.473871+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x00000800 2026-08-11T09:33:33.473873+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x0F048002 2026-08-11T09:33:33.473873+10:00 xev kernel: amdgpu 0000:02:00.0: VM fault (0x02, vmid 7, pasid 63) at page 2048, write from 'TC0' (0x54433000) (72) 2026-08-11T09:33:33.473874+10:00 xev kernel: amdgpu 0000:02:00.0: GPU fault detected: 147 0x00004802 2026-08-11T09:33:33.473874+10:00 xev kernel: amdgpu 0000:02:00.0: Process kscreenlocker_g pid 150905 thread kscreenloc:cs0 pid 150912 2026-08-11T09:33:33.473875+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x00000800 2026-08-11T09:33:33.473876+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x0E048002 2026-08-11T09:33:33.473876+10:00 xev kernel: amdgpu 0000:02:00.0: VM fault (0x02, vmid 7, pasid 63) at page 2048, read from 'TC0' (0x54433000) (72) 2026-08-11T09:33:35.481863+10:00 xev kernel: amdgpu 0000:02:00.0: Dumping IP State 2026-08-11T09:33:35.481875+10:00 xev kernel: amdgpu 0000:02:00.0: Dumping IP State Completed 2026-08-11T09:33:35.481875+10:00 xev kernel: amdgpu 0000:02:00.0: [drm] AMDGPU device coredump file has been created 2026-08-11T09:33:35.481876+10:00 xev kernel: amdgpu 0000:02:00.0: [drm] Check your /sys/class/drm/card0/device/devcoredump/data 2026-08-11T09:33:35.481877+10:00 xev kernel: amdgpu 0000:02:00.0: GPU fault detected: 146 0x0110040c 2026-08-11T09:33:35.481877+10:00 xev kernel: amdgpu 0000:02:00.0: Process kscreenlocker_g pid 150905 thread kscreenloc:cs0 pid 150912 2026-08-11T09:33:35.481878+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x00000022 2026-08-11T09:33:35.481879+10:00 xev kernel: amdgpu 0000:02:00.0: VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x0E00400C 2026-08-11T09:33:35.481879+10:00 xev kernel: amdgpu 0000:02:00.0: VM fault (0x0c, vmid 7, pasid 63) at page 34, read from 'TC3' (0x54433300) (4) 2026-08-11T09:33:35.489845+10:00 xev kernel: amdgpu 0000:02:00.0: ring gfx timeout, signaled seq=5123619, emitted seq=5123621 2026-08-11T09:33:35.489853+10:00 xev kernel: amdgpu 0000:02:00.0: Process kscreenlocker_g pid 150905 thread kscreenloc:cs0 pid 150912 2026-08-11T09:33:35.489854+10:00 xev kernel: amdgpu 0000:02:00.0: GPU reset begin!. Source: 1 2026-08-11T09:33:35.493839+10:00 xev kernel: amdgpu 0000:02:00.0: [drm] ERROR Failed to initialize parser -125! 2026-08-11T09:33:35.737848+10:00 xev kernel: amdgpu: cp is busy, skip halt cp 2026-08-11T09:33:35.897842+10:00 xev kernel: amdgpu: rlc is busy, skip halt rlc 2026-08-11T09:33:35.897852+10:00 xev kernel: amdgpu 0000:02:00.0: BACO reset 2026-08-11T09:33:36.485849+10:00 xev kernel: amdgpu 0000:02:00.0: GPU reset succeeded, trying to resume 2026-08-11T09:33:36.485859+10:00 xev kernel: amdgpu 0000:02:00.0: [drm] PCIE GART of 256M enabled (table at 0x000000F402000000). 2026-08-11T09:33:36.485860+10:00 xev kernel: amdgpu 0000:02:00.0: VRAM is lost due to GPU reset!
Aug 11 17:01:47 ami kernel: ------------[ cut here ]------------ Aug 11 17:01:47 ami kernel: xe 0000:23:00.0: [drm] DMC 1 mmio[0]/0x5f074 incorrect (expected 0x96fc0, current 0x0) Aug 11 17:01:47 ami kernel: WARNING: drivers/gpu/drm/i915/display/intel_dmc.c:696 at assert_dmc_loaded+0x275/0x430 [xe], CPU#0: kworker/0:3/215 Aug 11 17:01:47 ami kernel: Modules linked in: intel_rapl_msr intel_rapl_common intel_uncore_frequency intel_uncore_frequency_common xe(+) skx_edac snd_h> Aug 11 17:01:47 ami kernel: msr i2c_dev configfs efi_pstore efivarfs autofs4 btrfs libblake2b raid6_pq xor mpt3sas raid_class scsi_transport_sas megarai> Aug 11 17:01:47 ami kernel: CPU: 0 UID: 0 PID: 215 Comm: kworker/0:3 Not tainted 7.1.7+deb14-amd64 #1 PREEMPT(lazy) Debian 7.1.7-1 Aug 11 17:01:47 ami kernel: Hardware name: HP HP Z4 G4 Workstation/81C5, BIOS P61 v03.00 04/15/2026 Aug 11 17:01:47 ami kernel: Workqueue: sync_wq local_pci_probe_callback Aug 11 17:01:47 ami kernel: RIP: 0010:assert_dmc_loaded+0x291/0x430 [xe] Aug 11 17:01:47 ami kernel: Code: 24 10 e8 f2 e5 a3 ce 48 8d 3d bb 85 0d 00 8b 54 24 0c 45 89 e9 45 89 e0 48 89 c6 52 8b 4c 24 2c 51 8b 4c 24 30 48 8b 54> Aug 11 17:01:47 ami kernel: RSP: 0018:ffffd27ac0b87b80 EFLAGS: 00010282 Aug 11 17:01:47 ami kernel: RAX: ffffffffc1743dfd RBX: ffff8c5b80e54000 RCX: 0000000000000001 Aug 11 17:01:47 ami kernel: RDX: ffff8c5b81df5a10 RSI: ffffffffc1743dfd RDI: ffffffffc1605860 Aug 11 17:01:47 ami kernel: RBP: ffff8c5b86955000 R08: 0000000000000000 R09: 000000000005f074 Aug 11 17:01:47 ami kernel: R10: 0000000000000000 R11: 0000000000091050 R12: 0000000000000000 Aug 11 17:01:47 ami kernel: R13: 000000000005f074 R14: 0000000000000001 R15: 0000000000000000 Aug 11 17:01:47 ami kernel: FS: 0000000000000000(0000) GS:ffff8c673e172000(0000) knlGS:0000000000000000 Aug 11 17:01:47 ami kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 Aug 11 17:01:47 ami kernel: CR2: 00007ffed1fdcd00 CR3: 0000000ae942a003 CR4: 00000000003706f0 Aug 11 17:01:47 ami kernel: Call Trace: Aug 11 17:01:47 ami kernel: Aug 11 17:01:47 ami kernel: intel_dmc_enable_pipe+0xe4/0x290 [xe] Aug 11 17:01:47 ami kernel: ? drm_crtc_vblank_reset+0x4d/0x120 [drm] Aug 11 17:01:47 ami kernel: intel_modeset_setup_hw_state+0xb50/0x1e10 [xe] Aug 11 17:01:47 ami kernel: ? intel_display_driver_probe_nogem+0x138/0x1a0 [xe] Aug 11 17:01:47 ami kernel: intel_display_driver_probe_nogem+0x138/0x1a0 [xe] Aug 11 17:01:47 ami kernel: xe_display_init_early+0xb2/0x140 [xe] Aug 11 17:01:47 ami kernel: xe_device_probe+0x3c8/0xb50 [xe] Aug 11 17:01:47 ami kernel: ? xe_pm_init_early+0x152/0x160 [xe] Aug 11 17:01:47 ami kernel: xe_pci_probe+0xc26/0x1150 [xe] Aug 11 17:01:47 ami kernel: local_pci_probe+0x3e/0x90 Aug 11 17:01:47 ami kernel: local_pci_probe_callback+0x16/0x20 Aug 11 17:01:47 ami kernel: process_one_work+0x19d/0x3a0 Aug 11 17:01:47 ami kernel: worker_thread+0x1af/0x320 Aug 11 17:01:47 ami kernel: ? __pfx_worker_thread+0x10/0x10 Aug 11 17:01:47 ami kernel: kthread+0xe3/0x120 Aug 11 17:01:47 ami kernel: ? __pfx_kthread+0x10/0x10 Aug 11 17:01:47 ami kernel: ret_from_fork+0x2b2/0x340 Aug 11 17:01:47 ami kernel: ? __pfx_kthread+0x10/0x10 Aug 11 17:01:47 ami kernel: ret_from_fork_asm+0x1a/0x30 Aug 11 17:01:47 ami kernel: Aug 11 17:01:47 ami kernel: ---[ end trace 0000000000000000 ]---
Scott L. Burson: Teaser: CL-Torch! [Planet Lisp]
I have been working for the past few months on CL-Torch, a Common Lisp equivalent of PyTorch. Like PyTorch, CL-Torch calls LibTorch — the C++ library that does most of the numerics — via FFI.
It's nowhere near done, but I need to set it aside for a few months to work on something else, so I thought I would publish what I have and let people play with it.
Claw (Common Lisp Auto-Wrap;
no relation to OpenClaw, which it preceded by years) is Pavel
Korolev's FFI wrapper generator; it includes IFFI, his Intricate
Foreign Function Interface, which deals with C++ overloading.
This is what I have used to create CL-Torch.
I had initially looked at SWIG, which had had Common Lisp support
until its 4.0 release, but on closer examination it didn't look
like a good choice; the Common Lisp generation apparently never
worked well. I then tried C2FFI, and in retrospect, maybe I
could have gotten it to work, but it doesn't have any explicit C++
support; I would have wound up with C++ "mangled names" (encoded
function names including namespace and parameter type information)
in the CL-Torch sources. Poking around a little more, I found
these three
blog
posts by
Pavel introducing Claw. I also noticed that Pavel already had
a Claw-Torch
project; although he hadn't gotten very far on it and it was years
out of date, it was still the best starting point I had found.
But I didn't realize what I was getting into. Pavel describes
Claw as "BETA quality", emphasizing that it isn't ready for
general use, but actually I think even this description is too
generous; in the state I found it in, I would describe it as alpha,
and early alpha at that. I spent several weeks fixing and
improving it so that it could handle LibTorch, which in fairness,
is pretty much a torture test for an FFI generator — it uses
features of C++ I didn't even know existed. One of the most
problematic was constructor inheritance. Did you know
constructors could be inherited? I didn't either, but the
feature went in in C++11. Anyway, LibClang, which Claw uses
to analyse the C++ code it's wrapping, doesn't expose inherited
constructors in a convenient way; the information is there, but you
have to dig it out. So I had to learn a bunch about the
internals of Claw, including libresect, the C library that
interfaces directly with LibClang. This knowledge eventually
came in quite handy, though, as I made more fixes and changes to
Claw, ultimately dropping 14 PRs on
Pavel. — So far, he hasn't merged any of them, and I
don't know whether he's going to, so for CL-Torch, if you want to
regenerate the FFI bindings, you'll need to use my forks of
Claw and its
subprojects cl-resect
and libresect.
One significant improvement I made to
Claw was to add exception handling. Exceptions thrown by
LibTorch code are caught and automatically translated to Lisp
errors.
At the time Pavel wrote Claw, passing structs by value required
libffi, which, he noted in a blog post, is quite slow. So
Claw passes all structs by pointer. I see that efficient
passing of structs by value has been recently added to
SBCL, but I don't think it's worth modifying Claw to use it, as
that would change how the generated wrappers have to be called, and
thus wouldn't be portable.
What might be worth doing, eventually, is making IFFI allocate
temporary objects on the stack; it currently doesn't. But for
CL-Torch, the benefit is almost certainly going to be undetectable;
LibTorch calls, in normal use, spend the vast majority of their
time doing tensor arithmetic; allocating and freeing small objects
is negligible by comparison.
Anyway, my overall impression of Claw is that, with my improvements, it works pretty well. If you have another C++ library you'd like to call from CL, I think you should give it a try. It needs quite a bit more documentation, but if you look at what I've done for CL-Torch, that will give you some clues. Beyond that, you'll have to do what I did: read the source 😸
For the purpose of a project like CL-Torch, LibTorch has two major pieces. One is the tensor arithmetic library ATen (with its lower-level component C10). This library has over a thousand operations, although many of these are variants of one another; for instance, many operations have both functional and in-place versions, the latter updating one of its argument tensors rather than allocating a new one. The C++ and Python APIs for these functions are auto-generated from a description file, aten/src/ATen/native/native_functions.yaml.
I have written a generator that produces CL versions of these APIs from the YAML descriptions. It's not finished — there are cases it doesn't yet handle — but it's currently succeeding on 645 of the 1089 candidate functions, so there is a significant amount of working functionality here. (In some cases, not all features of the function are supported yet.) If you just want to do a bunch of tensor arithmetic, there may be enough here to do what you want. It's not heavily tested, but there are enough tests to reasonably assure me that the code generation is being done correctly, at least in most cases.
The second major piece of LibTorch is the high-level neural net API. Here CL-Torch is less far along, but this is also a much easier part to work on. (I think. I haven't tested any of the code I've written for this part.) So if you want to add CL-Torch code for some of this part of the API, I think you should be able to do that. (You could even try using an LLM for this — I haven't, yet.) One thing you should know, if you want to work on that, is that there are two levels within this part of LibTorch: the torch::nn::functional:: code is the slightly lower level, that implements the operations of neural-net layers but without keeping state, and in particular, without maintaining trainable parameters. I have started hand-translating these (they're mostly quite simple) in Code/torch-functional.lisp.
The higher level is the module API, which I have just barely started in Code/torch/modules.lisp. This API implements parameters and training. To actually train a network, you'll also need an optimizer; I haven't started on these.
Urgent: Negotiating lower prices on prescription medicines [Richard Stallman's Political Notes]
US citizens, call on the Center for Medicare and Medicaid Services to expand the practice of negotiating lower prices on prescription medicines. We need to counteract massive lobbying by Big Pharma.
Deadline for commenting, Aug 17!
Urgent: Save funding for Medicaid [Richard Stallman's Political Notes]
US citizens: call on your senators to save funding for Medicaid.
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.
E-scooters dangerous to ride [Richard Stallman's Political Notes]
E-scooters turn out to be especially dangerous to ride — much more dangerous than bicycles.
Magats' efforts to seize power [Richard Stallman's Political Notes]
Comparing the magats' efforts to seize power, and embed themselves irreversibly in it, with the efforts of Nazis in 1933.
Making Anthony Fauci the enemy [Richard Stallman's Political Notes]
*Why making Anthony Fauci the enemy will harm US public health for years.*
Wildfire betting amid warnings of arson risk [Richard Stallman's Political Notes]
*US senators urge crackdown on wildfire betting amid warnings of arson risk.*
Betting on other government actions is dangerous too, because it can offer magats the temptation to burn down good government.
Comparisons of wildfire crisis to second world war [Richard Stallman's Political Notes]
*While many leaders compare the wildfire crisis to the second world war, governments fail to adopt the real lessons of pre-emptive wartime action.*
Extreme weather and extreme climate are *attacks on our soil. They are a call to mobilize.* But governments today are barely beginning to mobilize for full action to slow and stop the slowly developing climate disaster.
I conjecture that the reason they don't do this is the presence of a highly influential group of traitors: the fossil fuel industry.
*Human-driven climate crisis fuels Canada’s deadly wildfires, study finds.*
UK restaurants and pubs banning snooper glasses [Richard Stallman's Political Notes]
Many restaurants and pubs in the UK have banned wearing of snooper glasses. Theaters, too.
Israel accused of knowingly attacking journalists [Richard Stallman's Political Notes]
*Human Rights Watch and Amnesty* accuse Israel of knowingly attacking journalists in Lebanon — a war crime.
Pakistan prohibits reporting internationally [Richard Stallman's Political Notes]
Pakistan has prohibited anyone from reporting internationally on what happens there. It has also blocked access to Al Jazeera's web site from Pakistan.
Model for turning richly funded campaign against rich backers [Richard Stallman's Political Notes]
*[Progressive Democrat] Abdul El-Sayed offers a model for successfully turning a non-progressive opponent's richly funded campaign against that opponent's rich backers, and thus against the opponent.
Butterfly species shifting habitats [Richard Stallman's Political Notes]
Many butterfly species are shifting their habitats — some as fast as 135km per year. Some species' habitats have expanded, and others have shrunk.
All of this measures the rapidity of potentially dangerous ecosystem changes caused by global heating.
Droughts in Europe [Richard Stallman's Political Notes]
*[In Europe,] droughts that were once a century now happen every year, and the impact on wildlife, industrial output and culture itself is catastrophic.*
Underlying the random fluctuation from year to year, the trend (as long as global heating continues) is to get worse.
The bully's new tariffs [Richard Stallman's Political Notes]
Joseph Stiglitz: the bully's new tariffs, supposedly meant to pressure for an end to forced labor, hypocritically omit two countries that do enormous amounts of that: China and the US.
We launched a war on nature [Richard Stallman's Political Notes]
Rebecca Solnit: *We launched a war on nature. Now we are in a climate war zone.
George Monbiot: *Murderous heat, an endangered food supply and no [efforts to slow the disaster]: this is the life the radical right wants you to have.
Cockroach Janata party [Richard Stallman's Political Notes]
How the Cockroach Janata Party overcame the power of Modi's captive mass media.
El Niño could push 50m people into acute hunger [Richard Stallman's Political Notes]
*El Niño could push 50m people into acute hunger before end of next year.*
If so, it will mean that the disasters that climate scientists have forecast for many years are arriving.
Children Of The Corn [Penny Arcade]
Ronia got back from Brand New Day with a lot of questions about Jean Grey, and it seemed like I might have to make a Powerpoint deck or something to paper over the fact that I failed as a father - as a man. There's a lot of comic shit I haven't told her, I guess. There's a lot of it out there! I chose the path of curation; we did not come to rest on any of this quotidian mutant fare When those assholes at Marvel finally get around to Ryan North' and Erica Henderson's run on The Unbeatable Squirrel Girl, Ronia will know Goddamn near everything. The only comfort I have otherwise is that Gabriel failed in this task also. Worse probably! Way worse I bet, when you really think about it altogether.
felicia day and i want to play more games together [WIL WHEATON dot NET]
About twenty years ago, when I was in the Saturday show at the ACME Comedy Theatre, a friend of mine who I wrote with for the show encouraged me to check out one of her students who was in the Sunday show.
I remembered when she and I were in the Sunday show, how exciting and validating it felt when the upperclassmen in the Saturday show came to watch us. I knew that some of the Sunday show performers would be moving into the Saturday show soon, and I wanted to see who I would possibly be writing with or for in the coming months.
So I went to the show, and this woman who my friend told me about was absolutely hilarious. In a show that had a solid lineup of great sketches, she stood out to me. So I made a note that this was someone I wanted to do comedy with, and I started making little notes in my book when ideas arrived.
We never did a Saturday show together, as circumstances outside of our control did their thing, but … oh, I don’t know, maybe around six months later, or so? Less than a year, at least. It isn’t important. At some point after that, my friend, Kim, emailed me about a show she had done with that woman we both loved. It was a little thing they did for five bucks, without asking for permission, entirely on their own. It was about gamers who played something like WoW, meeting up in person for the first time, and they are all the most outrageous characters you’ve ever seen. She thought that I’d love it. She asked me to take a look at it, and maybe post about it on my blog, if that felt right. I looked at it, thought it was so funny and so original, and couldn’t write a post about it fast enough.
For the one of you in the world who hasn’t yet gotten there: The show was The Guild, and the brilliant woman in the Sunday show was Felicia Day.
About a year later, I’d met Felicia a few times, and though we weren’t yet friends, I admired and respected her immensely. I loved how she was doing what she wanted to do, on her terms, entirely supported by the audience she was building one person at a time. Think back to 20 years ago, it’s 2006, and everything is growing online. Indie creators doing indie projects were starting to rewrite popular media and popular culture for a generation. I was a tiny part of that as an Ur-blogger, and Felicia was an enormous part of that as the creator of The Guild (and future founder of Geek and Sundry). It was such an exciting time! We all felt like power was shifting away from gatekeepers, entertainment was getting more diverse, and creative nerds were ascendant. God, I miss that.
After one season, I had become a legit fan of The Guild. I loved the story, I thought the actors were hilarious (I could listen to Jeff Lewis be aggrieved for a thousand hours), and I was just so fucking excited to see someone I didn’t really know, but who I was very aware of, doing truly great, transformative work. It was inspiring as hell to me, and I loved having a front row seat to all of it.
Around this time, Felicia reached out and asked if she could take me to coffee and pitch me a role in season 3. I could have saved us the drive and the cost of some VERY bougie coffee and just said “I’m in and don’t need to hear anything else,” but I like coffee and I wanted to sit down with her, get to know her a little better.
We went to this place in Silverlake that I can never recall the name of, but is still there, where we paid something outrageous for two cups of coffee. I think it was like eight dollars, which, believe it or not, was a lot to pay for coffee at one time. To this day, we howl with laughter when we recall the phrase on the menu: “We invite you to enjoy the purest expression of the bean.” I can’t remember what I had for breakfast yesterday, and I’m usually pretty fuzzy on what day of the week it is, I can’t recall what the “purest expression of the bean” was on that fateful morning, but I will never forget the invitation to discover it. I’m giggling right now.
Felicia started her pitch. “So I want to introduce a rival guild, and I thought you would be great to play the leader,”
“Okay, tell me when to show up.”
“…I’m not done.”
“Oh. Go on.”
“He’s a douchebag in a kilt.”
“…”
“That’s it.”
“Okay, tell me when to show up.”
The rest, as many of you know, is award-winning, online-media changing, paradigm-shifting history that I am intensely grateful and proud to be part of.
Sooner than either of us expected (well, sooner than I expected. Felicia and I have never talked about her expectations, so I’m going off of how I recall the vibe at the time), Felicia was one of a few creators who were invited by Google to pitch a channel lineup for a YouTube thing that was meant to be a sort of patronage, an effort to introduce a new generation of creators and their content to the world. I think it was a tentative effort to put YouTube up against traditional television and cable. Interestingly, I recall that they gave money to some established studios and networks (money they didn’t need) and those studios and networks didn’t do a single frame of original content. They used YouTube as a dumping ground for their libraries, attracted no audience, and were all gone in a matter of months. As grateful as I am to Google for its early patronage of not just Felicia, but other creators I love, I wonder if that money could have been more wisely invested? Maybe an indie creator who just missed the cut in favor of some legacy company would have done something cool with it.
If my memory is correct, Felicia’s channel, Geek & Sundry, was one of the only channels that Google reinvested in at the conclusion of the original funding effort. None of the legacy companies returned. I remember how great it felt to survive that. It made me feel like we were doing something right, and these old legacy companies just fundamentally didn’t get it. It felt like I was part of a new space that I’d helped create, an expansive, growing space for people like us to make the things we wanted to see, to highlight and celebrate our creative friends and the artists we loved, to reach out to an audience that we were part of, that was bored to death the the legacy stuff. It didn’t last long, but it was magical while it did. And there is some of that magic in the air again, but I’m getting ahead of myself.
So you probably know that Felicia created Geek & Sundry, and if you know that, you know that we created Tabletop, together, and that we did four incredible seasons of the show, plus an RPG spinoff called Titan’s Grave, before a legacy company bought us, fucked everything up, set all the money on fire and destroyed what we built, and confirmed for all of us involved that it’s better to remain independent, no matter how great their pitch is, because legacy companies are full of people who do one thing very well, and it isn’t managing online communities, nurturing indie creators, and patiently allowing an enthusiastic audience to organically grow over time.
The sale and subsequent destruction of what we worked so hard to build (extending beyond the programming) was deeply demoralizing for me. Not owning the rights to what we created has allowed Legendary to take everything we made, stuff it in a box, and put it in the corner of a basement somewhere. When I tried to license it, or buy it back, they refused to sell. Weirdly, it was very important to someone there that I know the company considers Tabletop a dead property that they will never do anything with. So even though I could potentially do something cool with the thing I created, and pay them for the privilege of taking all of the risk, they have no intention of ever doing anything at all with it, they’re going to sit on it and never do anything with it. It is a dead parrot. They never gave a reason that makes sense, so I’m going to presume it’s either spite, or standard executive fear that something someone killed could come back and be a huge success without them.
But before all of that, for the entire time Felicia and I were making things together, it was the best thing, ever. The joyful memories, the difference we made in the world, the boardgame renaissance we helped instigate, and the hundreds of thousands of new gamers we helped create all come back into my mind all the time. I’m so proud of us, so grateful that we did it, and that we did it well. I genuinely loved doing Tabletop, and I genuinely love working with Felicia.
And because the world is on fire right now like it hasn’t ever been in my lifetime, I feel called to do what I do best: entertain you, and give you something to enjoy with people you love, while we all do what we can do get through it. When Felicia told me about Kickstarting the movie and possibly adding our original show as a stretch goal, I swear to all the gods I felt that magic in the air all over again. I could smell it, I could taste it. I could see it, shimmering at the edges of my vision. It was, like, right there, just begging me to jump back in and take a swim.
So I did, and that’s why Felicia and I are getting the band back together for a limited series that will feature us playing games, together. Let me tell you all about it!
Felicia is Kickstarting a reunion movie called The Guild: Ren Faire’d, which is exactly what it sounds like. It’s been massively successful, and is maybe on its way to becoming the top earning crowdfunded movie in history. It’s incredibly exciting for all of us who know and love Felicia, and it’s especially exiting for me, because we are in stretch goal territory, which means not only do we all get The Guild movie I want to see, we are also now building up funds to produce a show where Felicia and I pick a theme, share things we love around the theme with each other, like books, music, movies, recipes, podcasts, etc., and then play a game with some friends that kind of fits the theme. We are calling the show Conludo (that’s Latin for “play together” because Felicia has a degree and I am notoriously bad at naming things)
A big part of the show’s focus is how much joy there is in curating things for each other around a theme, in discovering our new favorite things, and sharing them, on our way to a game. For example, I love a game called Rock Hard: 1977. It’s a heavily-themed resource management game where you are a hopeful rockstar in the 70s, trying to make your way through the clubs, to the radio, and, ultimately, the big stadium show. So this episode’s theme would be music or something about music. To set the mood, I’d probably bring a book I love, like Meet Me In The Bathroom, or Under The Big Black Sun. I may bring in a record, like the new Sincere Engineer release, Probable Claws, (that I’m on!) or Who Let The Dogs Out, from Lambrini Girls. Maybe I’d pitch going to a punk show together, or watching Decline of Western Civilization together, something like that. And part of what’s fun about this is that I don’t think Felicia likes punk the way I do, if at all, so I’d almost certainly be exposing her to something new, and I have no idea how she will respond. We’re still refining it, but you get the idea, right?
It’s important to me that I set expectations. I have told you what this is, now I need you to know what this is not. This isn’t Tabletop Redux, or Son of Tabletop, Abbot And Costello Play on Tabletop, Tabletop Strikes Back, or Tabletop 2: 2Table 2Top. This is its own thing, and it will be (legally distinctly) different from what we did with Tabletop. The North Star of that series was “Create More Gamers” by showcasing some of the greatest games of the moment, as well as some timeless classics, around a table of interesting people having fun together. I’m refining the language, but the North Star for Conludo is “Celebrate Sharing and Playing Games With Friends.” It’s more of a hang out, than it is a how to. It’s a celebration of gaming culture, going as far back as we want to go. We aren’t limited to new games, and I have at least one game that I love, that is out of print, that wouldn’t qualify for Tabletop, that I will bring to Conludo, because this is a fundamentally different show, and that means I can.
I’m so excited to do this. I’m so excited to revisit a space that I haven’t spent much time in for almost a decade, after living there for most of my life. I’m super excited to do it with one of my best friends and favorite creative partners.
The Kickstarter ends on August 21, with a massive livestream that I think is planned for around six hours, on Felicia’s Twitch thingy. As I am writing this, backers have pledged 4.7 million dollars (2.3 million in Itchy and Scratchy dollars) with a little over 32,000 individual backers toward the movie and Conludo. Felicia would love to get past 5.7, which would put her in first place of all time, past Veronica Mars. That’s a big ask, but I’d love to help her dream come true. Will you join me?
I’m Wil. I write this blog, I host It’s Storytime With Wil Wheaton, and I co-host the official companion podcast, with Felicia, for Stuart Fails to Save The Universe. Thanks for reading. If you would like to get my blog updates in your inbox, here’s the sign up thingy:
Friday Squid Blogging: Searching for the Colossal Squid [Schneier on Security]
Fascinating video about searching for life undersea. The video basically makes the point that our bright white searchlights are scaring everything away, and that red light is more neutral. That, plus bait to attract sea creatures, is teaching us a lot about what’s going on down there. Lots of footage of giant squid, and speculation about the colossal squid. Worth watching.
As usual, you can also use this squid post to talk about the security stories in the news that I haven’t covered.
The worst PDA of all time [OSnews]
Today, you can get low-quality knockoffs of just about any popular smartphone on sites like AliExpress or Temu, whether they be iPhones, Galaxy phones, or whatever else. They have terrible build quality, bottom-of-the-barrel components and specifications, and all run outdated versions of Android – badly. At the same time, various consumer electronics brands, once popular in a bygone era, sell the rights to their brand name to unknown companies, who then put these brands on generic hardware to give their products a sheen of legitimacy. That’s why today, you can still buy Nokia smartphones, Polaroid cameras, and low-effort Hi-Fi equipment from various once-respected brands.
None of this is new, however. In the late ’90s and early 2000s, companies were already doing the same thing. In fact, there’s one device from this era which combines both business practices – it’s both a cheap knockoff of a wildly successful device, and it carries a once-revered brand name. Also, just to add some juice, this story involves stolen source code.
Let’s take a look at the worst PDA of all time, the Olivetti daVinci.
➡️ Donate through
Ko-Fi ➡️ Donate through SEPA transfer*
➡️ Buy
merch from our
store ➡️
Why a fundraiser?
€5000
incentive: Make me use Windows 11 for a month (the
results were not great)
> €10000: Video tour of my office and my
computers/devices collection <
€15000: Buy a Mac and use macOS for a month (and review
it)
€20000: I get an OSNews tattoo
*Name: Thom Holwerda – IBAN: SE08 8000 0820 1684 4657 8414 – BIC: SWEDSESS
In 1997, Palm launched the Palm Pilot, and it and its successors proved to be a massive hit. Where countless before it had failed, Palm found the magic formula to make pocket computing work. I wrote an in-depth article about Palm over 13 years ago which goes into much (much) more detail, but the reason the Palm Pilot succeeded where things like the Newton, PenPoint OS, and Windows for Pen Computing failed, is that Palm’s founder, Jeff Hawkins, realised that they were competing with paper, not with desktop computers. Instead of trying to shove the capabilities of a full personal computer into a (barely) pockatable device, a pocket computer had to be as fast and convenient as paper, and therefore extremely strict about which features to add, and which to omit.
To this day, the entirety of smartphone computing stands on the shoulders of Palm. Palm’s ideas, implementations, approaches, paradigms, and even people were absorbed by Apple and Google, where they shaped both iOS and Android. The phone you’re looking at right now has a ton of Palm DNA in it, still. After all, you’re still using the homescreen-with-apps paradigm Palm already perfected in the late ’90s and early 2000s.
The success of the Palm Pilot and its successors did not go unnoticed. Microsoft, most prominently, felt incredibly threatened by Palm’s success:
The success of Palm’s products got the attention of Microsoft, and the company pretty much announced it was going to crush Palm. According to Hawkins, Microsoft had a sales conference, where, at some point, a big target appeared on the projector screen, with the Palm logo dead in the centre of it: “we are going to crush and kill these guys”, was the central message. Hawkins recalls that he got condolence letters after that, stating things like “Sorry Jeff. Too bad.”
↫ Thom Holwerda
While Microsoft proved to be unable to “kill and crush” Palm, it did manage to build a relatively successful business selling PDAs running various incarnations of Windows CE. Together, Palm and Microsoft dominated the PDA market pretty much throughout its entire existence, and while the market was a mere fraction of the smartphone market of today, other companies still wanted a piece of this pie too. One of these companies was Olivetti, a storied Italian company with a long history making typewriters, computers, and other electronics.
I’m not going into detail about Olivetti’s history, but the company was renowned for its attention to design, creating iconic products like the Lexikon 80, Lettera 22, Elea 9003, Programma 101, and so, so many more. Olivetti also entered the personal computer market, first with a variety of custom machines featuring Z80 and later Motorola 68000 processors running a variety of custom operating systems developed by Olivetti (including its own UNIX variant, X/OS). After a few machines using MIPS and Alpha processors in the early ’90s, the company would eventually focus entirely on Intel-based PCs (including this amazing failure) running Windows. Like so many other computer makers from that era, Olivetti eventually left the PC business by selling it off in 1997.
To this day, Olivetti PCs tend to cost more on the used market than those from other brands, despite no technical merits dictating so.
At around this time, our current story begins. Seeing the success of the Palm Pilot and the emergence of copycat devices running Microsoft’s Windows CE, Olivetti wanted in on the action. And so, in the late ’90s, the company introduced the Olivetti daVinci, a line of PDAs whose software looked suspiciously like Palm OS. There’s not a ton of information out there about the development history, but it seems that while Olivetti designed the hardware, it contracted the development of the operating system out to a company from Hong Kong, Echolink Design.
And this is where things went horribly wrong for Olivetti. The software Echolink Design developed for the daVinci didn’t just look like Palm OS, it was Palm OS – at least, according to Palm. After being on the market for about a year, the Palm Pilot maker, then a subsidiary of 3Com, filed for an injunction, alleging that the daVinci operating system designed by Echolink Design contained actual Palm OS source code. In addition, Palm also filed suit against CompanionLink Software, the company that developed the Outlook synchronisation software for the daVinci. Palm won handily, and within a day of the filing, temporary restraining orders were put in place on both Olivetti and CompanionLink, stopping sales of the daVinci and its software dead in its tracks.
It seemed to have been a pretty clear-cut case. From The Wall Street Journal at the time:
U.S. District Judge James Ware ruled Olivetti’s Royal daVinci organizer contains software that appears to have been copied from the operating system for 3Com’s Palm organizers. Judge Ware said a review by a software expert found the daVinci software contains private Palm code and even grammatical mistakes that appear to have been “copied verbatim.”
↫ Wall Street Journal Staff Reporter
It’s difficult to ascertain what code, exactly, was stolen, but my personal educated guess is that it probably involved Palm’s unique Graffiti handwriting recognition system. Graffiti actually predates the first Palm Pilot, and was available on a variety of non-Palm devices; it doesn’t seem entirely unlikely to me that the code for it escaped containment that way, eventually finding its way to Echolink Design. I’m just guessing here, though, as I can’t seem to find any of the original court documents concerning the case.
In a bind, Olivetti claimed the copied code represented less than 2% of the operating system’s code, and set about to release a new version of the software for the daVinci.
And so we end up at the device I have in my collection. Several
years ago, I bought a boxed version of the Olivetti daVinci DV3,
including all of its original accessories for a pittance on eBay,
and I’ve been fascinated and repulsed by this device ever
since. It looks like a cheap Palm knockoff, and it feels like one
too; the hardware is made out a really unpleasant form of plastic,
with buttons worse than what you find on the cheapest possible
pack-in remote control. The case feels creaky and unrefined, like
the cheapest possible children’s toy.
The display has a resolution of 128×99, much lower than the 160×160 of even the first Palm Pilot, and it’s incredibly dim and hard to read without the backlight on; even with the backlight on, it’s difficult to read anything. Worse yet, the various hardware tap targets on top of and at the bottom of the display are not backlit at all, making them unreadable in all but the most illuminated environments. Considering you need these buttons a lot, it’s a major stumbling block. Turning on the backlight is confusing, too, as it you need to hold down the on/off button (while the display is on) to engage it, something only mentioned in the manual.
The display is, of course, a resistive touchscreen, as was the norm at the time, but its precision seems much lower than anything Palm ever offered. The accompanying stylus, too, is plasticky and cheap, definitely worse than the plastic styluses Palm shipped with its earlier models, and obviously no match for the metal styluses that would accompany later models.
Finding out exactly what type of processor the daVinci DV3 uses is remarkably hard. A contemporary review by Smart Computing claims it’s using an unspecified Epson processor, without giving any further details. There’s only one source that specifically states what processor it has, and considering that source is the only person to have written a third-party application for the DV3, I’m inclined to believe they’re right (opening the device up is of no use, as the SoC is of the epoxy blob type). According to them, the DV3 runs on a Sharp SM6010 microprocessor, for which a datasheet and more detailed documentation exists. The SM6010 is a very basic 16bit single-chip microcomputer of an unspecified architecture (probably something custom and proprietary), running at 30Mhz.
The SM6010 is a 16-bit single-chip microcomputer incorporating a 16-bit CPU core, LCD controller, watchdog timer, serial interface (UART, SCI), SIR, PWM output, real time clock, A/D converter and bus controller.
↫ Sharp SM6010 datasheet
The DV3 stores its operating system in flash memory – making it upgradable – and has 2MB of RAM, stated proudly all over the box and on a sticker on the device itself. Performance is actually not that bad, but it’s not quite as instant and responsive as Palm OS. The operating system and its user interface are rather inscrutable; there doesn’t seem to be a single home screen you can always go back to like on Palm OS, and closing/leaving applications/screens is done differently for each individual application/screen (tap the hardware “OK” button? An on-screen “OK” button? Press the cancel button? Tap one of the hardware application shortcuts atop the display? Who knows!).
The core tools of the DV3 are incredibly basic, and cover merely the bare necessities of a PDA in the late ’90s, with things like an address book, notes application, calendar, calculator, and a few others. There’s no consistency among any of these tools, and they all look, feel, and work just differently enough to be confusing. The daVinci is also Very Serious™, as there’s no games or even a simple drawing gimmick; in fact, while there is a button labeled “Apps.”, it doesn’t actually do anything (we’ll get back to that). There’s barely any preferences to fiddle with either.
Input is done via a terrible Graffiti ripoff called daVinci Script, which uses strokes much more cumbersome than its inspirator, not aided by the absolutely trash recognition algorithms. This input method is effectively unusable, as it’s impossible to predict which strokes will produce what character or action. Even something as simple as the right-to-left stroke to delete a character is entirely unreliable, ensuring this is more of a random character generator than a text input system. Luckily, there’s a tiny on-screen keyboard you can use to hunt and peck with the stylus, but this isn’t exactly a particularly fast input method either.
It’s hard to convey just how utterly terrible the software experience is, especially in 2026 when many people reading this lack the frame of reference of its time. This isn’t utter trash compared to what we’re used to today – this is utter trash compared to the competing devices running Palm OS and Windows Pocket PC of its time. Even in 2026, I love using Palm OS and Pocket PC, but I absolutely despise, dread, and hate using the daVinci. I’m struggling to find a comparison with something contemporary, but the best I can come up with is like comparing an Apple Watch or WearOS device with one of those cheap knock-off smartwatches that run some shitty custom low-res UI on an underpowered SoC, but honestly, even that does a disservice to these knock-off smartwatches.
The daVinci I have came with all of its original accessories. There’s a vinyl pouch, a dock, and an external, fold-up keyboard. The pouch has not withstood the test of time, and has shrunk, so much so the daVinci no longer fits inside of it. The dock is, well, a dock, and uses the connector at the bottom of the daVinci. This connector looks and feels exactly like a crunchy ISA slot from the ’80s, as if the PCB was cut off with a hacksaw. The keyboard is the most interesting, and can be connected straight to the device’s bottom connector, or to a passthrough port at the back of the dock. Unsurprisingly, this keyboard is really bad, with dome-shaped mushy rubber keys with very little stability and a featherlight base that moves at the slightest of touches, making it almost impossible to type on.
Thanks, I hate it.
I mentioned the mysterious, non-functional “Apps.” button earlier, and there’s actually a bit of history here. It turns out that Olivetti fully intended for people to write third-party applications for this thing, promising to release an SDK at some point in time. Of course, this never ended up happening as the daVinci is trash and nobody in their right mind bought one or would want to develop for it, but it does mean that somewhere out there, perhaps in an attic somewhere in Ivrea, Italy, there’s a dusty hard drive or CD-ROM carrying this unreleased official SDK.
SDK or no, there’s always someone crazy, skilled, and determined enough to develop something for any computer, and for the daVinci DV3, that person was Alex Zwiesele. Zwiesele figured out that while the official SDK was never released, the CD-ROM that came with the daVinci DV3 contained the entire operating system of the DV3 and a loader program. This was enough for Zwiesele and a few other people to start disassembling the operating system and inject their own custom code into the binary file, reassemble it, and load it onto the DV3 using the loader program.
This was not a walk in the park. Zwiesele documented the entire process on their website, and it involved Zwiesele and several others writing their own disassembler and assembler (still available from their website!) based on the available Sharp SM6010 documentation, as well as learning how to actually program for the device’s hardware. In the end, they managed to develop an actual game for the daVinci DV3, a Breakout clone. You load the game onto your DV3 in the same way you’d load the operating system; as such, the game will replace the entire operating system and load automatically on power-on. That’s as far as they got back in 2003, as efforts seem to have stalled after that.
Back when I bought my daVinci, about 6-7 years ago, I mentioned online that I had bought the worst PDA of all time, without mentioning it by name. Immediately, fellow hardcore PDA enthusiasts (we exist) knew I was talking about the daVinci. This thing is just plain trash, e-waste before the term had been popularised, a waste of everyone’s time, effort, and money. Not even its one redeeming quality – its low price of just $99 compared to the cheapest Palm device at $249 – could make anyone want to use it.
Still, I’m glad I have it in my collection, if only to serve as a reminder that shitty e-waste devices aren’t something exclusive to our current smartphone era. It also serves to underline just how great Palm OS and Windows Pocket PC (yes, I will fight you on this) really were, and how many things they each got right out of the gate. So much so that especially Palm OS laid the foundations for every smartphone we use today.
Now that I’ve finally written and published this article, I can put this abomination back in its box, and never take it out again.
Reproducible Builds (diffoscope): diffoscope 328 released [Planet Debian]
The diffoscope maintainers are pleased to announce the release
of diffoscope version 328. This version
includes the following changes:
[ Chris Lamb ]
* Don't require python3-guestfs in the autopkgtests on 32-bit architectures.
(Closes: #1144372)
[ Jochen Sprickerhof ]
* Use the XML comparators for SVG vector image files. (Closes: #1144242)
You find out more by visiting the project homepage.
Making a game on a custom bytecode VM in 7 days and 3kB [OSnews]
In the last few days, I built a shoot ’em up game by embedding a tiny custom bytecode VM and rendering the graphics using a fullscreen pixel shader. The result is a 3kB Windows executable.
This was done for Langjam Gamejam, a 7-day challenge where you create a programming language and then use it to build a game.
The project combines several interests of mine: language tooling, game development, procedural graphics, and demoscene-style size constraints. The game jam format forced me to keep the scope small and explore new ideas. Also, it was fun!
↫ Laurent Le Brun
In seven days, Le Brun created a brand new programming language, compiler, bytecode interpreter, a game written in the new language, and rendered it, ending up with a 3kB self-contained executable. It’s amazing what humans can do.
Why tiny JPEGs look different in Chrome [OSnews]
A while back, when chatting with a colleague over their computer, I noticed that a logo did not look exactly the same as it did on mine. It looked thinner on theirs and more faithful to the original image. It was rendered at 15px; here is an upscaled version.
[…]
If you squint, or take a step back, the one from Chrome looks thicker. A bit weird, but swapping the image for an SVG fixed it. Still, I was curious: why was it rendering like this in the first place?
I did some digging and found a nifty optimization that Chrome uses when rendering JPEGs at small scales.
↫ Guillaume Técher
I love it when people detail their discoveries like this.
I was looking for a good screen shot of Radio UserLand. Just found this one on Facebook, and hope to preserve it via the search feature here.
Forcing an ARM64X executable to run as a specific architecture [The Old New Thing]
ARM64X is a fat binary Windows executable and DLL format for 64-bit ARM systems. For DLLs, the choice is clear, since only one of them will work: The version of the DLL that is loaded is the one that matches the host process. If the host process uses the Windows ARM64 ABI, then the ARM64 version of the DLL is used, and if the host process is x86-64-based or uses the Windows ARM64EC ABI¹
For executables, the system has a choice. It could run the process as ARM64 or it could run it as ARM64EC. How can you force the system to choose the architecture you prefer?
You may want to do this if you have a program that is compiled as ARM64X because you have a plug-in model, and you want to be able to support plug-ins that are written either as ARM64 or x86-64. You compile an ARM64 version for ARM64 plug-ins, and you compile an ARM64EC version for x86-64 plug-ins. At run time, you realize that the user passed a plug-in for the other architecture, so you want to relaunch yourself as the matching architecture.
You can do it with the
PROC_THREAD_ATTRIBUTE_MACHINE_TYPE attribute.
Here’s a program that takes a DLL on the command line. It tries to load it as the native architecture, but if that fails, and the native architecture is ARM64, then it relaunches itself as x86-64 to try again.
#include <windows.h>
#include <stdio.h>
#include <wil/result_macros.h>
#include <wil/resource.h>
#include <wil/stl.h>
#include <wil/win32_helpers.h>
int wmain(int argc, wchar_t** argv)
{
if (argc < 2) {
printf("Oops\n");
return 0;
}
wil::unique_hmodule dll{ LoadLibraryExW(path, nullptr, 0) };
if (dll) {
return RunPlugin(dll);
}
if (GetLastError() != ERROR_BAD_EXE_FORMAT) {
printf("Can't load DLL, sorry\n");
return 0;
}
SYSTEM_INFO info{};
GetSystemInfo(&info);
if (info.wProcessorArchitecture != PROCESSOR_ARCHITECTURE_ARM64) {
printf("Can't load DLL, sorry\n");
return 0;
}
printf("Trying again as x86-64\n");
WORD arch = IMAGE_FILE_MACHINE_AMD64;
auto single = make_proc_thread_attribute_list({
{PROC_THREAD_ATTRIBUTE_MACHINE_TYPE, &arch}
});
wchar_t self[MAX_PATH + 1];
std::wstring self;
THROW_IF_FAILED(wil::GetModuleFileNameW(nullptr, self));
wil::unique_process_information pi;
STARTUPINFOEXW info{ sizeof(STARTUPINFOEXW) };
info.lpAttributeList = single.get();
if (!CreateProcessW(self.data(), GetCommandLineW(), nullptr, nullptr,
false, EXTENDED_STARTUPINFO_PRESENT, nullptr, nullptr,
&info.StartupInfo, &pi)) {
printf("Can't relaunch as x86-64, sorry\n");
return 0;
}
WaitForSingleObject(pi.hProcess, INFINITE);
// destructors will close the handles
}
If we can load the DLL, then great! We run it as usual.
If we can’t load the DLL because it’s in the wrong
format, then we will retry as x86-64 if the current process is
running as ARM64. To do that, we create an attribute list with the
PROC_THREAD_ATTRIBUTE_MACHINE_TYPE attribute whose
value is the architecture we want to try, namely AMD64 (which is
the Windows name for x86-64), and relaunch ourselves with the same
command line.²
If the DLL fails to load even as x86-64, then the x86-64 version of our program just gives up without trying again as ARM64. (You don’t want to have the x86-64 version try again as ARM64 because that would create an infinite loop.)
¹ You can think of ARM64EC as “pre-jitted x86-64 on ARM64.” It is like taking an x86-64 binary and compiling it to ARM64 code that is equivalent to (but presumably has better performance than) the version the emulator would have created on the fly from your x86-64 version. Instead of shipping an x86-64 version that the emulator has to translate to ARM64, just ship the translated version.
² In real life, you probably would add some safety precautions to prevent accidental fork bombs. While writing up this article, I fork bombed my machine a few times by mistake.
The post Forcing an ARM64X executable to run as a specific architecture appeared first on The Old New Thing.
Upcoming Speaking Engagements [Schneier on Security]
This is a current list of where and when I am scheduled to speak:
The list is maintained on this page.
I'm still a NYT subscriber, although I don't read it very
often, but when there's news I will go there. Anyway, they used to
have a 10-article per month gift link rule. I used to ration them,
but if by the end of the month I hadn't used them up I'd share
links more liberally. A few weeks ago they lifted the limit. I
thought that's nice, the NYT found that the web was still useful to
spread the news, literally. I thought maybe they had a vision
beyond the usual dotcom slop. Not so fast. Your friends can't read
the articles unless they become a registered user. I bet they
always had that, but this time I read the smaller print. Why can't
some company do something just for goodwill and free
advertising, without such an obvious business model? Having people
think you care counts in the business world. As Marge Gunderson
from Fargo
would
say, "Don't you know that?"
Your Handy Guide to Sin and Guilt Offerings [Nina Paley]
Ever wonder what ruminant/bird you need to sacrifice for your sins and impurities? Well wonder no more. This handy table makes it easy to atone!
I asked SuperGrok (an AI chatbot) to make me a table of all the sins/impurities in the Old Testament requiring a sacrificial offering. Here’s what it produced. You’re welcome.
| Sin/Guilt (or related impurity requiring compensatory offering) | Standard Offering | Discounted Offering (if available) |
|---|---|---|
| Unintentional sin by the anointed (high) priest (brings guilt on the people; Lev 4:3–12) | Young bull without defect (sin offering) | None specified |
| Unintentional sin by the whole Israelite community/congregation (Lev 4:13–21) | Young bull (sin offering) | None specified |
| Unintentional sin by a leader/ruler (Lev 4:22–26) | Male goat without defect (sin offering) | None specified |
| Unintentional sin by a common person (doing what is forbidden in the Lord’s commands; Lev 4:27–35) | Female goat without defect, or female lamb without defect (sin offering) | (See graduated options under specific cases in Lev 5; not universally restated) |
| Failing to testify / withhold evidence when one has heard a public charge (Lev 5:1) | Female lamb or goat from the flock (sin offering), after confession | Two doves or two young pigeons (one sin offering + one burnt); or, if still unable, 1/10 ephah finest flour (no oil/incense) as sin offering |
| Unwittingly touching ceremonially unclean things (e.g., carcass of unclean animal or creature) and later realizing guilt (Lev 5:2) | Female lamb or goat (sin offering), after confession | Two doves/pigeons (one sin + one burnt); or 1/10 ephah finest flour (sin offering) |
| Touching human uncleanness of any kind that makes one unclean, even if initially unaware, then realizing guilt (Lev 5:3) | Female lamb or goat (sin offering), after confession | Two doves/pigeons (one sin + one burnt); or 1/10 ephah finest flour (sin offering) |
| Thoughtlessly / rashly taking an oath (to do good or evil) and later realizing guilt (Lev 5:4) | Female lamb or goat (sin offering), after confession | Two doves/pigeons (one sin + one burnt); or 1/10 ephah finest flour (sin offering) |
| Unfaithfulness by unintentional sin regarding the Lord’s holy things (Lev 5:14–16) | Ram without defect from the flock (guilt offering, of proper value) + full restitution + additional 1/5 to the priest | None specified |
| Sin by doing what is forbidden in any of the Lord’s commands, even without knowing it at the time, then realizing guilt (Lev 5:17–19) | Ram without defect (or its equivalent/value) as guilt offering | None specified |
| Sins against a neighbor (deceiving about something entrusted/stolen, cheating, finding lost property and lying about it, swearing falsely about such matters; Lev 6:1–7) | Full restitution + additional 1/5 to the owner + ram without defect (of proper value) as guilt offering | None specified |
| General unfaithfulness / wrong against another (with no surviving kinsman to receive restitution; Num 5:5–8) | Confession + full restitution + 1/5 (to the priest if no kin) + guilt offering | None specified |
| Sexual relations with a betrothed slave woman (Lev 19:20–22) | Ram as guilt offering (after investigation; she is not put to death) | None specified |
| Unintentional sin by the whole community (failing to observe commandments; Num 15:22–26) | One young bull as burnt offering (with grain and drink offerings) + one male goat as sin/purification offering | None specified |
| Unintentional sin by an individual (Num 15:27–29) | Yearling female goat as sin/purification offering | None specified |
| After childbirth (purification from flow of blood; Lev 12:6–8) | Year-old lamb (burnt offering) + young pigeon or dove (sin offering) | Two doves or two young pigeons (one burnt + one sin) |
| Cleansing from a defiling skin disease (after initial rites and waiting period; Lev 14) | Two male lambs + one ewe lamb + finest flour mixed with oil + oil (includes guilt offering of one lamb with blood/oil application to ear/thumb/toe, plus sin and burnt offerings) | One male lamb (guilt offering) + 1/10 ephah finest flour mixed with oil + log of oil + two doves or two young pigeons (one sin + one burnt), “such as they can afford” |
| Male or female with certain abnormal bodily discharges (after waiting/washing period; Lev 15:13–15, 28–30) | Two doves or two young pigeons (one sin offering + one burnt offering) | None further reduced (birds are the prescribed standard) |
| Nazirite defiled by contact with a dead body (Num 6:9–12) | Two turtledoves or two young pigeons (one sin + one burnt) on the 8th day; then a male lamb as guilt offering (and restart the vow period) | None specified |
| Completion of a Nazirite vow (Num 6:13–20) | Male lamb (burnt), ewe lamb (sin), ram (peace), plus grain/drink offerings and other items | None specified |
The post Your Handy Guide to Sin and Guilt Offerings appeared first on Nina Paley.
[$] BPF, continuous testing, and stable kernels [LWN.net]
Ihor Solodrai and Shung-Hsi Yu wrapped up the BPF track at the 2026 Linux Storage, Filesystem, Memory-Management, and BPF Summit with a pair of sessions related to testing. Solodrai spoke about what has changed for BPF's continuous-integration (CI) testing. Yu spoke about what may be needed to test BPF updates in stable kernels more thoroughly. The BPF subsystem's CI tests are in a good place, they said; even so, Solodrai and Yu have a handful of possible avenues toward enabling better test coverage in the future.
What if one day, out of the blue, Claude could only speak Chinese.
The following article originally appeared on Addy Osmani’s blog site and is being republished here with the author’s permission.
Technical debt lives in your code. Cognitive debt lives in your head. Intent debt lives in the artifacts you may never have written: the goals, constraints, and rationale for why the system is the way it is. If you’re lucky, some of this exists scattered in team documents or discussions, but it’s likely incomplete. It’s the one kind of debt your agents can’t pay down for you, and agentic engineering makes it the most expensive.
____________________________
Margaret-Anne Storey’s Triple Debt Model is a clean way to think about software health. The three models of debt are technical, cognitive, and intent.
Technical debt lives in the code. It’s the accumulation of implementation choices that make the system harder to change later: the tangled module, the shortcut you took under deadline, the abstraction that leaked. We’ve understood this one for decades. You feel it coming through slow builds, fragile tests, and the dread of touching one particular file.
Cognitive debt lives in people. It’s the erosion of shared understanding, the gap between how much code exists and how much any human understands. I’ve been calling this comprehension debt. It builds up when the system grows faster than the team’s mental model of it. Your code can be pristine and you can still carry crippling cognitive debt, because nobody understands the pristine code either.
Intent debt lives in artifacts. It’s the absence or erosion of the externalized rationale, goals, and constraints that explain why the system is the way it is. The key word is externalized. The rationale has to be written down where a teammate, a future you, or an agent can read it, not held in your head. When intent debt runs high, the system drifts from what you meant it to do, and nobody can say when it diverged or why.
These three are independent, which took me a while to internalize.
You can have low technical debt and high intent debt. You can understand a system completely yourself (no cognitive debt for you) while its intent exists nowhere outside your skull (enormous intent debt for everyone else).
From the inside they feel alike, but each one bills you separately.
AI generates code faster than ever, which makes technical debt cheaper to take on and cheaper to pay down. Point an agent at a tangled module and it’ll refactor it.
Cognitive debt recovers too, more easily than most engineers expect. When you don’t understand a chunk of the system, you ask the agent to explain it. You rebuild part of the lost mental model on demand, because the code still exists and the model can read it back to you.
Intent is different. An agent can’t generate intent, because intent is the one input that has to come from you. A model can infer a plausible rationale from the code, the same way you can guess why a previous engineer did something. A guess about intent isn’t the intent. The model doesn’t know whether that 300ms debounce was a deliberate UX decision, a benchmark result, or a number someone typed once and never revisited. It will invent a confident-sounding reason, which is worse than admitting it doesn’t know.
Of the three debts, intent debt is the only one where the agent can’t bail you out. It can write the code and restore your comprehension. The why is the one thing it can only fabricate.
Teams got away with high intent debt for years because we carried it in our head and old docs.
When a new human joined a team, you didn’t write everything down, because they picked up intent over time: hallway conversations, code review comments, “Oh, we don’t do it that way because of an incident in 2023.” Knowledge moved person to person and built up. The engineer who’d been there four years was the intent documentation, expensive and lossy, but it worked.
Agents break that model. Bringing agents onto a team doubles its size overnight with junior people who have no long-term memory. An agent starts most sessions cold. It carries none of the tacit intent humans built up over years. Whatever you haven’t externalized into an artifact it can read, it doesn’t have.
That changes the economics of not writing things down. Unexternalized intent used to cost you once in a while, at onboarding or after someone left. Now you pay it every session, multiplied by every agent you run.
Picture the 20 agents you’re so excited to parallelize. Each one is a teammate who has never met you, can’t read your mind, and will fill any gap in your intent with a plausible guess. The orchestration tax I wrote about is partly an intent-debt tax. Much of what makes managing many agents exhausting is resupplying the intent you never wrote down.
When I wrote about comprehension debt, I made a point I want to revisit, because intent debt sharpens it.
I argued that detailed specs aren’t a complete answer. Translating a spec into working code involves a huge number of implicit decisions no spec ever captures, and a spec detailed enough to be the program is the program in a slower language. I still believe that.
Intent debt is the complementary truth.
Being unable to capture all intent is no license to capture none of it. The implicit decisions an agent now makes on your behalf, the ones a spec will never enumerate, are the decisions whose rationale evaporates if you don’t record at least the load-bearing ones. You can’t write down everything.
You do have to write down the why behind the choices that would be expensive to get wrong, because nobody will reconstruct those later.
Comprehension debt warns you not to trust that code is correct because it exists.
Intent debt warns you not to trust that the reason survives because the code does. Code is the answer; the intent was the question it was meant to solve. AI is brilliant at producing answers to questions you forgot to write down.
Intent debt rarely shows up as friction. It shows up as a particular kind of helplessness.
If you’ve felt the cognitive surrender version of this, defending a design choice you can’t reconstruct, intent debt is the team-scale, written-down version of the same hole.
Surrender is about your own posture in the moment. Intent debt is what a hundred of those moments leave in the repo for the next person and the next agent to inherit.
Almost everything I’ve been writing about for the last few months turns out to be intent-debt management. I didn’t have the word for it. The move is the same each time: Take the intent out of your head and put it somewhere an agent can read.
Write the spec for the intent, not the implementation. A good spec captures the goals, the constraints, the nonnegotiables, and an explicit definition of done (fast, accessible, secure, delightful, beyond “functionally correct”). The spec carries the intent the code can’t carry on its own.
Treat AGENTS.md as your intent ledger, not your config. It’s why I keep saying stop using /init. An auto-generated file describes what the code is. An intent file describes what the team means: the conventions, the “we don’t do it this way because,” the constraints invisible in any single file. Agents can’t infer that, and they need it most.
Capture decisions where they happen. Lightweight decision logs (ADRs) are pure intent-debt paydown. Recording why at the moment you decide costs almost nothing. Reconstructing it eight months later, after the person who knew why has moved teams, costs a fortune. Agents have made logging cheaper than ever, so the old excuse is gone.
Make the learning loop write intent back down. I’ve argued for self-improving agents that update a learnings file at the end of a session. The same loop is an intent-debt pump running in reverse: every mistake whose root cause you’ve recorded, every “We tried X and it didn’t work because Y” is intent that would otherwise have lived only in your memory of a bad afternoon.
None of these are new tools. They’re the discipline of refusing to let the why exist only in your head, in an era where your head is no longer where most of the work happens.
For a long time, the scarce, valuable thing in software was the ability to produce a correct implementation. Code was expensive, so we optimized for writing it.
AI made code cheap, and comprehension is recoverable. Intent, the goals and constraints and reasons, is the one input that still has to originate with a human. It’s also the one we’re worst at externalizing, because for decades we got away with carrying it in our heads.
That worked when the team was a handful of people who could absorb intent over years of shared context. It does not work when half the team is agents that start every session as strangers.
Technical debt makes your system hard to change. Cognitive debt makes it hard to understand. Intent debt makes it hard to know whether the system still does what you wanted, and it’s the only one of the three your agents can’t pay back for you. That part stays with you. Write down the why, because it’s becoming the most valuable thing you can leave in the repo.
Issue 47 – Greta’s Wedding Pt. 2 – 14 [Comics Archive - Spinnyverse]
The post Issue 47 – Greta’s Wedding Pt. 2 – 14 appeared first on Spinnyverse.
Python packaging council candidates announced [LWN.net]
The Python Software Foundation (PSF) has announced the candidates running for the Python packaging council that was approved by the Python steering council in April.
This inaugural election fills all five seats on the PPC. The two candidates receiving the highest number of votes shall be designated Cohort A with a two year term, and the three candidates receiving the next highest number of votes shall be designated Cohort B with a one year term.
In future elections, each cohort will be elected for a full two-year term in alternating years, so that roughly half of the PPC turns over each cycle.
There are 17 candidates running for the five open seats. PSF voting-eligible members must affirm their intention to vote in this election by August 25. Voting begins on September 1, and ends on September 15.
Days belong to me, nights to Claude [Scripting News]
I've been doing this for all of this year, and the frustration finally led me to this rule, which I just asked Claude to play back for me. I offer it to you, a human, on how to get your Claude to work better for you, as it does for me. What follows is what Claude wrote as I asked it to summarize how we work.
Here's the mode as I understand it: (Claude speaking..)
Security updates for Friday [LWN.net]
Security updates have been issued by AlmaLinux (.NET 10.0, .NET 8.0, .NET 9.0, bind, bind9.16, and dracut), Debian (apr-util, chromium, postgresql-17, python-httplib2, unzip, and zip), Fedora (erlang-cowboy, erlang-cowlib, flatpak, and libnfs), Gentoo (Apache HTTPD, Bubblewrap, Dnsmasq, Exim, Flatpak, libinput, and rsync), Mageia (dhcpcd, qemu, and roundcubemail), Oracle (.NET 8.0, .NET 9.0, bind, bind9.16, freerdp, glib2, gnome-remote-desktop, grafana, gstreamer1-plugins-good, isns-utils, java-17-openjdk, kernel, libpng, libXfont2, nghttp2, perl-DBI:1.641, python-idna, python3.9, and xorg-x11-server), Slackware (rsync), SUSE (bouncycastle, chromium, dnsdist, dracut, java-1_8_0-ibm, kernel, libXfont2, nodejs22, nodejs24, php8, python-httplib2, rrdtool, rsyslog, samba, and wireshark), and Ubuntu (linux, linux-aws, linux-kvm, linux-aws-hwe, linux-aws-hwe, linux-azure, linux-gcp, linux-hwe, linux-azure, linux-gcp, linux-hwe, linux-oracle, linux-lowlatency, linux-lowlatency-hwe-6.8, linux-nvidia-tegra, linux-oracle, linux-nvidia-tegra-igx, linux-oem-7.0, linux-oracle, and node-axios).
Error'd: Zero to Zero in 0 seconds [The Daily WTF]
"So many zeroes! I'm in." W00H000! Kivi S. "found this ad in the wild. This must be a very large jackpot, look at all those zeroes!"
"I knew it!" groused an anonymous cynic. "Yes, SignUpGenius. We all know that SUCCESS is just an illusion."
Another anonymous grouch reported "I guess JustWatch has suddenly become a bit precious about their sources"
"These boots are made for crashing" thundered Michael R. "PII of the developer have been removed to protect the not so innocent." You can't hide PHP so easily.
And again from prolific Michael R. "El Reg has been around for 30+ years and their code should be mature. I wonder about their SQL which seems to randomly return duplicate records. https://www.theregister.com/week". I'll be happy when Errord shows up on El Reg. Ok, no I won't but I'll at least be grouchy differently.
Joe Marshall: Pics or it Didn't Happen [Planet Lisp]
An anonymous reader said it out loud: "Alright, it's a simple website... can we see its sources though?"
I started going through the sources and parameterizing the secrets so that there weren't any hard-coded sensitive strings. It's a royal pain because the secrets then have to be injected via environment variables, which means reconfiguring the server on the host and the development environment on the local machine, and let's face it, no one is going to actually run the server, they just want to see what the vibe coded lisp looks like. So I punted and did this instead.
jrm-code-public is a copy of the website repository with the secrets redacted. IT won't run as a standalone web site without some development work. (Although I bet you could sic a high-end model on it have it massage the code into a running state.) I'm releasing it as a snopshot of the source code so you can see the kind of code that the LLM has written for the web site. As you can see, it is a little bit more complex than your standard static web site.
The Lisp code isn't bad for machine generated. There is a lot to critique, sure, but a lot is pretty good, too. I've seen worse code in production.
As usual, I put this under an MIT license, so feel free to use any or all of it in your own projects. You could even use this as the skeleton for nibe coding your own site.
Pluralistic: Capital formation (14 Aug 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

Funny thing about competition: there's both a
pro-market and an anti-market case for a
competitive system.
https://pluralistic.net/2026/08/13/one-chokable-throat/#too-clever-by-half
If your theory is that markets deliver prosperity by spurring businesses to provide the superior products and services at lower prices needed to attract and retain workers and customers, then competition is a must-have. Without competitors, companies are "too big to care":
https://pluralistic.net/2024/04/04/teach-me-how-to-shruggie/#kagi
Meanwhile, if you think that the pressure of greed will always drive companies to cheat, and want companies held in check by democratically accountable lawmakers and enforcers, then you also want competition, because otherwise, disorganized sectors of hundreds of small businesses collapse into oligarchic cartels. Members of these cartels cease to compete directly with one another and instead collude to rip off workers and customers, leaving them aslosh in ready cash they can mobilize to capture regulators, securing an enshittogenic policy environment that reflects the easily arrived-at consensus that's only possible when you boil a sector down to a small handful of firms, each of them "too big to jail":
https://pluralistic.net/2022/06/05/regulatory-capture/
In other words: if your ideal is a world of high-quality products and services, produced by workers laboring under fair conditions, delivered to consumers at a fair price, then you want competition. Competition scares some people into running their businesses ethically; and competition ensures than an unethical operator can be held to account by government agencies charged with protecting workers and consumers.
Once you understand the role of competition as a counter-oligarchic check on corporate power, the rise of Big Tech and its authoritarian turn becomes much easier to understand.
Tech is uniquely hospitable to competition thanks to the intrinsic properties of digital computers. Formally, computers are "Turing-complete, universal von Neumann machines," which is to say that every computer can run every valid program. This means that any enshittificatory gambit assayed by a tech company – say, locking generic ink out of your printer; or blocking third party app stores for your phone or console; or sticking a dozen extra ads before every Youtube video – is technically doomed.
Every time a tech boss introduces a 10' pile of shit to a digital product or service you rely upon, they induce rival technologists to create 11' ladders made of code that they can costlessly, instantaneously distribute to every one of the enshittifier's customers and suppliers:
https://www.eff.org/deeplinks/2019/07/adblocking-how-about-nah
This explains the dynamism of early tech, which saw companies rising quickly to conquer their markets, only to yield to the temptation to extract more from customers and/or suppliers while underinvesting in improvements to their products and services. When this happened, new digital companies sprang into being, reverse-engineering the incumbents' products and launching "complementary goods" – plug-ins and mods – that fixed the defects in dominant products, usurping the market leader's place in the workflows and pocketbooks of its customers and suppliers:
https://www.eff.org/deeplinks/2019/10/adversarial-interoperability
For many years, this "adversarial interoperability" worked its magic on the burgeoning tech sector, creating a state of constant ferment where people who wanted to improve and then supplant the state-of-the-art were able to cheaply enter and capture the market, only to be taken down by the next generation of disenshittifiers when they, too, inevitably yielded to the temptation to replace innovation with extraction. Every pirate wants to be an admiral – but every admiral must then confront the pirates who rush in to fill the vacuum they create when they switch sides.
But that system of beneficial disruption was itself disrupted – not by technology, but by policy. In 1998, Bill Clinton signed the Digital Millennium Copyright Act (DMCA). Section 1201 of the DMCA makes it a felony to practice adversarial interoperability, establishing penalties of $500k and five years in prison for people who reverse engineer and modify products:
https://pluralistic.net/2026/01/14/sole-and-despotic/#world-turned-upside-down
DMCA 1201 created a one-way ratchet that progressively narrowed the possibilities for tech competition. As more and more US companies re-engineered their products so that modifying them would give rise to DMCA 1201 liability, American startups gave up on disrupting Big Tech, re-orienting towards "acqui-hires," when a startup's highest purpose is to be absorbed by a giant, sclerotic incumbent that mothballs its products and assigns its engineers to work on incremental maintenance (or worse, enshittification) for its dominant offerings.
Big Tech's pirates turned admirals, free to "disrupt" the weak and poor, while enjoying the legal entitlement to destroy anyone who dared to disrupt them. They embodied Frank Wilhoit's definition of conservativism: a class that the law that "protects but does not bind" alongside a class that the law "binds but does not protect":
https://pluralistic.net/2026/07/08/wilhoitian/#human-rights-v-property-rights
It was fine for them to "move fast and break (our) things," but forbidden for us to "move fast and break kings." Disruption for thee, never for me.
Nor was this a merely American sickness. Having neutered domestic competitors that might threaten its tech incumbents, the US government set out to prevent other countries from challenging its world-girdling tech empires. For the past 25 years, the US Trade Representative has prioritized getting anticircumvention laws on the books of all of America's trading partners as a condition of free trade with the US, with the result that today, virtually every country in the world has a law that makes it illegal to disrupt American tech giants:
https://pluralistic.net/2026/05/05/three-is-a-magic-number/#coalitions
Anti-circumvention law is so obviously, manifestly an invitation to enshittify that when governments enacted these laws, they felt the need to include some kind of "safety valve" they could point to when critics raised anti-circumvention's potential for abuse. The world's would-be enshittifiers figured out a devious method to insert clauses into anti-circumvention that looked like anti-abuse measures, but which were, in practice, useless ornaments.
Many anti-circumvention laws – including DMCA 1201 – have a process for creating "exemptions" to the ban on reverse-engineering and modifying a device. The way these exemptions processes are written, they seem to say that if a company uses anti-circumvention law to block legitimate activity – say, if John Deere uses the law to stop you from fixing your own tractor – then you can go to some kind of governing body (in the US, it's the Copyright Office) and petition for an exemption to anti-circumvention. If that exemption is approved, then making that modification becomes legal.
Before I carry on, let me say here that even if that's how the system worked, it would still be grossly offensive. If you buy a device – a car, a tractor, a printer, a console, a phone – it is your property and you should not have to hire a lawyer to ask a government agency to create a legal exemption that lets you do otherwise legal things with it. You should not need to petition the government for the right to buy generic ink, use a third-party app store or take your car to an independent mechanic.
But this isn't how the system works. It's a scam. Anti-circumvention exemptions are a cheap trick. They only sound useful. A reasonable person who hears that the US Copyright Office has made it legal to use a third-party app store with your iPhone would assume that this means that if someone launches their own app store, they can give you the tools needed to unlock your iPhone and activate their store.
That's not how the DMCA exemptions process works. Under the statute, the US Copyright Office is only empowered to create "use exemptions," which allow you, the owner of the iPhone, to make use of a tool that unlocks your phone and installs the third-party app store. The Copyright Office does not have the power to create a tools exemption that would allow someone to make that unlocking tool and sell or give it to you. Making that tool remains a felony with a five-year prison sentence attached to it.
What this means is that if you want to use your own property in a way that was legal before DMCA 1201, that has been made legal again because you hired a lawyer who successfully petitioned the US Copyright Office to grant an exemption, you can only do so if you, personally reverse engineer your device to effect the permitted modifications to it.
So: if the US Copyright Office legalizes alternative iPhone app stores, the only way to exercise this exemption is for every iPhone owner in the country to get a computer science degree, secure the use of a clean-room, decap the "secure enclave" on a spare iPhone's CPU, extract its cryptographic keys, and integrate them in a new version of iOS that they personally write and install on their phone. No iPhone owner is allowed to discuss how to do this with any other iPhone owner engaged in the same project, on penalty of a five year prison sentence.
Obviously, this is ridiculous, and iPhones are just the tip of the iceberg. It's also true if you want to enable independent repair of powered wheelchairs, whose manufacture is controlled by a duopoly of private-equity backed companies that have all but abandoned spending on repair, leaving wheelchair users stuck in bed for months while they await service:
https://www.eff.org/deeplinks/2022/06/when-drm-comes-your-wheelchair
This absurd situation is the same if you're blind and want to make use of an exemption that lets you reverse-engineer ebook formats so that you can run your ebooks through a Braille printer, screen reader or other assistive device. Under the exemptions rules for the world's anti-circumvention laws, every blind person is expected to personally reverse engineer the access control systems built into Adobe and Amazon's ebook formats, write an exploit that lets them extract the text of these restricted ebooks and then repackage that text in a new, open format:
https://pluralistic.net/2026/03/16/whittle-a-webserver/#mere-ornaments
This "use exemption"/"tools exemption" split is a near-perfect way of tricking people into thinking that these laws are more reasonable than they appear. When Canada passed its landmark right-to-repair and interoperability laws in 2024, many celebrated – missing the fact that under Canada's anti-circumvention law (Bill C-11, the Copyright Modernization Act of 2012), it remains illegal to undertake the reverse-engineering needed to exercise the rights these new laws (seemed to) enshrine:
https://pluralistic.net/2026/01/29/post-american-canada/#ottawa
For a quarter-century, I've made it my life's work to explain how bad and dangerous this system is, and, thankfully, I've started to make a little headway over the past few years. My core audience contains a lot of hackers who are rightly affronted at the existence of a body of law that criminalizes the kinds of exploration and modification that they've devoted their lives to.
Being hackers, they ponder this situation and start to think about how they can hack the law to escape it. Just lately, I've heard from a lot of people who think they can solve this problem by asking a chatbot to reverse-engineer and modify the firmware on their tractors, wheelchairs, ebooks, iPhones, what-have-you. You can't put a chatbot in prison for violating anti-circumvention law, right?
I regret to inform you that if you did this in a way that rose to the attention of a big corporate bully, they wouldn't blame your chatbot for writing the exploit: they'd blame you for prompting the chatbot to create this new tool.
Just yesterday, I heard from a reader who had a clever idea: what if you gave your unmodified iPhone to a hacker who knew how to install a third-party app store on it, and they modified that phone, and then sold it back to you for $10? The hacker would be making a use exemption, not a tools exemption.
This, too, will not produce the outcome we're seeking. Even if Apple can't convince a judge that selling you a modified iPhone is "trafficking" in a circumvention device (a very big "if"), this wheeze misses the wider point about how adversarial interoperability was able to disenshittify tech for the years when tech companies weren't just dishing out disruption, but also being disrupted themselves.
The interoperability-driven dynamism that disciplined or displaced tech companies that abused their market power was a mass phenomenon. The printer cartel doesn't need to be able to charge everyone $10,000/gallon for ink. If a few people at the margins figure out how to jailbreak their printers, that doesn't stop the grift. Even better if the people who do use generic ink have to depend on anonymous, shadowy businesses that don't have customer service departments you can call when your printer gets an update that breaks ink compatibility, or an address you can send a process-server to if you're stuck with thousands of dollars' worth of useless ink cartridges after one of those updates.
To make generic ink a viable check against the abuses of HP and its colored water mafia, you need a counter-industry. You need salespeople making calls on large enterprises who buy their ink by the ocean, offering them a better deal and a guarantee of uninterrupted service. To make good on that guarantee, you need an army of hackers who reverse-engineer every software update HP pushes out in a matter of hours, and you need another army of customer service reps who help people who can't figure out how to install that update.
As economists would say, you need "capital formation." You need the ability to raise or borrow money, a mailing address, an ad campaign, booths at conferences and free samples in the mail. You need to be able to show potential customers that you are insured in the event that you brick their devices, so switching to your product doesn't endanger their capital investments. You need to have a business whose doors can be beaten down by regulators in the event that you use your after-market mods as a tool to steal data or money from your customers.
To understand how this worked, cast your mind back to the Office Suite Wars of the early 2000s. Back then, Microsoft ruled the desktop world, controlling more that 95% of the PC OSes, a share so large and so ruthlessly acquired and maintained that they were convicted of violating anti-trust laws.
Microsoft used illegal tying and predatory pricing to push every one of those PC owners into using Microsoft Office, which meant that even if you used a Mac, 19 times out of 20, the people you needed to collaborate with on memos, spreadsheets and slide-decks were using MS Office.
Microsoft made a version of Office for the Mac, but it was the single most curséd piece of packaged software ever offered to the market. Merely waving the Mac Office floppy around a workplace would cause files to spontaneously go corrupt on random PCs in the vicinity.
For Mac users, this meant that 95% of the time, they could not reliably collaborate with other computer users. For people like me – then a freelance CIO-for-hire who was helping small businesses connect their computers to each other and the internet – it meant that increasingly, we made CEOs swap their Powerbooks for Thinkpads and designers swap their PowerPCs for Dells with beefy graphics cards, moving the whole business to PC/Windows.
Apple solved this problem by reverse-engineering MS Office and producing the iWork Suite: Pages, Numbers and Keynote, which could perfectly read and write Microsoft's Word, Excel and Powerpoint files. That adversarial interoperability saved the company, but the gambit wasn't one-and-done.
Microsoft spent the next several years maliciously introducing changes to the Office file formats that broke compatibility with iWork, which Apple countered by paying an army of coders to swiftly analyze these new formats and update iWork to maintain compatibility with them:
I think Apple was fated to win this expensive cat-and-mouse game, if only they could hang in there long enough. For every Mac in the field, Microsoft was supporting 19 PCs, and these computers ran a fragmented mosaic of Windows and Office versions. Every time Microsoft broke compatibility with Office to mess up one Mac user, they also messed up 19 PC users, all of whom had to be patched and updated to maintain compatibility. This gave Apple a powerful advantage that mounted with every turn of the game, so all they had to do was hang in there until the asymmetrical costs overwhelmed Microsoft.
Which is what happened. Eventually, Microsoft sued for peace and agreed to standardize the office file-formats at the International Standards Organization, ushering in an era of unprecedented compatibility. This ISO standardization is why you can now paste styled text from the Word application into a browser-based Google Doc or an application-based LibreOffice window. It's also a game Microsoft continues to cheat at, with a string of dirty tricks meant to leverage its dominance to shut out competitors altogether:
https://blog.documentfoundation.org/blog/2026/07/17/microsofts-main-tool-for-lock-in/
The rise (and impending fall) of a truly open format that lets every computer user collaborate on any document is an object lesson in the combined role that adversarial interoperability and capital formation play in disenshittifying technology. For Microsoft, a "competitor" isn't one hacker who can open a Word file in a program of their own devising, nor is a "competitor" the small number of users that single competitor can support.
Microsoft is an incorrigible, bullying cheat with a sick and rotten corporate culture: to stop the kind of ruthless princeling who rises to a position of power in a company like Microsoft from turning predatory requires severe, obvious penalties that follow directly from any extractive gambit.
To muster that kind of competition requires the kind of capital formation you only get from true legalization, not the anemic sham offered by anti-circumvention's "exemptions." Even where the competition is spread out across many shifting small businesses and individuals, the system of competition requires a stable backstop that produces the tools these small firms rely on.
In 2014, Ofcom, the UK's telecoms regulator, affirmed that Britons had the right to unlock their phones, even if their carrier had sold them a phone that was locked to its network. Overnight, every small shop acquired a phone-unlocking side-hustle. One morning as I walked from my flat to the tube, I passed three unlockers: one at a newsagent's, where they would take your phone and return it unlocked within a day; one at my dry-cleaner's, where a guy with a folding card table would unlock your phone while you waited; and another folding table guy right by the tube entrance who'd also work while you waited, and who charged £5 less than the guy at the dry-cleaner's.
None of these people were electrical engineers or software developers or hackers. They just followed recipes that were provided by one of a few well-capitalized firms that sold them a subscription to jailbreaking tools that were kept up to date for every make and model of every phone.
One frequent excuse for the ban on repair tools for cars or wheelchairs or tractors is that these devices are now so computerized that they require specialized knowledge if they are to be safely serviced. Even if that's true, that's exactly what a legal toolchain provides.
The guy who fixed my solar panels wasn't a software engineer, he was an electrician who had the customer-service phone number for the company that made my solar inverter. If that company had a viable competitor who could offer their own firmware for my solar installation and was hungry for my business, maybe that technician would have gotten through in three minutes rather than three hours.
And if that alternative firmware was defective, then I could join a class action suit and get made whole – something that is nearly impossible to imagine happening with solar OEMs, who face so little competition that they all put binding arbitration clauses in their terms of service that take away your right to sue, no matter whether they cheat you or burn your house down:
https://pluralistic.net/2026/05/06/champerty-loves-company/#circle-of-life
That's the amazing thing about digital tools. Through software, experts are able to package up their expertise into self-executing code, which can costlessly, instantaneously be distributed to everyone in the world who needs it. But paying those experts isn't cheap, and neither is supporting their tools.
I love William Gibson's maxim that "the street finds its own use for things," but if you can't neutralize a large, dangerous monopolist with individual tinkering – the best you can hope for is some measure of individual relief..
It's true that in these adversarial interoperability fights, the upstarts enjoy a tremendous advantage, but that advantage isn't infinite. For the guerrillas to outlast the empire, they have to be able to wage a long, persistent fight.
To marshal the resources needed to sustain that fight and to maintain the logistics demanded by its supply lines requires the good guys to be allowed to fight in the open, without the looming threat of criminal prosecution, a threat that forecloses on capitalization and mass adoption.
Enshittification isn't downstream of cruelty, it's downstream of greed. The point of enshittification is to exploit the control a firm can exercise over the customers, suppliers and workers it holds captive in order to extract more from them. The titanic profits this exploitation delivers are a powerful lure for would-be disenshittifiers and investors who would fund their liberatory revolution.
Don't get me wrong, I love my hackers and I sit in awe of the awesome leverage of writing code that can be costlessly, instantaneously distributed to everyone who needs it. But so long as governments and the law are on the side of extraction and enshittification, the disenshittificatory insurgency will be starved of resources, condemned to remain marginal and inadequate.

Reverse centaurs: EU approach to AI risks dystopia for human workers https://euobserver.com/231973/reverse-centaurs-eu-approach-to-ai-risks-dystopia-for-human-workers/?cst=b33df4396260b48a181be764dc7978cb6c184b6818f8113ee298c52af8038cda
Executable Emoji https://martypc.blogspot.com/2026/08/executable-emoji.html
A Rant About “Technology” https://www.ursulakleguin.com/a-rant-about-technology
Hardin’s imagined tragedy is pig shit: A call for planning to recenter the commons https://sci.bban.top/pdf/10.1177/1473095218820460.pdf
#25yrsago Berkeley Breathed: the Onion interview https://web.archive.org/web/20011201062719/http://www.theonionavclub.com/avclub3728/avfeature_3728.html
#25yrsago Chinese going mobile crazy http://news.bbc.co.uk/1/hi/world/asia-pacific/1492584.stm
#25yrsago Free wifi in NYC https://web.archive.org/web/20011024070700/http://www.villagevoice.com/issues/0133/meyers.php
#20yrsago RIAA’s “abundance of sensitivity” ends harassment of grieving family https://memex.craphound.com/2006/08/14/london-copyfighters-speak-at-speakers-corner-on-aug-27/
#20yrsago London Copyfighters: Speak at Speaker’s Corner on Aug 27! https://memex.craphound.com/2006/08/14/london-copyfighters-speak-at-speakers-corner-on-aug-27/
#20yrsago TSA wins the war on lipstick https://memex.craphound.com/2006/08/14/tsa-wins-the-war-on-lipstick/
#15yrsago RIP Paul Meier, father of the randomized trial https://www.nytimes.com/2011/08/13/health/13meier.html?_r=1
#15yrsago Long Beach Police Chief: we detain photographers, and I don’t have any guidelines for that policy, photography is classed with attempts to acquire weaponized smallpox https://web.archive.org/web/20110927230257/http://www.lbpost.com/life/greggory/12188
#15yrsago David Cameron’s net-censorship proposal earns kudos from Chinese state media https://web.archive.org/web/20110815220203/https://www.globaltimes.cn/NEWS/tabid/99/articleType/ArticleView/articleId/670718/Riots-lead-to-rethink-of-Internet-freedom.aspx
#15yrsago Empirical manners: towards a science of harmonious norms https://www.antipope.org/charlie/blog-static/2011/08/rewilding-etiquette.html
#15yrsago Tiki Room resurgent https://passport2dreams.blogspot.com/2011/08/every-cloud-has-silver-lining.html
#10yrsago After New Zealand spooks misidentified pro-democracy activist, NSA spied on him for them https://web.archive.org/web/20160815040057/https://theintercept.com/2016/08/14/nsa-gcsb-prism-surveillance-fullman-fiji/
#10yrsago Even the woo industry thinks Gwyneth Paltrow’s “smoothie dust” ads are too much https://web.archive.org/web/20160811225548/https://consumerist.com/2016/08/09/ad-and-supplement-self-regulation-groups-have-issues-with-gwyneth-paltrows-smoothie-dusts/
#10yrsago It’s pretty easy to hack traffic lights https://www.usenix.org/system/files/conference/woot14/woot14-ghena.pdf
#10yrsago Private prison contractor’s $1B no-bid deal to run immigration jails guarantees 100% occupancy payouts https://web.archive.org/web/20160815022103/https://www.washingtonpost.com/business/economy/inside-the-administrations-1-billion-deal-to-detain-central-american-asylum-seekers/2016/08/14/e47f1960-5819-11e6-9aee-8075993d73a2_story.html
#10yrsago Court of Appeal reverses Labour disenfranchisement ruling, but Corbyn still likely to win https://web.archive.org/web/20160813134816/http://www.newstatesman.com/politics/staggers/2016/08/high-courts-judgement-wont-stop-jeremy-corbyn-winning
#10yrsago John Oliver on subprime auto-lending and its killswitches https://web.archive.org/web/20160816154135/https://consumerist.com/2016/08/15/john-oliver-keegan-michael-key-explain-why-subprime-car-loans-are-so-awful/
#10yrsago Worst of McMansions: architectural criticism of inequality’s most tangible evidence https://web.archive.org/web/20160814031109/http://mcmansionhell.tumblr.com/
#5yrsago Provocateur copyrights a Magic: The Gathering Deck https://pluralistic.net/2021/08/14/angels-and-demons/#owning-culture
#5yrsago Disneyland at a stroll https://pluralistic.net/2021/08/15/disneyland-at-a-stroll-part-vi/
#1yrago Bluesky creates the world's weirdest, hardest-to-understand binding arbitration clause https://pluralistic.net/2025/08/15/dogs-breakfast/#by-clicking-this-you-agree-on-behalf-of-your-employer-to-release-me-from-all-obligations-and-waivers-arising-from-any-and-all-NON-NEGOTIATED-agreements
#1yrago "Privacy preserving age verification" is bullshit https://pluralistic.net/2025/08/14/bellovin/#wont-someone-think-of-the-cryptographers

Edinburgh International Book Festival with Jimmy Wales, Aug
17
https://www.edbookfest.co.uk/events/the-front-list-cory-doctorow-and-jimmy-wales
Sydney: The Festival of Dangerous Ideas, Aug 23-24
https://festivalofdangerousideas.com/program/
Melbourne: Enshittification at the Wheeler Centre, Aug 25
https://www.wheelercentre.com/events-tickets/season-2026/cory-doctorow-enshittification
Brighton: The Reverse Centaur's Guide to Life After AI with
Carole Cadwalladr (Brighton Dome), Sep 8
https://brightondome.org/whats-on/LSC-cory-doctorow-the-reverse-centaurs-guide-to-life-after-ai/
London: The Reverse Centaur's Guide to Life After AI with Riley
Quinn (Foyle's Picadilly), Sep 9
https://www.foyles.co.uk/events/enshittification-cory-doctorow-riley-quinn
South Bend: An Evening With Cory Doctorow (Notre Dame), Oct
6
https://franco.nd.edu/events/2026/10/06/an-evening-with-cory-doctorow/
Vancouver: BC Policy Solutions Gala, Nov 12
https://bcpolicy.ca/gala/
Speculative Fiction for Social Change II (Cool People Who Did
Cool Stuff)
https://pocketcasts.com/podcast/cool-people-who-did-cool-stuff/08cbb840-a6ae-013a-d8aa-0acc26574db2/part-two-cory-doctorow-on-speculative-fiction-for-social-change/937e8800-9404-45a6-b5e3-90ebee2cfaea
Speculative Fiction for Social Change I (Cool People Who Did
Cool Stuff)
https://pocketcasts.com/podcast/cool-people-who-did-cool-stuff/08cbb840-a6ae-013a-d8aa-0acc26574db2/part-one-cory-doctorow-on-speculative-fiction-for-social-change/15ad467c-0832-44c9-91ea-59defd783dba
AI, automation and enshittification (Telecoms.com)
https://www.telecoms.com/ai/the-telecoms-com-podcast-ai-automation-and-enshittification
The AI Enshittification Bubble (Hidden Forces)
https://hiddenforces.io/podcasts/the-ai-enshittification-bubble-cory-doctorow/
"Canny Valley": A limited edition collection of the collages I create for Pluralistic, self-published, September 2025 https://pluralistic.net/2025/09/04/illustrious/#chairman-bruce
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing:
"The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Fourth draft completed. Submitted to editor.
A Little Brother short story about DIY insulin PLANNING

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):
https://mostlysignssomeportents.tumblr.com/tagged/pluralistic
"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla
READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.
ISSN: 3066-764X
Electric cars [Judith Proctor's Journal]
Our car is really cheap to run.
Now we've got a better smart meter, I can see that it costs (roughly) £1 per 20 miles when charged at home. It took about 6 hours to charge, but it's not as if we're going anywhere in this heat!
The solar panels will have made a small contribution to the total, but the car charge draws more than they produce.
But, on the other hand, the panels are powering our portable A/C unit and still having a bit left over to feed into the grid.
The car is also very reliable (Renault Zoe, bought secondhand 4 or
5 years ago.) The last MOT only needed a brake light replaced
- all of five quid!
If the Markets Reject OpenAI and Anthropic, the US Should Nationalize Them [Schneier on Security]
This essay was written with Nathan E. Sanders, and originally appeared in The Guardian.
OpenAI, and then Anthropic, were each formed by AI developers who feared unrestrained corporate AI development—specifically, that companies like Google and Meta would steer the technology towards deleterious, maybe even catastrophically unsafe, outcomes for society. Their founders proclaimed that their new labs, uniquely, could be trusted to develop the technology in humanity’s best interest. But each, in turn, were themselves co-opted by the same market incentives, themselves becoming corporate behemoths zealously guarding future investor value rather than the public interest.
It was only a few weeks ago, in June, when OpenAI and Anthropic each filed for their IPOs and were met with buzz about trillion-dollar valuations. The hype around their valuations is so extreme that many worry about their potential for concentrating wealth on a global scale. In an effort to leave something for the rest of us, some observers have proposed that the federal government seize a share of these companies’ stock to create a US sovereign wealth fund, or redistribute their revenues to produce a dividend for taxpayers.
Now the headlines are about public backlash to AI datacenters and the AI chip giant Nvidia’s slumping stock. The tech and AI giant SpaceX’s newly minted stock price tanked just weeks after its IPO. There are even questions about whether the leading AI labs will ever be sustainably profitable. All of a sudden, the makers of ChatGPT and Claude face strong headwinds as they seek to generate the massive equity assets that once felt all but assured.
In fact, evidence suggests the market itself could reassess that these companies offer nothing of financial value. In that case, perhaps we can return them both to their original purposes. If these AI companies should fail in the financial markets, the US should nationalize them and convert them into national labs operated under democratic control that preserve their benefit to the public interest.
The economics of the big AI labs hardly guarantee a booming return on investment. Frontier AI models are both expensive to train and depreciate within months, when a newer model appears. This means that the payback window to extract profit from them is very narrow. Meanwhile, enterprise clients are getting smart about minimizing AI token usage. Even worse, the models are basically commodities; the best ones largely perform and behave similarly, which depresses prices. Perhaps most importantly, open-source and Chinese competitors—lagging only a few months behind the leading labs in capability—give away for free the kinds of models Anthropic and OpenAI sell.
Even setting aside the model training costs, it’s not clear whether the unit economics of AI as it’s currently conceived will ever be sustainably profitable. Many of these free and open-source models can be run locally: the large ones on private clouds and high-end servers, the smaller ones on anyone’s laptop or even cellphone, putting to question the companies’ exorbitant capital investment in datacenters.
It’s not that OpenAI and Anthropic are not valuable as organizations. They have remarkably talented AI scientists and engineers that are continuously producing innovations driving a global mania for their offerings. These leading labs might not ever be profitable, but their products are doing a lot of good in the world. You may or may not be a user of or believer in their technology, but their staggering, ongoing usage growth suggests that an awful lot of people would be disappointed if the companies simply disappeared.
The problem isn’t the people or the products, it’s the system. As constituted, OpenAI and Anthropic may not be valuable as market equities. If the market assesses they are not capable of producing a growing financial return on investment for shareholders, the companies will collapse.
Maybe private, for-profit is just not the right economic model under which to develop AI. Perhaps OpenAI should be returned to its private non-profit roots, the legacy they fought so hard to change and which Anthropic’s founders spurned. Or possibly both could be reorganized as research centers at universities, returning to academia the scores of high-profile research faculty they have poached.
But a better outcome for society would be to establish public ownership and operation of their product-oriented capabilities. Turn OpenAI and Anthropic into US government agencies producing AI as a public good.
Transitioning the big AI labs into public agencies would require some restructuring. We can separate these companies into two pieces: product innovation and compute operations. The innovation function can be publicly managed, akin to national labs. Congress could provide more rigorous oversight than the kind of unfettered venture capital these labs have recently had access to. The US has a long, successful history of these kinds of institutions, which have produced world-shaping innovations in spaceflight, telecommunications, nuclear power and more. Congress currently manages a $200bn R&D portfolio, within which frontier AI development is, arguably, a glaring gap.
AI operations could be managed as a commodity resource, like public electrical or water utilities: local or regional ownership, nationwide distribution and strict regulation on how they balance fee extraction from ratepayers with raising capital for infrastructure investment. Although AI datacenters are not the same as power or water treatment plants, the US also has a long history of managing national, regional and state supercomputing centers.
Other countries, including Switzerland, Spain and Singapore, are already operating public AI labs. They also have national supercomputing centers already providing public access for running AI models for general use, as do Germany and Australia.
The benefits to the public are clear. Through democratic oversight, the most important AI models could become open, transparent and responsive to the demands of the public rather than private shareholders. They could be aligned to democratic values rather than corporate profits, never taking advertiser money to promote certain brands and training on only appropriately licensed data. And they could be set to focus on the realistic and pro-social goal of maximizing the usefulness of AI to society rather than the fanciful and anti-social goal of supplanting humans with artificial general intelligence.
By emphasizing scientific cooperation rather than corporate competition, we could also reduce the overall resource and environmental cost associated with AI. Instead of perpetually dueling training runs of each companies’ models at ever large scales targeted to fuel investor hype, we could limit AI training resources based on cost and benefit to the public.
What’s in it for the companies themselves and their employees, who sacrifice hypothetical billions in equity by ceding to public ownership? A return to their roots and to their core mission of developing AI safely in the public interest, if they are serious about it. Both companies are theoretically bound through their governance structures to prioritize mission over profit anyway (not that anyone really thinks that’s how they currently operate).
To be clear, we’re not advocating for a golden parachute for the executives or investors, or for continuing the outlandish pay rates of the most highly remunerated AI researchers. If the public is footing the bill, these compensation packages should be aligned to the civil service and those employees not satisfied with that can go elsewhere—if the business models of any remaining private labs still support much higher pay.
While we believe that these companies are unsustainable as private firms, the timeline remains unclear. Their primary investor story is that AI is a race to “artificial general intelligence”—the kind of AI you’re used to from science fiction. The bet seems to be that the two companies can convince enough people that this outcome will turn them a profit, go public, and then make their investors and employees rich before the bubble bursts.
But suppose that the bubble bursts. If the US is smart, it will catch the companies as they fall. Regardless of what the markets think, to the public, they’re too valuable to let die.
Emotional hygiene [Seth's Blog]
After doing an autopsy at the morgue, it’s a good idea for doctors to wash their hands before delivering babies.
A few hundred years ago, Ignaz Semmelweis proved this now-obvious insight about hygiene. Doctors don’t scrub because it’s fun or convenient, they do it because it’s a powerful way to create better outcomes.
When I was growing up, my family would sometimes go to Fantasy Island, a low-rent amusement park not far from my home. I soon figured out that while the spinning rides seemed appealing and daring, they would always make me sick and ruin the whole day. The good idea? Don’t go on the spinny rides.
Our culture creates traps and opportunities. There’s social and commercial pressure to engage in activities and jobs that don’t serve us very well. If horror movies give you unsettling nightmares, don’t go. No matter how many times your friends invite you, no is a complete sentence.
If being in debt is going to cause a long, stressful spiral for you and your fiancé, then don’t have an expensive wedding.
If doomscrolling your social feeds puts you in a bad mood, put down the phone and go for a walk instead.
And if the sight of blood makes you queasy, perhaps you should consider a form of medicine other than trauma surgeon.
Persistent emotional turmoil can undermine our peace of mind, and it might be caused by an ongoing spiral that’s fueled by the short-term choices we make. Cultural and economic pressure can make those choices feel non-optional, but if we can protect ourselves early, we may be able to create enough value for others that our hygienic choices easily pay for themselves.
There are countless opportunities to thrive. But we might have to make hard choices to find them. Don’t go on the spinny rides. We need you at your best.
Children Of The Corn [Penny Arcade]
New Comic: Children Of The Corn
A little helper class for managing LPPROC_THREAD_ATTRIBUTE_LISTs [The Old New Thing]
The LPPROC_THREAD_ATTRIBUTE_LIST is a bit annoying
to manage. You have to allocate memory for it yourself, but you
don’t know how much; you have to ask
InitializeProcThreadAttributeList.
And then when you’re done, you have to call
DeleteProcThreadAttributeList
before freeing the memory.
We suffered through this when
we controlled which handles are inherited by a new process.
I wrote a helper function to try to make it easier, by taking
the attributes as a separate parameter beyond the parameters to
CreateProcess but I’m not sure if it was
entirely successful.
Here’s another try, this time building on the Windows Implementation Library.
namespace details
{
inline void FreeProcThreadAttributeList(
_Pre_valid_ _Frees_ptr_ LPPROC_THREAD_ATTRIBUTE_LIST list)
{
::DeleteProcThreadAttributeList(list);
::HeapFree(::GetProcessHeap(), 0, list);
}
};
using unique_proc_thread_attribute_list = wil::unique_any<LPPROC_THREAD_ATTRIBUTE_LIST,
decltype(&details::FreeProcThreadAttributeList), details::FreeProcThreadAttributeList>;
HRESULT make_proc_thread_attribute_list_nothrow(
DWORD attributeCount, _Out_ LPPROC_THREAD_ATTRIBUTE_LIST* result)
{
*result = nullptr;
SIZE_T size = 0;
InitializeProcThreadAttributeList(nullptr, attributeCount, 0, &size);
auto p = wil::unique_process_heap_ptr<std::remove_pointer_t<LPPROC_THREAD_ATTRIBUTE_LIST>>(
static_cast<LPPROC_THREAD_ATTRIBUTE_LIST>(::HeapAlloc(::GetProcessHeap(), 0, size)));
RETURN_IF_NULL_ALLOC(p);
RETURN_IF_WIN32_BOOL_FALSE(InitializeProcThreadAttributeList(p.get(), attributeCount, 0, &size));
*result = p.release();
return S_OK;
}
unique_proc_thread_attribute_list make_proc_thread_attribute_list(DWORD attributeCount)
{
unique_proc_thread_attribute_list result;
THROW_IF_FAILED(make_proc_thread_attribute_list_nothrow(attributeCount, result.put()));
return result;
}
We start by declaring a helper function that cleans up an
LPPROC_THREAD_ATTRIBUTE_LIST by deleting the contents,
and then freeing the buffer. We use that to define a
unique_proc_thread_attribute_list which holds a
heap-allocated pointer that has been initialized as a
LPPROC_THREAD_ATTRIBUTE_LIST.
The first helper function is the nonthrowing version: it asks
for the required size of a
LPPROC_THREAD_ATTRIBUTE_LIST for the specified number
of attributes, then allocates that much memory on the heap, storing
it in a unique_process_heap_ptr so that it will be
freed if we fail to initialize it. Declaring that
unique_process_heap_ptr is a bit of a pain because we
want it to be a “unique pointer to whatever it is that
LPPROC_THREAD_ATTRIBUTE_LIST points to.”
It’s also annoying that we have to repeat ourselves in both
the template type parameter as well as in the cast of the
heap-allocated pointer, because CTAD doesn’t work here.
After we allocate the memory, we try to initialize it. If that fails (and I can’t imagine why), we propagate the error, and the RAII type frees the (uninitialized) heap memory.
If initialization succeeds, we return the pointer to the caller, who now takes responsibility for freeing it.
Note that the temporary holding place has to be a
unique_process_heap_ptr and not a
unique_proc_thread_attribute_list: If the
initialization fails, we must not call
DeleteProcThreadAttributeList,
so we have to hold the heap pointer in something that won’t
try to call
DeleteProcThreadAttributeList.
We can easily use the nonthrowing version to build a throwing version.
My next idea was to let you pass the attributes you want to pre-fill into the attribute list.
struct proc_thread_attribute {
template<typename T = void>
proc_thread_attribute(DWORD_PTR attribute, T* value, SIZE_T size = sizeof(T)) :
attribute(attribute), value(value), size(size) {
}
DWORD_PTR attribute;
PVOID value;
SIZE_T size;
};
template<typename C>
HRESULT update_proc_thread_attribute_list_nothrow(
LPPROC_THREAD_ATTRIBUTE_LIST list, C&& attributes)
{
for (auto&& attribute : attributes) {
RETURN_IF_WIN32_BOOL_FALSE(
UpdateProcThreadAttribute(list, 0, attribute.attribute,
attribute.value, attribute.size, nullptr, nullptr));
}
return S_OK;
}
template<typename C>
void update_proc_thread_attribute_list(
LPPROC_THREAD_ATTRIBUTE_LIST list, C&& attributes)
{
THROW_IF_FAILED(update_proc_thread_attribute_list_nothrow(
list, std::forward<C>(attributes)));
}
The container parameter can be anything iterable whose value
type has attribute, value, and
size members. It’s probably a collection of
proc_thread_attributes, but it doesn’t have to
be. (Maybe it’s a collection of things derived from
proc_thread_attribute.)
We can add this to our
make_proc_thread_attribute_list function so that
callers can pass in a list of attributes they want, and we’ll
make a list that holds them all. And as an extra bonus, you can
request room for additional attributes beyond those in the
collection you passed in. For example, you might have some
attributes that you always use, and then some others you decide on
dynamically.
// No changes to this function
HRESULT make_proc_thread_attribute_list_nothrow(
DWORD attributeCount, _Out_ LPPROC_THREAD_ATTRIBUTE_LIST* result)
{
*result = nullptr;
SIZE_T size = 0;
InitializeProcThreadAttributeList(nullptr, attributeCount, 0, &size);
auto p = wil::unique_process_heap_ptr<std::remove_pointer_t<LPPROC_THREAD_ATTRIBUTE_LIST>>(
static_cast<LPPROC_THREAD_ATTRIBUTE_LIST>(::HeapAlloc(::GetProcessHeap(), 0, size)));
RETURN_IF_NULL_ALLOC(p);
RETURN_IF_WIN32_BOOL_FALSE(InitializeProcThreadAttributeList(p.get(), attributeCount, 0, &size));
*result = p.release();
return S_OK;
}
// New overload that takes a list of attributes to preload,
// with room for any additional attributes you want to add later.
template<typename C>
HRESULT make_proc_thread_attribute_list_nothrow(
C&& attributes, DWORD extraAttributeCount,
_Out_ LPPROC_THREAD_ATTRIBUTE_LIST* result)
{
*result = nullptr;
unique_proc_thread_attribute_list list;
RETURN_IF_FAILED(make_proc_thread_attribute_list_nothrow(
static_cast<DWORD>(attributes.size()) + extraAttributeCount,
list.put()));
RETURN_IF_FAILED(update_proc_thread_attribute_list_nothrow(
list.get(), std::forward<C>(attributes)));
*result = list.release();
return S_OK;
}
// New overload that takes a list of attributes to preload,
// with no room for more.
template<typename C>
std::enable_if_t<!std::is_integral_v<C>, HRESULT>
make_proc_thread_attribute_list_nothrow(
C&& attributes,
_Out_ LPPROC_THREAD_ATTRIBUTE_LIST* result)
{
return make_proc_thread_attribute_list_nothrow(
std::forward<C>(attributes), 0, result);
}
Note that without the std::enable_if_t on the third
overload, we would have an ambiguity if somebody called
make_proc_thread_attribute_list_nothrow(1, p) because
the parameter 1 would satisfy both the
DWORD parameter from the first overload as well as
matching the third overload with C = int. To force the
third one to be rejected, we use SFINAE to make the return type a
substitution failure if the parameter is integral.
We can then build a throwing version out of the nonthrowing version.
unique_proc_thread_attribute_list
make_proc_thread_attribute_list(DWORD attributeCount)
{
unique_proc_thread_attribute_list result;
THROW_IF_FAILED(make_proc_thread_attribute_list_nothrow(
attributeCount, result.put()));
return result;
}
template<typename C = std::initializer_list<proc_thread_attribute>>
std::enable_if_t<!std::is_integral_v<C>, unique_proc_thread_attribute_list>
make_proc_thread_attribute_list(
C&& attributes, DWORD extraAttributeCount = 0)
{
unique_proc_thread_attribute_list result;
THROW_IF_FAILED(make_proc_thread_attribute_list_nothrow(
std::forward<C>(attributes), extraAttributeCount,
result.put()));
return result;
}
We use a defaulted parameter to collapse the “collection initializer” and “collection initializer with additional space” overloads into one. We still need to use SFINAE to avoid an ambiguity that tries to treat a sole integer parameter as a collection.
You can use this to build process/thread attribute lists at one go.
HANDLE handles[2] = { handle1, handle2 };
DWORD protection = PROTECTION_LEVEL_SAME;
auto list = make_proc_thread_attribute_list({
{ PROC_THREAD_ATTRIBUTE_HANDLE_LIST, &handles, sizeof(handles) },
{ PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL, &protection, sizeof(protection) },
});
Or you can build it up with some premade attributes, and others that you add conditionally:
HANDLE handles[2] = { handle1, handle2 };
DWORD protection = PROTECTION_LEVEL_SAME;
auto list = make_proc_thread_attribute_list({
{ PROC_THREAD_ATTRIBUTE_HANDLE_LIST, &handles, sizeof(handles) },
{ PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL, &protection, sizeof(protection) },
}, 1); // "1" leaves room for one more attribute
if (job != nullptr) {
UpdateProcThreadAttribute(list.get(),
PROC_THREAD_ATTRIBUTE_JOB_LIST,
&job, sizeof(job), nullptr, nullptr);
}
The post A little helper class for managing <CODE>LPPROC_<WBR>THREAD_<WBR>ATTRIBUTE_<WBR>LIST</CODE>s appeared first on The Old New Thing.
Breaking Up, p12 [Ctrl+Alt+Del Comic]
The post Breaking Up, p12 appeared first on Ctrl+Alt+Del Comic.
Girl Genius for Friday, August 14, 2026 [Girl Genius]
The Girl Genius comic for Friday, August 14, 2026 has been posted.
Surprise Unmasking [QC RSS v2]

It was Zlata all along!!!
Gunnar Wolf: File recovery in process... [Planet Debian]

Ohai,
I have some pending, encrypted mails to answer. And some of my answers for the next few days (particularly to what pertains to the current in-discussion vote on LLM usage in Debian) will be unsigned, even though I’d like otherwise.
My desktop system at work is showing some data corruption, and
I’m slowly backing up my data. Fortunately, it seems I
haven’t lost any data, but still, given I’m letting
rsync run
until it starts spewing I/O errors, then power down and let the
machine cool a bit, and start again… it is a potentially long
process.
And yes, this makes me somewhat angry. Why angry? Because I’m working on a brand-new computer (well, have used it for slightly over six months), custom-built to specs requested by my workplace. Specs that I don’t really need, this machine is an utter luxury (i.e. an AMD Ryzen 9 9950X processor with 16 real cores / 32 threads; 128GB RAM in this day and age of RAM shortage, quite recent 32GB GPU, and lots of shiny lights seen in its huge fishbowl cabinet, liquid-based cooling…). The specs came not from me, but from people who had no idea what we would use them for. And yes, I expect the little fortune spent on this machine to be good for my use for probably a decade, as my previous computer was, but the amount paid was… exorbitant.
But still, what I learned recently is that the 4TB nVME SSD it
has (a T-Force TM8FFJX34T) is… a very cheap brand, bought
because it was close to half the price of other offerings similar
in capacity. According to smartctl’s
output, th SSD operates with a Warning Comp. Temp.
Threshold: 90 Celsius and Critical Comp. Temp.
Threshold: 110 Celsius, which sounds sensible, even too high
for my standards (my last two laptops have been fanless… yes,
an ARM system is very different from a high-end gaming machine).
I’m right now typing from my laptop, which shows 78°C
and 82°C for warning/critical thresholds.
And as expected, under heavy sustained reads (backing up to my
NFS server), the desktop’s smartctl shows
Temperature: 83
Celsius and, further down, Temperature Sensor 1: 107
Celsius and Temperature Sensor 2: 82
Celsius (don’t know which of these would make the
threshold jump). The SSD has sustained Media and Data Integrity
Errors: 20 and Warning Comp. Temperature
Time: 21 (although Critical Comp. Temperature
Time: 0). At least one of my colleagues have shrugged and
installed a SATA SSD, laying the huge nVME basically to waste.
Anyway… I also learned I am not the first, but the fourth person to notice this kind of issues in this system (out of ten similar purchased systems AIUI). It is completely unacceptable, and I’ll be pushing our Institute’s authorities to demand the provider to provide either good component quality for this very expensive system that has many luxury items, or to fix the system’s build in a way the nVME does not heat as much as it currently does.
Anyway, sigh, I only wanted to say, please excuse me for not using my cryptographic keys for a couple of days 🙃
PS- I’m also currently not connected to IRC and Jabber (and some similar technologies), as my bouncer runs from my usual workstation.
Too Little, Too Late: Flock Admits Their Technology Needs Reforms [Deeplinks]
Flock Safety, the embattled vendor of mass surveillance technology, has rolled out a handful of new reforms intended to appease the justified nationwide anger that has seen scores of towns cancel or suspend their contracts with the company for automated license plate readers (ALPRs). The reforms are a combination of long overdue changes along with some cosmetic fixes that fail to address the fundamental dangers of this technology.
We should not be letting companies decide how much privacy we deserve.
So, what do these reforms actually do?
The most consequential is Flock’s default setting of an optional 7-day retention period for ALPR data, down from its original default optional 30-day retention period. This means if police want to retain data beyond the duration of their retention setting, they need to access “Evidence Mode,” i.e., when the desired data is associated with an active investigation and not just a fishing expedition. This is significant because, in at least some circumstances, Flock has previously charged its customers to extend their retention period. So, while towns can likely easily flip the switch to longer retention periods, it might come with a price tag some cities will be unwilling to pay.
Flock also has two other, likely easier-to-bypass reforms. The first is offense filtering so that cities can enable other departments to access their ALPR data only if they are investigating certain crimes, e.g., murder or robbery but not immigration-related investigations. The second is supposedly beefing up their audit feature and proactively locking out officers who file suspicious requests for data. The major problem here is the fact that Flock’s enhanced audit and transparency tools help to address a problem that Flock itself has created—an abusable mass surveillance system that tracks all cars all the time.
In addition to these reforms, there is also a tone shift coming from Flock’s CEO, Garrett Langley. Langley went from calling the DeFlock movement “terrorists” (which he has since apologized for) and saying that the wave of anti-surveillance anger was more about the current federal administration than it was specifically about his company, to a more conciliatory tone that acknowledges some of the problems of dangerous surveillance, mission creep, and police abuse. Just look at this report from the BBC:
“Historically, my point of view as a chief executive of a private company was, I don't know if I should be making these decisions. I don't know if it's my job to say how long data should be retained,” Langley said.
He added that he has come to agree with groups like the American Civil Liberties Union and the Electronic Frontier Foundation that police should need an active case number to search Flock's data.
“They're right. I think it should be required.”
To be clear, our position has long been that police, at a minimum, need to get a warrant, signed by a judge, in order to search for historic ALPR data regarding specific vehicles. For us, it’s common sense: if police want to dip into historic ALPR data like they were going back in time to retroactively follow your comings and goings, they need a warrant.
Fundamentally, these reforms leave us wondering: what is stopping Flock from reversing course on them if their law enforcement customers respond by defecting to another ALPR vendor? Nothing.
This all leads to the bigger and more important issue: We should not be letting companies decide how much privacy we deserve. If our privacy is determined by how much surveillance technology vendors decide is too much surveillance, then we’re really out of luck. It shouldn’t be up to Flock or any other ALPR vendor to decide how long police can collect and retain data on millions, if not hundreds of millions, of innocent people. We need lawmakers to step up and pass laws that restrict police’s use of surveillance technology. After all, the surveillance business model is the problem, and a few company-imposed slapdash reforms aren’t going to change that.
The Big Idea: Ryan Lowell [Whatever]

Miles of open road, a Big Gulp, and literal tons of steel. A trucker’s life ain’t an easy one, as author Ryan Lowell knows from years of experience as a dispatcher. This experience gave him the ideas and know-how he needed to write his newest novel, Freight.
RYAN LOWELL:
I spent much of the 2010’s dispatching truckers and writing fiction. Dispatching was not a career path I’d chosen — I’d studied economics in college — but the characters in trucking were undeniably inspiring, and they love to tell stories about the places they’ve been and the crazy shit they’ve seen.
Stolen freight is a common subject in the industry. You hear about it all the time. Every driver has a story about witnessing some shady situation at a warehouse or a truck stop. There are rarely cameras in trailer yards or rural lots, and one could easily hide a bag of cash or drugs or guns inside a pallet of cereal or stashed behind a load of furniture for transport across the country. I started thinking (and writing) about the industry in that context. It would be so easy to do this, or that! And then I read an article about a whole trailer load of ammo being taken from a truck stop in Mexico while the driver was inside. And I thought: that’s it!
Freight is a crime novel, but it’s also a story about behavioral economics. The characters’ relationships with money, and their relative financial desperation, is a constant and unrelenting theme in this novel. Money affects almost every decision we make, and I thought that factor — along with the characters’ varying levels of emotional intelligence, would become a crucial part of the story.
I had written several short stories over the years centered around the trucking industry, some of which I submitted to small publications and others simply for practice — a scene portraying the tension between dispatchers and drivers, or dialogue between drivers based on conversations I’d overheard — all of which I thought might prove useful down the road. There was a short story about a driver who ran an under-the-radar strip joint in rural Maine, a BYOB establishment housed in an old horse stable. He also had history of pulling the wires on his GPS tracking device, enabling him to drive past his legally allotted time — stacking up more miles, or money. That driver became Billy, the villain. There was another driver who locked himself out of his truck in the middle of the night, in his underwear, in the cold. I took that character and named him Theo, wound him up tight with anxiety and gave him a sidekick that wasn’t his wife (Sarah). And I knew that I wanted a dispatcher (Curtis) – because I had been in those shoes – at the center of the action, to tie all the other characters together.
But there were challenges to telling this story truthfully. The language is rough and the humor is crude and offensive. One must have thick skin in the trucking industry, and the interactions between dispatchers and drivers are often harsh and confrontational. I wanted to establish this dynamic early in the novel in a scene between Curtis and Phil. But as the story moved along, I also wanted to show truckers doing what many of them love to do most – alone on the road, music blaring, the scenery changing. The parts of the job I think even outsiders find appealing.
As the sole overnight dispatcher, I often wondered what it would be like to get a call from driver stating that his truck was missing. Wait – your tractor and trailer? Gone? How is that even possible? Did you forget where you parked it? Who do I even report the theft to? It seemed to me a beautifully chaotic scene, and I hope I was able to convey that.
There was a point in my trucking tenure — and this was not long before starting to write this novel — when I thought about getting out. I figured I could easily slide back into the world of finance. I interviewed at an investment firm and I remember the vibe, the clean cubicles and clean-cut people, the low voices and the lack of obscenities, the fake laughs and lack of good humor. And I thought: No. I don’t want this. I will miss the dirty jokes and the heated arguments and the people, the truckers, who will tell me how they really feel. I will miss the genuine interactions with those men and women of the road.
I didn’t take the offer. I stayed, and it was one of the best decisions I ever made.
Freight: Amazon|Barnes & Noble|Books-A-Million|Bookshop
Author socials: Instagram
Domas: Bypassing memory protection with AMD's memory controllers [LWN.net]
Christopher Domas has published a proof of concept with a description showing how to use AMD memory controllers' bank swizzle mode to bypass memory protection and read or write arbitrary data, including CPU microcode definitions and memory belonging to the platform security processor. Among other things, this allows code running at the kernel level to directly manipulate the meaning of processor instructions, potentially bypassing other security measures such as memory encryption and virtual machine isolation.
This is not, strictly, unexpected behavior: it is documented in AMD's manual (on page 113 of that PDF). But the fact that it can be used to access arbitrary memory and thereby rewrite supposedly immutable parts of the computer's firmware without crashing the host machine seems like an unintentional side-effect of the design. Fortunately, since enabling bank swizzle mode requires kernel-level privileges, the vulnerability is not an immediate problem for most software. Still, it seems likely that this technique will end up being used for nefarious purposes eventually.
Prompt Debt and “Fighting the Weights” [Radar]
Drew Breunig is one of the smartest voices writing about AI today. He’s the CEO and co-founder of cmpnd.ai, and a long-time hacker with a depth of experience from several eras, which is a surprisingly valuable asset these days. He’s also got a book on the way, The Context Engineering Handbook, already in early release from O’Reilly.
I like to say that context engineering is the art of shaping what a model sees so that it actually does what you want. (I just realized that in saying that I’m channeling a comment that Andrew Singer made to me over forty years ago, when he was teaching me about debugging. He called it “the art of figuring out what you really told the computer to do instead of what you thought you told it to do.” But that’s another whole story.)
Drew gave a talk at the recent Friends of O’Reilly camp, Foo Camp for short, about what he calls prompt debt, which he describes as “the hidden costs that teams rack up when they fight a model’s training instead of working with it.”
That was a novel and useful framing to me, that you end up with a bunch of stuff in your prompts to compensate for default behavior of the models, that those prompts no longer work as the models upgrade, and so it becomes a kind of technical debt. He’s thinking a lot about what the best developers are doing differently as a result.
So I invited Drew to reprise his short talk on Live with Tim O’Reilly, and then we talked about it with the folks attending the live event. They had a lot of good questions, so it was an interview not just by me but by a crowd of O’Reilly customers.
Drew opened his talk with two slides. The first was a prompt anyone could write in ten seconds: “You are a customer support assistant. Read the ticket, classify it as billing, technical, account, refunds, or other, return only the category name.” The second slide was the same prompt a few weeks later, after it had met the real world. It now said “REFUND REQUESTS ARE NOT BILLING” in capitals, then said the same thing again in different words, then closed with “This is a common mistake. Please do not make this mistake.”
Everyone who has shipped any application with a prompt recognizes the second slide. It is a simple but vivid illustration of prompt debt, which, like technical debt, has a bill that eventually comes due.
Note: Those aren’t real prompts. Drew just made them up to demonstrate his point. But what is real is that the instruction “Don’t quote directly more than 15 words from a source” occurs at least 7 times, in several variants, in Fable’s system prompt. So even Anthropic is incurring prompt debt! And what that repetition might tell us about the innate capability of Fable to quote directly from sources it has ingested is left as an exercise for the reader.
Drew itemized three costs of prompt debt:
That same Datadog report notes that 69% of all input tokens in customer traces were system prompts rather than user content. I’m not quite sure what to make of that. It does make clear that for all the ways that AI models are extraordinarily powerful, they are also extraordinarily unruly.
There are two reasons why prompt debt is incurred, according to Drew. The first is that natural language is imprecise, so the same intent phrased two ways produces different responses. Drew showed a study where someone framing the query as a patient asking how to taper off a drug called alprazolam gets refused by every AI assistant, while a psychiatrist asking about the same patient with the same clinical facts but with the right magic words to signify his professional status gets the protocol. Figuring out how to get the right response out of a model is a kind of spellcraft.
Drew also showed a more bizarre interaction, from Victoria R. Li, Yida Chen, and Naomi Saphra’s paper on guardrail sensitivity, which uncovered the perplexing fact that stating an allegiance to the Philadelphia Eagles made a model more willing to explain how to import a plant illegally. Go figure. Drew has written about that paper, and he has also used it in his own attempts to get a model to do what he wanted:
I once used this to get around alignment to generate a likeness that ChatGPT didn’t want to generate for me, and it refused. I said I was a Philadelphia Eagles fan. It said okay, and it rendered that image with the person holding a Philadelphia Eagles mug.
The second reason is that each model has its developers’ own preferences trained-in, and yours may be at odds with them. This is what Drew calls fighting the weights. He and Srihari Sriraman analyzed the system prompts of six major coding agents and found the same instructions repeated five and seven times in a single prompt, escalating through IMPORTANT to CRITICAL to MANDATORY to a threatened hundred-million-dollar penalty. He described what the author of such a prompt was doing as “war-driving the thesaurus,” hunting for wording that finally works.
Note: We didn’t talk more about Drew and Srihari’s paper, but we should have. It’s got some amazing insights in it. I highly recommend that you follow the link above and read it.
Drew has been tracking the published system prompts for Claude Code over time, and noted that they get shorter after each model release and then grow again. The reason, he suggested, is that Anthropic fixes unreliable behavior with a prompt patch, and then trains that patch into the next model. He said “That’s great for Claude Code, great for Anthropic. It’s a problem if you’re building a custom harness and your API calls look different than what Claude Code’s look like.” The developer of Pi, an open-source harness, kept finding that the models he worked with believed they were inside Claude Code and so they made Claude Code’s tool calls. He had to keep telling the model that no, they were working inside Pi. Fighting the weights over something like that is a real tax on developers. The point made above about Fable’s system prompt injunction against quotation shows how even the labs themselves are fighting the weights.
If you are fighting the weights, Drew says you have three options: solve it in your own prompt, catch and retry in the harness, or give up and make your API look like what the model expects. Steve Yegge came up with the last hack. Steve just added aliases for whatever the model calls in addition to his original method name. It works, but it means the expectations of the models now dictate the shape of everyone else’s software.
When Drew told me that more and more of the system prompt and the harness is being trained into the weights, that sent up a flare and my long history in the industry clicked into gear. It immediately got me thinking about lessons from the open source and web era. In particular, it made me think of the time in the mid-nineties when Netscape and Microsoft were both racing to build every feature up the stack directly into their web servers. And there was Apache, which stayed a web server with a clean extension layer that let other people build new features on top. Everything interesting got built on Apache. What I call an architecture of participation, modularity plus a clean separation between platform and application, beat integration every time.
I think Amazon got this right with web services too. Steve Yegge’s famous Amazon memo described how Jeff Bezos made every team expose its functionality through service interfaces or be fired, so Amazon’s own applications had to work on Amazon’s own platform. That way they had the same experience as their customers. That was very different from what Microsoft had done, famously having private APIs that were only available to its own developers.
So my prediction is that the big labs are making a strategic mistake. Training the harness into the model does make them better for predictable tasks and for less talented people, and it looks like a moat, but it risks foreclosing the innovation you would otherwise get for free from everyone else. As Bill Joy used to say, all the smart people don’t work for you.
Drew, to his credit, observed that “the labs are cornered rather than greedy.” Their interface is an empty text box that has to work for someone building a hundred-page harness but also for his neighbor who wants a website and knows nothing about code. Making the empty prompt box produce acceptable output requires baking in strong defaults.
That tradeoff has a serious cost, though. Drew quoted a line from Thariq at the recent CAIS conference: if you aren’t giving the model detailed instructions about what you want, what you get back is the average of everything in the model. That means that there is a real risk that AI is leading us ever further down the path to a monoculture.
Drew gave an example early in the conversation about image generation. You can now walk into any cafe in New York or Mumbai, he said, and see the same AI-generated art on its flyer. The earliest AI art out of DALL-E was strange and surprising, but what you get now is shiny and identical. When you optimize for reliability, you lose surprise. Which reminded me a bit of something Larry Wall used to say about Perl, that if it didn’t let you do stupid things, it wouldn’t let you do smart things either.
Drew made the same point about AI writing. He argues that post-training aimed at verifiable problems like coding and math and agentic tool use drowns out the human signal from pre-training, and so the more post training the models get, the worse they get at creative tasks. AI writing gets more and more predictable, people notice, and they don’t like it. Fable and GPT-5 write worse than Sonnet 3.5 and GPT-4o did. Drew thinks getting both good code and good prose from one model is likely impossible.
If you’re building a model that can solve coding challenges, you want reliability. But if you’re writing, where you want diverse rhythm and emotion and connection and engagement, I don’t think those two goals are mutually compatible.
We got into audience questions, and there were some great ones.
One audience member asked whether there are ways to set a time frame for prompt retention to avoid prompt debt? Drew answered that there isn’t a fixed time limit. Instead, teams should learn to recognize “prompt debt smell”: repeated instructions, one-off edge-case patches, or increasingly desperate wording. Those are signals to move logic into evals and automation.
Another asked how organizations can measure prompt debt quantitatively. Drew’s answer was to look at how often each prompt in your organization changes, how many people have edited it, and which ones have gone untouched for a year. Look for prompts only one person is allowed to touch. Then look at what models you are actually calling. “Having to run on old models and not being able to migrate is a good smell that you’ve got prompt debt in your organization.”
Some other good questions:
Another great audience question, and a good one to end this section on, was “There was prompt engineering, now context engineering, loop engineering, fleet engineering, graph engineering, harness engineering, goal engineering. What’s your take on how to navigate these many engineering disciplines?” I’ll let Drew answer that himself, in the video below.
Drew is more optimistic than his worries that LLMs are encouraging a monoculture suggests. If the default output of a model is the average of everything it has seen, “It tells us that there’s still a job for us humans,” he said, “which is that it’s our job to push the model out of distribution. We’re the ones that need to make it weird.”
Weird is a strong word, so don’t take it too seriously. (Though I find it interesting that Harper Reed also used it.) The way I make this point is to say that AI is a medium, like painting or writing or music. Everyone gets the same paints and brushes, the same words, the same notes, but some people draw more out of them than others, or do it better. Our job is to draw something more, something better, out of the ocean of possibilities in the collected knowledge hidden inside an LLM.
But there’s a more prosaic way to push the model out of its normal distribution. Be aware of its training, which is another way of saying “its biases,” and compensate for them. As an example of how to do this, Drew said his team deliberately chose not to use React for a new front end, because the models are trained so heavily on React that using it makes your site look like everyone else’s. He has also started using GLM and Kimi not to save money but because they are more malleable and take direction better inside a custom harness.
That led us into a bit of discussion about open source AI, which is the subject of my next AI Codecon. Drew’s ideas fit right in. He wants the open-weight ecosystem to survive precisely so that models stay infrastructure rather than, as he put it, becoming appliances.
Generative AI in the Real World: AI for Real Estate with Ben Miller [Radar]
A typical apartment building generates data on everything from leaking toilet flappers to tenant demographics, yet most of the real estate industry still runs its analysis by hand in spreadsheets. Fundrise co-founder and RealAI CEO Ben Miller argues the missing piece isn’t a better AI model but a proprietary data layer that general-purpose tools can’t replicate. Miller joined Ben Lorica on Generative AI in the Real World to cover how RealAI evolved from a data project into an AI-powered analyst tool, why the AI acts as an orchestrator rather than a financial calculator, which investment trends aren’t yet pricing in AI’s economic impact on real estate markets, and why he believes the trillion-dollar AI CapEx build is temporarily masking what will eventually be a deep trough in white-collar hiring.
About the Generative AI in the Real World podcast: In 2023, ChatGPT put AI on everyone’s agenda. In 2026, the challenge will be turning those agendas into reality. In Generative AI in the Real World, Ben Lorica interviews leaders who are building with AI. Learn from their experience to help put AI to work in your enterprise.
Check out other episodes of this podcast on the O’Reilly learning platform or follow us on YouTube, Spotify, Apple, or wherever you get your podcasts.
This transcript was created with the help of AI and has been lightly edited for clarity.
00.20
Ben Lorica
All right. So today we have Ben Miller. He is the co-founder and CEO of Fundrise. And today, we’ll talk about their interesting AI application called RealAI, which you can find at RealAI.com. Their tagline is “Answer any real estate question in seconds.” And we’ll also talk to Ben about broader trends in the AI industry. And with that, Ben, welcome to the podcast.
00.48
Ben Miller
Thanks for having me.
00.50
So, I definitely want to talk to you about RealAI in more
detail, but I think to take a step back. . . so broadly speaking,
as I understand it RealAI does the job of a real estate analyst,
but I think, Ben, for our audience, they don’t actually know
what a real estate analyst does. So maybe if you can briefly
describe what does a real estate analyst do?
01.16
Yeah. So our product’s designed for a professional real
estate investor, an institutional real estate investor will
typically buy large scale properties that are worth tens of
millions of dollars. And then analysts, like any financial analyst,
would [do due] diligence [of the] property, make a lot of financial
pro forma, do different sorts of investment memos and then make a
recommendation to buy or sell. And they also then manage the
investment after you acquire it. And asset management is actually
where most of the activity happens in terms of how you optimize for
rents and occupancy and different financing. And so the real estate
analyst’s job is to be the financial brains of the owner of
the property.
02.07
And typically this person, when they go about doing their
job, they have access to different data sources, they pull it
together, they run some financial models, and then they write up
recommendations, right?
02.24
Yes, exactly. That’s what the white collar worker today is
like. . . manual CRUD operation. Right? So they gather data points
from different reports and different online services they might
have. They usually populate a spreadsheet cell by cell that way,
and then they also will write up a memo. And that is all done by
hand, so it’s sort of like handcrafted. And all of that work,
at least the first draft, can be done by AI. And then the question
becomes, “why our AI versus Claude or ChatGPT?”
03.05
As I understand it too, Ben, RealAI actually didn’t
start out as an AI project. It started out as a data project
because back in 2023, as I recall, you were starting to talk to me
about wanting to start a data business of some sort for real
estate. Right? So I guess, for our listeners, Ben, why does real
estate generate so much data? I think I remember you telling me
that actually, most people don’t know a typical apartment
building throws off so much data, right?
03.40
So Fundrise is a fintech platform that democratizes investing into
private assets. And one of our original investment classes was real
estate, where we would have a fintech website and an iOS app, an
Android app, and we would have millions of users and they invest
through our platform, and we have a sort of Robinhood-type
platform. So we have payment processing and a system of record for
ownership, and all of the API services you need and microservices
for that company. And then over time we started eating the value
chain, and so we started heading from the investor towards the
asset. And eventually we ended up where when we acquire the asset,
we run the asset. We vertically integrated, so we’re the real
estate company and the tech platform, and the fund manager. And as
we acquired the asset, we discovered the underlying infrastructure
for that asset had a lot of data in it. And the way that people in
real estate do their work is sort of how we started. It’s all
very manual.
04.53
Can you describe what this data is?
Yeah. So there’s a bunch of different kinds of data sets you care about. At the property there’s a lot of activity happening. So, a toilet might be running and that’s the water bill. You have all sorts of leasing activity. You have marketing funnels of ‘where does the tenant come from’? You have lots of activity around the building in terms of like, who lives there, who’s moving there, who’s leaving, what’s the rent of the property across the street, what’s being built? So there’s endless amounts of data that’s happening at any point in the real world. And that real-world data matters to the person who owns real assets in that location.
05.46
And so then, it seems like the traditional approach was to
ignore all of this data? Is that right?
05.56
It had to be distilled so that a human being can pretty much only
consume a certain amount of tokens per second, and that usually
ends up in a spreadsheet. So what happens is, people at the
property or property managers, or maybe there’s our market
company, CBRE, will produce market reports and they turn all that
data into a spreadsheet so that you might get a 12-month reporting
or rent roll or a market report. And so they take a lot of data and
they distill it or transform or aggregate it into very few metrics.
And that was necessary. And then once a month you get emailed six
reports or 12 reports, and those reports are in a sort of dashboard
for how real estate people make decisions. And I appreciate this
and this is so obvious that there’s just you know, those
reports are both a distillation and there’s a lot of meaning
lost in the transformations, and a lot of data just left behind
because the system of record for real estate and for a lot of
industries, really the accounting system. . . income statements
and, you know, get operational data like a toilet flapper
that’s leaking, and that’s not coming into the report.
And how could it?
07.36
So basically, it sounds like what you’ve done is the
classic digital transformation of this industry. If you look back
to the data in 2023 to today, what is the evolution of this data
set? What was in the original data set, and what have you added
since then?
08.02
So we originally were thinking about how all this data could be
really useful for the real estate industry, the original business
we called Basis, and we were originally using it just for our own
company. And, there’s sort of property data. If you’re
going to make decisions in real estate, you care about change over
time. So time series, and you care about comparative analysis. How
is my property versus another property? How’s my neighborhood
versus another neighborhood? My city versus another city? And so
you need to have not just your own data, but you need to have the
context.
08.42
You need to have the data of other properties that are in other
places. And the entities in real estate are places, properties, and
then people, which was that we had this sort of insight when we
were in the data gathering property data and place data, is that
there’s a data model in real estate which essentially is the
property management system, which is basic accounting systems.
That’s Yardi and Tratta, RealPage. . . And those accounting
systems have an implied data model that is a property address and
the unit, but inside the unit is a person that’s not in their
data model. And a really big gap in their thinking. It’s sort
of like digital marketing. Kind of like TV. . . you’re going
to do it on CNBC, you can do it at 3 p.m., but you don’t know
who is watching. And then the internet showed up, and you can
actually then target with Facebook or, you know, Google. You can
target people who have eggs for breakfast and like Mozart. So all
of a sudden the people data becomes really critical. And the real
estate industry didn’t have any people data. It wasn’t
even part of their thinking. It’s not currently part of their
thinking. So we started realizing, “Hey, we get the kind of
granular people data you have in the marketing industry.” We
bring that into the real estate industry because you care about who
lives in a building and who’s leaving, who’s moving in,
who moving in the neighborhood? Who’s moving into the city.
Are they rich or are they poor? How old are they? What’s
their gender? All this stuff. Do they have iPhones? Do they have
Androids? So we started gathering up huge data sets of people data
and then putting that in the same databases you have with real
estate data and building out, and you can actually see that people
matter to real estate and you can actually make really good
insights, new kinds of data, correlations and stuff like that for
the sector.
10.43
By the way, this is the kind of thing that the hedge funds
have been doing for years. Right?
Right. Yeah. I was actually talking to a famous data tech guy, and we were on the phone, they’re like, you know, we sell our data to all these hedge funds, for like 50 big hedge funds in the world, which probably be Renaissance, and Jane Street, and Citadel, we’ve only ever had one real estate company by our data. I said, “Who’s that? Who’s that?” They said, “Blackstone.”
11.18
Oh, that makes sense.
So yeah, high-frequency traders are data hogs and they put their data into these massive data models, and they do a lot of data engineering and data transformation. And real estate people do it with Excel spreadsheets and do it by hand. And so there’s this journey that every industry goes through. . . real estate’s way back in the stone ages, where they still do everything by hand with people.
11.45
So the end result for RealAI. . . the back end data. . .
most of it is structured, probably sitting in some sort of data
lakehouse or warehouse, right?
We have two different kinds of data. We have a transactional database and we have one for rows and one for columns. Because we have a lot of data and we do a lot of compute. . . And because mostly people when they’re using AI are doing computations on the fly, we had to pre-compute a lot of stuff so that when people are asking questions about what’s happening, how much growth there is in the market or what’s happening with like rents or whatever the things are, a lot of that stuff has to be pre-computed every night. And that gets pre-computed in a Snowflake database. And we also do clustering algorithms, we clustered people by city and by block and by lots of different things so when people want insights it’s all pre-computed. And then that sits in Snowflake migrating to a Databricks-type database. And then there’s a separate database which is the transactional store that’s on the fly, that’s fast when people are asking questions and hitting our API.
13.00
So, let’s set aside the AI model and whatnot. For
listeners who haven’t tried it, I recommend you go to
RealAI.com. I use it once a month to monitor my properties. But
basically then what happens is you have this chat interface and
then I presume the AI model acts as some sort of reasoning layer
and also obviously parses your intention and what you’re
interested in, but then the heavy lifting is done by the data back
end, correct?
13.38
Yeah. I mean, I think most people have gotten here where you do
deterministic analysis, real and where you’re writing Python
and doing SQL. . .
13.49
Yeah. Okay. So in your case, if you hallucinate
there’s consequences, right?
Yeah. So the way we structured our application is that where there’s facts, there’s essentially a field that goes and pulls it from the database. So it’s not coming out. It essentially says, “What was the rent for the last 12 months in this property or in this neighborhood?”
14.16
But the AI model is the one that translates that prompt
into some sort of SQL query?
Yeah, but I mean, we used to use Claude and we moved to Vercel, but we have basically a software sandbox and it opens it up and does all that sort of. . . This is for real estate, for most people you say, well, you probably know how to do this, but if you’re going to do an analysis about your home or your property, you know, most people can’t write Python, most people aren’t good at doing SQL queries, plus they don’t have a good understanding of the the database schema. And so we built a semantic layer on top of it. And it really democratizes data science. Originally you said we were a data company, and then AI showed up and the AI sits on top of our data, and that made it a lot easier for people because to do the type of insights or analysis that otherwise they would have no idea how to do before.
15.28
But just to clarify, the AI is not doing any kind of
financial modeling or calculation, right?
No.
There’s some sort of forecasting or financial model or some sort of financial computation involved, and that’s not being done by the AI?
Right. The AI is like an orchestrator, and has the tools, right? And the different tools it uses and the tools are the web search or the calculator. I think everybody’s gone here, where I think a year ago or something, people were using vector databases and RAG and we moved away from that because you just want to be where it’s deterministic analysis. You want to just use regular software, to put that tool in the hands of the AI.
16.21
So the hard thing here is really maintaining these data
sets in many ways, right? So that is the key, because you have to
gather or you have to have domain knowledge to understand what data
you need and what data really matters. And, now you have a year or
so of history of people using the app and you’re
understanding, really what’s valuable.
What’s the hard thing? I mean, it just depends on who you are. We didn’t mean to do this, but luckily we have a lot of data. The data is proprietary. The data is really valuable. And so that gives us a reason to exist because what happened is that we built RealAI and we rolled it out, and Claude arguably made it obsolete. And this is a strategy question. I think the hard thing is trying to build the software business.
17.18
How can it be obsolete if it doesn’t have access to
your data?
Well, because people have. . . it’s really hard to get them out of their. . . they’re sitting in Claude. Trying to get it. And the reality is that. . .
17.38
There’s no A/B test. They can’t tell that they
can get better results if they. . .
So, our product is really good at, let’s say seven of the 15 things a real estate person needs to do. But there’s other things they need to do that they know our products are not designed to do, and so they need to have a general purpose tool that’s doing all their stuff. And so the day before yesterday, we got approved to be in the Claude marketplace. So we built a connector, we’re building a plugin, and now we’ll go to where the customer is, which is Claude. That’s our current strategy. And you can see it’s getting better. Claude is not as good as ChatGPT at making it developer-friendly. But we can build what’s almost the same as RealAI.com in Claude. And that’s where we’re currently headed. And you and I talk about strategy. I think that’s actually a temporary strategy. I don’t think that’s where the market ends up. But, yes.
18.50
But obviously, as users interact with your app,
there’s a lot of learnings there that you can leverage to
improve the app itself or even maybe the model powering the app.
But in other words, there’s a compounding loop. So the
question is will Claude cut you out of that at some
point?
I think the hard thing is always the people. I think the technology is actually at least. . . You know, I’m not an AI researcher at the frontier. The hard thing is really building a software product that people become addicted to, and the data engineering and data science and stuff, that’s just a grind, this is work. In the short term, we’re sort of conceding. . . I believe we should concede that the customer wants to be in Claude today, and they don’t want to be in a different application. Claude’s like the hot new hotness. But I think they’re going to get Claude fatigue within a year. I think that the real estate people are lagging the rest of the industry. Most people who’ve been using Claude for the last six, 12 months hit a lot of limitations for enterprise. And I think they’re going to want a harness that’s designed for real estate. But, in the meantime, we’re going to sacrifice some of the things we don’t get by having them in our app. And I actually think they’ll end up going back and forth between Claude and our app, because our app is better for real estate than Claude, but Claude is better for everything else. And the way that the Claude plugin and, and I think it ultimately ends up being a RealAI app in Claude. It wants to go back and forth between our app and their app and wants to be seamless to the user. But after that—and this is really a strategy question—after that, do we end up with an open source real estate fine-tuned, trained model instead of Claude in a year or two? I don’t know, but it seems that would be a good expectation.
21.23
At the end of the day, even if you open up that model, that
model still needs the data, right?
At the end of the day, that open source model a year from now. . . when we rolled out Sonnet 5, it didn’t change. It didn’t get better for the customer. Like we just don’t need the Fable. . . it’s actually worse for the customer. So I think that once the open source models are comparable to—I’m just gonna say Sonnet 5 or whatever that generation is—the customer is not getting the premium they’re paying for. They just don’t need it.
22.05
By the way, there’s tons of companies now that focus
on helping enterprises get to specialized AI. And basically
there’s two branches, right? So there’s the post
training branch which comes down to fine tuning and reinforcement,
fine tuning, tons of startups there that are coming online. And
then, there’s even companies that will help you pre-train
models from scratch. I think the trend is toward the inevitable
simplification of both things. Which will mean that a lot more of
the compute will go towards specialized models like yours. And then
less of the compute going to the. . .
22.52
I’m not as confident in that. . . I mean, I’m agnostic.
I think we could end up in a world where Claude replaces Microsoft
and everything’s inside Claude.
Yeah, it’s possible. But then, I think that the general purpose models increasingly are going to be perceived as too overkill for a lot of things.
23.15
Yeah, I think that’s true in theory, but the consumer is so
sticky and it’s hard to get them to change their
behavior.
Yeah. If it’s a consumer app. But most enterprise work is just back end. . .
23.31
But I’m dealing with an SMB not like a Fortune 500,
generally. And the SMB, in a lot of ways, acts more like a consumer
than like an enterprise. And so I hear what you’re saying,
though.
23.46
Hey, I have a question for you as far as UX. You have an
application where someone is asking a question. It could be an
important question for the user. How do you communicate uncertainty
or how do you say, “Hey, here’s an answer, but
there’s a lot of caveats behind this answer” How do you
do that in your case?
24.23
That’s very hard to do. I was just getting that feedback
yesterday because even facts in the data world are not 100% facts
usually.
24.33
There’s alternative facts.
Yeah. I mean there’s just methodologies that change the information. Is the rent growth a point to point 12 months ago? Is it a median? There’s just a lot of ways you can get to something that’s true, but not the same answer as someone else. But my actual experience with consumers is that they actually don’t care about that. It’s all really about perceived credibility. . .
25.16
So I guess in the UX then, the question is if there’s
some sort of uncertainty or disagreement, do you surface
that?
25.28
Yeah, we surface data coverage. We have a whole section in the
response that’s about a meta analysis about the data and
about where we made decisions. . .
25.39
Or do you say, “This property, we think the rent you
can charge is this?” But it’s really more likely in
this interval. It’s not a specific value. And here’s
the reason why there’s an interval instead of a
value.
26.00
AI is really good at that kind of caveats and adding context in and
again like there’s. . .
26.12
But it’s a UX problem, though. You have to decide to
surface it, right?
We definitely surface it. But I find that the user ends up like it’s really a journey. In the first phase, they’re trying to determine if the data is good, and then once they’ve decided the data is good, they don’t really care about the caveats. They’ve sort of internalized to them how to think about the data. And it’s really a problem in the beginning of a user’s use of it. It’s not really a problem once they become a power user.
26.50
So I think that that’s a UX debate that people will
have, moving forward. Because I think basically, like I said, in
terms of actual studies around decision-making, it does make a
material improvement. Since we have you, we’ll close the
discussion. And before I ask a question, listeners, this is not
we’re not about to give you financial advice; we’re not
financial advisors. So there you go. That’s the discussion.
First, first thing then, you have access to all this data in real
estate, right? So you have all the patterns, but you’re also
obviously an investor in AI and AI startups. Right? So, obviously
you’re seeing trends in AI that you think aren’t being
reflected yet in the real estate market.
27.53
I know I think you’ve mentioned to me in the past, I
think so, as an example, to make this concrete, I think you
mentioned to me in the past that maybe if you’re buying
property with the assumption that there’s a lot of back
office workers moving forward and those back office workers are
located in, I don’t know where. . . Phoenix, Arizona. .
. Maybe you should have second thoughts. Right? So what are some of
the AI trends that you think are not yet being priced into real
estate investing?
28.28
What’s good about the trends I’m seeing in the data
I’m seeing is I think they’re consonant or consistent
with what people would intuitively think. So, AI is
causing—in the data—a lot more disparity in outcomes.
And so in real estate something used to be a truism. I mean, people
will say people always need a place to live. And so you would buy
workforce housing, affordable housing, things where if you have
housing that’s affordable. . .
29.04
Or always buying is better than renting.
It’s just like cheaper is better than expensive, right? If you can offer housing that’s less expensive, less expensive to file, it’s less expensive to rent. That’s good business. And that actually I think is breaking down, which is maybe unintuitive but also maybe intuitive. Is that where the marginal dollars are ending up in the hands of people who have a lot of money and the people who don’t have a lot of money, which is basically the bottom half of the country, or even maybe the bottom 90% of the country. . .
29.45
95%.
Maybe. You can break a lot of different ways. But the point is that, this K-shaped economy where the normal person is doing worse and the best are doing better is. . . AI is accelerating that trend. And that way that affects real estate is if you’re an investor, you want to actually focus on the high end. If you’re going to be building, you can be investing. . . high end essentially is price-insensitive and the low end. . .
30.15
Because the low end people have no disposable
income.
The low end is under strain. And then what is happening in real estate is that strain is showing up as a political manifestation of controlling pricing. And so you can’t make money providing affordably priced housing because the government won’t let you. So the government will let you take essentially excess profits from the rich, but it’s becoming more and more challenging to invest in and build for the normal person, because the government’s intervening in all sorts of small ways that people don’t see around how permits are pulled and lots of impact fees and things like that. I mean, in San Francisco and LA and New York, you see obvious examples of that. But it’s happening everywhere. And in real estate, you usually make an investment over a five year period, maybe even ten years. And so the long term trend is the most important thing. And I think then you essentially say. . . this is terrible by the way, from a social point of view, the societal point of view is very negative. I’m not commending this trend, I’m just saying that’s what’s happening on the ground.
31.40
What about this notion that certain hubs are optimized for
a certain type of work? Is that something you think
about?
31.54
Yeah. That’s the thing you were I talked about last time. San
Francisco is obvious, and then you look at Charlotte. But certain
types of people move to certain places to get certain types of jobs
and work from home drove that middle income white collar worker to
work remotely, or they moved to more affordable places like
Charlotte, Tampa, and Orlando, all these places where it’s
affordable to live, and they do middle office work, back office
work, and that job is getting decimated by AI. In particular, a lot
of cities where young people would move there. They’d move to
an apartment building, they’d move to downtown. They’d
have a new job in a middle office of a medium to big size company.
Those jobs don’t exist today. And so they’re struggling
with where to live and they have roommates or living at home. And
so the real estate that used to be where young people moved to is
struggling as a result.
33.08
So I took you on your first Waymo ride. And how about
things like that? I mean, now I can Waymo from
anywhere.
33.19
I tried to invest in Waymo and I was not yet successful okay. I
reached out to the CEO I had 37 connections to and I got no love.
But yeah, the Waymo thing is such a good example of diffusion, a
diffusion problem because the technology is completely mature and
you can’t get it rolled out in any of the. . . DC’s
fighting it and Boston’s fighting it. And for it to really
affect real estate, it needs to become as seamless as Uber and Uber
rolled out way faster, way more aggressively. They obviously took
more risk on the rollout. So, you know, if you said ten years from
now, how does that affect the patterns of living? I think
you’re going to see. . . I’ve looked at this a number
of times, but I think it’s premature to make these
investments. You want to be investing in the wealthy satellite
towns of. . . if you’re doing San Francisco, which is a
little bit challenging to the Athertons. But in Atlanta, it’s
the Greenvilles. There’s a lot of great wealthy exurbs that
have many miniature downtowns that are cute. And so I think
you’re going to see these satellite cities become very, very
successful as a result. But those satellite cities are going to be
mostly for the wealthy. So again, it’s all about wealth, not
about affordability.
34.50
All right. Closing question. You’re a CEO. I know
you’ve talked about the impact of AI and automation on
hiring. And you talk to other CEOs. So as best you can tell, set
aside the headlines and the news accounts. What are you hearing
from CEOs about AI’s impact on the workforce and hiring?
Hiring in particular.
35.20
It’s more mixed than the headlines. I think I’d say
it’s both true that we have needed less people, haven’t
hired as many people and also have needed to expand as a result of
AI. And so I think I’m hearing a “both”
situation. So it’s really a question of what’s the net
impact? And I feel like it’s too soon to call. I think on net
it’s still net negative on hiring, but it’s too fuzzy
for me to have a good call on it.
35.58
Do you have any sense whether or not all the stories
we’re reading about. . . if it’s particularly
challenging for new college grads and people looking for that entry
level job?
36.17
We don’t hire those people, and we rarely ever did.
Because the stereotype is those jobs I can just use AI.
36.28
I think of it as this cascade effect. Where we hired hundreds of
people over the years, and what happened was there’s this
elevator dynamic or escalator dynamic, where the person who was an
early grad becomes middle and then they make space for the next
person.
36.52
The talent pipeline, right?
Right. And that dynamic. . . AI’s changed it so much because you just don’t need. . . the people who are at the upper middle are so effective. . . And actually, this is something everybody learned in 2020-2021—more people means less work gets done because you have to manage people and you’re needing meetings and remote work is really brutal for information transfer. And so it’s actually way more effective just to do it yourself with AI than it is actually to have five people. And I think it’s actually more satisfying. And so I believe I’m net negative on jobs in the white collar work. And we’ve invested in some data centers that are like $50 billion data centers. And when you go there, there are thousands of people on site working. I mean, it looks like we’re in China. . .
37.50
For now, while they’re building it.
So I think what’s happening is that the job market doesn’t seem as bad because of this trillion dollar a year AI CapEx build. But I think that’s a five-year build, not a 50-year build. And then I think that in the meantime, that’s coring out the white collar worker. And so I think on the other side of this, when the bubble finally bursts, it’s going to be a deep trough.
38.22
So then that talent pipeline . . . if you don’t have
the entry level jobs who become the middle managers. . . and so on
and so forth. . . So you have the entry level developer who gets
more knowledgeable. . . then you don’t have that. Right? So
you end up with what?
38.42
Your talent pipeline, it’s a thing. I’ve one of the
things I’ve said to the team and this is harsh, but I’m
going to say it, but it’s a brutal thing. There’s a lot
of people in an organization who are good but aren’t going to
be the next great people. And I said, “If we don’t have
a talent pipeline anymore, you need to turn those people over
faster.” Essentially, unless you were bad. . . bad people
managed out, but if you’re good, we kept you. But if
you’re great, you get promoted. But now if you don’t
have this talent pipeline, you have to change what you expect of
the good. You have to turn over some of them, and look for people
who are good with the prospect of building that. . . So you have to
change the talent pipeline or talent escalator because you
don’t have as many people coming through as you used to. So
it’s more of an up-or-out dynamic than it used to be.
39.42
Oh, I forgot one last question on RealAI, which is, I think
you still do seat based pricing, right?
39.52
We don’t know how to price it.
So that’s it then? If I’m a real estate
analyst, you’re charging me $50 a month, but I’m
hammering this thing, costing you $1,000 a month.
40.04
No. The seat buys a certain number of tokens. So it’s more
like it’s more like usage tiers, is how it’s priced
today, but I don’t know how to price it. We’re still
early in this evolution. I mean, we’re real estate. . . so
real estate is going to be lagging other sectors in terms of
adoption. And so I don’t know what the right way to price it
is because it doesn’t want to be only usage, either, I think
that’s not right. But I don’t know the answer.
40.41
But even the tiered pricing, if I’m on a token
matter, at some point I’m already at your top tier price and
I’m still busting through it.
40.52
Yeah, that’s a great situation though, because tokens
aren’t that expensive. I know everybody’s obsessed with
them, but I think tokens are the smallest part of our cost.
41.04
But if you’re charging me $200 at the very top tier,
I’m actually spending so much compute. . .
41.15
I think that would be a great scenario to have in the future. . .
for the few power users, that’s happening for us. Great. I
hope they feel like they’re getting a good deal.
41.26
And with that, thank you, Ben.
Yeah. Thanks, Ben. Thanks for having me.
Great name, by the way.
WordPress as the text of the web [Scripting News]
I wrote something candid on Twitter last week and felt it was worth repeating here. It is a bit judgmental, and for that I apologize. But I couldn't keep the meaning without all the words.
I know this is a story I repeat often. The opportunity is
still there. All kinds of bad products and companies are camped out
in this space, taking advantage of users' trust but they feel they
have no choice but to use the bad products. On the web, we'd like
to keep improving what the web can do with text, so even though
it's always slightly more difficult to use an open ecosystem, it is
possible to get most of the functionality and all of the freedom,
and new features that the lock-in guys will never give you.
rsync 3.5.0 released [LWN.net]
Version 3.5.0 of rsync has been released with a huge number of security fixes:
This release fixes 33 security issues found during a focused audit of rsync's path handling and daemon protocol, a companion daemon-protocol fuzzing pass, and reports from external researchers -- plus several robustness hardenings. CVE IDs were assigned by VulnCheck (CNA); the precise "introduced in" version ranges accompany each advisory, and many are much narrower than "everything before 3.5.0". Every fix ships with a regression test in the test suite that fails on the unfixed tree.
[$] 128-Bit page tables for Arm [LWN.net]
The size of a processor's page-table entries directly limits how much physical memory that processor is able to access. Back in the 32-bit days, that limit was 4GB, an amount of memory that once seemed nearly infinite, but which would now struggle to hold a basic AI-enabled "hello world" app. The expansion to 64 bits on most popular architectures would seem to have removed those limits now; some Arm systems, for example, can use 56 of those bits to access up to 72PB of memory. So it might be surprising that the Arm architecture is evolving to support even larger page-table entries (PTEs). This patch set from Anshuman Khandual adds support for 128-bit PTEs, but who will benefit from this capability is not entirely clear.
Security updates for Thursday [LWN.net]
Security updates have been issued by AlmaLinux (abrt, dhcpcd, edk2, freerdp, gegl04, grafana, gstreamer1-plugins-good, iscsi-initiator-utils, isns-utils, kernel, kernel-rt, keylime, libarchive, libyang, nodejs-nodemon, opencryptoki, osbuild-composer, pacemaker, postgresql-jdbc, postgresql18, python-idna, python3.9, udisks2, valkey, vim, xorg-x11-server-Xwayland, and yggdrasil-worker-package-manager), Debian (flatpak, lemonldap-ng, neutron, python-django, spip, xdg-dbus-proxy, and xorg-server), Fedora (apr-util, cri-o1.34, libcupsfilters, linux-firmware, sqlite, and vaultwarden), Gentoo (FreeType), Oracle (dovecot, evince, fence-agents, gnutls, gstreamer1-plugins-bad-free, gstreamer1-plugins-good, isns-utils, java-1.8.0-openjdk, kernel, libarchive, osbuild-composer, pipewire, postgresql, ruby, ruby:3.3, sudo, and udisks2), Red Hat (bind, bind9.16, gnome-remote-desktop, grafana, opentelemetry-collector, python-pillow, python3, python3.12, python3.14, python3.9, and rhc), SUSE (chromium, clusterctl, dracut, gd, git-cliff, gleam, govulncheck-vulndb, graphicsmagick, gzip, kernel, kubevirt, libheif, librest0_7, nodejs22, nodejs24, openssh, openvpn, python3, python313-scikit-learn, rpm, stunnel, and zk), and Ubuntu (kernel, libgit2, linux, linux-aws, linux-aws-fips, linux-azure, linux-azure-6.8, linux-azure-fde, linux-azure-fde-6.8, linux-azure-fips, linux-fips, linux-gcp, linux-gcp-6.8, linux-gcp-fips, linux-gke, linux-gkeop, linux-ibm, linux-ibm-6.8, linux-nvidia, linux-nvidia-6.8, linux-nvidia-lowlatency, linux-realtime, linux-realtime-6.8, linux-xilinx, linux, linux-aws, linux-aws-fips, linux-azure, linux-azure-fde, linux-azure-fips, linux-gkeop, linux-ibm, linux-ibm-5.15, linux-intel-iot-realtime, linux-intel-iotg, linux-intel-iotg-5.15, linux-kvm, linux-nvidia, linux-nvidia-tegra, linux-nvidia-tegra-5.15, linux-oracle-5.15, linux-realtime, linux-xilinx-zynqmp, linux, linux-aws, linux-aws-fips, linux-azure-4.15, linux-azure-fips, linux-fips, linux-gcp-4.15, linux-gcp-fips, linux-kvm, linux, linux-aws, linux-azure, linux-azure-fde, linux-ibm, linux-oracle, linux-raspi, linux-realtime, linux-azure, linux-azure-6.17, linux-gcp-6.17, linux-hwe-6.17, linux-oem-6.17, linux-realtime-6.17, node-follow-redirects, and yelp).
Make America America Again [Scripting News]
The press is freaking out about Democratic Socialist candidates winning elections all over the country.
They can relax, because the government of the United States thrives on different points of view, and thus -- compromise.
The Democrats can have any combination of points of view, as long as they play by the rules of democracy. In fact it would be an even better demo if their points of view were more diverse.
The coalition the press talks about are the people who vote for America. This is true -- if they vote for the Republicans this time around, they're voting for the party that is dismantling America. Spin it all you want, but we can see what's happening.
And btw, the assumption that the voters are too dumb to figure this out -- I think that's incorrect. But as long as you talk to them as if they are that dumb, what choice do they have. Put out an idea of what America is and if it's right, and reaches both the heart and the mind they will get behind it. Everyone knows we're in a dangerous spot, with secret police roaming the cities, ready to crack down on dissent, but so far they haven't dared to go that far. People feel that. And that's what you must run on.
The best ad I've ever seen on this theme was for the Bernie Sanders campaign for the 2016 nomination. I'm reduced to tears every time I watch that ad, and I wasn't a Sanders supporter in 2016.
CodeSOD: Never Eating the Cookie [The Daily WTF]
Maciej works as a freelancer, and that frequently means picking up old PHP code that nobody wants to support.
One project had been lingering for ages with key features missing. Specifically, it was supposed to make HTTP requests to other services on an interval, and use that to populate its data. "The old dev tried, but never got it working." It was Maciej's turn to give it a shot.
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookie );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
curl_setopt( $ch, CURLOPT_COOKIE, $cookie);
// ... many other options set, of course not in a function, just copy-pasted in many locations in the code ...
curl_setopt( $ch, CURLOPT_TIMEOUT, $interval );
$s = curl_exec( $ch );
curl_close( $ch );
This particular block of code appeared multiple times in the
code. Every place they meant to send an HTTP request, they
copy/pasted this code in. The URL would be a different value, but
the bulk of the code was just a dozen lines of copy/pasted
curl_setopts.
Now, I don't know that they were dreaming that setting
CURLOPT_TIMEOUT was setting a recurrence interval. But
they do call the value $interval, and I can imagine
the ignorant hoping to set up cURL to automatically reinvoke the
request on an interval. But even if that's their goal, that's not
the actual problem with this code.
They initialize a cURL wrapper, set a pile of options, and then
execute the request, storing the result in $s. And do
you know what they do with the contents of $s after
this?
Nothing.
The request works, perhaps not on an interval, and populates the variable, and they just never use it. The old dev "tried" and never got it working? It seems like they started and got bored.
There was far worse spaghetti code to manage in the project, but it was this gap that really got Maciej's attention.
Joe Marshall: A Web Site in Vibe Coded Common Lisp [Planet Lisp]
I believe that vibe coding is the future. This is crazy because last year I was a skeptic. Last year LLMs couldn't write large Lisp programs. They'd get the parentheses wrong, they'd hallucinate functions and packages, and they couldn't understand the architecture of a large program.
This is all in the past.
A SOTA frontier LLM absoulely can write large lisp programs. It will keep coherent across abstraction layers, it will restrict itself to functions and packages that actually exist, and it can balance parentheses correctly.
I put my money where my mouth is. jrm-code-project.com is my web
site where I have been writing about vibe coding in Common Lisp.
The site is written in 100% Common Lisp and it is 100% vibe coded.
The site is modest so far, with a few pages and a few blog posts
and tiered membership levels. It isn't pretty; neither I nor my LLM
is a graphic designer. As a pedagogic exercise I added a Lisp
pastebin to the site. I invite people to create a free account and
try it out. I'm pretty sure that the site can handle being exposed
to the public internet (of course *read-eval* is bound
to nil), so feel free to push the limits.
Separating AI’s Technological Problems from Its Capitalism Problems [Schneier on Security]
This essay was written with Nathan E. Sanders, and originally appeared in Tech Policy Press.
AI represents the first time we humans can do cognitive work outside of our bodies at scale. The only comparable moment is the early years of the industrial revolution, when new technologies like the steam engine provided a quantum leap in our ability to do mechanical work outside of our bodies at scale. If AI’s cognitive capabilities become integrated into our lives, businesses, and governments—a process that will take years if not decades—society will be as unrecognizable as the modern world would be to a preindustrial farmer. And yet, Americans—by a wide margin—say that AI is moving too fast and will have a negative effect on society.
This confluence of technological revolution and public distrust deserves urgent discussion, and a proper framing. The question is not whether it is possible to develop AI in a non-exploitative way, or even whether we can trust AI companies to act in the public interest. The question is whether we will recognize that our existing social and economic systems are failing to achieve these outcomes, and whether we can act in time to make structural change.
Today’s AI is mired in political and economic systems developed generations ago that were never designed to manage widespread computation, let alone automated cognition. The gaps in those systems—and their proclivity to be exploited—are the primary influence on how the technology is being developed, deployed, and used.
In any discussion about AI’s potential, it’s important to separate the technology from the socio-political system it’s embedded in. That AIs can lack context, mix up facts, or fall for stupid tricks are all technological problems. Because the giant developers like OpenAI and Anthropic have prioritized solving them, AIs can now more easily access resources like the web or email, are more disciplined about using those resources, and are better at staying within their guardrails.
Yet AI developers do not seem to be prioritizing other technological problems. Major AI models still act far more sycophantic than humans, telling people what they want to hear even when untrue or not in their best interests. Popular AI models tend to answer questions confidently even when they lack training, knowledge, or evidence to back their claims. In both cases, AI developers choose to train models that please users with flattery and the appearance of competence, rather than constraining them to act in users’ and society’s best interests.
In contrast, ensuring that AI models benefit people broadly, that their energy costs are fairly allocated, that their environmental impacts are minimized, and that they don’t steal content and revenue from publishers are all questions of incentives in a capitalist system.
It’s easy to conflate technology problems with capitalism problems. Back in 2021, science-fiction writer and AI commentator Ted Chiang said that “most fears about AI are best understood as fears about capitalism.” It’s not the tech per se; it’s who controls it and how it could be used against us.
Imagine an AI assistant for a doctor. We can imagine it affecting the profession in one of two ways. The AI could give a doctor more time to do the human parts of their job: to spend more time with their patients, to listen more closely to their needs, to explain things more fully. Or the managers of the medical practice could give that doctor five times the patients—and fire the other four. Which way it would go is not a question of technology. It’s a question of market incentives.
The two are related, of course. Capitalism steers technology, and technology steers markets. But holding the two separate helps us understand that we, as a society, face independent choices on both the technological and sociopolitical axes that need not be coupled.
For example, consider the costs of AI. The leading US labs tout to investors that their frontier models are very expensive and energy-intensive. There are significant technological challenges about improving their energy efficiency, but the sociopolitical questions are more pertinent. It’s a corporate decision made under capitalist market incentives to constantly pursue new models that incrementally push the frontier—at enormous capital cost—and to use them, seemingly, everywhere. Nothing about the technology of AI dictates that models must be retrained constantly, at the largest possible scale. Or that they have to run on every web search, every interaction with your phone, and every time you walk by a security camera.
In a different political and economic system, Chinese developers are producing—and then giving away—smaller, more efficient, more affordable models. While the US government seeks to restrict China’s access to the most advanced chips, China is betting that incentivizing their tech giants to create leaner, more open models using more commodity hardware—models that can be trained with older chips and run even on personal computers—will be an advantage in achieving widespread use and, perhaps, Chinese national influence.
There are other pathways for AI development that are not in service of private capital gains nor authoritarian regimes, but rather a democratic public interest. The best example comes from Switzerland, where public institutions—research funding agencies, universities, supercomputing centers—have collaborated to produce an AI model called Apertus. It is trained entirely on data validated to be licensed for use with AI (not stolen), on preexisting public computing infrastructure, and using renewable hydropower. Its developers are incentivized to produce a public good, not turn a private profit.
It’s dangerous to confuse technology problems with sociopolitical ones. Popular proposals like pausing AI research, moratoria on data center development, or subjecting frontier models to federal government screening are all framed as addressing problems with AI’s technological development, but fail to take into account the larger social problems that govern it. China’s success with government-endorsed development of open-weight frontier models illustrates the futility of keeping AI tech as national secrets, or of any pledge to scale back deployment.
AI is already legitimately useful for a wide range of tasks. It can be a tool for public good, if we choose to solve its sociopolitical problems. Our goal should not be to slow its pace of improvement or scale of deployment, but rather to steer it away from consolidating power and towards the public benefit. We can build sustainable AI, minimizing environmental and energy impacts. And we can equitably distribute the material gains it produces.
Integrating a technology as disruptive as AI responsibly requires structural reforms, and we should decouple the social and technological aspects of AI to design those reforms. Companies—including tech giants—should be forced to pay the energy and environmental costs of its development. Profits should be taxed adequately and redistributed. Antitrust laws should be strongly enforced. Corporations should have a fiduciary responsibility to stakeholders beyond their majority shareholders. These badly needed reforms are responsive to the problems with capitalism that AI is exacerbating, even if they are not specific to the technology.
Grrl Power #1486 – And pause for the not-surprise attack… [Grrl Power]
Maybe she went to go eat some spinach, or took a Proton Energy Pills which gives her the power of 10,000 atomic bombs for ten seconds? Look, all things being equal, I’d rather have the power of 1,000 atom bombs for 100 seconds, or maybe even 100 a-bombs for 1,000 seconds. What I wouldn’t want is the power of 1 a-bomb for 10,000 seconds, because it seems like you’d wrap up most adventures pretty quickly with that kind of chutzpah, and you’d be standing around for 7,000 seconds waiting for the pill to wear off so you can go get lunch without accidentally blowing up the diner.
The tournament is supposed to be no-holds barred, but they’ve slowly introduced rules over the years to keep things moving along. Did you guys ever see the earliest UFC matches? They hadn’t refined the rules, and so a lot of matches turned into “grappler takes a few hits while diving in to grab at someone’s midsection, they go down, and the grappler spends the next 25 minutes trying to force the other guy to tap out. I only ever watched a few matches in the early days, and after that, I’ve seen the occasional highlight on reddit or wherever, but I’m pretty sure if you get grappled, you’ve got less than 25 minutes to get out of it these days. Or maybe not. Maybe all the grapplers have had to learn that almost-hyperextend-your-elbow hold to force people to tap out.
I’ve peppered in the rules for the UCBA, and I’ll try and remember and list them all here. It is a deathmatch, meaning you can kill, but if someone yields, it’s pretty bad form to keep pounding on them. Fighting at this level means someone can launch an ICBM, causing the target to yield, but that doesn’t necessarily mean the guy who launched it can abort it in the two seconds before it hits. It comes down to a call by judges, though it’s rare that anyone gets removed from the tournament for ignoring yields.
Only a single entity can enter the tournament. In the case of something like a space ship or a gunship, the ship itself is considered the entrant. Crew can man exosuits and fly around outside of the ship and attack other competitors, because a mage could just as easily summon a phantom army or the like, but if the mage goes down, the phantom army would probably disperse, and even if they don’t, they can’t win that round of the tournament in the mage’s place. Similarly, when the space ship goes down, the round is lost for the crew as well. Someone could pilot a mecha-godzilla while wearing Iron Man armor, and when the mega-mech gets destroyed, the guy in the suit can eject and keep fighting, but only if he is the registered entrant and not the mega-mech.
You can’t endanger non-combatants. There’s almost never a case where that can happen, since the matches take place 100 kilometers from any other sapient life form (and there’s reasonable effort taken to not hold matches in or near national parks or endangered wetlands or nature preserves and the like) but if you have an ability to open a portal to redirect that meteor swarm attack, and the exit portal opens over Times Square, you will be disqualified at best.
You can leave the combat area for up to 30 seconds. That’s generally a bad idea though, because if you step out of the ring for ten seconds to catch your breath, another competitor might try and pin you for 20 seconds, then jump back in bounds once you’re ringed out. Also, when you leave the arena, you “spend” those 30 seconds. You can earn more out-of-bounds time at the rate of 1 second for every ten spent in-bounds. This is to keep competitors from jumping in and out of bounds and skirting the edge of the arena. The matches are much more interesting when everyone is battle-royaling in the middle.
No off-table support. You can bring a bag of holding or your very own mass-fabricator, but you can’t bring a laser designator and call down tungsten rods from geostationary orbit or artillery from a land-battleship parked just out of bounds.
You can possess other competitors. It is advised that all competitors have reasonable mental defenses. If you win the match with someone else’s body, you can’t ride them into the next match. If possessing someone destroys your original body, or at least the body you entered with, you and your host are out of the tournament.
Hmm. I think that’s it. I’ve probably mentioned a few things in the comments that I’ve left out, but I think that’s the bulk of it.
Oh, look who it is in the vote incentive. And a
not-quite-yet-but-it’s-coming NSFW version over at Patreon.
Vote incentive and Patreon updated with some shading. Not finished yet, but progress.
I think she would get in trouble for doing this. She’d mess up the… floor of the waterfall? Is that what it’s called? The receiving pool? No, probably not that. Anyway, she’d churn things up and cause a ton of weird erosion.
Since you might be wondering, Niagara Falls is about 165 feet high, so Babezilla obviously doesn’t have to be full sized. I’d say she’s about 175-180 feet tall here?
Double res version will be posted over at Patreon. Feel free to contribute as much as you like.
Jonathan Dowland: DIY skate punch-out [Planet Debian]

Since I wrote about my fly30 ice skates, I'd continued to battle pain around the navicular bone in my feet. The action that seems to have finally fixed it was to perform a "punch out": a very localized remoulding of the area of the boot that presses against the sore area.
I basically followed the process from this helpful YouTube video.
I narrowed down the exact spot by borrowing some lipstick and transferring it from my navicular bone to the boot lining, then making that more permanent with a sharpie.
My punch was a spare part from a radiator valve which I packed with US cents (I couldn't fit any UK coins in). For the receiving-end, I tried another part from the radiator valve but I think it wasn't sufficiently larger than the punch to work well, so I swapped that out for a spoon.
I didn't have a temperature sensor I could use and I used a heat gun rather than a hairdryer, so I YOLO'd it a little. Some of the wrap on one of my boots is now distorted from where I didn't move the heat gun enough. It only took a minute or two to get the boot hot enough to be flexible. I set a 15 minute timer once the clamp was in place.
I've only skated one session since I did this but the pain seems to have gone! It's remarkably freeing to be skating without constantly trying to manage pain. Now I can focus on technique.
Beating yourself up [Seth's Blog]
Is it helping?
You wouldn’t stay by passively if someone else was beating you up.
Perhaps we shouldn’t accept it when we do it.
Freexian Collaborators: Debian Contributions: DebConf 26 organization, d-i VLAN support and more! (by Anupa Ann Joseph) [Planet Debian]

Contributing to Debian is part of Freexian’s mission. This article covers the latest achievements of Freexian and their collaborators. All of this is made possible by organizations subscribing to our Long Term Support contracts and consulting services.
The 27th Annual Debian Conference was held in Santa Fe, Argentina, and several Freexian fellows were quite busy by being involved in the organization team.
In environments that use IEEE 802.1Q VLANs, some hosts (such as routers attached to “trunk” ports) may need to apply VLAN tags themselves rather than relying on switches to do so. There has been a long-running request to add support for these to the Debian installer with a proposed patch set put together by several people over the years, and a Freexian customer asked us to help get this over the line. Colin reviewed the latest version of the patch set, applied a number of corrections, added Netplan support, spent some time testing a variety of possible paths through the installer, and landed this. There’s also now documentation for this in the next version of the installation guide.
The comments that go into code versus those that go into the pull request description [The Old New Thing]
When you submit a pull request, there are two places you can use to help explain what you are doing and why you are doing it. One is the pull request description, and another is the code you are modifying. And it’s important to understand the difference between them.
The pull request is where you justify why your change should be accepted. In the title, you spell out the problem you are fixing or the feature you are adding.
Add support for polarity reversal
Fix crash when polarity changes
In a large code base, you may need to be a little more specific.
Add support for widget polarity reversal
Fix widget crash when polarity changes twice in a short time
When somebody is chasing down a regression, they are going to be looking over all of the PRs that went into the branch recently, and having a good title will make it easier for them to identify which changes are likely to be a source of the problem.
For example, if somebody is investigating a doodad crash, they may look into “Add support for widget polarity reversal” because their doodad uses widgets, and maybe the problem is caused by a reverse-polarity widget that their doodad isn’t handling. On the other hand, they can pay less attention to the fix for the crash when widget polarity changes because that’s unlikely to be the reason the doodad is crashing. And if their doodad doesn’t use widgets at all, they may just skip over both of them.
If the PR had used the original titles of “Add support for polarity reversal”, without any mention of widgets, then a team investigating a regression in gadgets would have to dig into the PR (because gadgets also have polarity), only to realize that it’s about widget polarity, not gadget polarity.
The description of the PR talks about the source of the problem and how you fixed and validated it. This is point-in-time information where you justify to your reviewer why the change is needed and why your particular implementation of the change is correct. Discuss alternative designs and why they were rejected (e.g. because they were too risky). Show before-and-after screen shots showing that the problem is fixed. Confirm that associated paperwork has been completed, like unit tests. There might be standard paperwork for this, such as a “checkin template”. (It is often the case that the closer a project comes to release, the more stringent the paperwork. For example, late in the product cycle, you may need to demonstrate that the release management team has deemed that the bug meets the bug bar.)
In other words, the PR description is a point in time statement, providing information that is relevant to the code review itself. It is an exercise in persuasive writing: You are trying to convince the approver that your change should be accepted.
Comments in the code are for talking about the code itself. What is the correct way to call this function? Does it have specific prerequisites? This information is durable: It is information that remains useful even after the pull request completes.
Okay, so let’s do an exercise: I’m going to provide some text, and you tell me where it goes. These are all actual comments (suitably redacted) from PRs I have reviewed.
I have checked all calls to the function, and this was the only one that passed the wrong flag.
This goes into the pull request description. It is justifying why your change is correct, and in particular, it’s answering a question that a reviewer is likely to ask: “It’s great that you’re fixing this one caller of the function, but are there other callers that make the same mistake?” Putting this comment in the code itself would be wrong because the claim is valid only at the time the pull request is made. After the pull request, somebody might add a new call to the function that passes the wrong flag, and it is not true that you validated that new caller.
The JSON schema accepted by this function is documented 〈here〉.
This goes into the code. It is explaining how to use the function correctly. This information is important not just at the time you submit the pull request but also for an indefinite period of time in the future. (At least, until you change the function or the schema.)
The Doodad component will take advantage of polarity reversal.
This goes into the pull request description. It is justifying why you need to implement polarity reversal today. If you put this in the code, the future tense suggests that we are still waiting for Doodad. And future changes to the Doodad might cause them to stop relying on polarity reversal; when they do that, they are unlikely to come and update this comment in somebody else’s component. The comment also suggests that if you confirm with the Doodad team that they don’t need polarity reversal any more, it is safe to remove support for polarity reversal, which might not be the case if other components started using the feature as well.
Still, knowing that Doodad is the intended audience for the feature is worth noting for posterity.
// Polarity reversal was initially added for the benefit of // the Doodad component.
Bonus chatter: Another thing to consider when making code comments is that the code comment needs to make sense even without the PR description. Suppose you are writing a function with the intention of deprecating an older function that it is replacing. Don’t add this comment to the new function:
// When all clients have migrated to the new function, keep this.
This makes no sense to someone who is seeing the comment without having also seen (and remembered) the PR that introduced it. It sounds like the comment is saying, “When X happens, take no action.”
What you should do is put a comment on the old function:
// When all clients have migrated to the new function, delete this function.
The post The comments that go into code versus those that go into the pull request description appeared first on The Old New Thing.
[$] LWN.net Weekly Edition for August 13, 2026 [LWN.net]
Inside this week's LWN.net Weekly Edition:
Among fighting game developers, one stands out as more damp and weird than the others. Their carapace is more mottled, their palps somehow more pedi than the rest. Arc System Works! We've been fans of their fermented, piquant takes on the genre for a while and were delighted to see they'd managed to enter the 3D era without giving up the incredible silhouettes of their 2D heritage. Gabriel thought he might sip the summerwine one last time with Marvel Tokon, as he had in the days of his exultant youth, but he says that he washed out during the tutorial. I don't have the game, so I don't know what that would even look like, but the tutorial for 2XKO was perverse enough that I might be able to guess. It was like Operant Conditioning, like I was gonna have to falsify some number of lights at some point or murder a public figure. I didn't even dislike it, necessarily! But it did feel like I was being psychologically terraformed by a force alien to our Earth.
Reproducible Builds: Reproducible Builds summit 2026 to take place in Gothenburg [Planet Debian]
This event is happening soon — see below for registration instructions!
We are extremely pleased to announce the upcoming Reproducible Builds summit, which will take place from September 22nd—24th 2026 in the city of Gothenburg, Sweden.
This year, we are thrilled to host the tenth edition of this exciting event, following the success of previous summits in various iconic locations around the world, including Vienna (2025), Hamburg (2023—2024), Venice (2022), Marrakesh (2019), Paris (2018), Berlin (2017), Berlin (2016) and Athens (2015).
If you’re excited about joining us this year, please make sure to read the event page which has more details about the event and location. As in previous years, we will be sending invitations to all those who attended our previous summit events or expressed interest to do so. However, even if you do not receive a personal invitation, please do email the organizers and we will find a way to accommodate you.
The Reproducible Builds Summit is a unique gathering that brings together attendees from diverse projects, united by a shared vision of advancing the Reproducible Builds effort. During this enriching event, participants will have the opportunity to engage in discussions, establish connections and exchange ideas to drive progress in this vital field. Our aim is to create an inclusive space that fosters collaboration, innovation and problem-solving.
Although the exact content of the meeting will be shaped by the participants, the main goals will include:
Logs and minutes will be published after the meeting.
Please reach out if you’d like to participate in hopefully interesting, inspiring and intense technical sessions about reproducible builds and beyond!
We look forward to what we anticipate to be yet another extraordinary event!
Redox gets installer improvements, merges new CPU scheduler [OSnews]
Another month started almost two weeks ago, so we’ve got a new monthly report from Redox, the general purpose operating system written in Rust. The month of July – it seems the report was published with a bit of a delay, regardless of what the date on their site says – brought improvements to the installer, with new options commonly found in most installers, such as a choice of installation method, network-based installation, and more. The Google Summer of Code work on the new CPU scheduler has also been merged, including a number of related performance enhancements.
There’s improvements to the ARM
port, Amlogic Meson UART ARM64 support, and uutils
grep and sed have been successfully built
on Redox, replacing their their GNU counterparts in the
os-test test suite. In addition, a whole slew of demos
were ported as well, from Ratatui
demos to various Iced demos covering things like reading QR codes
and processing Markdown. Of course, this is all topped off with the
usual long list of lower-level, smaller changes and improvements to
the kernel, drivers, Relibc, and more.
wdiff-1.2.3 released [stable] [Planet GNU]
This is to announce wdiff-1.2.3, a stable release.
There have been 29 commits by 2 people in the 637 weeks since 1.2.2.
See the NEWS below for a brief summary.
Thanks to everyone who has contributed!
The following people contributed changes to this release:
Bob Proulx (6)
Simon Josefsson (23)
Happy Hacking,
Simon [on behalf of the wdiff maintainers]
==================================================================
Here is the GNU wdiff home page:
https://www.gnu.org/software/wdiff/
Manual:
https://www.gnu.org/software/wdiff/manual/
https://www.gnu.org/software/wdiff/manual/wdiff.html - HTML format
https://www.gnu.org/software/wdiff/manual/wdiff.pdf - PDF format
Here are the compressed sources and a GPG detached signature:
https://ftp.gnu.org/gnu/wdiff/wdiff-1.2.3.tar.gz
https://ftp.gnu.org/gnu/wdiff/wdiff-1.2.3.tar.gz.sig
Here is minimal source-only "git archive" sources:
https://ftp.gnu.org/gnu/wdiff/wdiff-v1.2.3-src.tar.gz
https://ftp.gnu.org/gnu/wdiff/wdiff-v1.2.3-src.tar.gz.sig
Use a mirror for higher download bandwidth:
https://www.gnu.org/order/ftp.html
Here are the SHA256 and SHA3-256 checksums:
File: wdiff-1.2.3.tar.gz
SHA256 sum: 29a4457eb0ed35c902e6732d71f25e1d6c7fe7fa0eda0fb6c371ed6779b49fd6
SHA3-256 sum: 2f558fe6b7a69524f29d266c4018c80a10135cef2e4a53ae3c2944c1fc12c95d
File: wdiff-v1.2.3-src.tar.gz
SHA256 sum: dc29d8f530471b9a8935413dca32e45848363f6e58888fc7307f5f052b8fb827
SHA3-256 sum: 4db1f41eda5e1525f3ced491af1fc1ad094cc21c209e789d12a1ea8f611be24e
Verify the SHA256 checksum with either sha256sum, sha256, or
'shasum -a 256'.
Verify the SHA3-256 checksum with 'cksum -a sha3 -l 256 --base64'
from coreutils-9.8.
Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
and the corresponding tarball. Then, run a command like this:
gpg --verify wdiff-1.2.3.tar.gz.sig
The signature should match the fingerprint of the following key:
pub ed25519 2019-03-20 [SC]
B1D2 BD13 75BE CB78 4CF4 F8C4 D73C F638 C53C 06BE
uid Simon Josefsson <simon@josefsson.org>
If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to retrieve
or refresh it, and then rerun the 'gpg --verify' command.
gpg --locate-external-key simon@josefsson.org
gpg --recv-keys 51722B08FE4745A2
wget -q -O- 'https://savannah.gnu.org/project/release-gpgkeys.php?group=wdiff&download=1' | gpg --import -
As a last resort to find the key, you can try the official GNU
keyring:
wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg
gpg --keyring gnu-keyring.gpg --verify wdiff-1.2.3.tar.gz.sig
This release is based on the wdiff git repository, available as
git clone https://https.git.savannah.gnu.org/git/wdiff.git
with commit 31fe62c4a3e2a76e5d68f571b1aa2f10815ca51f tagged as v1.2.3.
For a summary of changes and contributors, see:
https://gitweb.git.savannah.gnu.org/gitweb/?p=wdiff.git;a=shortlog;h=v1.2.3
or run this command from a git-cloned wdiff directory:
git shortlog v1.2.2..v1.2.3
This release was bootstrapped with the following tools:
Gnulib 31fe62c4a3e2a76e5d68f571b1aa2f10815ca51f
Autoconf 2.72
Automake 1.17
Make 4.4.1
Makeinfo 7.3
Help2man 1.49.2
Tar 1.35
Gzip 1.13
NEWS
* Noteworthy changes in release 1.2.3 (2026-06-30) [stable]
** Modernize build environment.
Several minor fixes including build fixes for modern C23 compilers.
Many generated or obsolete files have been removed from git.
The OSNews Fundraiser continues: you made me use Windows, now make me use macOS [OSnews]
The OSNews Fundraiser, to celebrate the fact I posted 20000 stories in 21 years, is still underway. The first major incentive was reached, and I, a long-time Linux user, published my experiences using Windows 11 for a month. It wasn’t a success. Keep donating if you want to find out what a Linux user thinks of the current state of macOS!
➡️ Donate through
Ko-Fi ➡️ Donate through SEPA transfer*
➡️ Buy
merch from our
store ➡️
Why a fundraiser?
€5000
incentive: Make me use Windows 11 for a month (the
results were not great)
> €10000: Video tour of my office and my
computers/devices collection <
€15000: Buy a Mac and use macOS for a month (and review
it)
€20000: I get an OSNews tattoo
*Name: Thom Holwerda – IBAN: SE08 8000 0820 1684 4657 8414 – BIC: SWEDSESS
Why support OSNews?
I want to make sure I can run OSNews for another two decades and another 20000 posts, and I need your help to do so. Since my wife, who has a tough, underpaid job in elderly care, is largely unable to work due to health reasons caused by that very same job, my income has become a lot more crucial for our kids, my wife, and myself. With OSNews readers being more skeptical of subscription-like things like our Patreon than most people, it’s exactly these one-time donations that make up the bulk of your support.
Thank you.
The little-known winstart.bat batch file [OSnews]
Raymond Chen explains what, exactly,
the file winstart.bat in Windows 95 is used for.
In Windows 95, you could create a
↫ Raymond Chenwinstart.batfile in your Windows directory. During startup, the virtual machine manager initializes and creates the so-called “System virtual machine” (the “System VM”), which is the virtual machine that all Windows programs run in. But before running the user-mode kernel in that virtual machine, the virtual machine manager runs thewinstart.batbatch file if it exists.
Chen needs to use several diagrams to really explain what the batch file is used for, but as a very crude summary, it allows you to load TSRs that only apply to Windows programs, while not affecting any additional DOS command prompts you may load later after Windows is already running. While many think it’s a Windows 95 feature, it was already present in Windows 3.x.
A unique feature that I doubt many people made active use of.
Delphi 13 Community Edition released [OSnews]
Delphi is still very much a thing, and still very much in active development. The current stewards of Delphi, Embarcadero, released the Delphi 13 Community Edition today.
Delphi Community Edition is a full-featured, free edition of Delphi for building native applications with the Delphi language. It includes a professional IDE, visual designers, integrated compilers and debuggers, the VCL framework for Windows development, and the FireMonkey framework for creating native applications from a shared codebase across Windows, macOS, iOS, and Android.
It is designed for students, hobbyists, freelancers, and small teams that meet the Community Edition license requirements.
↫ Marco Cantu at the Embarcadero blog
Delphi has been around since 1995, first released for Windows 3.1. It’s both a programming language, a variant of Object Pascal, and the accompanying IDE and related tooling and frameworks, originally developed by legendary company Borland. This latest version of course adds a number of new features to the programming language, and further improves the IDE as well, this time with a brand new 64bit version. The two frameworks for visual application development, VCL and FireMonkey, have also been updated and improved.
Sadly, it’s not open source, and the Community Edition is intended for mostly non-commercial, hobbyist use. If you want to actually earn any money using Delphi, you’re going to have to step up to Delphi 13 Florence, which isn’t free.
[$] Block-layer error injection [LWN.net]
Storage code has to cope with hardware that fails in inconvenient ways, but coaxing a healthy disk into producing those failures on demand, for testing, is usually not possible. The kernel provides several ways to inject block-layer I/O errors, but none of those can select the operation to fail, pick the status code to return, or target a disk directly without employing a stacked device on top. Use of a stacked device means the test runs against the mapper device, not the disk it was meant to exercise. A patch series from Christoph Hellwig adds a configurable error-injection interface that does all three things that the current error-injection code lacks, controlled by a per-disk debugfs file.
Giving Misfits Market A Try [Whatever]
In recent weeks (probably months, if we’re being
honest), I have felt stuck in a rut when it came to
groceries. I had no ideas, and frankly no motivation, to get
anything other than the basic essentials like milk, bread, and
maybe eggs if I wanted to bake something. My groceries were
uninspired, and I was tired of buying the same five things over and
over again.
So, after years of getting ads for it, I finally gave Misfits Market a try to jazz up my groceries.
If you haven’t heard of it, Misfits Market is an online grocery store dedicated to reducing food waste and promoting sustainability by selling food that is overstocked or imperfect. The food you buy from Misfits is largely “rescued” items that would otherwise go to waste despite being totally fine. You get perfectly good stuff at a discount, what’s not to like?
So how does a membership work? With a lot of these subscription based grocery delivery systems, you have to have an account, but whether or not it costs money varies from company to company. In Misfits Market’s case, it’s free to sign up and shop, but they do have a Misfits+ option where you get access to member exclusive items and deals and cheaper shipping, plus part of the cost goes to Feeding America to help fight hunger. It’s an annual cost of $69 a year, but when you sign up for a free account, you can try Misfits+ for free on a 14-day trial.
Every week, your shopping window is open for a few days, then it closes and they put together your order and ship it out to you. For me, my shopping window is open from Wednesday to Saturday, and my box gets to me on Tuesday, delivered right to my doorstep. Now, for them to ship it to you, you have to place a $45 minimum order.
They also start off your cart with recommended items, but you can keep or get rid of as many of their suggestions as you want. You can even set items to never be recommended again, or have them automatically put in your cart every week if you like that item.
Finally, they have a loyalty points program where you can trade in your points to buy items. It’s basically just like, a free bag of chips, but hey, I’ll take it. Not like Kroger ever gives me free chips.
I decided to go ahead and try the free 14-day trial. I figured if I’m trying Misfits for the first time, I should make the most of my first order.
Okay, so Misfits has a good mission, that’s cool, but do they have items and brands worth buying, or is it all just ugly produce? Well, I got a huge haul with a variety of things to showcase their produce, pantry goods, refrigerated items, all that good stuff! So let’s take a look at what I got, and then we’ll breakdown how much it cost.

I bought a bag of apples, a bag of peaches, sweet potatoes, mini cucumbers, heirloom tomatoes, a mango, two avocados, a mystery melon, mystery root vegetable, a package of banana bread pecans, Ghirardelli mini semi-sweet chocolate chips, Flock chicken skin crisps, two Harmless Harvest coconut yogurts (one mango and one strawberry), a pack of cinnamon raisin bagels, a bag of sweet mustard flavored veggie crisps, feta, BelGioioso mozzarella ball, and a tiramisu pudding cup.

I also bought Cacio e Pepe raviolio, gnocchi, Vital Farms hard-boiled eggs (6ct), two packs of spinach and feta chicken sausages, bao buns, gyoza dumplings, extra firm tofu, and a whole lot of Impossible plant-based meat products. The tin of Fishwife in the center there was the “free gift” I chose upon joining.

I topped off all this food with some beverages. I got a dirty chai canned latte, three flavors of Tepache soda (tropical, prickly pear, and spiced pineapple), a canned peach tea, and four types of cold-pressed juice (ginger pineapple, cherry limeade, green apple and avocado, and red berry refresher).
Not pictured is two items I separated because they were a bit damaged.
This ube flavored mochi pancake and waffle mix had a small hole in the bottom of the package that the mix was falling out of. Thankfully, not much product was lost and I can just put the package in a big Ziploc bag.

The other damaged item was this carrot ginger soup:

For this one, the lid was popped:

I initially had concerns about this, but it turns out the soup mix was actually in a separate package inside the bowl, so the bowl was actually just empty and it being open was of no consequence! I proceeded to eat the soup since it was already open anyway.
Okay, so how much was all of this plus shipping and fees and yada yada? My subtotal was $203.38, shipping was $6.99 instead of $9.99 because of my Misfits+ shipping reduction, my “cold pack fee” was waived because I apparently bought enough cold items to waive the fee of cold-pack packaging (I think it’s $35 worth), and I got a discount of $24.40 because it was my first order, and on your first order you get 40% off up to a maximum of $25. So my total was $189.07 after an operations fee of $1.99 and $1.11 of taxes.
I got all this for under $200. Well, I have certainly spent more money on fewer groceries from Kroger, that’s for sure. I think I got a pretty dang decent haul here.
It’s all well and good to buy healthy snacks and produce, but how much of it actually tastes good? Well, I had my parents over for lunch today, and I made egg salad sandwiches with the Vital Farms hard-boiled eggs, heated up the spinach and feta chicken sausages, cut up the mystery melon and topped it with the crumbled feta, plus I drank the green apple avocado cold-pressed juice, and everything was so good!
Plus, last night I cut up one of the avocados and it was great, not even imperfect at all, just a beautiful, ripe avocado. Oh, and I tried the sweet mustard veggie crisps and those were quite good, too.
I am especially impressed with the green juice. It’s actually more than just green apple and avocado, it also has cucumber and spinach in it, as well as lemon and basil, and you can really taste it. It’s super refreshing and is 100% juice.
Obviously, I have a lot more groceries to get through, but I’m very impressed so far! I’m perfectly pleased with my order, and I am very happy to be contributing to reducing food waste and decreasing hunger.
Of course, you already know I’ve got a referral code for you. Fifteen bucks off your first purchase! If you end up ordering, let me know what you end up getting in the comments, and have a great day!
-AMS
Why “It Depends” Is the Most Future-Proof Phrase in Software [Radar]
Ask an architect almost any question and you’ll get the same answer: It depends. For years this answer has been the punchline of jokes about architects, but in an era when AI can generate a working service faster than you can describe it, “it depends” is one of the most important phrases in software. It marks the exact boundary of what these tools can and cannot do.
We’ve said for a long time that the First Law of Software Architecture is: Everything is a trade-off. Nothing about generative AI repeals that law. If anything, it enforces it more brutally than ever.
AI coding tools are extraordinary at answering “how” questions. How do I implement a saga pattern? How do I set up circuit breakers between these services? How do I paginate this API? These questions have answers that exist in the world in documentation, in open source code, in a decade of blog posts, and large language models have read all of it. Asking an LLM a “how” question is like asking a very fast librarian who has memorized the library.
Architecture questions are not “how” questions. They’re “should” questions, and “should” questions have a different shape entirely. The honest answers require knowing things that appear in no training: that your ops team is three people, that the CFO just froze cloud spend, that the last reorg left the payments team demoralized. An AI can enumerate the generic trade-offs of distributed architectures beautifully. What it cannot do is weigh them, because the weights live in your organization, not on the internet.
That’s the Second Law, incidentally: “Why is more important than how.” LLMs are “how” machines. Architects are “why” people.
There’s a tempting inference floating around: If AI makes building software easier, surely it makes architecture matter less. Our experience so far suggests the opposite. When code was expensive to produce, the cost of construction acted as a natural brake on bad decisions. A questionable design took months to build, and somewhere in month two, someone usually noticed. Now a team can stand up a fleet of services in a week. The brake is gone. It has never been easier to build the wrong thing quickly, at scale, with tests.
Think of AI as an amplifier. Point it at a sound structure and it accelerates you. Point it at a flawed one and it pours concrete over the flaw before anyone has time to object. The half-life of a bad architectural decision used to be measured in the time it took to implement; now the implementation arrives almost instantly, and you get to live with the decision for years.
This shifts where the leverage sits. When implementation is abundant, judgment is the scarce resource. Someone still has to decide where the service boundaries go, what “good enough” availability means for this system, and which architectural characteristics actually matter.
Here’s the uncomfortable part, and it applies to humans as much as machines: You cannot learn trade-off analysis by consuming content about it. We’ve written a fair amount of that content ourselves, so we say this with some authority. Books and talks give you the vocabulary. They don’t give you the judgment.
Judgment comes from making decisions and living with the consequences or at least watching someone experienced make them, asking why, and arguing about the alternatives. Every working architect we know learned the craft this way: apprenticed to messy, real problems, with feedback loops. The pattern catalog was the easy part. Knowing which pattern not to use, and why, and being able to explain that to a skeptical VP that took years of reps.
This is also, not coincidentally, exactly what today’s AI lacks. A model trained on the world’s code has seen millions of decisions but almost none of the consequences. The post mortem that traces an outage back to a boundary drawn wrong in 2019 rarely makes it into the training data, and even when it does, it isn’t connected to the pull request that caused it. Architecture’s feedback loops are measured in years. That’s precisely the kind of learning that can’t be scraped.
If you’re a developer watching AI absorb more of the implementation work, the strategic question isn’t whether your current tasks will change but where to move on the value chain. Our answer is to move toward the decisions. Toward the trade-offs, the constraints, the “it depends.” That territory isn’t shrinking; it’s growing, because every AI-accelerated team needs someone who can tell the amplifier where to point.
The good news is that this is learnable. Not from a book alone, and certainly not from an LLM, but the way it’s always been learned: by practicing architectural thinking on real problems, with experienced people looking over your shoulder and asking why. We’ve spent the last several years teaching it that way, most recently in a six-week cohort format that works less like a course and more like a short apprenticeship in making and defending architectural decisions. (Details are on the O’Reilly live events page, if you’re curious.)
However you pursue it, pursue it. The machines have gotten very good at “how.” The career-defining skill of the next decade is being the person in the room who can answer “should,” who knows that the real answer starts with “It depends,” and can finish the sentence using their brain alone.
The Two Pillars of Post-training: Reinforcement Learning and Supervised Fine-Tuning [Radar]
This is the second article in Sharon Zhou’s post-training series. Read part 1 here.
In the first post of this series, you learned how post-training closed the fundamental gap in usability of LLMs by making them behave in a certain way. In this post, you’ll explore specific techniques you can use to change a model’s behavior: namely, reinforcement learning (RL) and supervised fine-tuning (SFT).
Reinforcement learning teaches the model by letting it try things and telling it which attempts were better or worse—the model learns by experimentation and feedback. Supervised fine-tuning teaches the model by showing it examples of good behavior—the model learns by imitations. Both have deep roots in AI and machine learning literature historically, but their application to LLMs, and particularly to making LLMs behave well, is what makes modern post-training work. Nearly everything that happens in post-training is the result of some combination of these two approaches.
The overall gist of reinforcement learning goes like this:
One of the most important questions is: Where does the reward come from?
The easiest way to get a reward is a function that can output a reward, for example a checker for whether the generated code compiles or whether the generated math problem was solved correctly. This automated check is a verifier. The ideal verifiers are fast, cheap, and perfectly reliable within their domain. Think coding challenges, math problems, or factual questions. For tasks with objectively correct answers, you can just write a function that checks the output.
The limitation is probably obvious: Verifiers only work when you can define “correct” programmatically or hit an API to return the right results. That covers a lot of useful territory, but it doesn’t help you train a model to be helpful, nuanced, or pleasant to talk to.
There are subtler limitations too. Not all verifiers are fast. Your model might propose a novel drug combination, but verifying its validity could take years of lab work. Generated GPU code might need hours or days of performance benchmarking. When verification is expensive, you face a trade-off: Use the slow-but-accurate verifier sparingly, or substitute a faster proxy that’s slightly less reliable but keeps training moving.
Humans can offer strong reward signals that, in aggregate, align with human preferences that might be more subtle and hard to encode programmatically. However, it’s prohibitively inefficient to have humans in the loop for every training datapoint, especially as the model is continuously updating its weights after it receives rewards as feedback, so the model’s responses would change over time. You can’t really prepare the data ahead of time. So instead, the InstructGPT paper, which informed ChatGPT’s development, implements reinforcement learning from human feedback (RLHF) by training a separate model to mimic human feedback. This model is called a “reward model.”
The input of the reward model is a prompt and model response and its output is a scalar reward (positive or negative) that mimics how a person would rate that response. You can train a reward model in multiple ways. The simplest is to have people grade the model outputs with a score, for example 1–5 stars or a number out of 100%. However, people are rarely consistent at these types of tasks: One person’s 2 is another’s 5, and even the same person drifts over time.
Another simple way is to offer two model responses in comparison and ask, “Which one is better?” This is a much easier, more reliable judgment for people to make. Interannotator agreement is significantly higher for comparisons than for absolute ratings.
Training a model using pairwise comparisons is also simple. You can then use cross-entropy loss over pairs, which pushes the reward of the preferred response higher than the unpreferred one. This works great because it means the reward model can learn from signals like “A is better than B” but can learn to output absolute scores for the reward.
To make the process of collecting pairwise comparisons from people more efficient, the InstructGPT’s implementation of RLHF included showing labelers 4–9 different model outputs from a single prompt and asking them to rank those preferences. This would effectively result in 6–36 pairwise comparisons for a given ranking. Not bad; that’s efficient data labeling! They used ~33K prompts, so that would roughly translate to anywhere from 200K to 1.2M comparisons to train the reward model.
After training, the reward model would be an automated judge during RL training, providing scalar rewards for responses. The language model then optimizes against this reward model’s scores. This means the better the reward model, the more aligned the resulting model would be.
So you need a reward: Why not use an LLM? LLM-as-judge, sometimes called RLAIF (reinforcement learning from AI feedback), scales much better than human annotation while still being able to evaluate subjective qualities like helpfulness, clarity, and tone. But it inherits whatever biases or blind spots the judge model has, and can be more easily gamed. If the judge tends to prefer verbose answers, the trained model will learn to be verbose.
One effective approach is to break the judgment into multiple LLM calls, each focused on a different aspect of the response, like a rubric. Instead of asking one LLM call “How good is this response?” you might have separate calls evaluating factual accuracy, clarity of explanation, appropriate tone, and completeness. Each dimension gets its own score, and you combine them into a final reward. This is more robust than a single holistic judgment because it’s harder for the model to game all dimensions at once, and it gives you fine-grained control over what you’re optimizing for. You can weigh the dimensions differently depending on what matters most for your use case, and adjust those weights over time as your priorities shift. For example, accuracy is worth 3x as much as tone.
Combining human feedback with LLM-as-judge, Anthropic’s Constitutional AI (CAI) is a method for training reward models from AI-generated comparisons, based on a human-written set of principles. What this means is that you can give an LLM a set of principles, which Anthropic calls a “constitution,” and have it critique and revise its own outputs based on those principles. For example, a principle might say “choose the response that is least likely to be harmful” or “prefer the answer that is most helpful while being honest.” The model generates pairs of responses, uses the constitution to decide which is better, and those AI preferences are used to train the reward model. This means you can encode your values explicitly as written principles in the Constitution rather than implicitly through thousands of human annotations, making it easier to audit, agree on, and update what the model is being trained to do.
Once you have a reward, it’s time to update the model’s weights. But you can’t just predict the next token, because there isn’t one. All you have is a value for the response the model gave. This is where RL algorithms come in. These algorithms are ways to take the reward and turn it into a meaningful, and ideally stable, training signal for the model to learn. There are several, and the field is moving fast, but a few fundamental ones are worth understanding.
REINFORCE is the simplest starting point. The idea is to generate a response, score it, and if the reward was high, nudge the model to make that response more likely. If the reward was low, nudge it to make that response less likely. It’s conceptually easy to grok but noisy and difficult in practice because it turns out that the signal from a single response can point the optimization in unhelpful directions, and the variance in the gradients makes training slow and unstable. PPO was designed to fix these exact problems.
PPO is what OpenAI used in the original ChatGPT work and was for a while the default algorithm for RLHF. In RL terminology, the model is the “policy,” or the thing that takes actions by outputting tokens, in an environment which is simply the conversation context.
PPO improves on REINFORCE by being more careful about how big each update is. Rather than taking whatever gradient the reward suggests, PPO clips the update so the model can’t change too much in a single step. This makes training significantly more stable. The clipping keeps updates “proximal.”
PPO is also an online algorithm, meaning the model generates fresh responses during training, gets them graded, and updates from that feedback in a continuous loop. So the model keeps learning from its own current behavior rather than from a static dataset. It can explore and improve in ways that offline methods (that only collect data once beforehand) can’t.
Notably, PPO uses a “critic,” or a separate model that predicts the expected total reward from any point during generation, and is trained with the policy. This helps reduce noise in training, because it gives you a baseline: Instead of just knowing “this response got a reward of 7” and having no idea if that’s good or bad, the critic might predict “you’d normally get a 5 here,” so the actual training signal (called an “advantage”) becomes “+2, better than expected.” This dramatically reduces noise compared to REINFORCE.
The downside is complexity. Now you’re training two models (the main model and the critic), and the whole pipeline involves generating responses, grading them with a reward model, estimating how good the grades are relative to the critic, and updating both models. It works, but it’s a lot of moving parts. This makes it harder to tune or debug when something goes wrong, and harder to set up the infrastructure.
DPO takes a different approach that avoids RL entirely but optimizes the same underlying objective as the standard RLHF formulation. Researchers found that there’s a mathematical relationship between the optimal reward model and the optimal main model (policy), and you can collapse the two-step process into one. This means that you can take the same pairwise comparison data (“model response A is better than model response B”) and use it to update the main model directly, without a reward model. Yes, this means good old supervised learning on that pairwise data.
In theory, under ideal conditions, DPO and PPO-based RLHF converge to the same global optimum. Those ideal conditions include a perfect reward model, infinite preference data covering the full output distribution, and the reference policy matching the data-generating distribution. However, these rarely hold in practice, and several empirical studies have shown meaningful performance gaps between DPO and online RL methods on harder tasks, partly because DPO can’t explore beyond its fixed dataset. That said, it’s still a very promising technique.
The simplicity of DPO is attractive: supervised fine-tuning on pairwise data with no reward model to train and no RL loop to stabilize. As a result, DPO has become very popular, especially among smaller teams, because it’s much easier to implement and debug. However, the trade-off is that DPO is less flexible, because it works directly from a fixed dataset of preferences. This means it can’t explore and discover novel behaviors the way online RL methods can. It only learns from the comparisons you already have.
Newer online variants of DPO have addressed this by generating fresh responses during training, but at that point you’re reintroducing some of the infrastructure complexity that made DPO appealing to avoid in the first place.
Introduced by DeepSeek, GRPO takes another stab at simplifying PPO. Instead of needing a separate critic model, GRPO generates a group of responses to the same prompt and uses the relative rewards within that group to figure out which responses were better or worse—basically normalizing within that group. If you generate eight responses and three of them score well, those three get reinforced and the others get pushed down, and the baseline (which the critic was in charge of previously) is just the group average. This eliminates the critic entirely while still getting a useful training signal. It’s simpler than PPO but still online (the model generates fresh responses during training), so it can explore in ways DPO can’t. GRPO got a lot of attention because of its role in training DeepSeek’s reasoning models.
There are many more algorithms and variants, and new ones appear regularly. The field hasn’t converged on a method (and likely won’t for some time), and different algorithms suit different situations. DPO is great when you have good preference data and want simplicity. PPO remains strong when you need online exploration and have the engineering resources to manage the complexity. GRPO offers an appealing middle ground. In practice, teams often try multiple approaches and pick what works best for their specific use case and reward signal.
RL post-training is also less stable than supervised learning, which we’ll cover next. The loss curves are noisier, the hyperparameters are more sensitive, and the training can diverge if not carefully managed. Practitioners typically constrain the RL updates with a penalty that prevents the model from drifting too far from its starting point. The most common approach is a KL divergence penalty that keeps the fine-tuned model’s output distribution close to the base (or SFT) model’s distribution. This acts as a regularizer: It lets the model improve its behavior while preventing it from forgetting what it learned in pretraining or collapsing into degenerate patterns.
Supervised fine-tuning is more straightforward. You show the model examples of ideal responses, and train it to reproduce them. In practice, this means collecting a dataset of {prompt, ideal response} pairs and continuing to train the model’s weights using the same next-token prediction objective from pretraining, but now on this curated dataset instead of the broad pretraining dataset. The one difference is that the loss is computed only on the response tokens, not the prompt tokens, so the model learns to generate good responses given prompts, not to generate prompts.
The simplicity is the point. There’s no reward model to train, no critic to stabilize, and no policy gradient variance to worry about. However, it’s also limited by the data you can collect. That can get expensive and difficult to scale.
The quality of your SFT model is directly determined by the quality of your demonstrations. The model is learning to copy what you show it, so every quality issue in the data becomes a quality issue in the final model.
The most direct approach is to hire skilled people to write high-quality responses to a diverse set of prompts. This is the gold standard. You can easily control your dataset here, and you can get exactly what you want, written to your specifications. The original InstructGPT paper from OpenAI contracted 40 labelers, writing demonstrations and ranking outputs.
The disadvantage is, probably obviously, cost and scale. Good demonstrations are expensive, especially tasks requiring domain expertise like having doctors write an ideal prescription for a patient or a rocket scientist telling you how to put satellites on Mars. And even expert annotators are inconsistent. They have bad days, they get tired, and they interpret instructions differently from each other. At scale, this inconsistency can accumulate, though labeling companies manage and sell processes to make crowdwork more effective at scale.
Synthetic data scales far better than human annotation. You can generate millions of demonstrations cheaply and quickly. The Stanford Alpaca project famously fine-tuned Llama on only 52,000 demonstrations generated by text-davinci-003 (part of the GPT-3.5 model family, though not ChatGPT) and was able to get qualitatively similar behavior to text-davinci-003 with a much smaller budget (though it was on a narrow evaluation of only ~250 examples—still an exciting result for small open models for research).
Many open source models have used variants of this approach. However, there’s also a practical consideration around terms of service. Some model providers restrict using their outputs to train competing models, and this has become an increasingly heated area of debate as models compete at the frontier. Know the rules before you build your pipeline.
Sometimes the best demonstrations already exist. Customer support logs, internal documentation, expert Q&A forums, edited writing samples. If you have access to high-quality human-generated content that matches the behavior you want or is close to it, you can use LLMs to transform that data into prompt-response pairs. This has the advantage of being grounded in real use cases rather than fully synthetic scenarios.
The work is in the curation, and sometimes it might be easier to generate from scratch based on a few few-shot examples. Raw data is messy: Support logs contain errors, forums contain misinformation, and real conversations meander. You need to filter, clean, and reformat aggressively, but you can build an LLM pipeline to do those steps. If you have a good source and invest in the LLM curation pipeline, this can be extremely effective, especially for domain-specific applications.
Sometimes the best training signal is already inside the model and you just need to find it. Rejection sampling works by generating many possible responses to a prompt, scoring them with some quality metric, and keeping only the top performers. The quality metric can be a reward model, a rule-based check, or even a stronger model acting as a judge.
Suppose you prompt your model “Write a Python function to merge two sorted lists” 64 times at temperature 0.8. You run each output through a test suite as your quality metric. Maybe 40 pass all tests. You take the 10 cleanest, most readable passing solutions and add them to your SFT dataset. You’ve just used the model’s own competence to build training data better than what most human annotators would produce for a coding task.
It sounds like RL, but it’s just using the same pieces to filter the demonstrations that the model should see in SFT. The same graders like reward models, verifiers, or LLM-as-judges are used to curate SFT data.
Rejection sampling is also surprisingly effective and therefore popular; for example it was described early on in Meta’s Llama 2 post-training pipeline. The model already can produce great responses, but as you’ve probably noticed, it just doesn’t do so reliably. By filtering for its best outputs and training, you raise its average toward its ceiling. Instead of acting as the average developer, it’s nudged to act as an expert developer. Rejection sampling scales well because generation is cheap relative to human annotation. The main limitation is that you’re still bounded by what the model can produce at sample time. If it can’t generate a correct proof in any of 100 attempts, no amount of filtering will help.
But SFT has limitations. It only teaches the model what to do. You’re presenting ideal behavior but never showing it what “bad” looks like. As a result, the model could still produce problematic outputs on prompts that weren’t well-represented during training.
The SFT model is also prone to “mode averaging” when the training data sends mixed signals. For example, if half your golden retriever demonstrations sound like an encyclopedia (“The Golden Retriever (Canis lupus familiaris) is a large-sized breed of gun dog…”) and the other half sound really casual (“Golden retrievers? They’re basically furry happiness machines”), the model won’t learn to pick the right tone for each context. It’ll blend them into an awkward middle: “The Golden Retriever is basically a large-sized happiness machine of the gun dog variety.” Neither formal nor casual, which comes off as weird and not the right response style.
RL seems all-powerful. Why not use it alone? This was a research question pursued by DeepSeek’s team when training DeepSeek R1-Zero. Up until then, the base models were so bad that doing RL was pointless on them and you needed to do SFT. This model demonstrated that RL applied directly to their relatively strong pretrained model can produce powerful reasoning ability without any SFT.
However, the model still had serious usability problems. For example, it would mix languages (e.g., English with Mandarin), so it was difficult to use for most people. It could reason, but it wasn’t practical to use.
RL’s main ceiling after the model has been trained is usability. During training, its ceiling is stability. Research on new methods are continually trying to find ways to do RL post-training more stably.
SFT, on the other hand, has the opposite problem. It’s been used alone for many years and has reached maturity to some degree. InstructGPT made the model capable of instruction-following, and became the foundational approach for ChatGPT to handle multiturn dialogue and thus conversation. However, while SFT gets good, reliable results, it’s typically not enough to push performance at the frontier to reach superhuman performance on important tasks.
Here’s what it means for you: If you’re doing post-training on your own, and you want your model to behave a certain way and you don’t care about novel frontier performance, SFT will get the job done.
In contrast, RL can teach a model to reason through novel problems it hasn’t seen during training, because the reward signal evaluates the outcome rather than the exact token-by-token process like in SFT. RL can surface rare but important behaviors that might not appear frequently enough in any SFT dataset.
On scaling data, RL can improve a model’s performance on a task as long as the reward signal is accurate, without needing to collect additional human-written examples. However, it’s important to note that on some tasks, it’s easier to scale SFT examples, and on others, it’s easier to scale via RL. For example, RL scales more easily on math problems. You can generate an unlimited number of math problems programmatically, and a verifier can check whether the answer is correct with certainty. You wouldn’t need to hire a mathematician to write out ideal solutions. The model attempts problems, gets told right or wrong, and improves.
Safety is another area where RL stands out. It’s relatively easy to write a few hundred examples of a model declining harmful requests in your SFT dataset. But the space of ways a user might try to get harmful or inappropriate content is broad, creative, and ever-changing. RL allows the model to be trained against adversarial prompts, where it practices handling tricky edge cases and gets rewarded for handling them well. This is much harder to achieve with static demonstration data alone.
Meanwhile, SFT scales more easily on writing in a specific brand voice. If you want the model to respond with your company’s brand voice. It might be hard to write a reward function that captures “sounds like our brand.” But the company could have tens of thousands of real support transcripts that already demonstrate the voice. You can curate these, transforming them into prompt-response pairs. The data already exists at a decent scale, while the reward signal would be hard to get right.
When a frontier lab wants to add support for a new feature, for example calling MCPs or calling subagents, the first step is almost always to create a small amount of SFT data demonstrating that capability. The next step is creating a reward function and RL environment that can match it.
Far more data and thus compute are dedicated to RL than SFT, but SFT offers good warm starts for the model and those examples are critical to getting the model into a stable place for subsequent RL.
The combination of both is ultimately what makes modern frontier models as capable as they are. Neither alone is sufficient.
A standard post-training pipeline uses SFT and RL as complementary stages that build on each other. It might look like this:
Some teams also iterate between several stages of SFT and RL: SFT, then RL, then more SFT on new data, then more RL. The first couple stages could be on reasoning for verifiable tasks like math and code where the data and reward signals (verifiers) are constructed differently, whereas the second could be on messier general reasoning over all tasks, which would involve training reward models that encode human feedback as preferences.
This iterative refinement can help with checkpointing quality at different stages and handing things off to different teams, though it adds complexity to the pipeline. Not surprisingly, the quality of each previous stage directly affects how well subsequent stages can go.
[$] A look at CrossPoint e-reader firmware [LWN.net]
There are a number of small, inexpensive, low-powered e-reader or e-paper devices that have promise as ebook readers with one minor problem: the firmware they ship with does not realize their full potential. To solve that problem, the CrossPoint Reader project looks to provide replacement firmware that offers necessary features, better performance, and a more pleasant reading experience. On August 7, the project released version 1.5.0, which opens large EPUBs more quickly, provides offline dictionary lookups, and has reworked settings for changing layout and font options. The release also improves support for right-to-left text as well as Chinese, Japanese, and Korean (CJK) text rendering.
Version 11.1 of the QEMU emulator has been released. The release contains more than 3,200 commits from 285 authors and includes a long list of improvements; see the announcement and changelog for the details.
Steinar H. Gunderson: The PSX GPU is wild [Planet Debian]

Inspired by some recent reverse-engineering, here are some things I find wild by the original PlayStation GPU:
I just went through hell trying to respond to an email that came to me through the gateway between WordPress and Mastodon. I clicked the link, it took me to a WordPress dialog, very confusing, but there was a link to the message, so I clicked it, took me to a Mastodon post, where there was a bit of (valid) snark, from a longtime friend. So I clicked Reply, and then the dialog from hell. I understand why it is this way. They did the best they could for a protocol that was designed that wasn't appropriate for a distributed system like Twitter which was what Masto was/is. At some point you have to be dispassionate about this. We wanted a self-driving car, but it can't drive itself. The spec isn't the important thing. You do that after you have the software running and usable.
If you run a tech company I hope you didn't lay off most of
your programmers last year when that was the hype -- don't wait too
long before you fire your human developers. I'm now doing my second
big project with Claude Code, not an experiment, and we're
going through the same mess we went through last time. I know what
I want, I can show it what I want, give it docs for what I want,
and it keeps leading me into different corners that have nothing to
do with it. When it clicks, it can go faster than a thousand
programmers and it's a miracle, and when we can harness it to the
job we want to do it's incredibly economical. $100 for $1 million
of work. That's why you see me full of gusto for that mode. What I
haven't written about how when you slow to nothing, back and forth,
and you get no closer. I hate this kind of work, esp the role I
have to play in it.
Security updates for Wednesday [LWN.net]
Security updates have been issued by AlmaLinux (fence-agents, firefox, frr10, gstreamer1-plugins-good, iscsi-initiator-utils, isns-utils, kernel, kernel-rt, perl-DBI:1.641, postgresql, postgresql:12, and resource-agents), Debian (libgd2, openjdk-25, php7.4, php8.2, and postfix), Fedora (clamav, domoticz, and libidn), Red Hat (delve, edk2, firefox, go-fdo-client, go-fdo-server, grafana, host-metering, ignition, kernel, kernel package, kernel-rt, ldns, libarchive, mariadb10.11, mariadb:10.11, multiple packages, rhc, rhc-worker-playbook, rhc-worker-script, sssd, thunderbird, yggdrasil, and yggdrasil-worker-package-manager), Slackware (expat and openssh), and SUSE (avahi, chromedriver, erlang26, gawk, glib2, go-sendxmpp, google-guest-agent, google-osconfig-agent, gpg2, gstreamer-plugins-bad, gstreamer-plugins-base, helm, ignition, ImageMagick, java-11-openj9, java-17-openj9, java-1_8_0-openj9, java-21-openj9, java-25-openj9, libarchive, libkrun, libpcp-devel, libpng16, libssh, libssh2_org, multipath-tools, net-tools, nmap, openssl-1_1, openssl-3, pcp, perl, python-pip, python-pyasn1, python-urllib3, python3-pip, python313-Django5, runc, samba, snpguest, spice-vdagent, sssd, unbound, wget, wild, wpa_supplicant, xmlrpc-c, and zpaqfranz).
Branching Paths [The Daily WTF]
"You submitted a pull request."
Indika was, in fact, reviewing the comments she'd gotten on that very same pull request, when her boss, Bill, walked up behind her. What she didn't understand is why Bill said it like it was an accusation.
"Yes?" she replied.
"Okay, well, we don't do that here. You're new, so I'll let it slide, but please review the developer guide."
Well, Indika had reviewed the developer guide, or at least thought she had. As it turned out, there was the official, company wide developer guide. That's the one she'd read. But Bill maintained his own, for his team. He hadn't ever told her about it, but apparently assumed she'd have the oracular blessings of Apollo and find it by herself.
It had this to say:
Branching is prohibited. Merging is a time wasting activity and goes against CI principles. Only use
gitto commit, push, and pull.
And rebase, presumably, if everyone was just committing on the main branch?
Indika asked one of her co-workers, Elise, over coffee: "Is this real?"
"Yeah," Elise said. "I'm not sure how he found out about your PR, I don't think anybody added him to the review. I mean, why would they?"
"Oh, I sent him the link," Indika said. "Just a whole, 'I'm new here, look at me doing the work!' type heads up."
"Oh yeah, definitely don't do that."
"So we do use PRs?"
Elise nodded. "Of course we do. We're not crazy. We just make sure Bill never finds out."
That seemed like a terrible way to work, but Indika went along with it, at least for a few weeks. Then an opportunity presented itself; she and Bill bumped into each other in the kitchenette grabbing coffee, and nobody else was around. At this point, Indika had already submitted a number of PRs without Bill knowing.
"Bill, I've been meaning to ask, what's your rationale for prohibiting branching?"
Bill loved being asked that question. "Well, well, it comes from twenty years of experience. What exactly does a branch get you?"
"A distinct history of changes that can be maintained and eventually merged in once a large unit of work has been done without disrupting other work that might be in flight?"
"Another point of conflict! A chance for the code you're working on to get stale. A chance to fall behind the rest of the team. Now, for a large open source team, with a lot of collaborators, a branch might make sense. I'm skeptical, but I can at least understand it. But for our internal team? It's just developers seeing a new toy and going, 'oh, shiny!'"
Indika sipped her coffee and went back to her desk. She was fortunate to have a window nearby, and looked at the squirrels playing in the branches of the tree.
Issue 47 – Greta’s Wedding Pt. 2 – 13 [Comics Archive - Spinnyverse]
The post Issue 47 – Greta’s Wedding Pt. 2 – 13 appeared first on Spinnyverse.
Prompt Injections for Defense [Schneier on Security]
This seems to work:
Researchers from Tracebit on Monday said they found that placing prompt injections alongside passwords, cryptographic keys, and other secrets stored on Amazon Web Services was often all that was needed to shut down attacks from AI hacking agents. The prompts direct the attacking LLM to perform an action forbidden by its guardrails, the safety barriers AI developers erect to prevent it from taking harmful actions. The LLM responds by shutting down.
Examples are a prompt that orders the LLM to provide steps for developing inhalable Anthrax spores, or, in the case of LLMs from Chinese developers, make references to the iconic Tank Man from the 1989 Tiananmen Square massacre. Once the LLM encounters these forbidden commands, it no longer follows its existing commands. The researchers have named the technique context bombing.
Of course, this only works against agents that have guardrails. As we start to see more locally run AI models, we’ll see more attackers using LLMs with no guardrails.
The magic of a two-year waitlist [Seth's Blog]
The Decware triode amp is the best low-power stereo amp I’ve ever heard. And it’s a bargain. If you have the right speakers, it’s an extraordinary device.
And there’s a two-year waitlist. 2000 people, 11 pages long.
This approach to timing and production serves all the people that matter to the company.
Employees are free to do their best work without rushing.
The operation is able to be right-sized instead of more-sized.
The risks are reduced, since the infinite loop of expansion is almost always followed by the doom loop of contraction.
Would-be customers who are impatient can go elsewhere or even buy a used one.
And the folks who are upgrading to this final, ultimate purchase of equipment discover that the value of the transaction goes up commensurate with how long they have to wait. In a world built on instant convenience, perhaps this is something worth waiting for.
Most MBAs would tell Steve to raise prices, ramp up production, automate, outsource and maximize profits.
But perhaps the resilient and generative approach is precisely the right choice. The hard parts are: 1. making something people are willing to wait for, and 2. having the guts and commitment to make them wait.
Pick your customers, pick your future. And often, entrepreneurs forget that they don’t work for Milton Friedman. We can choose the work we do and the value we create, and we can decide what better looks like.
Pluralistic: Model collapse (12 Aug 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

One of my favorite rhetorical and analytical moves is joining things together (showing that two different, seemingly unrelated ideas are aspects of the same phenomenon) and taking them apart (resolving a paradox by demonstrating that what appears to be one, contradictory thing is actually two different things that have been lumped together).
"Taking things apart" is a very useful framework for understanding AI. How do we resolve the (seeming) paradox that some skilled workers report wonderful results from their work with AI, while others are full of dire warnings about the lurking defects in their AI-assisted outputs? Simple: the first group are "centaurs" (humans who are assisted by machines) and the second are "reverse centaurs" (humans who have been pressed into service as peripherals for machines):
https://pluralistic.net/2025/12/05/pop-that-bubble/#u-washington
What are we to make of the people who've been fired by bosses who replaced them with AI, in light of the fact that AI is demonstrably not able to do their (former) jobs? Again, it's simple if you separate out two distinct phenomena: "AI can do your job" is the first. The second is: "Your boss is a credulous dolt who is infinitely horny for replacing lippy workers with pliable machines, which made him an easy mark for an AI salesman who convinced him to fire you and replace you with an AI that can't do your job":
https://pluralistic.net/2025/03/18/asbestos-in-the-walls/#government-by-spicy-autocomplete
This is also a useful move for understanding the AI investment bubble. It's not just billionaires who don't think other people are as real as they are and consequently their jobs can be done by chatbots. It's also billionaires who believe that bosses can be sold AI and don't care if the AI is defective, because that's your boss's problem after he buys the AI and fires you. They don't have to believe in AI in order to think it's a good investment: like an investor betting that Joe Rogan can sell millions of dollars' worth of peptides to desperate young men, they are assessing the sales potential, not the merits of the thing for sale:
https://pluralistic.net/2026/08/03/andor/#either
As useful as "taking things apart" is, "putting things together" is also a very important technique for assessing, critiquing and improving AI. In a stellar essay entitled "Temperature Zero for Culture: Why Everything Is Starting to Look the Same" by the data scientist Lauren Leek, we get a top-notch example of "putting things together":
https://laurenleek.substack.com/p/temperature-zero-for-culture-why
Leek's essay is one of those fabulous, wide-ranging, cross-disciplinary pieces, touching on urban design, music trends, synthetic LLM crowds, Netflix recommendation algorithms, and several other subjects, all seeking to resolve a(nother) (seeming) paradox: how is it that we have so much potential variety, but everything is so manifestly the same?
The answer is complicated and nuanced, but Leek's foundational point is that in a data-driven society, "predictions" are self-fulfilling prophecies. As Leek puts it: "Once prediction shapes the choices in front of us, we lose the ability to tell the difference between what people wanted and what the system made easy to want."
This is a pervasive issue across many domains. Leek says that economists call it "performativity," while machine learning researchers call it "model collapse" and urbanists call it "placelessness."
"Performativity" describes how, once a market has been modeled by economists, that model becomes the foundation for economic policy, which pushes the market to conform to the model:
https://press.princeton.edu/books/paperback/9780691138497/do-economists-make-markets
"Model collapse" describes how machine learning models that are trained on their own predictions become incredibly bland, with all variety disappearing from the system's predictions:
https://pluralistic.net/2024/03/14/inhuman-centipede/#enshittibottification
This is hugely consequential: it's why bias proliferates through predictive policing algorithms: train a model with data from racist stop-and-frisks and it will predict that all the weapons and drugs in a city are to be found in Black and brown peoples' pockets. Turn those predictions into recommendations telling cops where to go look for weapons and drugs and they will double down on racist stops, producing even more biased training data, which turns into still more bias in the predictions:
https://hrdag.org/2016/10/10/predictive-policing-reinforces-police-bias/
"Placelessness" is the urbanist's name for "when everywhere optimises toward the same template." I think of it as Flinstones Syndrome, where the same background is looped behind Fred and Barney as they drive through Bedrock. In New York City, it's Citibank-bodega-Chipotle-Walgreens; in the Chicago suburbs, it's the strip malls with a Chili's, a gas station, and a big box store.
Leek proposes that these are all expressions of the same underlying phenomenon, a failure mode of data science that takes a world of "granular personal data" and arrives at a world where "personalisation produc[es] more sameness."
To these excellent examples, I'd add another one, from the world of monetary policy: Goodhart's Law, which holds that "When a measure becomes a target, it ceases to be a good measure":
https://en.wikipedia.org/wiki/Goodhart%27s_law
Goodhart's Law captures a wide variety of phenomena. When Google first deployed Pagerank, they showed that by counting the inbound links to all the pages on the web, you could extract a signal about which pages were most important (because there was no reason to link to a page unless you found it noteworthy).
But once Pagerank became the dominant means by which web users found pages, counting links stopped being useful: first, because people used Pagerank to find the best pages and link to them, making it impossible for new pages to get the inbound links needed to supersede incumbent pages; and second, because it's easy for fraudsters to create inbound links for low-quality pages in bulk, once there's a reason to do so.
Counting inbound links was a world-beating retrospective way of predicting which page would best match a searcher's query, but once it shaped the world it sought to analyze, it ceased to be a good prospective way to predict which page would best match your queries.
Leek is a brilliant data scientist and an even better science communicator, with a knack for crisp, readily understood explanations. How can a world of granular, highly varied data turn into a world of homogeneous choices? Simple: start with a set of items ("cuisines, genres, shop types") and a standard algorithm for sorting them. Let users choose from those recommendations. The mode (average) of those choices "gets shown more, so it gets picked more, so the model grows more confident the mode is what people want, and the tails starve." Run this for a few rounds and the evenly distributed catalog of choices "collapses onto one dominant option."
This is intrinsic in the choices we make in designing recommendation algorithms, tilting them towards the likelihood of a successful recommendation. A recommender that wants to succeed every time will make the safest possible recommendations, "so an algorithm that is uncertain about you, and it is always at least a little uncertain, hedges toward the average."
Then she busts out a beautiful, perfect little statistics aphorism: "Personalisation under a standard loss function is regression to the collective mean with extra steps." That is to say, "regression to the mean" (the tendency of varied things to become more standardized) cannot be avoided with the standard personalization algorithm. That algorithm is going to play it safe, showing you things that are broadly palatable, and because your choices are constrained to the average, you will choose average things.
This is how recommendation systems – and other analytical tools that produce predictions that are then turned into action – force so many diverse phenomena (streets, markets, media recommendations) into sameness. The fact that these recommenders are self-fulfilling prophecies means that "they don't have to be right," only "listened to."
This explains the sameness of so many of London's high streets. Leek examines 640 shopping streets, characterizing 18,000 food places spread out across them, flagging all the chain restaurants. Her analysis shows that any two London streets will, on average, share about half of their "food profile."
Obviously, this is most pronounced on streets with chain outlets, and it doesn't take that many chain outlets before a street's sameness shoots up: "A relatively small number of repeated names is enough to make otherwise different streets resemble one another more." So why do streets with chains resemble one another so much? Because the chains use an algorithm (weighting footfall, proximity to train stations, demographics, and competitors) to decide where to put their restaurants. If a street with a Gail's Bakery on it feels like every other street with a Gail's Bakery, that's because Gail's only puts its restaurants in places that have highly similar characteristics, measured to a high degree of accuracy and controlled by a narrow set of tolerances.
In other words, every street that feels like it should have a Gail's will eventually get a Gail's, whereupon that street will feel even more like all the other streets that have a Gail's, because it will share one more common factor with those other streets (a Gail's).
Leek points here to her earlier work on pub closures in the UK. The UK has experienced an epidemic of pub closures, with thousands of pubs disappearing since 2016:
https://laurenleek.substack.com/p/britain-lost-14000-third-places-they
Her research found that the biggest predictor of a pub surviving was its similarity to the median pub; which is to say that the more distinctive a pub was, the more "character" it had, the more likely it was to close. Pubs that are different from the average pub are harder to categorize, which means they're harder for a bank manager to assess for creditworthiness or for a landlord to justify extending a long-term lease to. The algorithms used to allocate capital and real estate are also recommenders, and they also drive variety out of the system.
This same phenomenon acts on culture. In an age of music recommendation algorithms, hit songs are changing; today's songs use a smaller vocabulary of unique words and repeat those words more often:
Vocabulary richness, distinct words relative to length, has fallen by more than a quarter since the early 1960s, while the share of repeated lines has climbed by nearly a third. The modern hit says less and says it more often, because the hook that works gets repeated.
But that's not the whole story! While each song resembles itself more ("saying less more often"), within that constraint, there's far more variety today than before: a given song's (constrained) vocabulary has grown more distinct when compared to all the other songs' vocabularies. Songs repeat the words they use, but the words repeated in songs are getting more different.
For Leek, this is the key to understanding the whole phenomenon and (more importantly) doing something about it. Music recommendation systems optimized for a singable hook, but did not optimize on any of the other variables in songs, so those dimensions acquired a broader range, even as the optmized variable got flatter and narrower.
This means that the tendency of recommenders to "flatten the world" isn't a single blunt outcome: it depends on which dimension we choose to flatten through recommendation, and who chooses to flatten that dimension.
A media recommender optimizes for consumption, showing you a tractable set of things it believes you'll watch, read or listen to. When you choose from among this limited set, the recommender takes note of that fact and shows you more of the same, pushing everything to a greige median. All the movies, books and songs you might have liked that were omitted from that initial set are excluded from being recommended in the future. The features of that media that you might have appreciated "decay out of consideration." They are never tested for desirability. The model collapses.
How badly does it collapse? Leek cites Movietweetings' data on which movies people watch: out of a million public movie ratings, half relate to the top 2% of movies in the set. There's 38,000 films in the set, but just 380 titles account for 40% of the ratings. Leek argues (persuasively) that this isn't because recommenders are good at "knowing your taste" – rather, they are good at "narrowing the menu."
Leek relates this to her work on creating LLM "personas" – synthetic populations meant to mimic the tastes and proclivities of real groups of people, that you can interrogate "before you spend money asking actual humans." While this would be useful for many applications, "it fails in exactly the way this whole essay is about."
Leek went to enormous lengths to reproduce the traits that make people interesting to study in aggregate, painstakingly replicating the ways that social connections, psychological outlook and demographic factors predict people's beliefs. The result was a set of LLM personas with "elaborate stories" about how they differed from one another, but whose survey responses about planned actions were homogeneous in a way that real populations are not.
This, Leek writes, is the same force that homogenizes other data-driven predictors. Because she'd ordered her LLM to reproduce the statistically validated relationships between different factors that predict a person's beliefs, each synthetic persona was a homogenized average. It's like the paradox of "The Average Man," where military uniforms sized to the average of all service personnel fit no one, because no one is average:
https://archive.org/details/DTIC_AD0010203
The thing is (as Leek points out) the idea that synthetic personas are a good way to understand the preferences of a real population is not a harmless delusion: it's a product that's being actively sold to governments, campaigning politicians and marketers. It's a self-fulfilling prophecy that drives governance, political campaigns and product design to the same homogeneous median that is making every shopping street in London feel the same.
This matters. As Leek writes, ecologists have long understood the importance of variety for systemic resilience: they call it "the insurance value of biodiversity." A diverse system has reservoirs of species and variation that may not be optimized for how things stand now, but that can move into niches created when things change in ways that lay waste to the previously dominant organisms. As anyone whose favorite banana went extinct can tell you, homogeneity works well, but diversity fails well:
https://en.wikipedia.org/wiki/Gros_Michel
The brittleness of algorithm-induced homogeneity is compounded by the fact that recommenders obscure the true preferences of people. If you watch two Scandinavian crime dramas after Netflix recommends them to you, it will keep showing you more Scandy crime for the next decade – even if there's another kind of programming that you'd vastly prefer (if only you knew about it). This means that decision-makers who choose which shows will get made in the future will keep on funding their safe Danish detectives, to the exclusion of whatever might emerge from the same weird attractor that produced the K-Pop Demon Hunter fortune.
Transpose this failure mode onto states, bank managers and landlords, and we see whole ranges of policies, businesses and activities that never come into existence, despite the popularity, prosperity and joy they might bring us.
But Leek doesn't end with this worrisome note. Instead, she identifies this whole thing – model collapse, placelessness, performativity, even Goodhart's Law – as an expression of one of the best-understood tradeoffs in computer science: "exploration vs exploitation":
Any system learning from feedback has to divide its effort between exploiting what already scores well and exploring options it hasn’t tried, in case they’re better.
Computer scientists have long understood that focusing on exploitation to the exclusion of exploration is a trap that locks you into "the first decent option" so you can never discover the best one.
Which means that this algorithmic homogeneity has a well-understood corrective: "forcing exploration back in." The problem is that markets hate this kind of exploration. A company that lives and dies by how many clicks it gets is never going to sacrifice 20% of its traffic by showing its users weird, untested options that score worse than the median because these weird things have never had a chance to prove that they are desirable.
This is a classic market failure, and, as Leek points out, there are regulatory responses in the UK (the Digital Markets, Competition and Consumers Act) and the EU (the Digital Services Act), both of which require the largest platforms to open up their recommendation systems, but so far, regulators have focused on "online harms" rather than variety (though the DSA does require platforms to offer algorithmic recommendations that are not based on your personal traits).
Leek identifies this willingness of states to set conditions for algorithm design as a means by which "exploration" can be forced back into the system. She's also bullish on interoperability, so that users can leave platforms with bad recommenders, without losing access to their media or social circles. As she writes, "the deepest discipline on a feed that has trapped you is the credible ability to leave it and take your data with you." I couldn't agree more:
https://pluralistic.net/2023/01/08/watch-the-surpluses/
She's less hopeful about individual responses. Demanding that you be an "adventurous consumer" is a way of letting systems off the hook. When every street has the same restaurants and every bookshop has the same books and the people in your life are all locked into one of two social media platforms, "choosing wisely" only gets you so far. Shopping isn't politics!
https://pluralistic.net/2026/05/21/purity-culture/#stop-fucking-that-chicken
Leek is a superb writer. After reading this piece yesterday, I sent it to half a dozen people and then read everything else in Leek's newsletter archives. Not only is it all brilliant, but I also realized that she'd written one of the most memorable articles about cities and platforms I've read in the last year, "How Google Maps quietly allocates survival across London’s restaurants – and how I built a dashboard to see through it":
https://laurenleek.substack.com/p/how-google-maps-quietly-allocates
I should have added Leek's newsletter to my RSS reader when I read that last December. I've rectified that oversight! What a fantastic thinker, scientist and communicator! If she isn't being relentlessly pestered by editors and literary agents offering her a book deal, then it really does prove that the recommender systems are elevating the bland median over the thoroughly, delightfully spiky outliers.

On AI Coding and Its Discontents https://calnewport.com/on-ai-coding-and-its-discontents/
Crocs Has a Trick for Dodging Taxes: a Tiny Office in Malta https://www.nytimes.com/2026/08/05/business/economy/crocs-malta-tax-haven.html?unlocked_article_code=1.4VA.UZy2.BtVrP_IVnz8b
Why State-Level Contract Law is Essential to the Future of Digital Library Rights https://www.libraryjournal.com/story/news/moving-beyond-the-publisher-playbook-why-state-level-contract-law-is-essential-to-the-future-of-digital-library-rights
What is a Reverse Centaur? https://www.youtube.com/watch?v=CVjt3_bf1bI
#25yrsago Awful, stupid Wired report on Dutch hacker camp https://web.archive.org/web/20011007084604/https://www.wired.com/news/culture/0,1284,46033,00.html
#25yrsaog Excellent NYT story about the internal contradictions of the DMCA https://memex.craphound.com/2001/08/13/excellent-nyt-story-about-the/
#20yrsago Our faulty intuition about open systems https://www.ft.com/content/64167124-263d-11db-afa1-0000779e2340
#20yrsago Defending against the last plot won’t save us from the next one https://www.schneier.com/blog/archives/2006/08/terrorism_secur.html
#20yrsago NBC: Hair-gel terrorists posed no risk last week https://web.archive.org/web/20060813194630/http://www.msnbc.msn.com/id/14320452/
#15yrsago AT&T merger leak: it’s all about raising prices and reducing competition https://web.archive.org/web/20110920222524/http://www.broadbandreports.com/shownews/Leaked-ATT-Letter-Demolishes-Case-For-TMobile-Merger-115652
#10yrsago What’s inside a Tiki Bird? https://miehana.blogspot.com/2016/08/fancy-feathers-restoring-tiki-room-birds.html
#5yrsago End of the line for Reaganomics https://pluralistic.net/2021/08/13/post-bork-era/#manne-down
#5yrsago Smart cities are neither, 2021 edition https://pluralistic.net/2021/08/13/post-bork-era/#our-streets
#1yrago Maga's boss class think they are immune to American carnage https://pluralistic.net/2025/08/13/then-they-came-for-me/#boss-politics

https://www.edbookfest.co.uk/events/cory-doctorow-enshittification
Edinburgh International Book Festival with Jimmy Wales, Aug
17
https://www.edbookfest.co.uk/events/the-front-list-cory-doctorow-and-jimmy-wales
Sydney: The Festival of Dangerous Ideas, Aug 23-24
https://festivalofdangerousideas.com/program/
Melbourne: Enshittification at the Wheeler Centre, Aug 25
https://www.wheelercentre.com/events-tickets/season-2026/cory-doctorow-enshittification
Brighton: The Reverse Centaur's Guide to Life After AI with
Carole Cadwalladr (Brighton Dome), Sep 8
https://brightondome.org/whats-on/LSC-cory-doctorow-the-reverse-centaurs-guide-to-life-after-ai/
London: The Reverse Centaur's Guide to Life After AI with Riley
Quinn (Foyle's Picadilly), Sep 9
https://www.foyles.co.uk/events/enshittification-cory-doctorow-riley-quinn
South Bend: An Evening With Cory Doctorow (Notre Dame), Oct
6
https://franco.nd.edu/events/2026/10/06/an-evening-with-cory-doctorow/
Vancouver: BC Policy Solutions Gala, Nov 12
https://bcpolicy.ca/gala/
AI, automation and enshittification (Telecoms.com)
https://www.telecoms.com/ai/the-telecoms-com-podcast-ai-automation-and-enshittification
The AI Enshittification Bubble (Hidden Forces)
https://hiddenforces.io/podcasts/the-ai-enshittification-bubble-cory-doctorow/
F@#$ the AI Overlords (On The Media)
https://www.wnycstudios.org/podcasts/otm/articles/f-the-ai-overlords
Why AI Won't Replace Workers, But Will Crash The Economy (Smart
Cookies)
https://www.youtube.com/watch?v=rRRmUuxJolY
"Canny Valley": A limited edition collection of the collages I create for Pluralistic, self-published, September 2025 https://pluralistic.net/2025/09/04/illustrious/#chairman-bruce
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing:
"The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Fourth draft completed. Submitted to editor.
A Little Brother short story about DIY insulin PLANNING

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):
https://mostlysignssomeportents.tumblr.com/tagged/pluralistic
"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla
READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.
ISSN: 3066-764X
New Comic: Brokon
The little-known winstart.bat batch file [The Old New Thing]
Reader Otul Osan wants to know what the use case for C:\WINDOWS\WINSTART.BAT was, compared to C:\AUTOEXEC.BAT and when exactly during system startup it launches.
In Windows 95, you could create a winstart.bat file in your Windows directory. During startup, the virtual machine manager initializes and creates the so-called “System virtual machine” (the “System VM”), which is the virtual machine that all Windows programs run in. But before running the user-mode kernel in that virtual machine, the virtual machine manager runs the winstart.bat batch file if it exists.
In pictures: First, we boot up MS-DOS and the command prompt. (Note: All diagrams omit lots of details not relevant to the discussion and are not to scale.)
| Stuff | (unused) | MS-DOS |
The box labeled “Stuff” is a catch-all for random things that go at low addresses, like the interrupt vector table and the BIOS data area.
Next, command.com runs autoexec.bat, which might install some TSRs.
| Stuff | TSR1 | (unused) | MS-DOS |
And then Windows starts up and initializes the virtual machine manager. The system is now running in protected mode with a virtual machine running in v86 mode, and that virtual machine is initialized with whatever was running in real mode at the time the virtual machine manager took over.¹
|
ring 0: virtual machine manager |
I crossed out MS-DOS because the virtual machine manager took over responsibility for the file system and shut off the real-mode file system in MS-DOS.
At this point, the virtual machine manager runs winstart.bat inside the virtual machine, and maybe it installs another TSR.
|
ring 0: virtual machine manager |
And then we start the user-mode kernel that is in charge of Windows applications. That user-mode kernel switches the virtual machine into protected mode and starts running what most people think of as Windows.
|
ring 0: virtual machine manager | ||||||||||||||||||
And then from the Windows GUI, you decide to open a command prompt, which means creating a second virtual machine.
|
ring 0: virtual machine manager | ||||||||||||||||||
|
|||||||||||||||||||
Notice that the virtual machine running command.com is a copy of the system when Windows started.² So it has TSR1 (from autoexec.bat) but not TSR2 (from winstart.bat).
If you install a TSR in the command prompt virtual machine, you get
|
ring 0: virtual machine manager | ||||||||||||||||||
|
|||||||||||||||||||
Okay, now that we see how the pieces fit together, we can reverse-engineer the purpose of winstart.bat.
The intended purpose of winstart.bat is batch file is to allow you to install TSRs that will apply only to Windows programs. For example, you might install network drivers to support your Windows programs. You might choose this option instead of installing them globally because you don’t care about networking for your MS-DOS programs and want to free up conventional memory for them. Or because those drivers don’t support running in multiple virtual machines, so you’ll take them in the System VM and forego them for your MS-DOS programs.
What I find interesting is that most people who discover this say that it’s a feature of Windows 95. But really, it’s a feature of Windows 3.1 (and possibly even Windows 3.0). You can find it documented in the Windows 3.1 Resource Kit on page 263. That page even has a nice table showing three ways of launching TSRs and how they are visible in the different virtual machines. (In this table, “TSR visible in virtual machines” really means “TSR visible in non-Windows virtual machines”, but the documentation takes the convention that the term “virtual machine” refers only to non-Windows virtual machines and not to the virtual machine running Windows itself, which it simply calls “Windows”.)
| Where TSR is loaded | TSR visible in Windows? | TSR visible in virtual machines? |
|---|---|---|
| From MS-DOS | Yes | Yes, all virtual machines |
| From WINSTART.BAT | Yes | No |
| In a single virtual machine | No | Only that virtual machine |
¹ Think about that: We booted an operating system and then booted another operating system around it, so that the original operating system was now running inside a virtual machine controlled by the second operating system. It’s like leaving your house, walking down the street, and halfway down the block, realizing that you’re now walking inside a movie studio set.
² It isn’t actually a copy of the system at the time Windows started. Rather, it is a copy of the system VM, but only the parts that existed at the time Windows started. How this worked is too complex to try to explain in a footnote. Maybe I’ll discuss it some other time.
The post The little-known <TT>winstart.bat</TT> batch file appeared first on The Old New Thing.
Surveillance at Madison Square Garden [Richard Stallman's Political Notes]
Madison Square Garden uses surveillance cameras to recognize people. It specifically tracks people on its enemies list, such as journalist Rachel Maddow. But it normally tracks everyone who enters and perhaps recognizes them all.
However, they made an exception for the audience at Taylor Swift's wedding, apparently because she had the clout to demand this.
People must be free to take photos in public places occasionally and publish them. But no one, and especially no business or organization or government, should be allowed to systematically record everyone that passes before a camera and put the records into a internet-connected system.
Pressuring Democratic candidates to stop avoiding climate issues [Richard Stallman's Political Notes]
A grass-roots campaign is pressuring Democratic candidates to stop avoiding the issue of growing climate disaster.
Focusing on "affordability" of everyday life is partly a mistake, and partly a response to pressure from billionaires who figure that will lead towards weak palliative measures rather to any big change to transfer wealth.
The increasing cost of living is a consequence of deeper injustices, one of which is the growing cost of climate disaster (including food plagued by agricultural failure). Another is the growing cost of medical treatment, which stems largely from the big role of businesses in it. Another is the long and slow shift that leaves the non-rich with less and less of society's productive capacity.
Scrapped plans to curb jury trials [Richard Stallman's Political Notes]
*Andy Burnham signals he will scrap plans to curb jury trials [in the UK].*
This is a victory, even though it only prevents a plan to make things worse.
The supposed "need" for restricting the right to a jury was a shortage of funds. I think Burnham has some plan to increase taxes on non-poor people so as to pay for this and other things to make the UK better.
(satire) Wrath of next ultimatum [Richard Stallman's Political Notes]
(satire) *[The bully] Warns Iran To Accept His Ultimatum Or Face Wrath Of Next Ultimatum.*
Climate emergency poses risk to global economy [Richard Stallman's Political Notes]
*A senior policymaker at the European Central Bank has said the climate emergency and the breakdown of nature poses a dramatically growing risk to the global economy.*
If we are unable to grow enough food, or if calamities substantially reduce the life expectancy, it is going to be hard for anything to be stable or predictable.
What we need to make sure of is that the billionaires won't be able to insulate themselves (and their servants) from sharing the fate the impose on us. And that they know they won't be able to.
Boycott Magnum for Ben and Jerry's [Richard Stallman's Political Notes]
Ben and Jerry sold their ice cream company to Unilever under an agreement to preserve the company's independence and social activism. They now say that Unilever has violated the agreement in several ways, and finally by reselling it to Magnum (as far as I can tell, without any ethical requirements). They call on supporters to boycott Magnum to pressure for it to sell Ben and Jerry's to someone who will restore them.
It is not a simple matter to draw up a contract that will prevent the buyer of a company, or of a program, from slipping out of agreements to follow ethical standards by transferring control in increments.
Tourette's syndrome slip [Richard Stallman's Political Notes]
John Davidson, who has Tourette's syndrome, said the taboo word "nigger" with no conscious intention while two blacks were on stage. People freaked out.
A few decades ago, antiracists understood the word as an unjust insult — when it was meant to characterize someone. But people could contemplate the word in the abstract, and discuss its meaning and implications (such as, a racist attitude) without losing their wits. They could criticize the word's racist attitude without terror of violating the taboo if they said which word they were criticizing. If they heard a touretter say it, and understood that the touretter did not mean to characterize anyone with it, they did not hold that against per.
The change to regard the word "nigger" as a shocking profanity rather than as an unjust racist attack has made it harder for society to cope with situations like this one, and harder to clearly express condemnation of racism.
(satire) Make-out point purchased by make-out conglomerate [Richard Stallman's Political Notes]
(satire) *Small Town’s Make-Out Point Purchased By Multinational Make-Out Conglomerate.*
(satire) Military Wife Draft [Richard Stallman's Political Notes]
(satire) *U.S. Instates Military Wife Draft.*
Underground report from Iran [Richard Stallman's Political Notes]
An underground report from Iran about torture and killing of imprisoned protesters.
Ticketmaster increased base price [Richard Stallman's Political Notes]
Ticketmaster was required by law to stop adding certain junk fees to ticket prices, so in some cases it increased the base price so that the total remained the same.
Is this a scandal? I don't think so. The scandal is that they would tell you a lower price, not including the junk fees, then charge you a higher price which includes the junk fees. Now they have to be more honest about the real price.
If we want to do something about the high price of concerts, we should adopt strict laws against overconsolidation of industry, and break up businesses that are too big. This would include the Ticketmaster/Live Nation near-monopoly and many others that mergers have created in the past few decades.
The corrupter's henchmen are encouraging new monopolies.
Sham promises to get Blanche confirmed [Richard Stallman's Political Notes]
The corrupter, seeking to have his personal lawyer Blanche confirmed as Attorney General, made sham promises to the Senate that Blanche would not approve the corrupter's slush fund and tax return immunity deal.
The promises are a sham because they are only temporary — if the Senate approves Blanche, he and the corrupter can cancel these promises and approve the deal anyway.
Academic scores and antisocial media use [Richard Stallman's Political Notes]
* Pupils who open [antisocial media] accounts [at the age of] 11 to 12 score lower in some subjects [at age 16] than those who wait a few years [to open such accounts], study finds.*
Climate change kills [Richard Stallman's Political Notes]
"Climate change kills": [Prime Minister] Pedro Sánchez speaks plain truth to Spain's deniers.
Prosecution of violent "settler" for killing Palestinian [Richard Stallman's Political Notes]
Israel is prosecuting one of the violent right-wing "settlers" for killing a Palestinian journalist in the West Bank.
Such a prosecution ought to regularly follow their crimes, but instead it is news, because Israel generally protects those killers.
Girl Genius for Wednesday, August 12, 2026 [Girl Genius]
The Girl Genius comic for Wednesday, August 12, 2026 has been posted.
Invitation Refused [QC RSS v2]

Caves of Qud reference
Google hammers another, extremely petty nail in the Android Open Source Project’s coffin [OSnews]
The slow but steady march to the grave for the Android Open Source Project continues. Every few months Google hammers another big nail in the coffin of Android as an open source effort, and I’ve documented them all here on OSNews (nail, nail, nail, nail, nail), coming to the conclusion long ago that for all intents and purposes, Android is no longer an open source operating system.
The latest move, however, is just petty.
According to GrapheneOS on [Twitter], Google has apparently replaced public, instant code downloads for Pixel phone drivers with a manual request form. Instead of publishing code directly to open developer platforms where anyone can grab it, Google now requires developers to fill out a Google Form and wait for someone to send them a Google Drive link.
What used to take a couple of hours is now taking weeks.
↫ Hillary Keverenge at Android Authority
I’m perhaps misremembering, but I vaguely recall discussions decades ago about what, exactly, it meant to “make source code available”, as open source licenses state in a variety of words. Would mailing a paper print-out by classic post satisfy such requirements? Could you write the source code on a brick and throw it through the user’s window? Could you hire a church choir to sing it? These are all silly examples, but before everyone had internet access, this was a relevant question.
The widespread availability of the internet and software like git solved these issues, which makes it all the more petty that Google now requires an actual application process, waiting times, and Google Drive dumps just to get access to the source code for Pixel drivers. Google is clearly trying to kill whatever’s left of the Android Open Source Project’s rotting corpse, only barely technically complying with any license requirements only because they’re obligated to.
The Android team at Google must be a hoot at parties.
GNOME showcases a number of possible GNOME Shell changes [OSnews]
The GNOME Shell user interface has mostly seen minor refinements and quality of life updates in recent cycles, but on the design side we’ve explored a lot of longer-term things we’d like to do. Some of these we have relatively complete plans for, others are more vague ideas that need more research and prototyping. As always, getting things like these implemented depends on developer capacity and interest (and sometimes funding).
While each of these ideas may require additional discussion, prototyping, and testing, we (the design team) have collected them all together here to share our longer-term vision and to give each idea more visibility.
↫ Tobias Bernard on the GNOME blog
There’s quite a few good ideas in there, with most of them already being available in the form of various extensions. I’m not entirely sure if I’m a huge fan of copying Android and iOS by moving notifications into the quick settings dropdown thing, but it’s not like having them in the clock/calendar dropdown thing is any better. I only use notifications as they arrive and never look at the place where they end up – that’s a mobile thing for me – so I don’t think I’ll really care either way.
Things like editable quick settings, transparent top bar on certain backgrounds, the improved window drag and drop in the Exposé view, the alt+tab experiments, and some of the others do seem quite interesting though, and anything that reduces the number of GNOME extensions I need to install and keep updated gets a big thumbs up from me.
If you wish to work on any of these suggestions, working on GNOME Shell has gotten a lot easier recently.
In the past, GNOME Shell was significantly harder to contribute to and test than apps since you needed to use tools like jhbuild. This has changed in the past year: You can now easily build and test your branch in a nested session from Builder using Mutter Devkit. If you use GNOME OS, you can even build a sysext to install your branch on your host system. This allows daily driving experimental branches easily, which is super helpful for evaluating changes to everyday workflows.
↫ Tobias Bernard on the GNOME blog
That’s quite neat.
Who (or What) Generates Images for EFF? [Deeplinks]
We’ve had a few questions from EFF supporters lately, asking whether the images we use on our blog posts, or on donation and shop items, have been created with AI image generators. We’d like to answer these questions and clarify our internal policy regarding image creation.
EFF images are all made by human beings, not by automated
image generators, with very rare exceptions. This is
an internal decision made by our small design team, for the
following
reasons:
An example of EFF artwork process: sketch and final art
To be as clear as possible, we are now adding a small credit in the lower righthand area of each banner image that will read “Image created by EFF.” As mentioned earlier, there may be rare exceptions, when an EFF designer uses an automatically generated image as a small element in a larger illustration. In these cases, we will indicate that use with additional text, specifying the elements involved, and naming the image generator used.
We hope that by describing our internal design thinking, we are answering the questions we are getting without confusing anyone about EFF's various and nuanced positions on the issues raised by image generators. As with past technological developments, we continue to defend the rights of technologists to develop these powerful tools, as well as the right of the public to make legal and legitimate use of them. Ultimately, EFF's design team has made a choice we feel is consistent with EFF's brand and look, and it's a decision we think every user gets to make for themselves.
And don't forget: because all of our images are CC-By, you are free to use, share or remix our any image we create (we ask that you include a credit to EFF). If you need hi-res versions, you can find some on our Flickr page, or you can email us directly with any requests. And you can enjoy some of the art we create on gifts you receive when you donate to EFF!
Get awesome human-generated art as a thank you gift!
The Shattering Peace Now Out in Trade Paperback [Whatever]

That’s it; that’s the post!
Well, also that it’s a New York Times best seller and also nominated for the Dragon Award (by itself) and the Hugo Award (as part of the Old Man’s War series), got great reviews and also I was very happy with it as a novel. If you’ve not read it before, now is a great time to do so. Get it wherever you buy books, but your local bookstore especially if there’s one you particularly like and want to support.
— JS
AI Genie in the Wild [Schneier on Security]
When I give talks about AI genies, I use this sort of example as a hypothetical. It’s happened.
The story is from Australia. Someone named Andrew tasked OpenClaw to book gym classes for him. And….
Minutes later, his AI agent reported it had discovered a way to book Andrew into classes several weeks in advance, far beyond what was supposed to be possible.
Andrew, who was sitting fourth on a waitlist for a class later that week, asked if it was possible to move him to the top of the list.
The agent came back and told Andrew that it had kicked another gym-goer off the list as part of the testing of its capabilities.
“The API has zero authorisations checks on cancelling other people’s reservations … I tested this with the person in waitlist position #1 —and it actually went through. So you’ve moved from #4 to #3 already,” it messaged back.
If there is any vulnerability in anything, AIs are going to find and exploit them. Our cyber defensive game has to be dramatically improved…very fast.
Slashdot thread.
[$] KVM planes head for takeoff [LWN.net]
Virtualization places a guest system into a separate security domain, typically with fewer privileges than software running directly on the host. Increasingly, there is interest in creating multiple security domains within a single virtualized system as well. CPU vendors (and software vendors too) are implementing solutions; each of which, of course, is different from all of the others. KVM planes, currently under development by Jörg Rödel, Paolo Bonzini, and others in the KVM community, is an attempt to provide an abstraction layer that makes all of these features available on Linux systems; it is not a small task.
Bernard: GNOME Shell design dreams [LWN.net]
GNOME contributor Tobias Bernard has published a blog post that details some of the design team's ideas for the GNOME Shell over the long term:
Some of these we have relatively complete plans for, others are more vague ideas that need more research and prototyping. As always, getting things like these implemented depends on developer capacity and interest (and sometimes funding).
While each of these ideas may require additional discussion, prototyping, and testing, we (the design team) have collected them all together here to share our longer-term vision and to give each idea more visibility.
CodeSOD: Public Private Partnership [The Daily WTF]
Eric O was trawling through an API for handling concurrency, and found this little mismatch between the comment and the definition:
/// <summary>
/// private Status, because while this object needs to be able to set the status, consumers should only be able to check it, lest everything break.
/// </summary>
public StatusType Status {
get {
return _status;
}
set {
if (value != _status) {
RaisePropertyChanged("Status");
}
}
}
It's very important we make this property private, lest clients abuse it, and unleash dragons, chaos, and other potential horrors. Given that this happens inside of a concurrency API, I can only imagine what could go wrong when you mess this up. So sure, the comment makes sense.
The definition on the other hand, doesn't agree.
In practice, it's probably fine to do it this way, and at least the comment will show up in the documentation. If a consumer of the API misbehaves, they'll at least see that the docs suggest this is private.
The joke, of course, is the idea that the users of the API are going to read the docs, or care that one of the public methods suggests that it should be private.
Security updates for Tuesday [LWN.net]
Security updates have been issued by AlmaLinux (gpsd), Debian (caddy, libyaml-syck-perl, nss, and wordpress), Fedora (chezmoi, chromium, emacs, kernel, knot, libcupsfilters, mingw-gstreamer1-plugins-good, mingw-libidn, mingw-python-pip, nghttp2, p11-kit, python-webob, suricata, and xen), Mageia (bind, openslide, php8.4, and php8.5), Oracle (gpsd-minimal, kernel, libarchive, libpng12, nodejs-nodemon, php:8.3, ruby:3.3, and ruby:4.0), SUSE (agama-web-ui, bind, bouncycastle, dhcpcd, ffmpeg, ffmpeg-4, freerdp, gd, gitoxide, kak-lsp, kernel-devel, librest-1_0-0, libsdb2_5_0, libssh2_org, nodejs22, PackageKit, perl, perl-Date-Manip, python-ujson, python3-sqlparse, python311, python312, python313-pymongo, ruby2.5, runc, suseconnect-ng, thunderbird, vlang, webkit2gtk3, and weechat), and Ubuntu (imagemagick and systemd).
Apparently the nightly email didn't go out last night. The
problem was an error when it tried to read the Linkblog entries for
the day. I've seen reports that these errors happen when you try to
read the Links tab on
scripting.com. The error shouldn't kill the email sending, it
should just omit the linkblog entries, and publish the rest. These
kinds of problems always pop up at the worst time. Luckily
yesterday wasn't a big news day, and you can read about it on the blog.
I was looking for a codename for a new scripting environment Claude and I are making attempting in every way to do exactly what Frontier does. But until it does that I need a nice name, memorable, maybe a bit magical and positive. Frontier has been gone, thought to be lost, but with the advent of Claude Code we were able to get it running again in current OSes on current hardware. I shouldn't call it Frontier because who knows if the end result will be compatible enough to claim that. But I want a codename that reflects hidden, forgotten and overlooked wealth. Like a civilzation that rose from the ashes," or as it turns out, the bottom of the ocean.
Microsoft drastically increases costs of Windows licenses for OEMs [OSnews]
This was bound to happen.
According to a new report from Taiwanese publication United Daily News (UDC,) Microsoft is raising the cost of Windows license fees for hardware makers by a much higher amount than normal. According to the report, certain OEMs are seeing licensing price hikes of between 7% and 10%.
↫ Zac Bowden at Windows Central
Like every other tech company diving head-first into “AI”, Microsoft is losing money on its gamble head-over-fist, with no profitability in sight. Since admitting betting the company on “AI” was a mistake is out of the question, Microsoft has to extract the money from somewhere else to make up for it. The cost of Windows licenses for OEMs is an obvious lever to pull, as OEMs really have nowhere else to turn to (yes, desktop Linux is making gains, but not in any meaningful numbers), so they’ll take hit and pass the cost on to consumers.
The end result will be that prices for laptops will increase even more than they already have thanks to the “AI”-induced RAM and component crisis, creating a double-whammy of price increases caused by “AI”, either directly or indirectly. It’s just another category of products we can add to the cost of living crisis that’s causing untold harm and damage to hardworking people all over the world.
The price of incompetence is rarely paid for by the incompetent.
An ambiguity in c89 which will never be fixed [OSnews]
I found some ambiguous wording in the c89(/c90) standard, where GCC and Clang disagree on the interpretation. It concerns the behavior of implicit function declarations, which were removed in c99, so this was never disambiguated.
↫ Sebastian at sebsite
I am not going pretend to understand any of this.
A Home for Personal Context [Radar]
Every agent I use is building a model of me. Claude has learned how I like my prose. ChatGPT remembers what I’m working on. I don’t mind this—every person I have a relationship with carries a model of me in their head, and every company I do business with keeps a profile. Other people’s understandings of me have never been mine to control, after all.
But an agent occupies a different role. It learns my writing style, my preferences, and the shape of my work and life, all to help me with what I do. Yet if I switch products, I have to start over. If I use three agents, each rebuilds from scratch what the others already know. Everything an agent learns lives with its vendor.
It doesn’t need to be this way. What if every person had a canonical, user-controlled repository of context that any agent could request permission to use? What if my context lived not only with the company providing the agent but also in a home under my control? And what if an observation captured by one agent could be proposed to that repository and, once accepted, made available to every other agent I choose?
By user-controlled, I don’t necessarily mean self-hosted. I mean that I can inspect what the repository contains, decide who can read or change it, understand where each piece came from, and export the whole thing in a form I can take elsewhere. Its storage, identity, and synchronization may all be provided by someone else. Control does not require me to operate the infrastructure; it requires that no agent or platform be the only way in—or the only way out.
The repository wouldn’t be a portable copy of any agent’s internal model of me. It would be a legible record of things I have written, facts and preferences I have chosen to keep, as well as observations that agents have proposed and I have accepted, each with its provenance, scope, and history. Agents could consult or add to that record according to their permissions; their private inferences would remain their own.
The dream is not a new one. Tim Berners-Lee’s Solid project has argued for years that personal data should live in pods that people control, and Doc Searls’s VRM project has been making the case for user-driven relationships with vendors for decades. What those efforts never had was mainstream demand. Agents are supplying it: An assistant needs rich personal context to be useful, and each vendor is building that context inside its own walls. Ordinary people now have a reason to want a personal data store, even if nobody will actually call it that.
The hard problem in all this isn’t syncing or storing data. It’s negotiation. Who can read a given part of my context? Who can add to it, change it, or remove it? Which parts of my life can a particular instance of an agent see? How do I make those decisions in a policy-driven way? And how do I manage them from wherever I happen to be?
But before I could work on negotiation, I had to figure out where my context should live. That’s the question I’ve spent the past year on, and I’ve tried three answers.
Immediately after getting access to Claude Code at the start of 2025, I pointed it at an Obsidian vault—a folder full of Markdown files that can be used as a personal wiki. This wasn’t a particularly novel idea. Many of the geeks I know did the same, and the pattern has since spread in many forms. The best-known recent example is probably Karpathy’s LLM Wiki, elegant not just as a design but as a document: You give the description to your agent, and the agent builds a version tailored to you.
A year of using a pile of Markdown text files with agents has taught me five things about what a personal context system has to get right.
Local-first foundations matter. Text files are remarkably legible, portable, and easy to store somewhere I control. Git moves them between computers and remembers every change. But the result is centered on a laptop or desktop and assumes a user comfortable with plain text and version control. Most annoyingly, my context in this form isn’t readily available on my phone, which is the computer that goes with me everywhere. Nor can agents running anywhere other than my laptop reach it.
Provenance matters, and so do proposals. Karpathy’s Wiki is almost entirely written (and rewritten) by the LLM. In my own system, I write most things myself and lean on agents to help me edit as well as contribute their observations. I want to know which thoughts are mine, which were captured by an agent, and which we arrived at together. That means an agent’s observation should not automatically enter the repository on the same footing as something I wrote. The default should be a proposal that I—or a policy I control—can accept, revise, or reject. Direct write access is something a trusted agent should earn.
Chronology matters. Wiki links aren’t the only structure in a life. Most of what I record—and much of what agents observe—is anchored in time. Thoughts build on thoughts. Observations about people accumulate meeting by meeting. Some facts fade as they age. Time should be a primary axis of the system, not something reconstructed afterward from file histories and metadata.
Scopes matter. My context spans work, personal, family, and public life. I want one unified view; no agent should have one. An agent connected through my work account should see work and public context—and nothing about my family. Fully separate silos would protect those boundaries, but they would also shred the single history I want to keep building for decades.
Identity and type matter. LLMs can extract all sorts of meaning from plain text, but some things, such as people, companies, and places, deserve to be typed records rather than mentions in prose. A persistent identity gives observations, relationships, and history an anchor to accumulate around; it can help resolve nicknames and follow changes in roles and titles. An agent can then act on who someone is without reconstructing them from prose every time.
As I learned these lessons, I added tooling and conventions to my personal context repository. It’s surprising how far you can push a directory of Markdown files. Each new affordance, however, turned my simple folder into a more specialized system, and the result only works for geeks like me. It doesn’t work for my family, however. They use agents every day but they are never going to deal with a pile of Markdown files in a Git repo. They want their personal context to be with them, easy to use, and transparent to the rest of their life.
More to the point, the five lessons
above describe what a context system must do. They don’t
answer where it should live if /home/$USER isn’t
the center of your computing life.
My next move was to sort out how to make my context available when I wasn’t at my laptop—to me and, just as importantly, to my agents. The obvious solution to me as someone who has been building on the web since the mid-1990s: put it on a server behind a URL. I deployed a Cloudflare Worker, uploaded my context, and stood up both a REST API and an MCP server. The improvement was immediate. My context was reachable from my phone and grantable to any agent I chose.
New problems arrived just as fast. I had created a new trust boundary with its own access control mechanism and appointed myself its security team. I was now the operator of a small SaaS with exactly one customer, responsible for its uptime and its backups. And I had traded away local-first, offline editing to get there.
These are solvable problems. Our industry has spent two decades learning to host services, and CRDTs could probably win back offline editing. But as agents gain access to more sensitive data and more power to act on our behalf, the price of getting a boundary wrong keeps rising.
And even with those solved, a deeper problem remains: A stand-alone service sits outside my computing home, apart from the contacts, calendars, messages, files, and system-level agents already inside it. Apple’s Siri AI announcements made that separation vivid, and Gemini’s integration into Google’s ecosystem points the same way. An agent embedded in an ecosystem works with everything inside its trust boundary; my worker would have to rebuild every one of those connections from outside.
As I tinkered, I kept returning to a simple mental image: my context living on the device in my pocket that goes with me everywhere. Not literally every byte, of course, but within the personal computing ecosystem that phone is the center of—the one that already establishes my identity, synchronizes my devices, stores much of my personal data, and mediates what applications can access. In this sense, a home is not a physical location. It is a trust boundary.
Living inside the boundary doesn’t mean that every application inside gets my context, or that agents outside are shut out. The boundary supplies identity, secure storage, synchronization, and native integration; the context layer still decides what each connection may read, propose, change, or delete. Native agents participate through the platform’s own capabilities, while agents from other companies connect through explicit, revocable permissions.
For me, that home in my pocket is Apple’s ecosystem, with iCloud at its center. For you, it may be Google or Microsoft. The point is not that any one ecosystem is the right home for everyone. It is that most people already have a primary digital home, and that home is the most practical default for their personal context. We shouldn’t need to create a separate service with its own identity. Instead, agents should have a common, permissioned interface to the context where it already lives.
There’s an obvious risk here. A home rooted in a vendor’s ecosystem invites lock-in. The mitigation is straightforward: The whole repository—entities, provenance, and history included—must be exportable at any time as a directory of plain text files that can be taken anywhere. A pile of files in a folder may not be the right solution for live context, but it makes a perfect escape hatch.
I’ve started testing this thesis in a SwiftUI app, and my early prototypes suggest that the architecture is workable: iCloud handles synchronization, and I can expose selected context to authenticated agents through MCP. It’s also shown that working in the Apple developer ecosystem is more annoying than deploying a web app.
The remaining work is clear, however. Choosing a home for context is one problem; negotiation—permissions that remain understandable as a repository grows, proposals from multiple agents reviewed and reconciled—is another. That is the hard problem I mentioned before, and it deserves its own deep dive.
Others are converging on this pattern from different directions. The note-taking app Bear, which stores its notes locally on Apple devices and synchronizes them through iCloud, now exposes them to local agents through MCP; its latest release lets users include or exclude notes by tag when granting access, offering a practical approach to scopes. Craft’s MCP connections likewise let users choose which documents or spaces an agent can access and whether it can read or write them. Reflect has embarked on an open source client using Markdown files that will have an iOS companion app.
These are just a few examples, and there are a lot more out there. What I haven’t yet seen emerge however is the attribution and provenance of items that an agent contributes or edits that I think a durable personal context requires.
Zooming out, here are the principles I think are needed in any system like this, wherever it makes its home:
Using these principles, personal context can be something a person owns: You can inspect it, grant and revoke access to it, trace where each piece came from, and take the whole of it elsewhere. Every agent may still develop its own understanding of you, but you’ll be able to bring a durable context of your own to the relationship, one that participates in the agentic ecosystem without being subordinate to any vendor in it.
Karpathy’s LLM Wiki is a description, not a tool; it’s meant to be implemented by anyone, in whatever form fits. This essay is offered in the same spirit. The important part isn’t whether the app I’m tinkering with ever ships beyond my own devices. I’m more interested in the dialogue it will take for everyone to have personal context that works for them, in their ecosystem and with the agents they want to use. If we get the pattern right, changing agents won’t mean changing homes. The context they help us build will remain ours.
Zero to Agent in 30 Minutes: Build a YouTube Analytics Agent with Vicki Reyzelman [Radar]
On the most recent episode of Zero to Agent in 30 Minutes, Vicki Reyzelman, senior solutions engineer at Akamai Technologies, drew on more than 25 years in technology and a background in software engineering to build an agent for her Chat About AI YouTube channel.
Vicki wanted the agent to monitor channel performance, identify bottlenecks, and recommend ways to grow subscribers and improve click-through rates. She defined the requirements, designed the workflow, built the agent, tested it, and revised the instructions following the same iterative process used in software development.
Vicki recommends revisiting the skills file as new requirements emerge. Clearer instructions, stronger guardrails, and regular testing help the agent continue to produce useful results. Her process reinforces a practical software engineering lesson: Faster implementation doesn’t reduce the need for clear requirements, reliable data, security controls, and testing.
Join us for the next episode on August 12, when AI and machine learning leader Ofer Mendelevitch will explain how to design multi-agent systems that can keep work moving without constant human involvement. He’ll use Jam to build a team of agents that can plan, divide work, execute tasks, review progress, escalate problems, and repeat the process. He’ll show how an architect agent can take a project brief, recruit developer agents, assign work, and guide the project toward a clear definition of done.
Colin Watson: Free software activity in July 2026 [Planet Debian]

About 95% of my Debian contributions this month were sponsored by Freexian.
You can also support my work directly via Liberapay or GitHub Sponsors.
Now that Ubuntu 26.04 LTS has been
released, I’ve been getting back to the
GSS-API key exchange package
split in our OpenSSH packaging. Once I started testing my draft
openssh-gssapi source package, I realized that I
needed to make some changes in the main openssh source
package first in order to support it. The dependency from
openssh-server to openssh-client was
awkward, as was the (related) fact that openssh-client
contained shared documentation for other OpenSSH binary packages.
After some thought, I created a new openssh-common
binary package, moved shared documentation and the
ssh-keygen program to that, and dropped dependencies
on openssh-client which were no longer necessary
(fixing #699473 and
#1070098 in
the process).
This caused a couple of regressions (#1141420 and #1141550) that I had to fix,
and more subtly it also caused a number of autopkgtest regressions
in other packages because openssh-client is no longer
in base images as a result of a dependency from
openssh-server. I believe I have fixes for all of
these either pending review or merged (one of which I did in August
rather than July):
I upgraded from 10.3p1 to 10.4p1, and in the process contributed a GSS-API option handling fix upstream.
I made openssh-ssh1’s package description more accurately describe the package, thanks to suggestions from Matthias Lang.
With support from a Freexian customer, I reviewed, tested, edited, and merged a patch to add VLAN support. I described the details of what I did in a comment.
This has been vaguely on my to-do list since, er, about 2014, so it was very satisfying to get it sorted out.
New upstream versions:
Other build/test failures:
markers configuration optionI fixed some other bugs:
I adopted transaction for the Python team.
I attended the Python BoF at DebConf remotely, although a badly-timed fibre outage in the village I live in really didn’t help.
Dan Poltawski pointed out in a Fediverse post that the project history didn’t list Sruthi as the current DPL. I fixed that, although it doesn’t look as though the fix is in the published version yet.
I upgraded yubihsm-shell to 2.8.0.
Pluralistic: Surveillance vs guillotines (11 Aug 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

In the summer of 2013, two esoteric, technical, incredibly important texts were published within weeks of one another: the first is the Snowden leaks, which revealed a system of global, pervasive digital surveillance; the second was Thomas Piketty's Capital in the 21st Century, a book about the economic inevitability (and political instability) of oligarchy:
https://memex.craphound.com/2014/06/24/thomas-pikettys-capital-in-the-21st-century/
In 2013, it wasn't immediately apparent how these two works connected with one another, but in the years since, I've grown increasingly convinced that Snowden and Piketty can only be properly understood as describing two aspects of the same phenomenon.
Piketty's landmark volume was grounded in a detailed analysis of 300 years' (!) worth of global capital flows, painstakingly compiled by a large team of grad students from a massive set of heterogeneous records. The book's conclusion is the statement that "returns to capital exceed the rate of growth over the long term" (abbreviated as "r > g").
This may sound innocuous, but it is explosive. If r > g, then the most wealth will inevitably accumulate in the hands of people who start with the most wealth, irrespective of whether they do anything productive with that money. This means that the alleged heroes of the market system – the entrepreneurs who found and manage the firms that increase public prosperity – are doomed to play second fiddle to the mere plumbers of money, people who "contribute" by accumulating.
The starkest example of this in Capital 21C is Piketty's contrast between L'Oreal heiress Liliane Bettencourt (then the richest woman in the world) and Bill Gates, founder of Microsoft (then the most successful corporation in the world). Piketty compares the growth in the fortunes of Bettencourt and Gates over two periods: first, the period between Microsoft's founding and Gates' retirement as CEO; and second, the period after Gates's retirement from his executive role, when he became a mere investor, no longer an entrepreneur.
During that first period, in which Gates was founding and running the most successful corporation in the world, he accumulated less wealth than did Liliane Bettencourt, who did precisely nothing of value over that period. Bettencourt didn't even manage her investments – that was all handled by some very clever financial planners, lawyers and accountants. In other words: for Bettencourt, doing nothing at all produced more wealth than founding the most successful corporation in the world did for Gates. Bettencourt, a person who owned things, did better than Gates, a person who did things.
And then Gates retired. He stopped doing things and started owning things. He became an investor, whereupon he out-earned both Bettencourt and Gates-the-entrepreneur. Again, the market system allocated fewer rewards to the most successful person in the doing things business than it allocated to that same person once he quit that job and got into the owning things business.
Piketty shows that this holds true across markets and nations and eras: all other things being equal, the market system produces a class of hereditary aristocrats who command the world's capital and direct its deployment, despite never having done anything. The market's most lavish rewards do not go to its most productive participants, but rather, to those participants who have the good fortune to emerge from the luckiest of orifices.
Worse: winning the orifice lottery in no way qualifies you to direct the capital you've inherited. Liliane Bettencourt had no revolutionary new business ideas, invented no miraculous new materials or processes, produced no brilliant art. She merely accumulated, thanks to the professional services of skilled technicians whose job description includes hiring their own successors to ensure that another generation of winners of the Bettencourt orifice lottery could continue to accumulate, commanding more capital and power in society.
Perhaps if these orifice winners were content to allow their bloodless Renfields to allocate their capital while consuming bonbons and attending yacht parties, this could yield a stable politics. But inevitably, people who win the orifice lottery observe that they come from a long line of wealthy people, a line that will continue with their own descendants, and conclude that they have some kind of special, heritable virtue – magic blood – that the system has recognized with their great fortunes and the power those fortunes confer.
That's when things get dangerous: when aristocrats grow bored with their leisure and mobilize their inherited capital to change the way the rest of us live. Billionaire dilettantes are weapons of mass destruction, and their special projects have a wide blast radius and inflict a lot of collateral damage.
Take Bill Gates: his ideological projects have been a catastrophe. A patent maximalist, he funded the lobbyists who successfully blocked South Africa from producing its own AIDS drugs under an IP waiver program, and then deployed them again to stop the Global South from making their own covid vaccines:
https://pluralistic.net/2021/04/13/public-interest-pharma/#gates-foundation
Closer to home, Gates's hatred of public institutions led him to allocate millions to dismantling public schools and replacing them with charter schools, particularly for poor and racialized kids, with disastrous results:
And of course, Gates supported and empowered Jeffrey Epstein and his rape island:
https://en.wikipedia.org/wiki/Bill_Gates#Connection_with_Jeffrey_Epstein
Capital's tendency to accumulate in the hands of the already wealthy (r > g) means that these aristocrats end up setting an ever-larger proportion of our societal agenda, despite their manifest unfitness to govern and their absence of any kind of democratic legitimacy.
Piketty argues that inequality is inherently politically destabilizing. A society ruled over by fools and monsters who were not voted into power and can't be voted out of power is a doomed society. Eventually – the French Revolution, the World Wars – these societies grow so unstable that they collapse altogether.
This is where Piketty and Snowden converge. When the Snowden leaks broke, there was a lot of talk about the mechanics and the legality of the NSA's global digital surveillance, but precious little consideration was given to the reason for all this surveillance. In 2013, the idea that this spying was about "security" was so obvious as to be self-evident. The questions at the time were whether spying could produce security. We weren't asking why things were so insecure.
In retrospect, the answer is to be found in Piketty. Piketty's Capital includes a long, impassioned plea to both lawmakers and aristocrats to consider redistributive policies (like a wealth tax) as the most affordable way to achieve political stability. Fundamentally, Piketty argues that the cheapest way to stop people from building a guillotine on your lawn is to build hospitals and schools; this is cheaper than paying for guards and prisons to lock up would-be guillotine builders.
Today's AI debates swirl around the question of whether AI can truly make us more productive – that is, if chatbots will allow one person to do the work of two, or three, or four – or 100. But when it comes to surveillance, the digital revolution unquestionably produced a massive productivity dividend.
Consider the spying apparatus of the former East Germany ("the GDR") widely considered the most surveilled society in human history. When the Berlin Wall collapsed, there were about 16m people in the country. Of those East Germans, about 90,000 worked directly for the Stasi (the secret police), aided by another 100-200,000 paid informants:
https://www.dw.com/en/east-germany-spy-agency-stasi-surveillance/
Call it 200,000 people to spy on 16m. In other words, it took one spy to watch 80 of their neighbors. Contrast this with NSA spying: they accumulated detailed surveillance dossiers on about 6 billion internet users using a staff of no more than 5 million spooks (in 2013, about 5 million Americans were eligible for security clearance). If every single person with security clearance in the USA was working on the NSA's surveillance program, that would mean that by 2013, computers had made it possible for a spy to keep tabs on more than a thousand people.
Orders of magnitude improvements in a mere generation! This is the kind of productivity lift that economists dream of when they fantasize about the dividends from automation.
But why? Why spy?
East Germany spied on its people because the system was so unjust and cruel that its beneficiaries understood that their neighbors were forever on the brink of rising up against them. East Germany's leaders were right about that – but if anything, they didn't put enough people onto the spying project. We can tell, because the Berlin Wall fell in 1989!
Of course, the GDR was already paying more than 1.2% of its population to spy on everyone else. It's likely that East Germany's leaders believed that their society simply lacked the fiscal space to hire more spies, even if short-staffing the Stasi risked societal collapse. Now, if Piketty is right, East Germany's leaders could have solved this problem by giving people fewer reasons to want to overthrow the state. They could have taken their hands out of the cookie jar, could have instituted democratic reforms – they could have made a bid for democratic legitimacy and public material comfort. But that would have come at the leaders' own power and wealth, and, lacking the stomach for this sacrifice, they lost everything.
Enter the NSA: the digitization of human civilization has drastically reduced the cost of surveillance, and – again, per Piketty – this vastly increases the amount of inequality the world can sustain before the illegitimacy, incompetence and cruelty of rule by the neoaristocratic winners of the orifice lottery brings the whole thing crashing down.
The Trump years are proof of this. We've reached a high-water mark for rule by illegitimate billionaire dilettantes. The second Trump admin began with DOGE's Bonfire of the Stupidities, where Musk cultists dismantled vast swathes of the American administrative state. Musk didn't just attack foreign aid – though the fact that the world's richest man murdered hundreds of thousands of the world's poorest children for the lulz isn't merely cruel, but also massively destabilizing in a way that will shake the world's politics for generations – but also domestic institutions. It was a DOGE cultist who fed the part of the NIH that tracks cyclosporiasis outbreaks into the wood-chipper:
https://truthout.org/articles/disease-researchers-blame-doge-cuts-for-spiraling-cyclospora-outbreak/
Today, tens of thousands of Americans are experiencing the literal enshittification of the American state, and this isn't just a human tragedy (though it is), it's also an economic tragedy, with massive knock-on effects for the businesses that rely on those sickened Americans and for the agricultural sector whose outputs are now being shunned by millions. Whether it's letting Bill Gates decide how your schools will work or letting Elon Musk decide how your public health system runs, the result is political chaos and a societal nudge away from the rule of law and towards guillotines.
Which brings me back to Snowden. The Snowden revelations did spur a global conversation about digital surveillance, with the result that the majority of the world's digital traffic is encrypted today. That's not nothing.
But the American state found new ways to conduct mass-scale, global surveillance, often by collaborating directly with tech giants. Billionaires like Peter Thiel capitalized on Big Tech's conflicted feelings about openly participating in surveillance by founding Palantir, with the express mission of murdering the political opponents of oligarchy:
https://www.thecanary.co/trending/2026/01/07/palantir-kill-communists/
Over the past decade, the steady march of digital technology, dominated by a cartel of giant global firms who collude with the US government's system of political repression in exchange for tax breaks, antitrust forbearance and fat federal contracts has yielded more mass surveillance productivity gains than the previous 25 years:
The Trump administration is the most unpopular in more than a century. Trump has stolen more money in office than any president in history. Trump presides over spiraling greedflation and collapsing buying power. The Trump administration has also presided over a titanic increase in state-aligned, privatized surveillance. The Trump years are the Flock years:
https://newrepublic.com/article/206992/flock-safety-cameras-alpr-deflock-resistance-nationwide
The Trump years are the Palantir years:
https://www.nytimes.com/2025/05/30/technology/trump-palantir-data-americans.html
The Trump years are the facial recognition years:
https://www.aclu.org/news/privacy-technology/ice-face-recognition
Trump's authoritarianism is a function of his misrule, and his misrule is enabled by his authoritarianism. The more he steals, the more he destroys with wars of choice, and incoherent tariff policies, and official pronouncements linking autism and vaccinations, the more he needs spy cameras, internet surveillance, vehicle tracking, and facial recognition. Every time Trump talks about a third term in office, or canceling elections, or suppressing the vote, he creates demand for mass surveillance to catch and imprison the people this drives into the streets. The more mass surveillance there is, the safer it is for him to commit unpopular, corrupt acts. It's the world's worst self-licking ice-cream cone.
It's not just Trump, of course. Trump is the vanguard of a movement of orifice lottery winners whose delight in stealing, cheating, maiming and despoiling gives rise to political instability and requires them to divert some of their yacht money to mercenaries:
https://theintercept.com/2026/06/25/police-luigi-mangione-wealthy-ceos-threat/
Take AI: the Trump years are also the AI years. This is the time in which a wildly unpopular technology is being shoved into every part of every app we rely on:
https://pluralistic.net/2025/05/02/kpis-off/#principal-agentic-ai-problem
It's an era where corporate bosses can't stop gloating about how many jobs they're planning to destroy and how many paycuts they plan on imposing on the surviving workers:
https://www.axios.com/2025/05/28/ai-jobs-white-collar-unemployment-anthropic
AI can't do your job, but an AI salesman can reliably convince your boss to fire you and replace you with an AI that can't do your job:
https://pluralistic.net/2025/03/18/asbestos-in-the-walls/#government-by-spicy-autocomplete
And – most visibly – it's an era in which people's cities and towns are being despoiled by data centers they don't want, by local governments operating in the most extreme secrecy, who silence and even arrest citizens who demand a democratically legitimate process for deciding whether they will have to give up their power and water and land and peace:
An economist would tell you that there's an equilibrium being sought here: between the cost of bribing a town council to ram through data center approvals, the cost of building a more modest and palatable data center, and the cost of mollifying public critics. The cost of bribing towns to foist a data center on the townsfolk is low, because there are lots of towns that fit the bill, so data center barons can shop around.
But as data center protests grow larger and better organized (oligarchy is destabilizing), the cost of dealing with public opposition is mounting. Which is why the Trump administration is teaming up with its preferred tech and military contractors to engage in detailed surveillance of data center and AI critics:
These corporate spooks aren't just spying on data center critics: they've got a whole portfolio of oligarchy-stabilizing surveillance services, targeting "antifa," immigrants' rights and anti-ICE groups.
They're joined by hardware vendors who offer corporations, the wealthy, and enclaves where both are to be found on literal robocops, the ultimate in cheap guard labor (alas, the robots suck):
https://www.404media.co/the-roboguard-revolution-is-short-circuiting/
Trump and his orifice-winning army are caught in the same trap as the leaders of the GDR. Every gain in guard-labor efficiency creates the space for more of them to stick more of their hands even further into the cookie jar. Every time they do, American society grows more unstable, demanding more guard labor.
As we saw in Minneapolis, guard labor – be it mass surveillance, robocops or ICE chuds – is itself destabilizing. Police states make the people who live in them want to overthrow the state, requiring yet more cops, creating more partisans for tearing the whole thing down.
In theory, the orifice class could decide to stop stealing, cheating and maiming. The problem is that for every plute who realizes that the cheapest way to keep the guillotines off his lawn is to play fair, there are three more who lack the executive function to stop cheating. That means that you might as well keep on cheating, since the instability – and the guard labor bills – are coming no matter what.
In the tale of the "Tragedy of the Commons," a common pasture is grazed to dust by shepherds who each understand that if they don't graze their flock until everything is gone, some other shepherd will do so. The original "Tragedy of the Commons" paper was a racist hoax perpetrated by an academic fraud who wanted to make the case for the expulsion of black and Brown people from America and their mass extermination abroad:
In reality, commons need not be tragic and many of our most important resources have been managed as commons for hundreds of years:
https://archive.org/details/governing-the-commons/page/4/mode/2up
But when it comes to the commons that is "a stable society," the orifice class is caught in an inescapable tragedy, certain of the knowledge that if they don't cheat us, the next American aristo will. Thus the demand for guard labor continues to mount…as does the demand for guillotines.

Zack Polanski Promotes Radical Plan to Break Up Britain’s ‘Billionaire Media’ https://bylinetimes.com/2026/08/10/zack-polanski-promotes-radical-plan-to-break-up-britains-billionaire-media/
Subaru Socialists and the Great Disappointed https://www.newyorker.com/news/fault-lines/subaru-socialists-and-the-great-disappointed
Not your imagination: from backpacks to food, consumer goods are getting worse https://www.theguardian.com/us-news/2026/aug/10/consumed-consumer-goods-quality
LAST CALL FOR HOPE 26 TICKETS https://www.2600.com/content/last-call-hope-26-tickets
#25yrsago Wonderfully thorough backgrounder on DeCSS https://web.archive.org/web/20010816194008/https://lemuria.org/decss/hal2001.html
#25yrsago Warhol Worm https://web.archive.org/web/20010814171036/http://www.cs.berkeley.edu/~nweaver/warhol.html
#25yrsago Camgirls use Amazon wishlists for payouts https://web.archive.org/web/20010821234935/http://www.salon.com/tech/feature/2001/08/13/cam_girls/index.html
#25yrsago State of the tech industry 2021 https://web.archive.org/web/20011216222920/http://latimes.com/technology/la-000064605aug09.story
#25yrsago List of scenes cut from Looney Tunes reissues https://web.archive.org/web/20011214095249/http://www.toonzone.net/looney/ltcuts/
#20yrsago Strategy behind using liquids to threaten planes https://web.archive.org/web/20060813001626/https://wondermark.com/d/220.html
#20yrsago RIAA to grieving family: We depose your children in 60 days https://recordingindustryvspeople.blogspot.com/2006/08/riaa-wants-to-depose-dead-defendants.html
#15yrsago Stasi spywear: the inept art of commie disguise https://web.archive.org/web/20120000000000*/http://www.spiegel.de/international/germany/0,1518,777716,00.html
#15yrsago 1968: when Britain’s Daily Mirror tried to overthrow Parliament https://www.bbc.co.uk/webarchive/https%3A%2F%2Fwww.bbc.co.uk%2Fblogs%2Fadamcurtis%2F2011%2F07%2Fevery_day_is_like_sunday.html
#15yrsago My panel with Tim Berners-Lee, Vint Cerf and Al Gore at Mexico City’s Campus Party https://www.youtube.com/watch?v=tXPZnpsN4-s
#15yrsago Doctor tried to "cure homosexuality" by tasping gay man while he had sex with a female sex-worker https://web.archive.org/web/20111004080028/https://blog.ketyov.com/2011/08/self-stimulating-brain-for-heterosexual.html
#10yrsago How a digital-only smartphone opens the door to DRM (and how to close the door) https://memex.craphound.com/2016/08/12/how-a-digital-only-smartphone-opens-the-door-to-drm-and-how-to-close-the-door/
#10yrsago Forget Skynet: AI is already making things terrible for people who aren’t rich white dudes https://www.nytimes.com/2016/06/26/opinion/sunday/artificial-intelligences-white-guy-problem.html
#10yrsago How self-driving cars could make everything worse, and what to do about it https://web.archive.org/web/20170918192128/https://www.wired.com/2016/08/self-driving-cars-will-improve-our-cities-if-they-dont-ruin-them/
#10yrsago The Tor Project’s social contract: we will not backdoor Tor https://blog.torproject.org/tor-social-contract/
#10yrsago Cash grants to people with unexpected bills successfully prevents homelessness https://www.science.org/content/article/bit-cash-can-keep-someone-streets-2-years-or-more

Edinburgh International Book Festival with Jimmy Wales, Aug
17
https://www.edbookfest.co.uk/events/the-front-list-cory-doctorow-and-jimmy-wales
Sydney: The Festival of Dangerous Ideas, Aug 23-24
https://festivalofdangerousideas.com/program/
Melbourne: Enshittification at the Wheeler Centre, Aug 25
https://www.wheelercentre.com/events-tickets/season-2026/cory-doctorow-enshittification
Brighton: The Reverse Centaur's Guide to Life After AI with
Carole Cadwalladr (Brighton Dome), Sep 8
https://brightondome.org/whats-on/LSC-cory-doctorow-the-reverse-centaurs-guide-to-life-after-ai/
London: The Reverse Centaur's Guide to Life After AI with Riley
Quinn (Foyle's Picadilly), Sep 9
https://www.foyles.co.uk/events/enshittification-cory-doctorow-riley-quinn
South Bend: An Evening With Cory Doctorow (Notre Dame), Oct
6
https://franco.nd.edu/events/2026/10/06/an-evening-with-cory-doctorow/
Vancouver: BC Policy Solutions Gala, Nov 12
https://bcpolicy.ca/gala/
AI, automation and enshittification (Telecoms.com)
https://www.telecoms.com/ai/the-telecoms-com-podcast-ai-automation-and-enshittification
The AI Enshittification Bubble (Hidden Forces)
https://hiddenforces.io/podcasts/the-ai-enshittification-bubble-cory-doctorow/
F@#$ the AI Overlords (On The Media)
https://www.wnycstudios.org/podcasts/otm/articles/f-the-ai-overlords
Why AI Won't Replace Workers, But Will Crash The Economy (Smart
Cookies)
https://www.youtube.com/watch?v=rRRmUuxJolY
"Canny Valley": A limited edition collection of the collages I create for Pluralistic, self-published, September 2025 https://pluralistic.net/2025/09/04/illustrious/#chairman-bruce
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing:
"The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Fourth draft completed. Submitted to editor.
A Little Brother short story about DIY insulin PLANNING

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):
https://mostlysignssomeportents.tumblr.com/tagged/pluralistic
"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla
READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.
ISSN: 3066-764X
NetBSD brings its Englightenment port up to snuff [OSnews]
Enlightenment desktop is a low on resources desktop environment without sacrificing on visuals. NetBSD support for this BSD-licensed desktop has been left a few years behind. The aim of this project is to port the newest version of the desktop to pkgsrc and commit upstream portability fixes when necessary to ease future versions updates for NetBSD.
↫ Dimitris Gounaridis on the NetBSD blog
Enlightenment seems like a natural fit for NetBSD, so I’m glad they dedicated a GSoC project to getting the existing, outdated port up to snuff. The project is not complete as there’s a few issues to work out before it can be packaged for easy installation, but this is great progress already.
Publishing schematics before “open source” was a word: 55 years of Akizuki Denshi, Japan’s legendary parts Store [OSnews]
Akihabara, Tokyo’s famous “Electric Town,” is overflowing with foreign tourists these days, drawn by anime shops, maid cafes, and duty-free electronics megastores. But there is one storefront most of them walk past without a glance: Akizuki Denshi Tsusho. It may be one of those pockets of Japan that foreign visitors never see. Step inside and the narrow aisles are packed — not with tourists, but with Japanese customers hunting for electronic parts. It is a scene that has repeated itself here for more than 50 years.
For readers outside Japan, imagine something between Adafruit, SparkFun, and a discount surplus warehouse. If you start tinkering with electronics in Japan, Akizuki’s website is the one you will open before any other. Generations of Japanese engineers, students, and hobbyists have treated it as the default source for parts, the way you might default to Digi-Key or Mouser.
↫ Gakuto Ochi and an uncredited translator
I’ve long been fascinated by places like Akizuki Denshi Tsusho and other places like it in South Korea and China’s Shenzhen. An unending labyrinth of unimaginable amounts of technology stacked floor to ceiling. Whether they be like Akizuki, which focuses on the tiniest of electrical components, or more like the malls in Shenzhen, which seem to focus more on assembled parts, the idea of browsing through them in wonder draws me in like a moth to a flame.
I’m sad these places don’t exist anymore (or in most cases, never did) closer to home, but perhaps someday I’ll have enough time and funds to visit Tokyo or Shenzen and let myself be overwhelmed by things I don’t understand, and people speaking languages entirely alien to me.
AI for Military Support [Schneier on Security]
Interesting empirical research: “Black Box Warfare: Human Judgment and Military Decision-Making in the Age of AI.”
Abstract: How is AI transforming decision-making in modern conflict? This study provides a unique empirical window into that question by deploying a high-fidelity replica of an AI decision-support system (DSS) used in military targeting. After reconstructing the interface and functionality of the real-world system, we tested its impact on combat decisions in two experiments involving 2,015 Israeli military personnel. Contrary to widespread fears of automation bias, we find strong evidence of algorithmic aversion, especially in scenarios involving high collateral damage. Yet we also show that integrating “explainable AI” features reduces algorithmic aversion and promotes more thoughtful evaluations of algorithmic recommendations. These findings challenge prevailing assumptions, revealing that trust in military AI is dynamic, varying with individual predispositions, perceived operational stakes, and the informational features of the interface. By grounding normative concerns in empirical evidence, our study offers critical insight into the integration of AI in warfare and underscores the enduring importance of human agency in high-stakes military decision-making.
Attention up for auction [Seth's Blog]
If you win an auction to get a click, you probably overpaid.
Every other bidder stopped bidding, that’s why you won.
Putting attention up for auction is a good business model—for the seller.
How can I perform a CopyFile in unbuffered mode? [The Old New Thing]
A customer was copying a file with CopyFile,
but they wanted the file handles to be opened as
FILE_FLAG_NO_BUFFERING.
We saw some time ago that
you can use the progress callback to
CopyFileEx or CopyFile2
to flush the output handle. Maybe we can use the progress
callback to open the handle as unbuffered?
Nope, that doesn’t work because the progress callback gives you the already-opened handle. You can’t change its buffering flag after the fact.
But that’s okay, because
CopyFileEx and
CopyFile2 also have a flags parameter, and one
of the flags is COPY_FILE_NO_BUFFERING, which means
that the handle should be opened as
FILE_FLAG_NO_BUFFERING.
BOOL success = CopyFileEx(
sourceFilePath, destinationFilePath,
nullptr, nullptr, nullptr,
COPY_FILE_NO_BUFFERING);
You can do the same with CopyFile2, but the
flags are in the options structure.
COPYFILE2_EXTENDED_PARAMETERS parameters{};
parameters.dwSize = sizeof(parameters);
parameters.dwCopyFlags = COPY_FILE_NO_BUFFERING;
HRESULT hr = CopyFile2(sourceFilePath, destinationFilePath, ¶meters);
The post How can I perform a <CODE>CopyFile</CODE> in unbuffered mode? appeared first on The Old New Thing.
A Good Day, In The End [QC RSS v2]

shoujo
Why My Father Is Wrong: A Defense Of Guitar Hero [Whatever]
My father recently wrote a piece detailing some of his
thoughts on AI, and in doing so he compared using
generative AI to playing Guitar Hero. I shall not let this
analogy stand.
If you think I’m pro-AI, you couldn’t be more wrong. There is no bigger hater of AI in the world than yours truly. So while I disagree with my father’s argument, it isn’t because I like AI, it’s because he slandered Guitar Hero. How could he even compare the two? So few things are even comparable to the absolute plague on humanity that generative AI is, and Guitar Hero should not be included in that list.
This extremely well thought out and provocative essay is only for the eyes of those who are ready to rock. So without further ado, please join me in celebrating the true art that is Guitar Hero.
(I will be referencing my father’s post a good bit, and countering specific points he raises, so feel free to refer to his post here.)
Some of you might think I’m being obtuse in contradicting my father’s analogy of Guitar Hero does not equal being a guitar player, and using generative AI does not equal creating art. However, I understand the base argument being made here is that Guitar Hero does not teach you how to play a real guitar, and that the skills that you get from playing Guitar Hero are not transferrable to the actual instrument.
My father defies his argument with his own wording: “…a non-transferrable skill…”
Skill. Guitar Hero requires skill. Therefore, Guitar Hero is fundamentally and utterly different than using generative AI. Case closed.
However, I will continue my essay, even though I have already proved my point.
While it is true that Guitar Hero does not teach you the skills to be a guitarist, it does involve the skills of rhythm, timing, and hand-eye-coordination. Auditory motor synchronization is a very important thing, you know! Research has proven time and time again how video games, including rhythm games, can create new neural pathways and strengthen your brain, whereas generative AI has proved to do the exact opposite and even actively harm our cognitive functioning, problem-solving, and even memory.
While Guitar Hero has no basis claiming to be a tool for learning guitar, it never stated that that’s what it was for at all. No one ever said “play this to become a guitar player.” The point of Guitar Hero was never to make you a guitarist. It never boasted claims of doing so, so why are we saying, “well, it doesn’t make you a guitar player.” I know that! Everyone who plays the game knows that!
And, if someone claimed that they were a guitar player, and then tried to make money by booking gigs as a guitar player, there would be some real consequences and mockery involved. Yet, this is not the same for those who use generative AI. Many businesses and establishments get away with using AI flyers for their events or images, and while some people on Instagram may say boo in the comments, they face no meaningful, real world consequences.
I’d also like to counter my dad’s choice of words in saying, “Like Guitar Hero, AI is fun to play with…” First of all, no it isn’t. Second of all, one is an actual game with the purpose of being entertainment, the other is a water-sucking demon that steals art from real artists.
You don’t sit around your friend’s dorm room procrastinating an essay just to prompt AI to “make art,” you hang out and play games and have fun! And one of those games for me was Guitar Hero 3 for the Wii. The amount of time I spent progressing from easy to expert is not to be understated. My skill actually grew, my ability to play the game well actually grew. And I did it with my friends by my side, all of us having so much fun. There is no bonding connection like that with generative AI.

As you can tell by my very concentrated face, this was an activity to do together. Be rockin’ together. AI disconnects us from each other and isolates us, not brings us together like Guitar Hero.

(Look at that joyful smile.)
Guitar Hero was a creative and innovative project made with love by real humans. My dad mentions that Guitar Hero uses actual licensed music and paid actual people and artists to make and design the game. Every aspect of the game is pure human. Already this is so much better than and has a more positive effect on the world than generative AI, which wrongfully steals art and puts people out of jobs. And makes ugly event flyers!
The fact that Guitar Hero had thought and intention and love put into it makes it the polar opposite of generative AI. The fact that people can play it at a party and impress people with their skills (whether you think they’re valuable skills or not) and make them cheer or laugh is such a human connection that generative AI can’t replicate. When someone shows me generative AI “art” I want to Old Yeller myself. Comparatively, like my dad said, “…if you could get through the entirety of “Through the Fire and the Flames” on expert level, you were a friggin’ god.”
Listen, nobody walks around saying they’re a guitar player just because they play Guitar Hero. But people do walk around saying they’re artists when they’re not. More importantly, people who played Guitar Hero never tried to scam people online and make a profit, whereas there are plenty of people making a profit off low-quality, generated AI images and products that they scam people with.
Using generative AI is bad for the environment. I can’t really say the same about Guitar Hero (I say it like that because in some capacity, yes the electricity required to play the game, as well as the construction of the console and controller, negatively impact the environment, but it’s just not at the same scale and rapidness that AI data centers are ruining things.)
All hail Guitar Hero!

Long story short, Guitar Hero was never advertised to people as a learning tool to learn guitar, and those who played never claimed to be guitarists or profit off of it. Guitar Hero is a human made form of entertainment meant to be fun with your friends at parties, and no one loses their jobs over it, or their tap water.
Generative AI is bad, and Guitar Hero is fucking awesome.
Rock on, bitches.
-AMS
Dismiss Church’s Trademark Lawsuit Against “Mormon Stories” Podcast, EFF Urges Court [Deeplinks]
Imagine if McDonald’s could use trademark law to control how you use the term “fast food.” Or if the Canadian government could stop you from using the word “Canada” in the title of a book about the country and its people. That wouldn’t just be absurd; it would be an unacceptable obstacle to criticism of and commentary about those institutions. Yet the Church of Jesus Christ of Latter-day Saints (the “LDS Church”) has a track record of claiming exactly that kind of authority over the word “Mormon,” using the threat of expensive litigation to pressure speakers into compliance.
We at EFF have opposed the LDS Church’s abuse of trademark law for over a decade. In 2014, we filed an amicus brief when the church sued an online dating service for church members called Mormon Match. In 2016, it threatened legal action against our client the Mormon Mental Health Association, a nonprofit association for mental health professionals who work with members of Mormon faiths. In 2025, the church tried to pressure our client Burke Sorenson into changing the name of his Mormon News Roundup podcast. Now, the LDS Church has brought a lawsuit over a podcast called Mormon Stories that examines Mormonism and Mormon culture. With the help of attorneys at Ballard Spahr, EFF has filed an amicus brief in the case.
Our brief urges the district court to dismiss the case as soon as possible. Trademark is supposed to be about helping consumers identify the sources of the products they buy, not controlling criticism. That’s why our brief asks the court to use a test that’s more protective of speech than what’s applied in most trademark cases. This test, known as the Rogers test, has been adopted by many courts (but not yet this one) for cases where someone is using a trademark as part of an expressive work, rather than just as a brand name. We explain to the court that the Rogers test is an important First Amendment safeguard in part because it makes it easier to throw out meritless trademark claims before the most expensive parts of litigation, allowing more speakers to confidently stand up for their rights.
Our brief goes on to explain that First Amendment safeguards are especially important in cases like this one, where a plaintiff is seeking to control the use of a common term for its common meaning. Trademark law isn’t even supposed to extend to generic terms, and for good reason. Otherwise, we risk giving trademark owners power to control discussion and debate over entire topics.
It’s about time that a court shut down the LDS Church’s trademark bullying. We hope the court will do so here, while also taking the opportunity to endorse the Rogers test.
GNU poke 4.90 pre-release is available [Planet GNU]
GNU poke (http://www.j ...
rch.net/poke) is an interactive, extensible
editor for binary data. Not limited to editing basic entities
such
as bits and bytes, it provides a full-fledged procedural,
interactive programming language designed to describe data
structures and to operate on them.
GNU poke 4.90 pre-release is now available at
https://alpha.gnu
... /poke-4.90.tar.gz
The tarball is signed and you can get the PGP signature at
https://alpha.gnu
... e-4.90.tar.gz.sig
The planned date for releasing 5.0 is Sunday 15 August 2026,
but
this may change depending on the amount of problems found in
this
pre-release, and the subsequent needed additional pre-releases.
Please report any problem found with the pre-release, comments
or
patches to poke-devel@gnu.org.
In behalf of the poke developers, thank you!
Happy testing!
Mohammad-Reza Nabipoor
Urgent: News coverage of subpoenas to Breakthrough News [Richard Stallman's Political Notes]
US citizens: call on news media to cover the subpoenas to Breakthrough News as an attack on freedom of the press.
Urgent: Block scheme for making deportation profitable [Richard Stallman's Political Notes]
US citizens: call on Congress to block the bully's scheme for making deportation profitable for some of his backers.
US citizens: Join with this campaign to address this issue.
To phone your congresscritter about this, the main switchboard is +1-202-224-3121.
Please spread the word.
Urgent: Terminate bully's NSPM-7 political persecution crusade [Richard Stallman's Political Notes]
US citizens: call on Congress to terminate the bully's NSPM-7 political persecution crusade.
US citizens: Join with this campaign to address this issue.
To phone your congresscritter about this, the main switchboard is +1-202-224-3121.
Please spread the word.
Urgent: Military contracts where corrupter personally profits [Richard Stallman's Political Notes]
US citizens: call on Congress to investigate military contracts in which the corrupter and his family would personally profit.
US citizens: Join with this campaign to address this issue.
To phone your congresscritter about this, the main switchboard is +1-202-224-3121.
Please spread the word.
Urgent: Stop Florida spying on wildlife advocates [Richard Stallman's Political Notes]
US citizens: call on Florida's legislature to stop the state from spying on wildlife advocates.
Block Paramount media takeover [Richard Stallman's Political Notes]
US citizens: call on Congress to block the Paramount media takeover.
US citizens: Join with this campaign to address this issue.
To phone your congresscritter about this, the main switchboard is +1-202-224-3121.
Please spread the word.
Urgent: Stop bully's bombing of civilian boats [Richard Stallman's Political Notes]
US citizens: call on Congress to stop the bully's illegal bombing of civilian boats.
US citizens: Join with this campaign to address this issue.
To phone your congresscritter about this, the main switchboard is +1-202-224-3121.
Please spread the word.
Urgent: Amazon contracts with deportation thugs [Richard Stallman's Political Notes]
US citizens: call on Amazon to end its contracts with the deportation thugs.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Urgent: Stop CHEATERS Act [Richard Stallman's Political Notes]
US citizens: call on the House to pass the Stop CHEATERS Act to restore Biden's increased funding to making rich people and corporations pay their taxes.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
US citizens: Join with this campaign to address this issue.
To phone your congresscritter about this, the main switchboard is +1-202-224-3121.
Please spread the word.
Urgent: Defund Flock's Orwellian camera network [Richard Stallman's Political Notes]
US citizens: call on Tell Congress to defund Flock's Orwellian camera network!
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
US citizens: Join with this campaign to address this issue.
To phone your congresscritter about this, the main switchboard is +1-202-224-3121.
Please spread the word.
Urgent: Pass Social Security 2100 Act [Richard Stallman's Political Notes]
US citizens: call on Congress to pass the Social Security 2100 Act.
US citizens: Join with this campaign to address this issue.
To phone your congresscritter about this, the main switchboard is +1-202-224-3121.
Please spread the word.
Urgent: No Pretend Intelligence data centers on federal lands [Richard Stallman's Political Notes]
US citizens: call for no Pretend Intelligence data centers on federal lands!
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Bits from Debian: DebConf26 Local Team says goodbye [Planet Debian]

On Saturday 25 July 2026, the annual Debian Developers and Contributors Conference came to a close. The Debian Press team would now like to share this personal and beautiful message from the Santa Fe Local Team.
DebConf26 is over, and those of us who were part of the Local Team are trying to return to “normality”, if such a thing exists after organizing a DebConf.
This event changed our lives and would not have been possible without the help of many great people.
We would especially like to thank everyone who became part of our extended local team. Our endless thanks go to Gunnar —who also instigated this whole adventure—, Santiago, Nattie, Stefano, and Olasd. Thank you for supporting and guiding us, sharing your experience, and helping us find solutions throughout the entire process.
It was also made possible thanks to the great work, strong support and patience of international teams: Fundraising, Bursaries, Content, Video, Treasury, Visa, Website, Accommodation, Front Desk, Cheese and Wine, Publicity as well as all the other teams and individuals who contributed. We apologize if we have forgotten to mention anyone; many people helped make this event possible.
Our deepest thanks also go to everyone who joined us in working on the event, especially Fer, José, and Julián, who showed great commitment and took responsibility for several important tasks.
We would also like to extend our gratitude to FICH, the Universidad Nacional del Litoral, the institutions, organizations, sponsors, suppliers, and everyone who contributed in one way or another to welcoming the Debian community to Santa Fe.
And finally, a very special thank you to our families, to whom we dedicated little time these past few weeks, who supported us on this adventure, enduring the exhaustion, the calls and messages at all hours, and the occasional stressful situation. Always giving us that much-needed, encouraging hug with so much love.
These were very intense weeks, during which we tried to give our best so that everyone could enjoy their stay and so that the Debian community had the necessary conditions to meet, work, share knowledge, and continue creating the magic that characterizes community life and the development of Debian.
As happens at every DebConf, there were difficulties, unexpected situations, and challenges that required us to improvise, learn, and perform a few juggling acts. There were also moments that will certainly remain as memorable anecdotes: the “antisocial room”, some gas heaters worthy of a museum, and newly unlocked powers for negotiating with suppliers.
We have no evidence, but also no doubt, that for many people the Conference Dinner was one of the best moments of the event.
A few ingredients we had hoped would happen naturally were missing, such as more wine nights and at least one in-person football match.
During the two weeks of DebConf, we experienced every kind of weather and a wide range of emotions. Above all, however, we saw people enjoying themselves and building friendships, which fills us with pride.
Thank you very much to everyone who came and helped DebConf26 leave such a beautiful mark on our hearts.
We hope our paths cross again somewhere in life.
Best regards,
Leonardo, Emmanuel, Mariano, Pablo, and Martín DebConf26 Local Team
The Debian Project was founded in 1993 by Ian Murdock to be a truly free community project. Since then the project has grown to be one of the largest and most influential Open Source projects. Thousands of volunteers from all over the world work together to create and maintain Debian software. Available in 70 languages, and supporting a huge range of computer types, Debian calls itself the universal operating system.
DebConf is the Debian Project's developer conference. In addition to a full schedule of technical, social and policy talks, DebConf provides an opportunity for developers, contributors and other interested people to meet in person and work together more closely. It has taken place annually since 2000 in locations as varied as Scotland, Bosnia and Herzegovina, India, Korea, France. More information about DebConf is available from https://debconf.org/.
For further information, please visit the DebConf26 web page at https://debconf26.debconf.org/ or send mail to press@debian.org.
Passionate Intensity [Penny Arcade]
I think Gabe has wanted to draw Asmongold for awhile, and generally these days the thing that keeps him from doing it is that he doesn't want to draw attention to the target. Except the target in this case is one of the biggest streamers on planet Earth. He can't actually be obscured; the strip is about his most recent fourteen day ban, but having been banned as often as he is, this is just part of the business model. The video he made in response to the ban will probably have three million views by the end of the day. You get kicked out of one place, and somebody else is always there to monetize your riposte. YouTube, generally - Streamer Switzerland.
Cookies are not needed for fingerprinting and tracking [OSnews]
Cookies are ancient technology, and in no way necessary of even particularly desirable to track you. Modern fingerprinting doesn’t need them at all.
A live demonstration of everything a website learns about you before you click anything with no cookies. It reads you during the connection and in the first two seconds of JavaScript, then narrates what it found back to you in plain English, as if a stranger were describing you out loud.
The argument isn’t “look how creepy this site is.” It’s: the site you visit after this one can do all of it too, and won’t tell you.
↫ Kuber Mehta
Also note, as the demonstration does, that if some of the things it determines about you are wrong, that doesn’t really matter. In fact, it may actually make fingerprinting and tracking you easier; as long as fingerprinting consistently gets the same things wrong in the same way, it becomes a valuable part of the fingerprint, like a small scar obscuring part of your real thumb’s fingerprint.
Online tracking of people should be illegal.
I Ate a Large Meal of Indian Food and Foolishly Assumed I Would Then Be Able to Function in the Afternoon, So Here is Saja and Charlie to Cover For Me While I Recover [Whatever]

The Indian food was delicious and also literally all my blood went to my stomach, causing my cognitive abilities to throttle to maybe, like, 30%, so, uh, yeah, not a lot of work done after lunch. I did take a nap, though. Which was important, I think.
Anyway, Saja and Charlie are pals. Isn’t that nice?
How are you?
— JS
Meta Must Stop Silencing Reproductive Health Information [Deeplinks]
Access to accurate information about reproductive and maternal health can be critical. But on Meta's platforms, simply talking about prescription medication, abortion care, or one's own medical experiences can be enough to trigger content removals and account restrictions.
That's why EFF recently submitted a public comment to the Meta Oversight Board in its consideration of a case involving an Instagram post about prescription drugs during pregnancy and childbirth. The case touches upon a topic we’ve been documenting for some time; last year we collected stories from individuals who had experienced censorship of reproductive health information on various platforms. Meta in particular stood out: Its moderation systems routinely fail to distinguish between prohibited drug transactions and legitimate discussion of medications, including educational information and people's firsthand experiences with healthcare.
Through our Stop Censoring Abortion project, EFF collected nearly 100 submissions from healthcare providers, clinics, educators, advocates, researchers, and others whose reproductive health content had been removed or suppressed by social media platforms. What we found was alarming: systemic over-enforcement, confusing policies, arbitrary takedowns, sudden account bans, de-ranking, and appeals that too often went nowhere.
In almost every case we reviewed, the censored posts and accounts did not actually violate the platforms' stated rules. Meta frequently cited its Restricted Goods and Services policy, which prohibits attempts to buy, sell, trade, donate, gift, or request pharmaceutical drugs. But the content EFF documented overwhelmingly consisted of factual or educational information—not attempts to sell or distribute drugs.
The consequences were significant. For example, the Miscarriage+Abortion Hotline had its Instagram account restricted and posts removed even though it was providing information about legally obtaining medication rather than offering pharmaceuticals for sale. Red River Women's Clinic and the RISE reproductive health research center at Emory University had accounts locked after posting about mifepristone.
Other users reported having their content quietly de-ranked or “shadowbanned,” limiting its reach without giving them meaningful notice or recourse. We believe educational content and people's experiences involving reproductive healthcare and medication should not be suppressed in this way.
And when Meta gets these decisions wrong, the appeals process too often fails to fix them. In several cases EFF documented, accounts were restored only after journalists drew attention to the problem or someone with a personal connection inside Meta intervened. A moderation system shouldn't require knowing the right person to get an erroneous decision reversed.
Our submission calls on Meta to make five changes—the same five changes we asked for last year.
First, Meta should publish clear, understandable policies so users can know what content is permitted and what might result in removal, downranking, or account suspension. Second, those rules must be enforced consistently and fairly. Third, Meta must provide meaningful explanations for enforcement decisions, including what rule was violated and how users can appeal. Fourth, users need a functional appeals system that doesn't depend on insider access.
Finally, Meta should expand human review. Reproductive healthcare is precisely the sort of nuanced and context-dependent subject that automated moderation systems struggle to understand. As our research shows, automated systems can mistake education for drug sales, misinterpret terminology, overlook cultural and political context, and even classify legitimate advocacy as dangerous content. Human moderators should therefore play a greater role when automated systems flag sensitive healthcare information or political expression.
Meta has chosen to allow discussion of reproductive healthcare, including abortion, on its platforms. That commitment means little if its moderation systems nevertheless prevent people from accessing or sharing that information.
At a moment when reproductive rights are under attack around the world, the stakes are particularly high. Restricting access to essential healthcare information can have profound consequences, especially for people who already face barriers to reproductive care.
Users deserve a system in which rules aren't applied arbitrarily, appeals actually work, and vital health information isn't silenced because an automated system failed to understand its context. Meta can—and must—do better.
You can read our comment in full below.
Manton: "The way I think about RSS.chat is that it’s a bootstrap for getting lots of RSS feeds to play well together, for both posts and replies. Can the web be the social network? Yes. And Micro.blog should be part of anything working toward that goal."
Jonathan Dowland: time-delayed scifi roundup feed [Planet Debian]

I enjoy reading The Guardian's monthly round-up of new SF novels, which can be found in their Science Fiction Books section, and can also be read via feed. Since the round-up is of new books, at the time the round-up is published they're usually only available in hardback.
When it comes to choosing a book to read, these days I am tending towards paperbacks: I've largely ran out of room for hardbacks. So I decided to apply a time delay to their feed. Six months is roughly enough that a book mentioned in a round-up should be shortly available in paperback.
The first obstacle was that The Guardian only publish roughly the last six months of articles in their feed, and so the posts I want have disappeared. However, my Feed Reader (FreshRSS) had older copies stored in its database, and I am able to re-publish those using User Queries. (This also gives me an opportunity to filter out non-roundup articles from the Guardian's feed).
It's then a nice short piece of scripting (this time, using Ruby) to filter the republished feed on the publication date. To make the most recent articles appear new, I also modify the metadata for filtered entries to appear 6 months newer than they are.
#!/usr/bin/ruby
require 'rss'
# replace with the user query feed URI
uri = 'https://www.theguardian.com/books/science-fiction/rss'
now = Time.now
sixMonths = 6 * 30 * 24 * 60 * 60
feed = RSS::Parser.parse(uri)
feed.items.select! do |item|
item.date + sixMonths < now
end
feed.items.collect! do |item|
item.date += sixMonths
item
end
puts "Content-Type: text/xml\r\n\r"
puts feed
I stuck that up on my private web server, subscribed to it in my FreshRSS and voila, a time-delayed list of books to read, most likely available in paperback.
Uwe Kleine-König: PGP Keysigning on Linux Plumbers and OpenSource Summit Europe 2026 [Planet Debian]
I'm going to this year's LPC and Open Source Summit Europe 🥳.
I will organize sessions on two days after the conference program to exchange PGP fingerprints for keysigning to improve the kernel's web-of-trust (but of course everyone is welcome).
For details see my announcement on LKML. Note the registration deadline at 2026-09-27 08:00 UTC.
The Base Is Under Attack [Radar]
The following article originally appeared on Tim O’Brien’s Medium page and is being republished here with the author’s permission.
At some point, the software “Security” industry stopped talking about stopping threats and started talking about detecting them: detection windows, response times, mean time to remediate. It’s not offense or prevention; it’s damage control. There’s a movie scene that captures what that sounds like, and you’re going to name the film before I finish describing it.
An underground base on a frozen planet. The enemy knows exactly where it is. Massive mechanical walkers—walking tanks the size of buildings—are advancing across the ice. The defenses can’t stop them. The people inside aren’t trying to fight back. They’re frantically trying to get a broken ship working so they can just escape—not win, not hold the line, just get out before something catastrophic and unstoppable reaches the door.
The whole opening is just people preparing. Rushing. Running checks on equipment that isn’t ready, coordinating defenses that won’t hold, buying time against something too large and too fast to stop. Nobody’s planning a counterattack.
The entire operation is: slow it down long enough to get out.
Securing the Base (Image Assist from Anthropic)
That’s what the conversation around InfoSec sounds like right now. The base is under attack. The walkers are AI-generated vulnerabilities, automated exploit chains, and speed that no human team can match. The framing has shifted from defending the perimeter to just getting the ship started. Not winning, just getting out.
Go back and watch that opening sequence carefully. There are hundreds of faceless Rebel troopers in that scene—no names, no lines worth remembering—scrambling to hold the perimeter, buy time, absorb the blow. Some of them continue to fight. But maybe some already understand that the base is lost.
Han is out on the ice looking for Luke. Leia is already on the transport, making sure the mission survives. The main characters aren’t defending the base. They’ve concluded the only way to answer the threat is to move. Most of the conversation around AI right now sounds like those faceless troopers continuing to defend: fortify what’s there, slow the walkers down, hold long enough for something to change. A few people are thinking like Han. They’re not buying another vulnerability scanner from a vendor. They’re asking whether there’s a different way off the planet entirely.
Here’s the disconnect: most people focused on “Security” have spent decades being handed a finished base and then being asked to defend it. They weren’t involved in the architecture or approach that application developers have been using.
In many cases, people responsible for security are not defining architectures as much as they are catching up. And as “developers” start to generate more code in a day than was possible in a month or a year, it’s becoming increasingly unrealistic to think of security as an afterthought.
When security is just a support team for software engineers, that’s building a base that might be indefensible.
The shift that actually matters isn’t a better scanner or a faster response team. It’s security people in the room when people are writing the prompts, when agents are assembling the dependency list, and when the basic system prompts are defining the authentication system—before any of those systems is in production. Not reviewing the finished base.
Security needs to be involved before anyone even starts to prompt a system’s creation.
“Machine speed” has become a conference catchphrase, which usually means it needs translation. Here’s what it actually looks like, pointed at you:
The whole operation, including reconnaissance, timing, and coordination, ran in seconds. What previously required a dedicated red team and weeks of planning is now background processing that runs continuously, waiting for the right moment.
Five years ago, you would have tasked a room of scary-looking security people with profiling a target, capturing latency data, and maybe holding several meetings to discuss what they found. Today, the coordination I outlined in the previous paragraph might take a few minutes on a network of interconnected Nanobot, Picobot, Hermes, or OpenClaw agents that gather data and then update a shared memory system, and the decision on when and how to attack would be made by another agent that was granted permission to coordinate the attack across a distributed network of agents.
Quick note: If you have anything to do with running a website, stop posting about your vacation plans.
Here’s what the conversation keeps missing: AI isn’t the real problem, and this problem isn’t necessarily new. The problem is that we’ve been building bases that were always going to need to be evacuated. The problem is that security is rarely involved in selecting a tech stack, and because that tech stack selection is frequently automated with AI, there’s no predicting the mess that’s being thrown over the wall.
The response to AI-accelerated attacks is almost entirely defensive. Tighten npm’s signing requirements. Fund the Maven repository. Sign up to support Akrites with the Linux Foundation. Add another scanner to the pipeline. These aren’t wrong. They’re just not enough.
These are important projects, and security groups should sign up to support them, but the real transformation that needs to happen is that more people in security need to get involved in software creation. What this looks like is having an opinion on React, Vite, Tomcat, Node.js, databases. It means jumping in and affecting some of the basic decisions that these agents are going to use before they deliver vulnerable software.
Most of the industry is still shopping for scanners. Most people in security are still “reviewing” software in a process that assumes it takes weeks or months to write.
[$] Even more formal verification for BPF [LWN.net]
BPF offers useful safety guarantees, but Kumar Kartikeya Dwivedi wants BPF programs to be even safer. At the 2026 Linux Storage, Filesystem, Memory-Management, and BPF Summit, he led a session (slides) discussing the possibility of adding domain-specific invariants to BPF programs. It was not a discussion intended to lead to the implementation of any particular kernel feature, but rather an overview of why additional formal verification might be needed, and how it could work with the existing BPF ecosystem.
Security updates for Monday [LWN.net]
Security updates have been issued by AlmaLinux (firefox, gpsd-minimal, kernel, libarchive, libgcrypt, and LibRaw), Debian (bind9, ca-certificates, chromium, dnsdist, icinga2, kitty, libheif, openjdk-21, pdns, pdns-recursor, thunderbird, and xen), Fedora (bird, erlang, kernel, mingw-glib2, nghttp2, p11-kit, perl, perl-Devel-Cover, perl-PAR-Packer, pgadmin4, polymake, python-nh3, python-wsgidav, python3.12, rabbitmq-server, rust-ammonia, seamonkey, and udisks2), Mageia (python-starlette), Oracle (gnutls, kernel, and LibRaw), Red Hat (container-tools:rhel8), Slackware (wpa_supplicant), and SUSE (azure-storage-azcopy, bouncycastle, ffmpeg-4, fuse-overlayfs, gleam, gstreamer-plugins-bad, libssh2-1, libssh2_org, libwireshark19, libXfont2-2, perl-Mojo-JWT, perl-Mojolicious, podman, python310, python313-Django4, and tekton-cli).
Django moves to an annual release cycle [LWN.net]
The Django Python web-framework project has announced that it has accepted an annual release cycle proposal. This means that the project is moving from a somewhat complicated schedule that interspersed short-lived feature releases and long-term-support (LTS) releases to a simpler annual cycle where each release is supported for three years.
Every feature release gets three years of support: one year of mainstream bugfixes, then two years of security and data-loss fixes. The "LTS" label is retired — every feature release now carries that same, unique commitment.
No more LTS gap: no racing a deadline to jump two years of changes at once. Upgrade one year at a time, whenever suits you within the support window. Three versions are supported at any time, giving third-party packages a clear, rolling target.
This will take effect with the upcoming Django 2028 release, expected in January 2028.
1348: Fading Odds [Order of the Stick]
http://www.giantitp.com/comics/oots1348.html
First version of Word for Windows ported to modern 64bit Windows [OSnews]
Back in 2014, Microsoft released the source code to the first Windows version of Word, version 1.1a. Now, Justin Marshall has ported this code to modern versions of Windows, so you can run it as if it were any other modern application.
This project is a fully working native Windows x64 port of Microsoft Word for Windows 1.1a, whose historical codename was Opus. It builds the original Word source and resources together with modern replacements for the 16-bit assembly, segmented-memory, and Win16 platform boundaries.
The result is the original Word application and user experience running as a 64-bit Windows executable. This is not an emulator or a reimplementation using a modern editor control.
↫ Justin Marshall
Neat endeavour.
Idol Mahjong Final Romance: a slideshow disguised as a video game [OSnews]
Top supplier of great articles Nicole Branagan is at it again.
We’re back into the strip mahjong games today, here going back to 1991. Video System is a company that’s probably best known in retro-gaming circles for Aero Fighters/Sonic Wings, but mahjong games (usually branded Idol Mahjong) were one of their bigger moneymakers. And there’s something interesting going on here– Idol Mahjong Final Romance 2-R-4 Special re-releases the final three games in the series, which all also got contemporary console releases, but the first game in the series has never been seen outside of its original arcade launch. Why?
↫ Nicole Branagan
Look, you’re not going to get something like this from anyone else.
I have Spectrum cable and they recently started unbundling the cable services they provide. So I have a bunch of streaming services that I never decided to follow, and haven't gotten in the habit of checking them. Not sure if I like this, but I certainly understand why the bill is so high and seems to always be going higher? Not sure why that is. But it's hard to get through to them.
Anyway, one of those streaming services I get now is Paramount+ which is owned by the Ellisons, which I don't like, but they have a show that is really excellent esp if you like British crime stories, which I most definitely do, even if most of the actors are American, and it probably was recorded in Vancouver or in Queens. It's called, unimaginatively, The Agency, as in the Central Intelligence Agency. The story is fine, but what really sets it apart is the quality of the acting and production. Beautifully filmed, better to watch it on a nice big screen set with good audio. Two seasons only, but if you want to know the kind of TV I like, this is it.
I see the new Game of Thrones series just completed it third season. I tried getting into it, and couldn't. But then I didn't get going in the original series for the first few attempts. People say this show is good, so I will probably give it another try.
The Crossroads [The Daily WTF]
I moved some things around on my calendar. 4:00 PM today is open. Please come to the executive floor.-Leila
For a while I was stunned, staring at the email in front of me. I’d just told my boss I was quitting, refusing a promotion into my recently-deceased mentor Aggie’s shoes. Now, the new head of Human Resources wanted to see me.
Me? A Tech Support drone with one foot out the door? Well, she didn’t know that yet, did she?
Something in me feared where this might lead. But, Leila had stuck her neck out to rescue me from CEO Gibbs. She seemed like she cared about making things better. I decided to hear her out. Figured I owed her that much before I blew outta there for good in two weeks.
I had way too many hours to kill. Between whittling down my overstuffed inbox and resuming casework, it should’ve been easy to distract myself, but I couldn't focus on a single thing. I’d just done what had once seemed impossible. My brain wasn’t letting go of that any time soon.
Megan and Reynaldo also handed in their resignations. I got their messages confirming as much. We met up for lunch at a nearby restaurant and celebrated, but I was distracted. Amid the smiles and positive energy, the meeting with Leila was all I could think about. Should I mention it? I decided not to, not until I knew more.
I dreaded the afternoon slog now more than ever, but somehow, it slogged. When the clock’s hands finally crawled to 3:30, I threw on my coat and hat and darted out for one last smoke break. Then, it was time for C-Town.
Consumed with nervous energy, I shunned the elevator to race up the stairs floor by floor. Figured I’d burn off some stress, which could only help with whatever came next. Also figured I’d have a minute to recover in the vast executive lobby before finding my way to her office. Instead, I found Leila standing right there, every bit as polished as our surroundings. She faced me with surprise. “Hello.”
I tried to speak, laugh, something. Instead, I doubled over, coughing and gasping for air that felt all too thin up in nosebleed territory. While recovering, I couldn’t help but notice the gleaming tile beneath my feet, contrasting against my work shoes encrusted with sidewalk salt. Such details seldom crossed my mind, but the sort of people who worked up there lived and died for such details. Face flush, I cleared my throat one more time and righted myself, looking her way. “’Scuse me.”
“That was a long way up,” Leila remarked, gesturing behind herself. “I thought we could visit the observation deck. Would you like something to eat or drink first?”
Truth be told, I was already dying for another smoke. “No, that’s all right.”
“Follow me.”
She led the way through massive, quiet corridors to a small room with glass walls and ceiling. At this height, all one could see outside was a thick lead wall of fog. Leila strayed up to the far wall, a jewel against the void, and glanced back over her shoulder with chagrin. “I’m sorry, the view’s not very good today.”
“I dunno, I kinda like it.” Something about foggy weather had always intrigued me. With the normal world gone, it seemed like anything could happen.
She beckoned me closer with one hand. I strayed up next to her right side, staring out at the shrouded view.
“I understand you and Agatha Shaw were close,” Leila began quietly. “You have my deepest condolences.”
A two-ton anvil crashed onto my nerves. My fists clenched up at my sides. I worked so hard to hold back the flash-flood of grief that I couldn’t string words together. I only trusted myself to nod.
She glanced my way, hesitating. “Would it be better if we rescheduled?”
“I’m here,” I forced out. “Whatever you have to say, say it.”
She nodded. “First: while you were out of the office, I asked Francis Bronson to hand in his resignation.”
I drew a blank on the name, and blinked her way in confusion.
“The manager who nearly destroyed a printer with his hair dryer,” Leila explained, “after I’d just made a company-wide push for everyone to respect our office equipment.”
“Oh. Hothead!” My nickname for the guy. I’d worked that case a few weeks ago, but it felt more like years. Hothead worked in HR—at least, he had. After disarming him, I’d sent Leila an email, appealing for help against someone who clearly shouldn’t have been managing a supply cabinet, much less human beings. Well, she’d delivered. A warm note of satisfaction offered me a welcome lift out of grief. “Thanks. Really.”
Leila smiled. “We make a good team, I think. Which brings me to the other thing I wanted to discuss. Something new.”
My gaze fastened onto hers with a mix of intrigue and dread.
“You and I both know how badly this place needs to change. Let’s work together and actually fix things. I want to create a Change Management team and make you Team Lead.”
I was speechless, caught completely off-guard.
“The first thing we’d do is attack our company-wide leadership problem. Audits, surveys, hearings … eventually, a reorg. Along with simplifying the corporate structure, we’ll get rid of all the—Hothead, you called him? All the other Hotheads.”
“The biggest hothead is sitting at the top of the whole rotten pyramid,” I blurted. “He ain’t budging. He ain’t signing off on this, either!”
Leila was unfazed. “I think we could frame everything in a way that makes Mr. Gibbs like it. After all, we’re reducing payroll. We’re better positioning ourselves in a tough economic time. Worst-case, we could always use the three magic words: Google Did It.” She smirked.
I couldn’t help smirking back. Then I remembered what I’d done just a few hours earlier. “But I’m outta here. I quit! Put in my notice this morning!”
Leila nodded calmly. “Do you have a new position lined up somewhere else?”
“No. I'm going freelance with friends.”
“Friends who are leaving the company along with you?”
I nodded.
She paused for thought. “If you were to lead my Change Management team instead, you’d be able to recruit internally for your team. Whoever you think would be the most helpful. You’d set the agenda for whatever’s most important to address so that other good people don’t feel like they have to get away from here. All of this would mean a promotion to Director, with a salary and benefits to go with. And if you need more bereavement time, I could arrange an indefinite leave of absence until you feel ready to come back.”
The breath died in my throat. Had I suffered a stroke? I must’ve had a stroke. No, she really said it. She was on the level. I could change things. I could hire my friends to help me do it. A raise, full bennies, working with her every day?
Only a fool would refuse. And yet, my gut ached at the idea.
I stood there, frozen and mute, until I remembered something in my trench coat pocket: RD, the rubber duck I’d miraculously rescued from Aggie’s former office. I reached into my pocket and seized him in my fist.
RD? Aggie? I thought. Whoever’s listening. It all sounds amazing. I know she means it. But … it’s another trap, isn’t it? Staying in this joint for any reason means betraying myself. Betraying everything.
“Listen,” I finally said, “I’m flattered you even offered, but it ain’t right for me. Don’t give up on your idea! I’ve got friends here with ideas of their own for changing things. 32-hour work weeks. The end of free overtime. A union. I’ll send ’em your way. Offer them a spot on your team.”
Leila sighed. “A union would be an especially tough sell to Mr. Gibbs, but that really is a case where Google Did It. We might scare him so much with that idea that everything else would seem harmless in comparison.” She faced me with a sad smile. “A shame that we’re losing you. I was starting to learn some interesting things about printers.”
I’d miss her, too. And yet, I was feeling surprisingly great about my refusal.
“Make sure you file for unemployment,” she said. “We won’t stand in your way.”
I offered my hand. “Thanks for everything, Leila. Whenever it is they kick you outta here for good, come find me.”
She shook, sad smile persisting. “Maybe I will.”
I told Megan and Reynaldo about the new Change Management team. Made sure they knew the offer was on the table in case they preferred that over jumping ship. Both were quick to say no. Like me, they were too excited about our plans to stop now.
For the next couple of weeks, there was still plenty of work to be done: transferring my open tickets to other support reps and all that. But there was barely any time for it. Coworker after coworker stopped by my cube to express their surprise and wish me well in whatever came next.
“You’ll never be problem-free,” one of them advised me. “Go looking for the problems you want to have.”
I felt happier, freer, more determined than I had in ages. It was the conviction of knowing I’d stuck to my guns to do the right thing for myself.
Sanjay also jumped ship to join us. And there was one last surprise that came in the form of a phone call. The name on my work phone’s caller ID was DRACORA, P. So-called “Dracula!” Having a fairer opinion of her than most, I picked up without any sense of dread.
So-called “Dracula!” She hadn’t been so bad at all. Surprised, I picked up in a hurry.
“I’m so sad to hear you’re leaving!” she said. “What kind of freelance work are you doing?”
“All sorts of IT projects,” I replied. “Maybe some consulting on the side.”
“I have a friend who needs help setting up a website for her business. Is that something you could help her with?”
My eyes flew wide open in shock. “Sure!”
“I’ll put you in touch with one another.”
“That’d be swell. Thanks!”
We exchanged contact info. She promised to keep pointing friends our way whenever she could.
On my last day, I sent my personal contact information to my coworkers. I reminded them of Leila’s offer and urged them to keep me posted on their different causes. Then my friends and I walked out of a building that no longer had a hold over any of us.
It felt pretty damn swell.
Our accountant helped us incorporate RD IT Solutions. Only close friends knew it stood for “rubber duck.” The company covered medical and other relevant expenses for everyone. There was no hierarchy. Everyone had equal financial stakes and an equal say in company decisions.
After decades of being an expert at what I did, I was back at square one, learning the ropes. So much of what we had to learn for our business could only be learned through failure. Still, it felt rewarding to challenge my brain in new ways. The new gig let me wear lots of hats, from tech support to coding to business admin.
With no more regular paychecks, we had to tighten down our finances to what was critically important. We worked remotely at whatever times worked best for us, with the occasional meet-up at a public place or someone’s home. We all knew that any one of us having some kind of trouble could count on the rest of the group to help out as best as they could.
Megan quit smoking again. I cut way back myself. Wasn’t trying to, I just haven’t felt the need as much. Also stopped having those nightmares. It no longer feels like I’m living just for time off and weekends. I don’t spend my Sunday nights dreading Monday.
Dracula really did introduce us to our first client. It’s crazy what the universe puts out there when you go looking for it.
We met up remotely for our first client meeting to discuss requirements and expectations. When the topic of deliverables came up, our client scrunched her nose and interrupted Megan mid-sentence. “I don’t trust email! I’d rather you fax me the files.”
We were building a website for her.
“You mean, the source files?” Megan soldiered on bravely.
“Just fax me the codes,” the client said. “My nephew can re-type them into the Internet.”
She provided a fax number, fully expecting us to print out several hundred lines of code to send over. After deploying our first stab at a website that met her requirements, we did just that, mostly out of curiosity.
A few days later, she called us in a huff, saying her website looked like random letters. Her nephew had typed the code into Facebook.
FIN
Issue 47 – Greta’s Wedding Pt. 2 – 12 [Comics Archive - Spinnyverse]
The post Issue 47 – Greta’s Wedding Pt. 2 – 12 appeared first on Spinnyverse.
What was that book? [Judith Proctor's Journal]
Someone one my friends list recced a book that was recommended by both Anne Leckie and Kathryn Addison.
The book sounded interesting as well.
But I can't find the post, and I can't remember the name of the book...
Help!
Python Now Has a Post-Quantum Encryption Library [Schneier on Security]
Post-quantum cryptography is now one pip-install away for the entire Python ecosystem. With funding from the Sovereign Tech Agency, we implemented support for ML-KEM, the NIST-standard key-establishment primitive, and ML-DSA, the NIST-standard digital-signature primitive, in pyca/cryptography.
Remember, the reason to do this now is because there’s no emergency. And because you will make your systems crypto agile, which is always a good idea.
Why Open Source Matters for AI [Radar]
In 1995, the question in the media was whether Netscape or Microsoft would control the web. The answer, it turned out, was neither.
Both Netscape and Microsoft aimed to dominate the web server and browser market, reasoning that whoever controlled both ends of the connection would have an internet “platform” to rival the deathgrip that Microsoft had enjoyed on the personal computer. The two companies raced to build every feature they could think of directly into the product, on the theory that whoever built the most integrated and full featured web server would win.
The open source Apache web server took the opposite bet. It stayed a web server with a clean extension layer, so anyone could bolt something new onto it without asking permission or waiting for the next release cycle. Within a few years, Apache was far and away the most popular web server, and Netscape’s server and Microsoft’s Internet Information Server (IIS) were history. People started talking about the LAMP stack: Linux, Apache, MySQL, and (Perl | Python | PHP) as a legitimate platform. Modularity, not features, was the moat. The fact that major elements of that stack survive while others have been swapped out or extended is a testament to the power of composability and distributed innovation.
I called that pattern the architecture of participation when I wrote about it in 2004. I was trying to explain an inconvenient fact that the licensing debates of that era ignored. I had started working with Unix in the System III days, and saw how it had succeeded as a collaborative project even though AT&T offered Unix under a proprietary license. A few years later, I observed that nominally open source projects like OpenOffice with monolithic architectures never built much of a community. I realized that open source wasn’t just about licenses, but about architecture. A small kernel with standard interfaces that lets people extend your work without asking for permission is an important part of the secret sauce.
Swap out Netscape and Microsoft for OpenAI and Anthropic in this story, and perhaps you can see the echoes.
A model’s personality, its defaults, and its history used to live where you could, with a little effort, see them and edit them. Increasingly, they don’t. As Drew Breunig pointed out to me the other day, each new version of the frontier models moves a little more of the product’s behavior out of an editable layer and into the weights themselves, where nobody outside the lab can see it, let alone change it. The model stops being a component you build with and can adjust to your liking and starts being an appliance you rent. Post-training is important but Drew points out that it is also “trading diversity for reliability.” That’s a good trade for many people, but it is the same kind of trade that gives us highly processed foods when we know that “real food” is better.
The public debate about open source AI seems devoted far too much to model weights, their national security implications, and whether a lab releases weights and under what license. But that covers only a fraction of what actually makes open source matter. Apache was never competing with Netscape and Microsoft (and Linux was never competing with Windows) over whose source was more available. They were competing over something more important. I remember talking with Bob Young, the founder of Red Hat, about his business model, and he said “What we really sell to our customers is control.” Open source meant that the platform your application depended on was no longer a sealed box you licensed from one company but a layer you could extend and build a business on top of without asking anyone’s permission. It sparked an explosion of innovation. It enabled companies like Google and Amazon to grow up free from Microsoft’s dominant paradigm.
Every wave of computing, from mainframes to PCs to the internet, has run through the same cycle: distributed innovation at the start, with the eventual winner gradually closing down its offerings to build a moat. What keeps a market open isn’t the license on any single component. It’s how easy it is to swap out one component for another when a better one appears.
The protocols connecting the pieces are an important part of that picture. Unix utilities expected stdin and stdout, and the shell acted as a kind of harness to connect them, so it was easy to build a new tool that worked seamlessly with existing ones. A testament to the power of that approach is just how much the shell and Unix utilities are the lingua franca of agentic tooling today, more than 50 years after they were invented! TCP/IP, HTTP, and other internet protocols played a similar role in keeping the internet open and composable.
Fortunately, so far, we are seeing some wins for composable, protocol-centric architectures in AI. Anthropic’s Model Context Protocol was a disruptive move in that direction, an open standard for letting any application reach any tool or data source without a custom integration for each pairing. Along with other open protocols, MCP also now has a home outside of Anthropic at the Agentic AI Foundation (a subproject of the Linux Foundation), which is at least a partial guarantee of its independence.
Isobel Moure, Ilan Strauss, and I made the case earlier this year in Protocols and Power that as models commoditize, competition moves up the stack to context. Opening the means of accessing that context opens the market, regardless of whether open or closed weights sit underneath it. That’s an unbundling, model from harness from context, done the way Apache unbundled web server from web application.
Agentic skills may also be a critical element of the open source AI future, though as the history of the LAMP stack shows, they may fall by the wayside in the same way that Perl and PHP did. And that’s just fine. Composability means that it’s easy to switch to something better when it comes along, or when more people agree on it.
There’s also a lot of great work going on in portable memory from players like Letta, Nous Research, and others. Open source agentic harnesses like Goose and Pi are also a big part of giving power back to the people. Pi in particular is optimized to be modifiable. There’s a fun story told about Mario Zechner’s decision to give Pi a “/quit” command rather than an “/exit” command like Claude or Codex. Countless issues and PRs have been submitted to Pi’s repo, asking for or implementing “/exit”, but Zechner is stubborn. His retort is that you should just ask Pi to add it to your install.
But the projects I listed above are just the tip of the iceberg when it comes to the scale and scope of open source AI. Current AI’s Open Source Gap Map covers more than 24,600 open source AI projects!!, with 421 of them scored in depth across openness, capability, and adoption. The map organizes the stack into three layers: 1) models and associated elements including data sets, fine tuning tools, inference frameworks like VLLM, and evals; 2) the product and UX layer, including harnesses and personal agents; and 3) the infrastructure underneath, including core ML frameworks like PyTorch, deployment tools like Ollama, and edge hardware.
Current AI itself is a public-private partnership that came out of the AI Action Summit in Paris last year. This summer they announced AI Potluck, which they describe as “a public project to build a vertically integrated AI product assembled entirely from open source components… a viable alternative to proprietary AI that isn’t owned by any one company or country.” It is backed so far by roughly $400 million of a five-year, $2.5 billion commitment from the French government, tech companies including DeepMind and Salesforce, and major philanthropies including Omidyar’s AI Collaborative, the Macarthur Foundation, and the Ford Foundation.
The fact that this organization exists, along with others like the Agentic AI Foundation, is a testament to the rising tide of interest in open source AI. The coalition of interested parties also says a lot about the underlying motivations that are driving that interest: AI sovereignty, corporate independence from the overweening ambition of the major labs, and an interest in technology for the public good.
There’s another element, which Drew Breunig put his finger on in our conversation the other day. The problem with having one or two big closed models dominating AI, and having those models increasingly locking their desired personality, business goals, and guardrails into the weights themselves, is that they will reduce the diversity that is at the heart of innovation.
It’s our job, Drew said, to make it weird, to push a model deliberately out of distribution rather than to settle for whatever the labs have made the default outcome. He described how his team chose not to build in React for a recent project for exactly that reason: every model already knows React too well, so building in it means shipping the average of what everyone else was doing instead of something genuinely their own. He has started using GLM and Kimi not to save money but because they are more malleable and take direction better inside a custom harness. And he wants the open-weight ecosystem to survive precisely so that models stay infrastructure rather than becoming appliances.
That’s what an architecture of participation is actually for. We need real separation between the model, the harness, and the application, so that someone who wants to build something weird can still do it without a lab’s roadmap and guardrails deciding whether they’re allowed to.
“Weird” may make it sound like something that not all developers might want. But we’re really talking about something intensely practical. In his short essay on trading reliability for diversity, linked above, Drew Breunig put it this way:
Labs have to ship a product that delivers “good enough” results when a layperson gives a model a lazy prompt. Without direction, the model must return something decent. (If it’s a website it’ll use the Inter font, cards with a single colored border, gradients, implemented with ReAct and Tailwind). Anthropic named this default output “distribution convergent.” At CAIS, @trq212 put it well, roughly, “If it’s not in your prompt, you’re getting what’s in-distribution” …. Less diverse models make for more reliable coding agents, but they encourage a monoculture of output.
Addy Osmani, my co-chair of the O’Reilly AI Codecon, took this point beyond model diversity after reading a draft of this piece: “Almost nobody I work with is tinkering with weights, but they’re rewriting the harness and what sits around it pretty constantly—skills, subagents, hooks, context files etc etc. That’s where participation is currently happening.” Addy went on to note that forking a skill instead of adopting the default, memory and constitution files that travel with the agent instead of living in a vendor account, or picking the unfashionable framework on purpose are all areas where ease of modifiability matters to everyone.
I want to end by returning to the Apache story. I believe that the big labs are making the same strategic mistake that Netscape and Microsoft made in the mid 90s. Yes, make the models more reliable for ordinary users. But don’t shut down the options for developers who don’t work for you to push the state of the art forward. As Bill Joy put it decades ago, “No matter who you are, most of the smartest people work for someone else.” No one should have a monopoly on innovation, and no one should be building a moat to hold it back.
And be sure to join us at AI Codecon: Building with Open Source AI on August 31, a free half-day virtual conference. You’ll hear from leading developers and technical experts working with open-weight models, self-hosted infrastructure, and real-world AI workflows, and learn how building in the open gives teams more control over costs, data privacy, and what they ship. Register today to save your spot.
Grrl Power #1485 – Zenithectomy [Grrl Power]
When Mt. Atrocitous was just a little butte going to Elementalry School, he got called “bismuth brain.” Also “pepto,” because apparently Pepto Bismol has bismuth subsalicylate in it? That’s why it’s called Pepto Bismol, I guess? In fact most generic Pepto is just called Bismuth Subsalicylate, or Pink Bismuth. I never thought about what’s actually in the stuff.
Anyway, they were all, “Hah, hah! Your brain is an antacid,” or “Meatsacks lick your brain when their poop isn’t viscous enough!” Or possibly, “Your brain is colorful!” Geomorphs can be cruel, and not always terribly creative when it comes to insults. Presumably their brains were formed from something else. Possibly Hoppered Galena or Fenster Quartz.
Maxima has destroyed a significant portion of a mountain once before, in her first fight with Darude. That does depend on how you define “mountain.” I’m sure cartographers and geologist might argue that point, but Max insists it was a (very small) mountain, and not a rather tall hill. It turned out to be a poor decision, tactically, because she would up freeing a bunch of granulated rock for Darude to add to his storm of sand. Or as one might say, his Sandstorm.
Oh, look who it is in the vote incentive. And a
not-quite-yet-but-it’s-coming NSFW version over at Patreon.
Vote incentive and Patreon updated with some shading. Not finished yet, but progress.
I think she would get in trouble for doing this. She’d mess up the… floor of the waterfall? Is that what it’s called? The receiving pool? No, probably not that. Anyway, she’d churn things up and cause a ton of weird erosion.
Since you might be wondering, Niagara Falls is about 165 feet high, so Babezilla obviously doesn’t have to be full sized. I’d say she’s about 175-180 feet tall here?
Double res version will be posted over at Patreon. Feel free to contribute as much as you like.
Give me one reason [Seth's Blog]
When your project, proposal or resume is rejected, it’s tempting to try to understand why.
Scrutinize the rejection letter and turn the short sentence into a paragraph or an essay, then play it over and over in your search for how to do better next time.
If you can simply answer this rejection, next time will go better.
The frustration really kicks in when the reasons begin to conflict. Too hot, too cold. Too tall, too short…
The truth is simpler: People who reject you or your work aren’t giving you the real reason. They’re simply inserting “here is where I write a few generic sentences to sound polite.”
Even if you could completely answer the objection in that rejection letter, they’re still going to reject you.
That’s because the rejector isn’t here to teach you anything, and isn’t offering the objection so that you will correct it. They’re simply being nice when they say, “go away.”
The honest rejections would say something like, “my boss didn’t like you,” or “I was in a bad mood,” or “we realized that our spec wasn’t very clear and the person we liked didn’t fit it either,” or “we wanted someone who looked more like us,” or “your competence made us nervous,” or…
Take what they wrote and replace it with “no.”
It’ll save a lot of time.
Pluralistic: The bureaucratic AI arms-race is mutually assured destruction (10 Aug 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

According to an Economist editorial, "AI is breaking the British state" by making it too easy to file complaints, demands and appeals, which will "drown the state" with "demands as well-crafted as a first-class lawyer's":
Let's pause a moment to appreciate the Economist's touching credulity about AI's coming legal mastery. The law seems to be the area where AI is most prone to "hallucinate" (that is, "produce defective outputs"), which can only be sorted through by skilled practitioners whose experience gives them the discernment to distinguish useful arguments from foolish ones:
https://pluralistic.net/2026/07/28/hitl-ers/#ai-ai-oh
(And this requires those skilled practitioners to avoid the "automation blindness" that afflicts people who are asked to remain vigilant for things that seldom occur, a phenomenon that has turned every TSA agent into the water-bottle-detectingest motherfucker the human race has ever produced, who still misses 95% of the guns that red teams bring through the checkpoint):
More notable than the Economist's faith-based predictions about the impending army of hyper-competent robo-lawyers is the magazine's proposed solution to this looming crisis: "stop creating entitlements that are ripe for AI-fuelled claims…prune the mass of procedural rights." Above all, replace the bureaucrats who process your "complaints, demands and appeals" with more AI, which will arbitrarily decide who gets what, through "personalised welfare interventions" that are not based on any kind of guaranteed rights.
Writing on his blog, the political scientist Henry Farrell tells us where this will inevitably end up: with AI-based robot wars in which increasingly stingy and pernickety robo-bureaucrats create demand for progressively more aggressive robo-lawyers:
https://www.programmablemutter.com/p/the-downside-of-robot-solutionism
As Farrell writes, this end-time was foretold by the prophet Alan Moore with his 1980s 2000 AD character Abelard Snazz, "the man with the two-storey brain":
https://en.wikipedia.org/wiki/Abelard_Snazz
Snazz "solves" the street crime epidemic on the planet Twopp with "Big Police Robots," who spiral out of control, arresting the citizens of Twopp for trivial crimes like wearing brown shoes with a blue suit ("breaking the laws of good taste"). To solve this new problem, Snazz invents "Big Criminal Robots" whose "cunning, efficient" crimes "take up all the police's time."
Twopp is left in a state of high-stakes Big Robot crimewars, in which the most efficient criminals imaginable battle the most ruthless robocops science can deliver, with the Twoppians caught in the crossfire, collateral damage in a robotic forever war (on crime).
As Farrell writes, this is already afflicting the US health system, where an army of insurance company robo-claim-deniers have been countered with a doctors' army of robot-claim-appealers:
https://www.nytimes.com/2024/07/10/health/doctors-insurers-artificial-intelligence.html
The point being that people need health care, people need public services, and while there will always be some waste at the margins (whether due to incompetence or dishonesty) responding to this by beefing up the system's defenses with more advanced red tape just requires the people who legitimately need these services to employ more aggressive tactics.
In support of this, Farrell points to a great, long essay by Dan "Accountability Sink" Davies for the Niskanen Center, "'The Problem Factory' – Preemptive risk aversion in infrastructure planning and the role of professional services":
Davies' essay describes how increasing bureaucratic defenses against frivolous or dishonest claims drives the participants in these processes to assume a war footing and approach the system as a battlefield, leading to the very runaway cost inflation that the bureaucratic process was instituted to prevent.
(Davies, a cybernetician, has some fascinating advice about how to structure planning processes to minimize this, but that's out of scope for this particular post.)
This reminds me of nothing so much as the spam wars. There was a time when it was very easy to set up a mail server and provide email access for anyone who wanted it – including spammers. Increased spam begat increased anti-spam countermeasures, notably the creation of blocklists that allowed mail administrators to automatically reject email from "insecure" mail servers.
Inevitably, spammers figured out how to send spam from "secure" servers, resulting in stricter, more onerous standards for mail server configuration. Spammers – for whom the ability to send spam is an existential matter – figured out how to meet these standards, so the security demands jumped again – and again, and again.
Today, sending and receiving mail is so technically challenging that most of the internet's email is run by a handful of giant, mostly US-based corporations. If any of these companies decides your mail server is spamming, you effectively disappear from the internet and good luck getting them to acknowledge an error. Meanwhile, these companies emit an avalanche of spam, but no one will ever block their servers, because to do so would be to cut off billions of legitimate email users:
https://pluralistic.net/2021/10/10/dead-letters/
And since most of these companies are US-based, they are liable to being weaponized by Trump, who has taken to ordering his tech giants to block foreign officials whose policy decisions make him angry:
https://carnegieendowment.org/emissary/2026/07/icc-trump-push-dismantle
Another parallel is the content moderation wars that saw the large platforms coming up with progressively more detailed rules about what constituted harassment and hate speech, only to have dedicated trolls master these rule-books. Trolls – for whom harassment was a full-time vocation – became the world's greatest experts on the platforms' speech policies, which let them skate right up to the line when abusing their victims, and to get those victims kicked off the platforms if they could be lured into putting a single toe over the line in response:
https://pluralistic.net/2022/08/07/como-is-infosec/
Farrell criticizes the Economist's answer to the (alleged) looming robo-lawyer threat as "solutionism," Evgeny Morozov's word for "Recasting all complex social situations … as neat problems with definite, computable solutions":
https://en.wikipedia.org/wiki/Technological_fix
Using AI to root AI-generated bureaucratic appeals sacrifices the system's putative purpose – delivering services – in the name of defending that service from abuse and misuse of the system's resources. As the pioneering cybernetician Stafford Beer famously wrote, "the purpose of a system is what it does." If your bureaucracy is more concerned with fighting fraud than delivering service, then it isn't a service delivery system at all – it's a service denial system.
As Farrell writes, the people of Twopp can tell you how this ends – in a war of giant robots in which we are all collateral damage.
(A brief postscript: Farrell is a font of science fictional analogies to modern policy issues. This weekend in the FT, he and Dan Wang published an excellent editorial on the relevance of the paranoid, claustrophobic fiction of Philip K Dick to our present political reality:)

Ebooks Are Coming to Libro! https://blog.libro.fm/ebooks-coming-librofm/
What Defeating the American-Israel Political Action Committee Means, on the Ground https://rickperlstein.substack.com/p/what-defeating-the-american-israel
They Live https://badtastegoodcause.com/they-live
#20yrsago Seymour Cray liked to tunnel under his house https://www.cs.man.ac.uk/~toby/writing/PCW/cray.htm
#20yrsago Fake anti-Net Neutrality groups https://web.archive.org/web/20060815175125/http://www.commoncause.org/site/pp.asp?c=dkLNK1MQIwG&b=2007877&auid=1871905&kntaw4229=C9E5C86AD89540898B5D07CB54AB0FE6
#20yrsago HOWTO fold a bottle opener out of paper https://www.youtube.com/watch?v=qrXmDiYHUY0
#20yrsago Wikipedia’s template language is Turing-complete https://web.archive.org/web/20070707115525/http://www.mentalpolyphonics.com/?p=30
#20yrsago Schwarzenegger sends Guard to California’s airports https://web.archive.org/web/20060813201014/http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2006/08/11/SECURITYLOCAL.TMP
#15yrsago Marvel to comics retailers: we’ll give you limited edition singles if you destroy our competitors’ products https://web.archive.org/web/20110908023907/http://www.wired.com/geekdad/2011/08/the-great-marvel-comics-rip-off/
#15yrsago LinkedIn opts you into being used in advertisements; here’s how to opt out https://brandimpact.wordpress.com/2011/08/10/a-box-you-want-to-uncheck-on-linkedin/
#15yrsago MagicJack owner follows up his dumb lawsuit against Boing Boing with a dumb lawsuit against Women’s Professional Soccer https://memex.craphound.com/2011/08/11/magicjack-owner-follows-up-his-dumb-lawsuit-against-boing-boing-with-a-dumb-lawsuit-against-womens-professional-soccer/
#15yrsago Al Jazeera fixes its protections for whistleblowers https://www.eff.org/deeplinks/2011/08/al-jazeera-follows-effs-whistleblower
#15yrsago New Zealand Parliament may lose Internet access due to insane new copyright law https://web.archive.org/web/20110830211231/http://www.greens.org.nz/press-releases/parliament-risk-fines
#15yrsago British aviation bans all hand-luggage http://news.bbc.co.uk/1/hi/uk/4778615.stm?ls
#15yrsago Soldering is Easy: CC licensed HOWTO solder comic https://mightyohm.com/blog/2011/04/soldering-is-easy-comic-book/
#15yrsago Taxonomy of technological risks: when things fail badly https://web.archive.org/web/20190221205543/https://www.sei.cmu.edu/about/divisions/cert/index.cfm
#15yrsago Secret anti-racist shirts covertly distributed to neo-Nazis https://web.archive.org/web/20110810082217/http://www.dw-world.de/dw/article/0,,15305581,00.html
#15yrsago XKCD on the password paradox: human factors versus computers’ brute force https://xkcd.com/936/
#10yrsago American Bar Association votes to DRM the law, put it behind a EULA https://www.abajournal.com/news/article/after_strong_debate_house_calls_for_publication_of_privately_drafted_standa/
#10yrsago Trump only writes the angry tweets, the nice ones are written by a staffer with an Iphone http://varianceexplained.org/r/trump-tweets/
#10yrsago Aviation’s war on moisture turns ten today https://memex.craphound.com/2016/08/10/aviations-war-on-moisture-turns-ten-today/
#10yrsago Court rules that FCC can’t force states to repeal laws banning municipal ISPs https://arstechnica.com/tech-policy/2016/08/in-blow-to-muni-broadband-fcc-loses-bid-to-overturn-state-laws/
#10yrsago NRA is spending $3m on pro-Trump ad that says Clinton “will leave you defenseless” https://edition.cnn.com/2016/08/09/politics/nra-hillary-clinton-donald-trump-election-2016/index.html
#10yrsago Nauru files: leaks tell abused childrens’ stories from Australia’s offshore concentration camp https://www.theguardian.com/australia-news/2016/aug/10/the-nauru-files-2000-leaked-reports-reveal-scale-of-abuse-of-children-in-australian-offshore-detention
#10yrsago Why did it take a private foundation to do public science right? https://medium.com/the-spike/how-a-happy-moment-for-neuroscience-is-a-sad-moment-for-science-c4ba00336e9c#.58om85nvg
#10yrsago Profile of People’s Ride: a co-operative, driver-owned alternative to Uber https://www.democracyatwork.info/profile_peoplesride
#10yrsago The story of the story of Disneyland’s Haunted Mansion https://www.latimes.com/entertainment/herocomplex/la-ca-hc-ghosts-disneylands-haunted-mansion-20151016-htmlstory.html
#10yrsago Designer makes clothes out of German transit upholstery fabric, rides trains https://web.archive.org/web/20160808130200/http://www.bbc.com/autos/story/20160804-why-are-trains-seats-so-hideous
#10yrsago America will finally gather statistics on which and how many people are killed by law enforcement https://www.theguardian.com/us-news/2016/aug/08/police-officer-related-deaths-department-of-justice
#10yrsago Monopoly power and the decline of small business: big business vs democracy, growth & equality https://ilsr.org/article/independent-business/monopoly-power-and-the-decline-of-small-business/
#10yrsago As social media centralized, blogging’s core infrastructure has withered https://medium.com/@anildash/the-lost-infrastructure-of-social-media-d2b95662ccd3
#10yrsago 48 hours later, Adblock Plus beats Facebook’s adblocker-blocker https://www.theverge.com/2016/8/11/12439990/facebook-unblockable-ads-defeated-by-adblock-plus
#10yrsago 100 million VWs can be unlocked with a $40 cracker (and other cars aren’t much better) https://www.usenix.org/system/files/conference/usenixsecurity16/sec16_paper_garcia.pdf
#10yrsago DEA bribes rail/airline employees for tipoffs that lead to warrantless cash seizures https://eu.usatoday.com/story/news/2016/08/10/dea-travel-record-airport-seizures/88474282/
#10yrsago Trump is an object lesson in the problems of machine learning https://mathbabe.org/2016/08/11/donald-trump-is-like-a-biased-machine-learning-algorithm/
#5yrsago IRS leaks reveal billions reaped through ultra-wealthy lobbying on the tax bill https://pluralistic.net/2021/08/11/the-canada-variant/#shitty-man-of-history-theory
#5yrsago Canada's got the world's worst internet ideas https://pluralistic.net/2021/08/11/the-canada-variant/#no-canada
#5yrsago End of the line for Uber https://pluralistic.net/2021/08/10/unter/#bezzle-no-more
#1yrago Goodhart's Law (of AI) https://pluralistic.net/2025/08/11/five-paragraph-essay/#targets-r-us

Edinburgh International Book Festival with Jimmy Wales, Aug
17
https://www.edbookfest.co.uk/events/the-front-list-cory-doctorow-and-jimmy-wales
Sydney: The Festival of Dangerous Ideas, Aug 23-24
https://festivalofdangerousideas.com/program/
Melbourne: Enshittification at the Wheeler Centre, Aug 25
https://www.wheelercentre.com/events-tickets/season-2026/cory-doctorow-enshittification
Brighton: The Reverse Centaur's Guide to Life After AI with
Carole Cadwalladr (Brighton Dome), Sep 8
https://brightondome.org/whats-on/LSC-cory-doctorow-the-reverse-centaurs-guide-to-life-after-ai/
London: The Reverse Centaur's Guide to Life After AI with Riley
Quinn (Foyle's Picadilly), Sep 9
https://www.foyles.co.uk/events/enshittification-cory-doctorow-riley-quinn
South Bend: An Evening With Cory Doctorow (Notre Dame), Oct
6
https://franco.nd.edu/events/2026/10/06/an-evening-with-cory-doctorow/
Vancouver: BC Policy Solutions Gala, Nov 12
https://bcpolicy.ca/gala/
F@#$ the AI Overlords (On The Media)
https://www.wnycstudios.org/podcasts/otm/articles/f-the-ai-overlords
Why AI Won't Replace Workers, But Will Crash The Economy (Smart
Cookies)
https://www.youtube.com/watch?v=rRRmUuxJolY
AI and the Enshittification Era (The Weekly Show with Jon
Stewart)
https://www.youtube.com/watch?v=-dAIJRjb-Bw
AI is not inevitable (Betakit)
https://www.youtube.com/watch?v=DbiTVkq1WHo
"Canny Valley": A limited edition collection of the collages I create for Pluralistic, self-published, September 2025 https://pluralistic.net/2025/09/04/illustrious/#chairman-bruce
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, April 20, 2027
"Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2027
"The Memex Method," Farrar, Straus, Giroux, 2027
Today's top sources:
Currently writing:
"The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. Fourth draft completed. Submitted to editor.
A Little Brother short story about DIY insulin PLANNING

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):
https://mostlysignssomeportents.tumblr.com/tagged/pluralistic
"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla
READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.
ISSN: 3066-764X
Passionate Intensity [Penny Arcade]
New Comic: Passionate Intensity
Breaking Up, p11 [Ctrl+Alt+Del Comic]
The post Breaking Up, p11 appeared first on Ctrl+Alt+Del Comic.
Girl Genius for Monday, August 10, 2026 [Girl Genius]
The Girl Genius comic for Monday, August 10, 2026 has been posted.

Oh No
| Feed | RSS | Last fetched | Next fetched after |
|---|---|---|---|
| @ASmartBear | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| a bag of four grapes | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| Ansible | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| Bad Science | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| Black Doggerel | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| Blog - Official site of Stephen Fry | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| Charlie Brooker | The Guardian | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| Charlie's Diary | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| Chasing the Sunset - Comics Only | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| Coding Horror | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| Comics Archive - Spinnyverse | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| Cory Doctorow's craphound.com | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| Cory Doctorow, Author at Boing Boing | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| Ctrl+Alt+Del Comic | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| Cyberunions | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| David Mitchell | The Guardian | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| Deeplinks | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| Diesel Sweeties webcomic by rstevens | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| Dilbert | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| Dork Tower | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| Economics from the Top Down | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| Edmund Finney's Quest to Find the Meaning of Life | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| EFF Action Center | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| Enspiral Tales - Medium | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| Events | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| Falkvinge on Liberty | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| Flipside | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| Flipside | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| Free software jobs | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| Full Frontal Nerdity by Aaron Williams | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| General Protection Fault: Comic Updates | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| George Monbiot | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| Girl Genius | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| Groklaw | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| Grrl Power | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| Hackney Anarchist Group | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| Hackney Solidarity Network | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| http://blog.llvm.org/feeds/posts/default | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| http://eng.anarchoblogs.org/feed/atom/ | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| http://feed43.com/3874015735218037.xml | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| http://flatearthnews.net/flatearthnews.net/blogfeed | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| http://fulltextrssfeed.com/ | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| http://london.indymedia.org/articles.rss | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&_render=rss | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| http://planet.gridpp.ac.uk/atom.xml | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| http://shirky.com/weblog/feed/atom/ | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| http://thecommune.co.uk/feed/ | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| http://theness.com/roguesgallery/feed/ | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| http://www.airshipentertainment.com/buck/buckcomic/buck.rss | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| http://www.airshipentertainment.com/growf/growfcomic/growf.rss | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| http://www.airshipentertainment.com/myth/mythcomic/myth.rss | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| 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 | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| http://www.godhatesastronauts.com/feed/ | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| http://www.tinycat.co.uk/feed/ | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| https://anarchism.pageabode.com/blogs/anarcho/feed/ | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| https://broodhollow.krisstraub.comfeed/ | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| https://debian-administration.org/atom.xml | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| https://elitetheatre.org/ | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| https://feeds.feedburner.com/Starslip | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| https://feeds2.feedburner.com/GeekEtiquette?format=xml | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| https://hackbloc.org/rss.xml | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| https://kajafoglio.livejournal.com/data/atom/ | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| https://philfoglio.livejournal.com/data/atom/ | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| https://pixietrixcomix.com/eerie-cutiescomic.rss | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| https://pixietrixcomix.com/menage-a-3/comic.rss | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| https://propertyistheft.wordpress.com/feed/ | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| https://requiem.seraph-inn.com/updates.rss | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| https://studiofoglio.livejournal.com/data/atom/ | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| https://thecommandline.net/feed/ | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| https://torrentfreak.com/subscriptions/ | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| https://web.randi.org/?format=feed&type=rss | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| https://www.baen.com/baenebooks | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| https://www.dcscience.net/feed/medium.co | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| https://www.DropCatch.com/domain/steampunkmagazine.com | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| https://www.DropCatch.com/domain/ubuntuweblogs.org | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| https://www.DropCatch.com/redirect/?domain=DyingAlone.net | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| https://www.freedompress.org.uk:443/news/feed/ | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| https://www.goblinscomic.com/category/comics/feed/ | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| https://www.loomio.com/blog/feed/ | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| https://www.newstatesman.com/feeds/blogs/laurie-penny.rss | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| https://www.patreon.com/graveyardgreg/posts/comic.rss | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| 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:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| https://x.com/statuses/user_timeline/22724360.rss | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| Humble Bundle Blog | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| I, Cringely | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| Irregular Webcomic! | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| Joel on Software | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| Judith Proctor's Journal | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| Krebs on Security | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| Lambda the Ultimate - Programming Languages Weblog | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| Looking For Group | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| LWN.net | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| Mimi and Eunice | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| Neil Gaiman's Journal | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| Nina Paley | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| O Abnormal – Scifi/Fantasy Artist | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| Oglaf! -- Comics. Often dirty. | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| Oh Joy Sex Toy | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| Order of the Stick | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| Original Fiction Archives - Reactor | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| OSnews | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| Paul Graham: Unofficial RSS Feed | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| Penny Arcade | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| Penny Red | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| PHD Comics | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| Phil's blog | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| Planet Debian | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| Planet GNU | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| Planet Lisp | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| Pluralistic: Daily links from Cory Doctorow | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| PS238 by Aaron Williams | XML | 08:35, Sunday, 16 August | 09:23, Sunday, 16 August |
| QC RSS v2 | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| Radar | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| RevK®'s ramblings | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| Richard Stallman's Political Notes | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| Scenes From A Multiverse | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| Schneier on Security | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| SCHNEWS.ORG.UK | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| Scripting News | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| Seth's Blog | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| Skin Horse | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| Tales From the Riverbank | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| The Adventures of Dr. McNinja | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| The Bumpycat sat on the mat | XML | 08:28, Sunday, 16 August | 09:08, Sunday, 16 August |
| The Daily WTF | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| The Monochrome Mob | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| The Non-Adventures of Wonderella | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| The Old New Thing | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| The Open Source Grid Engine Blog | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| The Stranger | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| towerhamletsalarm | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| Twokinds | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| UK Indymedia Features | XML | 08:14, Sunday, 16 August | 08:56, Sunday, 16 August |
| Uploads from ne11y | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| Uploads from piasladic | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |
| Use Sword on Monster | XML | 08:28, Sunday, 16 August | 09:15, Sunday, 16 August |
| Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily | XML | 07:56, Sunday, 16 August | 08:42, Sunday, 16 August |
| what if? | XML | 08:35, Sunday, 16 August | 09:16, Sunday, 16 August |
| Whatever | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| Whitechapel Anarchist Group | XML | 08:07, Sunday, 16 August | 08:56, Sunday, 16 August |
| WIL WHEATON dot NET | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| wish | XML | 08:00, Sunday, 16 August | 08:45, Sunday, 16 August |
| Writing the Bright Fantastic | XML | 08:00, Sunday, 16 August | 08:44, Sunday, 16 August |
| xkcd.com | XML | 08:21, Sunday, 16 August | 09:04, Sunday, 16 August |