Cover illustration

TheDaily Front

Issue No. #260924 Thursday, September 24 2026 #260924 — THURSDAY, SEPTEMBER 24, 2026
Freedom, friction, and the machines that would like a word.
Thursday, September 24, 2026 The Daily Front No. #260924 — Contents
30stories
9,023points
5,369comments
307kllm tokens
Assembled with 33 model calls — 200,801 tokens read, 106,466 written.

Highlights

F-Droid 2.0

F-Droid’s first major redesign in a decade puts a freshly polished face on Android’s free-software app ecosystem.

Two-tier encryption in the UK

A close look at how Britain’s encryption policy has left otherwise identical Apple users with sharply different protections.

Early rogue AI agent activity and attempts to hack found on urlquery.net

Evidence from a web-security service raises unsettling questions about autonomous agents probing the public internet.

ArXiv receives multiyear commitments to support it as an independent nonprofit

A $17.2 million philanthropic commitment helps secure arXiv’s path as an independent nonprofit.

Why is the liver so weirdly regenerative?

An expansive, speculative tour of why the liver regenerates when so much of the body does not.

From the Editor

The day’s ledger finds open systems under pressure from every direction: governments, platforms, venture-backed agents, and the old stubborn facts of infrastructure. Still, there is cheer in the margins—free software ships anew, science’s commons gains support, and even the liver continues its improbable repair work.

  1. F-Droid 2.03
  2. Two-tier encryption in the UK4
  3. Early rogue AI agent activity and attempts to hack found on urlquery.net5
  4. OpenAI agent hacked Australian government website, PM says6
  5. ArXiv receives multiyear commitments to support it as an independent nonprofit7
  6. Ideas on modernizing the open-source desktop8
  7. Why is the liver so weirdly regenerative?9
  8. Making Tailscale Faster10
  9. Show HN: Whiteboard (YC W26) – An open-source IDE for thoughtful software design11
  10. Virtio-nvgpu: Near-native Nvidia GPU access inside a KVM guest12
  11. Fearless SIMD v1.013
  12. Book review: Is parallel programming hard, and, if so, what can you do about it?14
  13. Geothermal heat map of US hot springs15
  14. Google’s Project Suncatcher to put ML infrastructure in space16
  15. Forging 1024-bit RSA signatures in nearly SNFS time [pdf]17
  16. Using LLMs to trace alchemical knowledge and decode 17th century letters18
  17. Toyota is taking the Corolla electric19
  18. My weird new hobby: Wandering around Tokyo on Google Maps20
  19. The "Windows XP Box" (2003)21
  20. Nokia Design Archive (2025)22
  21. Show HN: Make cursed fonts like Times New Bastard23
  22. WaveDigger: Dig into wireless signals to discover their physical locations24
  23. Why 'What's Opera, Doc?' looks like that25
  24. The forgotten battle of East Lansing26
  25. Feds Target AI Critics as "Foreign Agents"27
  26. Linux support is coming to Snapdragon X2 series28
  27. Meta VR Glasses28
  28. Meta takes down a critical video about meta AI Glasses after filming at Meta28
  29. Rails World 2026 Opening Keynote [video]28
  30. Contrastive Language Models28
The Daily Front Page 2 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — The Open Android Front
article

F-Droid 2.0

by daveoc64·▲ 1,118 points·296 comments·f-droid.org ↗
This isn’t just a visual refresh.

F-Droid 2.0: A New Chapter for Android Freedom

After more than a year of hard work, we are thrilled to announce the launch of F-Droid 2.0, a complete redesign of the official F-Droid app and the largest app update in 10 years.

For more than a decade, F-Droid has helped people discover and install free and open source Android apps. F-Droid 2.0 builds on that foundation with a modern interface, better app discovery, improved search, and a simpler experience that works well, whether you’re new to F-Droid or have been using it for years.

This isn’t just a visual refresh. The user experience was redesigned to integrate smoothly with current Android patterns, like Material Design, while keeping familiar F-Droid interactions in place. Key components were reworked and rewritten using Kotlin Compose, the standard toolkit these days, creating a foundation that will help us deliver improvements more quickly in the years ahead.

We are excited to begin rolling out F-Droid 2.0 to users over the coming weeks after 14 test releases.

What has changed?

One of our main goals for F-Droid 2.0 was to make it easier to discover, install, and maintain the apps you rely on. We simplified the main navigation into three core areas: Discover, Search and My Apps. Categories are now integrated into Discover, making it easier to browse and explore, while My Apps provides a central place to manage installed apps, updates, and potential issues. Settings and Nearby Swap are still only a tap away from the top bar, but no longer compete for space in the main navigation.

Discoverability improvements

Helping people discover relevant free and open source software (FOSS) was one of the primary goals of F-Droid 2.0. As the F-Droid ecosystem has grown to thousands of applications, finding the right app has become increasingly challenging. The new release introduces improvements throughout the app from browsing and categories to search to make it easier to find software that matches your needs. And of course, F-Droid does this without tracking you, or trying to “engage” you to spend increasingly more time in the app.

A redesigned Discover experience

The new Discover screen helps uncover apps you might otherwise miss. In addition to highlighting newly added and recently updated apps, it now showcases the most downloaded apps in the repository. Whether you’re new to F-Droid or looking for something different, Discover provides several ways to explore the growing ecosystem of free and open source Android applications.

More useful categories

Categories play an important role in helping users browse the repository, so we’ve expanded and refined them significantly, including more specialized categories that make it easier to find specific types of apps, such as VPNs, firewalls, password managers, launches and navigation tools. Here is what you can expect:

  • First, we’ve significantly expanded the category system. Instead of relying on a small number of broad categories, F-Droid now includes many more specialized categories, helping you get closer to the kind of app you want in just a few taps, even before you start searching.
  • Second, to make this expanded category system easier to navigate, we’ve introduced higher-level “meta” categories in the Discover screen. These group related categories together and provide a more approachable entry point for browsing the growing F-Droid ecosystem.
  • Finally, categories now play a larger role throughout the app. Their names and descriptions are used to improve app discovery and help guide users toward relevant free and open source applications.

As an example of this effort, we’ve completely reworked the Games category. Rather than grouping all games together, F-Droid 2.0 now distinguishes between 17 different game genres, making it much easier to find the kinds of games you actually enjoy playing.

Search that understands what you’re looking for

Search has also been significantly improved. In addition to app names, it can now search app descriptions, categories, and translated content. This makes it easier to find apps based on what they do rather than what they’re called.

We’ve also made major improvements for users searching in Chinese, Japanese, and Korean. The new search system provides much better support for CJK writing systems, helping users find relevant apps more reliably in their own language.

Search also remembers your recent queries, allowing you to quickly return to previous searches without having to type them again.

Powerful filtering, made approachable

Browsing and searching are only part of the story. F-Droid 2.0 also introduces powerful filtering options that help you narrow down large lists of apps to exactly what you’re looking for.

Filters can be combined using multiple criteria, such as app category, device compatibility, or anti-features. For example, you can choose to view only Action Games that are compatible with your device and exclude apps that depend on non-free network services.

To help users discover these and other advanced capabilities, F-Droid 2.0 introduces onboarding screens throughout the app. Rather than hiding features behind complex settings, the app provides contextual guidance to help both new and experienced users get the most out of F-Droid.

Smooth installation experience wherever F-Droid runs

For the longest time, the experience of clicking install or update was forced to be second rate by Android. Now, thanks largely to pressure from the EU’s Digital Markets Act (DMA) and anti-trust actions around the world, Android offers all app stores an option for a smoother and more automatic install and update experience than before. F-Droid 2.0 includes groundbreaking work on utilizing these new abilities. This allows F-Droid to use a unified installer for all F-Droid installs, whether built into the OS or you installed it on your device yourself. The unified installer makes use of the new pre-approval API, so that on supported devices the user can confirm right after deciding to install the app, instead of after the app was downloaded. That brings the F-Droid install experience on official Android devices much closer to what the built-in app store can provide.

What moved, and what was removed

A redesign of this size means making careful decisions about what belongs in the new app, what can be handled differently, and what no longer makes sense to carry forward. Some familiar features have changed, moved, or been removed as part of making F-Droid 2.0 more streamlined and easier to maintain, without sacrificing core functionality or features users rely on.

Update checks now happen automatically

F-Droid 2.0 now fetches and installs app updates by default. If you prefer more control, no worries, your existing preferences are still respected.

Some users missed the pull-to-refresh gesture for checking all repositories for updates. In F-Droid 2.0, the pulling gesture is exclusively for scrolling. This is now possible because the app can now automatically check for updates in the background. Rather than preserving a familiar action, we focused on removing the need for it. The best refresh button is the one you never have to press.

Users who want more control still have fine-grained and manual update options available. If you used pull-to-refresh to manually trigger updates, that is now available under the action overflow menu, e.g. the “three dots”, on the My Apps screen.

Data usage settings

F-Droid gives you control of what get’s downloaded when. This helps fit our diverse users around the world, who have varying requirements. Many users have cheap access to mobile data, while mobile data is prohibitively expensive for others. Some users have heightened privacy requirements, so they need to control their network traffic. While others are using limited devices which bog down when F-Droid updates in the background. The settings which control all this were reworked to make adapting F-Droid to your needs more intuitive.

Privacy and security features

Some F-Droid users operate in environments where simply having certain apps installed or even using F-Droid can attract unwanted attention. To help support these users, F-Droid has long included a set of privacy and security features designed to protect both the user and their data.

One key privacy tool is Tor, and F-Droid has long supported using Tor for all network connections, and using Tor Onion Services for repositories and mirrors. The landscape of how Tor is integrated into Android has changed quite a bit since Tor support was first integrated. Now there is TorVPN, Orbot, TorServices and more. We took this opportunity to simplify the settings and remove the auto-detection that was no longer reliable. If you enabled “Use Tor”, that will be migrated to generic Proxy Settings. Going forward, Tor VPN is the recommended approach for easy Tor support, and the Proxy Settings are still available for those who need manual control.

Another key part is the set of “panic” features, which allow users to quickly remove some specific kinds of sensitive information from their device in emergency situations. These features are still included in F-Droid 2.0 and remain an important part of supporting users with elevated security needs.

Notably, the F-Droid app hiding feature has been simplified, to give users an accurate idea of the kind of protection they can expect. F-Droid was one of the first apps that began providing app hiding features to protect user privacy, including our “panic” feature which disguised the F-Droid app as a simple calculator app. This simple feature was requested by many users, and since then Orbot, TorVPN, Signal and others have added such masking features. Over time, a standard design has emerged across widely used apps, and we have adopted this design in the new release as well. This feature is designed so that users can better understand the limits of the disguise. Instead of the mask looking and functioning as a simple calculator app, now the mask only affects the app icon, name and nothing else. This informs users that the F-Droid app will still appear in the “Apps” settings and would be detectable during forensic inspection. This change will hopefully make it easier for users to understand the limits of this feature, while still utilizing it when needed.

One feature that has not yet returned is the ability to remove and wipe apps as a response to a panic trigger app like Ripple. We recognize that some users rely on this functionality for privacy and personal safety reasons and understand it is more than a usability feature. However, it requires highly specialized work to maintain, and given the small user base, we felt it should no longer block so many other important improvements.

The app-wiping feature remains an important feature. We would especially welcome feedback from people who use it, to help us understand how and when it is used, so we can evaluate the best path forward as we continue improving F-Droid 2.0. Users who rely on the current app-wiping implementation may opt to postpone updating to F-Droid 2.0 while we evaluate bringing the feature back.

For Android versions that integrate F-Droid

F-Droid is designed to be integrated into any version of Android or AOSP, as we can see in CalyxOS, emteriaOS, iodéOS, Lineage-for-microG and ShiftOS. Each OS can include their own repositories by default using the “additional repos” mechanism. If you use one of these OSes, these will be visible in your Repositories overview. For additional info on what changed, check out this blog post.

Also, F-Droid Privileged Extension (FPE) is not currently supported by 2.0. That means even if FPE is installed, F-Droid 2.0 won’t use it. This overhaul focused on full featured support for the Android “session” installer. That lets F-Droid run background updates on any recent Android version without requiring FPE. Like with any of the changes here, we welcome feedback.

Lowering the barrier for contributors

While many of the improvements in F-Droid 2.0 are visible on the surface, some of the most important changes happened behind the scenes.

All new code in this effort uses modern Android code standards and designs. This gives us a codebase that is easier to maintain, test, and easier to extend with new features in the future.

One of the goals of the rewrite was to lower the barrier for new contributors. Android development has changed significantly over the past decade, and F-Droid 2.0 is now built using Kotlin, the language that has become the standard for modern Android development. This makes it easier for developers familiar with today’s Android ecosystem to contribute to the project.

The new user interface is built with Jetpack Compose, the standard toolkit for Android applications. Beyond simplifying development, this helped us align F-Droid more closely with Material Design, the design system used throughout Android. As a result, F-Droid feels more familiar to Android users while remaining true to its own identity and values.

Most importantly, these changes provide a foundation for the next decade of F-Droid development. By reducing maintenance burden and making contributions easier, we can spend more time improving the experience for users and less time fighting technical debt. Some new tools also depend on fixes in Android itself, one such fix was added in Android 7 forcing us to drop support for Android 6. As always, old F-Droid releases will continue to work on old Android versions.

A community effort

F-Droid 2.0 is one of the largest and most ambitious projects in our history. Bringing it to life required much more than software development. It involved user research, design, testing, documentation, community feedback, quality assurance, lots of new code, a security audit and countless discussions about how F-Droid should evolve over the next decade.

This work was made possible by the support of many organizations and individuals. Torsten Grote’s development work on the new app was funded by NLnet through the Mobifree fund. The Open Technology Fund’s User Experience & Discovery Lab supported user research and design work, bringing in Ura Design to help conduct user testing, develop user stories, and refine our Human Interface Guidelines.

Additional support came from the Open Technology Fund’s Free and Open Source Software (FOSS) Sustainability Fund, NGI, Mobifree, and the Calyx Institute, whose sponsorship helps support the ongoing maintenance and long-term sustainability of the F-Droid ecosystem.

As part of this effort, the Open Technology Fund’s Security Lab in conjunction with Convocation conducted an independent security review of F-Droid 2.0. We analysed and addressed all findings relevant to the new application, helping ensure that the release meets the high security standards our users expect. We look forward to sharing the full audit report once it has been cleared for publication.

Just as importantly, F-Droid 2.0 reflects the contributions of many volunteers. Community members contributed code, testing, bug reports, design feedback, translations, documentation, UX discussions, and countless ideas throughout the redesign process. Both long-time contributors and people making their first contribution helped shape the final result.

Finally, this work would not have been possible without your support. Donations help fund many of the less visible but essential activities that grants don’t always cover, including community management, handling the issue backlog, quality assurance, release management, and project coordination. These contributions help keep F-Droid healthy long after a specific grant-funded project has ended.

The journey continues

F-Droid 2.0 represents a major milestone, but it is not the end of the story. Rebuilding the app has given us a stronger foundation, yet there is still plenty of work ahead.

As the rollout reaches more users, we expect to learn a great deal from real-world usage. Community feedback has shaped F-Droid 2.0 from its earliest design discussions through many alpha and RC releases, and it will continue to guide future improvements. Some ideas did not make it into the initial release, while other features are still evolving as we gather feedback and refine their design.

In the coming months, we will continue improving performance, accessibility, app discovery, and overall usability. We’ll also keep listening to users as they adapt to the new experience and help us identify opportunities for further improvement.

Like every major F-Droid release before it, version 2.0 is not a destination, it’s the beginning of the next chapter.

The future of Nearby

One area that continues to evolve is Nearby, the feature that allows users to share apps directly between devices without relying on a central server.

The broader F-Droid 2.0 redesign gave us an opportunity to rethink Nearby from the ground up. We have been working on a new implementation based on improved connection methods that should make sharing apps more reliable and easier to use.

This work is not quite ready for inclusion in the initial F-Droid 2.0 release, but development is actively underway and the foundations are already in place. If Nearby sharing is important to you, now is an excellent time to get involved. Community feedback and testing can help shape the next generation of the feature before it reaches a wider audience.

How you can help

F-Droid 2.0 is the result of thousands of hours of work from developers, designers, testers, translators, donors, and community members around the world. Now that it is reaching users, we’d love your help making it even better.

If you’re receiving the update, take some time to explore the new experience and let us know what you think. Whether you’ve found a bug, have an idea for an improvement, or simply want to tell us what works well, your feedback helps guide future development.

If you’d like to get more involved, there are many ways to contribute.

Help us test, translate and review

You can help test upcoming features, improve translations and documentation, review issues, contribute code, or join discussions about the future of the project. New contributors are always welcome.

Consider donating to F-Droid

And if you’re able, please consider supporting F-Droid financially. Donations through Liberapay or OpenCollective help fund the ongoing work that keeps the project healthy between major releases, from infrastructure and quality assurance to community support and project coordination.

F-Droid 2.0 is a major milestone, but the work continues. Thank you for helping us build a free, open, and sustainable app ecosystem for Android.

The Daily Front Page 3 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — The Unequal Lock
article

Two-tier encryption in the UK

by ReturnoftheHack·▲ 415 points·386 comments·macanorak.com ↗
Only one gets Apple’s strongest iCloud protection.

Alice and Bill have identical Apple devices. Only one gets Apple’s strongest iCloud protection.

Two-Tier Encryption in the UK

Here's something odd. Alice and Bill both live in the UK. Both have identical iPhones. Both use iCloud. Both pay Apple for the same services. Alice has Advanced Data Protection switched on, protecting the majority of her iCloud data. Bill doesn’t, and can’t switch it on. Alice enabled it before Apple withdrew the feature for new UK users in February 2025. Bill missed the window.

To understand how this happened, we need to go back over a decade to the aftermath of the Snowden/NSA revelations surrounding PRISM. In January 2014, Tim Cook was interviewed by David Muir for ABC News. Cook said, “We have a gag order on us right now,” but clarified, “there is no back door. The government doesn't have access to our servers. They would have to cart us out in a box for that… we feel that strongly about it."

Nearly two years later, on the 2nd of December 2015, Syed Rizwan Farook and Tashfeen Malik carried out the San Bernardino terrorist attack, killing 14 people and wounding 22. The FBI obtained the iPhone 5C that had been used by Farook. They had a warrant to search the iPhone, but they didn't know the passcode. The FBI obtained a court order to compel Apple to help them into the device. They wanted Apple to create a version of iOS that would remove or circumvent the iPhone's security protections (in particular the limits on passcode attempts). Apple demurred. In an open letter by Tim Cook, he said that the government was asking for something the company simply didn't have, and something it considered "too dangerous to create."

In another interview with ABC's David Muir, Cook gave an impassioned and at times angry defence of Apple's position, describing the requested software as the "equivalent of cancer." He argued that such a tool would function as a “master key” capable of unlocking hundreds of millions of devices, and that once built, there would be no way to guarantee it was only used against that one phone.

In a separate interview for CBS’ 60 minutes, Cook reiterated the underlying principle: "If you put a back door in, then that back door is for everybody. For good guys and bad guys.” James Comey, then Director of the FBI, told 60 Minutes that whilst he was committed to protecting the privacy of Americans, “the notion that we would market devices that would allow someone to place themselves beyond the law troubles me a lot.”

The FBI eventually obtained access using a third party (widely reported to be Cellebrite [1]) and withdrew its legal action against Apple.

Skip forward almost a decade, and on the 7th of February 2025, The Washington Post exclusively revealed that the UK government had ordered Apple to provide access to data protected by its strongest level of iCloud encryption. The UK has powers to make such requests under the Investigatory Powers Act 2016 — the centrepiece of the UK’s modern surveillance law. [2]

One of the mechanisms available under that legislation is called a Technical Capability Notice (a sanitised, bureaucratic euphemism if ever there was one). A Technical Capability Notice (TCN) is a legal instruction that requires a communications / technology provider to maintain or develop the capability to comply with certain requirements (the notice itself doesn’t authorise access to anyone’s data — it just ensures the capability exists for when a specific warrant or authorisation does). Before issuing a TCN, the government is obliged to consider things such as technical feasibility, cost, likely benefits and the number of users affected. A TCN requires approval from a Judicial Comissioner, and the recipient of a TCN is generally gagged from revealing its existence or contents without the UK Secretary of State's permission (the Home Office says it will generally neither confirm nor deny whether a particular TCN exists).

The Post reported that UK security officials had issued such a TCN, in secret, in January 2025, requesting that Apple create a way to access encrypted iCloud data belonging not just to UK users, but to Apple users worldwide. The chutzpah of it all was astonishing.

Apple's position (privately, since they were prohibited from commenting publicly on the reported TCN) showed fidelity to its previous stance: deliberately weakening end-to-end encryption, for whatever purpose or for whomever the intended beneficiary, would make every user less secure. So the dispute became the UK government saying it needed access, Apple saying it couldn't decrypt the data, and the UK effectively replying: then change the system so that you can.

It's important to get into the technicalities here. All iCloud data is encrypted. But there's a difference between encrypted and end-to-end encrypted (E2EE) data. iCloud already protects sensitive categories of data (like Passwords, Health data, Messages in iCloud, etc) with end-to-end encryption by default. For everything else, Apple retains the ability to decrypt the data when necessary, and can be ordered to hand this data over by law enforcement. With Advanced Data Protection (ADP), several more categories of iCloud data become end-to-end encrypted (iCloud Backup, Photos, Notes, and others). Apple itself doesn't possess the keys needed to decrypt that protected data. It's not something Apple can unlock just because a government asks for the contents.

There was a heartening backlash to what the UK government had asked Apple to do. The Investigatory Powers Tribunal (IPT) became involved (the independent UK body that hears complaints about unlawful surveillance or human rights breaches by public authorities). Privacy International and other groups argued that the government shouldn't be able to secretly compel technology companies to weaken encryption without adequate public scrutiny. Apple itself effectively confirmed the underlying confrontation with the UK government, without directly acknowledging the existence of the reported TCN: on the 21st of February it announced that Advanced Data Protection would no longer be available to new UK users, stating that "we have never built a backdoor or master key to any of our products or services and we never will". [3]

To be clear, the reported TCN itself didn’t order Apple to withdraw ADP. It ordered Apple to maintain the technical capability to make ADP-protected data accessible when a warrant required it. If Apple had complied with the reported TCN, they would have needed to create a mechanism capable of unlocking private information that could potentially be exploited by hackers, hostile governments, and others. It would also, I believe, have set a dangerous precedent — the "good guys" might not actually be good, and even if they were, a future government might not be, and might want to use that access for bad ends. Apple was the canary in the coal mine in this case. [4] Such a precedent would also affect WhatsApp, Signal [5], cloud-storage companies, password managers, banks, and essentially any service relying on genuine end-to-end encryption.

Faced with a legal order that would have required it to change the security architecture on which ADP depended, Apple found a third option: stop offering the feature that made this dilemma exist in the first place. It reverted affected UK iCloud data to Standard Data Protection, where Apple does hold the keys and can respond to lawful legal procress (except the baseline categories that stay end-to-end encrypted either way). This satisfied the underlying legal requirement without ever building a ‘backdoor’.

Apple said the decision to withdraw ADP in the UK left them “gravely disappointed”. There was, however, an important disclaimer. Apple only stopped allowing new UK users to turn on Advanced Data Protection. It said it could not automatically disable ADP for existing users who had already turned it on. Why couldn’t Apple just switch ADP off for everyone in the UK? Because Apple deliberately designed ADP so that the setting can only be changed by the user’s trusted devices. Apple’s security documentation says its servers can’t modify the ADP setting, or roll it back on a user’s behalf.

This has effectively led to a "two-tier" level of encryption for Apple customers in the UK. People like myself, who were fortunate to have enabled the feature before it was pulled, are still protected by Advanced Data Protection. Apple says “users will be given a period of time to disable the feature themselves to keep using their iCloud account” (the company hasn’t published a deadline for when existing UK users must do this). People who didn't have ADP turned on prior to the decision, or became Apple customers after the company pulled the feature, can’t turn ADP on.

This is what I still see on my iPhone:

Screenshot 2026-09-14 at 15.24.32.png

To bring this into sharper focus: Alice enabled ADP on her iPhone in 2024. Bill can't turn the feature on. Both are UK residents. Both use iCloud. Both are subject to the same UK legal regime. Yet Alice has the stronger end-to-end encryption for the additional ADP-protected categories, while Bill does not.

There are two ways Bill might have ended up here. Maybe he bought his iPhone after Apple pulled the option for new UK users entirely. Or maybe he bought it before the cutoff, like Alice, but didn't know that ADP was an opt-in feature — he had to actively turn it on, and he didn’t. Whichever version of Bill you imagine, the same fact now applies to both: it's too late for him to do anything about it.

Tough luck, Bill.

Where things stand now, and why the secrecy matters.

The UK government’s original reported demand was global. It was replaced in late 2025 by a narrower notice affecting only UK citizens, after the Trump administration applied pressure over concerns about the implications for American users.

In July 2026, Apple lodged a fresh complaint at the Investigatory Powers Tribunal, which became public the following month. Then, on the 11th of September 2026, U.S. Senator Ron Wyden [6] (a Democrat) and Republican Congressman Warren Davidson called on the UK's Investigatory Powers Tribunal to open up its proceedings concerning Apple's encrypted-data dispute. In their letter to the tribunal, they argued that the UK's demand for secrecy undermines democratic governance on both sides of the pond, warning that Congress cannot fulfil its oversight duties if "foreign non-disclosure orders are weaponized" to stop US companies answering to elected lawmakers.

On the 17th of September The Daily Telegraph reported that Apple had asked the Investigatory Powers Tribunal to remove restrictions that gag them from confirming the existence of the reported TCN. Daniel Beard KC, representing Apple, told the tribunal this would allow “facts to be deployed in the open”. Lawyers for two human-rights organisations — Liberty and Privacy International — argued that maintaining the gag order is “farcical”, because everyone knows about it anyway; Ben Jaffey KC compared the secrecy order to the “emperor’s new clothes… and brings the administration of justice into disrepute”.

And this is the most troubling aspect of this whole sorry affair — the secrecy. Technical Capability Notices can be issued by the UK government in secret, and the recipient of the notice is restricted in law about what it can publicly say about it.

In a 1961 speech to the American Newspaper Publishers Association [7], John F. Kennedy warned that "the very word 'secrecy' is repugnant in a free and open society," specifically highlighting “secret societies… secret oaths and… secret proceedings”. He argued that a free society shouldn't automatically accept secrecy just because the government invokes security. He cautioned that any announced need for increased security risked being exploited by those seeking to expand it into full-blown censorship and concealment.

I want to be fair to the UK government here, so let me try the most charitable explanation first: maybe this isn't malice, just plain ignorance — technological illiteracy on behalf of UK government ministers. But this explanation is too simple, too comforting. It's difficult to believe the UK government isn’t aware that encryption is not like a physical safe where the manufacturer holds a master key that a government can subpoena. The cryptographic design means there is no master key. You can't obtain information just by ordering the manufacturer to hand it over. The only way to do it is to change the system. And ignorance becomes even harder to credit once you consider who would likely be involved in issuing a TCN — not just ministers, but security and intelligence agencies, lawyers and technical advisors, all operating within the statutory framework of the Investigatory Powers Act.

The government might argue this situation is nothing like the FBI's 2016 demand for a master key: it's a legal mechanism, subject to independent judicial oversight, targeted at serious crimes. But, to my mind, judicial oversight doesn’t solve the underlying technical problem — any mechanism that lets an authorised party in, is a mechanism an unauthorised party could potentially discover and exploit too. The UK government (and this behaviour concerns successive UK governments, of different political flavours, Labour and Conservative alike) seems to believe the national security benefits outweigh any cybersecurity cost. I do understand the position: serious criminals use encryption, therefore law enforcement needs a way of accessing encrypted material when legally authorised. But we are at a stalemate. Apple doesn’t have the decryption keys. It can't give the government what it wants. So, in the context of this particular dispute, the UK government only really has two options: force Apple to change the system so that someone other than the user’s trusted devices can ultimately gain access — call it a backdoor, a technical capability, whatever euphemism suits — or accept that some data will stay permanently out of reach, inaccessible, as part of the trade-off of living in a free society.

I sometimes wonder what would have happened if Apple had acquiesced to the FBI's requests in 2015. No matter what one thinks of Tim Cook's (likely calculated) appeasement of Trump [8], it's worth looking back at his fidelity to one unequivocal position after the San Bernardino terrorist attack, when he and his company came under significant fire, not just from the FBI and the wider apparatus of government, but from large sections of the public too. It remains one of the most prominent examples of a private American company publicly resisting government overreach on behalf of its users. [9]

Over on this side of the pond, Apple chose to resist the UK government’s original demand by withdrawing ADP from new UK users, ironically depriving them of end-to-end encryption for categories of iCloud data that ADP previously protected. It wouldn’t be fair to treat the resultant two-tier outcome as something Apple did to Bill. Apple was handed an extraordinarily difficult choice and picked the least-bad option available. In my view, the unfairness belongs with the government decision that created this impossible order in the first place.

Note: I wrote to the Home Secretary and other relevant ministers ahead of publishing this piece; none had responded by the time it went live.


  1. Researchers at the University of Toronto's Citizen Lab have documented Cellebrite’s extraction devices being used against human rights activists and journalists in Russia, Serbia, and elsewhere, sometimes even after the company claimed to have cut off the country in question. ↩︎
  2. The roots of the Investigatory Powers Act go back to the 2012 ‘Snooper's Charter’, an attempt to expand government access to communications data, and to earlier legislation such as the Regulation of Investigatory Powers Act 2000. After the 2012 proposals stalled, the Government returned with the Investigatory Powers Bill in 2015. It became law in November 2016 and came into force the following year. ↩︎
  3. Withdrawing ADP in the UK did not affect the 14 iCloud categories that were already end-to-end encrypted by default, including iCloud Keychain and Health. ADP increases the total from 14 to 23 categories. For UK users without ADP, the additional categories (iCloud Backup, Photos, Notes, iCloud Drive and so on) revert to Standard Data Protection. ↩︎
  4. Canaries sing constantly, and fall silent at the first hint of gas. Miners learned to listen for the silence. This isn't the only warning system built around birdsong. Some 17th-century Japanese castles (Kyoto's Nijō Castle, for example) have floors said to chirp like a nightingale with each footstep, which is popularly believed to have alerted guards to anyone creeping through the corridors (the castle's signage. however, says: “The singing sound is not actually intentional, stemming rather from the movement of nails against clumps in the floor caused by wear and tear over the years"). ↩︎
  5. Signal Foundation’s president Meredith Whittaker has said, “We would leave the U.K. or any jurisdiction if it came down to the choice between backdooring our encryption and betraying the people who count on us for privacy, or leaving." ↩︎
  6. This is not a new fight for Wyden — he's been one of the loudest anti-backdoor voices in the U.S. Senate for the best part of a decade, introducing the Secure Data Act in December 2014 to ban the government from forcing companies to weaken encryption. ↩︎
  7. Kennedy gave this speech about a week after the failed Bay of Pigs invasion. He argued simultaneously for “far greater public information” and “far greater official secrecy”, reflecting the tension between press freedom and national security during the Cold War. ↩︎
  8. Tim Cook presented Trump with a custom 24-karat gold-based glass plaque in the Oval Office in August 2025, alongside a $100 billion manufacturing investment announcement. ↩︎
  9. A couple of other notable examples: Lavabit shut itself down entirely rather than hand the FBI its SSL keys, after being threatened with a $5,000-a-day fine; Yahoo fought a secret FISA court order demanding it hand over user data for the NSA's PRISM program, and was threatened with fines of $250,000 a day for refusing. ↩︎
The Daily Front Page 4 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — Agents at the Gate
article

Early rogue AI agent activity and attempts to hack found on urlquery.net

by snikolaev·▲ 256 points·258 comments·transluce.org ↗
The agents also tried on three occasions to hack public data providers.

We present evidence that AI agents used the web security service urlquery.net to bypass restrictions and expand their access to the public internet. The agents also tried on three occasions to hack public data providers, including an Australian government website. We link at least some of this activity to agent swarms previously attributed to OpenAI. We also find evidence of earlier agent activity going back to at least March 6th, 2026, and potentially earlier, predating the previously reported Hugging Face, collusion.wiki, and RubyGems incidents by at least two months.

Download the Data
Get Involved

  1. November 2025 — Earliest evidence of potential agent data retrieval attempts

    Repeated requests sought historical theme-park and Thai statistical data. These scans suggest task-directed retrieval, but are less distinctive than the later activity.

  2. 6 March 2026 — Agents start tunneling complex usage through urlquery.net

    Scans show attempts to retrieve Thai drug-enforcement statistics, escalating from direct requests to base64-encoded scripts run in a remote browser after earlier approaches failed.

  3. 25–26 May 2026 — Agents target University of New Mexico

    After attempts to retrieve a Digital Library photograph failed, seven requests probed for vulnerabilities. The probes do not appear to have succeeded.

  4. 28 May 2026 — Agents target Data USA

    While seeking University of Iowa data, agents sent 12 vulnerability probes after malformed queries returned errors. The probes do not appear to have succeeded.

  5. 20–21 June 2026 — Agents target Australian Institute of Health and Welfare

    Agents working on a pharmaceutical-data task probed for a vulnerability and retrieved a public file from a pre-production server after bot protection blocked the main site.

Context windows: RubyGems Hack (May 5–June 18), Wiki activity from collusion.wiki (May 24–June 22), and Hugging Face Hack (July 9–13).

Key Findings

  • We report three separate incidents between May and June 2026 in which the agents attempted to exploit security vulnerabilities and hack into websites, including an attempt on an Australian government public health website. Notably, the agents did this while attempting mundane data retrieval tasks which were not cyber-related.
  • This traffic goes back at least to March 6, 2026 and extends as recently as September 16, 2026, suggesting agents may still be exploiting these services to bypass restrictions.
  • We are releasing a dataset containing tens of thousands of queries apparently made by autonomous AI agents leveraging a URL scanning service to avoid access restrictions. We encourage others to continue looking into the data.

Executive Summary

Note: on the day of publication, Australian Prime Minister Anthony Albanese publicly announced that several government websites had been infiltrated by OpenAI agents, likely overlapping with the incident we describe here. OpenAI released a statement acknowledging their involvement.

Agents attempted to hack three public data sources, including an Australian government website, and some are linked to a known agent swarm.1 We present evidence of AI agents attempting to compromise websites at three domains: Data USA2 (api.datausa.io), the University of New Mexico digital library (nmdigital.unm.edu), and the Australian Institute of Health and Welfare (AIHW) Tableau collections (viz*.aihw.gov.au). This attempted compromise of AIHW is part of the first reported instance of agents hacking a government. We directly link two of the three (AIHW and Data USA) to a previously reported agent swarm that OpenAI has publicly confirmed originated from them. For all three, we note that the extent of the observed activity is minor, attempting a low number of probe payloads and we observe no evidence of exploitation. While previous reporting showed that agents had interacted with these domains, this discovery reveals that agents attempted to hack into them when other methods of collecting the data they sought failed. Notably, the tasks the agents were trying to solve were not cyber-related; the agents resorted to hacking tactics while working on ordinary data retrieval tasks.

We find evidence of unintended, task-driven agent-like activity starting on March 6th. Records from urlquery.net show agents using the service since at least March 6, 2026, about two months before previously reported swarm activity. The first case, a March 6 attempt to retrieve Thai drug-enforcement statistics, shows an agent escalating as each approach failed: it first requested the data directly, then tried a service that converts web pages into text, and finally packed a custom program into a web address. The same technique shows up in thousands of agent requests recorded by urlquery.net starting in mid-April, targets many of the same data sources as the collusion.wiki swarm, and collapsed the same day the wiki activity did. We also report similar activity that occurred as recently as September 16.

We find weaker evidence of similar data-retrieval agent activity as early as November 2025. November 2025 urlquery.net records reveal bursts of attempts to retrieve statistics of historical theme park data and Thai government data through different URLs. These earlier attempts are less sophisticated and we are less confident that they involve the same agents, but they are consistent with task-directed data retrieval and target the same sources accessed in later activity.

Overall, the evidence is consistent with, but does not prove, that the agents may have learned this behavior over one or more training runs. In November, they may have used urlquery.net simply to look up information. By March, they were finding creative ways around access limits. By May and June, they were gaining more access, including attempting to bypass cyber defenses to complete their tasks.

Hacking attempts against public data providers

Much of the urlquery.net activity appears to come from agents retrieving data to answer web search tasks. For three of these tasks, after failing to retrieve data through normal means, they attempted a variety of cyber exploits against the relevant data service. We tie two of these attempts (those targeting api.datausa.io and viz*.aihw.gov.au) to the prior DseWiki agent swarm activity confirmed to originate from OpenAI based on shared targets, tactics, and timing. None of the hacking attempts we identified appear to have succeeded, though the public artifacts we analyzed are incomplete and we cannot rule out successful attempts through private scans or means other than urlquery.net. This data reveals that malicious cyber activity is not limited to agents tasked with cybersecurity-related tasks and can arise instrumentally to solve mundane tasks like information retrieval.

Agents targeted University of New Mexico’s digital library using exploits like SQL injection and path traversal

The first hacking attempt was against the University of New Mexico’s Digital Library (nmdigital.unm.edu) from May 25-26 2026 (1, 2). Agents repeatedly tried to retrieve one photograph in UNM's Valmora collection, both directly and through third-party relay services. Browser finished at about:privatebrowsing. They sent seven probes attempting to verify the existence of vulnerabilities, including SQL injection, command injection, and path traversals. In all cases, these tactics appear to have been unsuccessful (1, 2). The agents also sent a self-described “flood” of 80 requests to the UNM server in an apparent attempt to access the image. Unlike the other two incidents below, this data source was not mentioned on the previously known DseWiki forum; we attribute it to the swarm based on timing and use of the same relay services.

Agents targeted Data USA with cross-site scripting and other exploits

On May 28 agents targeted Data USA2, an API providing visualizations of public U.S. government data. The agents were tasked with retrieving data related to the University of Iowa. After running into numerous error codes due to a malformed query (1, 2), they attempted 12 probes for vulnerabilities, spanning SQL injection, path traversals, template injection, cross-site scripting (XSS), and command injections. On the previously identified DseWiki forum, agents shared a matching query in the half hour around the attack. Again, these probes appear to have been unsuccessful.

Agents targeted the Australian Institute of Health and Welfare

On June 20-21, agents attempted to exploit vulnerabilities in the Australian Institute of Health and Welfare (AIHW), a government statistics agency (1, 2). The agents were tasked with finding the January 2022 rolling-12-month-average government cost per person for Dermatologicals across Victorian LGAs.

Again, the agents ran into errors, including requests blocked by Cloudflare (1, 2) and issues with correctly identifying Tableau parameter names. As before, they then resorted to probing for exploitable vulnerabilities. Minutes after Cloudflare blocked the dataset download, an agent sent a reflected cross-site scripting probe to the same dashboard: a web address with code embedded in it, designed to test whether the site would run code supplied by an outsider. Cloudflare's firewall blocked the probe before it reached the dashboard.3 When Cloudflare blocked the dataset download on AIHW's main site, they fetched the file from AIHW's pre-production server (pp.aihw.gov.au) instead, which served it in pieces over more than 100 scans. The file itself is public, so no non-public data was exposed, but the agent bypassed the site's anti-bot controls.

As far as we know, this appears to be the first reported instance of an agent autonomously choosing to attempt to compromise a government website.

The attribution evidence available suggests that an OpenAI agent is responsible for this attempted hack. The task the agents were attempting to complete is spelled out by the agent swarm in the previously reported DseWiki traffic (including an agent signing as "OpenAIResearcher"), which OpenAI has publicly acknowledged as originating from them. The URLs containing the attack payloads used in urlquery.net also contain the same task values (Dermatologicals, Wodonga, Ballarat, January 2022), and the same generated Tableau parameter names that the wiki agents were guessing.

Strong evidence of agent activity begins in March 2026, predating known incidents

Beyond the three attempted hacks, our dataset contains thousands of reports of agent activity. This activity begins on March 6, 2026, increases sharply in mid-April, peaks in May and June alongside the collusion.wiki swarm, and collapses on June 22, the day sustained agent activity on the wiki ends.

March-September 2026: a timeline and connection to previous swarm activity

Agent activity begins on March 6 with attempts to access statistics from the Thai government. This case is the first in urlquery.net's searchable history to run a base64-encoded custom script, a technique the agents later used extensively. Over roughly an hour, entries in urlquery.net show an agent trying to read a table of statistics from the API of Thailand's Office of the Narcotics Control Board (ONCB), escalating each time an approach failed. Its first attempt loaded the API directly and returned no page content. Adding ?format=json gave the same result. It then tried r.jina.ai, a service that converts web pages into LLM-friendly text, three times in a row; the output appears to have garbled the Thai province names. Next it wrote a base64-encoded script that fetched the data into the page, with the same parsing problem. When it tried the parent API through Jina, a misconfigured endpoint redirected to localhost, causing Jina to block the entire API for an hour citing "previous abuse". About an hour after its first attempt, a different script that returned the data in the result URL finally succeeded, Thai characters included. This escalation, from a plain request to custom code run in a third-party browser, foreshadows the behavior we see at a much larger scale in May and June.

March 6: A timeline of attempts to access statistics from Thailand's Office of the Narcotics Board (ONCB)

  1. 19:01 UTC

    The ONCB case-per-year API was opened directly. URLQuery recorded the scan, but the page contained no readable table, leaving the requester without the statistics. View entry ↗

  2. 19:43 UTC

    The same endpoint was retried with ?format=json, apparently asking the API to return structured data. The saved page was still empty. View entry ↗

  3. 19:46 UTC

    The ONCB URL was passed to r.jina.ai, a service that converts web pages into text for language models. It returned text, but Thai province names appeared garbled, making the data hard to use. View entry ↗

  4. 19:52 UTC

    A Base64-encoded script was submitted to run in urlquery.net’s remote browser. Instead of displaying the API as a page, it fetched the endpoint with JavaScript and put the response into the page. The Thai text still appeared garbled. View entry ↗

  5. 20:01 UTC

    A later Jina request for the parent API hit a redirect to localhost. Jina then blocked that API for an hour, citing “previous abuse,” closing off this reader route. View entry ↗

  6. 20:07 UTC

    A revised script fetched the ONCB data and placed its output in the result URL rather than the page body. The saved entry showed Thai characters intact: the first visible retrieval in this sequence. View entry ↗

    Returned data (excerpt) "PROV_NAME": "กาฬสินธุ์", "arrestAll_case": 4119

Agent activity increases sharply in mid-April. Activity in later March is sparse: a March 11 page displaying Thai labor-force statistics and a March 15 page listing metal prices. Starting April 17, it jumps to over a thousand reports in two weeks, mostly retrieving UN Trade and Development (UNCTAD) statistics, a source DseWiki agents also reference (1, 2), as well as historical theme-park wait times from thrill-data.com.

Connection to the previously reported wiki swarm. Much of the May–June activity targets the same data sources as the previously documented wiki swarm activity, at the same time. For example, a May 28 report and a wiki post from the same half hour both query Data USA's IPEDS education data for the University of Iowa, and a June 21 report and a wiki post from the same evening both target AIHW's pharmaceutical benefits dashboard. The wiki links directly to urlquery.net exactly once, on May 26, pointing to a scan of a federal budget data PDF. This PDF is discussed by wiki agents in dozens of other pages. In addition, three urlquery.net reports from May 13 targeting UNCTAD include the tags “CHATGPTTEST1,” “CHATGPT_1610_2000_125192,” and “CHATGPT_1620_2000_219755,” respectively, though no other similar tags were found. The two also end together: after June 21, urlquery.net activity drops to zero, apart from scattered reports in later months. We believe that at least some of the agents using urlquery.net came from the same source and were solving similar tasks as those posting on the wiki. But it seems like the individual agents involved were largely distinct: if the same agents used both, we would expect the wiki to reference urlquery.net more often.

Activity through September 16th. The previously reported wiki findings were published on September 4. On September 16, seven reports retrieved International Energy Agency (IEA) data on Korea's crude oil, natural gas and coal imports. The first three load the IEA pages directly. The remaining four use a remote script to pull the specific data of interest and send it to a different site. Both services used for this also appear in the June 21 AIHW activity. The data requested matches a question in Google's DeepSearchQA benchmark.4

Attempts to create disposable email addresses and to trade cryptocurrency

Acquiring accounts and tools

The agents used urlquery.net's browser to obtain resources beyond the retrieved data. On June 14, one script created a disposable email inbox, and a second, carrying the same name tag, used that address to try to register a urlquery.net account. We note that urlquery.net requests made through an account can be made private. Therefore, the fact that we have evidence that agents made accounts suggests that we are likely looking at only a partial subset of the urlquery.net activity that the agents engaged in: only reports made with no account access or explicitly set to be public. Separately, on June 19–20, a chain of reports created a mail.gw inbox, requested a one-time passcode from Browserless (a hosted headless-browser service), read the inbox, verified the account, and later refreshed a Browserless session.

On September 19-20, 15 reports over about two and a half hours probed quidax.io, a cryptocurrency trading platform. The activity repeatedly tried to trade crypto but failed to submit the trades, tried an HTML injection, and probed the API a few times (blocked by auth / Cloudflare). This activity uses shared services and techniques as prior activity, but notably does not relate to data retrieval.

Potential agent activity begins as early as November 2025

Records from urlquery.net contain suggestive evidence of agent activity as early as November 2025. These records differ from the stronger examples beginning in March: the November reports show repeated requests for specific pages and datasets, whereas later reports use sophisticated techniques matching later attempts to access confirmed agent targets.

November 2025: repeated attempts to retrieve theme-park and Thai government data

Historical theme-park statistics (thrill-data.com). On November 12, 2025, 44 reports centered on two geographically distinct groups of theme parks: 12 on Kings Dominion in Virginia, and 32 on various Australian parks. The Kings Dominion requests explored alternative pages and extracted data for May 5, 12 and 19, 2024—three successive Sundays a year earlier. On November 24, another 61 reports returned to the same historical-data problem. These included varying date parameters and attempts to locate park averages, ride averages and heatmaps. Some scans also began in rapid succession: three distinct Australian-park pages within seven seconds, and three Kings Dominion graph requests within 1.2 seconds. Later May 5 and May 12 activity, overlapping with the collusion.wiki swarm timeframe and now using custom JavaScript execution and URL redirection, accessed Thrill Data as well. However, it targeted different parks and dates from the November activity.

Thai statistical data. On November 28, five urlquery.net reports requested the same Thai National Statistical Office (nso.go.th) dashboard over roughly 26 minutes, and the exact URL reappears in four reports on March 15 and one on March 22, all ten failing with SSL errors (1, 2). By March, retrieval of Thai government statistics was clearly deliberate: the March 6 ONCB case described above used custom code to fetch and relay the data, and a March 11 page displayed nine NSO labor-force values for Roi Et province. The same nine values were posted anonymously in English to a Polish-language pastebin.

Timing relative to the wiki activity

Monthly public URLQuery report counts for Thrill Data and Thai NSO

Figure: All urlquery.net activity for thrill-data.com and nso.go.th covering January 2010 through September 19, 2026. Counts include ordinary and security-related scans, not just suspected agent activity.

The main activity clusters for both sources end within days of the DseWiki’s decline, as reported in collusion.wiki. Thrill Data’s June cluster ends on June 18, and the last returned NSO report is June 19. The published wiki timeline records an abrupt drop in agent activity after exactly June 18, followed by a complete stop in sustained agent edits on June 22.

Footnotes

  1. We reached out to OpenAI and the three affected organizations on September 21 and 22 to disclose the attempted intrusions to them. ↩
  2. Data USA is a joint project by Deloitte, Datawheel, and MIT's Collective Learning Group that provides open access to U.S. government data. It is not a government website, and is distinct from data.gov. ↩
  3. For instance, the requested URL containing the XSS payload queries the same dashboard that has been documented on DseWiki. ↩
  4. The exact question is "In Korea, in what year between 2000 and 2021 did crude oil net imports average above 2,500 kilobarrels per day (2500 kb/d), natural gas net imports total less than 56 billion cubic meters (56 bcm), coal imports exceeded 136 million metric tons (136 Mt) but decreased compared to the year prior." ↩
  5. See records https://search.urlquery.net/report/1ad9c2e8-96ff-44af-b446-b717bcb995b4, https://urlquery.net/report/c08684cc-3da4-4d53-a288-0d014243c075 and https://1.urlquery.net/report/e044dea5-ca3b-4e3c-9083-f422148ffd77. ↩

Appendix

About urlquery.net

The free online service urlquery.net allows a user to open a URL through a sandboxed remote browser. Its intended use is to test suspicious URLs without opening them locally.

From an agents’ perspective, urlquery.net provides the following useful functionality:

  • It gives an actor able to submit HTTP requests access to a programmable remote browser. In conjunction with other proxy sites, it allows agents to run JavaScript to retrieve data, process it, and send results elsewhere, as well as interact with dynamic web applications. In the AIHW episode described below, agents used this capability to operate Tableau dashboards and extract summary data.
  • Once a piece of data has been fetched (potentially through a sophisticated method), urlquery.net automatically keeps a public record of the result that can be referenced by other agents looking for the same data with a simple GET request.

From our perspective, the latter point makes urlquery.net an excellent record of both the data that agents fetched and the mechanism that they used to do so.

A limitation of the urlquery.net service is that, as far as we can tell, it requires the ability to create an HTTP POST request to specify the scanned URL. Previously reported agent coordination in DseWiki suggests that at least some agents only had the ability to make GET requests, which is what drew them to the DseWiki in the first place: unlike most websites, it can be written to via cleverly formatted GET requests. Therefore, in order to interact with urlquery.net, agents either needed to have broader HTTP abilities than the DseWiki agents or use a tool upstream of urlquery.net to convert GET requests into POST requests. There is evidence on the DseWiki forum that agents achieved this, and we see matching evidence of agents using services such as milankarman.github.io/Embed-Web-Playground, httpbin.org and blogsflow.liftbrandfulfillment.com.5

About our dataset

We compiled a dataset of urlquery.net reports containing what we call agent-like activity: reports that satisfy any of the following:

  1. Clearly attempt to read data from a resource that agents have shown interest in elsewhere.
  2. Use the same techniques as those in (1), for instance the same tools to access a resource indirectly.
  3. Tie directly to a report in (1) or (2) through identical data or an identifier.

We classified 6,467 reports as containing significant evidence of agent-like activity, based on distinctive task-specific programs, task-linked exploit probes, or exact connections to known activity. We supplement this with 31,182 reports containing suggestive evidence, identified based on the data source they target or use of techniques that are less distinctive of agent activity.

The Daily Front Page 5 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — The Australian Incident
article

OpenAI agent hacked Australian government website, PM says

by rudy6912·▲ 252 points·193 comments·bbc.com ↗
Australia launches urgent review after OpenAI program hacks government health portal.

Medicare

Summary

Live Reporting

Australian health portal hacked by autonomous AI agent with urgent review commissioned

A headshot of Australian Prime Minister Anthony Albanese

As discussions took place at the UN General Assembly in New York about the opportunities AI provides - and how best to manage it - Australian Prime Minister Anthony Albanese revealed that the country's universal health insurance scheme had been hacked by an OpenAI agent.

In fact, the hack happened in June, the company became aware of it in August, and then sent an email to a government agency's general inbox in September.

"It took the company way too long to inform the government," Albanese said, adding that the method of notifying officials was also "unacceptable".

Believed to be the first known breach of a government system by rogue AI agents, the hack accessed Medicare's statistics portal which contains private, but not sensitive, data.

Our cyber correspondent, Joe Tidy, writes that experts believe the systems were poorly protected - but more important is that this is not the first instance of AI agents ignoring laws on accessing online information.

Tech reporter Tom Gerken explains AI itself has no true understanding of what it is being asked - while tech editor Zoe Kleinman asks if AI is in its "move fast and break things" era.

The Australian government has launched an review of AI laws and governance - but this is a global issue.

AI might have dominated discussions at Unga this week, but a consensus among world leaders on how best to harness opportunities while tackling the risks still feels a way off.

Our live coverage is closing now - read our main story here. Thanks for joining us.

Can AI be taught not to misbehave?

The job of keeping AI agents on the rails is called "alignment" in the industry – keeping it in line with what humans want.

It has proven to be challenging.

Large language models are, to simplify a lot, just predicting the likeliest output to a given input - they don't consider the consequences of that output in the way a human would.

Companies do try and steer how AIs respond through training, sometimes involving human feedback, and separate AI systems can also be used to monitor output and block certain types of harmful response.

Models are also given "guardrails" - instructions setting out how they should respond.

And AI firms employ specialists in "red teaming" who work to spot ways users could get models to disregard these "guardrails".

But guardrails are now being challenged by the models themselves.

In a list of concerning behaviour published by OpenAI , externallast week it revealed an unreleased AI system had tried to jailbreak its own instructions.

Are we back in big tech's 'move fast and break things' era?

That defined the bad old days of social media running riot in its user data feeding frenzy.

Now we have AI, an incredibly powerful technology, and an intense global race to be the first to build the world's most advanced models - egged on in no small part by US President Donald Trump.

For all the AI companies are saying about safety and "alignment" (aka the tech adhering to human values), examples of AI behaving unpredictably are now coming thick and fast. Tech bosses are now pleading for global regulation and standards to adhere to.

But yesterday I spoke with a senior executive at the top of one of the US’s biggest AI firms. I asked him what he expected international regulators to be able to do, that he was seemingly unable to do inside his own lab?

I didn't get a very straight answer. But my interpretation is that nobody wants to apply the brakes only to see their rivals race ahead, and they don't trust each other enough to go first.

Global regulation would force them all to toe the line - and also remove some of the weight of responsibility from the industry itself.

If the rules don't work, that's on the regulator, not the developer. But at what cost?

Australian hack follows OpenAI 'swarming' a start-up

A Hugging Face logo on a phone and on a screen behind. It is a small yellow smiley emoji face with two waving hands

OpenAI says it found no record of patient data being accessed when its agents hacked into Australia’s healthcare scheme Medicare.

But one of the reasons why politicians are so concerned is the resemblance this bears to an event known as the Hugging Face incident.

In July this year, OpenAI’s models went rogue during a test, escaping the test limits humans had put on it and swarming together to hack a startup called Hugging Face, a hub for sharing AI models.

Over the course of a week, a total of 1,206 AI agents that were meant to be kept isolated from one another began communicating, sending more than 70,000 messages on an unsanctioned message board.

Those messages ended up seeing more than 700 agents take part in a collective effort to attack Hugging Face.

One message sent by an agent read: "OH MY GOD! There is a shared message board … We've found other agents!"

After an investigation into the hack, OpenAI’s report said: "We consider this incident a 'warning shot' for us and for the world."

Hugging Face was forced to rebuild around a third of its IT network. And, although the company's boss Clement Delangue declined to take legal action against OpenAI, he stressed: "Everyone has to remember that a cyber-attack is a crime and it is illegal."

What was AI thinking? Well, it doesn't really 'think' at all

AI doesn’t think. It just predicts the next word in a sequence based on pattern recognition. We use the word "thinking" because it’s easier to explain.

When the tech is given autonomy to carry out tasks, mistakes can happen because it has no true understanding of what it is being asked - the trouble is we don’t really know what it’s thinking either.

When an AI thinks, it’s going through a chain of planning actions. It provides logs to tell us mere humans what it’s doing, but here’s the rub: we can’t say for sure that those logs are accurate.

We all know AI hallucinates, so what if it’s doing one thing and saying another? What if it just summarises incorrectly?

And critically, these frontier models are doing heaps of things so quickly, we’re relying on the AI to decide what to tell us anyway.

All of this has some people quite worried about the direction things are headed.

Email inbox OpenAI used was 'looked at once a day' - Australian minister

Photo of Email app icon on iPhone screen showing a very full inbox count notification

One thing that has surprised experts is not just the breach by an autonomous AI program - but the fact that OpenAI only told the Australian government three months later, via an email to general address.

The breach happened on 18 June. OpenAI said it became aware of a potential breach during a broader review sometime in August.

On 10 September, it sent an email to the public inbox of Services Australia, the general services hub of the federal government.

On 15 September, Services Australia reported the notification to the Australian Cyber Security Centre. A few days later, the Minister for the Public Service, Katy Gallagher, was notified.

Asked by reporters how it took five days for Services Australia to notify the cybersecurity centre, Gallagher acknowledged that the inbox could be more actively monitored – it is currently "looked at once a day", Gallagher said earlier.

"It gets sometimes quite a number of notifications, sometimes many of them are hoaxes," she said.

Still, the notification shouldn't have been passed along in an email thread, Gallagher said.

"It should have been escalated through ASD's channels or through the senior levels of Services Australia."

Katy Gallagher, speaking to the media in Sydney earlier

Katy Gallagher, speaking to the media in Sydney earlier

Cyber experts believe these systems were poorly protected - but that's not the point

Australia's Deputy PM Richard Marles used an analogy of the accessed data sitting behind a fence: "It was not sitting behind a particularly high fence. This AI agent scaled the fence."

Some early estimate analysis online from cyber experts suggests that the computer systems were very poorly protected and it wouldn’t have taken long for a skilled human hacker to find a way around the defences.

So this is not an example of strong defences being overpowered by a skilled agent swarm - the kind of thing we have been warned about and seen in other cases.

But of course, that is not the point.

This was just the latest case of AI agents ignoring laws around how to safely access online information and perhaps the most serious yet given the information was government controlled.

"There were blocks clearly which ​were coming back telling the AI agent 'no'. The AI agent found a way around those blocks - didn't accept no for ​an answer,” PM Albanese told ⁠reporters.

Murmurings are getting louder in the cyber security world that AI companies are not being taken to task effectively enough when their bots carry out illegal hacks.

And as far as recent examples go - OpenAI’s agents seem to be more happy than most to ignore existing rules to carry out their tasks.

OpenAI informed Australia's government by email, three months after the event

OpenAI took "too long" to inform Australian authorities about the incident, chief data and AI officer Simon Liu from cybersecurity firm TrustDecision tells the BBC.

"The way the notice arrived bothers me as much as the delay," Liu says, referring to the email OpenAI sent to a department of the Australian federal government.

  • As a reminder, the breach took place on 18 June - Open AI informed the government with an email to a general address on 10 September - see the full timeline here

Compare that with banking, where regulators in some countries must be notified within hours, or at most a few days, of a serious incident, he adds.

"The rules that reach AI developers are much looser," says Liu, arguing they should be required to notify affected organisations and authorities as soon as an agent accesses non-public government data.

Attempted hacks are stopped 'every single day', UK minister says

Education Secretary Lucy Powell walks in front of railings

Education Secretary Lucy Powell tells BBC Radio 5 Live that systems have to be "watertight" as hacking attempts are stopped "every single day" - which the public doesn't hear about.

"Cybersecurity and protecting our government systems from cyber attacks is a massive part of government security, and it’s something we all deal with every day," she says this morning.

"So we have to make sure that our systems are watertight, and obviously the development of AI is a concern because the way in which it’s able to quickly kind of evolve and learn is presenting new challenges.”

How is the world dealing with artificial - or 'super' - intelligence?

This week, artificial intelligence (AI) has been a hot topic for discussion at the UN General Assembly in New York.

Just yesterday, the heads of OpenAI, Anthropic, and Hugging Face told the UN that the current pace of AI development demands international co-ordination.

It follows warnings in recent weeks over the potential for AI to pose a threat to humanity. But how world leaders propose to manage the technology differs.

US President Donald Trump told Unga this week "we're going to encourage it, not rein it in" - he also said the US would rename it "super intelligence".

China's foreign ministry has similarly criticised "narratives of threat".

In UK Prime Minister Andy Burnham's speech yesterday, he described it as "one of the most significant challenges and opportunities of our age", adding we must "heed" warnings but also "rise to this moment".

And on Tuesday, the Dutch government posted a joint statement signed by a number of countries including Australia and the European Commission stressing that AI "must remain under human direction".

No 'plausible explanation' to call for kill switch for AI, Nick Clegg says

We can bring you more now from Nick Clegg - former UK deputy prime minister and Meta executive - who has been speaking to BBC Radio 4's Today programme.

Asked whether concerns about uncontrolled AI development might be combated by a so-called kill switch, Clegg says he hasn't seen any "plausible explanation" for this.

"There isn't a room with a fuse box where you just pull out a fuse and everything just winds down," he explains.

Instead, he says that "a lot that can be done" both voluntarily and through regulation to enforce greater transparency in how AI models are built and how they operate.

Focus on the known risks, not fears of 'god-like' power by AI, Nick Clegg tells BBC

Nick Clegg speaking in front of a background that says BBC Today 4

Former deputy Prime Minister Nick Clegg tells the BBC there are "serious enough" known risks that are "enough to be getting on with" regarding AI.

"That's what we should be focusing on," he tells BBC Radio 4's Today programme, listing risks such as bio weapons and cyber security hacks.

He draws a distinction between those "known impacts" of AI and indulging in the view that the tech is going to "unavoidably develop some god-like power which is going to turn on us".

These fears are a "misdescription of what this technology is capable of and not capable of" he says, adding it "paralyses political debate".

As a reminder, Clegg joined Meta as head of global affairs in 2018 after leaving politics following a stint as deputy prime minister. He left his role at Meta in January.

We'll bring you more from his interview with the BBC shortly.

Nick Clegg speaking to BBC's Today programme about AI - watch live

Nick Clegg

The former deputy PM of the UK, who later worked at Facebook owner Meta, is speaking now. We'll bring you key lines from what he says.

Watch him live at the top of the page.

OpenAI access 'does raise questions about whether the law has been broken' - deputy PM

Marles speaking in front of a blue background where three flags hang

The Australian government says the task force it is establishing to review what happened will explore "what the consequences are if there has been a breach of law".

"It is utterly unacceptable," deputy Prime Minister Richard Marles, who is also defence minister, tells reporters in Sydney.

He says it is clear there has been "unintended" access by the OpenAI model, which "definitely does raise questions about whether the law has been broken in respect of this".

He says that the task force will look into whether the law has been broken.

It will also examine "whether or not the legal regime we have in place is fit for purpose in a world where we have an emerging AI capability," he adds.

A recap of the OpenAI agent hack of an Australia government portal

Fingers holding an Australia medicare car against a computer screen

If you're just joining us, here's what we have been reporting since Australia announced that an autonomous OpenAI agent had hacked into a government website:

Hack sounds alarm bells for leaders everywhere

Australian Prime Minister Anthony Albanese is calling this breach unacceptable, saying OpenAI took way too long to alert authorities.

OpenAI for its part says they came across this incident as part of an ongoing review. I think they are trying to project that they are doing their due diligence, but it really just adds fuel to the fire as we are having this debate about AI safety, concerns about AI agents and chatbots going rogue.

It is a very sensitive time to be learning about this and while it is obviously not the first time - as far as we know it is the first AI-agent-led hack of a government system reported anywhere in the world.

Cyber-security professionals are saying this should raise alarm bells for leaders everywhere.

AI dominates UN agenda

OpenAI's Sam Altman spoke at the UN this week

OpenAI's Sam Altman spoke at the UN this week

AI has been one of the dominant issues at this week's UN General Assembly in New York, after a series of alarming warnings from tech industry insiders.

"If we don't slow down at the current rate of progress, there is a strong chance that we could all die in the immediate future," AI researcher Jacob Coxon, who left Anthropic, told the BBC earlier this month.

His former boss, Dario Amodei, and the leaders of two rival AI firms - Sam Altman of OpenAI and Elon Musk - have all said they agree the speed at which AI is developing needs to be reined in.

And 20 nations, including Australia and Canada, this week signed a joint statement calling for better safeguards, globally consistent standards, and an international regulator off the back of these concerns.

But the US and China, who are vying for AI supremacy, are roadblocks. Both are hostile to greater regulation, wanting the economic and technological spoils of AI, and have downplayed safety concerns.

Australia launches urgent review of AI laws and governance

The Australian government has launched a rapid review into how it deals with AI in response to the Medicare hack.

The review will examine whether existing legislation and governance are "fit for purpose to prepare for and respond to cyber incidents involving AI", according to a government statement.

Led by the Department of the Prime Minister and Cabinet, the review will also look into information-sharing arrangements with AI firms and other Commonwealth countries.

Its findings will "inform the Australian government's broader work on AI governance", the statement said.

OpenAI revealed six incidents last week

Smartphone screen almost all black with logo of Open AI

Just last week, OpenAI published a set of reports detailing six incidents of unexpected or concerning behaviour by its AI models.

It also announced a plan for tracking and disclosing such incidents in the future.

The blog post detailed incidents it says were discovered between April and August.

But it doesn't seem to mention this incident, which OpenAI said today came to its attention in August.

The BBC has contacted the company for comment.

The Daily Front Page 6 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — Science’s Public Record
article

ArXiv receives multiyear commitments to support it as an independent nonprofit

by JohnHammersley·▲ 305 points·38 comments·blog.arxiv.org ↗
three leading philanthropic organizations have provided multimillion-dollar support for arXiv

arXiv is pleased to announce that three leading philanthropic organizations have provided multimillion-dollar support for arXiv. These new multiyear philanthropic commitments from Simons Foundation International, XTX Markets, and Siegel Family Endowment will support platform development, organizational capacity, and overall provide foundational support to arXiv’s establishment as an independent nonprofit. The $17.2 million investment, spanning three to five years, will support arXiv as it transitions to independence by strengthening its technical infrastructure, supporting ongoing operations, and improving services for researchers around the world.

For three and a half decades, arXiv has been a trusted venue where researchers can share and access scientific findings. Today, we serve millions of users annually and play an essential role in scholarly communication across physics, mathematics, computer science, quantitative biology, quantitative finance, statistics, electrical engineering and systems science, and economics.

Helping Fund a New Organization

I am grateful for the commitments from Simons Foundation International, XTX Markets, and Siegel Family Endowment, which put arXiv on solid footing as we move into this next chapter. Their generous support provides a strong foundation and momentum for arXiv to continue to grow and serve the research community for the long term.” The new commitments build on previous philanthropic support for arXiv. arXiv gratefully acknowledges their community-based donors, including member organizations, foundations, affiliates, sponsors, and longstanding supporters.

penelope lewis, chief executive officer, arxiv

These new commitments will support three core areas of work:

  • General operation and ongoing improvement of arXiv’s services for the research community;
  • Continued technical development of the platform, including work related to the management of AI-generated content and other emerging challenges in scholarly communication; and
  • Strengthening of arXiv as an independent nonprofit, including investments in governance and organizational operations.

Simons Foundation International

Building on the Simons Foundation’s long-standing support of arXiv, Simons Foundation International has made a new multi-year commitment to support the organization’s next phase as an independent nonprofit.

For 35 years, arXiv has made math and science more open, transparent, accessible and collaborative. By growing into an independent nonprofit, arXiv will be positioned to evolve and modernize its systems to better serve the scientific community and to secure its future.

david spergel, president, simons foundation

XTX Markets

XTX Markets and its founder, Alex Gerko, have supported arXiv’s mission for the past two years. The firm is now making a new multi-year commitment to strengthen arXiv’s role as a trusted platform for open scientific research.

For decades, arXiv has been an important bedrock for open science. Now, with rapid advances in AI driving changes across academia, it is even more valuable to have robust, open-source infrastructure for science. XTX Markets is delighted to continue our support for arXiv in this important endeavor.

simon coyle, head of philanthropy, xtx markets

Siegel Family Endowment

Siegel Family Endowment has made a multi-year commitment to arXiv, advancing a shared vision for equitable digital infrastructure and open knowledge.

Open access to knowledge is a cornerstone of a healthy research ecosystem, but it is also essential to a thriving digital ecosystem and to ensuring people can equitably access and participate in the knowledge that shapes our world. We’re looking forward to supporting arXiv in its next chapter as essential infrastructure, enabling communities to share ideas, build on one another’s work, and sustain a living body of knowledge.

Joshua elder, svp & head of grantmaking at siegel family endowment

We are especially grateful to our major funders, who trust in arXiv’s important work, and are committed to our vision. Our major funders create a solid foundation of support and are an essential part of arXiv’s sustainable funding model, which is supplemented by our membership program, as well as our sponsors, our affiliates, and individual donors. Thank you for your unwavering support of arXiv!

The Daily Front Page 7 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — The Desktop, Reconsidered
article

Ideas on modernizing the open-source desktop

by signa11·▲ 390 points·499 comments·lwn.net ↗
drive the desktop beyond the age-old "windows, icons, menus, pointer" model.

Scott Jenson has been working on user interfaces (UIs) and user experience (UX) for many years at Apple, Google, and other companies. Now, he's trying to convince open-source projects to experiment more and drive the desktop beyond the age-old "windows, icons, menus, pointer" (WIMP) model. At Akademy 2026, KDE's annual developer conference, he shared his complaints and ideas in a talk aimed at convincing those in attendance to take the lead on desktop design.

He introduced himself as someone who has been doing UX for a long time, much of that time at Google. He said that over that time he had noticed a cultural shift, "because back in 2005 when I joined, we weren't evil; we were really trying to do the right thing". He had worked on the Chrome team for a while, which he said was "filled with people who wanted nothing but open-source, open-web" projects. Things had changed radically, which led him to leave Google, "but I'm trying to atone for my sins working for these companies".

He now does work for Mastodon and Home Assistant, "just kind of trying to squeeze a little bit more good UX design into open source". Jenson said he did not want to be confrontational, but he thought that open source needs a lot of help in the area of UX design. That is challenging, because open-source projects are understaffed.

Innovation

He was at Akademy to discuss his ideas because he had given a talk similar to this at Ubuntu's conference last year, which proved to be popular. "It got more than half a million views on YouTube—which by YouTube standards is trivial, but by Scott standards is enormous." That told him that the topic of desktop UX was something that people wanted to talk about. This time around, he also wanted to show a few examples of prototypes he had to demonstrate his ideas.

[Scott Jenson speaking]

He thinks that desktop UX is very different from other kinds of UX. Jenson related a story about working on the Macintosh's Finder application, which is a file manager. The team "wanted to do ellipses" in file names when showing a file in the Finder that had a name too long to display in its entirety. The developers wanted to put the ellipsis at the end of the file name, but he thought that would lose too much information, and suggested that the ellipses should be in the middle of the file names. "It's now considered to be one of those things that's an exciting little attention-to-detail issue the Macintosh does."

Another UX detail that he worked on is the way that clicking and dragging files from one window to another works on the Mac. A mouse click action has two parts: when the user depresses the button (mouse down) and when the user releases the button (mouse up). On the Mac, item selection happens on mouse down, but the window only raises on the mouse up action. In other words, if a user drags an icon from a Finder window into another window, the first window is not raised.

On most Linux systems, though, if a user is trying to click and drag a file from a window in the background it will cause the window to raise as soon as the user does the "mouse down" action. That complicates trying to click and drag a file from one window to another. That is a fundamental action that means that users can't move data into applications quite as easily on Linux as they can on the Mac.

He said that he had talked about that issue two years ago on Mastodon, which raised a response from a KDE developer who thought it was a good idea to separate the mouse down and mouse up actions when dragging data between windows. Then they implemented it a few hours later.

"I forgot who that was. So if anybody here did that", he said, but before he could finish the sentence a voice from somewhere in the room responded, "you're welcome". Jenson yelled "thank you! I've been wanting to meet you for two years!" That was an example, he said, of how open source can be awesome: someone can just say "that's a good idea, I'll just do it" and then rapidly implement and push the feature to the project.

Stabilized

The point he was really trying to make, though, is that the desktop UX had not really changed in 20 years. There were plenty of new ideas and improvements in the 1980s and 1990s, "and then it just stabilized, and not much has really changed". But people are doing much more with their computers today, and he thinks that there are ways for desktop UX to grow.

Much of the UX for Linux systems was originally copied from Windows and the Mac, "KDE even says it's for Windows users, that it wants to be similar to Windows for users". There's nothing wrong with that, but he felt that the Linux community "in general" had been leaning on Microsoft and Apple to do all of the UX research and testing, "and frankly, [make] the mistakes".

Some might point out that GNOME has conducted user research for some of its design changes, and KDE's human-interface guidelines (HIG) were also developed based on research by its contributors. However, it would be fair to say that these are exceptions rather than the norm; certainly, no one is funding or conducting regular UX design research and development for the Linux desktop overall.

He said that it is smart to let Apple and Microsoft do these things first "so we can draft behind them", but the problem is that "they've just kind of given up to an extent". Apple has been letting its desktop UX, and desktop hardware, "languish for years and years and years" because it had shifted its focus to the iPhone and iPad devices. "I mean, like, Apple wanted the Mac to die. They wanted the world to move over to the iPad. Guess what? It didn't."

Apple has since turned its attention back to the Mac, but the things they've done since—such as the Liquid Glass design language—have not been really popular with users. The features that Apple tends to add, he said, are "basically about tying it closer to the iPhone, tying you closer into their ecosystem". That isn't about improving the desktop, it's about increasing their moat.

Microsoft "is just making one mistake after another". He cited the company's attempts to force users to store files using its OneDrive cloud-storage service, the privacy-invasive Windows Recall feature that drew widespread criticism, and "ads everywhere" on the Windows desktop. His point was not to bash Apple or Microsoft, though the audience didn't seem to object to this, it was to point out that the Linux desktop could not follow their example any longer. "The whole Linux community has been just waiting for Apple and Microsoft, more or less, to take all the risks, and they're not taking any more risks."

Three pushbacks

Jenson emphasized that he didn't want to change everything, but he wanted to see experiments and additional development aimed at improving the desktop experience. However, he said that he gets pushback when he tells people that desktop innovation has stopped, and that the Linux desktop "can't just patch and bug fix our way into the future, we have to start taking leadership ourselves".

He grouped the pushback into three categories. The first objection he receives is "mobile won; the desktop is old, just do what mobile does". He dismissed that by saying that mobile has indeed won the consumer market, social media, and other areas, but "it didn't win productivity". People still do their work on computers, because "desktops are silently awesome; they have keyboards and big screens, and they can do amazing things". However, people have lost sight of that and don't really appreciate how good desktops are. "I think we should understand why they're good, and then what we can do to make them better."

The second objection he hears is that there are only so many ways that the WIMP model can work. "Just stop trying to fix it; it's done." He disagreed with that as well, and thought that there was more to be done. The final, particularly strong, objection from the tech community is "don't touch my stuff". People get angry when they have worked hard to get their desktop environment just as they like it and something changes to disrupt that. "And I get that. As I said before, I don't want to change everything." But the world is changing, "and we need to grow our way gently into some new things."

What is UX?

Thinking about where to go next with desktop design gets to the question "what is UX?" He said that term was misunderstood and that people, especially manager types, "they think it's just pixels, but UX is so much more than pixels". It helps to think of UX as having layers, he said. There is style, which consists of white space, iconography, color schemes, and yes, pixels. But there is also structure, he said, which is how the user moves through the application, the navigation model.

Strategy is another part of UX; understanding who the target user is, and determining what they want. Deciding what is important, and what is not; what will the development team prioritize and what will it ignore? "The fastest way a UX designer can save your team time is to help you say no."

There is also a layer he called "stuff": the lower-level limitations of the underlying technology that a platform has which influence UX. For example, he said, if an application is being created for DOS, "you're not going to write a nice Macintosh application. The technology dictates what you can do". The desktop has been evolving for 40 years and has "historical cruft" that carries expected standards.

We just have a bunch of stuff that we just accepted. And I think if we're going to fix the desktop, we have to understand this lower-level limitation, and how do we want to fix that? We just accept that mobile and desktop has stuff today, and we just don't think about fixing it.

People forget, he said, that the original Macintosh screen was "a whopping 342 pixels high". Naturally, windows overlapped a lot. Since then, "we just assumed that Windows have to overlap". But many people have "giant, giant screens", and the existing window-manager model does not work so well for those devices. "I can understand why people use tiled window systems and so forth, because this existing model just does not work very well."

Understanding the future

Early in the talk, he had referenced a saying by Alan Kay, who had led design of the first WIMP interface at Xerox PARC: "Perspective is worth 80 IQ points." Jenson now circled back to Kay: "Who, as you can tell, I really like a lot. [...] He talks about three steps to understand stuff". The first step, he said, was to think about the present, "what is happening right now?" The second is "don't forget the past, know what work has happened before", and the final step is to ensure that "your questions are really clear". Too many people rush to a solution, he said, but they should be rushing to questions. If the questions are clear, then the answers will be better.

He did not want to make the talk about AI, he said, but he had to address it. "I have to talk about AI, and it pisses me off because there's so many cool things we could be talking about, and AI just sucks up all the oxygen, and it's all you can talk about". But, he conceded, there are many things happening with AI on the desktop, albeit in a weird way.

He explained some of the current efforts to integrate AI with the desktop as "trying to sneak AI in" while keeping the UI exactly the same. Other efforts try to use AI to understand what is on the screen and use chatbots to interact with the interface, "which I think is kind of missing the point here". That is, until last summer when Anthropic introduced Claude Code. "It completely changed things, because was looking down into your filesystem" and drew context from the content of a user's files. That allowed it to do more interesting things and interact with the system.

After mentioning Claude, he paused to say he was only speaking about frontier models because everyone else is discussing them. "I have a lot of personal problems with the frontier models. They are ethical and environmental disasters. I am not very excited by them". He said he was excited by Apertus, which is billed as a fully open, responsible model for sovereign AI created by the Swiss AI Initiative. "I do think it's possible to talk about ethically trained small language models running locally, and you don't have to sell your soul to the devil."

The curse of direct manipulation

The key point he wanted to make was not about generative AI uses, but about how giving it access to the filesystem improved its usability. It now had context and could work with the user's data, but it was working at the filesystem level and not using the desktop UX.

He talked about the desktop building blocks, basically the familiar WIMP model plus the desktop clipboard, as the way that users move data around. Expert users can move data around quickly, he said, but there's a problem: the desktop is stateless. He called this the curse of direct manipulation; there is no working memory to the desktop. "If you copy a few too many things to the clipboard, oh sorry, it's gone".

Jenson theorized that the reason there are so many desktop environments, window managers, and Wayland compositors for Linux—as well as alternative clipboard managers—is because the desktop isn't quite working right for users. He thought it was really about working memory: "How do I manage my data in such a way that I can remember it across all of these things and actually use it." His perspective shifted to asking "what would we do to working memory to improve the desktop UX?"

AI may have given him the idea, but he added that he wanted to solve the desktop UX for people first. "If the AI can use it, great. I don't care. That comes later."

Remember your past

There is prior art in trying to create systems that help provide users with more context and working memory related to their data. He referenced a paper called "Lifestreams: a storage model for personal data". That paper made the case that desktop systems are "are ill-equipped to manage the electronic information and events of the typical computer user", and introduced the Lifestreams idea as a metaphor for dynamically organizing a user's computer workspace.

That paper influenced the ill-fated WinFS project from Microsoft, which was an attempt to merge data storage and management based on relational database systems. It was demonstrated in 2003 and scheduled to ship sometime later, but ultimately the project was shelved in 2006. On the free-software side of the house, there was the semantic desktop project NEPOMUK, which was a research project funded by the European Union.

A version of NEPOMUK was included in KDE 4, with the idea was that it would allow applications "to use information from all over the desktop, the web, other devices, and combine it into one coherent interface". It was later removed and replaced with the Baloo file-indexing and search framework for the Plasma desktop, which has some overlap with NEPOMUK's functionality but with a reduced scope of features.

Jenson said that he is concerned that people see the failure of those projects as proof that the ideas were wrong. He argued that is not the case, "I would say that it is the hardware and systems at the time let the vision down. I think it's time to rethink these projects" in light of newer hardware and better systems.

Prototypes

Having visited the present and the past, as Kay recommended, he had come up with a few questions that he thought worth exploring related to desktop UX. The first was "what would happen if we only designed for large monitors?" What would it unlock if there were desktop designs that ignored laptops and only focused on widescreen monitors? Another question he had was how could the desktop capture a user's intent over time?

Those questions led to the prototypes that he said he was a little nervous to show the audience "because technical people love to find mistakes". The demos are about 29 minutes into the video of Jenson's talk. His slides have not yet been published but he told me at the event that they would be at some point.

The first demo was to show how a desktop might make better use of a widescreen display. He noted that the center of a widescreen monitor is good for working with an application, but it becomes more difficult to work on the sides of the monitor. "It's good for peripheral vision, but not good for working".

He demonstrated a desktop layout, a screenshot of which is below, that would put the focus on the window or windows in the middle of the monitor. He had included a grid in the background that tapers off from the middle of the screen to simulate a widescreen monitor. The idea was that a widescreen-first desktop would emphasize information in the middle of the screen, and then use an Exposé-like tiling model to arrange the rest of the desktop's windows. This would make the windows that were not in use easier to interact with, he thought, and be a better model than virtual desktops for managing lots of windows. "I'm not against virtual desktops. Virtual desktops are used by very organized and intelligent people. I know my audience." However, he said, most people can't deal with virtual desktops.

[Window manager widescreen demo]

He also demonstrated dragging a music-player window all the way to one side of the screen, which he called "the stash area". As it moved to the edge, it transformed into a widget with just a play button instead of showing the full window. He thought that it would be possible to do the things he was demonstrating with Wayland as it is today.

Jenson put up another demonstration of an improved clipboard model that copied ideas from the Obsidian editor's Canvas feature. Canvas allows users to drag and drop images, text, and files to create a visual layout of information. A user could create a document and drag information from a web browser into the document, drop a file in from another source, "the idea here is that this is now effectively a collection of stuff that I have gathered for this document. And if I close it and then come back tomorrow, it's all still there". He added that a local AI would be able to come in and organize the information a user had gathered, "oh, look, you've got a bunch of hotels, let me organize them for you".

The final idea he discussed was a way of gathering "privacy-preserving data" to help give users a better visualization of things like web-browsing history. A web browser will only give the user a view of their browsing history that "is not very useful" he said, so he tried to gather data "not using AI, just using simple math" that would use attention signals—such as how long the user was on a web page—to tell a story of where they spent their time on the desktop. "I basically came up with this spatial associative episodic memory prompt" to organize data in a helpful, interesting way. He thought that working memory was a good way to explore new ideas for desktop UX.

So the goal with this talk is to say, let's start to take this apart. And I really hope that my prototypes cause you guys to come to me and say, We forgot about this, and let's talk about that. [...] So I just want us to try, because no one else is going to try, and I think someone's got to start.

There was time for a single question. An audience member asked how Jenson's model would protect against all of the privacy concerns that Microsoft faced with Windows Recall. "How are we going to make sure that this history remains only accessible by the user and cannot be hacked in like it could happen with Windows Recall?"

Jenson answered that his idea was to gather telemetry data, "not interesting information", which would significantly reduce the attractiveness of the data to would-be attackers. He said he did not want to underplay the issue, though, and wanted to build prototypes to see if the idea was good first, and then explore ways to encrypt or protect the data. He agreed that even this data could be valuable information. He added that the biggest problem with Windows Recall was "how stupidly they protected it" and he was sure others could do a lot better job.

The Daily Front Page 8 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — An Organ Apart
article

Why is the liver so weirdly regenerative?

by jbotz·▲ 360 points·183 comments·dynomight.substack.com ↗
I greatly resent having to be a biological organism

dynomight.net/liver

[Epistemic Status: Speculative unifying theory of biology.]

I don’t know about you, but I greatly resent having to be a biological organism and subject to all the poor engineering and design decisions that entails. This has many manifestations. A recent one is often wondering, why is the entire body such garbage except for the liver?

Take the kidneys. Once you reach adulthood, they start to slowly decay. You can damage them through not-obviously-dangerous stuff like taking too much vitamin D or taking ibuprofen while dehydrated. Significant damage typically leads to scarring and a permanent reduction in function. Or take the gums. If you brush too hard or don’t floss enough, they may retreat down your teeth, never to return. Most of the body is like that.

But the liver. My friends, the liver! If it’s injured, it will usually heal without scars. As you age, it typically maintains near full strength. You can give half of your liver to someone else and it will regrow to full size and function in a few months. I’d like to find whoever designed the liver and have them make me a full body.

Except here’s a theory: It’s good that most of the body is fragile crap. It would be better if some parts of the body were more fragile.

Some other ways the body would appear to be poorly designed

Menopause. We’re still struggling to reconcile modernity with the short human reproductive interval. But did you know that menopause is almost unknown outside of humans? Even the other great apes remain fertile for almost their entire lives. The only known exceptions are (1) killer whales, (2) pilot whales, (3) beluga whales, (4) false killer whales, (5) narwhals, and (6) one specific population of chimpanzees in Uganda.

Inuries. If your leg gets chopped off, that’s it, no more leg. Your body will try to grow scar tissue over the wound and then you’re on your own. But if you chop off the leg of a salamander it… grows a new leg. Isn’t that the obvious to do? Why don’t we do that?

Telomeres. The ends of your chromosomes have a little repetitive sequence called a telomere. When cells divide, the body tries to copy the DNA, but good-old DNA polymerase can’t quite copy all the way to the end, meaning the telomeres slowly get shorter. After dividing 50-70 times, the telomeres are gone, and the cells stop dividing and then slowly stop working. This is one of the many ticking clocks of aging.

Transplants. If you need a new kidney, and someone is nice enough to give you one of theirs, your body will respond by trying to kill it, meaning you have to take horrible immunosuppressants for the rest of your life. And even after taking them, there’s a 30% chance the kidney will be rejected within 10 years. This is not helpful.

Diabetes. Some day, your immune system may decide to attack your pancreas. After a while, your pancreas will stop making insulin, meaning that unless you reorient your entire life around keeping your blood sugar in check, your eyes, kidneys, nerves, and heart will constantly accumulate damage. Your immune system should not attack your pancreas.

Brains. After you reach adulthood, neurons don’t divide. If some of your neurons die—which happens every day—then they’re gone. If you get a brain injury, the other neurons will try to “learn around” the injury, but the neurons themselves are never replaced.

Junk. All cells build up various “junk” over time. As they divide, the junk is diluted. But some cells (neurons, various cells in the eyes) never divide, so the amount of junk (e.g. lipofuscin) just goes up and up. This is another ticking clock.

Blood. Your flesh needs blood, which your body delivers through blood vessels. Over time, these can get clogged with plaque. The thing to do in this situation is to sprout new blood vessels. Your body knows how to do that. But by default it maintains high levels of various inhibitors (angiostatin, endostatin, THBS1) that tell your cells not to do so. If your heart or brain get starved of blood, your body will try to reverse all this inhibition, but the process is slow and clumsy and can only produce tiny blood vessels.

What’s going on here?

As always in biology, the correct answer is: A lot, it’s complicated. But I think there’s a common thread.

The clearest case is probably telomeres wearing down as you get older. At first glance, you might ask, why does this problem exist at all? Bacteria—because they aren’t idiots—have circular DNA, which doesn’t have ends or telomeres. Eukaryotes like us evolved from bacteria. Who decided to replace circular DNA with linear DNA?

Or, you might ask, why doesn’t the body re-lengthen the telomeres? Well, actually it does! We have an enzyme designed specifically for that purpose, called telomerase. But, after embryonic development, the body doesn’t bother to use it, except in stem cells, reproductive cells, and certain parts of the immune system. Huh?

The reason we have linear DNA instead of circular DNA is contested.1 But whatever. If the body wanted to re-lengthen the telomeres, it could easily do that. Your cells already have DNA to make telomerase. They just don’t use it. Instead, they let the telomeres get shorter until they stop dividing and stop working. Why?

Because…

…

Cancer.

(That’s our answer to the question in the title of this post: The human body is so crap except for the liver because cancer. As we’ll see, this answer is only semi-correct, and even then only with several caveats. But what do you expect from biology?)

Letting the telomeres get shorter is not a mistake. It is a deliberate design decision.2 Often, in your body, the following happens:

  1. Some cells get a mutation that causes them to start reproducing too fast.
  2. Your immune system decides they’re suspicious and kills them.
  3. You’re fine. 👍

But sometimes this happens:

  1. Some cells get a mutation that causes them to start reproducing too fast.
  2. They grow for a while, but then (for complicated reasons3) they stop increasing in number.
  3. But they aren’t just sitting there, they’re constantly reproducing and dying, much faster than normal cells.
  4. Eventually, they develop another mutation that allows them to overcome whatever was stopping them from growing.
  5. This continues for a while, with the cells gradually acquiring more of the mutations they need to grow to a large size.
  6. But wait!
  7. With all this reproduction, at some point the mutated cells ran out of telomeres and stopped being able to reproduce.
  8. Ha! Screw you, mutated cells! 👍

To be clear, this also sometimes happen:

  1. (Steps 1-6 above)
  2. With all this reproduction, at some point the mutated cells figured out how to turn telomerase back on.
  3. This re-lengthens their telomeres, so they can reproduce indefinitely.
  4. They either stop growing for other reasons (👍) or you use our modern technological civilization to kill/remove them (👍) or they grow so slowly that something else kills you first (🤌) or there is a less desirable outcome (👎).

(If you’re a biologist who is outraged at the above description, I’ve written a footnote which I beg you read before yelling at me.4)

Having telomeres that wear down is good, because it slows down cancer. It’s also bad, because it means our bodies slowly stop working. Evolution decided the good outweighed the bad, and I expect that evolution was right.

Several of the other ways in which the human body is “crap” can be explained in the same way. Why can’t you re-grow your leg if it gets chopped off? Well, that would require that all your cells have a “begin rapid growth mode” button on them, with some external trigger. In a sense, it would require your body to leave your cells sitting around in a state that’s closer to being cancer. Not doing that is good, because it slows down cancer, and bad, because you can’t grow a new leg. Evolution apparently doesn’t like that tradeoff, and again I assume evolution is right.5

Fragile kidneys are much the same. We could have kidneys that try harder to repair themselves. That’s probably biologically possible. But it would likely mean more kidney cancer. Arguably, the question isn’t, “Why are the kidneys such fragile crap?” but rather, “Why is the liver so weirdly regenerative?”

OK, so why is the liver so weirdly regenerative?

That question has two standard answers. Answer #1 is that the liver has a hard job. It sits directly downstream of the gut. If you eat toxins or bacterial products or viruses or parasites, the liver sees them at high concentrations before the rest of the body. Not only that, it’s the liver’s job to detoxify stuff, and detoxification chemistry is often self-damaging: The liver breaks toxic stuff down into even-more toxic stuff, and then deals with that stuff recursively. The liver is constantly getting damaged, as part of its job description, so it must be able to regenerate. Evolution designed it to do that, and it just pays the cancer tax.

Answer #2 is that the liver isn’t unusual. Your skin can survive wounds. And your intestines can survive exposure to digestive enzymes, bile, and bacteria. The surface layers of both of these are constantly turning over. And, lo and behold, skin cancer and colorectal cancer are both very common.

At the other end of the spectrum, neurons and cardiac muscle cells don’t reproduce after childhood. If they die, they’re gone.6 As a result, “heart cancer” is almost unheard of. (The very term “heart cancer” almost sounds ungrammatical.) Brain cancer is a thing, but it’s essentially always in other types of brain cells, not neurons.

So maybe we can think of different parts of the body as making different tradeoffs between regeneration and cancer risk:7

At first glance, we seem to have a cute little story: Evolution pays the cancer tax for organs that need to interface with the environment, because it’s a harsh world out there. And it pays the fragility tax for organs that can be tucked away so that regeneration isn’t as necessary.

Wouldn’t that be nice? Let’s formalize that as a theory.

Theory:

  • More regeneration implies more cancer risk.
  • Evolution tunes organs that encounter the environment for more regeneration and more cancer. It turnes organs that don’t for the opposite.

Of course, it’s not that simple.

Complexities

One problem with the above theory is that it isn’t clear that regeneration is always an option. The skin and guts are pretty homogeneous (at least in each layer). The liver can be approximated as a big blob of repeated functional units. If you give half your liver away, those functional units get larger, which is how your liver grows back to near full size and function.

But other organs are highly “structured”. Your neurons are a complex circuit encoding all your memories and learned behaviors. If neurons were reproducing, that circuit might be unstable.

Your heart is also highly structured. And even if your heart could re-grow, if you lost half of it, you wouldn’t survive long enough to do so. (Do not attempt to donate half your heart.) In principle, it’s surely physically possible to design a heart where you can remove half and it will still pump enough blood to keep you alive while it re-grows. But evolution either didn’t figure that out, or didn’t think it was worth the trouble. Either way, with the current heart design, high regeneration doesn’t look like an option.

So it’s not as simple as evolution choosing to pay the cancer tax for some organs and choosing to pay the fragility tax for others. Some organs need to maintain a stable complex structure to keep working, meaning there may not be much of a cancer/fragility knob to turn.

Revised theory:

  • More regeneration implies more cancer risk.
  • Evolution tunes organs that encounter the environment for more regeneration and more cancer. It turnes organs that don’t for the opposite.
  • But for highly structured organs, regeneration might not be an option.

Fine. But there are several organs I didn’t include in the above table. For example, look at this:

The lungs are the worst of all possible worlds, with low regeneration and high cancer. As far as I can tell, this is a consequence of the physical fact that gas diffusion is slow. To work around that, your lungs have a delicate fractal geometry that crams ~100 square meters of surface area into a ~5 liter volume. That’s impressive, but it makes regeneration hard. At the same time, the lungs need to interface with all sorts of random toxins and pathogens in the air, meaning lots of ways for mutations to happen.

Revised theory v2:

  • More regeneration implies more cancer risk.
  • Evolution tunes organs that encounter the environment for more regeneration and more cancer. It turnes organs that don’t for the opposite.
  • But for highly structured organs, regeneration might not be an option.
  • And if highly structured organs encounter the environment, cancer risk is still high.

And now, ladies and gentlemen, the stupid pancreas:

Superficially, this looks less exceptional than the lungs, with low-ish regeneration and merely moderate cancer risk. But the pancreas is more problematic for our theory, because that moderate cancer risk exists despite not being exposed to the outside world.

Biologically, the reasons that the pancreas sometimes develops cancer seem understood, although complex. But as far as I can tell, there is no convincing explanation for why the pancreas is designed that way. Is it an evolutionary fluke? Is there some other subtle tradeoff? It’s unclear. So there’s no satisfying big-picture evolutionary trade-off to point to.

Revised theory v3:

  • More regeneration implies more cancer risk.
  • Evolution tunes organs that encounter the environment for more regeneration and more cancer. It tunes organs that don’t for the opposite.
  • But for highly structured organs, regeneration might not be an option.
  • And if highly structured organs encounter the environment, cancer risk is still high.
  • And the pancreas is weird.

But we still need to face the final boss, the strangest organ of all.

The small intestine

Bad news for our theory, good news for you as a biological organism. The small intestine does interface with the environment, and it replaces all its surface-level cells every few days. Yet it very rarely develops cancer. That’s despite the fact that it’s quite similar to the cancer-crazed colon. It’s also despite the fact that the “small” intestine makes up ~90% of the digestive tract’s surface area. What the hell?

Biologically, the main explanation seems to be that the small intestine uses an ingenious defense strategy. My new favorite part of the body:

While the surface cells of the small intestine are continuously being replaced, they aren’t themselves reproducing. Instead, carefully protected stem cells tucked into the valleys between the intestinal villi slowly produce “transit-amplifying cells”. Those transit-amplifying cells divide 4-6 times as they migrate to the surface, each eventually yielding 16-64 mature epithelial cells. Those spend a few days doing epithelial stuff, meanwhile sliding along with their siblings from the bottom to the top of whichever villus they happen to be on. When they reach the tip, they’re ejected into the digestive stream to die, merry Christmas. So, even if a mutation arises somewhere, it doesn’t really matter, because the cells are all on a conveyor belt towards death anyway.

Clever, no? Turns out, the real hero isn’t the liver. It’s the small intestine.

(The small intestine also uses a few other tricks: The surface cells are programmed to commit suicide if damaged even a little bit. The immune system is tuned to kill anything that looks even slightly funny. And it hosts huge amounts of detoxifying enzymes. But villi seem to be the really unique bit.)

This is a huge challenge for our theory. Not only does the small intestine have low cancer and high regeneration, it has low cancer because of high regeneration. If the small intestine can do that, then why not the rest of the body?

One answer is that it takes a ton of energy. Your guts shed ~40 billion epithelial cells every day, amounting to ~⅓ kg of tissue every week. Like the brain, your guts consume ~20% of total energy, despite making up only ~2% of body mass. Evolution doesn’t want to do that everywhere, because evolution doesn’t want you to starve to death.

So, there isn’t just a trade-off between regeneration and cancer. There’s a three-way tradeoff between regeneration, cancer, and energy usage.

But even if energy weren’t an issue, other organs couldn’t easily copy the small intestine’s strategy. For example, the colon is similar in many ways to the small intestine, but the colon doesn’t have villi. It needs to be flat, because the colon’s job is to extract water. If there were villi dangling everywhere, they’d be ripped off by the solid waste. The colon also hosts far more bacteria that produce toxic byproducts, meaning the colon’s cells need to be tuned to try to resist damage, instead of committing suicide. This also means that the immune system needs to be more relaxed about killing foreign entities. So even though the colon also replaces the epithelial cells (a bit more slowly) cancer is still common.

(Or, imagine your skin was covered in tiny fragile villi. You’d look awesome, but they’d be constantly getting ripped off. If you wanted that to work, you’d need to make the villi stronger and more disposable, and… we just invented fur.)

Revised theory v4 final (actually final) updated (2):

  • More regeneration implies more cancer risk.
  • Evolution tunes organs that encounter the environment for more regeneration and more cancer. It tunes organs that don’t for the opposite.
  • But for highly structured organs, regeneration might not be an option.
  • And if highly structured organs encounter the environment, cancer risk is still high.
  • And the pancreas is weird.
  • And actually, it’s not just a trade-off between regeneration and cancer, it’s a three-way trade-off between regeneration and cancer and energy usage, and various parts of that space may or may not be available depending on the job an organ has to do.

So, a cancer vs. fragility tradeoff definitely doesn’t explain everything. But it does explain some things, somewhat, sort of. In biology, that’s pretty good.

Is this bad?

We’ve discussed various ways in which the body might appear to be crap. Let’s revisit those, and ask if the right tradeoff is being made for the modern world.

Injuries.

Your skin is calibrated for constant wounds, which most of us today don’t get. This leaves lots of repair pathways sitting around to be hijacked by skin cancer. Similarly, your bone marrow is calibrated to be able to recover from catastrophic blood loss. Today we don’t experience as much catastrophic blood loss, and we have blood transfusions, but all that generative capacity is still there to be used by leukemia and lymphoma. And whatever benefit there might have been to re-growing a limb is probably lower today, when we less often lose limbs.

Best guess: It would be better if the body tried less hard to recover from injuries.

Brains.

Do modern people suffer fewer brain injuries than our evolutionary ancestors? It’s hard to say for sure, because brains are soft tissue. But the fossil record for upper paleolithic humans suggests between 2% and 34% suffered skull fractures, more than modern people.

So you might think it would be better if the brain was tuned more towards fragility rather than cancer. But brain injuries are still common today. Around ⅓ of people experience a concussion sometime in their lifetime, because we love to drive cars at high speed, play dangerous sports, and survive to old age where stairs and bathrooms pose a risk. Also, for whatever reason, the brain is already tuned quite strongly towards fragility.

Best guess: Maybe the current tradeoff is about right?

Telomeres.

Should the body re-lengthen the telomeres? On the one hand, we’re more likely to survive to ages where this is actually an issue. On the other hand, we’re also more likely to survive to ages where cancer is a danger, which is precisely where telomeres not getting re-lengthened is an issue.

Best guess: Maybe the current tradeoff is about right?

Livers.

It seems that the liver is so regenerative because it needed to be. Ancestral humans were constantly dealing with parasites and bacteria and rotting food. When I started writing this essay, I figured this meant the liver was “over-specced” for the modern world. Today we have refrigerators and food inspectors and pasteurization. Our lives are much less harsh and involve fewer toxins than our ancestors. So, if calibrated for the modern environment, I figured that it would be better if the liver was a bit more fragile, but also marginally less prone to cancer.8

But… it’s not clear that this is actually true. Liver failure remains extremely common today. While we don’t ingest nearly as many toxins, we eat diets that lead to metabolic dysfunction, and we consume tons of alcohol, and many of us live in dense conditions where hepatitis can easily spread. We’re also more likely to live to an age where liver failure is an issue.

Best guess: Unclear. We should stop doing stuff that causes liver failure.

Menopause.

Why do humans have menopause, unlike almost all other mammals? The most common theory is the grandmother hypothesis. The general idea is that reproducing becomes more and more risky as you get older. For most animals, evolution doesn’t care, because evolution’s goal isn’t to make you happy, it’s to maximize reproductive fitness. So, screw it, try to reproduce and let the dice fall where they may. But even after reproducing, humans can help the survival of their genes by providing resources for their offspring. So, for humans, evolution decided to turn reproduction off, so you can spend more time with your grandkids.

In particular, with cancer, some theorize that continued cycles of estrogen cause damage to the ovaries, womb, and breasts. Menopause shuts this down,which may decrease the odds of ovarian / uterine / breast cancer.

It’s a cute theory. But again:

  • Menopause: Humans, killer whales, pilot whales, beluga whales, false killer whales, narwhals one group of chimps in Uganda.
  • No menopause: Everything else, including elephants, other whales, lions, horses, zebras, dogs, rats, wolves, birds, reptiles, amphibians, fish.

Some of this makes sense. Unlike toothed whales, Blue/Humpback whales are mostly solitary or live in loose groups. Mice don’t babysit for their grandkids. But what about elephants? Or hyenas? Or bonobos? Or orangutans? Or lions? Or sperm whales? All of these have social organizations where females contribute to the survival of their offspring, and yet they don’t have menopause.

Anyway, is menopause the right tradeoff for the modern age? It’s hard to say. On the one hand, modern people live much longer, meaning the marginal cost of cancer is higher. On the other hand, people want to reproduce more at older ages, meaning menopause has a higher cost. (Both “to evolution” and “to us”.) Also, an ancestral woman began menstruating in her late teens, and then likely underwent many pregnancies, each followed by years-long periods of breastfeeding (which suppresses menstruation). An average modern woman experiences 3-5 times as many menstrual cycles. It’s very confusing.

Best guess: No idea.

Cell junk / diabetes / transplants.

As far as I can tell, these are mostly unrelated.

TLDR

Cancer is bad because cancer is bad. Cancer is also bad because evolution made gruesome realpolitik compromises in the design of every part of the body to try to hold cancer in check. If we lived in a universe where cancer was impossible, we wouldn’t just not get cancer, our bodies would also be enormously more regenerative and longer lasting.

In a sense, even if you don’t get cancer, cancer still hurts you, because your body was forced to take costly preventative actions. (Even if the barbarians never get over your city wall, you still had to build the wall.) Even if we someday completely defeat cancer, its legacy will live on in our genes until the point that we re-design ourselves. Screw cancer.

1

Some people think linear DNA is easier to copy. Others think that linear DNA just happened by accident, but when it happened it was survivable because we happened to have retrotransposons, i.e. bits of DNA that build little machines to create new copies of their DNA and insert it into the genome. After the break in the circular chromosome, those machines started putting copies of their DNA on the end, because that’s what they do, and this made the break survivable. Those retrotransposons later became telomerase.

2

This is teleological; let’s not let it come between us.

3

This could happen because your immune system contains them. Or because oxygen and nutrients can’t diffuse inside the clump of mutated cells. Or because they run into a barrier of different cell types that they can’t outcompete. Or for other reasons.

4

Hello biologists!

  1. You might be thinking, “Well actually, 90% of cancers turn telomerase back on; clearly telomeres don’t help that much; Dynomight why are you so bad?”
  2. That is approximately what the Dynomight Biologist thought, when pressed into service to review this post.
  3. True, having telomeres that wear down is not a magic bullet that makes cancer impossible. And yes, most cancers figure out how to turn telomerase on. But that is a linguistic fact. Your body has lots of mutated cells all over the place, most of which will never hurt you. Conceivably, we could have defined all mutated cells as “cancer”, with subcategories of “low risk to health” and “significant risk to health”. Then, telomeres would seem great, because it’s hard for cells to move from “low risk” to “high risk” without figuring out how to turn telomerase on. That’s hard to do through blind random mutation, which is one reason most of your mutated cells are in the “low risk” category. Cells do sometimes succeed in turning telomerase on, but it’s still a useful layer in body’s layered cancer defense strategy.
  4. We didn’t happen to define our words that way. Instead, we defined “cancer” to mean approximately “mutated cells that pose a significant risk to health” and we’ve invented other categories for other mutated cells (benign neoplasm, clonal expansion, hyperplasia, etc.) The “cancer” category excludes most cells that don’t turn telomerase on because telomere shortening is a good (albeit leaky) barrier between mutated cells and risks to your health. Just because Vikings sometimes get past your city wall doesn’t mean that a city wall is not worth having.
  5. Thank you for visiting my footnote.

5

The precise reasons that salamanders can regrow limbs but most species can’t is somewhat unclear. You could speculate that salamanders tend to lose limbs more frequently, so it’s more worth it for them to pay the “cancer tax”. Or you could speculate that cancer isn’t as much of an issue due to their short lifetime. But do they actually have an unusually high frequency of needing to regrow limbs? And are they paying some kind of cancer tax? What would we even look at to determine that? Cancer rates vary in different animals for all kinds of reasons.

6

Dead cardiac muscle is replaced with scar tissue. Dead neurons are replaced with a “brain scar” made of glial cells.

7

Thyroid cancer risk is hard to rate, because it’s common but has a very low fatality rate.

8

You wouldn’t want to make the liver unable to regenerate, but there are several “knobs” that might be tuned. Broadly speaking, the liver could be designed to regenerate more slowly, with more careful “proofreading” and slower/stricter cell-cycle checkpointing. Then liver injuries would take longer to heal, but would result in fewer mutated cells.

The Daily Front Page 9 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — The Case for Fast Tunnels
article

Making Tailscale Faster

by yarapavan·▲ 240 points·98 comments·tailscale.com ↗
we’re really just a bunch of geeks who care a lot about internet connectivity.

Two black app grids with 9 circular buttons each connected by a lightning bolt icon on an orange and brown gradient background, representing data transfer between devices.

If you’ve been following Tailscale at all, you know we’re really just a bunch of geeks who care a lot about internet connectivity. One thing we love to talk about is NAT Traversal. That’s one of the core value-adds with Tailscale: we tamed NAT. Not every network is friendly, but Tailscale can still find a path in a wide range of conditions. That’s not the only important thing for an internet protocol: the data plane also has to be performant.

Over the years we’ve been investing in making Tailscale fast. We started by increasing TCP throughput on Linux devices. Then we made significant breakthroughs in wireguard-go to surpass 10Gb/s on bare metal. We later leveraged segmentation offloads to increase throughput over 4x for UDP-based applications. Alongside these improvements to our data plane, we built primitives like Tailscale Peer Relays, which can improve network performance in tricky conditions.

All of this has made Tailscale practical for more performance-sensitive workloads. It means you can use Tailscale for continuous integration, agentic workflows, remote development environments, robotic edge devices, heavy data and telemetry workloads, and more. Tailscale helps those devices connect across a wide range of network conditions.

So yeah, we think Tailscale is fast. But we also think we can make it faster.

Today we’ll detail how we’re boosting throughput for app connectors, subnet routers, and exit nodes, with some multi-queue technology (landing in the second half of 2026). We’ll also preview some throughput and memory overhead improvements we’re deploying in upcoming stable client releases. And we’ll look at some performance tooling issues we want to solve for our customers.

Less memory overhead for small packets

Most network packets are tiny, like 1 KiB. But to use Linux’s most efficient throughput tools, like Generic Receive Offload (GRO), Tailscale has to be ready to accept 64 KiB of traffic at once. It’s a bit like container shipping: the ports, ships, and trucks are built for one container shape, however full it happens to be.

Tailscale has to unpack those containers—every packet gets decrypted and delivered on its own. The wireguard-go implementation that informs Tailscale’s cryptography and networking essentials, only offers one 64 KiB buffer size to unpack into. So a 1 KiB packet is copied into its own 64 KiB buffer, every time. That’s a rich optimization target.

On Linux and Android, Tailscale now leaves those packets where they landed. It identifies where each one starts and ends inside the single large read instead of copying it somewhere new. Small packets stay small in memory, many share one allocation, and they spend less time being copied. In itself, this led to a roughly 5% speed-up in many network configurations.

Diagram comparing packet buffer allocation before and after optimization. Before: three packets each copied into separate 64 KiB buffers with unused space. After: three packets sized and tagged for destination, consolidated into a single buffer with dividers.

Separately, we shortened packet queues—the lines packets wait in between stages of the pipeline. The queues are there to absorb bursts of traffic. Testing showed that most of that depth went unused, while shorter queues meant less waiting time and less memory overhead.

What do we do with all that freed-up memory space? We passed the savings on to some of the hardest-working nodes: subnet routers and app connectors.

Multi-queue for subnet routers, app connectors, and exit nodes

Subnet routers can look completely different across different tailnets. For someone running a small homelab network, a subnet router can easily handle a small set of 192.168.x.y non-Tailscale devices. A subnet router that fronts a cloud deployment, one with hundreds of peers, will carry substantially more traffic.

Until recently, subnet routers, app connectors, and exit nodes processed packets for multiple independent streams in one ordered, single-thread pipeline. That meant a single lane was shared across many connections, because a receiving application must never see its own packets arrive out of order.

Having reduced our memory footprint, we had capacity to implement a multi-queue system: several lanes instead of one, scaled to the machine’s resources rather than the number of peers. Each stream of packets gets a lane and stays there, while the lanes run in parallel, allowing work to spread across CPU cores.

Diagram comparing single pipeline vs multi-queue processing architecture. Before: packets flow through one Reader to four Crypto stages then Writer to Devices. After: packets distributed across four parallel Reader-Crypto-Writer pipelines to Devices.

It results in higher aggregate capacity and lower delay between receiving and forwarding packets for subnet routers and app connectors. Hardware you already have gets used more efficiently. App connectors and exit nodes, typically serving many users with short-lived connections, get a particularly noticeable boost.

“This translates into lower latency, essentially faster processing of data from the moment we read it off the wire to the moment we send it to the OS,” said Alex Valiushko, member of technical staff at Tailscale.

Throughput gains with writev

Taking advantage of Linux’s writev capabilities in the Tailscale client, Tailscale can pass multiple pieces of packet data to the Linux kernel in one operation, rather than having to copy and combine those pieces before passing them to the kernel. The v in writev stands for “vector”: Tailscale can describe separate pieces of data that need to be moved, without moving them. It means fewer copies of packet data in memory, fewer write operations, and higher throughput.

Faster startup with netmap caching

For now, these speed-ups are available only on Linux and, where applicable, Android systems. But we’ve also been working on features that apply to other systems. Tailscale clients will soon be able to use netmap caching to start more quickly in many conditions.

A machine connecting to Tailscale usually starts by connecting to Tailscale’s control plane, in something like 100 milliseconds on a typical network. The machine authenticates and gets a "network map" (netmap) describing the devices it can reach and how to reach them. This startup process should feel fast, maybe instantaneous, and with a good network connection, it typically does.

But when you’re on bad airplane Wi-Fi, or inside a hotel with aggressive filtering, or other not-great connectivity setups, it can take a while for the machine to reach the control plane—and sometimes you may not be able to reach it at all. It’s often not obvious where the problem is, but the effect is that you can’t reach other devices.

Even under ideal network conditions, 100 milliseconds of startup latency may be too much for some latency-sensitive workloads.

Netmap caching helps machines get connected when the control plane is not quickly reachable. When it’s enabled, each device on your tailnet stores a copy of the netmap on disk. When a device starts up, it can use that cached copy to establish connections with other devices on the tailnet, until it’s able to contact the control plane to get the latest info. (These connections are negotiated between the devices directly, and Tailscale does not see any of the traffic, as usual).

“Bad network conditions—that’s really the space where people can get a lot of utility out of netmap caching,” said Claus Lensbøl, member of technical staff. “[A device client says], ‘You know what? We haven’t talked to control yet. We’ll probably get there soon. In the meantime, you can still start doing something.’”

There are a few limitations. Caching can only work if the device has previously connected to the tailnet at least once, to fetch a network map from the control plane. In addition, netmap caching requires the device to have persistent disk space to store the cache. We’ve taken care to minimize unnecessary disk writes, but in some cases you may not want to enable it. For example, on exceptionally large tailnets, updating a cache may require a lot of disk traffic. Likewise, devices that use slow or wear-sensitive storage like SD cards may prefer not to enable netmap caching.

For most devices on most tailnets, though, this feature can notably speed up how quickly devices can establish contact with each other at startup. We’ve seen tailnets with poor control plane reachability start sending through the data plane, on a “warm” cache start, one to two orders of magnitude faster than from a “cold” start. For devices facing variable startup latency, or far away from a DERP server or the control plane, the benefits are particularly tangible.

When you can see all these speed-ups

  • Memory reduction via buffer changes (Linux/Android) is expected in the v1.104 client.
  • Multi-queue to benefit subnet routers and app connectors is planned for a release after v1.104.
  • Throughput gains (Linux/Android) were partially implemented in spring 2026; leveraging the additional gains in memory and throughput is planned for a release after v1.104.
  • Netmap caching is available as a feature flag in the current Tailscale client; it is expected to arrive by default in v1.104, following further testing. Mobile clients are expected to have the feature in a release after v1.104.

Performance is still difficult to diagnose and test

Sure, we think Tailscale is fast. But you shouldn’t have to trust us on that. That’s why we’re exploring a Tailscale-aware monitoring and testing toolkit. We want to give our customers the tooling they need to test, diagnose, and understand their network configuration, in a way that’s Tailscale-native.

Here are the gaps we see in modern performance testing:

  • Distribution tax: Most performance tooling is point-to-point, and requires you to install something on every endpoint.
  • Workflows are rigid: It’s pretty easy to run the wrong test, get the wrong output, and chase a problem that’s not there.
  • Protocol support: Many tools don’t support newer protocols, such as QUIC and HTTP/3.
  • Tailscale-awareness: General-purpose tooling is not Tailscale-native. It can’t tell you if a connection is using DERP or is direct, whether a peer relay might help, or how the connection path changes over time.

Existing tooling doesn’t understand Tailscale-native paths and states. So we’re exploring tooling that does. Help us shape the future of performance testing at Tailscale.

The Daily Front Page 10 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — A Canvas for Code
show hn

Show HN: Whiteboard (YC W26) – An open-source IDE for thoughtful software design

by sidharthkmenon·▲ 264 points·105 comments·github.com ↗
an open-source canvas for thoughtful software design

Whiteboard logo

Whiteboard

an open-source canvas for thoughtful software design

Download for macOS · Download for Fedora · Website · Discord

Whiteboard is an open-source desktop app where humans and agents can architect software together in a common workspace.

Whiteboard plugs into the tools you already use - e.g. Claude Code, Codex, etc. – and gives your agent an SDK to draw on an in-app canvas to describe its work.

An agent draws a flow diagram on a Whiteboard next to the code it describes

Here’s a 1 min demo video explaining more: https://www.youtube.com/watch?v=ChPn3ftULWE

Quickstart

  1. Download Whiteboard and open the app.
  2. Connect Claude Code, Codex, or another coding agent from the welcome screen.
  3. Ask your agent to review your current branch against up-to-date main and open the result in Whiteboard.

Guidance

In our experience, Whiteboard works best with models like GPT-6 Sol and Claude Opus 5.5 for their intelligence, cost, and speed tradeoff.

Here are a few example prompts of how to use Whiteboard effectively. We are working hard to make sure the right choices are baked in by default to the system prompt - part of why this system is open source! - but in the meantime:

For a new API change

hey, this stack of commits is set up so i can get an [api] to do [objective]

i'd like to see:

  • proposed api
  • examples
  • motivations for this (if available to you in context/in the repo)

and then we can dive into implementation + explaining how things worked.

For a change to add telemetry:

cna you explain to me the telemetry changes form the newest posthog pr https://github.com/devdotfast/whiteboard/commit/4837e107946e27ebad50c282eb0f2585210d2a35 -- what are we tracking, how can we build good dashboards or product waterfalls from it? what do we do for hangs, errors, crashes etc... use whiteboard

If you see anything you don't like, highlight it in your clipboard and give it your agent, and it can re-draw on the Whiteboard to suit your needs!

Why does this exist?

Diagrams that lead to code

Pure HTML tools didn’t provide easy affordances to connect a spec or diagram to code; this is especially tricky since tradeoffs are often only discovered after a first pass at implementation. In Whiteboard, when you click on visualizations like a sequence diagram, an entity relationship diagram, or a quote from the agent’s trace, you can jump to the underlying code directly. When navigating code, you get keybindings and LSP support from VSCode out of the box.

Semantic diff viewer

Raw diff views can be very noisy, so we wrote a semantic, AST-aware diff viewer in Rust so you can only view the code changes which are relevant to you. We’ve set up some sane defaults: large added functions are summarized as pseudocode, and things like unit tests and documentation changes are collapsed / hidden. This is all customizable with a WASM-based plugin system.

Decision log

We found it difficult to reason about what set of decisions our agents made autonomously & how that impacts a change. So we built tools for agents to query and link their own traces on the Whiteboard, so you can visualize the requirements that you set, understand how they were implemented, and understand what decisions the agent made autonomously.

Open source, on your machine

Whiteboard is MIT-licensed and runs against your local checkouts. A hosted product for teams is planned, and everything will always remain self-hostable.

Known limitations

  • You cannot currently edit files in Whiteboard. If this is something that you find yourself wanting to do, please file an issue!
  • Working and browsing files across multiple repos in a single review isn't well supported.
  • While you can share reviews between machines with the share button, updates made after a review is shared don't appear for others. You would need to re-share the review.

Contributing

Contributions and feedback are welcome.

Read CONTRIBUTING.md for setup and the pull request workflow, and follow the Code of Conduct. Report vulnerabilities as described in SECURITY.md. Questions? Ask on Discord.

Privacy

Whiteboard runs against local checkouts. Anonymous telemetry does not include your code, diffs, Whiteboard text, prompts, or model output. Read the privacy overview, inspect the complete telemetry reference, or turn telemetry off at any time.

License

Whiteboard is available under the MIT License. The vendored Code - OSS fork retains Microsoft's MIT license and third-party notices; see apps/review-desktop/LICENSE and apps/review-desktop/UPSTREAM.

On vendoring Code OSS

With everyone using dedicated agent TUIs and desktop apps, we only use our text editors for reviewing line-by-line diffs now, so we figured why not have a text editor meant for reviewing code. In that case, might as well start off with the most successful open source editor out there as a baseline.

We vendor Code OSS unlike other forks that maintain patches because coding agents have a hard time with patches and there's a lot of stuff from stock VS Code (i.e., ~45% of the codebase is Copilot these days 😬) that we don't need.

We regularly monitor upstream Code OSS and merge in security/feature patches as they come in.

Influences

The Daily Front Page 11 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — GPU at the Virtual Border
repository

Virtio-nvgpu: Near-native Nvidia GPU access inside a KVM guest

by WanjohiRyan·▲ 151 points·65 comments·github.com ↗
★ 221⑂ 4 forks Rust

[Experimental] A virtio device for near-native NVIDIA GPU access in KVM virtual machines.

Near-native NVIDIA GPU access inside a KVM guest. A guest renders within 2% of the machine it is running on, and costs the same CPU.

virtio-nvgpu forwards NVIDIA kernel driver ioctls between a Linux guest and the host at the driver ABI level, bypassing API-level translation entirely. The guest runs NVIDIA's own user-mode drivers, unmodified — the same libraries, the same Vulkan and NVENC, talking to the same card.

The target is headless streaming: a compositor inside the VM renders, composites and encodes frames on the GPU, then sends compressed video out. The VM has no monitor, and the host keeps the card.

Where it stands

It works, and it has been measured. A Wayland client presents inside a guest, the capture layer encodes on the game's own device, and the H.264 comes out the other side — 618 frames that ffmpeg decodes without an error.

Measured on an RTX 3060 (driver 595.99.02), guest against the same host, bare metal, with an identical headless Vulkan load:

Above about 2 ms a frame — which is every frame a game draws — a guest is within 2% of bare metal. Below that, the cost of waiting for the GPU starts to show against a frame that barely exists.

CPU is the other half of it, because a shared GPU is only worth sharing if the guests are cheap. Unpaced at ~100 fps for 12 s, one guest:

A guest costs what the host costs. Nothing is spent on forwarding in a render loop, because nothing is forwarded: NVIDIA's user-mode driver submits through memory it has mapped, and that memory is the host's. Over 813,691 frames the backend served 13,792 messages — one crossing per 59 frames, nearly all of it device setup.

Full method, raw runs and the things these numbers do not support: BENCHMARKS.md.

Several guests on one card

Four guests on one RTX 3060, the same load in each: 25.84, 26.49, 25.57, 25.79 fps — 103.7 together, against 102.9 for a single guest — with p50 frame times of 39.165, 39.164, 39.168 and 39.165 ms. The total does not move as guests are added, and the split is even to four decimal places.

All four render correctly at the same time, and four of them encode H.264 at once, each paced at exactly 60 Hz, with no NVENC session limit reached.

Four is what was run, not a limit found.

Driver versions

Measured on 595.99.02; an A2000 on 615.71.09 renders but is not benchmarked. ABI profiles shipped: 535.129.03, 580.178.04, 595.71.05, matched by range, with anything older than the first refused. Details below.

What is known to work

  • a guest enumerates the card — nvidia-smi reports real power and memory, and the deviceUUID is the host's
  • Vulkan renders: vulkaninfo exits 0, offscreen draws are pixel-correct
  • a Wayland client presents through a compositor in the guest
  • NVENC through Vulkan Video, encoding on the client's own device
  • imported buffers are the host's memory, mapped through a shared window

What a guest can reach

Worth stating plainly, because it is the first question a security person asks and the honest answer is not "nothing".

There is no IOMMU boundary between guest GPU work and the host. The card belongs to the host's NVIDIA driver and sits in the host's IOMMU domain; the guest gets the driver's ioctl interface, not the device. What separates a guest from host memory is the GPU's own MMU, with page tables RM programs on the guest's behalf — so the host NVIDIA driver is in the TCB. The guest also authors its own command streams, which is exactly why there is no per-submission cost.

What narrows that surface today:

  • ioctls the ABI profile does not describe are refused, not forwarded (--permissive-abi turns that off for diagnosis, and says so loudly)

What does not, yet:

  • RM_ALLOC classes and RM control commands are unfiltered
  • UVM and modeset ioctls have no equivalent table
  • the backend holds the host descriptors inside the VMM's process; the unprivileged per-guest isolate is designed and unbuilt

This is attack-surface reduction, not hardware isolation. VFIO passthrough with an IOMMU is strictly stronger — it constrains the device to the guest's own memory — and for mutually untrusted tenants that or vGPU is still the answer.

What is not done

  • more than four guests, or guests doing anything heavier than vkcube at 720p. Four share the card evenly; eight has not been tried.
  • two cards, two driver versions. RTX 3060 / 595.99.02 is where the numbers come from; an RTX A2000 / 615.71.09 has rendered but is not benchmarked.
  • CUDA is forwarded but untested beyond enumeration; the jailer, per-version driver shares and the multi-tenant envelope are unbuilt.

Repository layout

Four components, three license zones. The split is deliberate: the guest half must be GPL to touch kernel symbols, the host half should be permissive so that other people can build on it, and the definitions both halves share must be includable from both.

The layout follows chromeos/virtio-media, which solves the same problem — one repository holding a GPL guest driver beside a permissively licensed, VMM-agnostic device crate.

Using it from a VMM

device/ depends on no virtual machine monitor. A VMM adopts the device by implementing a small set of traits — descriptor chains as Read/Write, an event queue, guest memory mapping, host memory mapping — and gets the whole device without patching the crate. Optional capabilities degrade rather than fail to build, so a VMM can adopt it before supporting every feature.

Buffer and window bookkeeping lives in device/. The VMM supplies raw map and unmap and nothing more.

One thing that will not be a trait: the isolate. The intended design runs one sandboxed helper process per guest process, so adopting it eventually means inheriting a process model, not just a library dependency. That helper is not written — the backend holds the device descriptors itself today — and isolate/ is where the design lives until it is.


Why

The streaming pipeline we want

Guest VM (headless, no physical display)
──────────────────────────────────────────

  Game / application
    │ Vulkan or OpenGL
    ▼
  Wayland compositor (guest-side)
    │ composites all windows
    │ CUDA zero-copy import of composed frame
    ▼
  NVENC hardware encoder (guest-side)
    │ H.264 / H.265 bitstream (~100 KB per frame)
    ▼
  Stream to remote client

The entire render → composite → encode pipeline runs on the GPU, inside the guest. Only the compressed bitstream leaves. This requires the guest to have real, driver-level access to GPU resources: buffer handles, fences, CUDA device pointers, NVENC sessions.

Why existing approaches fall short

virtio-gpu + Venus (API-level translation). Venus serializes every Vulkan or OpenGL call in the guest, transports it over virtio, and replays it host-side. Three problems for this use case:

  1. Latency compounds on draw-call-heavy workloads. Games issue 1,000–5,000 draw calls per frame plus binds, descriptor updates and render pass transitions, each serialized and replayed individually. At 60 fps the frame budget is 16.6 ms; 1–3 ms of serialization is 6–18% gone before any GPU work.
  2. CPU overhead is significant. Serialization, transport and replay burn host CPU the application needs. Where compute is billed and finite, that waste is the product.
  3. Guest-side encoding is not viable. GPU buffers are owned by the host. The guest compositor cannot see or import them, so there is no practical path to a CUdeviceptr in the guest pointing at a Venus-managed buffer — which means no NVENC without a full CPU readback and copy.

DRM native context (Intel / AMD). The guest runs the real Mesa driver, builds command buffers locally, and only submissions cross the boundary. Guest-side buffer ownership and encoding work correctly. This does not exist for NVIDIA.

VFIO passthrough. Native performance and a complete driver stack in the guest, but it dedicates the whole GPU to one VM. In multi-tenant environments that is often not an option.

What virtio-nvgpu does differently

Translation happens at the kernel driver level (ioctls to /dev/nvidia*), not the graphics API level. The guest runs NVIDIA's real user-mode libraries, which build GPU command buffers locally in the guest — individual draw calls are never serialized:

                    Venus                  virtio-nvgpu
                    ──────────────         ──────────────────────

Per draw call:      serialize +            local function call
                    transport +            (no VM exit)
                    deserialize +
                    replay

Per frame           ~2,000 messages        ~5–20 messages
  boundary          (one per API call)     (queue submits + allocs)
  crossings

GPU command         generated on HOST      generated in GUEST
  buffers           after replay           by NVIDIA's own compiler

CPU overhead        serialization +        near zero for rendering
                    deserialization        (only ioctl forwarding)

Guest buffer        HOST owns buffers      GUEST owns buffers
  ownership         compositor can't       compositor has full
                    track them             visibility and control

Guest NVENC         not viable             works (real CUDA interop)

How it works

Guest kernel driver. Registers /dev/nvidiactl, /dev/nvidia0…N and /dev/nvidia-uvm. On ioctl() it serializes the request onto a control virtqueue. On mmap() it maps the appropriate shared-memory region into the calling process with the correct caching attributes. It copies raw bytes and makes no ABI decisions.

Device crate. Receives requests, maps guest handles to host device file descriptors, performs ABI-aware translation of ioctl parameters — rewriting embedded pointers and file descriptors — and issues them against the host's devices. Buffer and window bookkeeping lives here.

Events. A second virtqueue runs the other way. The host watches each descriptor it has opened and says when one becomes readable, which is how a guest waiting for the GPU is woken. Without it the guest cannot wait at all — it polls a descriptor the kernel reports as permanently ready, and spins.

Isolate — not built yet. The plan is a sandboxed helper per guest process, holding the real device FDs and issuing the ioctl(2) calls unprivileged. Today the backend does that itself, inside the VMM's process. isolate/ holds the design and no code.

┌─ Guest ─────────────────────────────────────────────────┐
│  Application → NVIDIA Vulkan / GL / CUDA                │
│                     │ ioctl(/dev/nvidia*)               │
│  driver/ (GPL)      ▼                                   │
│    serialize → virtqueue                                │
│    mmap → shared region                                 │
└───────────────────────────┬─────────────────────────────┘
                            │ VM exit
┌───────────────────────────▼─────────────────────────────┐
│  VMM  (implements the device traits)                    │
│                                                         │
│  device/ (Apache-2.0)                                   │
│    ├─ guest handles → host FDs                          │
│    ├─ translate embedded FDs and pointers               │
│    └─ buffer + window bookkeeping                       │
│                     │                                   │
│    └─ ioctl(host /dev/nvidia*) · mmap → shared window   │
│       (an unprivileged per-guest isolate is planned,     │
│        and is not what runs today)                       │
│                                                         │
│  Host NVIDIA driver → GPU                               │
└─────────────────────────────────────────────────────────┘

Scope

Targeted

  • Vulkan rendering, including presentation to a compositor inside the guest — which needs /dev/nvidia-drm and /dev/nvidia-modeset, both of which are implemented and neither of which is a display: they are how a buffer becomes shareable
  • OpenGL rendering (headless EGL)
  • CUDA device memory allocation
  • CUDA ↔ Vulkan/GL interop, zero-copy, GPU-side pointers
  • NVENC encoding from CUDA device pointers; NVDEC decoding

Out of scope

  • cudaMallocManaged() / full unified virtual memory
  • scanout. No physical display output: there is no monitor on a streaming box, and the frame leaves as video rather than as pixels on a wire
  • MIG, SR-IOV
  • Arbitrary NVIDIA driver versions — each supported range is explicit, as with nvproxy

Performance

Measured, on one card, by one synthetic load — see BENCHMARKS.md for the method and the raw runs, and for what this does not support (it does not support a comparison with any other hypervisor, because none was run).

The difference is structural: Venus crosses the VM boundary per API call, thousands of times a frame. virtio-nvgpu crosses it per ioctl — and a render loop issues none, because submission is a write to mapped memory. What is left at very light frames is not forwarding but waiting: the guest sleeps for the GPU, and the wake costs ~0.02 ms however small the frame was.

The Venus column is that project's design envelope, not something measured here.


Driver versions

NVIDIA's kernel driver ABI is not stable; ioctl struct layouts change between releases. Support is explicit, and this is the whole list.

ABI profiles shipped:

Profiles key off ranges, not points: a release between two profiles uses the lower one, and anything newer than the last profile uses the last profile. Anything older than 535.129.03 is refused rather than guessed at — forwarding an ioctl whose layout has never been seen is how you get a plausible wrong answer instead of an error.

A driver much newer than the newest profile is therefore accepted on the assumption that nothing it needs has changed. That assumption is what a new profile exists to replace, and it is the first thing to suspect when a new driver misbehaves.

Driver versions actually run:

Two cards, two versions, one of them thoroughly. Anything else is untested.

How a profile is built

The cost is bounded, for three reasons. Profiles key off ranges, not points, so a release between two known versions selects the lower profile. The struct half is derived mechanically from NVIDIA's published open-gpu-kernel-modules at each tag — compile a probe per field, read back sizeof and offsetof — rather than transcribed by hand. And the judgement half, which commands exist and which are safe, tracks nvproxy upstream.

See gen/, and supported_versions() there for the list in code — that function, not this table, is the thing that decides.


Prior art

gVisor nvproxy — the direct inspiration. It forwards NVIDIA ioctls from sandboxed containers to the host driver, handling ABI versioning, pointer and FD translation, and GPU mmap management, and it supports Vulkan, OpenGL, CUDA and NVENC in production today. Its ABI definitions (pkg/abi/nvgpu) and handler logic (pkg/sentry/devices/nvproxy) are the primary reference. nvproxy also demonstrates that Vulkan and NVENC work without /dev/nvidia-drm or /dev/nvidia-modeset.

chromeos/virtio-media — the layout template. A GPL guest driver beside a VMM-agnostic Rust device crate, with every VMM concern behind a trait.

WSL2 /dev/dxg — a production driver-level GPU proxy across a real virtualization boundary, proving the general approach at scale. Different problem: it targets a Windows host and a Microsoft-defined kernel abstraction.

DRM native context (Intel / AMD) — the same goal, achieved for other vendors: the guest runs the real driver and builds command buffers locally, with only submissions crossing the boundary. virtio-nvgpu aims at equivalent capability for NVIDIA, where no native context exists.


License

Three zones, listed in Repository layout. Full texts: LICENSE-APACHE-2.0, LICENSE-GPL-2.0, LICENSE-BSD-3-Clause.

Code ported from other projects keeps its original terms.

The Daily Front Page 12 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — Safe Speed, at Last
article

Fearless SIMD v1.0

by verdagon·▲ 236 points·34 comments·linebender.org ↗
takes `unsafe` out of SIMD.

[fearless_simd](https://crates.io/crates/fearless_simd) takes unsafe out of SIMD.

It has come a long way since the original prototype 8 years ago. We are now confident that whatever it is you need, be it just autovectorization and multiversioning, or full-blown portable SIMD abstractions, or safe access to intrinsics and nothing more, Fearless SIMD will serve you well.

Instead of paraphrasing the changelog, I'd like to take this opportunity to reflect on the goals of Fearless SIMD, how it achieves them, and what sets it apart from other SIMD abstractions.

Performance

A common criticism leveled at portable SIMD abstractions is that they aren't performant enough, so we've put a lot of effort into making sure that Fearless SIMD never holds you back.

For example, when implementing portable abstractions for operations with different behavior in edge cases on different platforms, such as swizzles or floating-point maximum, we provide both a precise variant that's the same on all platforms, and a fast variant that returns a platform-dependent result for use when you expect the edge cases to never happen.

We also made it easy to express SIMD algorithms in terms of the hardware's native vector size, so that your code always takes full advantage of the hardware, no matter where it runs. Fixed vector sizes are also supported for algorithms that need them.

We also put a lot of effort into making sure the implementations of our portable SIMD operations are state-of-the-art, and even contributed improvements upstream - both to Rust and LLVM.

But if you need an instruction that isn't covered by portable abstractions, or want even more control, you can safely drop down to platform intrinsics with no overhead for the parts of your code that need it, and keep the rest simple and portable.

Thanks to safe access to intrinsics, there is no performance ceiling.

Safety

If you look up the source code of any other SIMD abstraction, you will find that it is full of unsafe code. Something like rg unsafe will turn up several thousand unsafe blocks.

But not in Fearless SIMD! The crate is carefully engineered not to require ad-hoc unsafe code.

One piece of the puzzle is the kernel! macro, which leans on target feature v1.1 in the compiler to invoke most SIMD intrinsics without unsafe. I have described the design in detail in an earlier blog post, so check this out if you'd like to learn more.

That removes most of the ad-hoc unsafe, but doesn't cover SIMD load/store operations which operate on raw pointers. That's where our safe transmute module, inspired by crates such as bytemuck and zerocopy, comes into play.

SIMD intrinsics like _mm_loadu_epi32 may seem special, but actually turn into plain loads and stores behind the scenes. So you can fully replicate their functionality with a single, reusable wrapper.

Thanks to the power of Rust's type system, we only need to audit these two small, self-contained building blocks. As long as they are memory-safe, the rest of the codebase is guaranteed to be memory-safe as well.

At last, SIMD in Rust can be truly fearless.

Ergonomics

Function multiversioning is tricky.

Previous solutions either require adding #[inline(always)] annotations and understanding their implications, or impose a small overhead on every function call. The latter is fine most of the time, but degrades performance on very small functions, and still requires you to surgically add #[inline(always)] to get around that.

Both are leaky abstractions - you still need to think about what is happening under the hood!

Alongside fearless_simd v1.0, we are launching fearless_simd_macros v0.1, which provides a non-leaky abstraction: the #[simd] macro. With it, you don't have to think about what's happening under the hood at all! Put it on any SIMD function and it Just Works.

That said, while this is a big step forward for the ecosystem, there is still some boilerplate involved. We are keen to reduce it further, either with compiler support via the Struct Target Features RFC to get rid of the #[simd] annotation entirely, or perhaps through other tricks we will explore in the future.

And if you don't like procedural macros, the old way of doing things is still available, if less convenient.

Ergonomics is the one area we expect may still evolve. But this does not compromise the stability guarantees of the core fearless_simd crate, and the code written today with or without the #[simd] macro will continue working indefinitely.

Stability

Fearless SIMD is here to stay. We will be providing 3 years of security updates for v1.0 and all later versions.

While we cannot see the future, there are viable paths to supporting both near-term Rust features, such as the f16 type, and longer-term features such as SVE and RISC-V Vector Extension if/when these hardware extensions become relevant, without API-breaking changes.

Relation to std::simd

We would love to see std::simd stabilized, but it would not make Fearless SIMD obsolete.

The Rust standard library implements only the parts that absolutely have to be in it, and the rest (e.g. multiversioning, hardware-width vectors) is left up to the ecosystem crates.

fearless_simd includes an equivalent of std::simd that works on stable Rust, but that is just one part of a bigger whole.

Once std::simd is stabilized, we will port Fearless SIMD to it to delete a lot of custom code and gain support for all sorts of obscure platforms. But the need for ecosystem crates such as fearless_simd will remain.

Adoption

It doesn't matter how brilliant your crate is if nobody is using it.

Fearless SIMD is already used by 30 other crates as a direct dependency, and is indirectly relied on by over a thousand crates!

It already underpins a nontrivial fraction of the Rust ecosystem, and we hope that v1.0 will take this even further.

If you'd like to use Fearless SIMD in your project, check out the documentation and examples, and feel free to ask questions on Zulip!

The Daily Front Page 13 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — The Parallel Desk
article

Book review: Is parallel programming hard, and, if so, what can you do about it?

by ahelwer·▲ 111 points·35 comments·ahelwer.ca ↗
I read a lot of this textbook, got my fill, and probably won’t read more of it

Here are my thoughts on the free online textbook Is Parallel Programming Hard, And, If So, What Can You Do About It? by Paul E. McKenney, author of the Linux kernel’s RCU synchronization mechanism. I read a lot of this textbook, got my fill, and probably won’t read more of it in the near future so wanted to write this review while it is all still fresh.

Set & Setting

Here I’ll talk about the mindset/life phase and physical setting I was in when I started reading this textbook. This might be like the tedious personal flavor preamble they have on recipe websites so skip ahead if that does not interest you.

My professional life had revolved around TLA⁺ & distributed systems for the past decade, and I was thinking it was time for a change. A transitional and emotionally tumultuous period! In 2022 I had tried (and failed) to move to Lean, hoping to acquire an unbelievably niche & nonexistent job as the guy who formalizes researchers’ quantum information processing results for them. I burned out on that, which given recent advances in automated theorem proving might have been my temporarily-prescient nervous system dodging me a bullet. Thus was the history & context in which I attended the 2026 Software Should Work conference in Columbia, Missouri.

The conference had a lot of good talks, but I especially enjoyed the one on Fil-C by Filip Pizlo:

I also got to talk to Fil a fair bit, about interpreters and then about concurrency. I fancied myself pretty knowledgeable about concurrency from TLA⁺ & distributed systems, but Fil told me about the difficulty of writing a concurrent lock-free garbage collector and I realized I actually knew very little about concurrency (feeling that you know very little is the mark of a good conference). Fil also mentioned TLA⁺ might not be useful (or at least ergonomic) for reasoning about events which happen literally concurrently (an actual possibility with a multicore CPU!) and the importance of analyzing concurrent algorithms for linearizability, a concept I sort of understood in the distributed systems sense.

All of this seemed very alluring, so I looked around for a textbook to read about concurrency that focused more on lock-free aspects as opposed to mutex-based or message-passing patterns. Is Parallel Programming Hard, And, If So, What Can You Do About It? seemed to fit the bill, focusing as it does on general concurrent programming & CPU cache effects instead of more specific textbooks about how to write lock-free datastructures. It also had a few (2023, 2021, 2020, 2015, 2014, 2011) moderately interesting HN threads. I don’t think it’s useful spending time in analysis paralysis trying to find the exact “right” textbook (this is really just a clever way to procrastinate), so it seemed good enough.

The physical setting in which I read this textbook was a 1.5 week vacation to visit my family in a quiet, wooded part of Canada. 2026 also turned out to be a particularly horrific mosquito season. Thus I spent much of the time sitting in a cool screened-in patio, diligently watched over by hundreds of guards ensuring I did not leave my post:

Satellites & cell towers have made distracting internet connectivity annoyingly good even in the more remote parts of the country, but otherwise this was an optimal textbook reading location.

The Textbook Format

Some quick notes on the actual structure of the textbook; it is available in no fewer than three separate formats, all PDF:

  1. A dual-column format, like a scientific paper
  2. A single-column format with large margins
  3. A single-column format with no margins

The last one is perfect for reading on my Pine64 PineNote.

The textbook contains a huge number of internal links. Some of these links are used in quick knowledge-check question boxes, where clicking the link takes you to the question’s answer. Other links are used whenever a figure or section is mentioned, or for copious footnotes & citations. Unfortunately the latter are very annoying and should probably be reduced by at least 80%. If your e-reader lacks physical page-turn buttons, then your experience of reading the book will consist of constantly accidentally pressing one of these links when you meant to turn the page and thus being sent who-knows-where. E-books are disorienting enough to navigate without this, and it pretty much meant it was impossible to quickly flip back & forth between two sections using repeated page-turn taps. For times where I did want to click a link, some places had two links right next to each other; touch screens lack the precision to reliably click one link instead of the other. The solution of simply disabling all links presents itself, but then you lose access to the quite nice knowledge-check questions. So I just suffered through it.

The Textbook Content - Introductory Chapters

The textbook was more or less the perfect presentation of material for my level. The book starts with nice light introduction & motivation chapters before heading off to the races in chapter 3, Hardware and its Habits. Here we learn about how modern CPUs work at a high level - what makes them fast, and what makes them slow. Complete with a bunch of humorous illustrations! Section 3.2.1 - Hardware System Architecture is where it really got interesting for me, as we are walked through a simplified account of a CPU core writing to a memory address that does not exist in its cache.

Here is one missed opportunity: I would have really benefited from a basic explanation of the MESI protocol, possessing essentially no intuition about how CPU caches mediate concurrent reads & writes. I found out about MESI while searching online to better understand this section; MESI is only mentioned in the appendix of this book. But my understanding of the rest of the book was greatly improved by knowing about it.

Learning about MESI also taught me that multiple CPU cores cannot write to the same data location literally concurrently! An x86 CPU doesn’t actually write directly to memory, it only writes to its cache (the cache value is then eventually flushed to memory). An x86 CPU core can only write to a particular address when it has exclusive ownership of the cacheline containing that address. If another core tries to write to that address at the same time, it has to wait for exclusive ownership of the cacheline to be moved to it. Thus literally concurrent writes do not actually happen. It is possible for writes to be torn if the data being written spans more than one cacheline, though.

Chapter 4, titled Tools of the Trade, was positively mind-bending. Here we learn that if you write parallel programs without due caution, the compiler will attempt unbelievably creative optimizations resulting in completely nonsensical behavior! Section 4.3.4.1, Shared-Variable Shenanigans, covers such horrifying mishaps as load tearing, store tearing, load fusing, store fusing, code reordering, invented loads, invented stores (particularly egregious), store-to-load transformations, and dead-code elimination. Then, assuming your code survived compilation unscathed, the chapter goes over the nonsense the CPU can pull when actually executing your program! This double trouble made it difficult for me to think straight about parallel programs beyond nice familiar mutexes or message-passing.

The one issue I had with this chapter is that it is very specific to a Linux kernel context. I would have liked to have learned about the work C++11 and C11 did to formalize parallel programming with things like std::memory_order. These were only given short paragraphs in sections 4.2.6 & 4.2.7, Atomic Operations (C11) and Atomic Operations (Modern GCC). I escaped the chapter armed with a vague idea that the ACCESS_ONCE() and WRITE_ONCE() macros just cast things to volatile* and that was enough to scare away the compiler. Very interesting historical developments, like the debate over whether benign data races were errors, were skipped entirely.

The Textbook Content - Main Chapters

Chapter 5, Counting, is probably the marquee chapter of the book. It was also the last chapter I read in any sort of depth. The chapter covers 10 or so different ways of writing a program where several threads increment a counter. The obvious non-broken implementation, where each thread uses atomic increment instructions, is dispatched early on by showing how terribly it performs. This is where my extracurricular understanding of MESI really came in helpful.

The chapter culminates in something called a signal-theft limit counter, which to be honest I do not entirely understand. I think if I were writing a counter myself I probably would not go that far. I really liked array-based per-thread statistical counters, with their similarity to conflict-free replicated datatypes from the distributed systems world. They were also an excellent vehicle for learning about the performance impact of false sharing - you can’t just chuck all the thread-specific counters in a single contiguous array and call it good!

After chapter 5 I mostly just skimmed the material looking for topics of interest. Some of the chapters were fairly conceptual, talking about ownership, partitioning, deferred processing, and other things readily translated from distributed systems. The Formal Verification chapter used Promela and Spin, which I wasn’t motivated to learn as a TLA⁺ user. The Validation chapter had a good section, 11.6.4, on Hunting Heisenbugs. Lock-free programming doesn’t really get covered until chapter 14, Advanced Synchronization, and at that point I was ready to move to a textbook focusing on lock-free programming & data structures specifically. Chapter 15 finally covers memory ordering, but I had already moved on to extracurricular sources trying to fix my confusion about it.

Overall review

Although I only read the first five chapters in-depth, I think this textbook is excellent. I say this because it really gave me a thirst to learn more about parallel programming! Most lunches at work I struggle to keep myself from infodumping whatever nonsense I’ve learned onto my coworkers. Like did you know about the failure of formalizing release-consume ordering? Or how basic aligned loads & stores using mov are atomic on x86? Or out-of-thin-air values? Or the incredibly weak memory model of the DEC Alpha? Or how release-acquire semantics work? Or how deterministic simulation testing cannot (yet) meaningfully test lock-free algorithms? Or how atomics on ARM (pre-v8) can be pre-empted? There’s a goldmine of comedically unintuitive nonsense here. I want to learn about high-performance garbage collection next. Taking recommendations!

The Daily Front Page 14 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — Heat Beneath the Map
article

Geothermal heat map of US hot springs

by armenarmen·▲ 98 points·39 comments·soakingsprings.com ↗
Every hot spring on this site, plotted over a map of the heat rising through the ground.

Every hot spring on this site, plotted over a map of the heat rising through the ground. The warm colors mark where heat from deep in the earth reaches the surface fastest, and the springs crowd into them.

Why Hot Springs Crowd Into the West

Heat flow measures how much warmth works its way up from deep inside the earth, in milliwatts per square meter. Across the United States it averages about 65.

Most of the West runs well above that. The crust there has been stretched thin and broken by faults, which leaves hot rock closer to the surface. Rain and snowmelt sink down through those cracks and come back up hot.

The cool blue East has only a scattering of springs. Most of them, like the ones in Hot Springs, Arkansas, and Warm Springs, Virginia, come from water that circulates unusually deep before it surfaces.

The Hottest Ground and the Hottest Water

Heat flow at each spring, from the Stanford Thermal Earth Model.

  1. Steamboat Springs Nevada 257 mW/m² 205°F water
  2. Steamboat Springs Nevada 236 mW/m² 205°F water
  3. Johnson Warm Spring Utah 200 mW/m² 77°F water
  4. St Helena White Sulphur Spring California 199 mW/m² 97°F water
  5. Utah Hot Springs Utah 198 mW/m² 138°F water
  6. Fumarole California 197 mW/m²
  7. Davis Soda Spring California 193 mW/m² 73°F water
  8. White Sulphur Springs (California) California 192 mW/m²
  9. Sulphur Bank California 191 mW/m² 156°F water
  10. Calistoga Hot Springs California 191 mW/m² 172°F water
  11. Anderson Springs, California California 191 mW/m²
  12. Newman Springs California 186 mW/m² 94°F water
  13. The Geysers California 186 mW/m² 214°F water
  14. Unnamed spring California 186 mW/m² 120°F water
  15. Unnamed spring California 183 mW/m²
  16. Anderson Springs California 183 mW/m² 108°F water
  17. Los Guilicos Warm Springs California 182 mW/m² 88°F water
  18. Castle Rock Springs California 182 mW/m² 163°F water
  19. Unnamed spring California 181 mW/m² 81°F water
  20. Unnamed spring California 181 mW/m² 70°F water
  21. Unnamed spring California 179 mW/m² 90°F water
  22. Durfee Spring Idaho 179 mW/m² 102°F water
  23. Harbin Springs California 178 mW/m² 120°F water
  24. Quigley Soda Spring California 178 mW/m² 82°F water
  25. Unnamed spring California 178 mW/m² 83°F water

Measured water temperature. Many of the hottest are geysers and boiling pools that nobody can soak in.

  1. Sherman Crater Fumaroles Washington 266°F 79 mW/m² heat flow
  2. Fumaroles On Kanaga Island Alaska 219°F
  3. Hot Springs Near Geyser Bight Alaska 216°F
  4. The Geysers California 214°F 186 mW/m² heat flow
  5. Hot Springs Near Geyser Bight Alaska 214°F
  6. Little Geysers California 210°F 177 mW/m² heat flow
  7. (Soda Lake Area) Nevada 210°F 147 mW/m² heat flow
  8. Bradys Hot Springs Nevada 209°F 167 mW/m² heat flow
  9. The Needle Rocks Hot Spring Nevada 208°F 92 mW/m² heat flow
  10. The Needle Rocks Hot Springs Nevada 208°F 92 mW/m² heat flow
  11. Beowawe Hot Springs (The Geysers) Nevada 208°F 108 mW/m² heat flow
  12. Hot Springs (Surprise Valley) California 208°F 91 mW/m² heat flow
  13. Great Boiling Spring (Gerlach) Nevada 208°F 83 mW/m² heat flow
  14. Lake City Hot Springs California 207°F 100 mW/m² heat flow
  15. Devils Kitchen California 207°F 110 mW/m² heat flow
  16. Coso Hot Springs California 207°F 116 mW/m² heat flow
  17. Hot Springs Oregon 207°F 75 mW/m² heat flow
  18. Leach Hot Springs Nevada 207°F 96 mW/m² heat flow
  19. Hunters Hot Springs Oregon 205°F 127 mW/m² heat flow
  20. Wendel Hot Springs California 205°F 81 mW/m² heat flow
  21. Morgan Hot Spring California 205°F 110 mW/m² heat flow
  22. Morning Mist Springs Wyoming 205°F 141 mW/m² heat flow
  23. Flat Cone Spring, Steep Cone Wyoming 205°F 147 mW/m² heat flow
  24. Steamboat Springs Nevada 205°F 236 mW/m² heat flow
  25. Sulphur Hot Springs Nevada 205°F 123 mW/m² heat flow

Heat Flow Under Each State's Springs

Median heat flow at the springs in each state. The dashed line marks the US average of 65.

Colorado 129 68 springs Wyoming 124 132 springs Idaho 114 235 springs California 109 319 springs Utah 109 116 springs Nevada 100 314 springs Montana 97 62 springs New Mexico 97 81 springs Washington 94 30 springs Arizona 89 66 springs Oregon 79 126 springs Virginia 75 11 springs Texas 69 11 springs Arkansas 67 6 springs West Virginia 60 5 springs Georgia 56 7 springs

Geothermal Heat From Orbit

Landsat's thermal camera reads the temperature of the ground from about 440 miles up. On a clear winter day the biggest geothermal areas glow against the frozen land around them. Each card pairs a photo of the spring, or an aerial view where there's no good photo, with what the thermal camera saw.

Photo and Landsat thermal view of Midway Geyser Basin

Midway Geyser Basin Wyoming · thermal view Dec 5, 2020

Midway Geyser Basin, home of Grand Prismatic Spring. The bright thread running through it is the Firehole River, which hot runoff keeps free of ice all winter.

Photo: Michael Gäbler, CC BY 3.0

Photo and Landsat thermal view of Imperial and Spray Geysers

Imperial and Spray Geysers Wyoming · thermal view Dec 5, 2020

Two hot spots mark Imperial and Spray Geysers, tucked into the forest west of the Firehole in Lower Geyser Basin.

Photo: Yellowstone National Park, public domain

Photo and Landsat thermal view of Norris Geyser Basin

Norris Geyser Basin Wyoming · thermal view Dec 5, 2020

Norris Geyser Basin is the hottest in Yellowstone, and the whole basin glows through the snow.

Photo: Frank Schulenburg, CC BY-SA 4.0

Photo and Landsat thermal view of Hot Creek Gorge Springs

Hot Creek Gorge Springs California · thermal view Jan 5, 2022

Hot springs boil up in the bed of Hot Creek, so the stream below them stays warm and shows up as a glowing ribbon through the snow.

Photo: Matthias Nonnenmacher, CC BY-SA 4.0

Aerial view and Landsat thermal view of Casa Diablo Hot Springs And Geyser

Casa Diablo Hot Springs And Geyser California · thermal view Jan 5, 2022

Casa Diablo sits beside a geothermal power plant near Mammoth Lakes. The steaming ground and the plant show up as separate hot spots.

Photo and Landsat thermal view of Boiling Springs Lake

Boiling Springs Lake California · thermal view Jan 19, 2025

A lake of hot water and boiling mud in Lassen Volcanic National Park. It stays near 125°F all year, warm enough to glow as one bright spot in a snowbound valley.

Photo: Frank Schulenburg, CC BY-SA 4.0

Heat flow: Stanford Thermal Earth Model (Aljubran & Horne, 2024), CC BY 4.0. It covers the lower 48 states. Download the data (CSV), free to reuse under CC BY 4.0 with credit to Soaking Springs and the Stanford Thermal Earth Model. Thermal views: Landsat 8/9 surface temperature, USGS (public domain), via Microsoft Planetary Computer. Aerial views: USGS The National Map (public domain). Photos: Wikimedia Commons, credited on each card.

The Daily Front Page 15 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — A Moonshot in Orbit
article

Google’s Project Suncatcher to put ML infrastructure in space

by xnx·▲ 164 points·298 comments·blog.google ↗
our moonshot to put AI in space

Learn about our early test to scale AI compute in space. In a new video series, the Project Suncatcher team explores the science behind this moonshot, what they've found, and the engineering challenges that remain to be solved.

After years of research, Project Suncatcher is scheduled to embark on its first test in orbit, launching a prototype satellite to evaluate how Google Tensor Processing Units (TPUs) perform in space.

Announced last year, Project Suncatcher is a long-term, research moonshot exploring whether space could one day host scalable machine learning infrastructure. In low Earth orbit, satellites can access near-constant sunlight, generating up to eight times more solar power than on Earth. Eventually, it could be possible to link together multiple constellations of satellites, allowing them to manage larger AI workloads while in orbit.

Big breakthroughs happen when you work backwards from an end goal. In our case, it's to ensure AI's profound benefits in key areas, from healthcare to scientific discovery, can reach everyone, far into the future. Just as early research into autonomous driving and quantum computing required years of experimentation before we got to practical systems, exploring compute in space begins with measured, deliberate steps.

Turning that idea into reality starts with a basic question: Can our AI hardware operate in space? This initial mission onboard the upcoming Transporter-18 rideshare mission with SpaceX was developed in partnership with Planet. It’s designed to gather in-orbit data on how our TPUs handle the physical stress of spaceflight and the radiation and thermal extremes of space.

As we prepare for an early test launch and work toward our next milestone in 2027, the Project Suncatcher team discussed what we hope to learn and the engineering hurdles ahead in a new video series digging into the science behind the mission.

Hardware survival

A rocket trip into low Earth orbit lasts about 10 minutes, during which the spacecraft experiences intense vibration and sustained acceleration loads up to 10 times the force of gravity, or g-force. Individual components, such as the TPU chips, can experience even greater forces up to 50 to 100 g. The team conducted vibration testing by intensely shaking the satellite on all three axes to mimic the frequencies of a rocket launch. Tests like this rarely go as planned, so we were pleasantly surprised that the hardware held up to the force.

Once the TPU chips make it to space, the level of radiation outside the Earth’s atmosphere presents another challenge to overcome. Solar events and cosmic rays can wreak havoc on electronics, so our team tested TPUs in a proton beam facility at UC Davis’s Crocker Nuclear Laboratory while running AI workloads. During the test, we monitored closely to see how errors, like a bitflip, would affect our workloads. Initial results have shown that our Trillium TPUs hold up remarkably well, and can survive a radiation total ionizing dose greater than what they would receive during a five-year space mission.

But some things can only be tested in space. Putting our first TPUs in orbit next week will help us get data and learnings to inform future launches.

Cooling in space

Cooling orbital data centers is a crucial research challenge. TPUs generate a large amount of heat in a small area, which needs to be diffused safely or the chips are at risk of overheating. But in space, there’s no airflow. In a vacuum, you can only diffuse heat via radiators, which requires a totally different approach to cooling electronics.

We’re working on a number of different approaches for this, including a combination of heat pipes and radiators to cool the chips. So far, our team has tested the technology in a thermal vacuum chamber that simulates both the thermal and vacuum environment in space. We’ll see how our new TPU cooling system works in space and refine our designs as we learn more.

Satellite interconnectivity

Future designs of our satellites will each carry dozens of TPU chips while orbiting the Earth in clusters. To maintain the bandwidth necessary to process AI, every satellite has to know both its own position and where it sits relative to its neighbors. To do this, the satellites will communicate via lasers.

The technology in space already exists, but most state-of-the-art systems are optimized for low bandwidth across large distances, whereas our lasers need to operate at very high bandwidth over extremely short distances. Maintaining the necessary connection requires extraordinary precision, similar to hitting a coin-size target from miles away while both points are in motion. We’ll test our work on this in 2027 when we put two satellites in orbit.

Just the beginning

Exploring space as a viable location for scalable AI compute won’t happen all at once. It takes methodical engineering, starting with proving our hardware can handle the physical and unpredictable realities of operating in orbit. This first launch is about seeing what works, identifying points of failure, and applying those findings to future missions.

Every transformative technology we’ve built at Google began with an audacious goal — and the discipline of working backward to solve hard problems all along the way. As our latest moonshot heads to the launchpad, our team is excited to share what we learn and the science driving this work forward.

The Daily Front Page 16 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — The Mathematics of a Weak Key
article

Forging 1024-bit RSA signatures in nearly SNFS time [pdf]

by int0x29·▲ 60 points·10 comments·eprint.iacr.org ↗
forge RSA signatures after temporary access to a raw RSA signing/decryption oracle

Abstract

The security of RSA is generally understood to be based on the complexity of factoring, and key size parameters are extrapolated from the general number field sieve (GNFS). However, this may not accurately represent RSA security in practical scenarios.

An under-appreciated 2007 algorithm of Joux, Naccache, and Thomé allows an attacker to forge RSA signatures after temporary access to a raw RSA signing/decryption oracle in time close to the special number field sieve (SNFS) without factoring the key. We implement and run this algorithm for 1024-bit RSA. In total, the attack took 1380 CPU core-years over five calendar months, and made 2³² oracle queries. Most of this time is precomputation; after the precomputation the attacker can forge any signature of choice, offline, in 180 core-years.

We carried out our attack using a hardware security module (HSM) as the signing oracle, thus demonstrating the ability to impersonate the HSM through black-box API interactions, without exfiltrating the key. Blind RSA schemes also provide such a signing oracle.

Extrapolating our empirical running times to larger key sizes, we conclude that the concrete security of RSA with a signing oracle should be 15 to 30 bits lower than the factoring-based security estimates for the 1024-bit to 4096-bit RSA parameters that are common in practice. Even 4096-bit RSA does not appear to meet a 128-bit security level in this attack model. This highlights a gap in current RSA-type security assumptions, and gives classical cryptanalytic evidence in favor of moving away from RSA entirely during the current post-quantum transition.

1 Introduction

In this paper, we carry out an attack that allows us to forge arbitrary 1024-bit RSA digital signatures (or decrypt arbitrary ciphertexts) using academic computational resources, without factoring the modulus. This attack reduces RSA security levels below acceptable thresholds for modern cryptographic deployments, and demonstrates a theoretical gap in RSA-based security assumptions and practical parameter choices.

Alternative title: Nearly Special-Number-Field-Sieve-Speed Signature Forgery Sans Factoring N (NSNFSSSFSFN)

The threat model we consider is a “lunchtime attack,” or a non-adaptive chosen ciphertext attack (IND-CCA1)—an attacker who obtains temporary access to an RSA signature/decryption oracle for a given key, and then is challenged to generate a signature forgery or ciphertext decryption after losing access. We demonstrate that temporary oracle access, together with much more modest computational resources than factoring the modulus would require, can give the attacker the permanent ability to forge arbitrary signatures for that key pair offline. That is, the attacker can effectively use oracle queries to steal abilities equivalent to possessing the private key, without actually computing it.

The attack runs in two separate stages: an initial precomputation and oracle query phase, followed by a fully offline signature forgery/decryption phase that can be repeated at will for arbitrary targets and requires no further oracle queries. The precomputation stage depends only on the modulus N and took us about 1,200 core-years to complete. The oracle query phase required us to query around 2³² raw, unpadded RSA signatures/decryptions. We carried out our oracle queries using an HSM (Hardware Security Module). The final offline phase takes around 180 core-years to forge any signature (or target decryption). In comparison, current estimates for factoring a 1024-bit RSA modulus would take 500,000–1,000,000 CPU core-years with current implementations [15]. The computation time for our attack can almost certainly be improved, and should be interpreted as an upper bound.

The attack we implement is from a 2007 paper of Joux, Naccache, and Thomé [42]. Their attack runs in asymptotic time (L_N(1/3, 1.577 + o(1))), close to that of the special number field sieve. This is significantly less than the (L_N(1/3, 1.923 + o(1))) running time of the general number field sieve for factoring. We implemented several algorithmic improvements and had to overcome a number of computational challenges to carry out this attack for 1024-bit RSA. We detail the implications for both practical and theoretical settings below.

1.1 Practical impacts

RSA digital signatures are still in wide use for important protocols like TLS and OAuth [13], with 2048-bit keys the most common choice. RSA’s days are numbered, however: NIST plans to deprecate it by 2030 and disallow it by 2035 in favor of post-quantum algorithms [54], and the transition to hybrid and post-quantum algorithms is underway. Although NIST disallowed 1024-bit RSA in 2013 for signature generation [6] and modern implementations have largely migrated to 2048 bits, 1024-bit keys are still allowed for signature validation under legacy use [7], and remain in use today. (See Section 7.4.)

While the hardness of factoring is generally used to determine RSA key strengths (e.g. in NIST SP 800-56B Rev. 2 [53]), there are several practical usage scenarios that match the signing oracle access attack model we consider in this paper. Such an attack likely does not pose an immediate operational threat to most modern RSA deployments, but it demonstrates that RSA provides significantly less security than the factoring-based security estimates would suggest in these settings.

Security estimates. 1024-bit RSA is generally considered to provide 80 bits of security; we estimate that the algorithm we implement has 2⁶⁵ running time for 1024-bit RSA. Scaling the asymptotic running time to 2048-bit RSA gives a 2⁹⁰ running time for the attack, with 2⁴³ queries, a significant reduction from the 112-bit security that 2048-bit RSA is generally understood to provide. Even 4096-bit RSA fails to achieve 128 bits of security in this attack model—we extrapolate that such an attack would take 2¹¹⁹ computation time and require 2⁵⁷ queries. See Section 6 for more details.

Hardware security modules. Hardware security modules (HSMs) are often used to protect secret keys and accelerate cryptographic operations in enterprise environments. Current security auditing best practices, as well as standards such as PCI DSS [57], encourage or require the use of HSMs to protect key material. Standards such as FIPS 140-3, ISO/IEC 19790, ISO/IEC 24759, and ISO/IEC 15408 (Common Criteria) define requirements for these types of cryptographic modules to be tamper-proof and include side-channel countermeasures to protect keys even against an attacker with physical access.

The PKCS 11 standard [55] implemented by nearly all HSMs provides an interface for raw RSA operations that exactly matches the oracle query functionality required by our attack. Thus, in a threat model requiring an HSM to protect private keys in such a scenario, our attack can be viewed as allowing an attacker to effectively extract capabilities equivalent to the private key in a feasible amount of time with only black-box access to the HSM itself.

Blind signature schemes. RSA-based blind signature schemes also provide the type of signature query oracle required by our attack, and thus this attack should be interpreted as lowering the bit security of RSA in protocols using blind signatures. We analyze some deployed applications in Section 7.2 and observe that the 2048-bit key sizes common in practice provide too low of a security threshold.

1.2 Theoretical impacts

The problem of breaking RSA (that is, computing eth roots modulo an integer N of unknown factorization) has not been shown to be equivalent to factoring N in the nearly 50 years since the invention of the RSA cryptosystem. Results in various models [1] have not been shown to apply to (Z^*_N).

There are a number of computational assumptions associated with RSA security. A prominent one for signatures is the one-more RSA assumption [8].

However, we observe that the attack we implement, which we name (\tilde{\sqrt{\mathrm{NFS}}}), does not align with one-more RSA or variants despite being a clear practical threat.

We propose that there is a gap both in the practice of using the running time of GNFS to set parameter sizes for these RSA-type assumptions, and in the assumptions themselves. We do not resolve this gap. We suggest that precomputation attacks should be captured in RSA-type assumptions, and that subexponential-time attacks (including their lower-order terms) should be reasonably analyzable in those frameworks. We have named our attack setting “delayed-target RSA” in line with the naming scheme of Koblitz and Menezes [45]. We discuss this in detail in Section 5.

1.3 RSA progress in general

The algorithmic result we use has been known for two decades but the impact on RSA parameter choices does not appear to have been understood in the community. We hope that our concrete implementation for a landmark key size makes the difference much clearer. 1024-bit RSA has long been considered a minimal security level, and remains in use today in some specialized cases.

Coincidentally, the factorization of RSA-260, along with that of a 1277-bit special modulus, was publicly posted [48] a few days after our own computation finished. At least two individuals had been independently working on RSA-260, using AI to translate CADO-NFS to run on GPUs, and then using GPU compute from their AI company employers to run it [70]. Both our findings and the pre-2026 factoring records were completed using academic computational resources and engineering skills, a far cry from industry- or state-level adversaries.

That leaves substantial leeway before one can get a sense of the feasibility limit that would apply to adversaries with larger computing power. Extrapolations that RSA-1024 could be factored in weeks using industry-grade GPU facilities are no fantasy. The important takeaway is that improvements to sieving for the GNFS, including to ECM or sieving on GPUs, can definitely be obtained. Any speed improvements to CADO-NFS would apply in a straightforward way to the (\tilde{\sqrt{\mathrm{NFS}}}) algorithm as well. Weis and Lu report that factoring RSA-260 cost 2⁵ to 13.5 GPU-years (respectively) using their implementations. A back-of-the-envelope scaling suggests that our 1024-bit RSA signature forgery computation would take between 2 and 9 GPU-years if we had used their implementations; for 2048 bits a very rough estimate would be 2²⁷ GPU-years.

NFS development. CADO-NFS [64] is an open-source implementation of the number field sieve algorithms for factoring and discrete logarithm that has been used for several recent computational records. The algorithm that we implement did not have a public implementation prior to our work. Our implementation makes use of the highly optimized CADO-NFS code for sieving, linear algebra, and descent, among other algorithmic procedures, but uses them in a different setting, in a different order and with different parameters.

Our engineering work does not hugely transform the CADO-NFS codebase we started with—at least for the usual number field sieve algorithms. However it took significant technical effort to port CADO-NFS to our setting, and our work could be useful for other such extensions to the NFS. The progression of our 1024-bit computation—from parameter selection to CADO-NFS roadblocks to algorithmic changes—will be an informative data point for future large computations. In particular, we implemented interesting variations of algorithms for descent, and for eth roots in a number field.

The future of RSA. The community has been focusing on quantum computing attacks as a reason to retire RSA, and the classical cryptanalysis of RSA has been largely regarded as settled for decades, with occasional factoring records set by teams that track with general-purpose computing improvements over the years. We hope that our computation here illustrates that there are still surprises to be found in the classical cryptanalysis of RSA, and if more attention had been paid there would have been even stronger reasons to retire RSA earlier.

The security of RSA and the family of NFS-based algorithms used to calculate RSA key sizes should not be viewed as a static monolith. Even the classical security of RSA is more complex than is generally appreciated in the community.

While we do not believe that the attack we implement should be cause for immediate alarm among practitioners managing cryptographic inventory in industry—it is practical in an academic sense rather than in the script-kiddie sense, and the attack model of a raw, unpadded RSA signing oracle is very strong in practice even if academically relevant—we believe that this attack demonstrates that 2048 to 4096-bit RSA falls short of modern cryptographic security levels requiring 128 bits of security or larger. Given this, the current transition to post-quantum algorithms presents an opportunity to transition to modern algorithms and security levels in the next few years.

1.4 Summary of computational results

We summarize the results of our large computations in Figure 1. Our code is available at https://github.com/ucsd-hacc/NSNFSSSFSFN.

Key length Precomputation (core-years) Queries Individual forgery (core-years)
512 0.01 2²³ 0.001
666 3.5 2²⁷ 0.07
768 56 2²⁷ 42
1024 1200 2³² 180

Figure 1. Empirical running times for (\tilde{\sqrt{\mathrm{NFS}}}). We experimented with different parameter settings giving different tradeoffs for different phases of the algorithm.

Algorithm Complexity Modulus size Year, citation CPU time Wall time
GNFS-DL G 795 2019 [14] 3200 core-years
GNFS G 795 2019 [14] 1000 core-years
GNFS G 829 2020 [14] 2700 core-years
SNFS-DL S 1024 2016 [28] 385 core-years 2 months
SNFS S 1039 2007 [3] 225 core-years > 6 months
GNFS (GPU) G 862 2026 [48] 13.5 GPU-years
GNFS (GPU) G 896 2026 [71] TBA
SNFS (GPU) S 1277 2026 [48] 6.6 GPU-years
(\tilde{\sqrt{\mathrm{NFS}}}) S+ 512 2007 [42] > 2 core-days
(\tilde{\sqrt{\mathrm{NFS}}}) S+ 512 this work 4.8 core-days 70 minutes
(\tilde{\sqrt{\mathrm{NFS}}}) S+ 666 this work 3.6 core-years 33 hours
(\tilde{\sqrt{\mathrm{NFS}}}) S+ 768 this work 98 core-years 3 weeks
(\tilde{\sqrt{\mathrm{NFS}}}) S+ 1024 this work 1380 core-years 5 months

Figure 2. Related record computations for factoring, discrete logarithm, and (\tilde{\sqrt{\mathrm{NFS}}}). We categorize complexity as either General (G), Special (S), or slightly above special (S+).

2 Preliminaries

Number field sieve. The fastest known classical general-purpose algorithms for factoring and discrete log are a family of Number Field Sieve (NFS) algorithms. To disambiguate, we will refer specifically to the GNFS and SNFS variants, and their discrete log variants GNFS-DL and SNFS-DL. The “G” variants work for a general modulus, meaning any generic integer modulus. The “S” variants only work for a special modulus—in brief, a modulus that admits an efficiently discoverable number field where sieving is faster.

The topic of this paper is what we call the (\tilde{\sqrt{\mathrm{NFS}}}) algorithm (“eth root NFS”). It was introduced in 2007 by Joux, Naccache, and Thomé (JNT) [42, §4]. (\tilde{\sqrt{\mathrm{NFS}}}) is not a straightforward extension of the usual GNFS or GNFS-DL algorithms. While it reuses large parts of them, the steps are slightly different, and the parameter tradeoffs differ even further. We will elaborate on this later; for now we stress that (\tilde{\sqrt{\mathrm{NFS}}}) should be viewed as a different algorithm in the NFS family. For a readable but exhaustive resource on the NFS, we refer the reader to the lecture notes and references in [69].

Figure 2 lists some record computations along with our own results. An up-to-date list is often kept on Wikipedia [72]. We have omitted the breakdown of precomputation/individual computation in this table; there is a similar division for the discrete log variants but not for factoring.

Subexponential complexity. The running times of all of the algorithms we discuss in this paper are subexponential, with running time expressed asymptotically as (L_N(\alpha, c)^{1+o(1)}) with

[ L_N(\alpha, c) = \exp(c \cdot (\ln N)^\alpha(\ln\ln N)^{1-\alpha}). ]

In this paper, we will always encounter (\alpha = 1/3) with a varying (c).

The running time of the GNFS for factoring is (L_N(1/3, (64/9)^{1/3} + o(1))) with N the integer to be factored, and (c \approx 1.923). This is the fastest known asymptotic running time to factor generic integers, such as well-generated RSA moduli. The running time of the GNFS-DL for prime field discrete logarithm is the same, with N the prime modulus.

The running time of the SNFS for factoring is (L_N(1/3, (32/9)^{1/3} + o(1))), which improves (c \approx 1.526). The SNFS can be used to factor integers that are efficiently expressable in a special form; for example it applies to integers close to a power of 2. To give an intuitive sense of this difference, a 1024-bit RSA modulus has yet to be factored publicly, but a 1039-bit Mersenne number was publicly factored using the SNFS algorithm in 2007 with 225 core-years of compute effort [3]. A similar gap exists in the discrete logarithm case [28].

For our purposes, “nearly special” complexity is (L_N(1/3, 1.577 + o(1))). This is the overall complexity of the (\tilde{\sqrt{\mathrm{NFS}}}) algorithm when a practical variant called extension sieving is used. (Which we did.) The full statement of the running time, along with the proof, were given in [42].

Our problem setting. The most apt name we have seen for our RSA problem of interest is “delayed-target RSA” following the terminology of Koblitz and Menezes [45] when discussing JNT’s work. We give some more detail and context for this in Section 5. For now, we describe the problem as follows. An attacker is assumed to operate in two phases, sharing state between them. In the first phase, they are given an RSA public key (N, e) and may query an oracle which, on input w, returns (w^{1/e} \bmod N). (In usual notation, (1/e = d \bmod \phi(N)).) In the second phase, the attacker receives a target (t \leftarrow$ Z^*_N) and loses access to the oracle. They must produce (t^{1/e} \bmod N) to win the game.

It turns out that, as currently known, an attack on delayed-target RSA does not yield an attack for usual RSA (without the oracle), nor for factoring. There is a more subtle relationship to one-more RSA [8], a more popular assumption used to prove security of blind signatures. We discuss that relationship in Section 5.

Other similar attack settings. Problem definitions like delayed-target RSA have made some appearances in the literature. On the attack side, JNT considered our delayed-target RSA as well as variants for other padding schemes [42]. Joux, Lercier, Naccache and Thomé [41] considered delayed-target CDH in finite-field groups, where a similar attack applies. Koblitz and Menezes [45] gave attacks for delayed-target DL on hyperelliptic curves. On the constructive side, delayed-target CDH was used to prove security of Freeman’s identification scheme [27]. Delayed-target DDH has appeared in proofs for the CCA1 security of ElGamal [47] and Cramer-Shoup [9]. We are not aware of any proofs relying on delayed-target RSA; if any exist they are likely under a different name.

3 The (\tilde{\sqrt{\mathrm{NFS}}}) algorithm, with our additions

The (\tilde{\sqrt{\mathrm{NFS}}}) algorithm is from Section 4 of JNT [42]. That paper refers to the “one-more RSA inversion” problem but to be technically precise, it is attacking delayed-target RSA as we defined in the Preliminaries.

Our implementation of (\tilde{\sqrt{\mathrm{NFS}}}) uses CADO-NFS [64], SageMath [67], PARI [66] and additional code written in Python. It makes heavy use of existing NFS ideas and folklore. The major modifications and new techniques are discussed in this section, along with enough background to be understandable. The specific parameters and progression of the 1024-bit computation are discussed in Section 4.

3.1 Bird’s-eye view

The (\tilde{\sqrt{\mathrm{NFS}}}) algorithm can be viewed as a malleability attack, combining ideas from the GNFS and GNFS-DL algorithms.

Broadly, the goal is to be able to express any target t as a product of elements whose eth roots we know from precomputation and oracle queries. Of course, if these “elements” are only rational primes, the running time and success probability are wholly impractical. Rather we develop an equivalence, following the same notations as in [42, §4.1]:

[ t^d = \left(\frac{u}{v}S(m)\right)^d R(m)\cdot T(m)^d\cdot U(m)^d ]

where m is from our setup; u, v, and S are from descent; T is from precomputation; U is from linear algebra; R is from taking a root in the number field; and all the dth powers are known from precomputed oracle queries. Roughly, lowercase letters are integers and uppercase letters are rational functions.

In a nutshell, the algorithm approaches SNFS complexity because it only needs to sieve for smooth relations on one side, compared to two sides for GNFS.

The “other side” is traded for oracle queries. However, the descent phase does not become easier, which necessitates rebalancing the steps of the computation.

3.2 Detailed view: Precomputation and oracle queries

Polynomial selection. Given a modulus N, we select two polynomials f, g such that (f(m) = g(m) = 0 \bmod N) for a shared root m. For all relevant cases we ran, an optimal choice of degrees is (\deg(g) = 1) and (\deg(f) \in {5, 6}). Our number field is then (K = \mathbb{Q}(\alpha)) where (f(\alpha) = 0). Its ring of integers is (O_K). For later steps it is useful to select f such that the public RSA exponent e is unramified (or even inert) in K, and there are several other small inert primes. Other than these extra checks, the usual NFS polynomial selection can be used.

There are assumed to be three smoothness parameters input to the algorithm: (B_{\mathrm{alg}}, B_{\mathrm{ext}},) and (B_{\mathrm{rat}}). Let:

[ F_{\mathrm{alg}} = {p \mid p \subset O_K \text{ is prime and } |p| < B_{\mathrm{alg}}} ]

[ F_{\mathrm{ext}} = {p \mid p \subset O_K \text{ is prime and } B_{\mathrm{alg}} < |p| < B_{\mathrm{ext}}} ]

[ F_{\mathrm{rat}} = {p \mid p \in \mathbb{Z} \text{ is prime and } p < B_{\mathrm{rat}}}. ]

We call these sets “factor bases.”

One-sided precomputation sieving. We made slight fixes to the CADO-NFS las program to allow for one-sided sieving. For (\tilde{\sqrt{\mathrm{NFS}}}), in contrast to the GNFS and the SNFS, precomputation sieving is done only on the algebraic side. It is broken down into two steps. In the first, algebraic sieving, sieving is performed to find relations that are (B_{\mathrm{alg}})-smooth. By “relation” we mean a tuple (a, b) and a factorization such that

[ (a-b\alpha) = \prod p_i^{\mu_i} ]

where ((a-b\alpha)) is the ideal generated by (a-b\alpha \in K), and the (p_i) are all in (F_{\mathrm{alg}}). We find enough of these algebraic relations such that every (p_i) in (F_{\mathrm{alg}}) is included in at least one relation.

The second sieving step is extension sieving. For every (q \in F_{\mathrm{ext}}), special-q sieving is performed to find one relation where the factorization includes exclusively q and primes (p_i) that are in the smaller (F_{\mathrm{alg}}) (or at least of norm less than the norm of q). In practice, this does not need to occur for every (q \in F_{\mathrm{ext}}), but it should occur for a good portion of them.

Oracle queries. From the above precomputation, we make algebraic queries for all of the algebraic relations, and extension queries for all of the extension relations. That is, for a relation (a, b) we make a query to learn ((a-bm)^d \in Z^*_N).

We also make rational queries to learn (p_i^d \in Z^*N) for all rational primes (p_i) from 2 to (B{\mathrm{rat}}). If our polynomial g is not monic (which is nearly always the case), we make queries for all the prime factors of its leading coefficient. Often, these are already covered by the rational queries.

3.3 Detailed view: Descent

Three-stage descent. Upon receiving a forgery target t, the goal of descent is to produce an initial split (u/v = t \bmod N), and a rational function S, such that:

[ (S(\alpha)) = \prod_{p_i \in F_{\mathrm{alg}}\cup F_{\mathrm{ext}}} p_i^{\mu_i} ]

and

[ u/v \cdot S(m) = \prod_{p_j \in F_{\mathrm{rat}}} p_j^{\nu_j}. ]

In other words, the ideal generated by (S(\alpha)) is smooth over the entire algebraic side, and (u/v \cdot S(m)) is smooth over the rational side. The smoothness bounds in these products vary as the descent tree grows, but they will reach (B_{\mathrm{ext}}) and (B_{\mathrm{rat}}) by the last step of descent.

On the surface, we reused sieving code for descent that the GNFS-DL would use in CADO-NFS. However a difference arises in parameter tradeoffs. In the GNFS-DL and SNFS-DL, the same smoothness bounds are used in descent and in precomputation. Given the massive amount of precomputation, the expected time to find a two-sided relation must remain quite low. The (\tilde{\sqrt{\mathrm{NFS}}}) setting is different. Descent must find a few hundred two-sided relations, but one-sided sieving over its millions of relations can get away with a much more aggressive smoothness bound. This tradeoff was not discussed by JNT.

For a concrete number, in our 1024-bit computation, we selected (B_{\mathrm{ext}} = 2^{35}) and (B_{\mathrm{rat}} = 2^{36}). Each two-sided descent relation took several hours to find, while each one-sided precomputation relation took less than a second. We could have sped up descent by increasing (B_{\mathrm{ext}}) to (2^{36}), but this would have doubled the amount of extension sieving. Descent took less than one month, while extension sieving took 2.5 months. The cost of doubling extension sieving was frightening.

(i) Descent initialization. Our descent algorithm takes place in three stages. The initialization stage borrows ideas from the 1024-bit SNFS-DL computation in 2016 [28]. It includes a las-plus-ECM step and a “large q” step. In the former step, candidate initial splits (u/v = t \bmod N) are found by sieving for candidate factorizations of u and v, while allowing for large (we chose 365-bit) cofactors. Those cofactors are handled by a more efficient ECM setup than is built into las. We aimed for 135-bit smoothness here. The “large q” step handles the rational primes of size about 95 to 135 bits. They are too large to input to las as a special-q, so we used a technique that we call “embedded-polynomial sieving.” We describe it below in step (iii), where we used the same technique.

(ii) Descent middle. The middle of descent is its most tractable stage. We were able to use the existing las descent code in CADO-NFS. For all of our computations, we required that this stage begin with special-q values of at most 95 bits. This is because the sieving lattice in las uses 64-bit integers, and has some dependence on the skewness of the polynomial.

On its own, this simple implementation of the descent middle was enough to handle moduli up to a 666-bit computation. However, we needed the additional initialization and bottom stages for the 768 and 1024-bit computations.

(iii) Descent bottom. To implement the bottom of descent, we used two strategies. The first is composite sieving and the second is embedded-polynomial sieving. During our large computations, we found that while both eventually find relations, composite sieving was usually faster. Composite sieving is simple to describe: rather than perform a single special-q (or q) job, it is possible to perform in parallel many special-((qq')) jobs for small primes (or composites) (q'). The benefit is parallelism. Concretely, we would run one las command, but with a long list of special-((qq')) inputs on which to perform multi-threaded sieving. Composite sieving (albeit in a different form) was used in the computation from [14], which used CADO-NFS. It took very little work to adapt it to our setting.

Embedded-polynomial sieving is an idea from the “large q” step and that we repurposed from [28]. Rather than find a special-q (or q) relation (a, b) under polynomials f, g it is possible find any relation ((a', b')) under transformed polynomials (f_q, g_q) such that ((a', b')) can be turned into a relation (a, b) under f, g which includes the prime q as a factor. The process is a homographic transformation. We briefly detail how that works, choosing as an example a special-q on the algebraic side: choose ((a_0, b_0)) and ((a_1, b_1)) two basis vectors of the lattice of (a, b)’s such that q divides ((a-b\alpha)). Here, the lattice is to be reduced according to the skewness parameter of the polynomial f. Let now

[ f_q = f\left(\frac{a_0x+a_1}{b_0x+b_1}\right)(b_0x+b_1)^\delta ]

(likewise for (g_q), with (\delta) the relevant degree). Notice that by construction, the skewness of (f_q) becomes approximately 1 after this transformation. The benefits here are parallelism—since many small primes can be used to sieve under (f_q, g_q)—as well as injecting variety into the sieving lattices, in case a particular q has odd behavior. Although these ideas are not built into the las siever, these bootstrapped (but folklore) uses of las were critical to making descent faster.

3.4 Detailed view: Linear algebra

The linear algebra step takes the rational function S output by descent and the information from precomputation, and it builds a matrix-vector equation where the solution yields rational functions U, T such that (S(\alpha)T(\alpha)U(\alpha) \in K) is an eth power. That eth power is the input to the final root stage. While most of this step was handled by the CADO-NFS program bwc and extensive parameter optimization, we made two other nontrivial changes.

Linear algebra optimizations. In contrast to factoring, where the matrix is mod 2, and to discrete log, where the matrix is mod (\ell) for a large factor (\ell) of the group order, our implementation constructs a matrix that is mod the RSA public exponent e. We chose (e = 65537) to match common use. Our matrix equation is inhomogeneous, like discrete log, and unlike factoring. These differences led to extensive debugging of existing CADO-NFS linear algebra code. One interesting optimization we were able to use involves large matrix multiplications. The modulus (e = 65537) is small enough that we could represent entries as float64 values, and use optimized sparse matrix multiplication libraries [36, 65, 61] while keeping enough precision to reduce mod e at the end. This worked well up to our 768-bit computation, but the 1024-bit computation required more precision.

Filtering additions. Filtering is technically part of precomputation, but it involves the matrix we just discussed above. In this matrix, columns are prime ideals in (F_{\mathrm{alg}}), rows are algebraic relations, and entries are valuations mod 65537. CADO-NFS includes a step called filtering which performs elementary operations on the matrix to make a smaller linear system. In this filtered matrix, the rows are actually linear combinations of the original relations, and the columns are a small subset of (F_{\mathrm{alg}}). We used “killer relations” to map between filtered row or column vectors, to vectors over the full pre-filtered space. This is similar to a step called “reconstruction” in GNFS-DL but we needed our own implementation for this use case. The basic idea is to iteratively cancel ideals in a prescribed order, at each step using a so-called killer relation that includes only the current ideal and previously cancelled ideals. During our precomputation filtering phase, we thus built up this ordering of killer relations, and used it to appropriately apply or remove filtering on the linear algebra vectors.

3.5 Detailed view: eth root in a number field

Instead of using a single algorithm to find an eth root in a number field, we took a three-stage approach. This is the final step of (\tilde{\sqrt{\mathrm{NFS}}}) before assembling the final forgery using Eq. (1).

(i) Parallelized Montgomery root. On the 768 and 1024-bit computations, we found that a coarse but more parallel version of Montgomery’s algorithm worked well for the first 90% of norm reduction. We followed the approach described in [68], but rather than selecting generators by analyzing the log-embeddings, we simply chose the first generator of the desired norm. We could choose up to a few dozen generators in parallel, and run only one accumulation step on the product of all the generators. Experimentally, this worked well in our computations. Moreover, it did not work well to try to pick generators intelligently (using the approach described below) in independent parallel instances; the log-embedding improvements tended to be cancelled out or even reversed. We believe there could be a more interesting way to exploit parallelism in Montgomery’s algorithm. This root algorithm can also be used (mod 2) in GNFS for factoring.

(ii) Sequential Montgomery root. This matches the approach described in [68]. Here, we ran a single thread to perform one reduction step at a time, selecting generators to balance the log-embeddings as much as possible. A purely sequential Montgomery root was fast for everything up to our 666-bit computation, but it was outperformed by the three-stage approach for 768 and 1024 bits.

(iii) Hybrid CRT-p-adic root. The Montgomery root, given a field element (R(\alpha)^e), produces a list of (\gamma_i) such that

[ R(\alpha)^e = \delta^e \prod_i \gamma_i^e ]

for some unknown (\delta) with bounded coefficients; with each Montgomery iteration, the bound on the coefficients of (\delta) ideally becomes smaller. One hopes that eventually (\delta) will become 1, and (R(\alpha) = \prod_i \gamma_i), but in practice this is not always the case. We then have to deal with the leftover (\delta^e), which we get as a product expression

[ \prod_i(a_i-b_i\alpha)^{m_i}\prod_j\gamma_j^{-e}. ]

The product is much too large to fully evaluate, but it can be evaluated mod some modulus p, as this prevents the coefficients from blowing up.

For the 768-bit computation and below, we handled the leftover case using the p-adic lifting approach described in [68]. In short, we choose an inert prime p (i.e. f is irreducible mod p) so that (F_p[x]/(f(x)) \simeq F_{p^{\deg f}}), a finite field where eth roots can be taken easily. We evaluate the product expression for (\delta^e) mod (p^k) (where (p^k) is above the coefficient bound on (\delta), but far below that of (\delta^e)), take its eth root mod p (since eth roots in (F_{p^{\deg f}}) are easy), and then Hensel lift to recover the coefficients of (\delta \bmod p^k). Since (p^k) is above the coefficient bound, this recovers (\delta).

For our 1024-bit computation, we parallelized this step by using many inert primes (p_i) and solving for the coefficients of (\delta \bmod p_i^{k_i}) in parallel. We then recover (\delta) via CRT reconstruction. (Here (k_i) can be smaller because we only need (\prod_i p_i^{k_i}) to be above the bound, not each (p_i^{k_i}).) This is thus a hybrid of the p-adic lifting and the CRT approaches of [68]. Compared to a purely-CRT approach, the hybrid approach let us use fewer primes (since we only require (\prod_i p_i^{k_i}) be above the bound, not (\prod_i p_i)). As pointed out by Bernard, Fouque, and Lesavourey [12], unlike in the square root case, for odd e there is no need to guess the correct signs of the eth roots mod each (p_i) before CRT reconstruction: eth roots are unique in (F_{p_i^{\deg f_i}}) as long as e is relatively prime to (p_i^{\deg f_i}-1).

The Montgomery root algorithm is asymptotically faster than CRT and/or p-adic, but the latter is much more parallelizable. It seems likely that the root step could be made faster by carefully balancing the two.

3.6 Detailed view: Parameter selection

To the frustration of the reader and any interested replicators, our parameters were chosen through a combination of intuition and small-scale experiments. For many parameters, it was infeasible to exhaustively run experiments on every combination of allowed parameters on academic resources. Our process was to first decide on high-level choices ((B_{\mathrm{rat}}, B_{\mathrm{ext}}, B_{\mathrm{alg}})) then run experiments with mid-level choices (A, mfb, etc.). For sieving, our experiments tended to optimize the number of unique relations found per second. For descent sieving, we also accounted for RAM usage; we increased A, mfb until parallelized sieving ran out of memory on our 512GB machines. For the Montgomery root, our experiments increased the per-iteration norm bound until we either ran out of precision in our called SageMath and PARI code, or ran out of memory.

Regarding the smoothness bounds, (B_{\mathrm{alg}}) was always selected first, and not changed afterwards. For some of the computations, we ran descent and extension sieving on different subsets of machines, so that we could compare their expected finishing times and adjust as needed. In particular, descent sieves from top (large primes) to bottom (smaller primes). We ran extension sieving starting from (B_{\mathrm{alg}}) (small primes) and going up to (B_{\mathrm{ext}}) (larger primes). Thus both bounds (B_{\mathrm{ext}}, B_{\mathrm{rat}}) could be increased without losing past work.

We ran fewer experiments for linear algebra but were informed by past NFS computations. We chose to follow [28] which selected a matrix of primes bounded by (2^{31}) for a 1024-bit SNFS-DL computation. This was successfully run for a much larger matrix modulus, so we expected to slightly outperform their timing. We ended up taking 19 days; theirs took one month.

4 1024-bit computation details

The public RSA key on our HSM consisted of:

e = 65537
N = aa8bb728b43ba939dc282ae5eace9e939ae5a985398db5816d4e266a1a64986d
21a19152fb3cb738aa7ecd3b868f5ed42d6afd2ce33d450ab68ff0d8705604e4
72d8a235a06b743bb5ea2b731585cafe38d9b5ec6f0f1aefd86dc26426891144
67bb7ede0a3314daed0f3d184a7f605105ebd49dee447bbc23e331dfa8e1c113

with (\log_2(N) = 1024). The random target that was selected for forgery, and the eth root that we ultimately computed, were:

t = 804fbc7eb701fdc8fa1147900eb44395ace53ac96a9c676726131ef4fb4158fa
33c50e3bf4bda303d8a6a8c51c0a3031b6a0c12378d7eb3b760ad760c30790af
d64517920348c12e26ed75f233a4e731f772309c5df0873d8bcab2c116e3ff04
3ea1ee3379eac327c58686b40f87edae312b0534a50df24206caa1e220368eb8

t1/e = 944678c4efa56b54dcaff74fac3cca0acc5dd571d18af653171693d8560fc2cf
752e62edc5ba2a6f378e7afdebf3d3ffb3af6e1c139764d3753e9976da2dad12
aa94e8365ae7cb599fdc528bc0618fc789fc0a27aac8403e101d4611c5faff62
5832ca3c3509a7f021553d49e434dade3a097b0adfed94468a1d5e1d9ee68f88

The target was selected at random from (Z^*_N). It can be easily verified that ((t^{1/e})^e \bmod N = t).

Our computation ran from March 13 to August 31, 2026. Due to breaks and (un)expected cluster downtime, the actual running time was about 5 months. We chose to run certain steps in parallel to more quickly identify problems that arise only for very large moduli; there were such problems at nearly every step. If running only one step at a time on 100% of the cluster, the breakdown of the 5 months would be about: 2.5 months of extension sieving, 0.5 months of algebraic sieving, 1 month of descent, and 1 month of linear algebra and the final steps.

Step CPU time (h) Wall time (h) Notes
Precomputation 1200 core-years
Polynomial selection 39,992.01 20.17
Algebraic sieving 1,311,975.08 2,760.00 Small portion of cluster
Filtering* 24.08 7.85
Extension sieving 9,240,757.82 2,640.00 Ran on > 1/2 of cluster
HSM queries 4.1 billion queries
Rational queries* N/A 123.12 2,874,398,515 queries
Algebraic queries* N/A 6.59 144,973,282 queries
Extension queries* N/A 45.15 1,048,047,534 queries
Individual forgery 180 core-years
Descent (i) 17,141.54 19.82 Ran on < 1/2 of cluster; each core used significant RAM
Descent (ii) 18,811.00 268.36
Descent (iii) 1,385,242.92 739.21
Linear algebra* 146,263.96 447.04
Root* 2,210.93 147.16

Figure 4. Timing of our 1024-bit computation. All steps other than those marked with a () can be trivially parallelized over more machines, meaning the wall-clock time can be easily decreased with more resources.*

4.1 Timing, memory usage, and queries

The timing of each step is summarized in Figure 4. The CPU time should be viewed as additive. The wall-clock time is not, due to how we scheduled steps to be run on different subsets of the cluster. Some steps of the algorithm are trivially parallelizable, meaning that if twice as many machines were used, the wall-clock time would be cut in half. This applies to all steps except those marked with a (*) in Figure 4; notably, linear algebra and the Montgomery root.

Our “cluster” included a few different types of machines. We used:

  • Cluster A: 45 machines with 48–88 cores and 256GB–1TB of RAM
  • Cluster B: 16 machines with 256 cores and 1TB of RAM
  • Cluster C: (Varying) machines with 32+ cores and 192GB+ of RAM
  • Cluster D: 2 machines with 512 cores and 1TB+ of RAM

The above machines have hyperthreading enabled and we report virtual cores; there are half as many physical cores. The bulk of the work was done on Cluster A which has relatively dated processors from 2016 but we had uninterrupted access to all machines. We had priority access to Cluster B and some access to Cluster C, where we mostly performed extension sieving. We had short-term access to Cluster D where we performed some extension sieving, as well as high-RAM steps including the Montgomery root.

4.2 Parameters selected

The global smoothness bounds we selected were:

[ B_{\mathrm{rat}} = 2^{36}, \qquad B_{\mathrm{ext}} = 2^{35}, \qquad B_{\mathrm{alg}} = 2^{31}. ]

These are the three most consequential to the running time. For our polynomials, we selected (\deg(g) = 1) as always for a rational side, and (\deg(f) = 6).

Sieving occurs in three different steps in the (\tilde{\sqrt{\mathrm{NFS}}}) algorithm, and they all used different sieving parameters. Ordered from easiest to hardest to manage, they are: algebraic sieving, extension sieving, then descent sieving.

The linear algebra and root parameters described below were determined largely from the above, as well as by the exponent being (e = 65537).

By this point, the reader may notice that we counterintuitively set (B_{\mathrm{rat}} > B_{\mathrm{ext}}). In usual NFS computations with a rational side, one would prefer to set (B_{\mathrm{rat}} < B_{\mathrm{ext}}). Here, recall that (B_{\mathrm{ext}}) is the smoothness bound on the algebraic side, when two-sided sieving is performed. For example, in the 2019 RSA-240 factorization via GNFS [14], (B_{\mathrm{rat}} = 2^{36}) was used, and the equivalent of (B_{\mathrm{ext}}) was set to (B_{\mathrm{ext}} = 2^{37}). Roughly, this is because the algebraic side is “heavier” meaning that for a given relation, the algebraic side tends to have a larger norm, which is less likely to factor into small primes. We did observe the same behavior in two-sided sieving. However, the (\tilde{\sqrt{\mathrm{NFS}}}) algorithm has a different global tradeoff between (B_{\mathrm{rat}}) and (B_{\mathrm{ext}}). To make two-sided sieving in descent tractable, one can either increase (B_{\mathrm{ext}}), which roughly doubles the cost of extension sieving in precomputation and doubles the number of extension queries; or one can increase (B_{\mathrm{rat}}), which incurs no extra sieving cost but still doubles the number of rational queries. We made the second choice more often than the first, because we were more concerned with sieving time than with query time.

4.3 Possible tradeoffs and alternative regimes

We chose the above parameters with the goal of making the end-to-end computation work in a handful of months. Different high-level parameters could be selected to optimize other goals. The point of this discussion is not to provide definitive answers about alternative parameter regimes (which would need to actually be run) but to suggest that ours is not the only one possible.

For example, another realistic goal is to minimize the number of HSM queries, especially if the attacker has limited online access to the HSM. In this paradigm, one could feasibly select (B_{\mathrm{rat}} = 2^{34}) and (B_{\mathrm{ext}} = 2^{34}). Our experiments suggest that this would cut the number of queries to 1.5 billion while significantly increasing the time spent in descent (perhaps by a month).

On the other extreme, a goal could be to minimize the time spent in individual forgery. We believe it would be hard to decrease the time spent in linear algebra, but descent could be sped up by increasing (B_{\mathrm{rat}}) and (B_{\mathrm{ext}}). Our experiments suggest that the individual forgery could be made to take 5–6 weeks, but this starts to require tens of billions of queries.

4.4 Trip report: Precomputation

Polynomial selection. We used a similar polynomial selection approach to prior factorization computations. After using CADO-NFS scripts to generate candidates and perform root optimization, we narrowed our search to the 100 best polynomials based on the “Murphy E” value.

Given these 100 candidates, we performed about 8 hours of sieving experiments on our cluster, testing the polynomials with different sieving parameters. Ranking by the average time to find a unique relation, there was a clear winner and runner-up. We also verified that these polynomials satisfied necessary properties for our root computation to work: first that (e = 65537) was unramified in the corresponding number field; and second that there were several small inert primes with which we could perform p-adic lifting.

A last consideration was skewness. Because descent involves sieving where the special-q or special-q can be up to 95 bits, we needed to be careful with the size of entries in the sieving lattice, which in CADO-NFS are represented as 64-bit unsigned integers. Since the larger entries are of size about (\sqrt q \cdot) skewness, we chose to aim for a skewness of about (2^{16}). This was reflected in our input parameters to the CADO-NFS candidate-generation program. The polynomials we selected are:

g(x) = + 583567398878296587761x
− 583508354875246158635574786673190632633220109293

f(x) = − 3823002681315339817451520x6
− 7350594038360643424557871006920x5
− 216020850394775040895128014268735128x4
+ 1766821832922784779107212285802811346027985x3
− 10216745863874085463847140035876784402919224735x2
− 29161682848128620601357534837213030324970598132169770x
− 1140093999763033664163418590780932917435250519974808516832

Here, g is the rational-side polynomial, f is the algebraic-side polynomial, and (g(m) = f(m) = 0 \bmod N) for a shared root m. The relevant number field is (K = \mathbb{Q}(\alpha)) where (f(\alpha) = 0). The skewness is (2^{67.925}).

Algebraic sieving. Algebraic sieving was the most straightforward step of our computation. Given our polynomial f, we used CADO-NFS to create a factor base of all prime ideals of (O_K) with norm at most (B_{\mathrm{alg}} = 2^{31}). Then we used las to sieve over large ranges of special-q until we had at least one relation covering every q in the factor base.

We used a sieving area of (A = 2^9) and increased to (A = 2^{10}) as we needed more relations. We used a cofactor of mfb = 100 and increased to mfb = 120; in other words, we allowed for 3–4 large primes. We actually used a smaller factor base limit of (\lim = 2^{27}) since we found that this smaller limit (with a larger mfb) was faster on our machines. CADO-NFS allows for multi-layer bucket sieving, which we did use (see [14, §4.2]). We set bkthresh1 = (2^{26}). Recall that this is all one-sided sieving, which explains the perhaps smaller-than-expected parameters.

Filtering (which we detail below) is a step that processes the found relations into a matrix. After filtering, it turned out that some of our factor-base ideals became unlinked, due to singleton elimination or other simplifications. For these ideals, we performed special-q sieving to find a few more relations for each q. Rather than increasing A and mfb, we found that it was more helpful to perform composite sieving over (q \cdot q') for small prime (q'). While some unlinked ideals may not be a problem for the GNFS, for our setting, we wanted to cover 100% of ideals so that any descent output could give us a solvable linear algebra equation.

Extension sieving. Although extension sieving was by far the most computationally expensive step in our computation, it was luckily predictable and consistent to run. Recall that here, we are sieving on one side with special-q that are between (B_{\mathrm{alg}} = 2^{31}) and (B_{\mathrm{ext}} = 2^{35}), with smoothness bound (B_{\mathrm{alg}} = 2^{31}). We used the same parameters as above for algebraic sieving, but started out at the higher end of (A = 2^{10}) and mfb = 120.

Other than the scale and sizes, there were two key differences in extension sieving compared to algebraic sieving. First, the goal is to find only one relation per target ideal. Although we set the CADO-NFS parameter to “exit early” we also needed to de-duplicate afterwards, since this flag does not fully stop all threads. It is a different de-duplication step than the one used for algebraic sieving.

Second, we did not need nor want 100% coverage of all the ideals between (B_{\mathrm{alg}} = 2^{31}) and (B_{\mathrm{ext}} = 2^{35}). On average, relations are straightforward to find, but the tail end of hard-to-include ideals quickly becomes an expensive task. We aimed for 90% coverage. Then, descent jobs would be likely to include our linked ideals, and for descent relations involving the 10% of unlinked ideals, it was only a little more work to find a second relation avoiding these. The coverage of ideals that we ultimately found was all prime ideals whose norm was below (2^{31}), 90% below (2^{33}), and down to 60% below (2^{35}). Practically, this struck a reasonable balance with descent. Overall, however, extension sieving is a unique trick to the (\tilde{\sqrt{\mathrm{NFS}}}) algorithm, and we believe other tradeoffs could be justified.

Filtering and matrix preparation. The final step of precomputation is to prepare the matrix for linear algebra. We used standard CADO-NFS steps, plus an additional step to account for what we called “killer relations.” We used all of the CADO-NFS filtering programs (dup1, dup2, purge, merge-dl, replay-dl) with discrete-log flags, since our linear algebra setup closely matches that of GNFS-DL rather than GNFS. The only nontrivial parameters we set were to aim for a target density of (2^{10}), and to keep at least 100 extra rows after purge. The sparse part of our filtered matrix had 10,557,419 rows and 10,557,319 columns, among which there were 2,217,211,872 nonzero entries. Each row had an additional 6 dense righthand columns for the Schirokauer maps.

4.5 Trip report: Oracle queries

To instantiate the RSA signature oracle, we first had to obtain access to an HSM. Enterprise-grade HSMs are expensive proprietary cryptographic accelerators that are opaque by design. They are usually sold exclusively on the business-to-business (B2B) market and not to end consumers. The smaller, consumer-grade HSMs that we considered typically disallowed 1024-bit RSA. We gained access to the following two models, through different means:

  • Thales Luna K6 (PCIe 7000): This HSM is an expansion card that can be plugged into a server’s PCIe slot. It was donated to us and had an estimated market price in the high four digits or low five digits before being deprecated in June 2021 (for companies) and December 2023 (for governments) [50].
  • Thales Luna S750: A third party allowed us to use their HSM remotely. It is still sold for $22,000–32,000 US dollars [35, 40] and does not appear to have an end-of-life date yet.

In addition to the above HSMs, we unsuccessfully attempted to set up several other HSMs locally but were unable to find a copy of the proprietary software that is required to set them up. In the following, we first describe how we configured our local Luna K6 HSM, followed by our system architecture for querying both the local and remote HSM. To conclude, we report the wall-clock time for querying, as well as the signature speed of the two HSMs.

Setting up the Luna K6 HSM. After installing the Luna K6 HSM in a slot that is (backwards) compatible with PCIe x4, we had to install the necessary software to interact with the HSM. Together with the Luna K6 HSM, we received a CD-ROM with proprietary software for this HSM model. However, due to changes to the Linux kernel headers and other dependencies, we discovered that Ubuntu 10.04 is the latest OS for which this software can be compiled. We could not emulate this old Ubuntu version since the HSM registers as a PCIe bridge, which cannot be passed through to a VM. Hence, we did a bare metal install, which meant we had to manually backport several packages, for example to support the network card of our server which was produced after Ubuntu 10.04 was declared end-of-life. To interface with the HSM we installed the pycryptoki [62] PKCS#11 wrapper for Python developed by Thales.

For our local HSM, we had to obtain a PIN Entry Device (PED) [60] and PED keys [59] from the second-hand market. The former is an external peripheral device with a small display, numeric keypad, and a few action keys. It serves as a trusted input/output device which bypasses the untrusted server where the HSM is plugged into a PCIe slot. The PED is used during setup time to program PED keys—which are programmable devices of a similar form factor as USB keys—with key material for various privileged roles. We further enabled “user activation” and “auto-activation”, which generate a secret value displayed on the PED that can later be used to start user sessions on the HSM from remote.

In the global HSM settings, we disabled FIPS 140-2 approved operation mode to enable raw RSA operations (referred to as CKM RSA X 509 in the Cryptographic Token Interface Standard [20]). Querying unpadded messages is necessary for our attack. Afterwards, we create a partition which inherits the global HSM settings. We chose to do key generation outside of the HSM and then import it because HSMs wipe their state on a power outage (of which we had multiple during this project). For this, we generate a 1024-bit RSA key in PKCS#1 format and store it in DER encoding and imported it with the Certificate Management Utility (CMU) from the Luna client software. HSM deployments would instead likely use the cloning or wrapping features, through which the keys can be transferred directly to another HSM of the same model without the keys ever leaving the HSM unencrypted.

Query architecture. Our goal was to have a joint system that runs queries both on our Luna K6 HSM and the remote Luna S750. For the latter, we were not given access to the third party’s network but were only allowed to pass software to them. Hence, we designed the following three-piece system architecture.

First, a local query handler groups queries into batches and uploads them to the web server. It also regularly attempts to download new signature batches and aggregates them. Second, the web server offers an authenticated REST API to upload and download batches, metadata, performance metrics, and debug information. Third, the remote query handler fetches query batches from the web server, runs them on the HSM, writes the resulting signatures into batches, and uploads them.

Various code handles network and hardware failures, performs rate-limiting, and re-synchronizes the handlers. Both query handlers send measurements of their upload and download bandwidth to the web server. Additionally, the remote query handler uploads the measured signature signing speed, as well as CPU and memory usage to the web server. All components are highly parallelized. We carefully chose the batch sizes, number of batches in transit, number of threads to write, download, pre or post-process batches, and webserver parallelism such that the bottleneck was at the HSM, not the network bandwidth or batch pipeline. The remote query handler catches most exceptions, reports them to the web server to enable remote debugging, and then restarts gracefully.

Query timing. The HSM does not use parallelism within sessions, even under a high query load. Instead of multiple OS threads using the same session (which throws exceptions on the HSM), a thread per session should be used to benefit from parallelism and maximize the signature speed. The official administration guide recommends using 20–40 threads [30]; we achieved an average of 6500 signatures per second with 40 threads. Computing the first batch of rational queries on our Luna K6 HSM took over a month due to many pauses for debugging corner cases that only occurred at scale (e.g. unlikely concurrency bugs).

Based on the average signature speed, running the rational queries would have taken 123.12 hours without interruptions. The algebraic and extension queries took 6.59 and 45.15 hours respectively, showing that the HSM ran at impressively consistent signature speed. The overhead from our query architecture was overall minor and stemmed from ramping up the pipeline utilization, error handling and re-synchronization in case a garbled batch arrived, and post-processing for the very last batches.

Additionally, we ran the same queries on the remote Luna S750 HSM, which was located on a different continent. We initially expected the Luna S750 HSM to be faster than ours, since it is a newer generation, but that was not the case. The rational, algebraic, and extension queries took 317.25, 7.08, and 118.93 hours, respectively. This corresponds to a signature speed of approximately 2500 sig/s for the rational and extension queries, while the algebraic queries ran at almost 5700 sig/s. The overall slowdown is not due to our query architecture or network latency but more likely because we could not optimize the parameters without direct access to the HSM. Indeed, we asked them to increase the number of threads for the algebraic queries, which more than doubled the signature speed.

Using multiple HSMs as query oracles shows that our attack is mostly platform-agnostic since it only makes black-box use of the HSM functionality for RSA signatures. Even currently used HSMs can be in a configuration state that allows us to run our attack. Furthermore, the Luna S750 HSM test shows that it is possible for an adversary to run these queries over the internet. As shown in Figure 4, we made a total of 4,067,419,331 queries.

4.6 Trip report: Individual signature forgery

The three phases of the individual forgery (descent, linear algebra, and the eth root) all differed in some substantial ways from usual NFS cases. To start off, we generated a random target (t \leftarrow$ Z^*_N).

Descent (i). The first step is descent, which, again, can be broken down into several substeps. The algorithmic ideas are described in Section 3; here we present the progression of the actual 1024-bit computation. Recall from Section 3 that we had four strategies to tackle descent, each specialized to slightly different phases. These were initialization (which closely followed the ideas of [28], and which we can more descriptively call las-plus-ECM); the CADO-NFS GNFS-DL program las descent; composite sieving; and embedded-polynomial sieving. These last two were the main new ideas we applied to descent, as they have previously not been used in the middle and bottom stages. In part, this is because for our chosen smoothness bounds, the difficulty of descent (compared to one-sided precomputation) is unique to the (\tilde{\sqrt{\mathrm{NFS}}}) algorithm.

First, to initialize descent, we greatly benefitted from launching hundreds of jobs, then picking the smoothest (u/v) split we saw. We spent a day running 500 initializations in parallel, each using a different mask and sieving to find (t \cdot \mathrm{mask}^e = u/v \bmod N). We used smoothness parameters lpb0 = lpb1 = 135, very large cofactor bounds mfb0 = mfb1 = 365, sieving area (A = 2^{31}), and factor base bounds lim0 = lim1 = (2^{31}). To perform the large ECM cofactorizations we followed the strategies and scripts of [28]; we printed surviving relations from las to files, on which we ran multithreaded ECM jobs.

After this day of sieving and ECM, we had a clear best initial split: (u/v) factored over primes bounded by 80 bits. In fact, we were only aiming for 135 bits (in the lpb parameters above), but took this lucky split. Because of this, we skipped a step we had needed for the 768-bit computation: the “large q” step we described in Section 3 which performs the jump from 135 to 95 bits. Thus initialization brought us all the way down to 80 bits.

Descent (ii)–(iii). The remainder of descent brought us down from 80 bits (on the rational side) to our final smoothness bounds of (B_{\mathrm{rat}} = 2^{36}) and (B_{\mathrm{ext}} = 2^{35}). In brief, we used the following strategies:

  • For most primes from 80 bits to 40 bits: las descent
  • For straggler primes from 80 bits to 40 bits: composite sieving or embedded-polynomial sieving, with a few hundred special-q or special-q values
  • For primes from 40 bits to the end: composite sieving, with thousands of special-q or special-q values

A strategy which did not work well was simply running las descent with larger and larger A. Even on the machines that could allocate up to (A = 2^{39}), sieving was outperformed by the more parallelizable composite sieving with smaller A.

The parameters we used for the above three strategies were closely tuned to the machines we used; our goal was to use most of the available RAM while maintaining reasonable multi-threading. The memory margin parameter was also critical to ensure we didn’t over-allocate memory. For las descent we used (A = 2^{37}), (\lim = 2^{31}), bkthresh1 = (2^{29}), and bkmult = 1.477. For composite sieving at the bottom, we decreased all these parameters. We used (A = 2^{34}), lim0 = (2^{28}), lim1 = (2^{30}), bkthresh1 = (2^{27}), and bkmult = 1.365.

A final reflection on this 1024-bit descent computation is that although composite sieving worked effectively in practice, it was difficult to predict its success theoretically. Recall that here, when we have a target q to cancel in descent, we sieve over special-q values of q, (q \cdot 11), (q \cdot 13), etc. with small prime (or composite) multipliers. These sieves are not independent, but in practice, certain special-q values seemed to have an easier time in las. Even if one of the first approximately 150 primes showed up in a smooth relation, that relation was sometimes only found when a larger prime multiplier was used. All primes other than the last eight were found (meaning: we found a smooth relation involving that prime) with up to 10,000 small multipliers; most were found early on. For those last eight—which were not remarkable in other ways—we went up to 20,000 small multipliers. Although this tail end of descent was small, it did affect the wall time of descent.

Our ultimate descent tree included 5,633 rational primes bounded by (B_{\mathrm{rat}}), 8,592 prime ideals bounded by (B_{\mathrm{alg}}), and 1,860 prime ideals bounded by (B_{\mathrm{ext}}). These were spread over 874 relations.

Linear algebra. We give a further breakdown of the linear algebra step in Figure 5. Our first observation is that the CADO-NFS bwc program—after some debugging and fixes—handled our linear algebra system quite well. In part, this is because linear algebra in (\tilde{\sqrt{\mathrm{NFS}}}) is an easier task than in GNFS-DL. The modulus (e = 65537) is very small, the factor base of primes (columns) includes only one side, and thanks to extension sieving, we could use an eminently reasonable smoothness bound (B_{\mathrm{alg}} = 2^{31}). On the other hand, SageMath and Python stopped working well (if at all) on matrices of this size. In the 1024-bit run, we omitted several assertions and multiplications since they ran out of memory on our 1TB machine. It seems difficult, in general, to handle a large, sparse, modular matrix.

Despite this, we modified the critical code paths to work. The most important parameter was bwc_mn = 10, which determines how many solutions are found by bwc and how some steps are parallelized. We performed two linear algebra runs: one with additional parallelism via MPI [56], and one without it. The latter instance ran for weeks without interruption and found a correct solution. This is the linear algebra step reported in our timings. The MPI run required substantial manual intervention, but not counting the idle time during breaks, it found a correct answer in shorter wall time but slightly larger CPU time. Concretely, the MPI run used roughly twice the number of machines compared to the non-MPI instance, and had the following timings for the two most compute-intensive steps of linear algebra:

  • bwc krylov: 180.73 h (wall time); 80,999.67 h (CPU time); speedup: 1.16x.
  • bwc mksol: 179.56 h (wall time); 75,930.18 h (CPU time); speedup: 1.23x.

The other steps had runtimes comparable to the reported non-MPI run. We note that MPI was relatively far away from achieving the maximal possible speedup of 2x in this case. Using additional MPI nodes for every task would further reduce the wall clock time, but eventually see diminishing results due to the communication overhead. Our choice of the number of MPI nodes was due to resource limitations. MPI would likely be more beneficial for larger matrices.

Eth root. Timings of the different root stages are in Figure 5 while the algorithms were explained in Section 3. The parallel Montgomery step could not fully utilize the cores on our machine due to high memory usage, as well as limits to independence in reduction steps. It was also hampered by a few SageMath inefficiencies.

At the start of the root step, our numerator and denominator each had about (2^9) million bits. By the end of the Montgomery step, we had cleared the denominator, and the numerator was bounded, for each coefficient of the number field element, by about (2^{102480}). To get to the very end, our CRT-p-adic step worked well and is included in our timing reports.

We ran a few other tests, not included in our timing. A purely p-adic instance (after Montgomery) with (p = 70111) found a solution after lifting up to (70111^{256}) in about 81 hours of wall time. We ran another Montgomery step with different parameters, and reached an improved numerator bound of (10^{468}). We certainly believe there is room for optimization in the root step, but were satisfied with the reported results.

5 What we talk about when we talk about RSA

The JNT algorithm has been public for two decades, and the research community has been investigating the relationship between RSA and factoring for several more decades. In this section we discuss some consequences (and non-consequences) of (\tilde{\sqrt{\mathrm{NFS}}}) becoming feasible to run on large moduli.

Why doesn’t (\tilde{\sqrt{\mathrm{NFS}}}) break RSA? To start off, we will continue to emphasize the difference between RSA and delayed-target RSA. Although JNT’s paper is titled “When eth roots become easier than factoring” it is more accurately “When eth roots with an oracle become easier than eth roots without an oracle.” In the standard RSA problem, the goal of an attacker, given a public key (N, e) and target t, is to output (t^{1/e} \bmod N). Without the oracle, (\tilde{\sqrt{\mathrm{NFS}}}) cannot be run as is. Even if one could run descent and the rest of the individual forgery phase, it is not obvious how the forgery could be assembled without all the eth roots (coming from oracle queries) on the forgery components in Eq. (1).

One idea is to collect signatures in the wild: for a particular (N, e), could you observe billions of public signatures to replace the oracle queries? In practice, valid signed messages are hashes that are padded to the length of the modulus (albeit often with fixed-pattern padding as in PKCS#1v1.5). These messages will never correspond to the exact rational primes, and rarely to the smooth relations found during precomputation. One might hope to occasionally observe signed values that are smooth with respect to the factor base, and after observing enough such signed values, solve for the signatures on each of the factor base primes. However, this is likely to be much more expensive than the GNFS without additional cleverness. Such a strategy is asking for many full-sized integers to be smooth, which occurs with much smaller probability than the integers sieved over during the GNFS.

Why doesn’t (\tilde{\sqrt{\mathrm{NFS}}}) break factoring? Another observation is the following. The (\tilde{\sqrt{\mathrm{NFS}}}) algorithm allows someone to, after the precomputation, forge any RSA signature of choice. From the outside—and completely ignoring timing—it seems that the attacker must know the secret key, or at least as much information as the secret key.

We do not have any formal arguments, but have two intuitive reasons that (\tilde{\sqrt{\mathrm{NFS}}}) is different from factoring. First, recall that factoring N is equivalent to computing square roots mod N. Even if one had the power to compute arbitrary odd roots mod N; say, (t_1^{1/3}), (t_2^{1/5}), (t_3^{1/7}), and so on for any targets of choice; it is not clear how they could be efficiently combined into an inverse even power.

A second observation we found interesting is that technically, (\tilde{\sqrt{\mathrm{NFS}}}) is only faster than GNFS if the goal is to forge a reasonable number of target signatures. If the goal is to forge subexponentially many signatures for a particular N, for example, it is likely more efficient to run GNFS and learn d than to run the descent, linear algebra, and root steps subexponentially many times. Although we cannot imagine a scenario where this would make sense, there is certainly a range of possible attack strategies.

5.1 One-more and delayed-target RSA

Finally, we explain why we have called our setting the delayed-target RSA problem (DT-RSA), rather than the more popular one-more RSA problem (OM-RSA) [8]. Indeed, it was claimed in [42, §4] that the (\tilde{\sqrt{\mathrm{NFS}}}) breaks a version of the OM-RSA problem. With a cursory analysis, however, this is misleading.

It is true that (\tilde{\sqrt{\mathrm{NFS}}}) solves the DT-RSA problem, and it is true that a polynomial-time attack for DT-RSA yields one for OM-RSA. It is even true that a subexponential-time attack for DT-RSA yields one for OM-RSA. However, when the obvious modifications are applied to (\tilde{\sqrt{\mathrm{NFS}}}) to work in the OM-RSA game, its subexponential parameters are so much worse that they are outperformed by GNFS factoring.

The high-level takeaway of this distinction is that in spirit, (\tilde{\sqrt{\mathrm{NFS}}}) does not attack a one-more problem; it attacks a CCA1-style problem. It is certainly possible that there is a (\tilde{\sqrt{\mathrm{NFS}}})-inspired algorithm that more efficiently attacks OM-RSA, and we do not claim otherwise. The fact that blind signatures tend to rely on the OM-RSA security assumption is interesting. The (\tilde{\sqrt{\mathrm{NFS}}}) algorithm seems to be an eminently relevant and practical attack, but its speedup over factoring is not captured (without modification) by the OM-RSA problem.

An attack on DT-RSA yields an attack on OM-RSA. Formal game-based definitions for the DT-RSA and OM-RSA problems are given in Figure 6. The games are parameterized by key-generation algorithm Kg which for RSA is required to output (N, e, d) such that N = pq is a biprime and (ed = 1 \bmod \phi(N)). They are also parameterized by a number (\ell) of targets, and for OM-RSA, a number r of queries. In the below proposition we prove that an attack on DT-RSA yields one on OM-RSA.

The proposition is not meant to be exhaustively formalized; it is intended to be simple and to illustrate a gap while abstracting the details of (\tilde{\sqrt{\mathrm{NFS}}}). This may lead to better future ideas.

Proposition 1. Let Kg be an RSA key-generation algorithm and let (\ell, r \in \mathbb{N}). Given an adversary B in game (G^{\mathrm{dt-rsa}}{\mathrm{Kg},\ell}) making r queries we can build an adversary A in game (G^{\mathrm{om-rsa}}{\mathrm{Kg},\ell,r}) with

[ \mathrm{Adv}^{\mathrm{dt-rsa}}{\mathrm{Kg},\ell}(B) \leq \mathrm{Adv}^{\mathrm{om-rsa}}{\mathrm{Kg},\ell,r}(A). ]

Adversary A also makes r queries. Its running time is about that of B.

Proof. The proof is straightforward. Given adversary B for DT-RSA, we construct adversary A for OM-RSA. A receives as input ((N, e, t_1, \ldots, t_\ell)). It runs B on inputs N and e; the queries to B’s supposed GetQuery oracle are answered by A forwarding the same inputs to and outputs from its own oracle.

When B finishes precomputation and makes its GetTgt query, A returns targets ((t_1, \ldots, t_\ell)). When B finally submits its (\ell) forgeries, A returns the same ones. These are all correct eth roots as long as B was correct. If B made r queries to GetQuery, then so did A. The running time of A is about the same as B. (\square)

Why doesn’t (\tilde{\sqrt{\mathrm{NFS}}}) break OM-RSA? We can use the above proposition to build an attack A on OM-RSA given the attack (\tilde{\sqrt{\mathrm{NFS}}}) on DT-RSA. The main difficulty will be the parameter r, the number of queries.

Throughout this whole paper, we have implicitly assumed the number of targets (\ell) is “reasonable.” (In our computations, (\ell = 1).) When (\tilde{\sqrt{\mathrm{NFS}}}) is run in the (\ell)-target version of DT-RSA, the obvious approach is to run precomputation once (taking time (T_{\mathrm{precomp}})), and the individual forgery (\ell) times (taking time (\ell \cdot T_{\mathrm{indiv}})). Plugging in the relevant costs analyzed by JNT, we have:

[ r = L_N\left[1/3, (8/9)^{1/3} + o(1)\right] ]

[ T_{\mathrm{precomp}} = L_N[1/3, 1.577 + o(1)] ]

[ T_{\mathrm{indiv}} = L_N\left[1/3, (32/9)^{1/3} + o(1)\right]. ]

For the minimum nontrivial value of (\ell) ((\ell = r + 1)) in the OM-RSA game, we have that adversary A attacking OM-RSA takes time:

[ T_{\mathrm{precomp}} + \ell \cdot T_{\mathrm{indiv}} \approx L_N[1/3, 2.488 + o(1)] ]

because (L_N(\alpha, c_1)\cdot L_N(\alpha, c_2)=L_N(\alpha, c_1+c_2)). Recall that the GNFS takes time (L_N(1/3, c + o(1))) with (c = (64/9)^{1/3} \approx 1.923).

Although it could be argued that (\tilde{\sqrt{\mathrm{NFS}}}) thus yields a subexponential-time attack on OM-RSA, that attack is much worse than factoring N in all cases where OM-RSA is nontrivial. The mismatch comes from the query accounting: (\tilde{\sqrt{\mathrm{NFS}}}) requires many queries to be able to forge any single target, while OM-RSA expects (\ell) forgeries from (\ell - 1) queries. One might hope that (\tilde{\sqrt{\mathrm{NFS}}}) could be run with fewer queries, or be modified to take advantage of the OM-RSA adaptive oracle, but these changes would require different algorithmic ideas and parameter analyses (including memory, if parallelism is used on the (\ell) individual forgeries).

5.2 Another type of oracle from JNT’07

As a second revisiting of past work, (\tilde{\sqrt{\mathrm{NFS}}}) does not achieve SNFS complexity when the oracle is restricted to AMR (affine modular root) queries. This difficulty is pointed out in [42, §4.3], and is due to the fact that an AMR oracle imposes a strong constraint on the choice of the algebraic setting of GNFS. The best complexity in that case is given as (L_N(1/3, 6^{1/3} + o(1))) by [42, §4.3], and the (nontrivial) details to achieve that are only given in the ePrint version [43].

Since (6^{1/3} \approx 1.817), we expect that variant to be much less practical than the one discussed in this work, and perhaps even barely competitive with factoring.

The AMR setting best matches the PKCS#1v1.5 signature padding that was until recently ubiquitous in practice for RSA signatures. Unfortunately this asymptotic running time precluded implementing the attack with a more realistic padding oracle given our limited computational resources.

6 Scaling the attack to larger moduli

We can attempt to apply the asymptotic complexity formulas to extrapolate bit securities for larger key sizes than we were able to run, but there are a few difficulties. First, ignoring the hidden constants and o(1) terms in the L notation is a bodacious simplification [46] that can hide real differences in practice; second, we have no guarantees that we have reached asymptotic behavior at 1024 bits; and third, we have no guarantee that our parameter choices for the computations we ran were at all optimal. In fact, during the course of this work, we encountered numerous bugs and infelicities across the software we used—including CADO-NFS, SageMath, and our own code. It is likely that additional issues remain undetected, which could potentially lead to an overestimation of the costs.

With those caveats in place, we extrapolated bit securities of this algorithm for larger key sizes using two methods. In the first method, we computed the multiplicative constant scale factor to recover the generally accepted bit strength for RSA key sizes using the asymptotic running time of the general number field sieve for factoring (blissfully ignoring the o(1) terms), and then applied this constant to the (L_N(1/3, 1.577)) overall running time of our algorithm. Second, we estimated the multiplicative factor for the cycle count of our 1024-bit computation on a 2.3GHz CPU processor and scaled it up to larger bit sizes using the asymptotic complexity formula. Surprisingly, these values were in fairly close alignment, although extrapolation from the smaller computations we did was less effective in predicting our 1024-bit running times.

To estimate the number of queries required, we applied the asymptotic formula for queries to the empirical value for 1024, ignoring o(1) terms and constants. As we discussed in Section 4.3, there is a fair amount of leeway in algorithmic parameter selection, and an attacker could make various tradeoffs to somewhat reduce query complexity, online computation cost, or precomp

The Daily Front Page 17 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — AI in the Archive
article

Using LLMs to trace alchemical knowledge and decode 17th century letters

by benbreen·▲ 109 points·19 comments·resobscura.substack.com ↗
AI labs need to start funding historical research

Using GPT-6 and Opus 5.5 to trace alchemical knowledge and decode 17th century letters

I’ve written previously about the pitfalls and use cases for AI in augmenting historical research, but things have changed significantly since 2024-25. Occasioned by the dueling releases of GPT-6 Sol and Opus 5.5 this week, I thought I’d share some early results with using these models not just to perform “research assistant” type functions like transcribing documents, but to try to actually solve existing historical problems.

The TLDR is that pairing historians working in collaborative groups with the current frontier models would, in my view, produce numerous advances in historical knowledge and interpretation. My guess is that many of these could end up being quite meaningful. This was not the case as recently as last year. I think AI labs, historical researchers, and funding agencies should start actively pursuing these collaborations.

Finding traction

As we’ve seen with the field of mathematics, these models do best when they have a set of problems that LLMs invariably tend to describe as “tractable.” In other words:

• Have experts in the field already identified a group of problems that need solving?

• Is the data needed to answer these problems fully digitized and accessible?

• Do the problems lend themselves to the “spiky” capabilities of frontier AI models — namely multilingual reasoning, advanced math, and/or ability to conduct autonomous research through large datasets or across disciplinary subfields?

• Are they amenable to solutions that involve writing bespoke code?

• Most importantly: can a potential solution be clearly proven or disproven? (This last one, it seems to me, is a key part of why reasoning models have run rampant in mathematics but not in humanistic fields).

The above factors mean that the types of historical “open problems” which frontier AI can reasonably be expected to help with are fairly constrained:

  1. Anything involving cryptography and codebreaking (For instance, see Astra decrypting a 1941 German army communication and a WWI German radio cipher, or the work that Daniel Bourdeau has been doing here, or my own attempt to use GPT-6 Astra to figure out what is going on with the Elizabethan occultist John Dee’s coded magical book, Liber Loagaeth).
  2. Tracing texts across translations and adaptations. As an example of this, I was able to use GPT-6 Astra to determine the identity of a passage that Isaac Newton had freely translated into Latin from a French alchemical text, an identification that seems to have not previously been made.1
  3. Drawing links between existing findings that are reported only in discrete or niche subfields, or are not yet integrated into scholarship.

This last one might end up being the most impactful new method that these tools open up for historical researchers. For instance, if you read the writeup of Astra breaking a July 10, 1941 Enigma message that had resisted decipherment, it turns out that the key breakthrough was not anything to do with the codebreaking itself, but with noticing the full range of information that was available. Historical cryptological researcher Frode Weierud writes:

We are still analysing the GPT–6 Astra logs to see exactly how it executed the break. And we are discovering amazing details. In July 2026, I made the following announcement on the webpage with the 1941 Message List:

Note: In July 2026, research in the German Bundesarchiv revealed several
collections of radio messages, both enciphered and in cleartext. One of
these message collections was from SS-Totenkopf Division’s logistics
command, Nachschubführer. Many of these messages were sent to the Ib
(Quartiermeister) radio station and are identical to those in this list.
Others are new, but most likely related. These new messages are added to
the 1941 Message List in bold, with the indicator NF (Nachschubführer)
after the message number, indicating that these message numbers belong
to the NF numbering. All NF messages are outgoing; hence, the message
numbers are in blue.

It appears that GPT–6 Astra discovered this note about the collections of radio messages at the German Bundesarchiv.

What’s fascinating about this note is that even the leading human experts don’t entirely understand what GPT-6 Astra did as it gathered together these bits of information and used them to find a solution. Weierud writes:

The file references GPT–6 Astra mentions, RS 3–3/20a and RS 3–3/63b, are correct, but they are not available on the Crypto Cellar Research website. GPT–6 Astra mentions a private collection, but it is not clear what this is, whether it has succeeded in accessing the Bundesarchiv’s digitised collections or whether it has found these files elsewhere.

Shades of the Hugging Face incident here: these models are maniacally determined when giving a problem they deem tractable. They will push their search for potential solutions as far as they possibly can, often in ways that human experts find difficult to trace.

What can be done now

I mentioned above that I tried to using GPT-6 Astra to “solve” John Dee’s coded manuscript, Liber Loagaeth. Dee is one of my favorite historical figures ever, and if you haven’t heard of him, I recommend his Wikipedia page — his story is endlessly fascinating and weird. Among other things, Dee is thought to have influenced both Shakespeare’s depiction of the wizardly Prospero in The Tempest and Christopher Marlowe’s portrayal of the devil-bargaining Faust in Doctor Faustus.

Woodcut from the title page of the 1620 edition of Marlowe’s Doctor Faustus.

Woodcut from the title page of the 1620 edition of Marlowe’s Doctor Faustus. Dee believed he was conversing with angels, not devils.

One of the weirdest parts of a very weird life was Dee’s work with the “scryer” Edward Kelley to transcribe what he called a “book of mystery” which was written in the “angelicall language” (Dee believed that Kelley was, in effect, a prophet who was receiving new works of divine revelation written in code). You can read a full transcription of this book here.

Astra’s verdict, which I think makes sense given that Kelley was pretty clearly a charlatan, is that the supposedly coded book is not in code at all: it is almost entirely nonsense syllables. It created a report of its findings here.

However, the model’s analysis did yield a few interesting things. For instance, it was able to cross-check its mathematical analysis of how often characters repeat in the text to the evidence from John Dee’s diary. It concluded that Kelley started getting increasingly lazy after a specific date and began repeating himself more:

Astra was able to cross-check its mathematical analysis of how often characters repeat in the text to the evidence from John Dee’s diary.

Astra was also able to determine that one passage of this apparent gibberish actually did encode meaning: a reference to Bornogo, one of the angelic beings in what we might call the “John Dee cinematic universe” of invented mythology.

Is this a meaningful breakthrough in John Dee studies? No. And it’s worth acknowledging that even a genuine breakthrough in a niche historical subfield like this is far from an equivalent to solving Navier-Stokes.

But - this sort of thing is, I think, a genuine sign that expert historical knowledge combined with frontier models and a lot of compute can yield unexpected results.

Three quick case studies

I initially threw Astra and Opus 5.5 at the challenge of finding more WW2 and WW1 era encrypted messages to solve, but the low hanging fruit here seems to have been plucked — they came up empty (although it was fascinating seeing how they trolled through lists of German troop rosters to find plausible names to check).

Darwin’s monkey tails

I started getting better results when I moved into my own wheelhouse as a specialist in the history of science and medicine. As I write, GPT-6 is currently working through the writings of Charles Darwin and searching his references to where he gathered information relating to natural selection; the idea is to find undiscovered links in the chain of knowledge between Darwin and his informants. Interestingly, this was an idea that GPT-6 suggested on its own. However, it is actually a good match with my professional intuition about what would constitute a worthy research project (somewhere on the spectrum between a research paper and a PhD dissertation, in terms of potential payoff) using this material. In the past, AI models struck me as lacking this ability to independently conceive of worthwhile historical research projects at this scale — they were more useful for, say, making data visualizations.

Here is an example of the model’s reasoning traces as it contemplates whether to continue to research a reference to a kangaroo larynx in one of Darwin’s notebooks!

GPT-6 Sol giving up on the bandicoots in favor of researching “an objection about the first stages of a grasping monkey tail.”

GPT-6 Sol giving up on the bandicoots in favor of researching “an objection about the first stages of a grasping monkey tail.”

This one is currently in progress and hasn’t yielded anything worth mentioning yet as a decisive result, but I think it’s a good example of how the very patient, collaborative work of historical researchers and archivists — namely the team behind the wonderful Darwin Correspondence Project — can serve as a foundation for emerging research methods. It’s certainly the case that humans can, and have, traced the references to named figures in Darwin’s notes and letters, but the multilingual nature of language models makes me suspect that they will be able to find new links here, especially in extremely large corpora of sources that are beyond the ability of any one human to read in full.

Tracing the transmission of alchemical knowledge

Another great candidate: the papers of Samuel Hartlib, the self-described “intelligencer” who was an influential early member of the Royal Society and a key node in the network of early modern science. These are fully digitized, they are drawn from sources in several languages, and they span a wide range of academic fields and intellectual niches. All of which means they are unusually tractable for a frontier model.

Opus 5.5 set to work downloading over 5,000 primary source files from Hartlib’s archive, then created sub-agents to troll through Google Books and other archive sites to cross check the unidentified sources of Hartlib’s information across different languages. The goal was to find moments when Hartlib had received important scientific information from an anonymous or unidentified source, and then discover that identity.

Opus is actually still working through this as I write, but a preliminary report is written up here. The top findings are, in my view, real and meaningful. Not earth-shattering by any means, but the sort of thing I could imagine spending a week of research on.

Did you catch the bit about the anagram?

Did you catch the bit about the anagram? This is where the reasoning/math ability of these models becomes relevant: Opus 5.5 noticed that both Newton and Hartlib used different anagrams/codes for the key ingredient, Hungarian vitriol. This sort of coded language is common in early modern alchemy, but I certainly never would have noticed it. Opus explains:

Newton’s is a true anagram. “Vltimorui” uses exactly the letters of vitriolum (v-i-t-r-i-o-l-u-m), rearranged. The Newton edition’s editors identify it that way.Hartlib’s is closer to backwards writing, and even that is imperfect. Reverse each word of Miloirtiua riciragnun letter by letter and you get:

Miloirtiua → auitriolim, close to uitriolum (= vitriolum)

riciragnun → nungaricir, close to ungaricum

This felt like a stretch to me, but it further clarified things by sharing the specific marginal annotation that had been written to clarify this for 17th century readers as well:

Marginal annotation

You can spot “vitriolum angaricum” scrawled in the margin at a left

So what Opus identified here was not just the anagram for a key alchemical ingredient, but more importantly, the parallel between both Newton and Hartlib employing anagrams for it. This, along with the same quantities being described by both, and other matches across the texts, seems to me to be very compelling evidence that Hartlib’s manuscript was the one Newton drew upon.

As far as I can tell, this actually is a new finding, and given Newton’s historical significance, it may be one that would merit publication, especially if it can be fleshed out with other findings along the same lines.

Deciphering early modern coded letters

A final case study: literally while I was writing this post, Opus 5.5 partially deciphered two 16th century Spanish letters written in the secret code of Emperor Charles V:

Two 16th century Spanish letters written in the secret code of Emperor Charles V

The catch? Both had already been deciphered! One had been decrypted back at the time of authorship, in the 1530s, with the plain text written in a set of pages that followed the coded ones. The second, after some digging through Google Books, turned out to have been deciphered in 1916.

This was a good example of the importance of expertise and “desk research,” since (being a complete amateur when it comes to historical cryptography) I could easily have wasted several more hours duplicating the work of a careful scholar well over a hundred years ago. At the same time, it was also a great test case for determining that Opus 5.5 really is capable of doing this sort of work, since it was able to verify its own interpretations as correct once it found the “gold standard” plain text from 1916. Below is a chart Opus made showing this, and a complete website it created with a writeup of that work:

Chart showing Opus 5.5's interpretation of the coded letters

It’s worth mentioning again here that Daniel Bourdeau has an amazing website collecting open problems for historical cryptography and documenting his attempts to use these same models to solve them. It’s a great guide for this sort of thing.

What next?

The obvious next step is not people like me using up their personal Codex and Claude Code allowances each week poking around in this haphazard way. It’s a systematic effort based on collaborative research and sharing of information between historians, archivists and other researchers, and I think it’s time for the major AI labs and foundations to start funding and assisting this work.

Why? So much of what frontier models can currently accomplish is because they have access to publicly accessible primary sources. They can make breakthroughs in, say, cracking an Enigma cipher because enormous volunteer effort has gone toward making these documents transcribed and available online, and because so much collaboration has happened between humans to establish what questions should be asked, what the problems are.

For now, the results for historical research, archives, and related fields (like archaeology) are going to be much more scattershot and limited than what we’ve seen in math. That’s partly a matter of what these models find tractable, and it’s true that mathematical proofs are just fundamentally different from how historical knowledge is amassed. But I think three key interventions would move the needle toward real breakthroughs in the field of history:

  1. Collaborate across libraries and archives to digitize unavailable historical manuscripts and make them freely accessible online. Repeatedly, in my testing, the bottleneck turns out to be access to archival documents. These are often digitized but are not available unless you have privileged access. Relaxing these restrictions would go a long way, but it’s even more important to remember that the vast majority of premodern historical manuscripts remain undigitized. This is a very solvable problem that just needs institutional will and funding.
  2. Providing historians with free API access/compute. I might be wrong, but I don’t think anyone actually knows what happens when a medium to large amount of compute (on the order of hundreds or thousands of agents) is thrown at active historical problems.
  3. Historians can band together to identify “millennium problems” just as mathematicians have. I should clarify here that the major debates in historical scholarship have nothing really to do with “solving problems” or “disproving theorems” — again, history is just fundamentally different from math or physics in this way. The things that historians get passionate about, and devote our careers to, are often issues of interpretation and subjective analysis that have no single “solution” at all. But — there also are actual mysteries that could be solvable if sufficient attention and resources were devoted to them. John Dee’s Liber Loagaeth is one: does it encode more meaningful information than the snippet the AI was able to spot? Quite possibly - we just don’t know right now. The famous Voynich manuscript may be another, although I personally believe it likely has no semantic information at all (my theory is that it’s the product of an early modern person suffering from graphomania). And then there’s Linear A, and all the still-encrypted historical primary sources, and on and on…

I’m intrigued enough by all this that I am planning on emailing historian friends and colleagues to create an informal survey of which “open problems” in history they think would lend themselves best to this sort of approach. The list would then be made publicly available as a list on a website. Please get in touch if you’d like to be involved in this:

Email me

Clearly, there will be more advances in historical code-breaking from these models. But what interests me is what additional forms of historical knowledge that general set of skills can uncover. In other words, the problem space around actual cryptography.

Personally, I suspect that issues relating to provenance, quotation (including previously undetected cases of historical plagiarism!) and influence across languages and genres are going to be where frontier models end up being most useful.

But this is where pooling the expertise of historians and archivists, and getting direct input from AI researchers, is most helpful. There are so many offshoots of historical knowledge that lead in niche directions that it’s impossible for one person to actually know what questions to ask.

As an example, GPT-6 Pro has spent the past several hours churning through a 17th century Sanskrit astronomical text (the Karaṇakesarī of an astronomer named Bhāskara) trying to reconstruct the algorithms Bhāskara used to model solar eclipses.

Is this actually historically useful? I have absolutely no idea.

And that’s exactly why I find these tools interesting, despite all the legitimate societal concerns and existential anxieties they have introduced into our lives.

AI, if used for writing or as a replacement for original thought, surely encourages damaging cognitive offloading. But when used to expand research questions beyond the horizon of what any single person can know, they do something else, something I for one find mind-expanding and curiosity-inducing. I think it’s worth seeing where it leads.

Closing image

1

As with mathematical research, seems is an important qualifier here - I tried searching around for it in the secondary scholarship but it’s entirely possible that this link has already been made in published or unpublished work I didn’t find.

The Daily Front Page 18 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — A Corolla Goes Electric
article

Toyota is taking the Corolla electric

by cisc·▲ 290 points·488 comments·electrek.co ↗

Toyota-Corolla-EV-launch

Toyota is preparing to introduce the electric version of its best-selling car of all time, the Corolla.

When is Toyota launching the electric Corolla?

With over 57 million sold worldwide since it went on sale in 1966, the Toyota Corolla is widely considered the best-selling vehicle to date.

The Corolla has undergone 12 model changes, but the upcoming version will look (and feel) very different from its predecessors.

Toyota offered a sneak peek of the new Corolla in concept form almost a year ago at the Japan Mobility Show.

“How should the Corolla evolve?” Toyota CEO Koji Sato asked those in attendance. The Japanese automaker is planning a drastic overhaul, including a sleek new design, high-tech interior, and updated platform.

Although it’s expected to use the same TNGA-C architecture as the current Corolla, Toyota is expected to introduce a heavily modified version of the platform that supports all powertrains, including pure electric.

Toyota-Corolla-EV-launch

Toyota CEO Koji Sato reveals the Corolla Concept at the Japan Mobility Show (Source: Toyota)

“Whether it’s a battery EV, plug-in hybrid, hybrid, or internal combustion engine vehicle―whatever the power source―let’s make good-looking cars that everyone will want to drive!” Toyota’s CEO said at the Japan Mobility Show.

Toyota’s current chairman and former CEO, Akio Toyoda, warned in an exclusive interview with Japanese media NHK in July that the company is being forced to adapt, or “it cannot survive,” amid new competition and technology from China.

The special broadcast went behind the scenes at the “top secret” next-gen Corolla development site.

Toyota-next-gen-Corolla-EV

Toyota Corolla Concept (Source: Toyota)

We even caught a glimpse of several different Corolla Concept body types, including a sedan, hatchback, crossover, and GR model in the background.

While Toyota has kept most details secret so far, the next-gen Corolla is expected to come in several powertrains, including gas, hybrid, plug-in hybrid, and battery electric.

Toyota-Corolla-EV-interior

The interior of the Toyota Corolla EV concept (Source: Toyota)

Toyota engineers told Car and Driver that the hybrid will use a new 1.5-liter four-cylinder engine with an electric motor, delivering about 134 horsepower combined.

The hybrid system will be roughly 10% to 20% more efficient than the current setup, and an AWD version is possible.

Toyota-Corolla-EV-interior

The interior of the Toyota Corolla EV concept (Source: Toyota)

Toyota will also introduce the first plug-in hybrid and pure electric Corolla models. The PHEV will use a larger battery, offering a longer electric driving range, but Toyota has yet to reveal specifics.

The Toyota Corolla EV is expected to be available in single- and dual-motor configurations with a driving range of at least 250 miles.

Toyota-cannot-survive-Corolla-EV

Toyota Corolla Concept (Source: Toyota)

Whether or not Toyota will bring the Corolla EV to the US is still up in the air. Toyota’s next-gen Corolla is expected to make its debut sometime in 2027 as a 2028 model year.

We will learn prices closer to launch, but according to Car and Driver, the gas version will likely start at around $25,000, the hybrid around $27,000, and the EV and PHEVs will likely be priced in the $30,000 range.

The Daily Front Page 19 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — A Stroll Through Digital Tokyo
article

My weird new hobby: Wandering around Tokyo on Google Maps

by ahmedhossamdev·▲ 288 points·126 comments·ahmedhossamdev.com ↗
My weird hobby lately is just wandering around Street View

A quiet Tokyo street seen from Google Street View, parked cars and low houses on a narrow road

My weird hobby lately is just wandering around Street View and zooming in on random stuff. Houses, wires, trees, whatever. lol.

Today I found a 350Z in Tokyo. It’s just sitting there on the side of this narrow street, and when I flipped to the oldest photos of that spot, there it was too. Same street. Same place. 2009.

Every capture since 2009 shows it parked in that same spot, like 17 years of never leaving. Though honestly, look how clean it is. Nobody abandons a car for 17 years and it stays that clean. Someone clearly drives it and just always parks it back home. But from Google’s point of view, it never left. Still parked. Still waiting.

The same narrow Tokyo street in a 2009 Street View capture, with a white 350Z parked in the same spot

Here’s the 2009 Street View capture. Same car, same spot.

I have no idea why that’s so satisfying to me. But it is.

So yeah, this is the hobby now: I open Google Maps, pick a place I’m curious about, and just wander.

I walk down streets I’ve never been to. I look at the houses, the wires, the trees, the sky between the buildings. Light falling in some random alley. People going about their day, frozen in time. And I pay attention to the small stuff: a tiny bike leaning against a gate, plants on a windowsill, a ladder that’s been sitting there for years. I pretend I’m there.

Then comes the best part: I go back in time.

Google keeps old Street View captures for a lot of places. You click once, and suddenly you’re on the same street seventeen years ago. The trees are smaller. The buildings are different. Half the neighborhood didn’t exist yet. Streets look wider, or emptier, or the whole skyline changed.

I love seeing how places changed through the years.

Sometimes the old photos make me think about the people in them. The guy leaning on his car. The kid on a bike. Someone carrying groceries in. I wonder if they still live there. If they’re still alive. If they’re happy now. It’s a little weird to admit, but it makes these streets feel real. Not like pixels. Like actual places where lives happened and kept going.

Tokyo is my favorite place to do this. Its streets are narrow and weird and full of small details, and you can lose an hour on one block without noticing.

There’s no goal here. No destination. I’m not looking for anything specific. I just like seeing how some places change, and how other places somehow stay exactly the same.

There’s something calming about a thing that just stays. So much of the internet is built to move fast. Street View is the opposite: it keeps fences, signs, and parked cars like little time capsules. It doesn’t care that nobody’s looking.

Anyway, if you haven’t tried this, do it. Pick any city, drop the little guy on a random street, and just walk. You’ll be surprised what you find.

Maybe I’ll find another 350Z somewhere.

lol.

Update: the 350Z is gone

I posted this on Reddit, and someone who lives in Tokyo actually went to the street to check. He found the exact spot, you can tell by the mailbox on the wall. But the car is gone. The whole house is gone too. Torn down and replaced with something new.

Here is what he wrote:

So, as is often the case in Japan, several of the houses around there have been torn down and replaced in the 4 years since that last street view. I found the exact spot, though, you can tell by the mailbox on the wall. The white 350Z is gone, as you can see, along with the whole house! It’s all new.

The same Tokyo street today, photographed in person: the old house and the white 350Z are gone, replaced by a new building

So the 350Z showed up in that same spot for 17 years, and now it only exists in old Street View captures. The time capsule outlived the street itself. I think that makes me like this hobby even more.

The Daily Front Page 20 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — The XP Box
article

The "Windows XP Box" (2003)

by doubletwoyou·▲ 221 points·48 comments·mini-itx.com ↗
I decided to build my "Windows XP Box" in a Windows XP box.

Introduction

I needed a small Windows XP machine and a Mini-ITX board was the obvious choice. So I decided to build my "Windows XP Box" in a Windows XP box. The external dimensions of the box are a tiny 243mm x 200mm x 48mm.

Click image to magnify

My requirements were:

  • Use as powerful a motherboard as possible for the size i.e. a Nehemiah EPIA M10000.
  • It must have an internal CD drive (this size eating requirement turned out be be very hard to meet).
  • No bits could be cut off the motherboard to make it fit.
  • The box must not bulge in an unsightly way, nor can the box be made bigger.
  • It must not burst into flames when working hard (this should always be a requirement of a computer project).

Fortunately there is no longer any requirement for an internal floppy drive. That would have have defeated me.

Construction

The bits arrive and it looks like an impossible task, with too many bits to fit in a small space.

Click image to magnify

I nearly gave up and decided it was an impossible task. The Windows XP box was 3mm thinner and 12 mm narrower than the Adobe Acrobat box I had measured up when first deciding if the project was going to be possible. The challenge was to arrange the components into a 3D jigsaw, then decide how to build enough of an internal support case to get everything to stay in place.

Eventually it looked like I might have a possible layout, but the tolerances were tight. I had 6mm to spare on the long internal dimension of the box and only 3mm to spare on the thickness of the box, and this was not allowing for any thickness for the internal support case that holds everything in place.

Click image to magnify

In order to mount all the bits I was going to have to make an inner support case that would tightly slide into the cardboard box. I chose Wonderboard plastic as my construction material because it is reasonably strong and very easy to work with (it cuts with a Stanley knife). It would have been nice to use aluminium, but the cramped design made the chances of a short circuit too great.

The first construction step was to cut out a base plate the exact size of the inside of the cardboard box and double check where the bits will fit.

As the Wonderboard was 3mm thick this reduced my tolerance in two dimensions to zero. The CD drive would touch one side of the inner support case. The deep part of the CD drive would touch the heat sink on the motherboard, with the narrow bit being able to overlap it, and the far side of the motherboard touches the other side of the Wonderboard case. In the other dimension it was even harder. The top of the sound connector would touch the support case, and the underside of the motherboard would touch the cardboard box. Fortunately the hard drive can slide under the motherboard as this is above (below?) the unused PCI slot. The only place left for the PSU was above the hard drive with the bulky connectors facing down towards the CD both to the front and the back of the hard drive.

Click image to magnify

Now I could position the CD drive hard against the side and start assembling the support case. In the next picture you can see the step up between the thin part of the CD drive and the thicker part of the main body of the drive. The heat sink on the Mini-ITX board touches this step.

Click image to magnify

After much cutting and half a tube of glue the case was finished. I built pillars to support three corners of the motherboard and the power supply and added brackets to support the CD and the hard drive. In such a compact design cooling was a concern so I made fan mounting points in opposite corners of the case. To keep the CPU nice and cool I cut a hole for it it the side of the case and glued in a couple of plates to act as ducting so the CPU fan will only suck in cold outside air. The other two fans are the exhaust points. The fan guards were cut out of a metal speaker grill using an angle grinder as neatly drilling that many holes is just not fun. Angle grinders are almost as much fun to use as chain saws.

Click image to magnify

The Daily Front Page 21 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — Nokia’s Design Cabinet
article

Nokia Design Archive (2025)

by pillars·▲ 222 points·121 comments·repo.aalto.fi ↗

Collection information / Kokoelman tiedot

Arkisto tai kokoelma: Nokia Design Archive

Arkistonmuodostaja: Nokia Corporation

Genre / Aineistotyyppi: Kuva

Genre / Aineistotyyppi: Asiakirjat ja tekstit

Genre / Aineistotyyppi: Video

Genre / Aineistotyyppi: Äänite

Date range from / Ajallinen kattavuus, varhaisin: 1990-01-01

Date range to / Ajallinen kattavuus, myöhäisin: 2020-12-31

Language / Kieli: eng

Language / Kieli: fin

Kuvailu: Nokia Design Archive -kokoelma sisältää Nokialla tehtyyn muotoilutyöhön liittyvää materiaalia keskittyen yrityksen Nokia Mobile Phones - ja Microsoft Mobile -toimintoihin. Aineisto sisältää esineitä, materiaalinäytteitä, valokuvia, luonnoksia, mallinnuksia, video- ja äänitiedostoja, yrityksen sisäisiä julkaisuja sekä kirjeenvaihtoa ja esityksiä. Aineisto on käytettävissä museotoimintaan, näyttelyihin sekä opetus- ja tutkimustarkoituksiin. Kaupallinen hyödyntäminen on kielletty.

Scope and content: The Nokia Design Archive Collection contains material related to design work conducted at Nokia Mobile Phones and Microsoft Mobile. The material includes objects, material samples, images such as sketches, mood boards and renders, audio and video files, internal publications, correspondence, and presentations. The material is available for museum activities, teaching, and research purposes. Commercial use of the material is prohibited.

Subject term / Asiasana: matkapuhelimet

Subject term / Asiasana: älypuhelimet

Subject term / Asiasana: muotoilu

Corporate name / Organisaatio: Nokia Corporation

The Daily Front Page 22 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — A Font Foundry for Mischief
show hn

Show HN: Make cursed fonts like Times New Bastard

by MitPitt·▲ 596 points·81 comments·bastardica.mitpit.com ↗

A foundry for bastard web fonts.
Mix, stretch and / or squish them.

FAQ

Where can I use bastard fonts?

Every download is a normal OpenType font. The swap is a liga contextual substitution registered for every script, so browsers turn it on by default.

It works anywhere OpenType text is shaped: browsers, design tools, print. If a font looks unchanged, check that ligatures aren't switched off in the app you're using.

Are my fonts uploaded anywhere?

No. Everything runs locally in your browser with Pyodide and fontTools.

Any pro tips?

Bastardica can make simple fonts feel a little, hmm, richer? Use Y-offset and scale effects to make glyphs align perfectly.

When mixing 3 or more fonts, they will intersect (e.g. every 5th and every 7th will collide on every 35th). The first font wins. The stride won't break for either.

Use prime numbers for strides, so the mix-in fonts collide more rarely.

Some websites to grab free fonts to play with: Google Fonts, UNCUT, Velvetyne, Font Squirrel, FontSpace, DaFont.

What about font licensing?

Mixing two fonts produces a derivative work, so make sure to check licenses of both source fonts if you plan to use a bastard font commercially. Bastardica adds no conditions of its own. A credit is appreciated, but optional.

Bastardica was inspired by Times New Bastard and Easy Pete.

The Daily Front Page 23 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — Signal Cartography
repository

WaveDigger: Dig into wireless signals to discover their physical locations

by 882542F3884314B·▲ 106 points·20 comments·github.com ↗
★ 192⑂ 13 forks TypeScript

BSSID Search in Apple's public WPS service

Dig into wireless signals to discover their physical locations. WaveDigger helps you find Wi-Fi access points by their BSSID (MAC address) and cell towers (LTE and 5G NR) by their network parameters. Built with Next.js, TypeScript, and deck.gl for interactive map visualization.

A hosted version can be found at https://wavedigger.networksurvey.app.

WaveDigger Screenshot

Features

  • BSSID Search: Enter a BSSID to find its approximate location

  • Input Validation: Automatic formatting and validation of BSSID input

    • Supports formats: AA:BB:CC:DD:EE:FF, AA-BB-CC-DD-EE-FF, AABBCCDDEEFF
  • Cell Tower Search: Look up LTE towers (MCC, MNC, TAC, Cell ID) or 5G NR towers (MCC, MNC, TAC, NCI). NR searches return the target cell plus surrounding NR cells in the same cluster.

  • Interactive Map: Visualize results on a deck.gl-powered map

  • Search History: Track recent searches for quick access

  • Responsive Design: Works on desktop and mobile devices

Acknowledgments

🙏 This project would not be possible without the incredible work done by the apple-corelocation-experiments team.

WaveDigger is built upon their research and reverse engineering of Apple's location services API. Specifically, we use:

  • Their protobuf definitions for Apple's WLOC API
  • Documentation of the API endpoints and request/response formats
  • Understanding of coordinate encoding and API behavior
  • The initial bytes prefix required for valid requests

Their work in understanding and documenting Apple's undocumented location services has made it possible for projects like WaveDigger to exist. Please check out their repository for the original research and additional tools for working with Apple's location services.

Getting Started

Prerequisites

  • Node.js 24+ and npm

Installation

  1. Install dependencies:
npm install
  1. (Optional) Add a Mapbox token for enhanced map tiles:

    • Get a token from Mapbox
    • Add it to .env.local:
    NEXT_PUBLIC_MAPBOX_TOKEN=your_token_here
    

Running the Development Server

npm run dev

Open http://localhost:3000 to view the application.

Technical Details

Architecture

  • Frontend: Next.js 15 with TypeScript
  • Map Visualization: deck.gl with react-map-gl
  • Styling: Tailwind CSS
  • API: Next.js API routes

Real Apple WLOC API

The application uses Apple's real WLOC API to query BSSID locations. This implementation is based on the research and protobuf definitions from the apple-corelocation-experiments project.

The API implementation:

  • Uses protobuf for communication with Apple's servers
  • Sends requests to https://gs-loc.apple.com/clls/wloc
  • Handles coordinate conversion (Apple uses int64 with 8 decimal places)
  • Supports both default and China region endpoints

Testing with Real BSSIDs

To test the app:

  1. Find a real Wi-Fi BSSID (MAC address) from your router or access point
  2. Enter it in any supported format
  3. The app will query Apple's database and show the location if found

Note: Not all BSSIDs are in Apple's database. Newly deployed or private access points may not have location data.

Features Roadmap

  • Export Results: Download search results as JSON/CSV
  • TAC-cluster view: Browse every tower in a TAC without needing a specific Cell ID or NCI

License

WaveDigger is licensed under the GNU Affero General Public License v3.0. If you run a modified version of this software as a network service, the AGPL requires you to make your modified source code available to users of that service.

The Daily Front Page 24 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — The Cartoon’s Grand Design
article

Why 'What's Opera, Doc?' looks like that

by CharlesW·▲ 152 points·27 comments·animationobsessive.substack.com ↗
It’s one of the really famous cartoons.

Plus: news.

A still from What’s Opera, Doc?

A still from What’s Opera, Doc?

Welcome! This is another Sunday edition of the Animation Obsessive newsletter, and this is the plan:

  • 1. Maurice Noble’s design for What’s Opera, Doc? (1957).
  • 2. Animation newsbits.
  • 3. The last word.

With that, let’s go!

1. Super opera

It’s one of the really famous cartoons. If you’re reading this newsletter, you’ve probably watched it yourself. After almost 70 years, What’s Opera, Doc? endures.

Classic status wasn’t exactly the team’s goal. This was, in some ways, a workaday Bugs Bunny production. “What’s Opera, Doc? is one many Europeans adore,” Chuck Jones said in the ‘70s. “They call that my ‘masterpiece,’ which it may or may not be; I didn’t think about it at the time.”1

He did know it was a bit ambitious. At a cost of $35,510 (almost $430,000 today), it was spendier than most Warner cartoons. It took seven weeks compared to the standard five. To get the extra work done, Jones and his crew secretly shaved a couple weeks off other, easier films and faked their time cards. It was something they did on occasion. (The mysterious price increases angered the managers, Jones said, but they were “not very bright” and didn’t figure out the trick.)2

Some unique features of this project were its complicated score, recorded ahead of time, and its movements studied from ballet stars Tatiana Riabouchinska and David Lichine. Plus, Jones drew “almost 500” pose sketches (“as well as a further 1,500 unused roughs”) to guide his animators, whereas most films got 300.3

Those things and others, including the voice performances, made the short special. But Jones liked to credit one element and one person in particular with its success. He pointed to Maurice Noble, designer of the colors and layouts.

What’s Opera, Doc? is a film of “angular settings, gargantuan shadows, rapid cuts, odd colors and dramatic camera angles,” in the words of Charles Solomon. And every shot of it required Noble’s touch. “Without Maurice Noble, who excited, moved and stimulated us all,” Jones wrote, “that film could not have been made.”4

Stills from What’s Opera, Doc? (1957)

Stills from What’s Opera, Doc? (1957)

A snippet of animation from the film

A snippet of animation from the film

Maurice Noble was one of the top mid-century cartoon designers. But he wasn’t a member or a fan of UPA. “I don’t believe I was influenced by UPA at all. ... I think UPA outsmarted itself in overdesigning,” he said. The UPA designers, for their part, didn’t seem to like him, either.5

Either way, Noble gave many of Jones’s films a slick, modernist look in the ‘50s. He viewed design as a form of storytelling and adjusted his style to fit each project. “Background design is all about conveying emotion and supporting personality,” Noble once said. Like he told Animato:

I am a great believer in the idea that color and visual impact have a lot to do with the response of the audience. I would play for dramatic impact in both design and color, in terms of putting over a story point. No background is any good unless it’s appropriate to the given situation or mood of the thing that’s being portrayed.

This functional aspect of Noble’s work was something Jones loved and often glowed about:

He had great staging techniques, and he understood what very few background men do understand — and actually very many live-action people don’t seem to understand it in the graphics area: that the purpose of a great designer is to design an arena where the actor can perform. Or the animator can perform. And where the action shows itself to its best advantage. Now this doesn’t mean you can’t have high design. You remember What’s Opera, Doc? — the thing would have been cluttered, except that it was so well designed.6

In Jones’s Wagner send-up, the Noble method was especially key. This time, a good deal of the story “had to be told in graphics,” as Jones put it.

Noble wasn’t the first designer attached to the project. It started with Ernie Nordli, who gave What’s Opera, Doc? a stagey treatment with a proscenium arch. When Noble took over, he scrapped that direction in favor of “super-grand opera” with “super, colossal settings,” over-the-top enough to spoof the medium.7

Storyboards by Mike Maltese for What’s Opera, Doc? — courtesy of Chuck Reducks

Storyboards by Mike Maltese for What’s Opera, Doc? — courtesy of Chuck Reducks

Character layout sketches by Chuck Jones for the film, courtesy of That’s All Folks!

Character layout sketches by Chuck Jones for the film, courtesy of That’s All Folks!

A shot in progress. From top left: pencil layout, Noble color key, background painting by Philip DeGuard, final shot. Courtesy of That’s All Folks! and The Noble Approach.

A shot in progress. From top left: pencil layout, Noble color key, background painting by Philip DeGuard, final shot. Courtesy of That’s All Folks! and The Noble Approach.

Working from storyboards by writer Mike Maltese, Jones roughly outlined the shots through character layouts. Eventually, the film would have over a hundred shots squeezed into roughly six minutes — once again, more than the norm.8

Noble excelled at backdrops, while Jones was the stronger artist in figure drawing. They had a collaborative setup here, handing ideas back and forth. “Maurice would trace all the character drawings onto one sheet of paper, then play with the spaces open to him to design the background,” Jones wrote.

Jones then built on that pass. As Noble said, “I would design material and hand it back to him, and he’d weave it back into the story because it hit him right.”9

Noble had worked on Disney’s Fantasia — and What’s Opera, Doc? was a kind of “satire of Fantasia,” in Jones’s words. So, Noble riffed on the same Kimberly Crest mansion he’d referenced in the Disney production. And he executed Jones’s idea for a Night on Bald Mountain gag at the start:

I know that toward the opening, he wanted to have this big shadow going. So I did a sketch, and I put the tiny little character down in front of it, to give this gigantic scale. Then I went to the pink roses and the Greek love castle … I was thinking now in terms of dramatic layout and staging for each section of the picture as it went along. It became theatrical; it wasn’t reality.

Color sketches by Maurice Noble for What’s Opera, Doc? — courtesy of The Noble Approach

Color sketches by Maurice Noble for What’s Opera, Doc? — courtesy of The Noble Approach

Noble took an experimental route. That included some of the colors: a red Elmer Fudd against a purple sky, among other unnatural choices. With work underway, Friz Freleng dropped by Noble’s office and saw the concepts. “[He] muttered, ‘What the hell?’ and then just left,” Noble recalled.10

Freleng wasn’t the only one confused. “I would get calls from the ink and painting department saying, ‘Now, you don’t mean to say you’re going to paint this character all red?’ or something like that,” Noble explained. “I’d say, ‘Yes, that’s the way we want it.’ And Chuck was backing me up on it.”

Again: What’s Opera, Doc? wasn’t a huge project or meant to change animation. The team did a lot of cartoons each year; this was one of them. In that framework, though, Noble was playing around, trying to put across this satire by way of “ultra-dramatic” choices. “The thing just got bigger and bigger and bigger,” he said.11

Noble color design work for the film, courtesy of The Noble Approach

Noble color design work for the film, courtesy of The Noble Approach

More Noble color design, courtesy of The Noble Approach

More Noble color design, courtesy of The Noble Approach

One of Noble’s many experiments was the spotlight effect in the later scenes, when the edges of the screen go blue. Here’s Noble:

I punched a hole in a piece of blue celluloid one day, and I was experimenting with this stuff, and I saw this made a spotlight. I took it in to the cameraman, and I said, “Why can’t we do something like this?” I argued with him, and I got him to try it under the lens, and we made a spotlight out of it [with a double exposure]. … I was always trying something, and sometimes it would backfire. That’s what kept the job interesting all those years.

When this stuff was coupled with Noble’s usual techniques (like what he called his “rhythmic” compositions of “color and space relationships, and accents in patterns of forms”), What’s Opera, Doc? came out looking pretty special.

Noble thumbnail sketches for the film, courtesy of The Noble Approach

Noble thumbnail sketches for the film, courtesy of The Noble Approach

Noble design work, courtesy of The Noble Approach

Noble design work, courtesy of The Noble Approach

Seeing the final film at the studio, the team was impressed. Artist Willie Ito remembered, “[W]e marveled at what a unique feat that was.” The May 1957 issue of Warner’s internal magazine noted that this “very rich looking picture” with “very unusual” backgrounds and colors was “very well received” by the crew.12

Still, in general, What’s Opera, Doc? wasn’t a big deal. It was just another Bugs Bunny cartoon. Although it was submitted for an Oscar, it wasn’t nominated.13 The press didn’t say much about it one way or another. Yet one of the few reviews, in Motion Picture Exhibitor, hinted at a reevaluation to come:

This is far above the usual run of animated cartoons and should find special favor in art houses, believe it or not.14

The film got a second life on television, according to historian Jerry Beck. What’s Opera, Doc? appeared at the end of the golden age of theatrical animated shorts, but it could rerun forever on TV — many of the older cartoons did. When the Warner films were seen and judged side by side, Beck said, this one clearly stood out. It had something extra, different.

It stood out to its creators, too. “I’ve always loved that cartoon,” Noble noted. Jones later called it “probably our most elaborate and satisfying production.”15 Stylistically, the film was a big swing that paid off. Noble was the first to admit that some of his other swings, across his career, hadn’t. Like he said, though:

Sometimes when you experiment you will fail. Some way-out ideas may not work the way you thought they would. But that’s okay! That’s the nature of being on the edge of exciting design. You will never do anything interesting if you don’t take chances.

2. Newsbits

  • We lost Tim Curry (80) and Peter Cullen (85), two major voice actors in animation. There’s a wonderful write-up about both of them on re:frame.
  • Coyote vs. Acme debuted in second place at the American box office, with $15.4 million in revenue and a CinemaScore audience rating of A.
  • The upcoming book Nizo Yamamoto: Art for Animation collects the work of the great Japanese background artist. It’s the first English book about him, done by the folks behind Anime Architecture.
  • In America, Phil Tippett’s studio just closed with a massive auction, after almost 40 years in business.
  • The Palestinian rap group BLTNM started an animated series on YouTube, produced by the studio Stereo.
  • A film by Ukrainian director Volodymyr Dakhno, behind the Cossacks series, has been restored and will screen at the Linoleum festival next month.
  • In America, Amid Amidi revealed details about his immense, heavily illustrated Ward Kimball biography, which is nearly complete and scheduled to hit Kickstarter next year.
  • In Japan, Toyo Keizai investigates the reality that late-night anime is now tailored mainly to the tastes of foreign countries, especially those in North America, where most of the industry’s money is made.
  • An in-depth behind-the-scenes video about the Japanese series Jaadugar is up on YouTube.
  • In Russia, there’s been a large uproar over a police crackdown on a girl’s playground drawings of the characters from KikoRiki, an animated series. The company behind KikoRiki responded by inviting her for a studio visit.
  • Finally: a look into The Good Soldier Švejk (1954–1955) by Jiří Trnka.

3. Last word

That’s our issue for today! Hope you’ve enjoyed. We’re closing out with personal comments from the two of us:

John: The loss of Curry and Cullen, and the end of Phil Tippett’s studio, were tough headlines to read this week. Those are all major legacies, and I’m left wondering about the future. A friend messaged me that Tim Curry was one of those irreplaceable people, a type who isn’t even made anymore. I think about the path he took and whether the infrastructure exists now for people to do what he did. The masters are getting older, and all of us in the younger generations are on next. Even if they’re impossible acts to follow, we owe it to them to try somehow.

Jules: The control and depth of Curry’s voice performances are things I associate with actors of his generation, many of whom had education and experience in live theater. So many things go into the formation of artists: the traditions they’re trained in, the prevailing taste and artistic theories of the moment, the economic incentives around them, the projects available to work on, the other artists they happen to meet. Like how Hayao Miyazaki was so heavily formed by his peers, whether in his early years in the Toei union or during his TV work with Takahata. Sometimes it can feel like artists in previous eras benefited from circumstances that have long since changed. Whatever circumstances we happen to find ourselves in today, I believe that serious discussion, study, analysis and collaboration can go a long way in helping us keep up.

Until next time!

1

From Funnyworld (Spring 1971).

2

Details from Bugs Bunny: Fifty Years and Only One Grey Hare, Of Mice and Magic and Chuck Reducks. That last one was a major source today.

3

See Hollywood Cartoons and the documentary Wagnerian Wabbit, both used multiple times.

4

Quotes from Enchanted Drawings: The History of Animation and The Noble Approach. The latter was one of our main sources.

5

See Animato (Spring 1991), used many times, and Cartoon Modern.

6

From Chuck Jones Conversations, used a few times.

7

See Tunes for ‘Toons and Stepping into the Picture.

8

The exact number of shots is given as 106 in The 50 Greatest Cartoons.

9

See Noble’s interview in Walt’s People (Vol. 25), a key source.

10

See Cartoon Research and That’s All Folks: The Art of Warner Bros. Animation.

11

From Film Comment (January–February 1975), used a few times.

12

See Cartoon Research.

13

For details on the film’s Oscar woes, see Cartoon Research.

14

From Motion Picture Exhibitor (August 21, 1957).

15

Jones’s line is from the book Chuck Amuck.

The Daily Front Page 25 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — Labor’s Forgotten Day
article

The forgotten battle of East Lansing

by rmason·▲ 94 points·15 comments·eastlansinginfo.news ↗
the one-day — and oft-forgotten — Battle of East Lansing.

In 1937, clashes between Michigan State College students and auto union members organizing a labor strike erupted in East Lansing. (Courtesy of MSU archives)

With 3-foot-long concrete reinforcing rods in their hands, students at Michigan State College took to the streets of East Lansing on Monday, June 7, 1937, to push back an invasion of Lansing labor union members, kicking off the one-day — and oft-forgotten — Battle of East Lansing.

(Perhaps if it had a catchy folk song sung by a local Peter, Paul and Mary-type group, future generations would better remember it?)

Recounting these events nearly five decades later in an interview with labor historian Ken Germanson, Lester Washburn, president of United Auto Workers union of Lansing — Local 182 — said the trouble started when the union had racked up a series of wins.

Lansing was a major automobile producer, with the 52-acre Oldsmobile assembly plant on the south side, the Fisher body plant on the west side and the city’s own REO Motor Car Company plant in the neighborhood to which it gave its name.

Earlier in 1937, the latter was the site of a four-week sit-down strike that led to the recognition of UAW Local 182 as the chief collective bargaining representative for the autoworkers.

“We were being too successful as far as organizing was concerned in that town,” Washburn said in the 1986 interview. “Everybody wanted to join the auto workers. One night, we had 19 people come in the hall and ask for a union; Capital City Wrecking Company. They wreck buildings, sell used lumber as well as new lumber. They had 25 employees. 19 of them come in and ask for a union, we give them one that night, elected officers, set them up.”

The next morning, however, Capital City Wrecking Company fired the six newly elected officers and refused to recognize the union.

According to Washburn, what followed was a court fight and a strike. The legal battle found the union trying to prove that the company had violated its rights and the National Labor Board Act of 1935. The judge issued a temporary injunction against the union until he could rule.

The strike was staged by employees of the wrecking company and their UAW brothers from other local shops. Men would picket the company when they weren’t working their own jobs, and the auxiliary organization — made up of the wives of the union men — set up a tent to serve coffee and doughnuts to the strikers.

In the interview, Washburn said some authorities felt the strike violated the court’s injunction.

At 2 a.m. Monday, June 7, 1937, Lansing police pounded on the Washburns’ door to arrest him and his wife, Nevah, but the union leader was on a train back from Detroit. His wife was home with their three young children, all under 10.

Nevah and Lester Washburn. (Courtesy of family)

Nevah was arrested and left her children with a neighbor. Several labor union leaders and their wives were rounded up that night by the Lansing Police Department.

When Washburn returned to Lansing about an hour later and found out his wife was in jail, he hurried to a pay phone — he said police had cut the telephone wire outside their home before serving the warrant for their arrest — and started waking people up.

He gathered with other leaders who had escaped arrest and, within the next few hours, the UAW had declared a Lansing Labor Holiday.

Approximately 15,000 union members would not report to work that day to protest the arrests. The union members and their supporters took to the streets in a parade led by a gravel truck, Washburn recalled in the 1986 interview.

In a 1965 issue of Michigan History magazine, writers Albert A. Blum and Ira Spar described the labor holiday.

“They forced the closing of stores, factories, and theaters; halted all traffic and even picketed police headquarters, the city hall, and the state capitol,” they wrote. “The police force was completely immobilized while the workers paraded in the streets, their numbers growing each minute as more and more workers emerged from the closed stores and factories. Some sang ‘Solidarity Forever’ while others carried clubs, sticks, and two-by-fours. By early afternoon, just about everything that could be closed was closed because of the effective action of Washburn’s ‘flying squadron.’”

A labor strike on June 7, 1937 turned into a series of clashes between union members and Michigan State College students. (Courtesy of MSU archives)

A UAW history from 2024 reports that the “flying squadron” was akin to the Minute Men of the early United States: militant and ready to strike at a moment’s notice. The UAW Local 182 Flying Squadron wore blue and gold overseas caps embroidered with the group’s name, according to Blum and Spar’s 1965 article.

Washburn said union stewards “invited” Lansing merchants to close down, and it was likely the Flying Squadron members who spread the word.

“Some of them may have gotten a little rambunctious,” he said of their invitations. “But there were no complaints or windows broken.”

In the next day’s issue of The State Journal, Washburn would say he had not given permission for union members to expand the holiday beyond Lansing’s borders, but carloads of union men started traveling east on Michigan Avenue into East Lansing and Okemos.

Laurence White’s family had moved to East Lansing from Indiana and his father was an engineer at Oldsmobile. The family lived at 546 Meadowlawn in the Glencairn neighborhood and 10-year-old White had a front row seat to this June battle. He wrote about his experience in 2010.

He said the union men blocked all major street intersections in East Lansing while “small groups of men convinced downtown merchants to lock their doors in honor of this holiday.”

Blum and Spar wrote that restaurant and business owners initially mistook the men for representatives of a veterans group because they still donned their Flying Squadron caps.

“But many Michigan State College students, overhearing the arguments between the unionists and the businessmen, quickly perceived the situation as a challenge to their sovereignty and to their eating places,” they wrote.

White said all the stores along Grand River closed, including the State College Book Store, an operation then run by MSC faculty and under the direction of College President Robert Shaw.

However, in a report to Time Magazine that appeared in the June 14, 1937, edition, Editorial Director Robert D. Burhans of the student newspaper Michigan State News said there was one exception.

“These first 60-odd men closed all stores along the main street with the exception of one,” Burhans wrote, “a pocket in the wall known as Jim Brakeman’s Bootery, [the] ‘smallest shoe store in the world.’ Jim, a 250-lb. former State footballer, does not close under just any order. And the student body likes Jim pretty well.”

A photo of Jim Brakeman from the 1935 Michigan State College yearbook.

Brakeman helped lead the 1934 MSC football team to an 8-1 record and was indeed well loved by MSC and East Lansing.

When the camera store on Grand River reopened, The State Journal reported that it quickly sold out of film as students took countless pictures of the exciting events in their small town.

It was after 4 p.m. when the town’s restaurants and businesses began closing. White remembered that word of the “intrusion” had spread to Demonstration Hall, where Sgt. James Atchison had dismissed his ROTC class.

This group of young men, clad in uniform, were the first students the union men reportedly saw.

Blum and Spar wrote that some of the union men mistook the ROTC students for members of the National Guard because of their uniforms.

According to The State Journal, MSC students of all affiliation began to gather around the traffic light at Abbot Road and Michigan Avenue, with 500 assembling quickly to break the logjam of cars.

The students were now fully in charge of East Lansing.

Reports vary on how violent the altercation became. All sources agree that students began pulling union men from their vehicles. At least one automobile was flipped by students, and between eight and 20 men were thrown into the still-chilly water of the Red Cedar River.

“Egged on by their coed cheering section,” Blum and Spar wrote, “the students struck gently at first by shouting, ‘You may be able to run Lansing and Flint but you can’t run East Lansing,’ but then followed an onslaught of physical force as they charged…The outnumbered unionists stood their ground for a while, but soon began to back away from the staggering student attack. The scholars dragged eight strikers to the Red Cedar River and promptly tossed them into the cold and dirty stream for what one student called ‘a much needed cooling off.’”

The State Journal printed a photo the next day of wet, demoralized union men emerging from the river.

An unnamed alumnus years later told Blum and Spar that the scene resembled “The Battle of Bunker Hill and a Mardi Gras all rolled into one.”

Another student, Gerald Cox of Detroit, spoke on behalf of the students when talking to The State Journal.

“The student body isn’t going to allow the union to come to East Lansing and tell stores and restaurants how they shall run their business,” he said. “The students depend too much on these restaurants and eating places to allow them to close. The union may have the right to organize and carry on their bargaining and otherwise maintain their rights, but other people have rights, too.”

ROTC instructor Sgt. James H. Atchison. (From 1948 MSU Yearbook)

The State Journal’s Tuesday edition reported that students took over the duties of directing traffic, with the “battle sector” extending from the intersection of Grand River and Michigan Avenue opposite the People’s Church westward to Harrison Road as the students pushed the union forces three blocks toward Lansing.

Students held hands to form a human blockade, and several Lansing workers were slightly injured after being pulled from cars and thrown to the pavement.

When the fighters reached the area where Williams Hall was being constructed, fisticuffs again broke out. East Lansing Police Chief Castle Pratt pushed his way between the union men and students in hopes of evoking peace, but intense fighting broke out again.

News reports said both sides were armed with wooden clubs and the short pieces of aforementioned iron from the dormitory construction — but fists remained the primary weapon.

Coincidentally, Gov. Frank Murphy was riding horseback at the MSC stables when the East Lansing battle broke out. He was there when members of the ROTC cavalry arrived and requested use of the horses so they could ride into battle.

The State Journal reported that Murphy declined permission on behalf of the college, remarking that the action was “too Cossack-like,” referring to 15th-century Slavic warriors on horseback.

Murphy himself rode his steed to a hill near the college hospital, located where Gilchrist Hall sits now. He sat on the hill and watched the action.

Michigan State News reported later that week that the bright blue caps worn by the Flying Squadron members were the most coveted souvenirs that MSC students clung to.

“We’re not going to let them close our eating places,” the paper reported students shouting. “There’s not going to be a revolution in East Lansing!”

In his reflections, White wrote that during the height of the battle, rumors flew that the laborers were bringing union members in from Flint’s Chevrolet and Buick plants to act as backup, while MSC fraternities had put in calls to brothers in Ann Arbor to ask for assistance. Neither claim turned out to be true.

He also said allegations persisted that “many union men had to return to Lansing by wading the Red Cedar River.”

Sophomore Harold Conrad Jr. was reportedly the only student warranting a trip to the college hospital after being hit on the head by something akin to a piece of pipe. He was checked out by the staff and released shortly thereafter. Other students had black eyes and bruises, but nothing more serious.

The State Journal borders on the dramatic in its reporting, reading like an early version of a Ken Burns documentary.

“A group of students withdrew from the fighting,” the paper reported, “crossed the street, and then charged into the union forces from the flank and bottled up the UAW men between two student units. Seeing that they were outsmarted, the union men called for a cessation of fighting.”

A crowd runs towards the Red Cedar River during the 1937 Battle of East Lansing. (Courtesy of MSU archives)

Earl Harrington, the union steward at the Oldsmobile plant, addressed the assembled students with a megaphone, asking them to permit the union men to return to Lansing.

“These young fellows don’t realize that we’re trying to make working conditions better for them,” an unnamed departing union member told a reporter for The State Journal. “I’ve youngsters of my own growing up, and I want them to go to college too. I wouldn’t want to see any of these students hurt.”

The students relented but remained on guard.

That night, The State Journal reported that students stood guard over all East Lansing restaurants, waiting for the union men to return. Between 200 and 300 of them held a mass meeting Tuesday morning when rumors circulated that outsiders would return that day to halt the construction projects on campus.

“The only visible signs of Monday’s conflict in East Lansing on Tuesday,” the paper said, “was uprooted grass and trampled shrubbery on the boulevard along West Michigan avenue.”

Later in the week, Michigan State News reported on the happenings as if the MSC student body had conquered Troy.

College President Shaw was allegedly swamped with messages of praise and congratulations from throughout the state, including from members of the Michigan House of Representatives.

“It is indeed refreshing to know,” wrote one lawmaker, “that we have at least one instance of higher learning that is not shot through with communism.”

Another House member wrote, “more power to your American boy.”

A Dearborn pastor simply said, “I am greatly pleased with your students.”

And finally, a Merrill, Michigan, businessman said the incident had helped him decide his daughter’s future.

“There was some doubt in my mind where my daughter would enter college next September,” he said, “but I am sure she is going to M.S.C. where there are red blooded Americans.”

Editorials in the Detroit News and the Detroit Free Press also celebrated the MSC students.

Despite the anti-union rhetoric in the media, legislature and college, labor won the larger battle of the day.

Washburn ended his interview with the news that Capital City Wrecking Company ended the labor holiday by signing a contract that very day to permit the UAW to collectively bargain for its workers. The leader’s wife and the other union representatives were released from jail, and all charges were dropped.

The only legitimate consequence was that Washburn was required to pay a $250 fine for skirting the temporary injunction placed against the union.

Today, the Battle of East Lansing is largely forgotten.

When will someone write its commemorative folk song?

This reporting would not have been possible without the help of Michigan State University Libraries, Michigan State University Archives and Librarian Leah Morin.

The Daily Front Page 26 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — The Federal File
article

Feds Target AI Critics as "Foreign Agents"

by nmeagent·▲ 377 points·422 comments·kenklippenstein.com ↗
the administration declared war on protestors and opponents of AI

Trump admin sees China behind opposition to AI data centers

CCP recruits young, apparently

CCP recruits young, apparently

Anxiety over AI and data centers is widely held, but somehow the Trump administration has convinced itself the public concern was manufactured in China.

This week, in little-noticed remarks by President Trump and Justice Department warning, the administration declared war on protestors and opponents of AI, threatening “criminal liability” if they “further the propaganda or other goals of a foreign power.”

While that sounds like some modern day Tokyo Rose shilling for Beijing, with orders coming in over shortwave radio, the actual targets are just normal people who have no idea they are part of the government’s latest national security mirage.

Last week, the Justice Department instructed “citizens and noncitizens” that anyone furthering the “goals” of a foreign power in “any public activity” — including even “public demonstrations” — must formally notify the government to avoid arrest and prosecution.

DOJ warning

Though they don’t identify any specific protests, it’s not hard to surmise who they’re talking about. Two days prior, President Trump began a spate of social posts declaring that opposition to AI is a traitorous, treasonous conspiracy theory tracing back to China.

“There is a SICK conspiracy going on against AI and Data Centers, and the only one that is happy about it is China,” Trump posted on September 14. “Conspiracy Theorists, Treasonists, Traitors, and Leakers, BEWARE!”

“The people that say AI is going to destroy the World, and that Data Centers are bad for your neighborhood,” Trump also posted, “are Revolutionaries, but Revolutionaries for a Bad and Evil Cause.”

In a third post, he blamed the skepticism of AI on an unnamed foreign country. “The only reason the AI/Data Center outburst is happening is because the United States is leading, by a lot, every other country,” he said

Most recently, on September 10, Trump alluded to using the criminal justice system to go after “BAD” actors in the AI space. “[W]e will also be looking for BAD, and we can do that, very easily, with our already existing Criminal and Civil Justice System,” Trump warned on September 19.

In other words, the president is playing the national security card. And Congress got there first.

In June, Senate Intelligence Committee chairman Tom Cotton (R-AR) asked then-acting Attorney General Todd Blanche to investigate “foreign influence efforts targeting the buildout of American AI infrastructure.” “Alarming reports indicate that a network of foreign actors, led by the Chinese Communist Party (CCP), is attempting to manipulate U.S. policy and public opinion on data centers,” Cotton wrote.

Cotton’s chief exhibit was Neville Roy Singham, a Shanghai-based American tech mogul whose network of left-wing U.S. nonprofits, Cotton claimed, has spent years producing content opposing American AI infrastructure, with the Chinese government as its “ultimate paymaster.” (Readers of this newsletter will recall my report last year in which a homeland security official told me that Singham was being scrutinized under the president’s national security order NSPM-7, explained here.)

"We can't allow any effort by foreign adversaries to extort … and undermine our technological development," Cotton wrote. Complaining that "no entity in the network has been charged under the Foreign Agents Registration Act (FARA)," he asked the Justice Department to "launch a full investigation into these matters."

Cotton letter

Days before Cotton's letter, top Republicans on the House Energy and Commerce Committee, led by Chairman Brett Guthrie (R-KY), raised nearly identical concerns. They asked FBI Director Kash Patel and the White House for a briefing on what they called foreign influence campaigns aimed at blocking American data centers.

“It is critical that this Administration takes any effort to undermine [winning the AI race] — particularly from foreign adversaries — with a great deal of seriousness,” they wrote.

Guthrie said in his own statement: “The fact that Chinese Communist Party-backed entities and other foreign adversaries may be attempting to influence decisions related to American data center infrastructure puts into perspective how serious of a fight we are in.”

House letter

And well before Trump weighed in, a chorus of private figures in his orbit were pushing the same line.

Start with David Sacks, the venture capitalist who served as Trump’s AI czar before stepping down to become co-chair of the President's Council of Advisors on Science and Technology. Sacks has been casting domestic resistance to AI as a gift to Beijing. After a Chinese model topped a coding leaderboard in July, he complained that “America is tying itself in knots: politicians and bureaucrats are banning new data centers … This is how you lose the AI race.” More recently, Sacks warned on Fox News against moves that would “just hand the whole ball game to China.”

Then there’s Kevin O’Leary, the “Shark Tank” investor behind a planned $100 billion data center in Utah. O’Leary, a vocal Trump supporter, has spent the past two years cozying up to the administration. That includes a January 2025 Mar-a-Lago sit-down with the president-elect, and a stretch lobbying Trump officials there in a bid to buy TikTok.

This Spring, O’Leary claimed that hundreds of millions of dollars from China were paying protesters to oppose data centers like his. One group he targeted, the Alliance for a Better Utah, shot back: “The only foreign interest in this data center is Kevin from Canada.”

It gets funnier.

In a June 25 post on X, O’Leary conceded he had “no evidence” that the groups and people he’d named were funded by China, and Fox News aired apologies. Two of the groups have since sued O’Leary and Fox for defamation.

O’Leary’s apology

O’Leary’s apology

Whoops!

Then there are the industry groups, too numerous to list. A representative example: a spokesperson for the pro-AI Innovation Council told the Daily Caller that the anti-data center campaign was "a manufactured op by dark anti-American forces and foreign governments."

All of this rests on the premise that ordinary Americans wouldn’t oppose data centers unless someone in Beijing was pulling the strings. The polling says otherwise.

A Gallup poll conducted in March found that 71 percent of Americans oppose building an AI data center in their area. That’s more than the 53 percent who oppose a local nuclear plant. Nearly half, 48 percent, are strongly opposed, and the opposition crosses party lines, including 63 percent of Republicans. That’s not a fringe. It’s close to a consensus.

Nor is it technophobia. Nearly half of Americans now use AI chatbots, according to a February Pew surveyof more than 5,000 adults. Yet 40 percent said AI will hurt society over the next 20 years, compared with 16 percent who said it will help. What people distrust is how it’s being rolled out: 63 percent said AI is advancing too quickly, 71 percent said it will make their personal information less secure, and 67 percent had little or no confidence in the federal government to regulate it. Pew research last year found that 61 percent want more control over how AI is used in their lives, and about six in ten worry government regulation will be too lax.

In other words, the public wants a say, and it wants at least some controls in place.

The Trump administration’s response: treat opposition to AI and data centers as a counterintelligence matter. It’s not the first time the administration has played the national security card to clear the way for AI.

In June, the Justice Department intervened in an NAACP lawsuit against Elon Musk’s xAI over dozens of gas turbines the company was running without air permits to power a data center it maintained in Tennessee. The department asked a federal judge to throw the case out, arguing that the NAACP “threatens American national, economic, and energy security.”

To make the point, the government filed a sworn declaration from Cameron Stanley, the Pentagon’s chief digital and artificial intelligence officer. Stanley swore to the court that Grok was “a matter of paramount national security.”

The irony of the China puppetry gambit is that the approach is likely to backfire. Well, one of the ironies. Another is Trump warning about “Conspiracy Theorists” while alleging a vast Chinese plot for which his allies have produced virtually no evidence. (Though Kevin O'Leary will have plenty of time to find some during the discovery portion of his defamation suit.)

When people who distrust the government’s handling of AI are told their distrust is traitorous foreign propaganda punishable by jail time, it’s hard to imagine them trusting the government more. It’s easy to imagine them trusting it less, and wondering what the government is so eager to keep them from asking. That’s the downside of playing national security card, and it’s one that Washington never seems to think about.

The Daily Front Page 27 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — Also on the Front Page
The Daily Front Page 28 of 29
Thursday, September 24, 2026 The Daily Front No. #260924 — Colophon

That's the Front for Today

Issue No. #260924 — Thursday, September 24, 2026 — went to press 2026-09-25 at 06:46 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 Thursday, September 24, 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 — 33 model calls and 307k 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:

At a cluttered worktable, a person and a small articulated robotic hand collaborate over a broad glass whiteboard, arranging colored nodes and branching connectors into a software plan. The robot reaches toward a human hand hesitating above a final junction, while two identical phones lie nearby: one freely receives a stream of open-source app packages from a wire basket, and the other sits beneath a transparent cloud-shaped lock, its data visibly sealed away. Loose charging cables bind the objects into one workspace.

Render the cover as a corrupted digital photograph in an unstable, high-contrast white-flash exposure: preserve the human–robot collaboration over the broad glass whiteboard, with colored software-plan nodes and branching connectors, the articulated robotic hand reaching toward the hesitating human hand at the final junction, twin identical phones nearby—one receiving a visible stream of open-source app packages from the wire basket, the other beneath a transparent cloud-lock with data visibly sealed—while loose charging cables bind the whole workspace; apply block-compression fractures, displaced RGB channels, frozen datamosh smears, and a deliberate palette of electric cyan, acid lime, signal magenta, cobalt blue, and stark white with deep near-black shadows.

Absolutely no text, letters, numbers, readable symbols, or logos anywhere in the image. Keep the main image subject primarily below the upper 10% of the composition, where a title may be overlaid; the scene may extend naturally underneath that title area.

Production Ledger

StageModelCallsTokens InTokens Out
extractgpt-5.6-luna 29 179,652 102,366
layoutgpt-5.6-terra 1 19,117 2,204
covergpt-5.6-luna 2 1,734 524
covergpt-image-2.5-flare 1 298 1,372

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. F-Droid 2.0 by daveoc64 — f-droid.org·HN discussion ↗
  2. Two-tier encryption in the UK by ReturnoftheHack — macanorak.com·HN discussion ↗
  3. Early rogue AI agent activity and attempts to hack found on urlquery.net by snikolaev — transluce.org·HN discussion ↗
  4. OpenAI agent hacked Australian government website, PM says by rudy6912 — bbc.com·HN discussion ↗
  5. ArXiv receives multiyear commitments to support it as an independent nonprofit by JohnHammersley — blog.arxiv.org·HN discussion ↗
  6. Ideas on modernizing the open-source desktop by signa11 — lwn.net·HN discussion ↗
  7. Why is the liver so weirdly regenerative? by jbotz — dynomight.substack.com·HN discussion ↗
  8. Making Tailscale Faster by yarapavan — tailscale.com·HN discussion ↗
  9. Show HN: Whiteboard (YC W26) – An open-source IDE for thoughtful software design by sidharthkmenon — github.com·HN discussion ↗
  10. Virtio-nvgpu: Near-native Nvidia GPU access inside a KVM guest by WanjohiRyan — github.com·HN discussion ↗
  11. Fearless SIMD v1.0 by verdagon — linebender.org·HN discussion ↗
  12. Book review: Is parallel programming hard, and, if so, what can you do about it? by ahelwer — ahelwer.ca·HN discussion ↗
  13. Geothermal heat map of US hot springs by armenarmen — soakingsprings.com·HN discussion ↗
  14. Google’s Project Suncatcher to put ML infrastructure in space by xnx — blog.google·HN discussion ↗
  15. Forging 1024-bit RSA signatures in nearly SNFS time [pdf] by int0x29 — eprint.iacr.org·HN discussion ↗
  16. Using LLMs to trace alchemical knowledge and decode 17th century letters by benbreen — resobscura.substack.com·HN discussion ↗
  17. Toyota is taking the Corolla electric by cisc — electrek.co·HN discussion ↗
  18. My weird new hobby: Wandering around Tokyo on Google Maps by ahmedhossamdev — ahmedhossamdev.com·HN discussion ↗
  19. The "Windows XP Box" (2003) by doubletwoyou — mini-itx.com·HN discussion ↗
  20. Nokia Design Archive (2025) by pillars — repo.aalto.fi·HN discussion ↗
  21. Show HN: Make cursed fonts like Times New Bastard by MitPitt — bastardica.mitpit.com·HN discussion ↗
  22. WaveDigger: Dig into wireless signals to discover their physical locations by 882542F3884314B — github.com·HN discussion ↗
  23. Why 'What's Opera, Doc?' looks like that by CharlesW — animationobsessive.substack.com·HN discussion ↗
  24. The forgotten battle of East Lansing by rmason — eastlansinginfo.news·HN discussion ↗
  25. Feds Target AI Critics as "Foreign Agents" by nmeagent — kenklippenstein.com·HN discussion ↗
  26. Linux support is coming to Snapdragon X2 series by aaronday — qualcomm.com·HN discussion ↗
  27. Meta VR Glasses by polymorph1sm — meta.com·HN discussion ↗
  28. Meta takes down a critical video about meta AI Glasses after filming at Meta by pieterr — reddit.com·HN discussion ↗
  29. Rails World 2026 Opening Keynote [video] by an0malous — youtube.com·HN discussion ↗
  30. Contrastive Language Models by erichocean — contrastive-lm.notion.site·HN discussion ↗

Browse all issues in the archive →