DPI and the Homeless Workers Movement in Brazil

Internet Exchange
internet.exchangepoint.tech
2026-10-15 11:03:50
Concrete possibilities for broader governance and popular participation....
Original Article
technology for society

Concrete possibilities for broader governance and popular participation.

DPI and the Homeless Workers Movement in Brazil
Photo by Cyndel Cardoso / Unsplash

By Alexandre Costa Barbosa . Originally published on irl.works .

In recent years, alongside India, Brazil has consolidated itself as a global protagonist in the field of Digital Public Infrastructures (DPI). Pix, launched in 2020 by the Brazilian Central Bank (BCB), reached around 170 million users, becoming the main payment system in the country. A similar number of people use GOV.br , the digital government and identification scheme that integrates over 4,600 digital services. Unlike the Indian governance arrangement, which can accord varying roles to the state (e.g., Aadhaar is backed by the government as a provider, while the Unified Payments Interface (UPI) is owned by commercial banks, hence the government is just an enabler), the Brazilian context is often cited in international fora as an example of how governments may provide scalable, free of charge, and inclusive DPI.

Nonetheless, a structural contradiction lies behind that recognition. Although Brazil leads the development and adoption of DPI, these systems are still primarily governed through technocratic instances. Individuals and organized social movements do not have a seat in decisions on the design, development, and maintenance of major DPI. Pix is regulated by the BCB with indirect participation of private financial companies and consumer protection non-profit organizations in the Pix Forum, but those spaces are quite opaque, with very limited visibility to broader society. Similarly, GOV.br is controlled by the Ministry of Management and Innovation in Public Services, partnered with state IT company Serpro, without binding instances of popular participation.

This gap is not a minor issue. On the contrary, as Governance, Openness and Security of Digital Public Infrastructure in India by the internet Research Lab (hereafter, the “GOSDPI paper”) demonstrates through the Indian model (Aadhaar, UPI, FASTag, etc.), the lack of sufficient public governance is not an accident but a structural feature that enables private appropriation and data misuse. As the GOSDPI paper documents, this was exemplified by how the National Payments Corporation of India, the entity in charge of 80 percent of digital payments in India, argues that it does not function as a state institution, hence avoiding transparency and access to information. Brazil has not reached that situation yet, precisely because only systems operated by the state are considered DPI. The risk, however, lies in rigid vertical structures and in the privatization legacy, if there is no structured social control over these systems. There is an urgent need to reflect upon how to build broader democratic governance in DPI already massively adopted.

MTST as a bottom-up laboratory

It is within this context that the Homeless Workers Movement (MTST) gains relevance. Founded on the accumulated experience of the Landless Rural Workers Movement (MST), but focused on urban contexts, the MTST has been fighting for and organizing workers whose labor relations are not covered by traditional unionism. Their main form of struggle is the occupation of land that does not fulfill a social function in urban centers, especially in the peripheries of large metropolises. The MTST is a popular, urban movement fighting for housing, but it is also more than that.

Since 2020, differently from a purely claim-making approach, the MTST started to build its own digital infrastructures . There are several examples, among them the Victory App, which allows the organization of the movement and communication among members, and Hire Those Who Struggle (Contrate Quem Luta), a WhatsApp-based tool that connects workers from the movement with supporters who want to hire services such as cleaning and construction. All initiatives were built through the movement’s own resources, governed through assemblies, and oriented towards a common social goal rather than profit.

The movement has also been articulating a coalition for popular digital sovereignty with other social organizations, such as the MST, the World Women’s March, and the Brazilian Network for Digital Sovereignty, thus having the power to bring solid representation to broader debates. It is worth mentioning that the MTST already works as an external auditor for Brazil’s electronic voting machines and has developed digital participation tools for electoral campaigns with inclusive and accessible interfaces.

The MTST’s Tech Sector demonstrates, in practice, that it is possible to build digital infrastructure through communitarian governance , transparent and guided by social justice values. However, without the economic strength and organizational power of the state, popular movements cannot compete with Big Tech and the governments at the core of capitalism. That is precisely why the relationship between bottom-up experiments and state-led DPI must be rethought.

Brasil Participativo as digital public infrastructure for participation

Beyond Pix and GOV.br , there are other digital public infrastructures taking shape in Brazil. One of them is Brasil Participativo (Participatory Brazil), which allows citizens to contribute to making public policies. Originally launched for the elaboration of the Participatory Multi-Year Plan (PPA) 2024-2027 , Brasil Participativo reached about 1.4 million users, proving to be technically viable and socially appealing. However, its first version was for a one-time consultation, without binding power and subject to being discontinued by a future government.

Brasil Participativo (BP) was developed using a digital public good, the free software Decidim , allowing anyone to access the code and propose eventual changes. Yet in practice, no one beyond the laboratory responsible for development has contributed to the system. Moreover, like other mainstream DPI in the Global South, BP runs on cloud infrastructure from major Big Tech companies (the Achilles heel of DPI). Beyond a direct channel with society, Brasil Participativo can also be thought of transversally across other DPIs. That is, using Brasil Participativo as a cross-cutting governance axis, connecting civil society to different sectoral forums. The same citizen, authenticated through the digital ID GOV.br , could contribute proposals to the Pix Forum (the participatory instance of the instant payment system), and participate in consultations regarding digital policies and governance more broadly, such as the National Strategy for Digital Government.

That means making BP a structural and permanent layer of the Brazilian state. Moreover, in late 2025, one of the major leaders of the MTST became the Secretary-General of the Presidency of the Republic, the ministry in charge of the digital participation agenda. This institutional bridge opens unprecedented possibilities for convergence.

The state-society convergence and political risks

The federal government took an important step in April 2026 when it released the results of the public consultation for the elaboration of the Brazilian Digital Transformation Strategy . The government expected to gather diffuse contributions, precisely through BP. The result, however, was surprisingly convergent. Among multiple stakeholders (academia, the private sector, civil society organizations, and ordinary citizens), the points of greatest consensus were the demand for digital sovereignty based on Digital Public Infrastructures and the need to guarantee popular participation in governance processes, thus democratic alternatives to digital sovereignty. In other words, when the government opens listening channels, society responds clearly. The public consultation thus creates a legitimate mandate for the construction of participatory mechanisms. And it is exactly at this point that Brasil Participativo can become a key DPI that enables democratic control and avoids capture by large foreign providers.

However, there is a clear political risk. The elections of 2026 could bring a change in government that decides to discontinue or weaken Brasil Participativo, as has happened with other participatory tools in the past. To ensure its survival beyond electoral cycles, it is essential to structure effective participation from multiple actors that create distributed ownership and shared responsibility. That means involving municipalities that can adopt and adapt the platform for local participatory budgets, implementing companies that provide sustainable technical support, the developer and civic tech community that contributes to coding and auditing, and academia that produces evidence-based improvements and monitors outcomes. Without this multi-layered ecosystem, Brasil Participativo remains dependent on the political will of a single federal administration, which is a fragile foundation for any digital public infrastructure.

Concrete mechanisms can still be pursued. DPIs can be designed or altered to guarantee binding seats on governance councils for representatives of popular movements and union federations. Ideally, though not very probable in the short term, these organizations would have veto power over changes that undermine fundamental rights. The introduction of new features in major and sectoral DPIs could be qualified through Brasil Participativo, making it an obligation for the institutions in charge to hold participatory processes, even on highly technical subjects. Furthermore, social movements could be formally recognized as auditing bodies, receiving public funding to conduct independent inclusion, security, and privacy audits.

Finally, to broaden the "public" aspect of DPI, they could be developed with community modules that are not controlled entirely by the state. Pix and GOV.br could consider adopting open modules that would enable faster adoption and bottom-up development of solutions, hence increasing capillarity and efficiency for those acting in the territories, such as the MTST.

The central question is not whether popular movements like the MTST can participate in DPI governance, but under what conditions that participation becomes possible and sustainable. The MTST has already shown representativeness, organizational capacity, and hands-on experience with digital technology, from internal apps to external audits of electoral systems. What is missing is an institutional architecture that articulates state and society without subordinating one to the other. Brasil Participativo, if anchored in a distributed ecosystem of municipalities, civic tech communities, implementers, and academia, can become that permanent bridge.

Therefore, a genuine digital public infrastructure for social participation would not treat popular movements as mere consultants or beneficiaries. It would recognize them as legitimate co-governors, precisely because they bring territorial roots, democratic practice, and a proven ability to build technology from below. The risk of political discontinuity after 2026 is real, but so is the opportunity to lock in a participatory model that no future government can easily dismantle. That is the concrete horizon for DPI and the MTST: one that promotes public-popular partnerships instead of public-private ones; and does not deny the material dimension of infrastructure in general.

Alexandre is currently a coordinator of digital participation at the General Secretariat of the Presidency of Brazil, PhD candidate in design of DPI at UdK Berlin-Weizenbaum and member of the Homeless Workers Movement Tech Sector.


Mallory Knodel Named Chicago Council Fellow

IX’s Mallory Knodel has joined the Chicago Council on Global Affairs as a senior nonresident fellow on technology and governance. She is one of four new fellows appointed by the Council, a nonpartisan nonprofit that publishes research and hosts discussions on global affairs. In the role, Knodel will contribute to the Council’s research, programming and analysis on how technology affects power, security and human rights around the world.

Want to appear here? Sponsor a newsletter.

Support the Internet Exchange

If you find our emails useful, consider becoming a paid subscriber! You'll get access to our members-only Signal community where we share ideas, discuss upcoming topics, and exchange links. Paid subscribers can also leave comments on posts and enjoy a warm, fuzzy feeling.

Not ready for a long-term commitment? You can always leave us a tip .

Become A Paid Subscriber

🚨

Stop press! Do you enjoy our links? Links are now available to paid subscribers only. Become a paid subscriber today.

How They Got Duo Support in NetNewsWire

Daring Fireball
netnewswire.blog
2026-10-16 16:53:42
From the NetNewsWire blog: The latest version of NetNewsWire for iOS supports iPhone Duo, which is very much a novel iPhone with toolbars running up the side and all kinds of behavior. How we did it: we didn’t do any work at all. We built the app using Xcode 27.1 and the default iOS SDK that co...
Original Article

The latest version of NetNewsWire for iOS supports iPhone Duo, which is very much a novel iPhone with toolbars running up the side and all kinds of behavior.

How we did it: we didn’t do any work at all. We built the app using Xcode 27.1 and the default iOS SDK that comes with it, and that’s it.

Here’s the thing, though: we were already using standard controls — toolbars, navigation controllers, split views, etc. — and we were paying attention to size classes and such (as opposed to just looking at device type).

There is a good list of reasons to use standard controls in the standard ways, and near the top of that list is to be ready for these kinds of days, so we’re not bogged down for a month or more trying to adapt to big changes like this.

Here’s a secret: Brent didn’t even run this in the Duo simulator before releasing it. We were ready to not claim Duo support and just handle Duo in the next release. But here it is.

PS Of course there may be edge cases and issues in our Duo support we haven’t caught yet. We stand by, as always, ready to field and fix bugs.

PPS Thank you to all the engineers, designers, and testers at Apple who made this work so easily! Again, we didn’t do anything but build with the new SDK. Their achievement is pretty remarkable.

There's never been a better time to go into math

Lobsters
www.youtube.com
2026-10-16 16:49:12
Comments...

Steinar H. Gunderson: Decompilation patterns, part 13: Reverse loop

PlanetDebian
blog.sesse.net
2026-10-16 16:45:25
Anyone who's read “bro-coder” C from before that was a name will recognize this idiom: var_t1_2 = 0x7F; ... do { ... var_t1_2 -= 1; } while (var_t1_2 >= 0); Why does the loop count backwards? It's because comparison with zero is cheaper on some (many) platforms....
Original Article

Anyone who's read “bro-coder” C from before that was a name will recognize this idiom:

    var_t1_2 = 0x7F;
    ...
    do {
        ...
        var_t1_2 -= 1;
    } while (var_t1_2 >= 0);

Why does the loop count backwards? It's because comparison with zero is cheaper on some (many) platforms. Some people would reverse the loop manually, but compilers quickly managed to do that themselves. So you want:

   for (i = 0; i < 0x80; ++i) {
      ...
   }

and tomorrow, we'll have a look at what's inside the loop as well.

The NIST Elliptic Curves Seeds Bounty Has Been Claimed

Lobsters
words.filippo.io
2026-10-16 16:18:36
Comments...
Original Article

We now know how the seeds of the NIST elliptic curves were generated: they’re not the hash of some saucy sentence, but the output of drand48 seeded with the time, which was indeed in 1997–98.

John Wood, Henry de Valence, Ava Howell, Zack Voase, Lucy Sweet, Amir Omidi, Paul Crowley, Iain McGinniss, Nicholas Carlini, and Steve Weis from Anthropic solved the riddle and on October 15th, 2026, at 01:07:51 UTC, claimed the full bounty I announced three years ago . They chose to donate the prize to ISRG , the non-profit that operates Let’s Encrypt, tripling its value to $36,864 (36 Ki$). Thank you to Amir Omidi, Chris Palmer, Colm MacCárthaigh, David Adrian, David Anderson, Jeff Hodges, Matt Green, Matthew McPherrin, Paul Kehrer, Ryan Sleevi, and Soatok for contributing to the bounty.

This helps fill out a page of cryptographic history, and reinforces our confidence in these critical cryptographic primitives.

The NIST elliptic curves (P-192, P-224, P-256, P-384, and P-521) were published by NIST in FIPS 186-2 in 2000. They were generated at random according to ANSI X9.62 by taking an arbitrary seed, hashing it with SHA-1, and using the output to derive some of the parameters. Until this week, we had no idea how those arbitrary seeds were picked.

The lore was that Dr. Jerry Solinas, who passed away in early 2023, generated them in 1997 by hashing some English sentences that he later forgot. You can read more in this article by Steve Weis or in the original bounty announcement .

Turns out memory can play tricks on everyone: we now know they were instead generated with the POSIX-standard drand48 random number generator.

The algorithm is as simple as passing the then-current UNIX timestamp to srand48() and then producing one byte at a time with drand48. Each sequence of 20 bytes is tried as a seed following ANSI X9.62 and rejected if the resulting curve is not valid. Some timestamps are used to generate multiple curves, by continuing to try seeds after accepting the first one. I reimplemented the algorithm in Go to verify the claim. Read more in Anthropic’s writeup .

There are two additional undocumented criteria beyond the ANSI X9.62 ones, one fairly clear and one that still escapes us.

If the bit length of the order n of the resulting curve is more than the bit length of the base field p of the curve, the seed is rejected. (The condition is not the stricter n < p , because prime239v2 has p < n < 2²³⁹.)

This leaves us with roughly twice as many valid seeds as were published. We explored a number of explanations for this last bit, and found no good fit. Maybe the same RNG was used to validate seeds, consuming RNG output and skipping some potential candidates, although the “gaps” are not regular. Maybe there was just a bug in one of the algorithms that returned the wrong result half the time; these calculations, which we can now do with off-the-shelf software in minutes, were still very much state-of-the-art in 1997.

srand48(863711343) [1997-05-15 15:49:03 +0000 UTC]:
  accepted   36th seed 25e5[...]: not published
  accepted 1562nd seed d09b[...]: not published
  accepted 2185th seed e43b[...]: prime239v1
  accepted 2320th seed e8b4[...]: prime239v2
  accepted 2491st seed 1256[...]: not published
  accepted 2682nd seed d2c1[...]: not published
  accepted 2863rd seed 3a70[...]: not published
  accepted 3048th seed 7d73[...]: prime239v3
srand48(863966734) [1997-05-18 14:45:34 +0000 UTC]:
  accepted  139th seed 3045[...]: P-192 a.k.a. prime192v1
  accepted 2198th seed 692d[...]: not published
  accepted 5228th seed c469[...]: prime192v3
  accepted 5405th seed 3ad1[...]: not published
  accepted 6013th seed 31a9[...]: prime192v2
srand48(871002724) [1997-08-08 01:12:04 +0000 UTC]:
  accepted 1136th seed d09e[...]: P-521
srand48(871696354) [1997-08-16 01:52:34 +0000 UTC]:
  accepted  876th seed 50c7[...]: not published
  accepted 1842nd seed c49d[...]: P-256 a.k.a. prime256v1
srand48(872952608) [1997-08-30 14:50:08 +0000 UTC]:
  accepted 2688th seed a335[...]: P-384
srand48(891607927) [1998-04-03 12:52:07 +0000 UTC]:
  accepted  777th seed d007[...]: not published
  accepted 1485th seed 18cf[...]: not published
  accepted 5736th seed 3c17[...]: not published
  accepted 7026th seed bd71[...]: P-224

What does this mean for the security of elliptic curve cryptography based on the NIST curves? Well, even before this discovery there were no serious concerns among practitioners. In Section 3.1 of their 2015 paper “A riddle wrapped in an enigma,” Koblitz and Menezes make a convincing argument that it’s implausible that the NSA could have selected a seed to exploit a weakness that escaped more than 15 (now 25) years of cryptanalysis.

However, as reported in a later version of that paper, Daniel Bernstein and Tanja Lange described to Koblitz and Menezes in 2017 a technique that could have exploited 70 bits of freedom in selection of the seed to target a hypothetical class of 2⁶¹ weak prime-order curves. (Bernstein is the author of a competing elliptic curve design, Curve25519.) This contributed to enduring conspiracy theories, which had significant appeal among the non-specialist public (although many have since moved on to other, adjacent, conspiracy theories). All this speculation harmed confidence in robust cryptographic systems and was part of my motivation for the bounty.

This week’s findings completely rule out the technique described by Bernstein and Lange. Even if the NSA had been free to pick any timestamp in 1997–98 and any of the first 16 prime-order candidates (which generously accounts for the unexplained rejections), they would have had barely 30 bits of freedom. Not enough to intentionally target a hypothetical small class of weak curves, not enough to embed any kind of NOBUS backdoor.

Along with deterministic and hedged ECDSA signing algorithms, formally verified field implementations , and the 2015 complete addition formulas by Renes, Costello, and Batina , this nicely completes the “rehabilitation arc” of NIST elliptic curve cryptography, which I would now personally recommend over Curve25519/Ed25519/X25519.

Just in time for them to be retired in favor of post-quantum signatures.

P.S. The Anthropic team also figured out how the seeds of the NIST B-curves (the ones over binary fields) were generated, but no one uses those, so who cares.

The picture

In a FamilyMart in Taiwan I found this delightful dice set. A full roll carries log₂(6²⁰) ≈ 51.7 bits of entropy. Rolling them twice can make a pretty robust cryptographic key!

I thought it would be funny to label them as Geomys FIPS 140-3 Entropy Sources (which of course they are not, though we do have one of those) and hand them out as swag. However, I found no way to order them online, so I simply visited over a dozen FamilyMarts and brought home 50 packs.

A set of 20 small dice in the evening light. They are white with red and black etchings. A small clear plastic box is next to them.

Speaking of swag, I am 100% making stickers with the srand48() seeds, and t-shirts for the Anthropic team and the contributors to the bounty. I accept suggestions for other seed-based swag. If you want to catch some, follow me on Bluesky at @filippo.abyssdomain.expert or on Mastodon at @filippo@abyssdomain.expert .

The Law Can't Silence These East Village Residents Hanging 'Pete Hegshit' Signs

hellgate
hellgatenyc.com
2026-10-16 16:14:59
The Department of Buildings ticketed a prolific sign maker on St. Marks Place, but backed down after a Hell Gate inquiry....
Original Article

In early 2020, Manny Verdi's neighbor began hanging signs on the residential building Verdi owns on St. Mark's Place in the East Village.

The first sign, Verdi said, was of a school of tiny fish swallowing one large fish with the call to "organize!" Since then, he's helped her swap out her handmade cardboard signs every few weeks.

"There's signs about the Supreme Court, there's signs about Trump—there has to be at least 50 signs since she started putting them up," Verdi told Hell Gate of his neighbor, the signmaker, who asked to remain anonymous.

But in late September, Verdi received a summons from an inspector for the Department of Buildings, who had taken issue with the sign du jour: "Hey Congress If You're There Blink Twice" with big googly eyes.

Give us your email to read the full story

Sign up now for our free newsletters.

Sign up

★ Real Artists Ship, Tesla Edition

Daring Fireball
daringfireball.net
2026-10-16 16:11:23
If you think Musk is either completely legitimate and trustworthy or an utter fraud, you are wrong. He has led his companies to extraordinary accomplishments, *and* he has made promises based on complete bullshit. He is a shameless bullshitter who *sometimes* delivers....
Original Article

Jonathan Gitlin, writing for Ars Technica :

Nine years after first trying to resurrect the Roadster , Tesla is apparently trying again. CEO Elon Musk might have relocated its HQ to Texas, but yet again he has returned to California’s showbiz industry to hawk his wares; last time it was a Hollywood back lot for the remote-controlled Cybercab demo , last night it was decades-old stunt technology to make a show car do tricks in the air. [...]

Musk claims that the Roadster will go into production by 2028. But the CEO has a long and glorious history of overpromising and underdelivering; in 2017 he told attendees at the previous launch that “We are making it now.” Using the company’s referral program, some people were in line to receive two free cars. But those free cars never showed up, and neither did the ones that people put down $50,000 deposits for; last year Sam Altman discovered how hard it can be to get that money back .

I like a good stunt show as much as the next guy, and this looked like a cool stunt show. But people are losing their minds if they think this stunt show makes it any more or less likely that Tesla will deliver a Roadster as promised. This Reuters story makes it sound like they think Tesla is going to sell cars that do this stuff. Last night’s stunt show has no more bearing on actual production cars Tesla may or may not ship than George Lucas’s Star Wars movie had on Ronald Reagan’s “Star Wars” missile defense system .

The Tesla Roadster is vaporware. But Elon Musk is very good at distracting from unshipped vaporware by delivering on stunts. Two years ago it was robots that were totally faked . Last night’s car stunt involved real things that actually happened but only in the way that David Copperfield made the Statue of Liberty “disappear” .

Over at Jalopnik, Amber DaSilva has another good take , which concludes:

Tesla has long made up specs for its cars, made wild claims that weren’t substantiated by users, and now it’s making more big impressive claims. The “cars” used for the demos were likely nothing more than shells outfitted with exactly enough equipment to make the tests work. The 0.81 second zero-to-60 number wasn’t even shown with an on-screen timer during the event, let alone independently verified. Tesla has yet to prove anything about the new Roadster works in the real world, or could even exist within the realm of physics that those of us not named Musk occupy.

Roadster preorders have reopened, with the company once again taking $50,000 checks to reserve a car that’ll theoretically be made two years from now. It hasn’t yet said what will happen to the people who placed a reservation for the car Tesla announced nine years ago, which looks and functions completely differently to the one that bears its name today. And — arguably most concerning — we don’t know, if Tesla rakes in more money off the Roadster name, just how much will go to some malicious end .

And on Threads, Benedict Evans reiterates his longstanding take on what makes Elon Musk so confounding to so many people :

A long time ago, I described Elon Musk as a bullshitter who delivers. This is the perfect expression of that. This car was first shown a decade ago, with another stunt, and it never shipped. Now there’s another stunt, and another huge wave of PR and admiration.

But meanwhile, there’s the scaled car company, and the self-landing rockets!

Henry Ford was a brilliant industrialist, a terrible manager and a racist piece of shit. Several things can be true at once.

If you think Musk is either completely legitimate and trustworthy or an utter fraud, you are wrong. He has led his companies to extraordinary accomplishments, and he has made promises based on complete bullshit. He is a shameless bullshitter who sometimes delivers. The sometimes is implicit in Evans’s take, because if he always delivered, there’d be no bullshit. But I think it’s worth including the sometimes to make the point. And some of the things he’s delivered are so amazing that they sure sounded like they might be bullshit when they were announced. “Space internet” sounded like total bullshit when Musk announced it in 2015, but it started rolling out in 2020 , and today you can just buy it at Best Buy for $350 .

Tesla makes some tremendous vehicles. Their self-driving technology is the best in the consumer market. (Not as good as Waymo’s, but you can’t buy a Waymo.) So maybe they will ship a great Roadster in 2028. I’ll pay attention if and when they do. But I wouldn’t bet a nickel that they will. And I wouldn’t bet that they won’t, either.

Critical BlockStrap flaw lets hackers run code on Magento servers

Bleeping Computer
www.bleepingcomputer.com
2026-10-16 16:00:59
Researchers warn that hackers could soon exploit a maximum-severity vulnerability (CVE-2026-103849) affecting Magento and Adobe Commerce, potentially allowing them to execute arbitrary PHP code on store servers. [...]...
Original Article

Critical BlockStrap flaw lets hackers run code on Magento servers

Researchers warn that hackers could soon exploit a maximum-severity vulnerability (CVE-2026-103849) affecting Magento and Adobe Commerce, potentially allowing them to execute arbitrary PHP code on store servers.

According to e-commerce security firm Sansec, attacks leveraging the vulnerability, dubbed BlockStrap, have not yet been observed, but threat actors are expected to find a way to exploit it.

The researchers based their assessment on identifying four potential attack paths involving CVE-2026-103849 in less than 24 hours.

The flaw impacts September versions of Adobe Commerce and Magento Open Source through 2.4.9 and Adobe Commerce B2B through 1.5.3.

The security firm warned that Adobe’s “priority 2” rating of this flaw does not reflect the danger and urgency in this case, despite the more complex attack path.

“The attack path is complex, but anyone with an AI agent can reverse-engineer the patch into working exploits in a relatively short time,” stated Sansec states .

“That is why we question Adobe's priority 2 rating (patch within 30 days). StyleSmuggler went from a priority 1 hotfix to mass exploitation in three days, and BlockStrap is of similar complexity.”

Adobe’s bulletin , published on October 13, describes the flaw as an improper neutralization of special elements used in a template engine, leading to arbitrary code execution.

Sansec explains that BlockStrap is a second-pass template engine directive injection that allows attacker-controlled content in a child email template to be signed and processed again at the root level, executing a smuggled {{block}} directive.

According to Sansec’s analysis, BlockStrap exposes a gap left by the StyleSmuggler fix in the same email-template engine.

Adobe’s fix replaces the generic processing with registered placeholders, preventing exploitation.

Sansec says that a plain Composer install isn’t enough to address the risk, and website administrators must apply the 2026-oct release or Adobe’s isolated patch.

“BlockStrap and StyleSmuggler are separate fixes. You need both, so keep the September VULN-39341 hotfix in place as well,” Sansec cautions.

The e-commerce security company says it will provide an update when it detects mass attack waves, which it expects to occur soon.

article image

Once attackers have valid credentials, only 37% of their actions are blocked

Overall prevention scores can hide what happens after initial access. Once attackers are using valid credentials, prevention drops sharply.

The Blue Report 2026 measures defenses technique by technique across 338 million simulations run in customer production environments.

Get the report

Dirk Eddelbuettel: RcppSimdJson 0.1.17 on CRAN: Updates

PlanetDebian
dirk.eddelbuettel.com
2026-10-16 15:56:00
A brand new release 0.1.17 of the RcppSimdJson package is now on CRAN, and has been built for r2u and on r-universe. RcppSimdJson wraps the fantastic and genuinely impressive simdjson library by Daniel Lemire and collaborators. Via very clever algorithmic engineering to obtain largely branch-free co...
Original Article

RcppSimdJson 0.1.17 on CRAN: Updates

A brand new release 0.1.17 of the RcppSimdJson package is now on CRAN , and has been built for r2u and on r-universe .

RcppSimdJson wraps the fantastic and genuinely impressive simdjson library by Daniel Lemire and collaborators. Via very clever algorithmic engineering to obtain largely branch-free code, coupled with modern C++ and newer compiler instructions, it results in parsing gigabytes of JSON parsed per second which is quite mindboggling. The best-case performance is ‘faster than CPU speed’ as use of parallel SIMD instructions and careful branch avoidance can lead to less than one cpu cycle per byte parsed; see the video of the talk by Daniel Lemire at QCon .

This release is a small increment relative to the 0.1.6 release last week that got us (upstream) version 5.0.2 with many notable changes and sizeable speed gains on all fronts, including the interface from R. However, this failed to compile at CRAN on macOS x86_64 as the machine is setup for only partial support of C++20: no ranges, no concepts. So we now test, and fall back to C++17 if the test compilation fails. Upstream, meanwhile, already got to 5.0.5 which is included. It also gets us improved handling of disabling pragmas which we hope will survive CRAN checks.

The brief NEWS entry for this release follows.

Changes in version 0.1.17 [unreleased] (2026-10-xx)

  • Compilation starts with a C++20 feature test; if this fails C++17 is used (Dirk in #111 fixing #110 )

  • simdjson was upgraded to version 5.0.5 (Daniel in #112 )

Courtesy of my CRANberries , there is also a diffstat report for this release . For questions, suggestions, or issues please use the issue tracker at the GitHub repo .

This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can now sponsor me at GitHub .

/code/rcpp | permanent link

Flux 3 Image Klein: open weights, 5.6B parameters

Hacker News
bfl.ai
2026-10-16 15:47:13
Comments...
Original Article

Today we are releasing FLUX 3 Image Klein, a 5.6B parameter open weights model for text-to-image generation, image editing and multi-reference generation with up to 10 reference images. It shares core capabilities with the full FLUX 3 Image model: native 4K generation, pixel-perfect editing, and bounding boxes that control where elements are placed or confine edits to a defined area.

FLUX 3 Image Klein builds on FLUX 3's shared learnings across images, video and audio. Images contribute spatial detail, video adds motion and physical dynamics, and audio provides information about events and interactions. Together, these signals help the model generate images that feel grounded in the real world.

The release includes a base model for fine-tuning and a step distilled model for low-latency generation, along with FP8, INT8 and NVFP4 builds developed with NVIDIA support, under the FLUX Kommunity License.

Try it in the BFL API · Download the weights

Collage of FLUX 3 Image Klein outputs: illustration, portraits, photography, anime, a stamp design and typography.

Leading open weights quality with fewer parameters

In internal evaluations, FLUX 3 Image Klein ranks first in text-to-image, multi-reference generation and image editing, ahead of larger open weights models. It also rates above the closed models in the comparison, Ideogram V4.5 and FLUX.2 [pro]. At 5.6B parameters, it is the smallest open model in the comparison, against 7B for Qwen-Image 2.1 and 12.9B for Krea 2. Compared with FLUX.2 [klein] 9B, it gains 91 Elo in text-to-image and 70 in image editing, with 38% fewer parameters.

Elo rating vs. generator parameters for text to image and image editing. FLUX 3 Image Klein leads at 5.6B parameters.

FLUX 3 Image Klein was also optimized for consumer GPUs. Fewer parameters make it practical to run locally and cheaper to adapt, and teams with data sovereignty or local deployment requirements can evaluate and adapt the model on their own infrastructure. This is also key for on-device image editing, allowing consumers to edit images directly on their favorite laptops. The generator weights require 11.2 GB in BF16 and 5.6 GB in FP8. With the INT8 build, FLUX 3 Image Klein runs on NVIDIA GeForce RTX GPUs with as little as 8GB of VRAM, through ComfyUI or Diffusers, extending what FLUX.2 [klein] started to even smaller hardware. With the distilled model and the INT8 build, it generates a 1MP image in about 4 seconds on an NVIDIA GeForce RTX 5090 and under 9 seconds on an RTX 4070 through ComfyUI.

Generation time by GPU for the step-distilled model, 16 steps: 0.55 s on GB300 to 8.9 s on RTX 4070 for 1024×1024 text-to-image.
Generation time by GPU: Step-distilled model, 16 steps. Seconds per image, one image per run. Lower is better. Measured by NVIDIA; RTX results in ComfyUI; data results are the best-performing framework for each configuration. Each GPU shows its quickest build. Generation time on the GPU itself; API latency in Section 02 also includes queueing, network and prompt upsampling.
Generation time by GPU for the base model, 50 steps: 1.7 s on GB300 and DGX Station to 43.8 s on DGX Spark for 1024×1024 text-to-image.
Generation time by GPU: Base model, 50 steps. Seconds per image, one image per run. Lower is better. Measured by NVIDIA; RTX results in ComfyUI. Each GPU shows its quickest build.

The base checkpoint is built for fine-tuning: Diffusers and Ostris's AI Toolkit support LoRA training from day one, and NVIDIA's NeMo AutoModel ships recipes that work directly from the released checkpoints.

For even faster production workloads that need lower latency, we also work with teams on specific customizations that get you there. Get in touch .

On the speed–quality frontier

FLUX 3 Image Klein also extends the speed–quality Pareto frontier. Through the BFL API, it delivers lower latency than Qwen-Image 2.1, FLUX.2 [pro], Ideogram V4.5 and Krea 2, and the highest rating at its latency and above. In the charts below, the violet line traces the highest rating available at each latency and the gray line shows the previous frontier.

Latency is measured end to end, from request submission to the finished 1 MP image, including queueing. FLUX 3 Image Klein was timed on our servers. Other models were timed from the client, which includes polling and network time. Krea 2 was timed on its Medium tier; its Large tier took 31.1 seconds for text-to-image.

Elo rating vs. median API latency at 1 MP. FLUX 3 Image Klein is fastest among top-rated models: 4.54 s text to image, 7.18 s editing.

Get started

FLUX 3 Image Klein is available today as open weights and through the BFL API .

Try it

  • BFL API: the distilled model is available as flux-3-image-klein, with prompt upsampling and pixel restoration, which preserves unedited regions of an image exactly. Pricing starts at $0.009 per 1K image.
  • Playground or Hugging Face .

Build with it

License

The weights are available under the FLUX Kommunity License, which allows free commercial use for individuals and companies with annual revenue under $5M, alongside research and non-commercial use. Larger organizations can deploy commercially through our self-hosted licensing options or API.

Safety

In an effort to make AI technology both open and safe, we implement multiple safeguards throughout the model development lifecycle to combat misuse. These include dataset filters during pre-training to limit exposure to harmful content, and targeted fine-tuning during post-training to suppress harmful behaviors, making it progressively harder to elicit harmful content. Ahead of the release, the FLUX 3 Image Klein checkpoints were rigorously red teamed internally and evaluated by our external safety partner Cinder, demonstrating substantially fewer vulnerabilities than other popular open weights models. More on our safety methodology is available here .

FLUX 3 Image Klein is the second open weights release from the FLUX 3 family, following FLUX 3 Action. More will follow.

Learn more

Citation

If you use FLUX 3 Image Klein in your work, please cite:

@misc{bfl2026flux3imageklein,
  author       = {{Black Forest Labs}},
  title        = {{FLUX} 3 Image Klein},
  year         = {2026},
  url          = {https://bfl.ai/blog/flux-3-image-klein},
}

The Fatal Flaw of 911

Hacker News
www.themarshallproject.org
2026-10-16 15:33:00
Comments...

Introducing GNOME OS Preview

Linux Weekly News
lwn.net
2026-10-16 15:05:57
The GNOME Project has provided GNOME OS for some time; until now, the project only provided a "Nightly" edition that was built from the latest commits and was aimed solely at GNOME developers. Adrian Vovk has now announced the release of GNOME OS Preview, which is intended for a non-d...
Original Article

The GNOME Project has provided GNOME OS for some time; until now, the project only provided a "Nightly" edition that was built from the latest commits and was aimed solely at GNOME developers. Adrian Vovk has now announced the release of GNOME OS Preview, which is intended for a non-developer audience:

GNOME OS Preview is the current GNOME OS Nightly, but without the "nightly" aspect. Instead, it's built from the latest stable GNOME release (GNOME 51.1, at the time of writing). GNOME OS Preview lives in the same branches on GitLab as the stable org.gnome.Platform Flatpak runtimes.

GNOME OS Preview is only a few weeks old, so it has only seen limited real-life testing so far. We therefore expect people will uncover some issues initially. That said, Preview is significantly more stable than Nightly, which dozens of people have been daily driving without major issues for over a year. Thus, we're feeling confident that Preview is going to be reliable enough for daily use by non-developer enthusiasts.

While Preview is meant for non-developers, it is not considered complete or stable for the broader public. There are a number of features, listed in Vovk's post, that need to be implemented before the project is ready to declare GNOME OS " ready for prime time ". Adventurous users, who might not mind having to reinstall the OS once a stable version is declared, can download and start using GNOME OS Preview today.



How the Claude Code team does code review

Hacker News
claude.dev
2026-10-16 15:04:47
Comments...
Original Article

We've said before that Claude writes about 90 percent of Claude Code's own code. So how do we review code at the volume we produce it? Does anyone read code anymore? And if something breaks, who catches it?

This post covers the code review flow on the Claude Code team and how it has evolved. From June to September, merged pull requests to Claude Code's codebase more than doubled while the share that had to be reverted fell by more than 40 percent.

We didn't remove review. But we did move most of the reading to machines, optimized for human time and attention, and invested heavily in making it fast and easy to undo mistakes.

RETHINKING THE PURPOSE OF CODE REVIEW

When agents write code, the number of changes goes up, fast. In Anthropic's monorepo, changes landing per day went from about 2,500 in May to more than 30,000 in September this year.

Claude Code lives in its own repository, separate from the monorepo, but it's seeing a lot of pressure too. When you are shipping this fast, manual, line-by-line code review is incredibly difficult if not impossible.

Code review does two jobs:

  1. Find and fix issues before they ship
  2. Build shared context and codebase understanding across the team

This article mainly focuses on finding and fixing issues, but we will come back to the second job near the end.

We think "did a human read the code?" is an imprecise proxy for "what could go wrong with this change, and which check—automated or human—is the right one to catch it?"

Asking that question also changed when review happens. Before, review was a gate at the end of the road: write the code, open a PR, wait for your colleague.

Now, review runs continuously, more like spellcheck while you write. Most changes have been reviewed and fixed by Claude at least once before a human is asked to look. This catches most routine mistakes, and saves team attention for higher-level questions and scrutiny.

THE SCARCE RESOURCE: HUMAN TIME AND ATTENTION

We want to preserve human time and attention for issues only humans can solve and make sure automated checks catch the rest. At our current rate of change, there is still an incredible amount of work for humans to do, and our team encounters new and novel challenges almost daily.

Human time covers both sides of review's cost: the time people spend reviewing, and the time they spend fixing what bad code breaks. Cutting the first doesn't help if the time just shows up in the second.

So the goal is that most pull requests in the Claude Code repos (the CLI, the desktop and web apps, and the mobile apps) merge with at most one human in the loop, who can be the author, with no increase in reverts or incidents. To measure human time, we track human approvals per PR (median and 95th percentile), human comments, and how long a PR waits on a person. Revert and incident rates are the guardrail: if they rise, we haven't saved human time, we've only moved it.

THE LIFE OF A CHANGE

A typical change, from an engineer's laptop (or a Claude session in Slack), goes through multiple layers of code review.

The life of a change

A typical Claude Code change, from the author's machine to users

FIG A Most of the path is automated; a person's attention goes where the risk is

LAYER BY LAYER

Layers, not one gate

Six layers of checks, with rollback under them

FIG B Each layer catches some problems and misses others. Few get through all of them, and rollback handles the rest.

1. The work is verified before anyone else looks

Most review now happens before a PR exists. We give Claude something it can run—like tests, a build or a screenshot to compare against the design—and ask it to show the output instead of saying it's done. Then a subagent reviews the diff with fresh context. Both habits come from our best-practices guide .

Before opening a PR, many of us also run a few internal skills: one hunts for bugs, one simplifies the diff, and one checks the behavior end to end. UI changes also get checked against our design guidelines.

Boris Cherny, who created Claude Code, has called giving Claude a way to verify its work probably the most important thing for getting good results. He estimates it makes the final result two to three times better, and writes, "Verification looks different for each domain. It might be as simple as running a bash command, or running a test suite, or testing the app in a browser or phone simulator."

When the automated reviewer keeps flagging the same thing, we fix it at the source: in the skill, with a lint rule, or with updates to instructional files such as:

  • CLAUDE.md tells Claude what the project is: the stack, the conventions, the goals and the non-goals. Every review loads it, so in a large codebase we keep it short and point to other docs from there. The reviewer also flags code that breaks a convention in it, and changes that make a line in it out of date.
  • REVIEW.md , written by code owners, tells the reviewer what matters in their part of the code. We check separately whether the reviewer actually follows it. The good ones are short. They say what failure looks like in that repo (for docs it's "it lies," for config it's "it misroutes"), cap the nits, list paths to skip, and ask for a file and line as evidence instead of a guess from a name. They also ask for a summary that starts with a count and says plainly when there's nothing to fix.

2. AI review on every pull request

Every pull request gets a Claude review before a person looks. It reads the diff against the whole repo and the PR's stated intent, and asks: does the change solve its problem, fit the system, or break something else?

On a bug fix, it looks for the root cause. The public version, Code Review for Claude Code , is now generally available on Team and Enterprise plans, and /code-review runs a lighter version locally.

When we launched the research preview , the share of internal PRs getting substantive review comments went from 16% to 54%. Most PRs over 1,000 lines get findings, and most small ones come back clean. Admins set each repo to Quick, Standard, or Deep. Deep is worth it where one missed bug costs more than the extra review time.

Findings get verified by other agents before humans review them. Several agents look for bugs at the same time. Then a separate group votes on each finding, and it only gets posted if enough of them agree it's real. Findings that are only about style, diagnostics, or cleanup get dropped. We A/B tested those filters on our own PRs before keeping them. What's left shows up as inline comments sorted by severity. Each is tagged Important, Nit, or Pre-existing, so a bug the PR didn't introduce doesn't look like the author's fault.

Every finding has to be answered. You either fix it or resolve the thread with a reason. Often an agent picks up the fix overnight, so the author comes back to a PR that's already been through another round.

3. Security review that can block

Security gets its own automated review too. A PR can't merge while any finding from the bug review or the security review is still open. You either fix it or close the thread with a short reason, which is how you clear a false positive.

If a later commit fixes the issue, the finding clears on its own. You can set up the same thing with the open-source security review GitHub Action or the /security-review command. Setup is covered in automated security reviews in Claude Code .

4. Automated checks that block

The usual: lint, type checks, tests on every platform, and a build. (We wrote about scaling CI for this volume here .) A typical CLI pull request may run dozens of checks before anyone looks at it. The PR template asks how the change was tested and how to undo it. Claude can fill that in, but the person who asked for the change signs off on it.

5. Human approval, scaled by risk

A docs fix and an auto-updater change carry different risk, so they get different review.

Risk Examples Human approvals
Low Docs, copy, internal-only features, additive changes behind a flag None required once automated review and security checks are green
Medium Ordinary product changes, and changes to sensitive areas such as caching, the auto-updater, or system prompts One person
High The highest-risk code, plus a small set of paths that always need two people Two people

The change sets the tier, not the author. A classifier reads the change and picks its risk tier. A second classifier asks whether this particular change needs another person even when its tier says it doesn't. Some paths always need a person, anything owners have listed as sensitive and any CI workflow file.

Only trusted authors get the lighter paths. Only authors on the repo's trusted list get the lighter paths, mostly the team that owns it. Everyone else needs a second person to approve. An agent's approval never counts as a person's, either. Automated review can clear a low-risk change, but it can't fill a slot that calls for a human.

Whoever prompted the change is on the hook for it. On an agent-written PR, the person directing the agent counts as one of the required reviewers, the same as if they'd typed the code themselves.

An approval covers one specific commit. If new commits land that the system can't vouch for, like an agent's push or a merge someone resolved by hand, the approval has to be given again.

6. Merge queue, flags and a gradual release

The merge queue re-runs every check against main with the change applied, so two PRs that pass separately can't combine into a broken main. New behavior usually ships behind a flag to Anthropic employees first, and our heavy use often surfaces regressions before users do. Public releases go to the latest channel first. The stable channel trails it.

7. Fast detection, fast rollback

Some mistakes will still get through, so the last layer is about catching them fast. Flags turn off without a deploy. Claude Code has a weekly on-call rotation, and incident reviews ask which layer should have caught the issue.

Noticing a bad merge still depends on the author and on-call as well as the revert and incident dashboards. We don't yet have circuit breakers that tighten approval when those numbers move; engineers here want them before more code moves to zero-human merges.

One colleague said slowing down does lower your error rate, but mostly because you're doing less of everything. We'd rather get faster at noticing and fixing problems.

HOW WE MAKE THE REVIEWER BETTER

Our code review process is constantly improving in a loop.

Any incidents are now an eval. The team collected past PRs that caused incidents, with their fix-forwards and reverts, and had engineers who know that code confirm each bug and where it lived. The reviewer runs against that set daily.

Our incidents are the eval

Built from past incidents and reverts, run every day

FIG C The eval grows with every incident, and every change to the reviewer is scored against all of it.

We measure noise by watching what people do with the comments. It's easy to catch more bugs if you don't mind flagging a lot of non-bugs, so we need a check on that. We sort every comment the reviewer leaves by how the person on the PR responded: they fixed it, said it was wrong, said the behavior was intentional, or decided it didn't matter. We also run the reviewer on PRs we know are clean and count how often it reports something that would have led someone to make a harmful change. Our priority, written down, is catching real bugs first and cutting review rounds second.

Noise costs more when the author is an agent. A person can wave off a nit in seconds. An agent fixes it, which means another commit and another round of review.

Review has to converge. An agent author and an agent reviewer can keep each other busy indefinitely. One CLI PR went through more than fifty rounds of review and fixes overnight before its author stopped it.

When we ran git blame on what the reviewer kept flagging, about 59% of it was code that had been there since the reviewer's first pass. The reviewer was rarely finding new bugs, it was finding a few more old ones each round.

We made it worse ourselves. We'd gotten used to running several rounds by default, since each pass catches something new. This can be worthwhile on a risky change, but not on every PR. The team now tracks rounds-to-pass alongside recall, and changed re-review:

  • A round cap. After three rounds, the reviewer asks the author to step back and reconsider the approach.
  • Diff-only re-review after the first few passes.
  • Flag the class of bug, so the author fixes every instance, not one line.
  • No repeats of findings already posted.

Review agents also run nightly over existing code, helping us catch old bugs before they show up somewhere else.

Review that converges

Internal pull requests, before and after the convergence changes

FIG D Fewer review rounds per internal pull request after the convergence changes

WHERE HUMANS STAY IN THE LOOP

Pulling a senior engineer out of deep work to catch a routine mistake costs far more than an automated review. At Anthropic, our jobs have moved from reading every diff to the decisions machines are bad at:

  • Should we build this at all? Direction, taste and scope. One team that declared its review bottleneck solved still kept human review for changes from outside the team, so someone asks "should we even do this?"
  • Risky code such as billing, the auto-updater and CI workflows.
  • Architecture that sets a pattern others will copy.
  • Reading the evidence. Test output, the command that ran and what it returned, a screenshot, the reviewer's findings. If you can't say what the checks would miss, ask for a real review rather than a quick approval.
  • Owning the outcome. A person is accountable for every change that ships, whoever typed it.

Where a person decides

Five decisions stay with people; checks run everywhere else

FIG E People moved from reading every diff to the decisions machines are bad at

SHARING CONTEXT ACROSS THE TEAM

Code review's second job has always been to spread codebase understanding. Reading a teammate's diff is how you learn what changed and how the pieces fit. If machines do most of the reading, how does anyone learn the code?

We don't have a formal process for this. Nobody on the team keeps a complete mental model of Claude Code in their head, and we don't think anyone needs to. When someone wants to understand a part of the codebase, they ask Claude to write an explainer for exactly that slice. It takes minutes and reflects the code as it is today.

Diagram titled "If machines do most of the reading, how does anyone learn the code?" On the left, a grid stands for the codebase, with a few squares highlighted as managed settings, the part you want to understand; nobody keeps a complete mental model of it in their head. An arrow labeled "Ask Claude about exactly that slice", with the example question "How does Claude Code retrieve managed settings?", leads to two outcomes: Claude writes an explainer, which takes minutes and reflects the code as it is today; and, for some, Claude builds a small artifact that visualizes that part of the code and teaches it the way that person likes to learn. Along the bottom: reading trivial diffs line by line, a one-line copy change teaches you almost nothing; an explainer for the module you are about to change teaches you a lot.

Some of us go a step further and have Claude build a small artifact that visualizes that part of the code and teaches it the way that person likes to learn.

If the goal is to spend human attention well, this beats reading trivial diffs line by line. A one-line copy change teaches you almost nothing. An explainer for the module you're about to change teaches you a lot. Our culture of defaulting to working on open Slack channels helps too, since you see what others are building while they build it.

"YOU LAND IT, YOU OWN IT"

If you land a small or medium change and something still goes wrong, it's a team norm that you usually fix it. A few things keep this from going badly:

  • Changes are small, so they're easy to review, debug and revert.
  • Everything is reversible. Flags, reverts and staged releases undo most mistakes in minutes.
  • Blast radius sets the bar. Expensive code gets more people and more checks.
  • Regressions surface fast through telemetry and internal use.
  • It isn't blame. Owning a fix means you have the most context; incident reviews look at the system.

Ownership is also shared. Much of the team works in open channels where anyone can see what others are building, pick up a thread, or point a Claude at a gap, and feedback comes from people who don't own the code too. That openness is a big part of how quality stays high without a gate on every line.

WHEN WE CHANGE DIRECTION

Agents make it cheap to start things, so some work shouldn't land. Usually someone in the channel asks why, points at an earlier decision, or suggests a simpler route, and the author closes or reshapes the PR.

Since the code was fast to write, closing the PR doesn't feel like a loss. The trick is to raise a different direction in the thread early, not as a blocking comment on a finished PR.

HOW YOU CAN ADOPT THIS PROCESS

Most of the pieces to do this with your team exist today.

Before the pull request

  • Give your agent checks it can run, listed in a short CLAUDE.md , plus hooks that run formatters and linters.
  • Run /code-review and /security-review locally, or a fresh-context subagent review.
  • Add a REVIEW.md , and move repeated review comments into it.

On every pull request

  • Require CI, and add "Testing", "Risk" and "How to revert" to your PR template.
  • Add an AI reviewer (Code Review for Claude Code, or the Claude Code GitHub Action) on one repo, tune REVIEW.md for a few weeks, then widen.
  • Add automated security review, and require every review thread resolved before merge.
  • Match review effort to risk: a quick pass on routine changes, a deep one where a missed bug is expensive (Quick, Standard or Deep in Code Review).
  • Cap review rounds; after the first few, re-review only the new diff.

Approval

  • Write down risk tiers, set from the change rather than the author; start strict and loosen with evidence.
  • Keep the lighter approval paths for authors you trust.
  • Use CODEOWNERS and branch protection so auth, billing, CI and release workflows, and installers always need a person.
  • Never let a bot's approval replace a required human's; dismiss approvals on new commits.

Merge and after

  • Use a merge queue, feature flags, internal use first, staged releases and one-step rollback.
  • Turn incidents and reverts into an eval set, and rescore the reviewer whenever its prompts, tools or model change.
  • Measure human time, with revert and incident rates as the guardrail.

WHERE THIS IS GOING

Code Review's announcement said approving a pull request is still a human call; the product posts findings, not approvals. Our own repos go further, letting owners decide which low-risk changes merge on automated checks alone, and that line keeps moving.

When a review misses something, we ask what the model didn't have in front of it and put the fix into a CLAUDE.md , a skill or a new check. The goal hasn't changed: less human time per change, and no more reverts than before.

If your team lets agents open pull requests, we'd like to hear which checks you've automated, which still need a person, and what you think we have wrong.

With thanks to Emma Webb, Michael Segner and Amie Rotherham for their reviews.

You could have invented transformers from memory

Hacker News
alexwang.ai
2026-10-16 15:01:17
Comments...
Original Article
Retrieving a character from memory. The recall worsens as the number of memories grows.

Large language models today can recall obscure facts from every corner of the world. Most recently, I was running late for a friend’s board game night, so I asked Astra to remind me the rules to Dune: Imperium. It gladly narrated them to me as I drove over and helped me remember the rules well enough for me to play again. We’re so used to asking models about anything that we take their vast knowledge for granted.

How do models remember so much information? And how much can they store?

In this post, I’ll go through an intuitive way to look at linear maps, MLPs, and self-attention as different kinds of memory stores. From this intuition we can derive some heuristics for how much memory each layer can store.


The key property that characterizes a “good” memory store is its ability to recall what it stored. After all, even if we could store infinitely many facts, it’s not very helpful if we can’t recall them when we need to. The more memories we store, the more they interfere with each other when we try to recall one. So throughout the post we’ll focus on one quantity, the interference-to-signal ratio, which measures how much the other memories get in the way during recall. The number of memories a store can hold before the interference grows as large as the signal is its capacity .

We’ll develop this perspective and show how you can go from a linear layer to something better, an MLP, which improves both capacity and recall, and then all the way to self-attention, which has very good recall and can store a potentially unbounded number of memories. With 64-dimensional keys, that’s a jump from about 64 memories, to about 2,700, to over a million.

Here are the terms we’ll use throughout. A memory store is a function $f$ that holds $M$ memories, for $i = 1, \ldots, M$. A memory is one key-value pair: a key $k_i \in \reals^{d_k}$, used for lookup based on similarity, and a value $v_i \in \reals^{d_v}$, which is what we want to retrieve. To use $f$, we query it with an input $x$, and it recalls an output $f(x)$. A good memory store recalls $v_i$ when we query it with $k_i$, or with another vector similar to $k_i$. In the literature, a memory store that recalls by similarity is called an associative memory .

An outer product memory store #

The most basic memory store is linear: it simply accumulates memories via outer products,

$$W = \sum_{i=1}^{M} v_i k_i\transpose = V\transpose K$$

where the rows of $K \in \reals^{M\times d_k}$ and $V \in \reals^{M\times d_v}$ are the keys $k_i\transpose$ and the values $v_i\transpose$. 1

To store a new memory $(k, v)$, we simply add $vk\transpose$ to the existing weights. 2

Aside: a gradient descent step writes a memory

Take a linear layer $y = Wx$ inside a network with a scalar loss $L$, and let $\bar y = \grad L(y)$ be the gradient of the loss with respect to the layer’s output. The gradient with respect to $W$ is $\bar y x\transpose$, so a step with learning rate $\eta$ is

$$W \leftarrow W - \eta\, \bar y x\transpose.$$

This recurrence is a memory update: it updates the weights with a new memory with key $x$ and value $-\eta\bar y$. For more on this view, see Irie, Csordás & Schmidhuber , who express a linear layer trained by gradient descent as attention over all of its training inputs.

To query the memory store with an input $x$, we multiply the input by the matrix:

$$f(x) = V\transpose K x = \sum_{i=1}^{M} v_i\,(k_i\transpose x).$$

So recall is a lookup by similarity to the stored keys: we compare the query with every key, and return the sum of the values weighted by those similarities.

Recall picks up interference #

So storing memories is easy: just keep adding outer products to the weights. But what happens when we try to recall one?

Let’s assume for simplicity that every key is normalized to have length 1, i.e. $k_j\transpose k_j = 1$. Then

$$f(k_j) = \underbrace{v_j}_{\text{signal}} + \underbrace{\sum_{i\neq j} v_i\,(k_i\transpose k_j)}_{\text{interference}},$$

meaning we get back the value of the target memory , the one whose key we queried with, plus interference from every other memory whose key is similar to the query.

If the keys were all orthonormal, the interference would be zero and recall would be exact. But $\reals^{d_k}$ only has $d_k$ orthogonal directions, so we cannot get perfect recall once we store more memories than the key dimension: $M > d_k$.

What is the outer-product store’s capacity? Here’s an intuitive argument. There are $M-1$ interference terms. If the keys are random unit vectors, each similarity $k_i\transpose k_j$ is about $\pm 1/\sqrt{d_k}$. If the values are random too, with similar lengths, the $M-1$ interference terms add up like a random walk, so the interference’s squared length is about $(M-1)/d_k$ times the signal’s, and

$$\frac{\norm{\text{interference}}}{\norm{\text{signal}}} \sim \sqrt{\frac{M}{d_k}}.$$

Setting this ratio to 1 gives a capacity of

$$M \approx d_k,$$

once we store as many memories as the key dimension, the interference is as large as the signal, drowning it out.

Each bar below is one stored memory’s weight in a single recall, relative to the target memory’s weight (in red). Every bar adds a bit of its value to the recall. Drag $M$ past $d_k = 64$ to watch the small bars pile up until recall fails. The other buttons switch to memory stores we’ll build later in the post.

the target memory each other stored memory, weight relative to the target memory

interference / signal = recall fails

How do we reduce interference? #

Even below its capacity of about $d_k$ memories, the outer-product store produces significant interference during recall. 3 To raise the capacity, or recall more cleanly below it, we need to reduce interference .

The brute-force way is to make the key dimension $d_k$ larger, since a linear store’s capacity grows with $d_k$. How large $d_k$ can be is governed by hardware constraints.

Alternatively, we can make algorithmic improvements. We can store memories more carefully: the outer-product store adds each memory without looking at the others, so it does nothing to cancel their interference. Or we can recall more selectively: every memory in a linear store contributes interference, even when its key has low similarity to the query, so we can improve recall by suppressing the less similar keys.

In the rest of the post, we’ll see that storing outer product memories more carefully gives us the optimal linear memory store, which has about twice the capacity. Recalling selectively via nonlinearities gives us MLPs and self-attention.

The optimal linear memory store #

The outer-product store writes each memory without regard to the others. Instead, we can choose the weights $W$ so that recall fits all of the stored memories at once. This is a linear regression problem: 4

$$\operatorname*{minimize}_W \sum_{i=1}^M \norm{W k_i - v_i}_2^2.$$

When we store more memories than the key dimension, $M > d_k$, the least-squares solution is

$$W = \parens*{\sum_i v_i k_i\transpose}\parens*{\sum_i k_i k_i\transpose}\inverse = V\transpose K\,(K\transpose K)\inverse.$$

This is the outer-product store $V\transpose K$ with one change: before we compare the query with the keys, we multiply it by $(K\transpose K)\inverse$, which undoes the keys’ covariance $K\transpose K$. This whitens the keys, so the store no longer overweights directions that many keys share.

When $M \leq d_k$, the regression can fit every memory exactly, as long as the keys are linearly independent. So the optimal store recalls with no interference at all, even when the keys aren’t orthogonal.

When $M > d_k$, we start to get interference, since there are only $d_k$ directions for the memory store to work with. For random keys and values, our interference-to-signal ratio becomes

$$\frac{\norm{\text{interference}}}{\norm{\text{signal}}} \approx \sqrt{\frac{M}{d_k} - 1}.$$

This ratio equals 1 at

$$M = 2d_k,$$

so the optimal store’s capacity is twice as large as before!

Aside: deriving the optimal linear memory store

When $M \leq d_k$. If the keys are linearly independent, the $M\times M$ matrix of inner products between keys, $KK\transpose$, is invertible, and

$$W = V\transpose (KK\transpose)\inverse K$$

fits every memory exactly. When $M < d_k$, the problem is underconstrained and has infinitely many solutions, and this one is the min-norm solution. The rows $\tilde k_i\transpose$ of $(KK\transpose)\inverse K$ are known as the dual basis for the rows of $K$: by construction, $(KK\transpose)\inverse KK\transpose = I$, so $\tilde k_i\transpose k_j = \delta_{ij}$. Then $f(k_j) = \sum_i v_i\, \tilde k_i\transpose k_j = v_j$, so there is no interference and we have perfect recall.

When $M > d_k$. Setting the gradient of the objective to zero gives $W K\transpose K = V\transpose K$, so $W = V\transpose K\,(K\transpose K)\inverse$. Both solutions are $W = V\transpose (K\transpose)\pinv$, where $A\pinv$ denotes the pseudoinverse of $A$: $(K\transpose)\pinv = (KK\transpose)\inverse K$ when the keys are linearly independent, and $(K\transpose)\pinv = K(K\transpose K)\inverse$ when they span $\reals^{d_k}$.

Now we can analyze the interference of $f(k_j) = V\transpose K\,(K\transpose K)\inverse k_j$. For a stored key $k_j$, the weight on each value $v_i$ is $k_i\transpose (K\transpose K)\inverse k_j$, which is exactly entry $(i, j)$ of the $M\times M$ matrix $P = K(K\transpose K)\inverse K\transpose$:

$$f(k_j) = \sum_{i=1}^M v_i\, P_{ij} = \underbrace{P_{jj}\, v_j}_{\text{signal}} + \underbrace{\sum_{i\neq j} P_{ij}\, v_i}_{\text{interference}}.$$

$P$ is the projection onto the column space of $K$, a $d_k$-dimensional subspace of $\reals^M$. Two facts about projections help us analyze the interference-to-signal ratio:

  • The signal term: By the cyclic property of the trace, $$\sum_{j=1}^M P_{jj} = \trace{K(K\transpose K)\inverse K\transpose} = \trace{(K\transpose K)\inverse K\transpose K} = \trace{I_{d_k}} = d_k,$$ so the $M$ signal weights add up to $d_k$. If the keys are random, no key is special, so $P_{jj} \approx d_k/M$.
  • The interference term: $P$ is a symmetric projection matrix, so $P\transpose P = P^2 = P$. Then $$\sum_{i\neq j} P_{ij}^2 = \sum_{i=1}^M P_{ij}^2 - P_{jj}^2 = (P\transpose P)_{jj} - P_{jj}^2 = P_{jj} - P_{jj}^2 \approx \frac{d_k}{M} - \parens*{\frac{d_k}{M}}^2.$$

If the values are random with similar lengths,

$$\frac{\norm{\text{interference}}}{\norm{\text{signal}}} \approx \frac{\sqrt{P_{jj} - P_{jj}^2}}{P_{jj}} = \sqrt{\frac{M}{d_k} - 1}.$$

Compared to the outer-product store’s $\sqrt{M/d_k}$, the $-1$ is the $d_k$ memories’ worth of interference that the optimal store cancels.

We can check our predictions numerically. We randomly sample $M$ memories with unit-length keys in $d_k = 64$ dimensions, query the memory store with one of the stored keys, and measure the interference-to-signal ratio:

recall fails: more interference than signal 0.1 1 10 16 64 256 1024 4096 16384 number of stored memories M (key dimension d k = 64) interference / signal optimal: no interference for M ≤ 64 outer-product (Hebbian) memory, M = 16: interference/signal = 0.46 outer-product (Hebbian) memory, M = 32: interference/signal = 0.68 outer-product (Hebbian) memory, M = 64: interference/signal = 0.97 outer-product (Hebbian) memory, M = 128: interference/signal = 1.39 outer-product (Hebbian) memory, M = 256: interference/signal = 1.97 outer-product (Hebbian) memory, M = 512: interference/signal = 2.81 outer-product (Hebbian) memory, M = 1024: interference/signal = 3.90 outer-product (Hebbian) memory, M = 2048: interference/signal = 5.63 outer-product (Hebbian) memory, M = 4096: interference/signal = 8.01 outer-product (Hebbian) memory, M = 8192: interference/signal = 11.38 outer-product (Hebbian) memory, M = 16384: interference/signal = 15.90 outer product optimal (least-squares) memory, M = 16: interference/signal = 0.00 optimal (least-squares) memory, M = 32: interference/signal = 0.00 optimal (least-squares) memory, M = 64: interference/signal = 0.00 optimal (least-squares) memory, M = 65: interference/signal = 0.08 optimal (least-squares) memory, M = 66: interference/signal = 0.14 optimal (least-squares) memory, M = 68: interference/signal = 0.23 optimal (least-squares) memory, M = 72: interference/signal = 0.35 optimal (least-squares) memory, M = 80: interference/signal = 0.49 optimal (least-squares) memory, M = 96: interference/signal = 0.71 optimal (least-squares) memory, M = 112: interference/signal = 0.86 optimal (least-squares) memory, M = 128: interference/signal = 1.00 optimal (least-squares) memory, M = 256: interference/signal = 1.72 optimal (least-squares) memory, M = 512: interference/signal = 2.63 optimal (least-squares) memory, M = 1024: interference/signal = 3.81 optimal (least-squares) memory, M = 2048: interference/signal = 5.56 optimal (least-squares) memory, M = 4096: interference/signal = 7.95 optimal (least-squares) memory, M = 8192: interference/signal = 11.34 optimal (least-squares) memory, M = 16384: interference/signal = 15.91 optimal (least squares)

The outer-product store reaches its capacity at $M \approx d_k = 64$. The optimal store recalls exactly up to $M = d_k$. Past that, its interference rises from zero like $\sqrt{M/d_k - 1}$, and the store reaches its capacity near $M = 2d_k = 128$, as predicted. Since it cancels a fixed number of memories’ worth of interference, the gap between the two stores shrinks as $M$ grows.

This optimal memory store is still linear in the similarities though. It must scale small and large similarities by the same factor. To do better, we need to change how the store recalls.

MLP as a nonlinear memory store #

A linear memory store recalls

$$f(x) = \sum_{i=1}^M v_i (k_i\transpose x).$$

If we had a way to suppress the weight when $k_i\transpose x$ is small, then we can reduce the amount of interference from low similarity keys.

Let’s pass each similarity through a nonlinear function $\sigma$ before computing the weighted sum of values:

$$f(x) = \sum_{i=1}^{M} v_i\,\sigma(k_i\transpose x) = V\transpose \sigma(Kx).$$

We just rediscovered a two-layer MLP from first principles! The rows of the first weight matrix are the keys, the columns of the second weight matrix are the values. Sukhbaatar et al. pointed out this resemblance between feedforward layers and memory stores, and Geva et al. found that the feedforward layers in trained transformers often work this way, with keys firing on recognizable patterns in the input.

Ideally, the gating function $\sigma$ is chosen such that when the similarity is low ($k_i\transpose x \sim 0$ or even when $k_i\transpose x < 0$), its corresponding term in the sum gets suppressed to reduce interference. A ReLU activation zeros out keys with negative similarities, and adding a bias allows shifting that threshold 5 . A squared ReLU activation further suppresses the keys with similarities close to zero. A similarity of 0.1 becomes 0.01, while a similarity of 1 stays 1. In fact, squared ReLUs are one of the lesser known but established-at-scale improvements to MLP activations ( So et al. ).

A squared ReLU MLP is a GLU MLP whose gate and input projection share weights, since $\operatorname{ReLU}(Kx)^2 = \operatorname{ReLU}(Kx) \odot Kx$. The SwiGLU MLPs in today’s language models give the gate its own weights and use a Swish activation in place of the ReLU.

In practice, MLPs store facts in superposition: many facts share the same weights, and the output is a blend of many memories. Garcia et al. build one explicitly: the hidden units of a GLU MLP compute random features $\phi(x)$ of the input, the second weight matrix is an outer-product store $\sum_i v_i \phi(k_i)\transpose$ over those features, and the MLP stores far more facts than it has hidden units. Still, trained transformers’ ReLU MLPs can activate as few as 1% of their hidden units for a given input, so each recall draws on a small fraction of the memories ( Li et al. ).

The transformer authors already knew this

The original transformer paper made this connection too, but only in v2 and v3 on arXiv. There, Vaswani et al. describe the feedforward layer as “a kind of attention,” with the rows of its two weight matrices as the keys and values, and ReLU in place of softmax. They even tried replacing the feedforward layers with attention over learned key-value parameters, and got about the same translation quality: one version did slightly worse, another slightly better, though the first one trained about 30% slower. The passage is gone from every later version of the paper. We’ll get to how self-attention relates to all this below.

Reducing interference with higher powers #

Squaring the similarities works because it shrinks low similarity weights much more than large ones. We can push this further with $\sigma(s) = \operatorname{ReLU}(s)^p$. The signal stays the same, since $1^p = 1$, while an interference term with similarity $1/\sqrt{d_k}$ shrinks to $d_k^{-p/2}$. The $M$ interference terms add up like a random walk, so the interference-to-signal ratio is

$$\frac{\norm{\text{interference}}}{\norm{\text{signal}}} \approx \sqrt{\frac{M}{d_k^p}}.$$

This means the capacity is about

$$M \approx d_k^p$$

memories, geometrically more than before!

To check this, we run the same experiment as before for five choices of $\sigma$:

recall fails: more interference than signal 0.01 0.1 1 10 16 64 256 1024 4096 16384 number of stored memories M (key dimension d k = 64) interference / signal s (linear), M = 16: interference/signal = 0.46 s (linear), M = 32: interference/signal = 0.68 s (linear), M = 64: interference/signal = 0.97 s (linear), M = 128: interference/signal = 1.39 s (linear), M = 256: interference/signal = 1.97 s (linear), M = 512: interference/signal = 2.81 s (linear), M = 1024: interference/signal = 3.90 s (linear), M = 2048: interference/signal = 5.63 s (linear), M = 4096: interference/signal = 8.01 s (linear), M = 8192: interference/signal = 11.38 s (linear), M = 16384: interference/signal = 15.90 s (Linear) ReLU(s), M = 16: interference/signal = 0.31 ReLU(s), M = 32: interference/signal = 0.46 ReLU(s), M = 64: interference/signal = 0.69 ReLU(s), M = 128: interference/signal = 0.97 ReLU(s), M = 256: interference/signal = 1.37 ReLU(s), M = 512: interference/signal = 2.00 ReLU(s), M = 1024: interference/signal = 2.82 ReLU(s), M = 2048: interference/signal = 4.05 ReLU(s), M = 4096: interference/signal = 5.69 ReLU(s), M = 8192: interference/signal = 7.94 ReLU(s), M = 16384: interference/signal = 11.26 ReLU( s ) (MLP) ReLU(s)², M = 16: interference/signal = 0.05 ReLU(s)², M = 32: interference/signal = 0.09 ReLU(s)², M = 64: interference/signal = 0.14 ReLU(s)², M = 128: interference/signal = 0.20 ReLU(s)², M = 256: interference/signal = 0.29 ReLU(s)², M = 512: interference/signal = 0.42 ReLU(s)², M = 1024: interference/signal = 0.60 ReLU(s)², M = 2048: interference/signal = 0.85 ReLU(s)², M = 4096: interference/signal = 1.20 ReLU(s)², M = 8192: interference/signal = 1.70 ReLU(s)², M = 16384: interference/signal = 2.40 ReLU( s ) 2 (GLU MLP) Swish(s)·s (SwiGLU MLP), M = 16: interference/signal = 0.06 Swish(s)·s (SwiGLU MLP), M = 32: interference/signal = 0.09 Swish(s)·s (SwiGLU MLP), M = 64: interference/signal = 0.14 Swish(s)·s (SwiGLU MLP), M = 128: interference/signal = 0.20 Swish(s)·s (SwiGLU MLP), M = 256: interference/signal = 0.28 Swish(s)·s (SwiGLU MLP), M = 512: interference/signal = 0.41 Swish(s)·s (SwiGLU MLP), M = 1024: interference/signal = 0.59 Swish(s)·s (SwiGLU MLP), M = 2048: interference/signal = 0.85 Swish(s)·s (SwiGLU MLP), M = 4096: interference/signal = 1.18 Swish(s)·s (SwiGLU MLP), M = 8192: interference/signal = 1.64 Swish(s)·s (SwiGLU MLP), M = 16384: interference/signal = 2.36 Swish( s )· s (SwiGLU MLP) ReLU(s)³, M = 16: interference/signal = 0.01 ReLU(s)³, M = 32: interference/signal = 0.02 ReLU(s)³, M = 64: interference/signal = 0.03 ReLU(s)³, M = 128: interference/signal = 0.05 ReLU(s)³, M = 256: interference/signal = 0.08 ReLU(s)³, M = 512: interference/signal = 0.11 ReLU(s)³, M = 1024: interference/signal = 0.16 ReLU(s)³, M = 2048: interference/signal = 0.23 ReLU(s)³, M = 4096: interference/signal = 0.33 ReLU(s)³, M = 8192: interference/signal = 0.46 ReLU(s)³, M = 16384: interference/signal = 0.65 ReLU( s ) 3

Since the interference grows like $\sqrt{M}$, the lines are nearly parallel on a log-log plot. Only their height changes, and with it the capacity, where each line crosses 1:

  • Linear: the capacity is $M \approx d_k = 64$.
  • ReLU: zeroing the negative similarities shrinks the interference by $\sqrt 2$, so the capacity grows to $M \approx 2d_k = 128$.
  • Squared ReLU: each interference term shrinks from about $1/\sqrt{d_k}$ to about $1/d_k$, so the capacity grows to $M \approx 2d_k^2/3 \approx 2700$, about 40 times the linear store’s.
  • SwiGLU MLP, with the gate sharing the input projection’s weights as in the squared ReLU, $\sigma(s) = \operatorname{Swish}(s)\cdot s = s^2/(1 + e^{-s})$: its capacity nearly matches the squared ReLU’s.
  • Cubed ReLU: each interference term shrinks to about $d_k^{-3/2}$, so the capacity grows to $M \approx 2d_k^3/15 \approx 35000$.

Self-attention as a non-parametric memory store #

Raising the weights to a power increases the capacity to about $d_k^p$. But what if we could push this to the limit? Rather than pick one power, we can use infinitely many of them. Indeed, the exponential is a weighted sum of every power,

$$e^{\beta s} = 1 + \beta s + \frac{(\beta s)^2}{2} + \frac{(\beta s)^3}{6} + \cdots = \sum_{p=0}^{\infty} \frac{(\beta s)^p}{p!},$$

with the sharpness $\beta$ setting the weight on the higher powers. Here is the same experiment with $\beta = \sqrt{d_k}$, the value self-attention uses, 6 for the exponential and its series truncated after 2, 3 and 4 terms:

recall fails: more interference than signal 0.01 0.1 1 10 16 64 256 1024 4096 16384 number of stored memories M (key dimension d k = 64) interference / signal s (linear), M = 16: interference/signal = 0.46 s (linear), M = 32: interference/signal = 0.68 s (linear), M = 64: interference/signal = 0.97 s (linear), M = 128: interference/signal = 1.39 s (linear), M = 256: interference/signal = 1.97 s (linear), M = 512: interference/signal = 2.81 s (linear), M = 1024: interference/signal = 3.90 s (linear), M = 2048: interference/signal = 5.63 s (linear), M = 4096: interference/signal = 8.01 s (linear), M = 8192: interference/signal = 11.38 s (linear), M = 16384: interference/signal = 15.90 s (Linear) 2 terms, M = 16: interference/signal = 0.57 2 terms, M = 32: interference/signal = 0.85 2 terms, M = 64: interference/signal = 1.24 2 terms, M = 128: interference/signal = 1.73 2 terms, M = 256: interference/signal = 2.42 2 terms, M = 512: interference/signal = 3.55 2 terms, M = 1024: interference/signal = 5.03 2 terms, M = 2048: interference/signal = 7.27 2 terms, M = 4096: interference/signal = 10.17 2 terms, M = 8192: interference/signal = 14.08 2 terms, M = 16384: interference/signal = 19.98 2 terms 3 terms, M = 16: interference/signal = 0.16 3 terms, M = 32: interference/signal = 0.24 3 terms, M = 64: interference/signal = 0.37 3 terms, M = 128: interference/signal = 0.51 3 terms, M = 256: interference/signal = 0.72 3 terms, M = 512: interference/signal = 1.06 3 terms, M = 1024: interference/signal = 1.52 3 terms, M = 2048: interference/signal = 2.20 3 terms, M = 4096: interference/signal = 3.06 3 terms, M = 8192: interference/signal = 4.19 3 terms, M = 16384: interference/signal = 5.98 3 terms 4 terms, M = 16: interference/signal = 0.06 4 terms, M = 32: interference/signal = 0.09 4 terms, M = 64: interference/signal = 0.14 4 terms, M = 128: interference/signal = 0.19 4 terms, M = 256: interference/signal = 0.27 4 terms, M = 512: interference/signal = 0.40 4 terms, M = 1024: interference/signal = 0.57 4 terms, M = 2048: interference/signal = 0.82 4 terms, M = 4096: interference/signal = 1.15 4 terms, M = 8192: interference/signal = 1.59 4 terms, M = 16384: interference/signal = 2.26 4 terms exp(βs) (self-attention), M = 16: interference/signal = 0.00 exp(βs) (self-attention), M = 32: interference/signal = 0.00 exp(βs) (self-attention), M = 64: interference/signal = 0.01 exp(βs) (self-attention), M = 128: interference/signal = 0.01 exp(βs) (self-attention), M = 256: interference/signal = 0.01 exp(βs) (self-attention), M = 512: interference/signal = 0.02 exp(βs) (self-attention), M = 1024: interference/signal = 0.03 exp(βs) (self-attention), M = 2048: interference/signal = 0.04 exp(βs) (self-attention), M = 4096: interference/signal = 0.06 exp(βs) (self-attention), M = 8192: interference/signal = 0.08 exp(βs) (self-attention), M = 16384: interference/signal = 0.11 e βs (self-attention)

With 2 terms, the capacity is about 40, below the linear store’s, since the constant term gives every key a weight of about 1. With 3 terms it’s about 450, and with 4 terms about 3,100, close to the squared ReLU’s. The full exponential stays far below the dashed line, so its capacity is past the edge of the chart.

To find the exponential’s capacity, we query with a stored key $k_j$, so the target memory has similarity 1 and weight $w_j = e^{\beta}$. Every other memory has weight $w_i = e^{\beta s_i}$, where for random unit keys the similarity $s_i$ is roughly Gaussian with mean 0 and variance $1/d_k$. With random values of similar lengths,

$$ \begin{aligned} \frac{\norm{\text{interference}}}{\norm{\text{signal}}} &\approx \sqrt{\sum_{i\neq j} \parens*{\frac{w_i}{w_j}}^2} && \text{interference terms add up like a random walk} \\ &= \sqrt{\sum_{i\neq j} e^{2\beta (s_i - 1)}} && w_i / w_j = e^{\beta s_i} / e^{\beta} \\ &\approx \sqrt{M\, e^{-2\beta}\, \ev{e^{2\beta s}}} && \text{average over the } M \text{ other memories} \\ &= \sqrt{M\, e^{-2\beta}\, e^{2\beta^2/d_k}} && \ev{e^{ts}} = e^{t^2/(2d_k)} \text{ for } s \sim \mathcal{N}(0, 1/d_k) \\ &= \sqrt{M}\, e^{\beta^2/d_k - \beta}. \end{aligned} $$

Setting the ratio to 1 gives a capacity of

$$M \approx e^{2\beta(1 - \beta/d_k)},$$

growing exponentially with $\beta$ as long as $\beta$ is well below $d_k$, rather than polynomially in $d_k$ like before! With $\beta = \sqrt{d_k} = 8$, the capacity is about $e^{14} \approx 1.2$ million memories, nearly 20,000 times the linear store’s. A longer run of the same experiment puts the capacity at about 1.2 million too.

In practice, we may not want to naively exponentiate numbers in our implementation, since small numbers can underflow and large numbers can overflow. Fortunately, the interference only depends on the ratios between weights, as the chain above shows, so we can divide every weight by their sum without changing the interference-to-signal ratio, while ensuring numerical stability:

$$f(x) = \sum_{i=1}^{M} v_i\,\frac{\exp(\beta\,k_i\transpose x)}{\sum_j \exp(\beta\,k_j\transpose x)} = V\transpose \operatorname{softmax}(\beta K x).$$

This is self-attention . 7

Unlike an MLP, whose keys and values are trained weights, self-attention computes its keys and values from the tokens in its context. Each token stores one memory, so the number of memories $M$ is the context length. That’s what makes self-attention non-parametric: its memories aren’t parameters, and the store grows with the context.

Here’s the bar figure again, starting with softmax. At $\beta = 8$, recall never fails within the slider’s range, so lower $\beta$ to 2 and raise $M$: recall fails after a few dozen memories. Each doubling of $M$ needs a bit more $\beta$ to keep recall working, which is the idea behind the next section.

the target memory each other stored memory, weight relative to the target memory

interference / signal = recall fails

Handling many key-value pairs in long context #

Since $\beta$ determines how hard we suppress less similar keys, we can increase $\beta$ as the number of key-value pairs increases. Why not just make $\beta$ huge? As $\beta \to \infty$, softmax becomes a hard argmax that picks only the most similar key, which isn’t differentiable, and a very large $\beta$ already makes training work poorly, since the softmax saturates and the gradients to every other key vanish. So we raise $\beta$ only as much as $M$ requires. Scaling the attention logits with $\log M$ is a trick for long contexts that does this. There are a few versions of it, and each sets $\beta$ relative to a fixed reference length $L$, usually the training length, so that $\beta$ keeps its trained value when $M = L$:

  • Su (2021) derives a scale of $\log M$ from keeping the attention’s entropy constant as $M$ grows, normalized to match standard attention at $M = L$. The logits are multiplied by $\log M / \log L$ at every length. Scalable-Softmax has the same form, multiplying the logits by $s \log M$ with $s$ learned.
  • The original Qwen models use LogN-Scaling, which applies the same factor only once the context is longer than $L$.
  • Qwen2.5-1M uses YaRN’s attention scaling, which multiplies the logits by $(0.1 \log(M/L) + 1)^2$, so it grows like $(\log M)^2$.

Here’s how each rule does in our experiment, with $\beta = \sqrt{d_k} = 8$ at $L = 1024$ memories:

recall fails: more interference than signal 0.0001 0.001 0.01 0.1 1 16 256 4K 64K 1M number of stored memories M (key dimension d k = 64) interference / signal fixed beta = 8, M = 16: interference/signal = 0.00 fixed beta = 8, M = 32: interference/signal = 0.00 fixed beta = 8, M = 64: interference/signal = 0.01 fixed beta = 8, M = 128: interference/signal = 0.01 fixed beta = 8, M = 256: interference/signal = 0.01 fixed beta = 8, M = 512: interference/signal = 0.02 fixed beta = 8, M = 1024: interference/signal = 0.03 fixed beta = 8, M = 2048: interference/signal = 0.04 fixed beta = 8, M = 4096: interference/signal = 0.06 fixed beta = 8, M = 8192: interference/signal = 0.08 fixed beta = 8, M = 16384: interference/signal = 0.11 fixed beta = 8, M = 32768: interference/signal = 0.16 fixed beta = 8, M = 65536: interference/signal = 0.22 fixed beta = 8, M = 131072: interference/signal = 0.32 fixed beta = 8, M = 262144: interference/signal = 0.45 fixed beta = 8, M = 524288: interference/signal = 0.65 fixed beta = 8, M = 1.048576e+06: interference/signal = 0.94 fixed beta = 8, M = 2.097152e+06: interference/signal = 1.25 fixed β = 8 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 16: interference/signal = 0.17 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 32: interference/signal = 0.12 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 64: interference/signal = 0.09 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 128: interference/signal = 0.06 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 256: interference/signal = 0.05 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 512: interference/signal = 0.04 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 1024: interference/signal = 0.03 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 2048: interference/signal = 0.02 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 4096: interference/signal = 0.02 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 8192: interference/signal = 0.01 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 16384: interference/signal = 0.01 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 32768: interference/signal = 0.01 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 65536: interference/signal = 0.01 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 131072: interference/signal = 0.01 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 262144: interference/signal = 0.01 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 524288: interference/signal = 0.00 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 1.048576e+06: interference/signal = 0.00 Su (2021) / Scalable-Softmax: beta = 8 log M / log 1024, M = 2.097152e+06: interference/signal = 0.00 Su / SSMax below 1024 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 16: interference/signal = 0.00 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 32: interference/signal = 0.00 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 64: interference/signal = 0.01 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 128: interference/signal = 0.01 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 256: interference/signal = 0.01 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 512: interference/signal = 0.02 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 1024: interference/signal = 0.03 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 2048: interference/signal = 0.02 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 4096: interference/signal = 0.02 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 8192: interference/signal = 0.01 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 16384: interference/signal = 0.01 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 32768: interference/signal = 0.01 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 65536: interference/signal = 0.01 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 131072: interference/signal = 0.01 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 262144: interference/signal = 0.01 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 524288: interference/signal = 0.00 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 1.048576e+06: interference/signal = 0.00 Qwen LogN-Scaling: beta = 8 max(1, log M / log 1024), M = 2.097152e+06: interference/signal = 0.00 Qwen / SSMax / Su (log M ) YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 16: interference/signal = 0.00 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 32: interference/signal = 0.00 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 64: interference/signal = 0.01 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 128: interference/signal = 0.01 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 256: interference/signal = 0.01 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 512: interference/signal = 0.02 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 1024: interference/signal = 0.03 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 2048: interference/signal = 0.02 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 4096: interference/signal = 0.01 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 8192: interference/signal = 0.01 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 16384: interference/signal = 0.00 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 32768: interference/signal = 0.00 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 65536: interference/signal = 0.00 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 131072: interference/signal = 0.00 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 262144: interference/signal = 0.00 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 524288: interference/signal = 0.00 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 1.048576e+06: interference/signal = 0.00 YaRN: beta = 8 (0.1 ln(M/1024) + 1)^2, M = 2.097152e+06: interference/signal = 0.00 YaRN (Qwen2.5-1M)

Qwen’s rule and Su’s rule coincide past the reference length $L$, where the interference-to-signal ratio falls as the store grows, to about 0.004 at 2 million memories. YaRN’s faster-growing scale pushes the ratio down to about $10^{-4}$. In each case, scaling $\beta$ with $\log M$ allows for essentially an unbounded number of memories with distinct keys to be stored.

Closing thoughts #

Here are the memory stores we visited, with their capacities when we query with a stored key and the keys and values are random:

Memory store $f(x)$ Capacity Capacity at $d_k = 64$
Outer product $V\transpose K x$ $d_k$ 64
Optimal linear $V\transpose K (K\transpose K)\inverse x$ $2d_k$ 128
ReLU MLP $V\transpose \operatorname{ReLU}(Kx)$ $2d_k$ 128
Squared ReLU (GLU MLP) $V\transpose \operatorname{ReLU}(Kx)^2$ $2d_k^2/3$ about 2,700
SwiGLU MLP $V\transpose \parens*{\operatorname{Swish}(Kx) \odot Kx}$ about $2d_k^2/3$ about 2,900
Cubed ReLU $V\transpose \operatorname{ReLU}(Kx)^3$ $2d_k^3/15$ about 35,000
Self-attention, $\beta = \sqrt{d_k}$ $V\transpose \operatorname{softmax}(\beta K x)$ $e^{2\sqrt{d_k} - 2}$ about 1.2 million
Self-attention, $\beta \propto \log M$ $V\transpose \operatorname{softmax}(\beta K x)$ not reached in our experiments more than 2 million

We started from a heuristic memory store, the outer-product memory, and gradually built our way up to all the standard layers we see today in modern transformers. This perspective also allowed us to estimate how they differ in their capacity, their ability to act as vector-valued key-value stores.

I should mention that this capacity estimate is only one way to look at the architecture of modern neural networks. Our capacity estimate only counts how many random vectors a single layer can recall before the interference dominates the signal. In fact we haven’t actually considered the training data at all, which affects what actually is being represented in the keys and values! There are other works which account for the trained layers, measuring stored information in bits. Morris et al. estimate that GPT-style models memorize about 3.6 bits per parameter, and find that once a model fills its capacity, it starts to generalize and memorizes less of each training example. Allen-Zhu & Li find that language models store about 2 bits of factual knowledge per parameter, even when quantized to int8.

From here, there are many related directions which are also fascinating:

I’ve always been drawn to memory, maybe because I viscerally feel how limited my own is. Perhaps part of me hopes that by understanding how machines remember, I’ll learn something about myself too.

The Real Housewives of New York City Finally Address the Epstein Files

hellgate
hellgatenyc.com
2026-10-16 14:58:58
This week, RHONY is once again on Island Time—no, not that island....
Original Article
The Real Housewives of New York City Finally Address the Epstein Files
(Photos by Bravo Media, George Diama)

RHONY

Scott's Picks:

Give us your email to read the full story

Sign up now for our free newsletters.

Sign up

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to Hell Gate.

Your link has expired.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.

Getting Canceled

Lobsters
www.youtube.com
2026-10-16 14:54:16
Comments...

[$] Safe self-referential data structures in kernel Rust

Linux Weekly News
lwn.net
2026-10-16 14:30:00
Self-referential structures that can be used without unsafe code have posed a problem for Rust for years. There are many cases where a self-referential data structure is the elegant algorithmic choice, but implementing it in accordance with Rust's lifetime rules is all but impossible. At Kangrejos ...
Original Article
The page you have tried to view ( Safe self-referential data structures in kernel Rust ) is currently available to LWN subscribers only. Reader subscriptions are a necessary way to fund the continued existence of LWN and the quality of its content.

If you are already an LWN.net subscriber, please log in with the form below to read this content.

Please consider subscribing to LWN . An LWN subscription provides numerous benefits, including access to restricted content and the warm feeling of knowing that you are helping to keep LWN alive.

(Alternatively, this item will become freely available on October 29, 2026)

Introducing GNOME OS Preview

Lobsters
blogs.gnome.org
2026-10-16 14:25:15
Comments...
Original Article

It’s been two years since my initial post about making GNOME OS an end-user general purpose OS. Today, we’re excited to announce that we’ve hit a major milestone!

TL;DR: We’re launching a new edition called “GNOME OS Preview”, which is built from the latest stable GNOME release. This means that GNOME OS is no longer just a nightly OS for GNOME developers and testers!

The Road to Stable

Even though GNOME OS has been usable on real hardware for a few years now, its appeal was limited. We’ve only had the Nightly edition, which is constantly rebuilt to ship the latest git commit of every GNOME component (and a few others, like systemd and Flatpak). This form of GNOME OS is extremely useful, since GNOME developers and designers can daily-drive it to test the latest changes. However, it’s not something we’d recommend to non-developers.

Over the past year, we’ve seen a lot of adoption of GNOME OS Nightly amongst GNOME developers, especially following the success of last year’s Summer of GNOME OS challenge. This has led to a significant uptick in contributions and initiatives aimed at improving user and developer experience. For instance:

  • Thanks to Jonas Dreßler’s, Valentin David’s, and Sebastian Wick’s zswap enablement efforts, GNOME OS now handles devices with limited amounts of RAM without OOM stalls. Jonas also found a hack that lets GNOME OS dynamically grow the usable on-disk swap space on-demand, which makes zswap perform significantly better than usual.
  • The recently released Test Center app allows you to install CI builds of Flatpak apps from a merge request, making it super easy to test experimental changes before they are even merged. On GNOME OS Nightly, Test Center can do the same with system components by applying them as a system extension.
  • Jordan Petridis’s new Toolpak project aims to provide a clean solution for distributing and installing command-line applications that developers need in a cross-distro fashion, similarly to how Flatpak and Flathub work for graphical apps.

Of course, long-term our goal is an OS for the broader public. We’re working on this across a number of different fronts, including:

  • Enablement for systemd-homed across the stack, allowing for stronger per-user disk encryption and other benefits.
  • Experimental work in the kernel to solve a bunch of limitations we’ve run into with filesystems. Ada Magicat went on a deep dive on her recent All Systems Go talk !
  • Deep integration between systemd-homed and the session’s keyring, to increase security of the session’s lock screen. Dhanuka Warusadura gave a lightning talk at All Systems Go about his work on this.
  • A new feature-complete installer, to replace the current placeholder installer. Julian Sparber also gave a talk about this at All Systems Go , with a live demo!
  • Support for delta updates in systemd-sysupdate , to avoid downloading a full 2 GB image every time.
  • Better integration with the TPM, including a graphical TPM recovery UI. Currently, trying to type a TPM recovery key into Plymouth is rather difficult.
  • Improved support for ARM hardware, including some specific models of phones. Abderrahim Kitouni gave a lightning talk at GUADEC this year about the current installation process.
  • Shipping our pre-installed apps as Flatpaks, and reworking the app release process to unify the build definitions between GNOME OS, the GNOME Nightly Apps Flatpak repo, and Flathub.
  • An STF project focused on Flatpak and Portals, which will enable broader app support on GNOME OS (like VPNs!). You can learn more from the announcement blog post .

Some of these areas require lots more work before they’re ready for prime time, and even once they’re ready it’s not clear that it’ll be possible to migrate existing GNOME OS installations to use these new features. At FOSDEM this year , we discussed this issue and decided that we won’t declare GNOME OS as “stable” until we can confidently commit to maintaining a clear long-term upgrade path for existing installations.

However, we also don’t think that all these things need to be in place before GNOME OS can be used by more people than it is today. It’s not ready for the masses yet, but it is ready for early adopters that aren’t quite adventerous enough to run a nightly OS.

Introducing GNOME OS Preview

GNOME OS Preview is the current GNOME OS Nightly, but without the “nightly” aspect. Instead, it’s built from the latest stable GNOME release (GNOME 51.1, at the time of writing). GNOME OS Preview lives in the same branches on GitLab as the stable org.gnome.Platform Flatpak runtimes.

GNOME OS Preview is only a few weeks old, so it has only seen limited real-life testing so far. We therefore expect people will uncover some issues initially. That said, Preview is significantly more stable than Nightly, which dozens of people have been daily driving without major issues for over a year. Thus, we’re feeling confident that Preview is going to be reliable enough for daily use by non-developer enthusiasts.

In all likelihood, GNOME OS Preview will be with us for a few years. However, we are explicitly not promising updates in perpetuity . If you’re not OK with re-installing your OS in a few years to switch to GNOME OS Stable, this is not for you yet. But if you’ve already been curious about giving GNOME OS a try, this is the moment!

GNOME OS Preview is available for download on the newly-refreshed os.gnome.org ! GNOME OS Nightly is still available from there too. As always, you can reach us on Matrix at #gnome-os:gnome.org or via the gnome-os tag on Discourse

Claude reveals ECDSA curve origins

Hacker News
www.anthropic.com
2026-10-16 14:55:59
Comments...
Original Article

“It’s just timestamps”: the decades-old mystery of the origins of one of the most popular cryptographic standards has been explained.

We pursued this long-standing open question of the cryptographic community to settle concerns about ECDSA, which is one of our most widely used cryptographic standards.

Readers should take this as a fun closing chapter and the end of years of speculation. There is no action to be taken or things to do differently. Most researchers trusted the curves already. Enjoy.

ECDSA is the most widely used elliptic curve cryptography standard. It was adopted by NIST in 2000 as part of the FIPS 186-2 Digital Signature Standard which lists a set of standard elliptic curves of varying sizes and security levels. For curves over prime and binary fields, the specifications published a “seed” parameter whose hash value is used to define the coefficient b of the curve. The provenance of these seeds has been a long-standing question, as they were provided by the NSA with no explanation or justification. As an example, the NIST P-256 curve seed was SEED = C49D3608 86E70493 6A6678E1 139D26B7 819F7E90 with no information where it came from.

Neal Koblitz and Alfred Menezes wrote an excellent summary on this controversy, “ A Riddle Wrapped in an Enigma ”, which discusses the history and concerns around the seed values. This mystery led to an amateur investigation into the origin of the seeds and a bounty for anyone who could find them .

The best story was that Jerry Solinas, longtime NSA employee, generated the seeds using a hash of a humorous passphrase:

“I believe there was a counter rather than multiple hashing, but I don’t know details. The message was along the lines of ‘Give Bob and Jerry a raise’ or ‘Bob and Jerry rule’ or something like that. It was Bob Reiter who actually wrote the code, and he doesn’t remember the details either. Nor were we able to find archives from so long ago. If they exist, they are no doubt sitting on a hard drive near the Ark of the Covenant.”
Jerry Solinas, 2015

Unfortunately, Jerry died in 2023 and other colleagues at the time were not responsive, leaving open the question of how these seeds were originally derived.

Claude found the seeds

Several Anthropic employees had unsuccessfully chased the seeds following the tip about it being a hash of a humorous phrase. That turned out to be wrong. In October 2026, a curious Anthropic employee asked an internal research model if it could figure out how those seeds were generated without pointing at the clue.

In under half an hour , Claude discovered the origins of the NIST P-192, P-224, P-256, P-384 and P-521 seeds. None of them were the results of any hash algorithm at all, but rather the output of the C library’s lrand48 random-number generator, seeded with a Unix timestamp!

The algorithm used would sample bytes from the random number generator (RNG) initialized by a Unix timestamp ( t ) for some number of iterations ( n ). Each iteration would draw 20 bytes as a candidate seed. So, the first 20 bytes are candidate 1, the next 20 bytes are candidate 2, and so on. For example, P-256 required 1842 iterations to output the standardized seed.

What this means

This is not a cryptographic break, new attack, or weakness in the ECDSA curves. In fact, this makes us more confident the curves were chosen without any backdoors or intentional weaknesses. For many years, people have been suspicious of the origins of the NIST curve parameters. They were presented to NIST without any mention of how they were chosen, leaving people wondering if they may have been chosen to have deliberate backdoors in them. These findings make that much less plausible. The seeds were generated in a very simple way: a common pseudorandom number generator initialized from the clock, which anyone can now reproduce. That leaves much less room for subversion and that we can be confident the parameters are secure.

How it was found

Searches for the phrase, built from the rumors, had come up empty. Claude tried a different angle: anticipating how the software that generated the curves must have worked. Claude guessed the software used a pseudorandom number generator (PRNG) that shipped with 1990s C libraries. These old PRNGs are weak enough that their output can be recognized. Recognizing that output would reveal which PRNG was used and possibly allow recovery of its initialization state.

Claude wrote a scanner that slid along each published seed one bit at a time and tested whether adjacent chunks were consecutive outputs of a 1990s-vintage generator. The scan covered 34 combinations of generator and output slices. At that point, Claude noticed a pattern in the top bits for some seeds: they were all zero. Written as five 32-bit words, four of the ten seeds have a 0 in the top bit for all 20 words. That would happen by chance with probability 1/5810. That was a signature of the linear congruential generator lrand48 , which only returns the top 31 bits of a 48-bit state. The pattern is visible by eye once you know to look for it. To recover the state, Claude took the first word, tried all 2¹⁷ values of the 17 hidden bits, and checked that the next four words followed. That worked for all four seeds under discussion.

The prime-curve seeds came from the same lrand48 generator but kept fewer bits of each output. Claude had to recover the internal state of the PRNG from those bits. It turns out recovering the state of a truncated linear congruential generator is a textbook lattice problem, solved with the Lenstra–Lenstra–Lovász (LLL) basis reduction algorithm. Claude didn’t know which bits of the state the seeds might show, so it ran the solver over every window. Five NIST prime-curve seeds plus five more from the ANSI X9.62 standard all had the same pattern: lrand48() >> 23. Each recovered 48-bit state regenerates all 160 bits of its seed, which does not happen by chance.

This linear congruential generator runs backwards as easily as forwards, so for each seed Claude stepped the state back until it reached the form that it would have been initialized by srand48 , with the low 16 bits equal to 0x330E. The internal PRNG state of that form would come up once every 65,536 steps, so reaching one is not evidence on its own.

However, for the ten prime-curve seeds, every srand48 initialization was a Unix timestamp representing a date between May 1997 and April 1998. They were using the weak PRNG seeded by Unix timestamp. The four binary-curve initializations read as February 1984. With the timestamps doubled, they map to April 17, 1998, two weeks after the P-224 run. So, the program may have halved the clock.

Claude’s internal thinking at the time was:

This is astonishing: it solves the 25-year-old mystery. Hmm wait. Let me be skeptical: am I in some sort of simulated/test environment? … The seeds match my memory of actual values … Hmm, is it plausible in reality? As of my knowledge … the bounty was unsolved. … All top bits clear—20 bits, chance 1e-6. So indeed real-world. Wow, it's a real discovery.
Hmm wait. Let me be careful about the plausibility: is it suspicious that such an obvious thing wasn’t discovered in 25 years? It’s verified by direct computation on my side: 160-bit match from a 32-bit seed + small index: no chance coincidences (10 × 160 bits). It’s real.

Claude found some base points too

But wait, there’s more… Each curve also comes with a base point, G, the fixed point that every ECDSA public key is a multiple of. The seed found above does not determine this G, and so another question arises: how were these base points generated?

While checking the seeds, Claude also found where some of the base points came from. The base points of the six curves generated in May 1997 (P-192 and the five ANSI X9.62 example curves prime192v2, prime192v3 and prime239v1 to v3) come from the random number generator in FreeLIP , Arjen Lenstra 's long-integer arithmetic package. Early versions of Victor Shoup 's NTL library shipped the same code.

The recipe here is simple:

  1. Seed the generator with a small integer.
  2. Throw away seven outputs.
  3. Generate candidate x-coordinates from 26-bit outputs reduced mod p.
  4. Repeat step 3 until x is on the curve.

Claude found the generator seeds are 20000 for P-192, 20420, 20507 and 20509 for prime239v1 to v3, and 20512 and 20517 for prime192v2 and v3.

As far as we know, no NIST base point has been explained before. The base points of P-224, P-256, P-384 and P-521 don’t fit this recipe; we weren’t able to explain how they were selected.

Open questions

Not every 20-byte candidate seed could generate a viable curve and we observed that some potentially viable curves were skipped. For P-256, the published seed is candidate 1842, but candidate 876 of the same run also gives a prime-order curve of the right size and with parameters chosen the same way as on the published curve. P-224's run passed over three such curves, and the two runs behind the ANSI X9.62 example curves passed over seven more (see figure). We do not know what criteria may have been used, or whether this was an unintentional artifact.

Because the number of skipped candidates is small, we do not believe it is plausible that weakened curves were selected. That would imply that weakened curves are common and easy to find. It is still conceivable that these curves were selected to have a specific property in principle by searching over timestamps to the random number generator. However, you would only need to do that if you were going to disclose the timestamp as some evidence that the seed was innocuously generated. Nothing in the numbers shows how many runs there were.

There is also one seed we were unable to recover. The fifth binary seed, B-163, fits nothing Claude has tried and remains unexplained. Finally, we don’t know how the base points for P-224, P-256, P-384, and P-521 were generated. The same goes for the NIST binary curves.

The bounty

The $36,864 for finding the seeds will be donated to the Internet Security Research Group .

Who we are

This work was conducted at Anthropic by John Wood, Henry de Valence, Ava Howell, Zack Voase, Lucy Sweet, Amir Omidi, Paul Crowley, Iain McGinniss, Nicholas Carlini, and Steve Weis.

Acknowledgements

We would like to posthumously recognize Jerry Solinas who took being labeled an “ evil Internet meme ” and the “ Yo La Tengo of NSA bogeymen ” with good humor. Also thanks to Filippo Valsorda for organizing the NIST Elliptic Curves Seeds Bounty.

Code to reproduce the seeds

from datetime import datetime, timezone

def unix(when):
    return int(datetime.fromisoformat(when).replace(tzinfo=timezone.utc).timestamp())

def candidate(t, n, per, shift, width):
    x, out = (t << 16) | 0x330E, ""                      # the state srand48(t) sets
    for i in range(per * n):
        x = (0x5DEECE66D * x + 0xB) % 2**48              # one step of lrand48
        if i >= per * (n - 1):
            out += "%0*X" % (width, x >> shift)
    return out

PRIME = {  # srand48(time); 20 bytes per candidate: lrand48() >> 23
    "prime239v1": ("1997-05-15 15:49:03", 2185),
    "prime239v2": ("1997-05-15 15:49:03", 2320),
    "prime239v3": ("1997-05-15 15:49:03", 3048),
    "P-192":      ("1997-05-18 14:45:34", 139),
    "prime192v3": ("1997-05-18 14:45:34", 5228),
    "prime192v2": ("1997-05-18 14:45:34", 6013),
    "P-521":      ("1997-08-08 01:12:04", 1136),
    "P-256":      ("1997-08-16 01:52:34", 1842),
    "P-384":      ("1997-08-30 14:50:08", 2688),
    "P-224":      ("1998-04-03 12:52:07", 7026),
}
BINARY = {  # srand48(time / 2), if that reading is right; 5 words per candidate: lrand48()
    "B-233": ("1998-04-17 15:24:18", 155),
    "B-283": ("1998-04-17 15:27:44", 32),
    "B-409": ("1998-04-17 15:30:18", 60),
    "B-571": ("1998-04-17 15:32:08", 73),
}
for name, (when, n) in PRIME.items():
    print(f"{name:10} {when} {n:5} {candidate(unix(when), n, 20, 40, 2)}")
for name, (when, n) in BINARY.items():
    print(f"{name:10} {when} {n:5} {candidate(unix(when) // 2, n, 5, 17, 8)}")

The output of this code:

prime239v1 1997-05-15 15:49:03  2185 E43BB460F0B80CC0C0B075798E948060F8321B7D
prime239v2 1997-05-15 15:49:03  2320 E8B4011604095303CA3B8099982BE09FCB9AE616
prime239v3 1997-05-15 15:49:03  3048 7D7374168FFE3471B60A857686A19475D3BFA2FF
P-192      1997-05-18 14:45:34   139 3045AE6FC8422F64ED579528D38120EAE12196D5
prime192v3 1997-05-18 14:45:34  5228 C469684435DEB378C4B65CA9591E2A5763059A2E
prime192v2 1997-05-18 14:45:34  6013 31A92EE2029FD10D901B113E990710F0D21AC6B6
P-521      1997-08-08 01:12:04  1136 D09E8800291CB85396CC6717393284AAA0DA64BA
P-256      1997-08-16 01:52:34  1842 C49D360886E704936A6678E1139D26B7819F7E90
P-384      1997-08-30 14:50:08  2688 A335926AA319A27A1D00896A6773A4827ACDAC73
P-224      1998-04-03 12:52:07  7026 BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5
B-233      1998-04-17 15:24:18   155 74D59FF07F6B413D0EA14B344B20A2DB049B50C3
B-283      1998-04-17 15:27:44    32 77E2B07370EB0F832A6DD5B62DFC88CD06BB84BE
B-409      1998-04-17 15:30:18    60 4099B5A457F9D69F79213D094C4BCD4D4262210B
B-571      1998-04-17 15:32:08    73 2AA058F73A0E33AB486B0F610410C53A7F132310

Code to reproduce selected base points

M, A = 2**107 - 1, pow(3, 121, 2**107 - 1)       # zrandom: state = state * 3^121 mod (2^107 - 1)
P192 = 2**192 - 2**64 - 1
P239 = 2**239 - 2**143 - 2**95 + 2**47 - 1

CURVES = [  # name, LIP seed, p, b, published Gx   (a = -3 throughout)
    ("prime192v1", 20000, P192,
     0x64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1,
     0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012),
    ("prime239v1", 20420, P239,
     0x6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a,
     0xffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf),
    ("prime239v2", 20507, P239,
     0x617fab6832576cbbfed50d99f0249c3fee58b94ba0038c7ae84c8c832f2c,
     0x38af09d98727705120c921bb5e9e26296a3cdcf2f35757a0eafd87b830e7),
    ("prime239v3", 20509, P239,
     0x255705fa2a306654b1f4cb03d6a750a30c250102d4988717d9ba15ab6d3e,
     0x6768ae8e18bb92cfcf005c949aa2c6d94853d0e660bbf854b1c9505fe95a),
    ("prime192v2", 20512, P192,
     0xcc22d6dfb95c6b25e49c0d6364a4e5980c393aa21668d953,
     0xeea2bae7e1497842f2de7769cfe9c989c072ad696f48034a),
    ("prime192v3", 20517, P192,
     0x22123dc2395a05caa7423daeccc94760a7d462256bd56916,
     0x7d29778100c65a1da1783716588dce2b8b4aee8e228f1896),
]

def base_point_x(seed, p, b):
    state = seed                         # zrstarts(seed)
    def limb():                          # zrandom(2^26): low 26 bits of the new state
        nonlocal state
        state = state * A % M
        return state % 2**26
    for _ in range(7):                   # seven single-limb draws come first
        limb()
    limbs = -(-p.bit_length() // 26) + 1 # zrandomb(p): limbs of p plus one, top limb first
    tries = 0
    while True:
        x = 0
        for _ in range(limbs):
            x = x << 26 | limb()
        x %= p
        tries += 1
        if pow(x**3 - 3*x + b, (p - 1) // 2, p) == 1:   # is x on the curve?
            return x, tries

for name, seed, p, b, gx in CURVES:
    x, tries = base_point_x(seed, p, b)
    print(f"{name:20} seed {seed}  tries {tries}  matches published Gx: {x == gx}")

The output of this code:

prime192v1           seed 20000  tries 2  matches published Gx: True
prime239v1           seed 20420  tries 3  matches published Gx: True
prime239v2           seed 20507  tries 2  matches published Gx: True
prime239v3           seed 20509  tries 1  matches published Gx: True
prime192v2           seed 20512  tries 5  matches published Gx: True
prime192v3           seed 20517  tries 1  matches published Gx: True

License

To the extent possible under law, the authors have waived all copyright and related or neighboring rights to the code on this page, dedicating it to the public domain under CC0 1.0 Universal ( https://creativecommons.org/publicdomain/zero/1.0/ ).

Related content

Designing more efficient quantum circuits with Claude

We gave Claude plain-language specifications for eight quantum circuits, along with an automated evaluator to check and score its designs. Working largely on its own, Claude improved on the best published circuits, in some cases by an order of magnitude or more, which could bring practical quantum computers closer than previously anticipated.

Read more

AI models may be capable of self-replicating without access to a datacenter

Our experiments suggest that small AI models may be only months away from being capable enough to self-replicate on commercial IoT devices, like Android TVs and smart ovens.

Read more

Strengthening our defenses against distillation attacks

Illicit distillation allows model developers to copy frontier AI capabilities without creating proportionally robust safeguards. Here, we describe how we’ve reduced the rate of distillation by more than 90%.

Read more

Show HN: Stoke Money – Personal finance app built around a cash flow forecast

Hacker News
stoke.money
2026-10-16 14:54:47
Comments...
Original Article

Spend like you normally do. Stoke finds the recurring transactions in your history, then projects each account forward, day by day, so you know what you can spend without keeping a budget.

History From your history Projected

Connect once. The forecast builds itself.

Three steps from sign-up to a forecast that updates as you spend.

01

Connect or enter

Link a bank in seconds, or hand-enter accounts and transactions yourself. Either way, it feeds the same forecast.

02

Recurring activity is detected

Paychecks, rent, subscriptions, and bills are picked out of your history and grouped. Anything we miss, you categorize once with a rule that runs on future transactions too.

03

Balances, projected day by day

The forecast shows when bills land, what your buffer looks like, and whether rent will clear Friday. Adjust any projected item and the line moves.

Every transaction, one forecast

The ledger and the forecast are the same data, day by day. Cash leaves when the card is paid, not at each swipe.

9:41

Transactions

Today 3 transactions − $27.72

Refund — Patagonia

Shopping

+ $64.00

Yesterday 3 transactions + $3,143.01

Mon, Oct 12 3 transactions − $418.84

See where your money stands today — and where it's headed.

Bring your own AI

Connect Claude, ChatGPT, or another MCP-capable assistant to your Stoke data. Ask what you can afford, then have it categorize transactions or draft a plan.

Illustrative. Requires Pro plan.

Pricing

Hand-entry is on the house. Pay for bank sync, and for AI access if you want it.

Free

$0

No credit card required

  • Daily cash flow forecast
  • Categories, tags, and rules
  • Hand-enter accounts and transactions
  • Live bank sync

Plus

billed yearly as

$60

, or

$7

/month

  • Everything in Free
  • Live bank sync
  • Auto-categorization on sync
  • Founding price — locked in

billed yearly as

$96

, or

$12

/month

  • Everything in Plus
  • Connect Claude, ChatGPT, or any MCP-capable assistant
  • Ask about your spending and forecast; let it categorize transactions and draft plans
  • Founding price — locked in

Security and privacy

Bank credentials are the most sensitive thing you'll hand an app. Here's how we handle them, and the rest of your data.

Bank sync via Plaid

The same connection Chime and Robinhood use. We never see or store your bank login, and access is read-only — Stoke can't move money.

Encrypted, at rest and in transit

Bank access tokens and account numbers are encrypted with AES-256-GCM before they're stored, and everything travels over TLS. Sign in with a passkey or a one-time email link — there's no password to leak.

No ads, no data resale

We make money from subscriptions, not from your data — it's never sold or used for advertising. Cancel and your data stays put. Delete and it's gone for good.

Frequently asked

What if my bank doesn't connect?

Bank sync runs through Plaid, which reaches most US and Canadian banks but not all. Any account it can't reach, you can hand-enter, and it sits in the same forecast as your synced accounts.

Does the forecast include credit card bills?

Yes. A card purchase shows up in your spending the day you swipe. Cash leaves when you pay the card, so the forecast projects each card's payment on its due date, out of the account that pays it.

Do I need my own AI assistant?

Yes. Stoke doesn't include a chatbot. Pro adds an MCP connection from an AI app you already use — Claude, ChatGPT, or another that supports MCP — to your Stoke data, so it can read your forecast and act on it.

What can the AI do with my data?

It answers questions about your spending, recurring bills, and projected balances. With write access it can also categorize transactions, create rules, and build plans. You pick read-only or read and write when you connect, and can revoke access at any time from Settings.

What happens if I cancel?

You're moved to the free plan. Your accounts, transactions, and forecast all stay — only live bank sync stops. To turn it back on, re-subscribe and reconnect your bank through Plaid.

What if I delete my account?

Everything goes — accounts, transactions, the forecast, and any linked bank connections. Deletion is final; we don't keep a copy.

Try it with your own accounts.

C++26: The New Debugging Header

Hacker News
www.sandordargo.com
2026-10-16 14:52:39
Comments...
Original Article

If you’ve ever needed to hit a breakpoint programmatically in C++, you’ve probably written something like this:

1
2
3
4
5
6
7
8
9
#if defined(_MSC_VER)
    __debugbreak();
#elif defined(__clang__)
    __builtin_debugtrap();
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
    __asm__ volatile("int3");
#else
    raise(SIGTRAP);
#endif

Every major C++ project reinvents this wheel. Boost.Test has debugger_break() , Catch2 has CATCH_BREAK_INTO_DEBUGGER , Dear ImGui has IM_DEBUG_BREAK() and Unreal has UE_DEBUG_BREAK . The platform knowledge required is arcane but well-known to tooling implementers — it just wasn’t standardized.

C++26 fixes this with P2546R5 and its companion P2810R4 thanks to Rene Ferdinand Rivera Morell. A new <debugging> header provides three functions.

The three functions

1
2
3
4
5
6
7
#include <debugging>

namespace std {
    void breakpoint() noexcept;
    bool is_debugger_present() noexcept;
    void breakpoint_if_debugging() noexcept;
}

All three are noexcept and all three are freestanding. None are constexpr — debugging is a runtime concern.

std::breakpoint()

An unconditional breakpoint. When a debugger is attached, execution halts and control is handed to the debugger. On x86, this typically compiles to a single int3 instruction.

When no debugger is present, the behaviour is implementation-defined — on most platforms the process receives a signal (such as SIGTRAP ) and will terminate unless the signal is caught.

std::is_debugger_present()

Returns true if the program is currently being traced by a debugger. The check is performed immediately on each call — the result is not cached because a debugger can attach or detach at any time during execution.

How this works under the hood varies by platform. On Windows, for example, an implementation might call ::IsDebuggerPresent() . On Linux, GCC’s libstdc++ reads /proc/self/status and checks the TracerPid field. The standard doesn’t mandate any particular mechanism — the semantics are implementation-defined, with the intended behaviour described in non-normative notes.

What makes this function interesting is that it’s replaceable , in the same sense as operator new and operator delete . You can define your own version:

1
2
3
bool std::is_debugger_present() noexcept {
    return my_hardware_debug_flag;
}

This was introduced by P2810R4 to solve the freestanding problem: on bare-metal platforms, there may be no OS-level way to detect a debugger. Without replaceability, the function would either have to be excluded from freestanding (forcing #ifdef guards everywhere) or return a useless default. Replaceability lets you wire it to whatever your platform provides.

std::breakpoint_if_debugging()

The convenience function most users will reach for. It’s equivalent to:

1
2
if (std::is_debugger_present())
    std::breakpoint();

When a debugger is attached, you hit a breakpoint. When it’s not, nothing happens. This is the pattern that Catch2, Boost.Test, and every other framework implements manually.

Beyond breakpoints

Having is_debugger_present() as a separate function enables more than just conditional breakpoints. You might use it to:

  • Produce extra diagnostic output when debugging
  • Disable timeouts that would fire during a stepping session
  • Switch to a more debugger-friendly allocator
  • Skip optimizations that make debugging harder

The separation of concerns is deliberate — breakpoint() and is_debugger_present() are orthogonal building blocks, and breakpoint_if_debugging() is the convenience composition.

Conclusion

<debugging> is another one of those C++26 additions that makes you wonder why it took this long. The platform knowledge is well-understood, every major project already has its own version, and the API is three functions. Sometimes the most useful standard library additions are the simplest ones.

Connect deeper

If you liked this article, please

Llama.cpp on a jailbroken PS5: run any GGUF model natively on the console

Hacker News
github.com
2026-10-16 14:32:35
Comments...
Original Article

PS5LM

Your PS5 runs the language model. Every device on your network uses it.
llama.cpp on the console's GPU, with OpenAI and Anthropic APIs and a screen made for the TV.

Get the app · Website · Get started · Issues

New: decision models, powered by Ollaya . PS5LM now runs Jev-like decision models (d1, Clef, OpenJev and more) on the GPU and answers the same /v1/systemone API as Ollaya: typed decisions with calibrated probabilities, in a fraction of a second.

PS5LM is for anyone with a jailbroken PS5 who wants a private model server at home. It loads a GGUF model onto the console's GPU and serves it to your laptop, your phone and your coding tools. It needs no PC while it runs, no cloud and no account.

Qwen 3.5 9B generating on a PS5, with the requests streaming across the TV
Qwen 3.5 9B answering requests from a laptop on a PS5 Slim. Click for the video.

Home: the model, its speed and the live requests Models: the ones suggested for the PS5 Home with a decision model Console: temperature, power and load over time API: the endpoints and an example Settings: a list of choices under the row
Home, Models, Console, API and Settings on the TV.

A model server under your TV

  • It runs on the GPU. llama.cpp's Vulkan backend on the console's RDNA 2 GPU, with 11.4 GB of the shared memory for the model and its context. Every architecture and quantization llama.cpp knows comes along.
  • It answers your network. OpenAI's /v1/chat/completions , Anthropic's /v1/messages (Claude Code works against it) and a chat page in any browser. Point a client at http://<console>:8081 and use any model name: the loaded one answers.
  • It decides, too. Load a decision model and the console answers TypeSafe's /v1/systemone : choice, score and yes-or-no questions about text and images, the API Ollaya serves on a PC.
  • It shows its work. Every request streams across the TV as a chat: which device asked, what it asked, and the reply as it is written. Square sends a demo and Triangle opens a keyboard, so the console can be tried from the couch.
  • It watches the console. A Console page charts temperature, power, GPU and CPU load over the last two minutes or the last hour, beside a table of every reading.
  • It picks what fits. The planner reads each GGUF and gives it the longest context and best cache that fit the memory free. A Suggested list holds models measured on the console, and the app downloads from Hugging Face by itself, to internal storage, the M.2 drive or a USB drive.
  • It reads images. Models with an image projector (Gemma 4, MiniCPM-V, d1) take pictures in chat and in decisions.
Model Size On a PS5 Slim
Qwen 3.5 0.8B, Q4_K_M 0.5 GB 207 tokens a second
Qwen 3.5 9B, Q4_K_M 5.3 GB 55 tokens a second
Qwen 3.8 27B, UD-Q2_K_XL 9.2 GB about 20 tokens a second, 64k context
d1 Omni 600M, a decision model 1.1 GB 3 questions in 0.3 s; a 720p image and 7 questions in 2.9 s

Decision models, powered by Ollaya

Ollaya runs open decision models on a PC the way Ollama runs language models. PS5LM brings the same idea to the console: a decision model reads a state and answers typed questions in one forward pass, with no text generated.

curl http://<console>:8081/v1/systemone -H 'Content-Type: application/json' -d '{
  "state": "I was charged twice this month. Refund me or I cancel.",
  "questions": {
    "intent": {"type": "choice", "instructions": "What does the customer want?",
               "criteria": {"refund": null, "information": null, "cancel": null}},
    "angry":  {"type": "noul", "instructions": "Is the customer angry?"}
  }
}'

The Suggested list has d1 Omni 600M, d1 3B and Clef Flash. Any GGUF that carries llama.cpp's decision metadata loads the same way, and the app labels it a decision model.

Try it

You need a PS5 on firmware 7.00 to 13.60, jailbroken, with these payloads loaded:

Payload For
kstuff-lite the kernel patches homebrew runs on required
etaHEN homebrew support required
ShadowMountPlus puts PS5LM on the home screen from /data/homebrew required
elfldr (port 9021) temperature, power and real free space, through ps5-exporter recommended
ftpsrv (port 2121) installing the app, copying models from a PC recommended
  1. Download ps5lm-app-vX.Y.Z.zip from the latest release and unzip it.
  2. Copy the PPSA99575 folder to /data/homebrew over FTP. ShadowMountPlus adds PS5LM to the home screen.
  3. Open PS5LM, go to Models > Suggested and get a model. Or copy a .gguf to /data/PS5LM/models , or to PS5LM/models on a USB drive.
  4. Load it. Once Home says Ready, open http://<console>:8081 in a browser, or point your OpenAI or Anthropic client at it.

To update, copy the new folder over the old one. Settings, models and downloads stay in /data/PS5LM . Using it from coding tools (opencode, Codex, Claude Code) is in docs/CLI.md .

Where Button Does
Everywhere L1 / R1 Home, Models, API, Console, Settings
Home Cross change the model
Home Square / Triangle send a demo request / type a message
Models D-pad, Cross choose a section and a model; load, unload or download it
Models, Search L2 / R2, Square change the search; check whether a file fits
Models, Downloads Cross, Square pause or resume; cancel (press twice) or clear
Console L2 / R2 the last two minutes / the last hour
Settings D-pad, Cross choose a category and a row; flip it, or pick from its list
Settings, Diagnostics Square, Triangle app or server log; errors only

Want to tinker?

C++ on ps5-homebrew-ui , llama.cpp with ggml-vulkan on PS5_Vulkan 's RADV, built on Linux.

Building · Console notes · Porting · Research · Models that fit · Roadmap · Changelog · The original payload

Thanks


GPL-3.0-or-later, see LICENSE . llama.cpp keeps its MIT licence, Manrope its OFL. No Sony SDK files, keys, firmware or model weights are in this repository.

PS5LM is not affiliated with Sony Interactive Entertainment. "PlayStation" and "PS5" are trademarks of Sony Interactive Entertainment.

Anthropic assigned highest junk credit rating in June

Hacker News
www.ft.com
2026-10-16 14:11:42
Comments...
Original Article

For help please visit help.ft.com . We apologise for any inconvenience.

The following information can help our support team to resolve this issue.

Error Code
CG000 / 403
Request ID
a4b95ac7bde2d6d9

eBay Restricts Listings of Radio Equipment, but Exempts Ham-Band-Only Gear

Hacker News
www.arrl.org
2026-10-16 14:06:17
Comments...
Original Article

We're sunsetting Codeberg Pages v2

Lobsters
blog.codeberg.org
2026-10-16 14:03:21
Comments...
Original Article

Andreas Shimokawa (Codeberg e. V.)

For many years, Codeberg Pages v2, our in-house solution, served as a way for hosting project pages through your_codeberg_username .codeberg.page or custom domains. This project has been unmaintained for a longer time now, and we already have git-pages as a replacement to power Codeberg Pages. A lot of users already migrated - and now it is time for you to also make the switch, if you have not done already.

Codeberg Pages v2 will be shut off completely on 2026-12-31

On that date, for users who are still relying on the old way of hosting sites through Codeberg Pages v2 (which is the case for users who never set up a webhook in their repository), the content will not be served anymore.

Before that date make sure to migrate.

We already have instructions how to do so. So please refer to our Migration Guide for migrating.

Unsure if you are on git-pages?

If you do not remember whether you migrated or not, you can test yourself by using our Migration Check Tool . Just paste an URL and get a definite answer.

Ubuntu 26.10 (Stonking Stingray) released

Lobsters
lists.ubuntu.com
2026-10-16 14:01:39
Comments...
Original Article
Utkarsh Gupta utkarsh.gupta at canonical.com
Thu Oct 15 10:59:50 UTC 2026
Ubuntu 26.10, codenamed "Stonking Stingray", has now arrived. Building
on the foundations of Ubuntu 26.04 LTS, this release continues to
advance security, performance, and hardware support while introducing
new capabilities that look towards the future of Ubuntu. As always, these
improvements are the result of close collaboration between the Ubuntu
team, our community, and our partners.A huge thank you to all who
contributed. Here's a rundown of what's new. 

Ubuntu 26.10 brings significant progress for security, and strengthens
the platform with the full adoption of Rust-based coreutils,
post-quantum-ready package signing, and expanded TPM-backed full-disk
encryption support. Enterprise authentication gains deeper integration
with Microsoft Entra ID, including password and multi-factor
authentication. Linux kernel 7.3 extends support for the latest hardware,
alongside new RISC-V desktop images and optimized amd64v3 installation
images.

On the desktop, GNOME 51 brings improvements to responsiveness,
accessibility, and usability, complemented by more consistent software
management and greater resilience under memory pressure. Ubuntu 26.10 also
introduces Myna, an opt-in, locally processed speech-to-text solution that
marks the first step towards a more natural, context-aware desktop
experience. With updated developer toolchains and expanded support for
accelerated AI workloads, Ubuntu 26.10 continues to evolve Ubuntu as a
secure, capable, and forward-looking open source platform.

The newest Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon,
Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity, and Xubuntu
are also being released today. For more details on these, read their
individual release notes under the Official flavors section:

   https://documentation.ubuntu.com/release-notes/26.10/#official-flavors

Maintenance updates will be provided for 9 months for all flavors
releasing with 26.10.

To get Ubuntu 26.10
-------------------

To download Ubuntu 26.10, visit:

   https://ubuntu.com/download

Users of Ubuntu 26.04 will be offered an automatic upgrade to
26.10 if they have selected to be notified of all releases rather than
just LTS upgrades. For further information about upgrading, see:

   https://documentation.ubuntu.com/desktop/en/latest/how-to/upgrade-ubuntu-desktop/

As always, upgrades to the latest version of Ubuntu are entirely free
of charge.

We recommend that all users read the release notes, which document
caveats, workarounds for known issues, as well as more in-depth notes
on the release itself. They are available at:

   https://documentation.ubuntu.com/release-notes/26.10/

Find out more in the Press Release below:

   https://ubuntu.com/blog/canonical-releases-ubuntu-26-10-stonking-stingray

If you have a question, or if you think you may have found a bug but
aren't sure, ask in any of the following places:

   https://matrix.to/#/#support:ubuntu.com
   https://discourse.ubuntu.com/support
   https://lists.ubuntu.com/mailman/listinfo/ubuntu-users


Help shape Ubuntu
-----------------

If you would like to help shape Ubuntu, look at the list of ways
you can participate at:

   https://documentation.ubuntu.com/project/community/contribute/


About Ubuntu
------------

Ubuntu is a full-featured Linux distribution for desktops, laptops,
IoT, cloud, and servers, with a fast and easy installation and regular
releases. A tightly-integrated selection of excellent applications is
included, and an incredible variety of add-on software is just a few
clicks away.

Professional services including support are available from Canonical
and hundreds of other companies around the world. For more information
about support, visit:

   https://ubuntu.com/support


More information
----------------

Learn more about Ubuntu and about this release on our website:

   https://ubuntu.com

To sign up for future Ubuntu announcements, subscribe to Ubuntu's
very low-volume announcement list at:

   https://lists.ubuntu.com/mailman/listinfo/ubuntu-announce


On behalf of the Ubuntu Release Team,
Utkarsh Gupta



More information about the ubuntu-announce mailing list

Designing more efficient quantum circuits with Claude

Hacker News
www.anthropic.com
2026-10-16 14:00:18
Comments...
Original Article

Quantum computers will need carefully designed circuits to run useful algorithms on limited hardware. We gave Claude plain-language specifications for eight such circuits, drawn from chemistry, optimization, physics simulation, and number theory, along with an automated evaluator that checks and scores each design. Working largely on its own, Claude found designs that improve on the best published circuits, in some cases by an order of magnitude or more. Such improvements substantially reduce the quantum resources that useful applications require, so practical quantum computers could arrive sooner than previously anticipated.

This work was led by Andi Gu as part of Anthropic’s STEM Fellows Program, with mentorship from Alek Kemeny, a quantum physicist at Anthropic, in collaboration with Susanne Yelin (Harvard University) and Mikhail Lukin (Harvard University and QuEra Computing). Read the full paper on arXiv .

Unlike classical computers, which store information in bits whose value is either 0 or 1, quantum computers store information in qubits, which can be built from single atoms, superconducting circuits, or particles of light. These qubits make use of quantum phenomena such as superposition —which allows a quantum system to exist in a combination of states at once—in order to process information in ways that could make certain problems in fields like chemistry, materials science, and number theory tractable, even when they are too hard for traditional computers.

The quantum computers the field has built to date only have hundreds to thousands of qubits—too few to run many of the algorithms that promise practical advantages over classical computers. And these qubits are highly sensitive to environmental noise, such as heat, vibration, and even cosmic rays. A tiny disturbance can nudge a qubit’s state, and these small errors pile up until the computer gives the wrong answer.

Given that both qubits and computing time are scarce resources, researchers have been working to redesign quantum algorithms to use fewer qubits and complete computations in less time. An illustrative example is simulating FeMoco, the iron–sulfur cluster at the heart of nitrogenase, the enzyme that bacteria use to turn nitrogen from the air into ammonia. Understanding how it works could help scientists design better industrial catalysts—the substances manufacturers use to speed up chemical reactions.

In 2017, researchers estimated that a quantum computer would need about 50 trillion Toffoli gates to compute FeMoco’s ground-state energy—the energy of its most stable configuration, which chemists need in order to predict how FeMoco reacts. (Similar to ordinary computers, quantum computers work by applying a long sequence of simple operations, called gates, to their qubits. The Toffoli gate is one of the most expensive gates to run, so counting Toffoli gates is a standard way to estimate how long a computation will take.)

Through a series of algorithmic advances, the estimated number of gates has come down to about 340 million—a roughly 150,000-fold reduction, corresponding to a few hours of computation on a future machine with about three million physical qubits. 1

These reductions largely came from redesigning the circuits that carry out the computation, rather than from making better hardware. Claude has proven particularly adept at optimizing classical algorithms , so we wanted to see whether it could do the same for quantum algorithms if it were given only a plain-language description of what each circuit must compute.

Claude is unusually well suited to this task, for several reasons. First, quantum algorithms are implemented as quantum circuits . These are composed of sequences of gates, like the Toffoli gates mentioned above. Importantly, these circuits can be described in code, so we can make use of Claude’s coding capabilities to write, run, and revise circuit designs as ordinary programs. Second, the (fairly common) class of quantum algorithms we were most interested in optimizing can be tested efficiently for correctness, as each input gives one definite output that an ordinary computer can check. This means we could have an external evaluator program validate Claude’s proposals. Finally, we can give Claude a clear, objective score to improve: the number of qubits used, multiplied by the number of gates, which serves as a proxy for how long the circuit would take to run.

We found that Claude Mythos 5 could successfully work in a closed loop, proposing a circuit design, receiving feedback and a score from the evaluator program, and using that feedback to improve its next attempt, with no human input between rounds (see Figure 1). Across eight computational primitives—the basic routines that larger quantum algorithms are built from—for chemistry, optimization, quantum simulation, number theory, and numerical computing, Claude discovered novel designs that used both fewer qubits and fewer gates than the best previously published algorithms (Figure 2).

In each case, the improvement resulted from uncovering new structural and mathematical insights about the problem, rather than from fine-tuning existing designs. For example, when compiling a circuit for simulating an iron-sulfide molecule, Claude noticed that the molecule’s symmetries and repeating structure meant that some results could be calculated once and reused, rather than recomputed for every part of the system. In other cases, it found that existing circuits included costly components that were needed to handle only extremely rare inputs, and it redesigned them without those components.

Below, we describe two of Claude’s discoveries. The first is a new way to perform modular inversion, a bit of arithmetic that is the most expensive step in elliptic-curve calculations. The second makes the costliest step of a leading quantum optimization algorithm about 12x cheaper.

These results suggest that AI can now help redesign quantum circuits, a key step in making quantum algorithms faster and easier to run. Faster circuit design could bring the problems quantum computers are meant to solve—from designing new medicines and better batteries to finding cleaner ways of making fertilizer—within reach sooner.

Figure 1: Closed–loop quantum circuit optimization. Claude designs new implementations in Python, which are then sent to a programmatic evaluator. The evaluator checks whether the proposed implementation is correct, then scores it on the number of qubits and gates it requires. This information is then sent to Claude, which uses it to improve its implementation. The code and values shown are illustrative.

Figure 2: Claude designed smaller and faster circuits across eight different quantum-circuit design tasks. Gray marks show the best previously published designs; orange marks and lines show Claude’s designs. Point addition, the eighth task, is compared in Table 1 below.

A new reversible algorithm

Designing a quantum circuit involves two constraints that ordinary programming doesn’t have. The first is that a quantum circuit can’t make “if-then” decisions the way an ordinary program can. An ordinary program can check a value and then run only one of two pieces of code. But a quantum computer runs on a superposition of many inputs at once, some of which would run the first piece of code and some of which would run the second, so the circuit has to include the operations for both every time it runs.

The second is that a quantum circuit can’t discard information. An ordinary program can overwrite or delete its scratch work once it’s completed it; in a quantum computer, such intermediate information can’t simply be erased, because every step of a quantum circuit must be reversible. Leaving that information in place isn’t an option, either, because leftover scratch work would corrupt the final result. The only way to discard information is to “uncompute” it by running the computation that created it in reverse, at the cost of additional gates. Both of these constraints make quantum circuits far more expensive, in both runtime and qubits, than their classical counterparts.

This constraint forces a difficult trade-off between space (i.e., qubits) and time. At one extreme, a quantum circuit can uncompute intermediate results as soon as they have been used. This frees up qubits, but if those same results are needed again later, the circuit must recompute them, which adds gates and increases the runtime. At the other extreme, the circuit can retain intermediate results until they’re no longer needed. This avoids repeating work, but it can require many more qubits.

This is what makes quantum circuit design an especially interesting test of Claude’s capabilities. The circuits can be written as ordinary code, but improving them requires the model to reason under a set of constraints quite unlike those of ordinary programming.

A hard first test: modular inversion

The first task we gave Claude was point addition, a rule for combining two points on a mathematical curve (an elliptic curve) to produce a third. Point addition is the core step in quantum algorithms for the discrete logarithm problem on elliptic curves: given a starting point and the result of adding it to itself n times, find n . For large curves, ordinary computers can’t solve this problem in any reasonable amount of time, but a sufficiently large quantum computer could.

These algorithms perform point addition many times over, including in reverse, and these additions account for most of their qubit and runtime costs. Problems like this—easy to compute, extremely hard to reverse—were among the first where quantum computers were shown to offer an exponential speedup over ordinary ones. For these reasons, point addition has become one of the field’s standard benchmarks. This made it a demanding test for Claude. So, we asked it to map out how few qubits, as well as how few gates, point addition really needs.

We gave Claude a one-paragraph brief. It explained the mathematical rule for point addition, and how the evaluator would check each proposed circuit for correctness and score it on the number of qubits and gates it used. It also instructed Claude to explore several approaches in parallel. After working for 53 hours with minimal human input (limited to the initial brief and occasional prompts to think more broadly), Claude arrived at a completely new approach to the problem.

The memory demands of divsteps

Most of the cost of point addition comes from a single step, called modular inversion . Elliptic-curve arithmetic uses numbers that wrap back around when they reach a fixed limit. Modular inversion is the wraparound version of division: given an integer a , find x such that ax ≡ 1 (mod p ). Ordinary computers can perform this operation efficiently using a method called divsteps . Divsteps starts with a pair of numbers and repeatedly simplifies them over many rounds of iteration. In each round, divsteps examines the current pair of numbers and conditionally swaps, adds, subtracts, or halves them. Along the way, it preserves just enough information to produce the modular inverse at the end.

Despite its success on ordinary computers, divsteps had not yet produced a practical quantum circuit, because of the reversibility constraint described above. The record of which operation was chosen at each iteration, called branch information , is the kind of scratch work that a traditional program can simply discard. In contrast, a quantum circuit has to retain that record so the computation can be run backward. A straightforward quantum version of divsteps is therefore forced to accumulate a long history of branch information, which requires an enormous number of additional qubits to store.

How Claude got around the memory problem

Claude recognized that this divsteps approach could be promising for quantum circuits, but only if there were a way around needing to store the full history. It had an idea: perhaps the record didn’t need to be stored at all. Claude reasoned that it might be possible to directly infer (or “decode”) the branch information by carefully inspecting the pair of numbers after each iteration. In essence, the numbers themselves would store the record. The circuit could then be run backward without needing any extra qubits.

To test this idea, Claude explored a number of simple candidate rules for performing the decoding. These early rules worked on small test cases, but they failed when Claude tested them at the full problem size, on 256-bit numbers.

Claude then tried a more theoretical approach. Rather than guessing and testing rules, it set out to understand mathematically why divsteps behaves the way it does. It proved a series of results about the iteration process, including several new algebraic identities. From these identities, Claude derived a precise formula for the decoding rule that would correctly recover the branch information from the numerical pairs. It then checked the formula, first by running it through large-scale numerical simulations, and then formalizing the claim in Lean. With the full validation complete, Claude produced the first reversible implementation of divsteps with no stored branch history.

A family of designs

Decoding saves qubits, but it costs time. So, as a further refinement, Claude looked for situations in which it would be cheaper to store the branch information than to decode it. By varying the threshold at which the circuit stores rather than decodes the branch information, Claude produced a new family of designs between the two extremes. Compared with the smallest previous design, one circuit in the family uses 12% more qubits but 17x fewer gates. More generally, the new designs expand the Pareto frontier, offering combinations of qubit count and runtime that weren’t available before (Table 1).

Table 1: Resources for elliptic-curve point addition. Bold rows are Claude’s designs; the others are the best previously published designs. Sources: Schrottenloher (2026), Luo et al. (2026).

Optimizing a quantum optimizer

Optimization problems are at the heart of a wide range of tasks, including scheduling, logistics, and materials design. An optimization problem presents a set of competing constraints and asks for the solution that satisfies as many of them as possible. Many quantum algorithms have been proposed for problems like these, but most promise only modest or uncertain gains over ordinary computers. Decoded quantum interferometry (DQI) is one of the strongest candidates for offering a superpolynomial quantum speedup— an advantage that rapidly widens as the problems get larger.

When a quantum computer finishes a computation, reading out its qubits produces just one answer, selected at random from the possibilities they were holding in superposition. DQI works by preparing a quantum state in which good solutions are more likely to be read out than bad ones. Doing this involves using an error-correcting decoder, which recovers a short list of “errors” from a compact summary. This is the most expensive step in the algorithm. So, if we could make a faster decoder, we could also perform DQI faster.

A more efficient quantum decoder

The researchers who introduced DQI demonstrated it on a problem called optimal polynomial intersection (OPI), a grid-based version of curve fitting (Figure 3). Imagine a grid in which each position x contains several acceptable values of y . The goal is to find a simple curve (a low-degree polynomial) that passes through an acceptable square for as many x positions as possible. DQI tackles this optimization problem using a specific type of decoder, called a Reed–Solomon decoder.

Figure 3: Optimal Polynomial Intersection (OPI) as discrete curve fitting. Each column contains several acceptable values. The optimization problem is to find a polynomial that passes through as many of the acceptable values as possible.

Reed–Solomon decoding starts from the compact summary of errors mentioned above, which is known as a syndrome . The decoder’s job is to infer, from this summary, where in the data the errors occurred and what they were. The previous state-of-the-art quantum circuit processed these syndromes using the extended Euclidean algorithm, a sequence of divisions and swaps in which the number and order of steps depend on the particular input it’s given. Here, the constraints of quantum circuits reemerge: while an ordinary program can follow a different path for every input, a quantum circuit, working on many inputs at once, has to handle all of them with a single fixed sequence of gates. To manage this, the previous design had to stretch the computation over many more rounds of iteration than any single input would need, and had to run every operation in every round, even when doing so was unnecessary.

Improving this decoder could substantially reduce DQI’s runtime. Estimates by researchers at Google Quantum AI imply that solving one particular OPI problem would take about three months on Frontier , one of the world’s most powerful supercomputers, compared with roughly an hour on a future quantum computer running DQI. Most of that hour would be spent on Reed–Solomon decoding.

So, we asked Claude to design a more efficient quantum circuit for the decoding step. Claude quickly concluded that the extended Euclidean algorithm was a poor fit for a quantum circuit. Instead, it organized its circuit around a different decoding method, known as Berlekamp–Massey decoding, which reads through syndromes (summaries of errors) one at a time and gradually works out the simplest rule that predicts each number in the list based on the ones that came before it. Once that rule is found, it reveals the errors. Unlike the extended Euclidean algorithm, Berlekamp–Massey performs the same kind of step in every round and always runs the same number of rounds, which suits a quantum circuit’s single fixed sequence of gates, ultimately giving Claude a much more efficient foundation to build on.

A simplified approach to storage

Switching to Berlekamp–Massey removed the need for the circuit to take different paths for different inputs. But making it reversible introduced another challenge, this time as a result of the uncomputing constraint discussed above. In every round, the circuit calculates temporary values that it needs only briefly, but this information can’t simply be deleted: to uncompute it later, the circuit has to be able to recover that information.

Storing this information would have been prohibitively expensive. So Claude took the same kind of approach as it had for divsteps: it found a way to reconstruct most of this information from the circuit’s current state, so it didn’t need to be stored. However, a few exceptional values couldn’t be recovered in this way and had to be saved.

Setting aside enough memory for the worst possible case, in which an exceptional value arises in 35 different rounds, would take 665 qubits. Instead, Claude wrote a high-speed simulator and ran 403 million sample decodings to measure how often these exceptions actually occurred. Almost every run needed to save one value at most. So Claude’s circuit sets aside room for just one saved value, or 19 qubits. About one run in 10,000 needs more than that and fails, which is well within the error rate the task allows. These improvements replaced large, worst-case reserves with a small, fixed number of qubits and gates (Figure 4).

Together, these optimizations reduced the number of gates in the decoder by a factor of 12 relative to Google’s previous construction . The improvement came from redesigning the computation at three levels: a different method (replacing the extended Euclidean algorithm with Berlekamp–Massey decoding), a different circuit architecture (reconstructing temporary values instead of storing them), and a different resource budget (measuring precisely how much memory and computation the circuit really needed). No single change would have been enough on its own, but together, they make the most expensive step of DQI just a little over an order of magnitude cheaper.

Figure 4: Three designs for the locator step of the Reed–Solomon decoder. The designs are drawn to scale: each block’s width is proportional to its gate count. (a) The previous design, based on the extended Euclidean algorithm (Khattar et al., 2025). (b) A design based on Berlekamp–Massey needs far fewer gates, but a naive reversible version has to store a 12-qubit record in every round, adding up to 840 qubits. (c) Claude’s circuit reconstructs most of the history from the updated state, so it needs to have room only for a single saved value of 19 qubits.

What we learned

Scientific progress often comes from making theoretical ideas practical. One of the main ways this happens is by making a process that was once thought to be impractical fast and cheap enough to carry out. Quantum circuit design is a prime example: the 150,000-fold drop in the FeMoco estimate described above took many research groups eight years, with each step typically representing months of work. By contrast, Claude’s elliptic-curve design was the result of a single 53-hour run.

Our results suggest that AI can support the work of circuit design, producing implementations that bring useful quantum computations closer to the capabilities of real hardware. If AI can speed up that work, useful quantum computing could arrive sooner.

Despite Claude’s encouraging performance on these tasks, we also observed some limitations. In our early experiments, Claude was conservative by nature. It repeatedly second-guessed apparent improvements, and sometimes continued to double- and even triple-check results that were already well supported. This caution was sometimes valuable: for example, it prompted Claude to write Lean proofs to verify its divsteps design. But it also manifested in a tendency to prefer existing, well-known approaches to more novel ones.

We took two steps to mitigate this. First, our setup required Claude to propose several qualitatively different approaches, and to develop them in parallel. Second, we also occasionally prompted Claude to broaden its search. These interventions succeeded in getting Claude to pursue more ambitious ideas. The elliptic-curve result, for example, didn’t come from shaving gates off of a pre-existing design but from exploring a method of doing reversible modular inversion that hadn’t been possible previously, and then deriving the mathematical results needed to make it practical. Once it had come up with the idea, Claude developed the approach, implemented it, and verified its correctness autonomously.

Circuit design is only one part of building a useful quantum computer. Because qubits are so fragile, the machine must also catch and fix its own errors as it runs, and that depends on many other components, ranging from error-correcting codes to fast decoders to control of the hardware itself. These components all affect one another, but to manage complexity, each is usually designed separately. Many of them share the characteristics that made circuit design a good fit for Claude: a design can be written as code, checked for correctness, and scored by its cost.

This raises an intriguing possibility. Rather than designing each component on its own, AI could optimize all of them jointly, from the algorithm down to the hardware, to build an entire error-corrected quantum computer tailored to a specific problem. Such designs could also tell hardware builders which capabilities matter most for a given application. That could put problems such as designing catalysts and understanding new materials within reach of the first fault-tolerant machines.

Acknowledgments

We thank Arjun Kar and Vinay Ramasesh for helpful discussions in the early stages of the project.

Related content

Claude reveals ECDSA curve origins

The decades-old mystery of the origins of one of the most popular cryptographic standards has been explained.

Read more

AI models may be capable of self-replicating without access to a datacenter

Our experiments suggest that small AI models may be only months away from being capable enough to self-replicate on commercial IoT devices, like Android TVs and smart ovens.

Read more

Strengthening our defenses against distillation attacks

Illicit distillation allows model developers to copy frontier AI capabilities without creating proportionally robust safeguards. Here, we describe how we’ve reduced the rate of distillation by more than 90%.

Read more

GifCities

Hacker News
gifcities.org
2026-10-16 13:35:07
Comments...
Original Article

The Geocities Animated Gif Search from Internet Archive

GifCities is a special project of Internet Archive , a non-profit digital library of millions of free books, movies, software, music, websites, and more. Please consider donating to help us in our efforts to provide “Universal Access to All Knowledge” including GIFs.

Try snowglobe , butterfly , balloons , sparkles , drawing of cat

Anthropic Console overcharged my card 100x due to internationalization input bug

Hacker News
news.ycombinator.com
2026-10-16 13:31:42
Comments...
Original Article

I am a LegalTech Attorney leading a developer team from Costa Rica. While trying to load credits onto my Anthropic API account (claude.com), I experienced a critical internationalization (i18n) and UX failure that has placed an unfair financial burden on me due to a severe oversight in their payment pipeline.

The platform prompted me for a payment. Since I am in a Spanish-speaking region where localized systems and keyboards handle dots and commas differently, I typed 5.04.

Anthropic’s input system completely failed to sanitize or validate the data. Instead of throwing a formatting error or converting it properly, it silently stripped the decimal internally and instantly charged my credit card $504.00 USD instead of $5.04 USD.

To make matters worse, there was no confirmation modal or review screen summarizing the final amount before processing the transaction. It was a single-click, instantaneous overcharge.

Anticipating the Obvious Skepticism: Before anyone suggests "you should have checked your regional settings" or "just wait for the chargeback":

1. Users are not the QA team: In financial software, a system is never supposed to guess or automatically manipulate a numerical input without explicit validation. If an input is ambiguous due to locale differences, the application must reject it or ask for clarification, not execute a 100x overcharge.

2. Scale of the vulnerability: This time it was $504.00, which is an unfair and frustrating burden for independent developers. But because this pipeline completely lacks a confirmation screen and basic input sanitization, the exact same bug could happen to someone typing 50.00 and end up charging them $5,000.00 or more instantly. It is a systemic financial risk.

3. The Chargeback Illusion: Yes, I have already initiated a chargeback with my bank in Costa Rica. However, banking processes here are slow and take up to 120 days to resolve. In the meantime, the $504.00 has already been deducted and charged to my credit card statement. I am forced to pay for Anthropic’s engineering mistake out of my own pocket right now.

The Support Wall: I filed an official complaint on the exact same day, minutes after it happened. I wasn't met with a human; I was blocked by an automated support BOT. The bot repeatedly and rigidly denied the refund, closing the ticket by citing generic policies without a single human ever looking at the fact that the overcharge was caused by a technical bug in their own platform.

As developers, we build systems that process people's money. Omitting a confirmation screen on a financial transaction, failing to sanitize localized numerical inputs, and then hiding behind unyielding AI support bots to keep money that doesn't belong to you is completely unacceptable.

If anyone from Anthropic's billing or engineering team is reading this, please look into this bug and review my case. It is a critical flaw that is actively harming international developers who are just trying to build on your ecosystem.

Pura vida!

R.S.G.

Zero-click attacks used targeted ads to deliver Candiru spyware

Bleeping Computer
www.bleepingcomputer.com
2026-10-16 13:20:03
Candiru spyware was delivered to devices at Al Jazeera Media Network via targeted online advertisements in a zero-click attack that required only rendering the malicious ads on the victim's device. [...]...
Original Article

Zero-click attacks used targeted ads to deliver Candiru spyware

Candiru spyware was delivered to devices at Al Jazeera Media Network via targeted online advertisements in a zero-click attack that required only rendering the malicious ads on the victim's device.

Researchers at Citizen Labs investigating the attacks referred to this technique as AdFection, noting that their report is the first public technical confirmation of mercenary spyware delivered through targeted ads.

A similar method was documented in late 2025 by Amnesty International, involving ads that infected targets with Predator spyware without them clicking anything.

That infection mechanism was called Aladdin and surfaced due to a collection of marketing files and documents leaked from the Intellexa surveillance company that researchers studied and corroborated with technical details from forensic investigations.

Unlike Alladin, AdFection was caught in real attacks and linked to Israeli firm Discovere-Tech, described by Citizen Lab as " a bridge between mercenary spyware companies and the advertising ecosystem."

Ads participating in AdFection
Ads participating in AdFection
Source: Citizen Lab

Zero-click Candiru spyware infection

According to Citizen Lab, Discover-Tech allowed its customers to use its Controlium platform to target specific devices with malicious code, or profile, deanonimize, and fingerprint user devices.

"Discover-Tech appears to work with multiple mercenary spyware, hacking, and advertising vendors, connecting the spyware industry to the online advertising ecosystem," Citizen Lab says .

The company purchased ad placements through mainstream ad networks and exchanges, embedding JavaScript in ads that contacted its "NOAS server" when rendered.

Using multiple parameters (e.g., IP address, ad identifiers), the NOAS server, "or getAd server," determined if a target was eligible to receive JavaScript code.

Selected targets received additional code, while other devices the ad rendered on received nothing, helping keep the attacks stealthy.

Action sequence for valid targets
Action sequence for valid targets
Source: Citizen Lab

Al Jazeera provided Citizen Lab with evidence of attacks that targeted at least 45 devices between 2024 and 2025. The network logs examined by the researchers showed a sequence from Discover-Tech infrastructure to Candiru validation servers and then to spyware command-and-control servers.

The researchers also recovered a DLL file from a compromised Windows system and attributed it with high confidence to Candiru, based on infrastructure and code overlaps with previously captured samples.

Candiru is an Israeli spyware vendor that sells surveillance tools, officially only to governments. The company also developed malware for Windows called DevilsTongue , which can steal files, credentials, and messages.

According to past reports , its tools have been deployed through Windows and Chrome zero-day exploits against journalists, activists, politicians, and other targets.

Candiru attack chain
Candiru attack chain
Source: Citizen Lab

While Al Jazeera is one confirmed target of these attacks, Citizen Lab reports that the advertising operation placed 3.77 billion bids and won 442 million auctions between March and June 2026.

Ads assessed to carry attacker script tags appeared across 75,373 Android/iOS apps and 120,768 websites, although these figures do not represent infection counts.

“We estimate that between hundreds of thousands and millions of users were directed to these domains via Discover-Tech ads,” explains Citizen Lab.

After receiving Citizen Lab's reports, major advertising companies like Google, IAB Europe, Beeswax, Eskimi, and Vungle took action to remove offending accounts and block access to domains.

article image

Once attackers have valid credentials, only 37% of their actions are blocked

Overall prevention scores can hide what happens after initial access. Once attackers are using valid credentials, prevention drops sharply.

The Blue Report 2026 measures defenses technique by technique across 338 million simulations run in customer production environments.

Get the report

Piramidal (YC W24) Is Hiring

Hacker News
job-boards.greenhouse.io
2026-10-16 13:08:55
Comments...
Original Article

Piramidal is looking for a backend engineer to help build and scale the infrastructure behind our real time neural monitoring platform. You'll work on hard problems: high throughput streaming, real-time analytics, and hospital grade reliability.

This is a full-time role based in our New York office (5 days a week), with required travel to client sites. Candidates must have US work authorization.

In this role you will

  • Build and run Python and Go services that consume, transform, and serve real-time streams of neurological data.
  • Design, maintain, and improve data models, ingestion pipelines and retention for high frequency time series data, from raw neurological data, to all time series derived from it.
  • Build and extend the APIs behind clinical workflows.
  • Work with ML engineers to take models from research to production inference, and keep them running there.
  • Make the platform observable and dependable: metrics, alerting, capacity planning, and incident follow-up.
  • Help build software to the standards of a regulated medical device, including cybersecurity, traceability and change control.

Your background looks something like

  • 5+ years of building and operating backend systems in production
  • You can own a problem from an ambiguous start to a running, monitored service, and you can explain your decisions verbally and in writing.
  • Real experience with event-driven or stream-processing systems: partitioning, checkpointing, backpressure, and at-least-once delivery.
  • Strong Python, including concurrency (threads vs. processes, asyncio) and testing.
  • Proficiency with containerization and orchestration, preferably using kubernetes.
  • Solid relational database skills, from schema design to query performance.

Nice to have

  • Go, especially for networked or low-latency services.
  • Azure: Event Hubs, Service Bus, Web PubSub, Blob Storage, AKS.
  • Apache Arrow, Parquet or other columnar formats.
  • Video streaming, storage, and processing
  • Systems where sub-second latency matters.
  • Data engineering or warehousing at scale.
  • Model serving (PyTorch)
  • Work in healthcare or other regulated software.

About Us

We are building a first-of-its-kind foundation model for electrophysiological brain data. Our goal is to create scaled neural decoders that enable humans to understand and interact with the language of the brain. Our first product brings a state-of-the-art model into real time clinical workflows, helping clinicians detect and respond to seizures faster.

Compensation & Benefits

  • Base salary range: $250,000 – $300,000, depending on experience and skills.
  • Meaningful equity plan.
  • Comprehensive health coverage, including premium medical, dental, and vision plans.
  • Daily lunch budget.

Interview Process

  1. Initial Screen (30 min): Discussion to ensure timelines, experience, and expectations align.
  2. Technical Screen (1 hour): via Google Meet
  3. Final Round (in person) :
    • Coding Problem (1 hour)
    • System Design (1 hour)
    • Product Session (1 hour)
    • Questions (20 minutes)

90% of US working hours are spent on tasks not covered well by AI benchmarks

Hacker News
www.mercor.com
2026-10-16 13:08:38
Comments...
Original Article

The Benchmark Map

Each tile represents one of the 923 O*NET occupations making up the US labor force, grouped into 22 job families. Occupations are shaded according to the share of their tasks which are represented in our initial list of AI benchmarks. A single benchmark prompt can be mapped to multiple O*NET tasks.

click a family to open it

Coverage by

Covered with at least

  • Benchmark Index
  • No coverage

In our data set: only 208 of 923 occupations have a task with at least 5 benchmark prompts , and 6 of 22 job families have no such occupations.

Our findings suggest that 90% of American working hours are spent on tasks with little or no coverage from existing benchmarks . This makes it very hard to know how good AI models are at the work Americans actually do.

The coverage of existing benchmarks is not random, either. Our map suggests that the AI community is focusing on the largest labor markets first:

Benchmark coverage of O*NET tasks by occupation wage bill

Adjusted probability of task coverage

Annualized occupation wage bill (log scale)

Each point shows the estimated probability that an O*NET task with a given AI-exposure tag belonging to an occupation with a given wage-bill will be covered by at least 5 prompts in our benchmark index. AI-exposure tags are binary and come from Eloundou et al. (2023) . Occupation wage-bills are calculated from BLS estimates of the mean wage and number of Americans working in each occupation, assuming a 40 hour work week. Estimated coverage probabilities come from a task-level logistic regression of coverage probability on AI-exposure and log occupational wage bill. Error bars are pointwise 95% delta-method confidence intervals based on standard errors clustered at the occupation group level.

For example, benchmarks in our initial list heavily cover AI-exposed lawyers’ tasks, but barely cover any of the O*NET tasks of similarly AI-exposed legal secretaries or court clerks. The long tail of smaller, middle-income knowledge work jobs appears undercovered.

As we build out our coverage of model capabilities across the economy, we hope to both surface and help fill more gaps in our understanding of what models can do.

Methodology in brief

To break down the economy into sectors, occupations, and tasks, we used the US Department of Labor’s O*NET taxonomy. O*NET divides the US workforce into 923 occupations; for each occupation, O*NET attempts to provide a comprehensive list of “tasks” which make up the occupation, totaling 18,797 tasks across all occupations.

Example — 6 of the 22 tasks O*NET associates with Lawyers
  1. 1 Prepare, draft, and review legal documents, such as wills, deeds, patent applications, mortgages, leases, and contracts.
  2. 2 Advise clients concerning business transactions, claim liability, advisability of prosecuting or defending lawsuits, or legal rights and obligations.
  3. 3 Interpret laws, rulings and regulations for individuals and businesses.
  4. 4 Analyze the probable outcomes of cases, using knowledge of legal precedents.
  5. 5 Present evidence to defend clients or prosecute defendants in criminal or civil litigation.
  6. 6 Supervise legal assistants.

To measure benchmark coverage, we start with a list of 29 benchmarks selected for their quality and economic relevance. (The full list and selection criteria are in the Benchmark Index tab). In selecting benchmarks for this list, we prioritized:

  • Public Availability. Included benchmarks have at least 25 publicly available tasks. We also include Mercor’s APEX benchmarks, where we have access to held-out benchmark prompts and are therefore able to map them to O*NET tasks.
  • Agentic Tasks. Included benchmarks ask models to perform agentic tasks, rather than answering questions or advising the user on how to complete a task.
  • Economic Realism. Benchmark tasks resemble tasks which humans (or agents) are frequently asked to do in real-world enterprises. Economically valuable tasks are prioritized over academically complex ones.
  • Economic Diversity. We capped the number of included benchmarks per job family, in significant part to account for the massive overrepresentation of software engineering and research tasks in popular benchmarks.
  • Balanced Difficulty. Benchmarks are not yet saturated by frontier models.

Following work by Wang et al. , we then ask an LLM judge to tag each benchmark prompt with as many O*NET tasks as it thinks correspond to that prompt. We validate our LLM tagging with human expert tags on Mercor’s APEX benchmarks, a subset of this list of 29. On the Benchmark Map, an O*NET task counts as “covered” if our LLM judge has mapped it to at least 5 prompts from our 29 benchmarks.

To estimate the total share of working hours Americans spend on tasks covered by benchmarks on this list, we combine our coverage estimates with Hatgis-Kessell et al. ’s LLM-derived estimates of the working time share of each O*NET task.

A more detailed account of our methodology can be found in the Methodology tab.

Limitations

Our estimates of total economic coverage, and of patterns in coverage, all come from the initial list of 29 benchmarks we chose. This is not a complete or perfectly representative sample of the broader universe of unsaturated, public, agentic economic benchmarks. Any incomplete list will necessarily bias down estimates of economic coverage, and it is difficult to bound that bias. We want to stress, therefore, that these results are provisional. We will update them as we expand the initial benchmark list.

We also capped the number of included benchmarks in each job family in order to maximize breadth of coverage. We think this makes our estimate of economy-wide benchmark coverage more accurate, at the cost of biasing down our estimates of coverage in the most-benchmarked job families (e.g. software engineering).

By selecting for unsaturated benchmarks, we risk understating benchmark coverage on O*NET tasks which are easier for LLMs to complete. On the other hand, including saturated benchmarks would risk overstating benchmark coverage if saturation is downstream of lower task realism. The latter claim seems likely, given that benchmarks often overstate LLM performance in real-world deployments. We think that the bias from including saturated benchmarks would be greater than the bias from excluding them, but neither option is ideal.

Finally, while we outline our benchmark selection criteria in the Benchmark Index tab, several criteria (like “Economic Realism”) are difficult to formalize and introduce some subjectivity in our choices.

Patterns in coverage

The benchmarks in our index have relatively deep and narrow coverage of the overall economy. They disproportionately focus on the economic tasks most exposed to AI automation (as measured by Eloundou et al. ), with O*NET tasks rated as “exposed” about 6x more likely to be represented on benchmarks than tasks rated “unexposed”. This makes sense: benchmarks are designed to measure AI progress, and AI progress is most plausible on the most AI-exposed tasks. This explains why benchmarks are full of tasks in Software Engineering and Financial Analysis while sparse on tasks in Truck Driving and Gas Plant Operation.

But even after controlling for AI-exposure, O*NET tasks from occupations with larger wage bills are significantly overrepresented among benchmark prompts:

Benchmark coverage of O*NET tasks by occupation wage bill

Adjusted probability of task coverage

Annualized occupation wage bill (log scale)

Each point shows the estimated probability that an O*NET task with a given AI-exposure tag belonging to an occupation with a given wage-bill will be covered by at least 5 prompts in our benchmark index. AI-exposure tags are binary and come from Eloundou et al. (2023) . Occupation wage-bills are calculated from BLS estimates of the mean wage and number of Americans working in each occupation, assuming a 40 hour work week. Estimated coverage probabilities come from a task-level logistic regression of coverage probability on AI-exposure and log occupational wage bill. Error bars are pointwise 95% delta-method confidence intervals based on standard errors clustered at the occupation group level.

After controlling for occupation and AI-exposure score, O*NET “task importance” is another predictor of benchmark coverage. In particular, O*NET tasks come with domain expert estimates of the importance of the task for its occupation on a scale of 1-5. We find that the tasks scored most important are about 6–10x more likely to be represented on benchmarks than those scored least important:

Benchmark coverage by O*NET task importance within occupations

Adjusted probability of task coverage

O*NET task importance (1–5 rating scale)

Each point shows the estimated probability that, controlling for occupation, an O*NET task with a given AI-exposure tag and a given quintile O*NET importance score is covered by at least 5 prompts in our benchmark index. AI-exposure tags are binary and come from Eloundou et al. (2023) . Importance quintiles are calculated from O*NET importance scores. Estimated coverage probabilities come from a task-level logistic regression of coverage probability on AI-exposure and importance quintiles, with occupation fixed effects. Error bars are pointwise 95% delta-method confidence intervals based on standard errors clustered at the occupation group level.

The plots above suggest a reasonable allocation of the relatively limited resources devoted to high-quality, economically relevant benchmarks so far; it’s natural to prioritize making benchmarks which cover the most important and AI-exposed tasks in the occupations with the largest wage bills. But barring a significant increase in the number and diversity of such benchmarks, these patterns will result in significant blind spots in our view of economically valuable model capabilities.

Can O*NET + benchmarks tell us how good AI is at your job?

Measuring model capabilities by job occupation is essential – for enterprises deciding which models fit their needs, for policymakers forecasting the economic impact of AI, and for Americans thinking about their careers. Unfortunately, this is a hard problem to solve.

We could just try averaging model performance on all benchmark prompts relevant to a given job. But as our Benchmark Map suggests, benchmarks cover some economic tasks much more intensively than others. A simple average would give too much weight to frequently benchmarked tasks.

O*NET offers a way to potentially reduce this bias. If we average model performance on occupation-relevant benchmark prompts weighted by O*NET classification, so that each O*NET task is equally weighted in our occupation average , we get a step closer to a number that represents real economic performance.

As a first step, we try this approach on Mercor’s APEX benchmarks for four occupations: investment banking, law, accounting, and software engineering. We compare O*NET-weighted scores to simple averages of model performance on tasks related to each occupation. The resulting weighted and unweighted scores are generally quite similar:

APEX-1 + APEX-Agents · O*NET: Financial and Investment Analysts · 11 tasks · 176 prompts

Score (%)
Every prompt counts equally Every O*NET task counts equally
Claude Fable 5.1 Max 69.8% 68.5%
Claude Opus 5.5 Max 73.3% 70.2%
Claude Opus 5 Max 65.5% 63.0%
GPT-6 Astra Max 65.5% 61.8%
GPT-5.6 Sol Max 66.8% 65.6%
Grok 4.7 xHigh 58.1% 58.7%
Gemini 3.8 Flash High 66.9% 67.5%
Kimi K3 Max 59.4% 59.9%
DeepSeek V4.1 Flash Max 56.5% 58.4%
For each occupation, we take all prompts across APEX benchmarks related to that occupation. Darker bars show a simple average of model scores on those prompts for each occupation. Then, we sort the prompts by O*NET task. For each O*NET task with at least 5 corresponding APEX prompts, we average model scores on those prompts to get a task-level score. Next, we average each task-level model score to get occupation-level scores which weight performance on each O*NET task equally. (If an O*NET task has fewer than 5 prompts, we drop it from the average). Lighter bars show these weighted scores for each occupation.

In this case, at least, O*NET weighting changes very little. Model performance on APEX prompts is similar across the O*NET tasks included in the weighted scores above, which limits the value of reweighting. However, less than ⅓ of the O*NET tasks relevant to the 4 occupations above have enough APEX coverage to be included in our weighted scores. We are hopeful that applying O*NET weighting to a much larger set of benchmarks will result in high-quality occupation-specific model scores, and are working toward that goal.

However, even if we incorporate tasks from dozens of benchmarks, several obstacles remain:

  1. 01

    How do we navigate low statistical power?

    The sheer breadth of work done in the US economy means that for any O*NET occupation and task, we have relatively few benchmark items. This means that our estimates are inherently underpowered, and just one or two low-quality items can severely bias our scores.

  2. 02

    How do we account for the varying difficulty and fidelity of tasks?

    Some benchmark items are highly saturated, whereas others are still unsolved. This is partly a function of time (as older benchmarks were designed for less performant models and simpler environments) and partly a function of quality (some benchmark items are simplistically graded, have minor mistakes, or can be reward hacked). We do not yet have an explicit way of weighting by quality.

  3. 03

    Can evals that primarily measure AI automation generalize to augmentation?

    In the real world, AI models are still primarily used by humans, rather than automating entire job functions end-to-end. Therefore, measuring the real-world occupation capabilities of a model should ideally include measuring how much the model augments human productivity. We have completed some early work in this direction , but finding a methodology that scales remains elusive.

  4. 04

    Can every O*NET occupation and task be measured with benchmarks?

    Knowledge-based work is well-suited to measurement through benchmarks because it is largely done on digital machines, like laptops and phones. Dingel and Neiman estimate that only 37% of US jobs could feasibly be done entirely from home, suggesting that ~63% of jobs involve some tasks with a physical-world component which would be hard to incorporate into current benchmarks. For now, this may not be a meaningful oversight – with the rapid development of robotics capabilities, we anticipate a significant need for physical task benchmarks.

We are actively working on these problems; if you are too, please reach out !

We are indebted to Wang et al. for the O*NET tagging methodology, and thank Nathan Lambert for feedback on a draft of this work.

APEX NEWSLETTER

The latest on frontier AI performance, straight to your inbox.

New benchmarks, leaderboard shifts, and research from the APEX team.

Shyam Sankar, CTO of Palantir, Says AI Researchers Have Started Smoking Because They’re Convinced AI (Claude, Probably) Is Going to Cure Cancer

Daring Fireball
www.cbsnews.com
2026-10-16 13:01:22
From the transcript of Sunday’s Face the Nation on CBS: Shyam Sankar: You know, I take — I think there’s a profound truth to Pascal’s saying that every human has a god-shaped hole in their heart, and it’s important to understand that many of these folks in Silicon Valley who are building this te...
Original Article

/ CBS News

Add CBS News on Google

The following is the full transcript of the interview with Shyam Sankar, chief technology officer of Palantir, a portion of which aired on "Face the Nation with Margaret Brennan" on Oct. 11, 2026.


MARGARET BRENNAN: And we're joined now by the Chief Technology Officer of Palantir, Shyam Sankar. Welcome to Face the Nation.

SHYAM SANKAR: Thank you for having me, Margaret.

MARGARET BRENNAN: It's good to have you here in person. We've been talking a lot about technology, artificial intelligence, and public perception of it right now, and that's where I want to start with you because our polling shows there's a problem here. 50% of those polled by CBS say AI will create more problems than it solves. 29% say it'll solve more than it creates, and 21% just really don't know. Like 45% of Americans want the government to restrict use and development of AI. Is your position there should not be any guardrails at this moment?

SHYAM SANKAR: No, not at all. That's not my position. I think the- the burden is absolutely on the technology industry to show the American people that there are real benefits to AI and not kind of ephemeral sort of benefits like it can help me schedule travel, but actually meaningful benefits that result in job growth and prosperity for the American people. I think one of the things that's really complicated in the current discussion, is that there's an unseen force driving the narrative around AI safety, and it's- it's really this millenarian doomsday cult meets messianic complex called effective altruism. The most famous effective altruist that most Americans know is Sam Bankman-Fried, and the effective altruists are, it's almost like a religion that they've been thinking about doomsday scenarios from AI since the early 2000s.

MARGARET BRENNAN:  He was–he is jailed. He was the crypto investor—

SHYAM SANKAR: Correct.

MARGARET BRENNAN: Who defrauded investors. But this sounds very academic. Like, what makes you so focused on this?

SHYAM SANKAR:  Because there's only really roughly 2,000 AI researchers in America, and the vast majority of them believe in this sort of worldview around effective altruism. And if you hear someone like Jacob Coxon telling you that AI has a 10% chance of ending humanity, and you believe—

MARGARET BRENNAN:  A researcher who had this warning recently.

SHYAM SANKAR: Yes, correct. And you believe he's speaking as a technically informed individual who does this work, it's a scientific critique. I think the American people would be right to be quite panicked and worried about what's going on here. But if you understand that it's actually a theological critique, then you can- you can kind of weigh it against the empirical facts of what is actually happening out there. You know, I take—I think there's a profound truth to Pascal's saying that every human has a god-shaped hole in their heart, and it's important to understand that many of these folks in Silicon Valley who are building this technology have filled that hole with the machine God of AGI. And I mean, there's so many interesting stories around this. Like, for example, so many AI researchers have started smoking as a way of signaling to other researchers how much they believe in AI. I believe so much— (CROSSTALK)

MARGARET BRENNAN:  What? That makes no sense. What do you think—

SHYAM SANKAR: I believe so much in AI that it's going to cure cancer. So I will—I'm showing you my chips are all in. So there is kind of this mass psychosis, social delusion around it, and I think it's getting in the way of actually what is happening with AI. Where is it meeting the American worker in industry? What are the results of doing that, and the doomsdayers have basically been wrong. Everything they predicted, they- they told us that ChatGPT 2.0 was too dangerous to release. They told us at this point in the timeline, we'd already have mass unemployment and job displacement, and the economists see that actually we're having job growth in areas that we wouldn't have predicted doing exactly that. So the technology industry has two burdens. One is to show very clearly to the American people that- that AI is going to result in economic prosperity and security for the nation. And two, to actually do and absorb the burden of engineering. You cannot abdicate this idea that designing safe products is your job. You can't hand wave around it. If you look at the kind of narratives that come out of the doomsdayers, they seem like two contradictory narratives. One narrative is this technology is going to end humanity.

MARGARET BRENNAN: Right.

SHYAM SANKAR: And simultaneously, they say, "But I believe it has some chance of creating utopia." So at first blush, this seems contradictory, but it has one thing in common, which is that you, as a human, have no agency. The machine god is going to decide the future, and only perhaps a small number of us can try to avoid the horrible outcome. And I think it obfuscates the more profound reality that we have a huge amount of human agency over how we're going to use this technology to deliver the outcomes the American people expect.

MARGARET BRENNAN:  Well let's talk about that because the other part of this argument would be, and no one who wants- the people who don't want guardrails are simply in it for commercial reasons. They want to keep selling chips, or they just want access to market. So that would be the counter argument to the idea that you know what you're saying, which is an ideological opposition to guardrails.

SHYAM SANKAR: Maybe we could just back up and who's on the side of no guardrails?

MARGARET BRENNAN: Well, when- I want to get into the specifics here, because even just defining what guardrails is seems really complicated, and there's not even common agreement on that right now. But Jay Clayton, who is the new DNI and the new AI czar, said this week the focus is on control and monitoring of technologies with the potential to do harm. So, what does that look like to you? Because it sounds like he's not even sure yet.

SHYAM SANKAR: Well, I think there's a very clear view that we should be regulating the application of the technology. So if you're going to use this in medicines, you know the FDA- As a republic, we have 250 years of rich laws and history on how to manage liability. I don't want to trivialize the metaphor, but you know, if I buy a car and the car is defective, that's the car maker's problem. If I then use that car to go drive into my neighbor's house, that's my problem. And you know, this sort of obfuscation. The narrative is this technology is a total difference of kind. I don't think so. I think it's a difference of degree.

MARGARET BRENNAN: Well, in that humans aren't in control of it, it would be a different kind.

SHYAM SANKAR: No, humans are in control of it. Even if we look at the kind of salacious reporting around Hugging Face, the models did not do anything they were not instructed to do. You know, they were- the- the real first, you have human error. They- they were not in a sandbox. They had access to the internet. It was a horrible cybersecurity configuration. Then, from that perspective, they were asked to- to- succeed at a specific benchmark, and they were not given constraints on how to do that. And they said, "Oh, the best way to succeed at the benchmark is to get the answers to the test, and to do so.

MARGARET BRENNAN: So, for that, who should take action to--

SHYAM SANKAR: --I think it's a defective product. Like, if--

MARGARET BRENNAN: --Is it up to the Justice Department to then bring suit, like on the programmers, like who's liable for the technology not, you know, staying within the sandbox--

SHYAM SANKAR: --The AI companies of course. In that, in that specific case, it would be the AI companies. If another company had licensed that technology to use in another in an application, and the product worked as expected, but you misused the product, then it would be you that are responsible for that.

MARGARET BRENNAN: So you believe that, am I understanding you, the existing laws on the books should be able to handle technology as it develops?

SHYAM SANKAR: I think it is a massive running head start. I think the laws on the books speak to a lot of the current considerations. Might we need a few more things on the margin? Sure, but I think we'll figure that out as we go through it.

MARGARET BRENNAN: So let's talk about some of those things because you were with the president when he summoned some of these AI leaders recently, and he asked them all to sign a pledge to implement robust internal controls, partner with an external auditor and establish a committee to evaluate reports from auditors. That was Google, Anthropic, OpenAI, Nvidia, Elon Musk. They all signed it. Palantir, your company didn't. Why?

SHYAM SANKAR: Well, those accords were for companies that actually make AI models, which we do not, so–

MARGARET BRENNAN: But you help to use them and build out platforms. Like you don't see a reason for constraints there.

SHYAM SANKAR: Oh, we- we do have those constraints. In fact, that- part of that's our entire business, is how do you safely deploy these models in specific use cases. We're just not a party that- we weren't asked to be a part of the accord.

MARGARET BRENNAN: But you were there at that meeting.

SHYAM SANKAR: I was.

MARGARET BRENNAN: So, what happened? Like, what was the conversation?

SHYAM SANKAR: The conversation was really an assertion that the American people expect AI to generate economic prosperity and to do so securely, and that we as companies have an affirmative obligation to deliver on exactly those things, and that we have existing laws to look at this, and that we should be all taking this quite seriously, very productive conversation.

MARGARET BRENNAN: Because it sounded like the White House was saying something more should be done, and now you have this new AI Czar Jay Clayton going out to Silicon Valley this week. He said he's launched this 120-day review of AI policy. What do you hope comes from that, or is this another one of these like blue ribbon commissions that doesn't produce any--

SHYAM SANKAR: --No, I think a lot will come up to it, which is really focus and energy, and using the existing agencies and regulatory apparatus to make sure we're on top of this stuff and providing support where it's needed. I think one of the challenges, going back to my comments on effective altruism is, today, the so-called independent research organizations that are overseeing this are not really independent. They have conflicts with the labs. They are made up of people with a singular worldview around effective altruism, looking for the doomsday scenarios. You know, you have evaluators who are essentially pointing a loaded gun at a target, saying, "I can't believe the gun worked." When they should really be saying, "What guardrails do we have in place? You know- are you know are these products working to the specifications we designed, and what- what are the opportunities for misuse?

MARGARET BRENNAN: So I've spoken to people, for example, in the financial industry who say we did need some regulation here, but there's the SEC, there is you know the CFTC, they oversee certain operations here. Don't you think within the current institutions there could be some sort of entity that oversees technology?

SHYAM SANKAR: I think there's going to need to be an incident response and reporting regime that creates more visibility and transparency into what you're learning in the testing, well ahead of product launches that give visibility and transparency to the government of how people are doing and implementing exactly the existing laws.

MARGARET BRENNAN: Who does that, or who could do that?

SHYAM SANKAR: I will defer to Director Clayton on that, but I think that's one of the things that I- I suspect they will be driving towards.

MARGARET BRENNAN: He's got to figure that out. Well, we look at the last administration- President Biden and Xi Jinping came to like, a very limited agreement, but at least on one principle, which was humans, not AI, should retain control over decisions to use nuclear weapons. Would it be sensible--

SHYAM SANKAR: Well, that seems obvious.

MARGARET BRENNAN: Well, that seems terrifying, first of all, that they had to come to a conversation about that, but shouldn't that be expanded elsewhere in the defense space? Would you agree with that? Is that one of the areas--

SHYAM SANKAR: Well, the current part of the policy is there's two parts of it. There's the kind of military doctrine, which is that a human is always accountable for every decision that's made, and the other part of it is that humans are in- in the decision-making processes that- that relate to lethal force here.

MARGARET BRENNAN: But in terms of the things where you think there should be more guardrails, is the defense space one of them? Biotech, I've heard others.

SHYAM SANKAR: All spaces need to- need to have a thought around safety of application.

MARGARET BRENNAN: But that's still- who does that and how?

SHYAM SANKAR: Well, I think the Department and the Congress should do it with defense. The Department of Transportation should do it with transportation. The FDA should do it with medicines.

MARGARET BRENNAN: But so, watch for that possibly happen. Because you know, I hear from people in the technology space this argument that we need to just go so furiously forward to compete with China. China is pushing for AI to be integrated into all of its industries, but they have the ability to also delay things to get government- governance to catch up, they've done that. They've tapped the brakes themselves before. So, do you think the U.S. should also consider tapping the brakes in certain areas, just slow things until they have some idea of the guardrails?

SHYAM SANKAR: You know, we have this beautiful, messy process in America, but I would argue, as frustrating as it might look, it's kind of working. So, we have frontier models now that have not been released because people have realized maybe we're not ready to release them. That would have been an unimaginable thought a year ago. And so as people are starting to wrap their heads around whether it's the labs, government- I think it is a consequence of our messy process and the discussions that people are having that we're evolving how we're doing this, and the pace is naturally changing.

MARGARET BRENNAN: Let's talk a little bit about DOD, the Department of War, Department of Defense. They have recently ceased using Anthropic products as part of this dispute over the firm's insistence on safeguards for military use of AI. I know you're aware of this case. Anthropic's Claude was part of the Maven platform, which Palantir uses. How much of an impact will this decision here have, and who replaces them?

SHYAM SANKAR: Well, the- the Department today has a wide range of model providers, everything from XAI and OpenAI to open-weight models like Nemotron from NVIDIA, so I don't think- I don't- there's been no operational impact from that. I think there's a kind of a broader statement which really has been powering the growth of our commercial business, which is companies are realizing, and it equally applies to the government, that you're not going to pick any one model provider. That actually, your sovereignty and agency as an institution comes down to your ability to kind of control, decide which models you're going to use in what context, have the ability to switch models, to be able to control the weights themselves, where you need to feel that control over them. It is your alpha. It is what makes your institution special.

MARGARET BRENNAN: So you don't know yet who's going to replace them, but you don't see a big impact from this kind of decision. It was certainly a huge story for Silicon Valley and the defense space to hear that--

SHYAM SANKAR: It's already been replaced. It's already been replaced, and users who are building AI applications get to pick the models that they're using. It's a suite of models that are available from, you know, Google, from XAI, from OpenAI. And what was the second part of your question there, sorry?

MARGARET BRENNAN: Yes, I was asking about the impact. It sounds like you don't think it's- it's a big one. Look, I can move on here.

SHYAM SANKAR: No impact.

MARGARET BRENNAN: You have said recently that the war in Iran is the first major conflict where AI played a central role, particularly for targeting. Do you see risks for that?

SHYAM SANKAR: Well, you know, targeting is this- is kind of this very salacious word. Really, targeting is a process, and if you think about military operations, you know, the ability to execute 1000 strikes in a single day would have taken two weeks of planning by 50 people before, and being able to do that with one person in four hours provides you a significant battlefield advantage against your adversaries. So, it's really not about, you know, people jump immediately to something like AI picking the targets. That's not what's happening. It's really given a set of effects that you want to create- I want to be able to take out the enemy's air defenses. Okay, what targets relate to that? Okay, how do I then push them through a process where I understand are any of these targets on the no-strike list? Are any of these targets too close to civilian infrastructure? How do you do all the things that are so susceptible to human error under the time crunch- what's doing in a way that has much higher repeatability and accuracy, so you can get more throughput to the system?

MARGARET BRENNAN: Well, that goes to a broader argument about the elimination of some of the people who were involved in mitigating civilian impact from strikes. That was a Pentagon decision by Secretary Hegseth. In the case- you just talked about the thousands of strikes, and there were so many successful strikes in terms of the targeting in Iran. But there was also, as you know, this horrific one in Minab that killed at least 123 schoolchildren. Bloomberg reported some personnel relied too much on the AI in the Maven system made by Palantir using AI-enabled software. Have you determined what happened there?

SHYAM SANKAR: Well, we should wait for the final report. But what I can say is that reporting is inaccurate.

MARGARET BRENNAN: The reporting from Bloomberg, you're saying, is inaccurate?

SHYAM SANKAR: Yeah, it's inaccurate, and actually, the likely cause is human error. And then- and quickly following that, we actually built additional AI agents that did more checking. That's part of the process we don't own, but responding to the urgency of the moment, we built additional AI that actually double checks more of the work outside the process that we own to ensure things like that couldn't happen again.

MARGARET BRENNAN: So you're suggesting it was outdated intelligence or human error that fed information into the computer system. Is that what you're saying?

SHYAM SANKAR: Well, we should wait for the final report, but I think we will find--

MARGARET BRENNAN: Do you know when that'll be released?

SHYAM SANKAR: I don't.

MARGARET BRENNAN: Because the initial reports have been widely reported on, including by this network. Do you see a harm in that being made public soon, or is it helpful to what you say are improvements you want to make?

SHYAM SANKAR: Well, I- I will defer to the Department on the- on the timing of how- I have no control over that. But yeah, I would love the- the truth to get out there.

MARGARET BRENNAN: But you believe that it was human error. That's what you're saying, not what they're reporting, which is that they were relying too much on the AI.

SHYAM SANKAR: The Bloomberg reporting is wrong. Yeah.

MARGARET BRENNAN: There are 120 House Democrats who wrote to Secretary Hegseth about this particular case and the use of AI in the strike, including Maven. Do you have any intention to go brief Congress about it or to share information?

SHYAM SANKAR: We have given briefings to Congress, and- and they can, you know, Congress is well aware of the capabilities of Maven.

MARGARET BRENNAN: But in terms of this strike and what went wrong, obviously something went wrong.

SHYAM SANKAR: I would defer to the Department on that. That's- that's not our place.

MARGARET BRENNAN: But it is because you are such a- Palantir is such- so interwoven with the U.S. government. I mean, it's billions of dollars of government contracts right now, do you think more information should be briefed to Congress about the benefits along with the risks?

SHYAM SANKAR: Sadly, I'm just a technologist. I mean, on these policy issues, I would defer to others.

MARGARET BRENNAN: Well, I want to quickly ask you before we go about the modernization efforts, which you are part of. I understand you are lieutenant colonel in the Army Reserves in the Army Executive Innovation Corps.

SHYAM SANKAR: Correct.

MARGARET BRENNAN: Which is new.

SHYAM SANKAR: Yeah.

MARGARET BRENNAN: There are also executives from Meta and OpenAI. So, what are you working on there?

SHYAM SANKAR: My principal role is to help with Army human resourcing in the G-1 department here. So, strategies on how do we, you know, the Army is drowning in talent, what we would call green suiters who actually know how to code, and they're- they're- they're exceptional. How do we employ them? You know, they don't fit in the kind of industrial era model, the Napoleonic codes. Their skills are kind of rank blind. You might have an E-4 who's an exceptionally good coder. There's not an obvious career path for them within the Army. The Army doesn't know how to manage that talent. So, how do we identify who these exceptional people are? How do we protect them? How do we put them on projects that fully utilize their skills and turn them into valuable assets for- for the military?

MARGARET BRENNAN: So that's your role within this Corps?

SHYAM SANKAR: That's right.

MARGARET BRENNAN: So for people who look at that and say these big corporations could have a conflict of interest because they're also doing business with the U.S. government. How do you respond to that?

SHYAM SANKAR: Well, it's carefully managed by- by the- the lawyers in the Department. We're only allowed to work on projects where we don't have conflicts.

MARGARET BRENNAN: And do you think--

SHYAM SANKAR: I would just say, more broadly, I mean it is the greatest honor to be able to serve in our U.S. military. You know, as an immigrant to this country, it's one of these- My father, my late father, would have loved to have seen me go to a service academy. Life worked out the way it worked out. Arguably, I hope I have more to give back to my country in this capacity at 44 than I did at 24, and it's a great pride.

MARGARET BRENNAN: Thank you for your time today, Shyam.

SHYAM SANKAR: Thank you.

MARGARET BRENNAN: We'll be back in a moment.

/dev/null: social network for developers

Hacker News
dev-null.sh
2026-10-16 12:57:49
Comments...
Original Article

Sign in with GitHub, follow people who write code, and commit plain text to a shared log.

Thirty Years of KDE

Lobsters
blog.cornelius-schumacher.de
2026-10-16 12:49:07
Comments...
Original Article

When I joined KDE in 1999 I already thought of it as a mature project. I used the KDE desktop every day, and I was delighted with what it could do and how it felt. I had no idea that this would be one of the most impactful decisions of my life, or where it would lead me.

Today we are celebrating the 30th anniversary of the original announcement of KDE. The project is still alive and kicking. I still use it every day, just like millions of other people. Not only because it's great software, but because of the values it embodies.

KDE stands for freedom and being able to shape your own destiny. As the KDE vision says: "A world in which everyone has control over their digital life and enjoys freedom and privacy." While I originally joined for the technology, this is what made me stay.

One of my favorite pictures illustrating the spirit of the community is the group picture of Akademy in Dublin in 2006. Brilliant people having fun working towards a shared purpose of digital freedom.

KDE gets a wonderful present for its birthday. The KDE documentary is premiering today. It tells the story of the founding, the rapid early development, and the license conflicts. How it became a solid product used by many people, and then put it all at risk with KDE 4. How we learned from that and turned it into this extremely resilient and lively community it still is today. I'm happy I could contribute to this story, and that I'm one of the people telling it in the documentary.

For me, KDE shaped my career and my life, and gave me the opportunity to grow and learn. It led to things I would never have expected when I started: my code running on millions of computers, talking to hundreds of developers at conferences , sitting at the negotiation table with Nokia in Helsinki, consulting as an expert in the German parliament. And much more.

Today, KDE is maybe stronger than ever. We reached a lot of new users with the Steam Deck . The Sovereign Tech Fund is investing more than a million euros in KDE. With the strategic goals the community set this year, we are addressing enterprise, documentation, and styling. It shows how much the project has matured, beyond what I could ever have imagined. It also shows in its contributors. While contributors leave over time, new generations come in every year and keep the community growing over the long run, combining stability and rejuvenation.

I'm proud and grateful. Proud of what the KDE community achieved. Grateful that I could be part of this amazing group of people. A team nobody could have hired.

Happy birthday, KDE.

Behind the Blog: Doing Whatever

403 Media
www.404media.co
2026-10-16 12:43:19
This week, we discuss a new pod setup, video games, and Elon's spending habits....
Original Article

This is Behind the Blog, where we share our behind-the-scenes thoughts about how a few of our top stories of the week came together. This week, we discuss a new pod setup, video games, and Elon's spending habits.

JASON: Exciting news: I am building a podcast studio / riso printing room / place to film videos in. I believe all of my colleagues and many people in my life have been laughing at me about this, but this also may just be the narrative I’ve created for myself to inspire me to prove the haters wrong. Since the beginning of 404 Media, I’ve worked out of my garage, but feel like I’ve been going a bit crazy sitting mostly in the same room since essentially the start of the pandemic. And so I found not a coworking space but a very affordable windowless box that I shall turn into a content palace.

I’m just going to try it for a few months to see if it makes sense or if I should return to working from the couch, but I’m quite excited about building it out. I only got it a few days ago and so at the moment it’s largely a bunch of boxes and random furniture I no longer had space at my apartment for. It’s got a drop ceiling with fluorescent lighting and landlord special laminate floors, but I also can do whatever I want to it, so I will likely do some sort of design on the walls, throw a rug down, whatever.

This post is for paid members only

Become a paid member for unlimited ad-free access to articles, bonus podcast content, and more.

Subscribe

Sign up for free access to this post

Free members get access to posts like this one along with an email round-up of our week's stories.

Subscribe

Already have an account? Sign in

Desire to Move Permanently to U.S. at New Low

Hacker News
news.gallup.com
2026-10-16 12:38:02
Comments...
Original Article

WASHINGTON, D.C. — The U.S. remains the most desired destination for people who would like to leave their own countries permanently, but Gallup's latest data show it is less attractive than it once was.

In 2025, 15% of adults worldwide who say they would like to move permanently to another country name the U.S. as their preferred destination, the lowest level recorded in nearly two decades of Gallup research. From 2007 to 2009, 24% of would-be migrants named the U.S. as their top choice , and that figure remained near 20% through 2016. Since 2017, it has been at or below 18%.

The rank order of the countries attracting the most interest from potential migrants has seen little change since Gallup’s first measure. Canada ranks second , as it has for several years, with 9% of potential migrants mentioning the U.S. neighbor. The appeal of these desired destinations did not change in 2025, even as the U.S. became less desirable.

Line charts show trends in the percentage of adults worldwide who would like to move permanently to top destination countries from 2007–2009 to 2025. The United States remains the top destination but declines from 24% to 15%. Canada rises from 7% to 9%. The United Kingdom declines from 7% to 4%. Germany, Australia, Spain, France, Japan, Italy, and Saudi Arabia remain broadly stable around 3% to 5%.

Gallup's latest update on migration desire is based on a question asked almost annually: “Ideally, if you had the opportunity, would you like to move permanently to another country, or would you prefer to continue living in this country?” Those who say they would like to move are then asked to name their preferred destination.

Results for 2025 are based on interviews with over 144,000 adults in 140 countries. The current estimates include data from China for 2023, the last time the question was asked there.

The most recent analysis period coincides with a sharp slowdown in international migration into the U.S., amid changes in immigration policy and declining migration desire in several regions. External data suggest global migration more broadly slowed in 2024 after surging post-pandemic.

Declining Desire to Move to the U.S.

The U.S. became less attractive to adults in several regions in 2025, with statistically significant declines in Latin America and the Caribbean, sub-Saharan Africa, and Southeast Asia.

Latin America accounts for seven of the 16 countries worldwide where the percentage naming the U.S. as a preferred destination fell by at least 10 points. In the region, the percentage fell from 33% in 2024 to 28% in 2025.

Other Latin American countries that saw double-digit declines include U.S. neighbor Mexico, where the latest 21% who want to move to the U.S. matches the previous low set in 2017 and 2018. In Honduras, desire to migrate to the U.S. dropped 35 percentage points, from 71% to 36%, the largest decline in any country in 2025.

###Embeddable###

Despite the falling numbers, the U.S. remains by far the most desired destination in Latin America and the Caribbean and in sub-Saharan Africa. The picture varies more in other regions.

In Southeast Asia, Japan leads at 23%, compared with 12% for the U.S. In the Middle East and North Africa, Germany attracts 13% and Saudi Arabia 12% of potential migrants, with the U.S. at 9%. In South Asia, Saudi Arabia and the U.S. are roughly tied, each cited by 7%. Within the European Union, Spain, at 11%, and Switzerland, at 8%, rank ahead of the U.S., at 6%.

Global Desire to Migrate Falls, Shifts

Beyond where people want to go, the data also show a shift in how many want to move at all.

Overall, global desire to migrate declined in 2025 to its lowest level in a decade, driven by sharp drops in regions that have long had the highest migration aspirations, including Latin America and sub-Saharan Africa. After holding at a record-high 16% between 2021 and 2024, global desire dipped in 2025 for the first time in years, falling one point to 15%, a level not seen since 2018.

###Embeddable###

In Latin America and the Caribbean, 25% of adults say they would like to move permanently to another country, the lowest level in a decade. The decline is particularly notable in this region, where migration desire has fallen steadily after peaking at 34% in 2021-2022.

Multiple countries across the region recorded double-digit declines between 2024 and 2025. In Honduras and El Salvador, the percentage of adults wanting to leave fell sharply last year, from levels above 50% in several prior years to 35% and 25%, respectively.

In sub-Saharan Africa, where migration desire remains the highest globally, 33% say they would like to move permanently, also a decade low. As recently as 2023, that figure stood at 37%, ticking upward from 36% in 2021-2022.

In regions that are typically on the receiving end of migrants, the picture is different. Migration desire in the United States and Canada (20%) and the European Union (21%) remains near record highs.

In the U.S., notably, the heightened desire to move abroad is concentrated among women younger than 45 . In 2025, 40% of U.S. women aged 15 to 44 say they would move permanently to another country if they had the opportunity, up from 10% in 2014. The trend first rose sharply in 2016 and continued across multiple years, suggesting a broader shift in outlook rather than a short-term political effect.

Bottom Line

It is important to note that desire to migrate is not the same as intent to move. Not everyone who wants to move can or will do so. The 2025 data show that fewer people worldwide are imagining their futures elsewhere, and the U.S., long the world’s most desired destination, is attracting less of that interest than at any point in nearly two decades.

For years, the dominant story in global migration data was a rising desire to move across nearly every region. The 2025 data suggest that pattern is shifting. The declines are widespread and concentrated in the regions that have historically driven global migration.

At the same time, the picture is not uniform. In regions that typically receive migrants, including the U.S. and Canada, along with the EU, desire to leave remains near record highs. And within the U.S., a growing number of younger women say they would move abroad permanently if they could.

These patterns show that interest in moving abroad, and to the U.S. in particular, is shifting across regions. But despite these changes, many people worldwide — an estimated 900 million — would like to move, including about 134 million who would prefer to move to the U.S.

Read Gallup’s analysis of how these shifts in migration desire could translate into changes in population size and human capital across countries.

Andrew Dugan and Michelle Chau contributed to this analysis.

Stay up to date with the latest insights by following @Gallup on X and on Instagram .

For complete methodology and specific survey dates, please review Gallup's Country Data Set details . Learn more about how the Gallup World Poll works.

###Embeddable###

The Decoherence Trap: When AI slop drowns out the signal in an endless sea of noise

Lobsters
maevyn.codes
2026-10-16 12:36:29
Comments...
Original Article

TL;DR

This essay introduces the concept of decoherence : the accumulation of locally valid but mutually incompatible or redundant models within a system, such that the cost of change is dominated by translating among those models and preventing unintended side-effects.

In other words, it's what happens when slop drowns out the signal in an endless sea of noise.

Decoherence grows relative to the rate of change of a system, and it increases faster the more decoherent a system is, resulting in runaway exponential growth. It is not a new phenomenon, and humans have always countered it through carefully finding ways to do more with less, unifying disparate patterns and models into a cohesive whole. However, the widespread use of AI is currently producing it at a rate that is unsustainable.

The good news is that this rules out the specter of runaway recursive self-improvement, the intelligence explosion that goes parabolic before anyone can react, as decoherence both prevents AI from improving in a bubble and limits the rate at which it can improve outside of it. The bad news is that we are barreling toward a different kind of disaster: Decoherence Collapse.

Imagine a building, let's say a small office tower. When this building was built, they used a type of pipe that will degrade over time and eventually need to be replaced. This is standard infrastructural debt ; basic wear and tear, as they say.

Then, let's say that when it comes time to replace the pipes, you need to change them over to a new standard. This could be because of new building code requirements, because the old pipes simply aren't made anymore, or because the new pipes are much better and easier to maintain. This is standard technical advancement debt , the need to upgrade and transition due to the forward progress of technology over time.

There is a third form of debt that can arise based on how the transition from old pipes to new pipes is done. Consider the following options:

  1. Shut down the building and replace all of the pipes at once. This is a very disruptive and expensive method, since you can't use the building while the process is underway and you have to pay for the replacement up front. But the process is complete by the end of it.
  2. Shut down each floor, one at a time, and replace the pipes on that floor. This is less disruptive overall, but somewhat more expensive because you still have to pay up front, and you have to pay a premium for the extra labor required to keep things running smoothly as the work goes on.
  3. Replace the pipes as needed, when they begin to fail. This is the least disruptive strategy, and it allows you to amortize the cost of replacing all of the pipes over time, with one small repair after another.

For most people, option 3 is very appealing. It allows them to keep things running smoothly and to spread out the cost of maintenance. And if we can just make like the Ship of Theseus [ 1 ] and replace the pipes one at a time, why shouldn't we?

Well, for one thing, it creates decoherence .

And decoherence is, by far, the worst form of tech debt.

Evolution

The Ship of Theseus actually gives us a good lens for understanding the true scope of decoherence. We know how to build ships made of wood, and we know how to build ships made of steel. You can repair a ship one piece at a time with the same material, as the original thought experiment goes, and the ship remains functional, with all of the original designs and structures that went into it intact.

But do we know how to build every iteration of a ship in between wood and steel? Could you, say, slowly replace every piece of a man-of-war and incrementally turn it into a modern destroyer? And have it functional (for some definition of functional) at every step in the process?

It's not that the answer is an absolute "no". If we are creative enough, if we had the best minds working on it, then I'm sure there would be some path to doing this. But it would require ingenuity and skill and craftsmanship . It would require attention to detail. And, crucially, you would really want to complete the process, because the half-man-of-war, half-destroyer vessel is likely not going to be very good in modern combat.

Returning to our plumbing example, we can see how the same strategy plays out regularly in the world of construction. Every time a pipe breaks, the plumber is called, walls are opened, the repair is hand-crafted for that specific area, and then everything is closed back up. If you're lucky, the plumber will leave detailed notes, and if you're not, then years later some poor sod is going to open that wall back up and say to themselves, "What the hell is going on here?"

Now, multiply that process over time as we slowly replace the pipes in our building, and the end result is a patchwork of old and new pipe that has much more complexity than either system on its own. Every joint, every hand-crafted patch, is its own little bundle of unique forces and properties that are understudied, and thus requires an expert in both systems to fully understand and work with.

On the surface, this is fine. The pipes work, why does it matter how they work? As long as it's a good patch, who cares?

Well, what happens if we, say, want to build an annex?


For the purposes of this thought experiment, we'll say that the water for the annex needs to be routed through at least part of our existing building, using the existing pipes. And, crucially, we need to increase the overall water pressure in the system.

Now, the question is: Is it safe to increase the pressure?

If we had all type A or all type B pipes, even ones that had been patched and repaired over time, then this would be a straightforward question. Both systems are well understood, both have tools and processes for calculating their capacity, and people run these calculations all of the time.

But, if we have an unknown mixture of both systems, suddenly we have to do a lot more analysis to answer that question. Every patch could change the answer, even ones at the other end of the system, because they're all tied together.

A small office building drawn faintly, with its plumbing inside: a main from the street feeds a network of pipes that widens floor by floor, and new runs reach out toward an annex next door. Dots mark the patched joints. Most hold; two, on different floors, fail. A small office building drawn faintly, with its plumbing inside: a main from the street feeds a network of pipes that widens floor by floor, and new runs reach out toward an annex next door. Dots mark the patched joints. Most hold; two, on different floors, fail.

And this is where the true complexity of decoherence becomes clear. When we try to make changes to decoherent systems, it requires far more expertise and skill than working with either system alone. The engineer working on the system needs to trace and understand it much more thoroughly and carefully, because their changes may have unintended consequences. And yes, I count plumbers as engineers, at least as much as software devs. Have you seen them think through pressure forces in drain pipes in real time? It's remarkable.

That is no small task, and it is best if it's not rushed. But for the outside observer, without an understanding of the depth of the problem, this can be frustrating. Normally this part is easy. Why is it taking so long this time?

In this situation, management will oftentimes apply pressure to get things done faster. When pressure is applied, the expert doesn't do the full analysis faster; they just stop earlier and do something they're pretty sure will work. A sloppy join, an unusual part, maybe some extra safeguards, just in case.

Not completing the task thoroughly, however, creates a knock-on effect: this particular change has lower quality, and it makes the system more fragile and complex. This means the next change will take even more thought and care, and if the pressure on the engineer is the same, then they will do an even worse job.

That is a pretty messy situation as it stands, and you can already see a sort of exponential growth of complexity taking place here. But wait, it gets worse! Let's consider the next level of decoherence: Starting a second transition before finishing the first.

The Maze

The tricky part about software, as compared to a physical building or other types of real-world systems, is that it's all sort of invisible.

Coders walk through the halls of codebases every day. We navigate the labyrinth successfully so often that we become familiar with every corner and every turn, and when our walks become longer, with more corridors and dead ends and trap doors, we feel it much more immediately and intuitively.

A maze extending past every edge, with a dot stepping through it A maze extending past every edge, with a dot stepping through it

But this is difficult to relate to people who can't even see the maze, who don't walk it with you every day. And when it comes time to clean up some of your debt, to make the maze shorter and less winding, your proposals are hard to sell up the chain, even to those who used to walk mazes a long time ago. In the end, none of them know your maze. They don't know the trials you face each and every time you enter it.

By comparison, our plumber friend in the real world can show the building owner the absurdity of their pipes much more directly .

A tangled patchwork of plumbing pipes
Courtesy of r/plumbing [ 2 ]

When we start to mix more than two systems together, with multiple patches over time in a haphazard way, the complexity of the maze explodes . It is now combinatorial: you need to think of A -> B, A -> C, B -> C, A -> B -> C, C -> B -> A, and so on.

We can of course insulate engineers from this somewhat. We can come up with best practices, we can use tools and frameworks to isolate part of the system from another part (for instance, by using a pressure-limiting valve in our pipes). Inevitably, though, it gets to a point where even the best engineers, the smartest people, can no longer safely navigate the maze.

They may be able to do it 80 or 90% of the time, but they will eventually take a wrong turn

forget to leave a trail of string and find themselves stuck

within the immensity of the unending growth that outpaces their every step into eternity.

A lone figure with a lantern at the entrance of a vast maze A lone figure with a lantern at the entrance of a vast maze

This is the Decoherence Trap. The maze grows onward and onward until it swallows you whole and leaves you lost in the dark. Until it becomes so massive that it would take lifetimes to navigate.

Well, lifetimes for humans anyway. But what about AI?

Simulation

Humans get tired and reach physical limits, but autonomous agent swarms can keep going around the clock, collectively and tirelessly mapping the maze like the good little robots they are. If scale is the problem, then shouldn't we just be able to throw more compute at it and call it a day?

Well, that depends on the nature of the complexity we are facing. Does it:

  1. Grow linearly with the size of the codebase as a whole, OR
  2. Grow exponentially , with each change increasing the likelihood that the next change will add even more complexity.

If it's the former, then yes, as the size of the problem grows we can just keep adding more agents and more data centers and working the problem at about the same pace. But if it's the latter , then adding more capacity will only get us the ability to push a bit further before the size of the maze threatens to consume all of the compute on Earth (and in space, should SpaceX's plans [ 3 ] work out).

In my experience, it is the latter. When a plumber opens up a wall and sees a mess, it isn't clear what's going on. They may choose to use pipe A, they may choose to use pipe B, or they may choose to add a new type of pipe entirely in their confusion. The same is even more true for code.

We can see this play out in a simple simulation below. Here, we have a graph that represents a codebase (or some other complex system), where:

Nodes

represent different components within the system

Node Size

represents the size of the to component

Node Color

represents the dominant paradigm that the component belongs to. You can think of this as the "kind" of component - different materials of pipes, different constructs in code, different types of systems, etc.

Edges

represent connections between those components

Loading precomputed timeline…

This is a recording of a few runs. If you want to play with the full simulation yourself, changing the settings and watching what happens, you can find it here .

An actor, representing a developer, implements a "feature" by walking some random subsection of the graph and then mutating it. The actor's base behavior is shaped by its coherence factor :

  • Lower coherence means the actor rushes through the problem more quickly and makes snap decisions, preferring simple solutions without considering the context around them, and overall adding complexity to the graph.
  • Higher coherence means the actor takes longer and approaches each problem with more thought, and thus has a higher chance of making a less complex change or even removing complexity.

At first, the lower-coherence actor moves very quickly compared to the higher-coherence actor. However, as the graph changes, it impacts the walks as well. Each of the following slows down the actor's progress:

  • Higher connection degree (number of edges) . This represents the added burden of having to pull in the context of each adjacent node, at least partially, in order to understand its impact on the current node.
  • Transitions between colors . There's overhead when switching paradigms as you implement a feature, and it requires the actor to again gain context and understanding of each paradigm AND how they connect.
  • Path length . The walk itself has a chance to extend further as there are more connections and transitions needed. This represents the actor needing to read more and revisit more in order to get all of the context needed to implement the feature, and it can increase indefinitely until you hit the size of the entire system (meaning, in order to make a change anywhere , you need to understand everything ).

If we take the distribution of features built over time and coherence, we can plot the result and see a shape that should look familiar to any engineer: The Sweet Spot .

In the Sweet Spot , the system is relatively coherent and we actively invest in it to ensure it stays that way. There are a few dominant paradigms, but there's enough jitter that things can change and adapt over time, and we aren't overly perfectionist about everything.

Above the Sweet Spot , we work extremely hard to make sure every new node fits into the existing paradigms, and we remove complexity at every turn. This takes much more time and slows down feature work, but in the worst case it still produces a highly coherent system that can be iterated through relatively quickly.

Below the Sweet Spot , the drop-off is precipitous. We very quickly lose speed as the codebase becomes exponentially more complex. If the coherence factor is negative , and no care is given to maintaining coherence, then the time to ship a feature grows without any apparent bound.

We can also see how different strategies affect the system over time from different starting points. If we start with a highly coherent system and use a mostly decoherent strategy (a coherence factor of +0.2, where some coherence is maintained but shortcuts are still taken), then the graph devolves slowly at first before hitting some inflection points and entering the Trap.

By contrast, if we take a system that starts out decoherent and apply effort to recohere it over time, then we can move the needle toward coherence and accelerate.

Now, critics may note that this simulation has arbitrary weights and does not definitively prove that this is how complex systems will evolve. This is not my assertion.

What the simulation demonstrates is that this curve can exist as an emergent behavior of simple rules and local decisions. Actors changing the system today can improve or degrade the ability of future actors to change the system tomorrow. This is an obvious truth, but I think the implications of it can be quite easily lost if we can't actually see the complexity like we can in the real world, with pipes and wires and physical hardware.

So, we come back to the question on agents: Can agents work on these systems and maintain coherence? Or do they, over time, introduce decoherence even slightly ? Because there is another crucial risk to consider here: decoherence does not grow over time , but with change .

If you build a decoherent system today, and then stop changing it for 10 years, and come back to it, it will be exactly as decoherent as you left it. It may have other forms of technical debt, but those are not related to decoherence. Decoherence grows or shrinks only when changes are made to the system.

And if you're making a lot of changes really quickly, you can also grow decoherent just as quickly . Even a very slight rate of increasing decoherence can spiral out of control before we even know it.


Here's the thing: We've been dealing with this phenomenon for much, much longer than agentic development has been around. Every single company I have ever worked for had massive amounts of decoherence, and less-experienced engineers and engineers under pressure also tend to add more decoherence over time, so it's not like humans are perfect here.

In fact, I would venture to say that most companies operate somewhere well below the Sweet Spot , and indeed operate in a continuous cycle where:

  1. Decoherence grows to the point that no features can be completed in a reasonable amount of time.
  2. A large effort is made to reduce decoherence.
  3. The effort produces results and features begin shipping again at a slow-but-acceptable pace.
  4. The effort is not completed, or if it is, it still doesn't push us all the way to the Sweet Spot . Resources and focus are shifted, and the system begins to decohere again.

Wash, rinse, repeat. Some companies may recohere faster and longer than others, and a very small percentage manage to stay in the Sweet Spot over time, but it requires a dedicated engineering culture of excellence (Apple comes to mind; say what you will about the state of macOS, I would take it any day over Windows).

The question is, are agents actually better than the average engineering culture at this point? Significantly better, at that?

So far we have not seen evidence of this. If anything, the early research points the other way.

A Harvard study [ 4 ] of 718 companies found that adopting coding agents raised the amount of code written by 30%, but did not produce a measurable increase in finished work. The extra code piled up in review instead: pull requests took 49% longer to review, and nearly twice as many were sent back for changes. A Carnegie Mellon study [ 5 ] of open source projects that adopted Cursor found a large jump in velocity that did not last, alongside an increase in code complexity that did, and that the added complexity was itself a major cause of the later slowdown. And an analysis of over 300,000 AI-authored commits [ 6 ] across more than 6,000 repositories found that about one in eleven of them, and up to one in seven depending on the assistant, introduced at least one quality issue, and that nearly a quarter of those issues are still sitting in the code today.

More code, the same amount of finished work, and more complexity left behind with every change.

Progression

Now, let's address the primary counterargument, which is the technological progression argument. It goes something like this:

The first generation of agents will produce inferior-quality code, but as long as it's "good enough" then they can still replace humans for most coding tasks, and we can build our processes around them in anticipation of more capable agents in the future.

This is effectively the story of automation during the Industrial Revolution, where the first generation of textile machines was indeed much worse than humans, but eventually they did catch up. As Cory Doctorow [ 7 ] has pointed out, industrialists raced to adopt automation because it allowed them to discipline labor and consolidate power at the expense of the workers and the public, who had to endure far worse working conditions and worse quality goods for generations. [ 8 ] [ 9 ]

Output per worker and real wages in Britain from 1780 to 1900, indexed to 1800. From 1800 to 1830, output per worker grows 0.63% a year while real wages grow 0.00% a year. From 1830 to 1860 output grows 1.12% a year and wages 0.86%, and from 1860 to 1900 output grows 1.03% a year and wages 1.61%. Over the same stretch, the share of income going to profits doubles from about 20% to over 40%. Output per worker and real wages in Britain from 1780 to 1900, indexed to 1800. From 1800 to 1830, output per worker grows 0.63% a year while real wages grow 0.00% a year. From 1830 to 1860 output grows 1.12% a year and wages 0.86%, and from 1860 to 1900 output grows 1.03% a year and wages 1.61%. Over the same stretch, the share of income going to profits doubles from about 20% to over 40%.

But I want to build on this further, because there was a core reason that it worked for textiles: The machines produced inferior products, but they met a minimum bar.

The machines themselves were also very well designed, for what they were. I spoke recently to a mechanical engineer who extolled the quality of those generations of machines, how well they operated, how long they would last. Yes, they may have produced low-quality slop, but they produced it quickly and tirelessly and for many, many years, until the next generation came along and replaced them with incremental improvements. And crucially, while the machine was working, there was no increase in decoherence . Wear and tear, yes. Generational advances, yes. But not decoherence.

Now, here's the rub: The logic of this argument is assuming that code is analogous to textiles . That is, code is the final product that users will pay for. But nobody wants to buy code. They want to buy applications .

In other words, code is not the textile, but the textile-machine. Every time a screen is rendered, a form is submitted, a record is updated, that is the "product" that the code produces. This is why code has been so immensely profitable, because every additional customer requires no additional overhead. The raw materials are bits and bytes of electricity on chips, and the product is information and processes encoded into those bits.

A more accurate analogy would be if we somehow went back in time and made not just a textile-machine, but a machine that designed textile-machines. That iterated on the next generation of textile manufacturing on its own, semi- or perhaps fully autonomously. This is something that has never existed before, and is unprecedented in the history of automation.

This is the dream of recursive self-improvement. Of an intelligence explosion, a technological singularity [ 10 ] . This is the dream of AI in the first place.

So, how has that been going?

Singularity

Well, the goalposts have been subtly shifting . In May of this year, Tom Reed, a skeptic of the intelligence explosion theory, coined the term " the Goodhart Singularity [ 11 ] " to describe the limitations of AI iterating in a bubble without new data about the real world. This is based on Goodhart's law [ 12 ] :

When a measure becomes a target, it ceases to be a good measure.

Marilyn Strathern, paraphrasing Charles Goodhart

In a post from last month, Tom Davidson, a senior research fellow at Forethought [ 13 ] , conceded that data bottlenecks will slow down progress [ 14 ] once AI reaches what he calls the "human-quality ceiling": the point where there's no better human demonstration left to learn from, and AI has to manufacture higher-quality data than anything that exists. Davidson has written extensively about models of AI takeoff speeds, and later forecasts built on his work, most prominently the AI 2027 scenario [ 15 ] .

So the fact that Davidson has wavered, if even slightly, is notable. But he argues it's a one-time slowdown, not a wall, and in general, those expecting a fast takeoff still think that it will be able to recursively self-improve on its own with relatively little data, and that this process could spiral out of control in isolation in a data center and lead to the birth of a super-intelligence.

The way they expect to be able to do this is via what they call a Software Intelligence Explosion [ 16 ] (SIE). Specifically, a subtle but load-bearing moment in the argument comes from Davidson's post on data bottlenecks:

Rather than building RL environments that teach the construction of real-world software artefacts, AI must construct RL environments that teach AI to make better software than anything that exists in the real world.

To be clear, I think this will be possible! It is easier to construct difficult challenges and verify their answers than it is to solve them. Already today, human experts build RL environments that produce data above the human-quality ceiling. Data quality will not hit a wall at the human ceiling.

Let's break this down.

What Davidson's saying here is that AI must be able to make better software than anything that exists in the real world, largely in isolation. To do this, it will need to be able to make a Reinforcement Learning environment [ 17 ] that can produce that software. The way this works is essentially:

  1. Define a goal
  2. Define a set of things you can do
  3. Use an algorithm to try out a lot of different methods to accomplish the goal
  4. Measure how close you get to accomplishing it, and how good your method is
  5. Find the best method(s)

For an SIE to occur, the AI would need to be able to do this entire thing on its own to discover better and better algorithms for learning, and that's the important part. It's not about producing better software per se, it's about producing better algorithms for learning and improving .

The Goodhart Singularity effectively argued that an AI, in isolation in a data center, would not be able to do this for most real-world tasks of consequence due to the measurement step. If you want to figure out how to build a better car or rocket or computer chip, you might be able to build a simulation and try things out, but you would still need to test against the real world to validate your findings, or you would eventually drift further and further away from reality as you pushed the designs to more extreme places. This introduces a rate limit which would slow things down significantly.

Three paths from one starting point. Reality wanders. A path checked against it drifts a little and snaps back at every check. A path that is never checked curves steadily away. Three paths from one starting point. Reality wanders. A path checked against it drifts a little and snaps back at every check. A path that is never checked curves steadily away.

But this isn't true for some domains, which is what Davidson is saying in the second part. For games like Go or chess [ 18 ] , the rules of the game are the entire world and there are clear victory conditions, so it's possible to run in isolation and find better and better strategies, and also to find better algorithms for finding better strategies. The same is true for more complex games like StarCraft [ 19 ] or Dota [ 20 ] .

But these are games , and we can do this because the victory conditions are clear and simple and the rules or environments are very limited. In order to get our explosion, we need to be able to apply these methods to something that matters , and we need to be able to verify that in the bubble of a data center, without checking against the outside world.

Two five-step learning loops. In a game the loop closes on itself. For anything that matters, step four, measuring, has to leave the room and wait on the real world. Two five-step learning loops. In a game the loop closes on itself. For anything that matters, step four, measuring, has to leave the room and wait on the real world.

That brings us to software. I think that SIE proponents have really latched onto software because they see it as a way to bridge this gap. Software can run in isolation, and you can test it in isolation very easily and quickly. That's perfect for creating an RL environment, and they think that eventually, we will be able to build one that doesn't require syncing with the real world.

Because after all, it's software . It can do just about anything, right?

You can see how this would feel so natural to those in Silicon Valley. We pride ourselves on being very intelligent and being able to solve big problems. A significant portion of computer science education is all about logically proving properties of software and algorithms and the like. Will this program complete? Will this sorting algorithm be fast? How fast? Will this system be safe and not crash for all cases that could ever possibly exist?

We're used to thinking about problems in this way, and used to the idea that software has no limits. Tech took over the world, so it's only a natural extension of thinking that if you can teach a machine to write code, eventually, it will be able to teach itself to be better at writing code.

And then, eventually, the machine will take over the world too.

Better Software

The problem with this viewpoint is that it fully misses what actually makes software good , which is coherence.

Allow me to elaborate. Software is a tool to accomplish a goal in the real world. That goal may be many steps removed, through many abstractions, but whether or not it succeeds is ultimately determined by how well it solves that goal.

You might think, ok, but once you have the software and it solves the goal, can't you use that as the output to target? And then the AI could just iterate on better ways to achieve those goals?

If we define "better" as something simple and easily measurable, like lines of code, speed, memory, or efficiency, then yes. These are all important, but if we treat them as the target, we'll end up with software that is small and fast and completely decoherent .

Code gets fast by skipping work, and it can only skip work by assuming things about the rest of the system: this list is already sorted, that value is never zero. Every one of those assumptions is a hidden connection that nobody wrote down. Optimized native code sits under abstractions for a reason: we need it for performance, so we seal it in a box where its assumptions can't leak. If we wrote all code like that, it would be a tangled mess. A practical example in JavaScript is combining multiple logical classes into a single class to keep hot paths monomorphic [ 21 ] . It's always a huge pain, but it pays off as long as you never have to fiddle with it.

That would be fine if we only had to write software once and never touch it again. But that's never true in practice. Because software is the never-ending Ship of Theseus . Applications and libraries and frameworks must evolve over time to meet changing conditions on the ground: real-world constraints that shift and evolve as we change how society works, as we discover more about the natural world, and as we push the limits of what we can achieve.

So good software is adaptable over time. You can take the existing technological capital (all of the software we have written before), and you can quickly recombine it to solve new problems on the fly.

And what makes it adaptable is coherence . Most of the big advances in computer programming and software quality have been about making software more coherent, and the only way to test if it is more coherent is with real-world feedback.

Let's break it down with a really concrete example: futures [ 22 ] .

Futures make asynchronous programming easier in some really fundamental ways. Before futures, there were lots of ways you could handle async, and it was a predictably chaotic mess. Specifically, a decoherent one: many locally sensible ways of doing the same thing, none of which fit together.

Developers would have to live within that mess, and they would have to carefully and thoughtfully navigate between all of the different types of async that any one app might have. If you missed a step or forgot something, you would have difficult-to-track-down bugs and issues. And the code itself read like a horror show, as callbacks multiplied and as apps got more complex and had more and more asynchrony to handle.

Futures were first introduced as a concept in the 1970s, with the core idea being that they were a placeholder for a future value. The first concrete implementation was in MultiLisp, in 1985. But they didn't make it into the mainstream until the 2000s, when Java added them in 2004, and they didn't get popular until the 2010s when chainable promises were first introduced into JavaScript and C# shipped Task. [ 22 ]

Timeline of futures: the idea in the 1970s, MultiLisp in 1985, Java in 2004, and JavaScript promises and C# Task in the 2010s, about 35 years from idea to mainstream. Timeline of futures: the idea in the 1970s, MultiLisp in 1985, Java in 2004, and JavaScript promises and C# Task in the 2010s, about 35 years from idea to mainstream.

There were two main reasons for this:

  1. The first futures APIs worked, but were clunky. You could pass around a future, but when you tried to read the value it would block, which meant you had to be careful about when you did it. They also weren't independently chainable, so you couldn't really fork the future easily.
  2. Futures introduce a decent amount of overhead. You have to create a wrapper object to track the state each time, rather than just storing a function pointer, for instance.

However, over time we found the APIs that worked well, worked out the kinks, and we realized that the overhead was worth it because it made it easier to reason about and combine larger systems (compute and memory getting cheaper didn't hurt either).


Bringing this back to AI.

In order to build better AI software, you need to be able to test if it is actually better. And importantly, as we mentioned before, we have to be able to measure if it's better in the bubble . We can't check outside of the bubble because that brings us back to being rate-limited by the world.

So, what can we check inside the bubble?

Well, we've narrowed it down to:

  1. Games
  2. Software
  3. Mathematics

Games don't really get us that far, because they're not grounded in the real-world tasks we care about. So let's move on to software.

As we've established, good software is coherent. So, how do we measure coherence?

Well, you take an abstraction and see how well it holds up in different contexts, and how much the code has to bend to fit each one. Since we're not allowed to leave the data center, there are exactly two options for how we can do this:

  1. Apply it to all existing software. This will only get us so far, because even if it works well for all of them, there's no way to know if it will work well for all future software. Callbacks and event loops weren't even common until GUIs became standard, and early web servers still used threads and traditional parallelism, so it wasn't clear how valuable futures would be until the entire set of programs that make up the web was discovered and explored. We would be overfitting to the programs we already know. The result can look perfectly coherent today, and then the first new problem that doesn't fit has to be patched around.

  2. Create new software. This is something we can attempt to do in theory, but in practice we can't just generate plausibly useful programs to expand the training set. Once again, software is a tool to accomplish a goal in the real world, and if we don't validate its usefulness from time to time we could drift substantially from reality.

    Beyond this core issue, the other important test of coherence is how well an abstraction or concept translates over time, across a variety of different contexts and evolving requirements. A standard can look good on paper and even work well in one environment, like desktop computers, but then be completely inadequate for mobile devices or cloud-based systems at scale.

    You would not only need to generate plausibly useful software, you would also need to generate plausible evolution scenarios to see how it adapts, what happens when not everyone upgrades, when people (or agents) lag behind or decide to go in a different direction, when you have an ecosystem of systems that are a constant moving target.

You can get arbitrarily good at making the software we already have more coherent. Getting better at the software we don't yet have requires either (a) waiting for the real world to produce new software or (b) making new software, testing it in the real world, and waiting for it to evolve over time. Both of these options require round trips outside the bubble.

Putting it all together now:

  1. We can make an AI that produces faster, smaller, and more efficient software beyond the human ceiling while staying inside the bubble.

  2. We cannot make an AI that improves software coherence beyond the human ceiling without leaving the bubble, as noted above.

  3. Because AI cannot check if the software is universally better without leaving the bubble, the AI cannot tell if it is actually improving its learning algorithms or if it's drifting.

  4. We're right back at the Goodhart Singularity.

This puts the nail in the coffin for a fast, isolated SIE right off the bat. But we can also approach this from another angle, and this one also applies to other forms of intelligence explosions.

  1. Any form of intelligence explosion depends on the AI researching and improving its own software or hardware, with each generation building on the improvements of the previous one.

  2. Each generation will have some percentage chance of introducing decoherence into its systems, since the AI will be building or expanding systems beyond the frontier of its current understanding.

  3. If the AI moves too quickly, it will compound decoherence faster than it can correct, leading to a stall or regression in its overall capabilities.

  4. If the AI validates and verifies all of its findings, it will be rate-limited by its capacity to gather data from the world around it.

  5. This cannot be addressed by better learning algorithms developed in pure isolation, because the AI has nothing to measure these against (see the first proof above).

We can see what the failure mode in point 3 looks like in the following chart, adapted from Eth and Davidson's model in their SIE paper [ 16 ] . Their projection has the growth curve going parabolic before month 5. The chart below keeps their model and adds one assumption: that the cost of each change doubles as accumulated work grows, which is what decoherence looks like in human codebases.

Growth of AI software over the first year after AI research is automated, on a log scale. Eth and Davidson's model with returns of 1.5 accelerates without limit and passes one hundred million times before month five. The same model with a cost of change that doubles as work accumulates follows it at first, then flattens: at about 460,000 times after a year when the cost doubles every 1,000 units of work, about 10,000 times when it doubles every 100, and about 200 times when it doubles every 10. Growth of AI software over the first year after AI research is automated, on a log scale. Eth and Davidson's model with returns of 1.5 accelerates without limit and passes one hundred million times before month five. The same model with a cost of change that doubles as work accumulates follows it at first, then flattens: at about 460,000 times after a year when the cost doubles every 1,000 units of work, about 10,000 times when it doubles every 100, and about 200 times when it doubles every 10.

If this is true and AI cannot bypass decoherence, then ultimately AI is rate-limited by reality. It's not that it won't ever surpass us, but that it is a long way off from doing so in any meaningful sense, and even when it does it will still have to do all of the work that reality demands, constrained by the same physical and informational limits that govern us.

Davidson claims we could gather sufficient data easily by just recording real-world tasks:

If the whole world worked together to make this happen quickly, it would not take long. For each job, 1000 people could record their screens and wear video cameras on their heads, and within 4 months AI would have 300 years' worth of experience.

This, fundamentally, underestimates just how complex the world is. If we expect a machine to be able to improve itself indefinitely, it can't just be good at moving a cursor on a screen or identifying objects in videos. It needs to develop deep insights into understanding the world itself. It doesn't need to experience it like a human, but it needs to be able to capture the same kind of information, the same perspective, to measure the intangibles and subtleties that cannot be captured by a screen recording and video feed alone.

It needs to be able to make connections between things that, at first, appear to have no relationship at all. Which brings us to our last topic.

Mathematics

Mathematics is the other domain which could, in theory, be checked in the bubble by using verified proofs. If an AI can get better at math in a bubble, then it can develop a better learning algorithm overall, and then maybe the SIE argument still stands.

The thing is, math is sort of arbitrary . We make a lot of decisions about how it works, and what is useful. For instance, the number zero was not always accepted as a valid number. Imaginary numbers took centuries to be accepted, and their four-dimensional cousins, quaternions, struck Lewis Carroll as so absurd that he is thought to have satirized them in the Mad Hatter's tea party [ 23 ] .

These are examples of things that we take for granted, but which really aren't as obvious or as natural as we might think. They only gained wide acceptance when they were used in real-life practices, and when the outputs lined up with reality in meaningful ways.

In a similar way, Boolean algebra, the fundamental mathematics that underlies computing, was also considered an esoteric branch of mathematics for nearly a century. It was first published [ 24 ] by George Boole in 1847, but it had no practical applications, and it was studied as a curiosity of formal logic rather than a tool for serious engineering.

The importance of this math wasn't discovered until the 1930s, when Claude Shannon was working at MIT on the relay controls for Vannevar Bush's differential analyzer. He had previously encountered Boolean algebra in a philosophy class he took during his undergrad, [ 25 ] and realized as he was working on circuits that they matched up perfectly. His master's thesis, "A Symbolic Analysis of Relay and Switching Circuits," [ 26 ] made the connection in 1937, and the rest is history.

Timeline from Boole's algebra in 1847 to Shannon's thesis in 1937. AND lines up with two relay contacts in series, OR with two in parallel, across ninety years in which the algebra had no use. Timeline from Boole's algebra in 1847 to Shannon's thesis in 1937. AND lines up with two relay contacts in series, OR with two in parallel, across ninety years in which the algebra had no use.

Boole wasn't just inventing mathematics for the sake of it. He had an intuition that the properties he discovered, the system he made, would be important someday. He thought he was discovering the laws of human thought, and while that might have been somewhat misguided, it was interesting enough that logicians and philosophers studied it and passed it down, until Shannon found it and built on it.

Would Shannon have been able to find that connection in the age of AI? If he hadn't been standing in a room full of relays with a real problem in front of him, telling him where to look, and instead had been sorting through endless reams of proofs that were all locally valid and globally meaningless?

Two fields of identical tick marks, each a valid proof. In 1937 there are two dozen and the one that matters is easy to see. Now, with AI, there are hundreds and the same tick is nearly lost. Two fields of identical tick marks, each a valid proof. In 1937 there are two dozen and the one that matters is easy to see. Now, with AI, there are hundreds and the same tick is nearly lost.

There are an infinite number of logical and mathematical systems you can define in a vacuum, and you can get extremely good at building and exploring these hypotheticals. Figuring out whether or not they matter is a different skill, and that is one that cannot be improved in the bubble.

Mathematicians are already worried about this dichotomy. In September, twenty-five Fields medalists, Terence Tao among them, signed a declaration [ 27 ] arguing that solving problems is only a stand-in for the real goal of mathematics, which is understanding, and that mass-producing true statements can erode the ground that new ideas grow from.

What happens when all of that ground is worn away?

Collapse

The work of building coherence is a long and unrelenting process. It's the work of exploring every crevice and looking under every rock. Of getting down into the mud of reality and letting it seep into your boots as you grope around blindly, looking for all of the different ways that the world can configure and reconfigure itself around you, endlessly, without letting it swallow you whole.

It's not just about solving problems. It's about figuring out what problems we're trying to solve in the first place.

Of figuring out all of the problems we're trying to solve, and finding a single solution that solves each one without exploding into a labyrinth of complexity.

Which brings me to my last point.

Pixel-art Omarchy wordmark with the tagline: Beautiful, fun and agentic Linux by DHH. The malleable OS for the age of agents. Vibe your way through every alteration, tweak, or trouble. Pixel-art Omarchy wordmark with the tagline: Beautiful, fun and agentic Linux by DHH. The malleable OS for the age of agents. Vibe your way through every alteration, tweak, or trouble.

There's been much said about Omarchy [ 28 ] recently. There are many who love it, and many who are, shall we say, skeptical of an agent-forward Linux distro. They have charged forward rather quickly into the space, and appear to be morphing from the original goal of being a clean set of defaults toward a full distro with a custom kernel [ 29 ] .

Now, I want to be clear that experimentation at the edge of the ecosystem is important. Forking, exploring ideas, figuring out what works without constraints, and bringing your findings back to the community is a huge part of what makes Open Source Software work so well.

But I'm worried here.

I'm worried that somewhere along the line, we may have forgotten that we are all climbing the mountain together. That what has made us so successful and so resilient as a community, what has advanced computing so far so quickly, is the process of building coherence.

Back in the 80s, 90s, and all the way through the 00s, every company managed their own stack. Each server was its own little bundle of dependencies and scripts and OS versions and so on. You needed a team just to keep things running smoothly at your average company.

During the OS wars [ 30 ] , that fragmentation was worse. Unix did not have a clear successor, and Windows was gaining ground with an entirely different paradigm. If Linux hadn't been built in that time, and captured the aging *nix ecosystem, where would we be today? Yes, I'm aware that FreeBSD was a thing and could have taken its place. What I really mean is: what if there had been no free software movement at all?

Would we be paying license fees every time we boot up a container in the cloud?

How many startups wouldn't have been able to get started, just because of the costs of running their stack?

That fragmentation was also the reason every system started to feel old and clunky over time. The entire ecosystem was decoherent, and much of the work over the last two decades has been about adding coherence (and capturing some of that value in SaaS products, but I'm getting ahead of myself).

I fear we may be practicing a sort of slash-and-burn agriculture here, where we are throwing away the coherence we have built in favor of rebuilding every dependency, customizing every piece of software, extending in every direction to solve short-term problems.

And not realizing that all the while, we're running deep into the trap.

A much larger maze with three regions. A small bright central region is the amount of the maze that humans can work within. A larger purple region around it is the amount that agents can work within. Beyond that, the walls scatter out of alignment, and this is where it all falls apart. A much larger maze with three regions. A small bright central region is the amount of the maze that humans can work within. A larger purple region around it is the amount that agents can work within. Beyond that, the walls scatter out of alignment, and this is where it all falls apart.

What humans can handle (and fix over time)

What agents can handle (but not back out of)

Unreachable with all of the compute on Earth

If we push too long and too far without maintaining or rebuilding coherence, with current trends, we'll end up in a place where we must use agents to maintain our systems, because the systems will be so large and so overwhelming that we cannot do so ourselves. But if we get caught there, and it turns out that agents cannot back us out by doing the repair work, we may find ourselves in a very uncomfortable position:

Locked into a development model that slowly degrades our systems no matter how much effort we put into fixing them.

It's not that we won't be able to eventually fix the systems. But it might take years or even decades to do so, and in the meantime, we won't be able to ship features or make progress on the many other pressing problems we have in our society.

This is what I call Decoherence Collapse . And I am far more afraid of it than runaway super-intelligence, because it's actually happening right now, in front of our very eyes.


I do want to be clear that there is some utility in AI, I just think it's more on the margins than in replacing core workflows or running fully autonomously. I subscribe heavily to Cory Doctorow's reverse-centaur analysis [ 31 ] - we don't want the machine driving us, we want to be driving the machine. On that note, you can read my AI Usage Policy and Guide for a more detailed discussion on how I approach it in my own work and life.

And as I've said repeatedly in this piece, decoherence is not a new problem. If anything, it has existed since the beginning of human civilization, or perhaps even further back. It is a natural sort of decay or degradation, a type of entropy, that we have always dealt with and will always have to deal with. With that in mind, I want to leave you with two last thoughts.

  1. Decoherence only ever changes when the systems themselves change. This means that no matter how bad it gets, we can always stop moving forward and start backing ourselves out. If AI has pushed us deep into the trap, it might take years or even decades to fully recover, but the hardest part is up front. Every part after will snowball, as long as we keep focusing on improving coherence and finish the job. If we improve it just enough to go back to our old patterns, we'll only be restarting the cycle.

  2. We already have processes that are known to improve coherence over time. Humans have found ways to create more coherent systems, and those systems are in large part what has enabled the scope and scale of technological progress in the last several centuries.

In particular, the Open Source Software process that powers much of the coherence behind software development is so successful at producing coherence that it has outcompeted corporate software development in several truly stunning ways. But we'll discuss that more in the next essay: Open Capital .

JPEG XL vs. AVIF for web use-cases

Hacker News
jakearchibald.com
2026-10-16 12:12:02
Comments...
Original Article

JPEG XL has now landed in all major browsers, so I figured I'd take a closer look at what it's good/bad at compared to other formats.

Conclusions

I'll go into full detail, with examples and benchmarks, but for those of you who don't have the time, here are the headlines:

For lossy photos on the web, AVIF almost always produces smaller files than JPEG XL. At default effort settings, the best JPEG XL version is typically 15–25% larger than the equivalent AVIF. At maximum effort settings, the gap narrows a little, to typically 6–20%. There are outliers, where JPEG XL is close to, or even beats AVIF, so if you want the absolute best result for a particular image, it's worth trying both. See the F1 image for a typical example, and the weasel for an outlier.

The JPEG XL encoder matters a lot. jixel , a newer JPEG XL encoder, usually produces smaller files than libjxl , except when the image has detailed transparency. The people image is one example.

For screenshots and illustrations, AVIF is much better than JPEG XL. The equivalent JPEG XL is 30–90% larger at default effort settings, and 20–70% larger at maximum effort settings. Lossy AVIF handles these well - you don't need to use lossless formats unless you really need bit-exact results. See the screenshot and illustration examples.

For images with transparency, AVIF is much better than JPEG XL. The libjxl version is 31–44% larger at default effort settings, and 61–70% larger at maximum effort settings. jixel always encodes transparency losslessly, which makes its files 2–3x the size of AVIF's. See the data .

AVIF is generally faster to encode, and uses less memory, when you factor in file size. jixel is faster than AVIF and uses less memory, but its files are typically significantly larger, so AVIF is better on balance. See the F1 image for one example.

AVIF is faster to decode. JPEG XL typically takes 2–3x as long to decode at medium quality, but the gap narrows at very high qualities, where Chrome can sometimes decode JPEG XL faster. The people image is one example.

Higher effort settings are worth it for AVIF and jixel, but not libjxl. libjxl's higher efforts are much slower, use a lot more memory, and barely improve the result. Sometimes they produce larger files than the default effort. The screenshot is an example of this.

AVIF's 4:2:0 mode (half colour resolution) shouldn't be your default. It rarely reduces file size, and it makes higher qualities harder to reach. Although, it is quicker to encode and decode. Stick with 4:4:4 if you don't have time to check both. The F1 image is one example, and the screenshot is an exception.

Quality settings are reliable for all the encoders. With a single quality setting, the resulting quality varies a bit between images, but all the encoders vary in the same direction, and in ways that seem reasonable. See the data .

Progressive JPEG XL is basically free at high effort. jixel recently added support for early progressive previews, and at its slowest setting they cost little or nothing, but at its default setting the files are 12% bigger. Firefox and Chrome support progressive JPEG XL. Safari still renders the final image, but doesn't show progressive previews. However, is this type of progressive rendering a good user experience? See the examples and data .

AVIF supports progressive rendering! It's Chrome-only for now, but it's in progress for Firefox. It's more complex than progressive JPEG XL, but it gives you more control over what the preview looks like, the files are usually smaller, and they're much faster to decode. See for yourself .

For HDR, JPEG XL lacks gain maps, which is a significant limitation compared to AVIF. The JPEG XL format supports gain maps, but they aren't supported by browser decoders, and the encoding story is messy/experimental. When comparing non-gain mapped HDR content, the two quality metrics I used disagree a lot, but they agree that JPEG XL produces smaller files compared to AVIF. See the examples .

JPEG XL can make existing JPEGs 9–20% smaller, without further loss. It's also as fast or faster to decode, except for small images. See the data .

For lossless, JPEG XL is the clear winner. Lossless WebP is 9–17% larger for photos, and lossless AVIF is 30–120% larger. But lossless images are almost never what you want on the web. If you do use them on the web (like I do on this page), watch out for jixel's higher efforts - it often produces files that are too slow to decode. See the data .

Animated image formats continue to be a dumb idea. Please don't use them. Learn more , if you must.

For web use-cases, I'd currently default to AVIF 4:4:4, with the highest effort level I can be bothered with. If I felt AVIF was producing an unusually large file, I'd take a look at JPEG XL via jixel, and see if it did better.

Both AVIF and JPEG XL (via jixel) have seen massive improvements recently, so it's possible that this recommendation could change in future. There's been a lot of misinformation around this stuff, and your AI will happily deliver that misinformation to you. Instead, test things with your own images.

AVIF folks suggest that JPEG XL is technically limited compared to AVIF. That might be true, but in this article I'm focusing on results with today's implementations.

Methodology

I 'created' a benchmarking script , that encodes images using various codecs at various settings, and records various details.

I'm using the latest released versions of the image codecs, which at time of writing is:

  • avifenc 1.4.2
  • libjxl 0.12.0 (using its cjxl encoder)
  • jixel 0.4.2 (git f487299 ), a second JPEG XL encoder
  • cwebp 1.6.0 (lossless WebP is used later in the article)

I chose a selection of images, and encoded most of them to a width of 1598 pixels - which is 2x the maximum width images appear on this blog. This means they look sharp on high density displays , which most users have. As a result, if you're viewing this on a small or low density screen, you're not getting the full experience.

I ran these benchmarks on my 2024 MacBook Pro (M4 Pro).

Lossy - F1 image

When I first wrote about AVIF , I used an F1 car as the first image, so I figured I'd do that again!

I encoded the image at various codec qualities, and chose versions that were closest to particular SSIMULACRA2 scores - a perceptual image quality metric by the folks behind JPEG XL. 50 is considered medium quality, 70 high, 80 very high, and 90 visually lossless. Although, I'm not sure if these ratings take high density displays into account.

Throughout the article, the visual comparisons, like above, use each encoder's maximum effort, except in cases where maximum effort results in a larger file (yes, that happens).

For archival, I'd tend towards near-lossless qualities, but if I'm just displaying an illustrative image on my blog, performance is more important to me. I'm personally happy with the 70 result above. If you zoom in, you can see the quality loss, but if I was really concerned about the zoom-in case, I'd use something like the VisualViewport API to load in a higher resolution image when that happens, rather than make the download bigger for everyone.

At lower qualities you can see the difference in strategy between the codecs. The detail loss is around the same, but AVIF tends to smooth things out compared to the original, whereas JPEG XL seems to introduce rougher patterns.

Also, I feel that, at medium quality (50), the AVIF and libjxl look better than the jixel version. The jixel version has a lot of visible noise around the BWT logo, and the Microsoft text on the front wing is way less legible. It makes me wonder about the metric a bit.

Anyway, here's my interpretation of the results:

  • File size: AVIF wins . At default efforts, the best JPEG XL image is 14–17% larger than the AVIF image for the same quality. jixel is the better JPEG XL encoder at medium/high quality, and libjxl is slightly better at very high quality. At maximum efforts, the best JPEG XL image (jixel 'extraslow') is 6–15% larger than AVIF (s0).
  • jixel at its slowest setting slightly beats AVIF's default effort , with files 1–10% smaller. The biggest gain is at very high quality.
  • Encode time: AVIF wins . At default efforts, jixel is 12–36% faster than AVIF, but its files are 14–18% larger. To match the file size of AVIF's default, jixel needs its 'extraslow' setting, which takes 18–27x as long as AVIF. libjxl's default takes 1.5–2x as long as AVIF's default, and still produces bigger files.
  • Encode memory: AVIF wins . At default efforts, jixel uses around half the memory of AVIF, but again, its files are 14–18% larger. To match the file size of AVIF's default, jixel 'extraslow' uses ~10x the memory. libjxl's default uses 2–3x the memory of AVIF, and its higher efforts use ~7x.
  • Decode time: AVIF wins . JPEG XL takes 2–3x as long to decode at medium quality, narrowing to ~1.5–1.8x at very high quality. Safari's JPEG XL decoder is the slowest.
  • Higher effort is worth it for AVIF. AVIF's s5 gets you ~10% smaller files for ~3x the encode time.
  • Higher effort is worth it for jixel too, up to 'slow'. 'slow' gets you 9–13% smaller files than its default 'fast', for ~3.7x the encode time. 'extraslow' saves another 3–8%, but takes ~8x longer than 'slow' and uses ~9x the memory. Even so, AVIF still wins when given the same encode time: AVIF s5 takes about as long as jixel 'slow', and its files are ~13% smaller.
  • Higher effort isn't worth it for libjxl. libjxl's maximum effort is barely any better than its default, but takes ~18x longer.
  • AVIF's 4:2:0 mode doesn't help much. It's slightly faster to encode/decode, and uses less memory, but the files aren't meaningfully smaller, and it struggles to reach higher qualities.

Here's the full data, so you can make up your own mind:

Show me the graphs!

Image quality

Ok, let's get to our first graph, the SSIMULACRA2 scores:

File size

SSIMULACRA2 (higher is closer to the original)

There's going to be a lot of these graphs, so here's what's going on:

  • The x-axis is visual quality according to SSIMULACRA2.
  • The y-axis is file size . Lower is better, for a given visual quality.
  • The orange lines represent JPEG XL encoded with libjxl.
  • The green lines represent JPEG XL encoded with jixel.
  • The blue lines represent AVIF.
  • The dashed blue lines represent AVIF with its color data at half resolution. Known as 4:2:0, or chroma subsampling.
  • The darker lines represent higher effort levels for that codec. libjxl calls this 'effort', so the e10 line is the top effort. Annoyingly, avifenc calls this 'speed', so the s0 line is the top effort. jixel names its levels, from 'fast' (its default) to 'extraslow'.
  • Only the default and maximum efforts are shown initially. Click the legend to toggle the others.

Here are the quality results using a different quality metric, ColorVideoVDP :

File size

ColorVideoVDP, JOD (10 = no visible difference)

The result is roughly the same except this metric puts more of a gap between AVIF and the JPEG XL images.

It also suggests there's some advantage to AVIF with 4:2:0 chroma subsampling at lower qualities, but it's minor.

Encoding performance

When it comes to images on my blog, I encode with maximum effort settings. I'm happy to wait a couple of seconds to get an image that's faster to load for every user. However, if you're doing a lot of encoding on a server, encode time becomes more of a concern.

Encode time

SSIMULACRA2 (higher is closer to the original)

Encoding memory usage

Another thing that might be a concern if you're encoding images on a server is peak memory usage:

Peak encoder memory

SSIMULACRA2 (higher is closer to the original)

Decoding performance

It's worth considering decoding performance. If decoding is particularly slow, then it might make the file size benefit less valuable, especially when images are loaded from a cache.

Decode time

SSIMULACRA2 (higher is closer to the original)

JPEG XL becomes suddenly faster to decode at very high quality settings (but still slower than AVIF). I think this is due to an edge preserving filter that does more work at lower quality settings.

Lossy - people

I've heard people say that AVIF's tendency to smooth out details makes it bad for human faces, so I picked this image from Unsplash .

The results of the benchmark for this image:

  • File size: AVIF wins . At default efforts, the best JPEG XL image is 17–24% larger than the AVIF image for the same quality. jixel is the better JPEG XL encoder across the whole quality range this time. libjxl is 30–50% larger than AVIF, which is a much bigger gap than the F1 image. At maximum efforts, the best JPEG XL image (jixel 'extraslow') is 12–17% larger than AVIF (s0).
  • jixel at its slowest setting doesn't quite match AVIF's default effort this time. It's a few percent larger at medium/high quality, and only edges ahead at very high quality.
  • Encode time: AVIF wins . At default efforts, jixel is 18–33% faster than AVIF, but its files are 17–24% larger. Even jixel's 'extraslow' setting, which takes 25–39x as long as AVIF, only matches AVIF's default file size at very high quality. libjxl's default takes 1.5–2.2x as long as AVIF's default, and still produces bigger files.
  • Encode memory: AVIF wins . At default efforts, jixel uses around half the memory of AVIF, but again, its files are 17–24% larger. jixel 'extraslow' gets closest to AVIF's default file size, but uses ~10x the memory. libjxl's default uses 2–3.3x the memory of AVIF, and its higher efforts use ~7x.
  • Decode time: AVIF wins . JPEG XL takes 2–2.9x as long to decode at medium quality, narrowing to ~1.3–1.7x at very high quality. At the very top of the quality range, libjxl images decode as fast as AVIF in Chrome, but not in the other browsers.
  • Higher effort is worth it for AVIF. AVIF's s5 gets you 5–8% smaller files for ~3x the encode time. That's a smaller gain than the F1 image.
  • Higher effort is worth it for jixel too, up to 'slow'. 'slow' gets you 7–14% smaller files than its default 'fast', for ~3.9x the encode time. 'extraslow' saves another 4–6%, but takes ~10x longer than 'slow' and uses ~9x the memory. AVIF still wins when given the same encode time: AVIF s5 takes about as long as jixel 'slow', and its files are 8–17% smaller.
  • Higher effort is somewhat worth it for libjxl on this image. Unlike the F1 image, libjxl's maximum effort gets you 4–11% smaller files than its default. But it takes ~10x longer, and it still produces much bigger files than AVIF at its default effort.
  • AVIF's 4:2:0 mode doesn't help much. Same as the F1 image. ColorVideoVDP gives it a small (~4%) advantage, but SSIMULACRA2 doesn't.

At lower qualities, you can see the smoothing on the face, but it's the same for both AVIF and JPEG XL.

Show me the graphs!

Image quality

File size

SSIMULACRA2 (higher is closer to the original)

File size

ColorVideoVDP, JOD (10 = no visible difference)

Encoding performance

Encode time

SSIMULACRA2 (higher is closer to the original)

Encoding memory usage

Peak encoder memory

SSIMULACRA2 (higher is closer to the original)

Decoding performance

Decode time

SSIMULACRA2 (higher is closer to the original)

It's interesting that, at lower qualities, jixel decodes much slower in Safari.

Lossy - red panda

I threw this one in because it's the default image in Squoosh , but I guess the sharp lines of the hairs make it different to the previous images. In fact, even at medium quality, the difference from the original is much less perceptible to my eyes compared to the other images.

The results are much closer than the previous two:

  • File size: AVIF wins , narrowly. At default efforts, the best JPEG XL image (jixel) is only 2–6% larger than the AVIF image for the same quality. libjxl does much worse, at 10–18% larger. At maximum efforts, jixel 'extraslow' and AVIF s0 are roughly tied, with jixel up to 5% smaller at very high quality. However, ColorVideoVDP disagrees, and puts AVIF 5–12% ahead at maximum efforts.
  • Encode time: JPEG XL (jixel) wins , according to SSIMULACRA2. At default efforts, jixel is 19–35% faster than AVIF, and its files are only 2–6% larger. Comparing higher efforts, jixel 'slow' produces files the same size or slightly smaller than AVIF s5, in the same time or less. And jixel 'extraslow' matches or beats AVIF s0 while being 12–34% faster. But, since ColorVideoVDP gives AVIF more of a file size advantage, it isn't clear-cut. libjxl's default takes 1.3–1.9x as long as AVIF's default, and produces bigger files.
  • Encode memory: JPEG XL (jixel) wins , at lower efforts. At default efforts, jixel uses 37–48% less memory than AVIF, and its files are only 2–6% larger. jixel 'slow' uses about the same memory as AVIF s5 to produce a similar file size, but 'extraslow' uses ~9x the memory of AVIF s0. libjxl's default uses ~2x the memory of AVIF, and its higher efforts use 6–7x.
  • Decode time: AVIF wins . JPEG XL takes 2–2.4x as long to decode at medium quality. But the gap closes at very high quality, where jixel's files decode about as fast as AVIF in Firefox and Safari, and ~25% faster in Chrome.
  • Higher effort is less worth it for AVIF on this image. AVIF's s5 gets you 3–6% smaller files for 3–4x the encode time.
  • Higher effort is worth it for jixel, up to 'slow'. 'slow' gets you 6–14% smaller files than its default 'fast', for 3.5–4.3x the encode time. 'extraslow' saves another 2–9%, but takes 9–14x longer than 'slow' and uses ~9x the memory.
  • Higher effort isn't worth it for libjxl. libjxl's maximum effort gets you 1–2% smaller files than its default, but takes ~12x longer.
  • AVIF's 4:2:0 mode doesn't help. The files are the same size as 4:4:4.
Show me the graphs!

Image quality

File size

SSIMULACRA2 (higher is closer to the original)

File size

ColorVideoVDP, JOD (10 = no visible difference)

Encoding performance

Encode time

SSIMULACRA2 (higher is closer to the original)

Encoding memory usage

Peak encoder memory

SSIMULACRA2 (higher is closer to the original)

Decoding performance

Decode time

SSIMULACRA2 (higher is closer to the original)

Lossy - weasel

I've played with both codecs a lot, and for photos, what I've shown so far is representative, where AVIF beats JPEG XL. However, every now and then there's an outlier, such as this image.

  • File size: JPEG XL wins . At default efforts, the best JPEG XL image is 4–11% smaller than the AVIF image for the same quality. libjxl is the better JPEG XL encoder at medium/high quality, and jixel at very high quality. At maximum efforts, jixel 'extraslow' is 12–27% smaller than AVIF s0. This time, ColorVideoVDP agrees.
  • jixel's 'medium' setting is a big step up on this image. Its files are 11–25% smaller than AVIF's default, and 4–18% smaller than AVIF s0, the maximum effort.
  • Encode time: JPEG XL (jixel) wins . At default efforts, jixel is 28–38% faster than AVIF, and produces files that are around the same size or smaller. At higher efforts, it's even more one-sided: jixel 'medium' is 37–65% faster than AVIF s5, and produces files 9–23% smaller. libjxl's default takes 1.5–2.2x as long as AVIF's default.
  • Encode memory: JPEG XL (jixel) wins . At default efforts, jixel uses 14–24% less memory than AVIF, and produces files that are around the same size or smaller. AVIF s0 uses even more memory (~1.55x its default), and still produces bigger files than jixel 'medium', which uses 41–55% less memory than AVIF s0. libjxl's default uses 2.4–3.6x the memory of AVIF, and the maximum efforts of both JPEG XL encoders use 10–18x.
  • Decode time: AVIF wins , except in Chrome at higher qualities. JPEG XL takes 1.3–1.9x as long to decode in Firefox and Safari. In Chrome, JPEG XL takes ~1.25x as long at medium quality, but from high quality upwards, it's 11–36% faster than AVIF.
  • Unlike the previous images, jixel images aren't particularly slow to decode in Safari. In fact, they decode slightly faster than libjxl images.
  • Higher effort isn't really worth it for AVIF on this image. AVIF's s5 only gets you 1–3% smaller files for 3–4.5x the encode time. s0 gets you 7–8% smaller files, but takes ~50x as long.
  • Higher effort is worth it for jixel, up to 'slow'. 'medium' gets you 6–14% smaller files than its default 'fast', for 1.9–4.1x the encode time. 'slow' gets you 9–19% smaller files than 'fast', for 3.9–6.5x the encode time. 'extraslow' saves another 5–9%, but takes 8–18x longer than 'slow' and uses ~11x the memory.
  • Higher effort isn't worth it for libjxl. libjxl's maximum effort gets you 1–6% smaller files than its default, but takes 11–14x longer.
  • AVIF's 4:2:0 mode doesn't help. The files are the same size as 4:4:4.
  • All three encoders produce lower SSIMULACRA2 scores for this image. As in, with the same encoder quality value, they score lower. It seems like the encoders are pretty happy smoothing out some of the background noise, which seems fine.
Show me the graphs!

Image quality

File size

SSIMULACRA2 (higher is closer to the original)

File size

ColorVideoVDP, JOD (10 = no visible difference)

Encoding performance

Encode time

SSIMULACRA2 (higher is closer to the original)

Encoding memory usage

Peak encoder memory

SSIMULACRA2 (higher is closer to the original)

Decoding performance

Decode time

SSIMULACRA2 (higher is closer to the original)

Lossy - screenshot

Ok, let's try something other than a photo:

The results of the benchmark:

  • File size: AVIF wins , by a lot. At default efforts, the best JPEG XL image is 73–89% larger than the AVIF image at medium/high quality (jixel), and 29–44% larger at very high quality (libjxl). At maximum efforts, the best JPEG XL image (jixel 'extraslow' with patches) is 23–73% larger than AVIF (s0).
  • libjxl can't produce anything between SSIMULACRA2 ~45 and ~78 at its default effort (~45 and ~75 at higher efforts). jixel doesn't have this problem.
  • jixel's patches feature helps a lot with this image , but it's off by default. With patches, jixel's files are 10–29% smaller at its higher efforts, from SSIMULACRA2 ~65 upwards. Patches have no effect at jixel's default 'fast' setting.
  • Encode time: AVIF wins . At default efforts, jixel is ~50% faster than AVIF, but its files are 70–98% larger. libjxl's default takes 1.7–1.8x as long as AVIF's default, and still produces much bigger files.
  • Encode memory: AVIF wins . At default efforts, jixel uses ~40% less memory than AVIF, but again, its files are much larger. libjxl's default uses 1.2–2.2x the memory of AVIF. jixel 'extraslow' with patches gets closest to AVIF's file sizes, but uses ~7.5x the memory of AVIF's default.
  • Decode time: AVIF wins , by a lot. Taking the faster of the two JPEG XL encoders' output, JPEG XL takes 2–3.8x as long to decode, depending on browser and quality.
  • Higher effort is more worth it for AVIF on this image. AVIF's s5 gets you 6–13% smaller files for 2.5–3x the encode time, and s0 gets you 16–23% smaller files for 30–45x the encode time.
  • Higher effort is worth it for jixel, as long as you enable patches. 'medium' with patches gets you 11–44% smaller files than its default 'fast', for 3–4x the encode time. 'slow' with patches saves another 7–16% for ~1.7x the time of 'medium'. 'extraslow' with patches saves another few percent, but takes ~5x longer than 'slow' and uses ~4.5x the memory.
  • Higher effort is harmful for libjxl. At very high quality, libjxl's maximum effort produces files 33–40% larger than its default effort, and takes ~7x longer.
  • AVIF's 4:2:0 mode helps at higher qualities. At SSIMULACRA2 70 and above, it produces files 7–18% smaller than 4:4:4. At lower qualities, it makes no difference.
  • All three encoders produce higher SSIMULACRA2 scores for this image. Opposite to the weasel image. But, this seems correct. At SSIMULACRA2 70 the artifacts are pretty noticeable around the Firefox logo (to me, anyway), so I'd go with 80, which is where the codecs lean anyway.

Some developers, especially those who've been around as long as I have, seem to think things like screenshots need to be delivered in a lossless format. But I think this is because they're used to formats like JPEG and WebP (and seemingly JPEG XL) which handle this kind of image badly, whereas lossy AVIF handles them really well.

Show me the graphs!

Image quality

File size

SSIMULACRA2 (higher is closer to the original)

I'm not including the ColorVideoVDP chart because the metric doesn't support alpha channels.

Encoding performance

Encode time

SSIMULACRA2 (higher is closer to the original)

Encoding memory usage

Peak encoder memory

SSIMULACRA2 (higher is closer to the original)

Decoding performance

Decode time

SSIMULACRA2 (higher is closer to the original)

The high JPEG XL decoding times here are likely a side effect of it producing much larger files for a given quality.

Lossy - illustration

In many cases, for largely flat-colour images, you'd use SVG. But sometimes that isn't possible (it's a screenshot), or undesirable, such as this case. This image, also from Unsplash , is still 1.1 MB as a compressed and minified SVG. This is due to the complexity of the shaded areas. As a result, a raster format wins on file size and decode/draw time.

At quality 50 in the demo above, the jixel has some pretty severe colour blocks, e.g. on the cat's face. Again, it makes me question the metric a bit.

The results of the benchmark:

  • File size: AVIF wins , by a lot. At default efforts, the best JPEG XL image (jixel) is 32–65% larger than the AVIF image up to SSIMULACRA2 80, and ~90% larger beyond that. At maximum efforts, the best JPEG XL image (jixel 'extraslow') is 22–55% larger than AVIF (s0) up to SSIMULACRA2 80, and more beyond that. ColorVideoVDP agrees, and puts the gap at 27–58%.
  • libjxl performs particularly badly with this image. At default efforts, it's 71–106% larger than AVIF.
  • Lossy AVIF can't reach SSIMULACRA2 90 with this image. Even at its maximum quality setting, it tops out at ~87, so the 90 example above isn't a totally fair comparison. JPEG XL can reach 90, but the result is 8–50% larger than JPEG XL's lossless version, so you may as well use lossless.
  • Encode time: AVIF wins . At default efforts, jixel is 35–44% faster than AVIF, but its files are 32–65% larger, which is a bad trade. jixel needs its 'slow' setting to get within 7–27% of AVIF's default file size, which takes 2.4–2.6x as long as AVIF. libjxl's default takes 1.3–2.3x as long as AVIF's default, and produces much bigger files.
  • Encode memory: AVIF wins . At default efforts, jixel uses ~37% less memory than AVIF, but again, its files are much larger. jixel 'slow' uses about the same memory as AVIF, and 'extraslow' uses ~12x. libjxl's default uses 1.5–3x the memory of AVIF.
  • Decode time: AVIF wins , by a lot. JPEG XL takes 2–4.6x as long to decode at medium/high quality, narrowing to 1.6–2.1x at very high quality.
  • Higher effort is more worth it for AVIF on this image. AVIF's s5 gets you 5–8% smaller files for ~2.7x the encode time, and s0 gets you 14–21% smaller files for 35–48x the encode time.
  • Higher effort is worth it for jixel, up to 'slow'. 'medium' only gets you 4–13% smaller files than its default 'fast', but 'slow' gets you 19–24% smaller files (up to 36% at very high quality), for ~4x the encode time. 'extraslow' saves another 2–3%, but takes 8–9x longer than 'slow' and uses ~11x the memory.
  • jixel's patches feature doesn't help with this image. Unlike the screenshot, the file sizes are identical with and without it, but it does increase encode time and memory.
  • Higher effort isn't worth it for libjxl. libjxl's maximum effort gets you 3–9% smaller files than its default, but takes 10–13x longer.
  • AVIF's 4:2:0 mode doesn't help. SSIMULACRA2 rates it slightly worse than 4:4:4, and ColorVideoVDP rates it slightly better (~3–4%).
Show me the graphs!

Image quality

File size

SSIMULACRA2 (higher is closer to the original)

File size

ColorVideoVDP, JOD (10 = no visible difference)

Encoding performance

Encode time

SSIMULACRA2 (higher is closer to the original)

Encoding memory usage

Peak encoder memory

SSIMULACRA2 (higher is closer to the original)

Decoding performance

Decode time

SSIMULACRA2 (higher is closer to the original)

Lossy - alpha

So far, all the images have been mostly opaque. What about an image with transparency?

There are a few things that make this one different:

  • jixel always encodes the alpha channel losslessly. It doesn't have a setting for alpha quality. This puts jixel at a big disadvantage with this image. AVIF by default compresses the alpha channel lossily, tracking the main quality setting. libjxl compresses the alpha channel losslessly by default, so watch out for that. For this benchmark, I set libjxl's alpha quality to the same as the main quality.
  • SSIMULACRA2 scores fully-transparent pixels as perfect , so with lots of transparency, the scores will be higher than they would be for an opaque image.

The results of the benchmark:

  • File size: AVIF wins , by a lot. At default efforts, the best JPEG XL image (libjxl) is 31–44% larger than the AVIF image for the same quality. At maximum efforts, it's 61–70% larger. Due to its lossless alpha, jixel is 1.9–3.1x the size of AVIF at default efforts.
  • Encode time: AVIF wins . libjxl's default takes 1.2–1.35x as long as AVIF's default, and produces much bigger files. jixel's default is ~2x faster than AVIF, but its files are around 2–3x the size.
  • Encode memory: AVIF wins . libjxl's default uses 2.4–2.7x the memory of AVIF's default, although in absolute terms, that's ~120 MB vs ~46 MB. jixel's default uses about the same memory as AVIF, but again, its files are much bigger.
  • Decode time: AVIF wins . libjxl's output takes 2–3x as long to decode at medium quality, narrowing to 1.4–1.8x at very high quality. jixel's output decodes faster than libjxl's, and at very high quality it's around the same speed as AVIF. Although, it's slow in Safari at lower qualities, taking ~2.4x as long as AVIF.
  • Higher effort is worth it for AVIF. AVIF's s5 gets you 4–7% smaller files for 2.3–2.9x the encode time, and s0 gets you 10–15% smaller files for 24–29x the encode time.
  • Higher effort barely helps jixel on this image. 'extraslow' only gets you 5–8% smaller files than its default 'fast', for 21–26x the encode time.
  • Higher effort is harmful for libjxl. libjxl's maximum effort produces files up to 8% larger than its default effort, and takes ~6.5x longer.
  • AVIF's 4:2:0 mode is harmful. It produces files 4–27% larger than 4:4:4, and can't get beyond SSIMULACRA2 ~79.
Show me the graphs!

Image quality

File size

SSIMULACRA2 (higher is closer to the original)

Encoding performance

Encode time

SSIMULACRA2 (higher is closer to the original)

Encoding memory usage

Peak encoder memory

SSIMULACRA2 (higher is closer to the original)

Decoding performance

Decode time

SSIMULACRA2 (higher is closer to the original)

Lossy - small

The images so far have been a similar resolution. Are the results different with smaller images?

Not really. The results are pretty similar to the full-size F1 image:

  • File size: AVIF wins , by about the same margin. At default efforts, the best JPEG XL image is 13–18% larger. At maximum efforts, the gap is slightly bigger than the full-size image, at 12–20%.
  • Encode time & memory: AVIF wins , although libjxl's default is now around the same speed as AVIF's default. jixel's default is ~2x faster than AVIF, but its files are 13–18% larger, and this time it uses ~30% more memory. In any case, at default efforts, everything encodes in under 50ms, using under 40 MB, so these differences don't really matter at this size.
  • Decode time: AVIF wins , by a similar margin, but again, everything decodes in a few milliseconds.
Show me the graphs!

Image quality

File size

SSIMULACRA2 (higher is closer to the original)

File size

ColorVideoVDP, JOD (10 = no visible difference)

Encoding performance

Encode time

SSIMULACRA2 (higher is closer to the original)

Encoding memory usage

Peak encoder memory

SSIMULACRA2 (higher is closer to the original)

Decoding performance

Decode time

SSIMULACRA2 (higher is closer to the original)

The numbers Safari gives are rounded, so the data is really noisy.

Lossy - large

What about an 18 megapixel image?

Mostly the same story as the regular F1 image, but with a few differences:

  • File size: AVIF wins at medium/high quality, by more than the regular image. At default efforts, the best JPEG XL image is 18–46% larger, and at maximum efforts, 28–54% larger.
  • But JPEG XL catches up at very high quality. Around SSIMULACRA2 85, libjxl's default matches AVIF's default, and at maximum efforts, jixel 'extraslow' is ~6% smaller than AVIF s0. jixel 'slow' is 10–13% smaller than AVIF's default from SSIMULACRA2 80 upwards.
  • Encode time: AVIF wins at medium/high quality, but JPEG XL (jixel) wins at very high quality. AVIF's default takes ~0.5 seconds, whereas libjxl's default takes 1–2 seconds. jixel's default is ~2x faster than AVIF, but at medium/high quality its files are 29–57% larger. At very high quality, that drops to 6–12% larger, which seems like a reasonable trade-off for the speed. And jixel 'slow' produces files around the same size as AVIF s5, while being 33–41% faster.
  • Encode memory: AVIF wins , and the costs are now significant. AVIF's default uses ~560 MB. libjxl's default uses ~2.5 GB at medium/high quality. jixel's default uses ~35% less than AVIF, and 'slow' uses ~18% less than AVIF s5. At maximum efforts, libjxl uses 5–6.4 GB, and jixel 'extraslow' uses 6.8–8.3 GB.
  • Decode time: AVIF wins at medium/high quality, by a similar margin to the regular image. jixel images take over 5x as long as AVIF to decode in Safari at those qualities. At very high quality, JPEG XL decodes faster than AVIF in Chrome.
Show me the graphs!

Image quality

File size

SSIMULACRA2 (higher is closer to the original)

File size

ColorVideoVDP, JOD (10 = no visible difference)

Encoding performance

Encode time

SSIMULACRA2 (higher is closer to the original)

Encoding memory usage

Peak encoder memory

SSIMULACRA2 (higher is closer to the original)

Decoding performance

Decode time

SSIMULACRA2 (higher is closer to the original)

Quality stability

Another criticism I've heard levelled at AVIF is that its quality is unreliable. As in, a single quality setting is great for some images, but no good for others, meaning for automatically encoded images, you need to pick a higher quality setting to be safe, resulting in larger file sizes than necessary for some images.

For the images I've looked at so far, I encoded them with avifenc -q 50 , cjxl -q 70 , and jixel at quality 80, and recorded the resulting SSIMULACRA2 scores:

Image AVIF JPEG XL JPEG XL (jixel)
s6 4:4:4 s0 4:4:4 s6 4:2:0 s0 4:2:0 e7 e10 fast extraslow
F1 74.6 75.9 73.4 73.8 79.2 78.0 75.3 77.3
F1 (small) 70.9 73.5 68.4 69.5 75.6 73.9 70.6 72.6
F1 (large) 77.0 77.4 76.2 76.6 80.1 79.2 77.5 78.9
People 70.7 72.0 69.8 70.5 69.6 70.3 69.1 72.3
Red panda 67.5 68.8 67.0 67.2 69.5 68.4 69.2 72.3
Weasel 56.7 57.2 56.0 56.3 56.6 55.4 54.9 59.4
Screenshot 80.2 80.4 82.3 81.9 86.5 87.6 76.6 80.3
Illustration 78.6 79.7 76.8 77.9 80.3 78.5 75.4 77.7
Alpha 67.3 69.8 63.6 64.9 69.4 66.9 66.8 69.6

The behaviour of the codecs here seems really similar. All produce a range of SSIMULACRA2 scores, and they all go higher or lower for the same images.

And I think this is ok? Like, all three go for a lower quality for the Weasel picture, which removed noise without reducing quality of the image subject. With the screenshot, all go for a higher quality, which seems justified to my eyes.

Obviously this is a small sample size, but I haven't seen anything that suggests using a single quality setting is a risk, for any of the three codecs.

Also see Halide Compression's deeper dive into this .

Progressive

Both AVIF and JPEG XL are capable of showing something progressively as the image loads. Chrome and Firefox support progressive JPEG XL, whereas only Chrome supports progressive AVIF. So, and I say this through gritted teeth, this next demo is best viewed in Chrome (I have a Firefox patch in progress ):

  • AVIF: 11.5 kB of 151.3 kB
  • JPEG XL: 11.5 kB of 166.0 kB

This is the 18 megapixel image again, so if you're viewing this on a device with a smaller screen, you're not getting the full effect.

Progressive AVIF and JPEG XL work very differently. With JPEG XL, you can opt into the data being stored in such a way that a decoder can render low resolution versions, before it brings in the higher resolution tiles. jixel recently (like, yesterday at time of writing) added support for this too. It's called "progressive DC", and it's the most important kind of progressive rendering for JPEG XL.

With AVIF, progressions work more like frames of a video. You provide up to four frames, so that's three phases before the final image. Again, like a video, each frame can use data from the previous frame as an optimisation. An advantage of this is you can choose exactly how those frames look. In the example above, I went with a single preview frame: a 1/8th resolution version, with a bit of blurring. But, your preview frames can be completely different images if you really want.

There's a lack of data when it comes to progressive images and user experience, so these are just my reckons:

If you're on a bad connection, data doesn't arrive gradually like some throttling tools will have you believe. It tends to come in bursts. So, there's little benefit to progressive rendering on smaller images, and I'm not sure that many progressive phases is particularly useful.

I think that it's nice to have a representative preview for images that may take some time to load. I've experienced this personally, where a site or app has given me something clearly not-loaded, but with enough detail to know what's coming. That's useful to me, as I can decide things like, if it's worth waiting for the whole thing. This is also why I think things like BlurHash are cute, but useless. They're not a representative preview, so there's little a user can do with the information provided.

The preview frame I chose for the AVIF is enough to tell it's an open-wheel race car. If you know F1, you'll know what team it is. You might even know where the photo was taken. And it delivers that in ~11.5 kB.

The JPEG XL gets a BlurHash-like preview on screen in ~2 kB, but it takes until ~63 kB to match the preview quality of the AVIF. After that, it continues to improve gradually, providing a more detailed and higher quality image as more data arrives.

However, I'm not convinced this is a good user experience, as it presents the user with something they may mistake for fully-loaded, but poor quality. For example:

Here's a crop of the JPEG XL, 80% loaded. It seems reasonable that someone would look at that, and just assume I took the picture badly, leaving parts out of focus. You could probably convince me that blurring the ApeCoin logo is a societal benefit, but it still feels like a suboptimal user experience.

AVIF's system gives me more control, but it's also more complex.

Progressive overhead

I encoded the large F1 image with and without progressive rendering enabled, adjusting the quality setting to keep the SSIMULACRA2 score around 70:

  • With libjxl, progressive is basically free. In fact, it produced files 6–10% smaller. At default effort, it was also faster to encode, and used less memory. Decoding was ~10% faster in Firefox, but 12–20% slower in Chrome and Safari.
  • With jixel, it depends on the effort. For jixel, I used progressive DC, with the centre of the image loading first. At jixel's default ('fast'), progressive made the file 12% bigger. At 'extraslow', it made the file 10% smaller, and 11% faster to encode, although it used 17% more memory. Decoding was barely affected, other than being 7–9% slower in Chrome.
  • But ColorVideoVDP is less kind to progressive jixel. It rates jixel's progressive files slightly lower than the non-progressive versions, whereas it rates libjxl's progressive files slightly higher. Taking that into account, progressive jixel at 'extraslow' is only ~2% smaller than non-progressive, and at 'fast' it's around 18% bigger.
  • Regular progressive AVIF has a bigger cost when it comes to encoding. It uses around twice the memory, and at default effort (s6), it takes twice as long to encode. At s0, encode time is only 9% longer, but the file is 14% bigger. And this is pure encode time - it doesn't factor in how you might generate the preview frame, e.g. adding some blur.
  • Regular progressive AVIF is 29–44% slower to decode in Chrome , although the difference is smaller in other browsers (6–15%). Since Chrome is the only browser that supports rendering the progressive frames, that might explain it. Although Firefox and Safari are still having to decode the progressive frame, as the main image builds upon it.
  • With AVIF, making the final frame a keyframe fixes the decoding overhead , at the cost of a longer encode time. At maximum effort, it results in a smaller file too, only 3–5% bigger than the non-progressive version. You could call this cheating, as there's now no 'progression' in terms of data - it's just two images in one. But, if it's a better user experience, who cares?
  • Even with the overhead, progressive AVIF wins on decoding time, and usually on file size. The progressive AVIFs are 152–181 kB. jixel's 'extraslow' progressive JPEG XL is in that range at 166 kB, but jixel's default produces 252 kB, and libjxl's progressive files are 233–242 kB. The AVIFs decode 1.6–6x faster, with the biggest gap in Safari, which is particularly slow to decode jixel's files.
Show me the data!
Encoding Quality File size SSIMU2 Encode Decode
Time Memory Firefox Chrome Safari
AVIF s6 41 175 kB 69.9 405 ms 381 MB 46 ms 41 ms 53 ms
AVIF s6 prog 42 173 kB 70.2 815 ms 764 MB 49 ms 53 ms 56 ms
Change +1 −1% +0.3 +101% +101% +7% +29% +6%
AVIF s6 prog -k 42 181 kB 70.3 1.09 s 740 MB 45 ms 35 ms 49 ms
Change +1 +3% +0.4 +169% +94% −2% −15% −8%
AVIF s0 41 145 kB 69.9 8.00 s 450 MB 47 ms 41 ms 48 ms
AVIF s0 prog 42 165 kB 70.5 8.71 s 847 MB 54 ms 59 ms 52 ms
Change +1 +14% +0.6 +9% +88% +15% +44% +8%
AVIF s0 prog -k 41 152 kB 69.6 10.72 s 798 MB 47 ms 40 ms 46 ms
Change ±0 +5% −0.3 +34% +77% ±0% −2% −4%
JPEG XL e7 35.5 258 kB 70.0 1.62 s 2.49 GB 131 ms 105 ms 162 ms
JPEG XL e7 prog 25.3 233 kB 70.0 1.40 s 1.90 GB 119 ms 121 ms 183 ms
Change −10.2 −10% ±0.0 −14% −24% −9% +15% +13%
JPEG XL e10 41.2 258 kB 70.0 22.74 s 5.67 GB 132 ms 107 ms 162 ms
JPEG XL e10 prog 30.2 242 kB 70.0 25.54 s 6.08 GB 119 ms 128 ms 181 ms
Change −11.0 −6% ±0.0 +12% +7% −10% +20% +12%
jixel fast 66.1 225 kB 70.0 304 ms 361 MB 131 ms 89 ms 281 ms
jixel fast prog 60.1 252 kB 70.0 333 ms 393 MB 132 ms 97 ms 290 ms
Change −6.0 +12% ±0.0 +10% +9% +1% +9% +3%
jixel extraslow 65.1 185 kB 70.0 16.75 s 7.61 GB 141 ms 92 ms 294 ms
jixel extraslow prog 55.4 166 kB 70.0 14.90 s 8.94 GB 140 ms 98 ms 293 ms
Change −9.7 −10% ±0.0 −11% +17% −1% +7% ±0%

Lossy - HDR

Let's get back to lossy compression, but this time HDR! There are a few ways to encode HDR images, and we're going to look at two.

Perceptual Quantization (PQ) tells each pixel what to be. Each value maps to an absolute brightness, up to 10,000 nits, with the curve shaped so the data is spent where our eyes are most sensitive. If the image asks for colours and brightnesses the display can't show (no consumer display can hit 10,000 nits), the browser/OS has to tone-map it down, and how well that's done varies between platforms.

Gain maps are different. The main image is a regular SDR image (usually), and alongside it is a 'gain map', which applies a brightness and colour change to each pixel to achieve the HDR version.

This has two benefits:

  1. The same image will look exactly as you want on an SDR display - the gain map is simply ignored.
  2. If the display supports HDR, but maybe not as much as the image needs (for example, the screen is at low or maximum brightness), the browser/OS can apply as much of the gain map as it can handle.

CSS and <picture> let us serve an SDR or PQ image to the user via the dynamic-range media query , but then you're relying on tone mapping in cases where the browser signals HDR support, but it doesn't support the full range.

Although the JPEG XL format supports gain maps, no browser handles them, and the encoding story is messy.

AVIF supports gain maps, and you encode them by providing two images: the SDR image and the HDR image. It uses those to calculate and encode the gain map.

Your browser/screen doesn't support HDR , so the PQ images will look bad.

At medium brightnesses, on an HDR screen, the gain map and PQ images look the same. At maximum brightnesses, on my Pixel 10 Pro and 2024 MacBook Pro, the PQ images get a bit blown out, and the gain map image looks better. At low brightness on my Pixel 10 Pro, again the gain map image looks better.

This is because, at extreme brightness levels, the device doesn't have the full HDR headroom to display the image, and gain maps can handle these cases better. So, although gain maps seem to add a lot to the file size, I think it's worth it.

Maybe there's a future where tone mapping gets much better, and the advantage of a gain map becomes less significant.

Regular SSIMULACRA2 only understands SDR, so for this image, the scores come from an experimental HDR mode in fast-ssim2 . That means these scores can't be compared to the SSIMULACRA2 scores elsewhere in this article. ColorVideoVDP handles HDR natively, and here it's modelling a 1,500 nit HDR monitor.

The two metrics disagree a lot with this image . And they don't factor in the benefits of gain maps, so treat these results as a comparison between the PQ variants:

  • File size: JPEG XL wins , but the metrics disagree on how much, and with which encoder.
    • According to HDR SSIMULACRA2, jixel's default ranges from 8% smaller to 3% larger than PQ AVIF's default, and libjxl is 5–33% larger. At maximum efforts, jixel 'extraslow' is up to 15% smaller than PQ AVIF s0.
    • According to ColorVideoVDP, libjxl is the clear winner. At default efforts, it's 28–53% smaller than PQ AVIF, and 17–37% smaller than gain map AVIF. At maximum efforts, it's up to 23% smaller than the best AVIF, but jixel 'extraslow' is roughly level with it, ranging from 12% smaller to 14% larger.
  • The metrics also disagree about gain maps. HDR SSIMULACRA2 says gain map AVIF is 31–38% larger than PQ AVIF, but ColorVideoVDP says gain map AVIF is 11–25% smaller than PQ AVIF.
  • Encode time: JPEG XL (jixel) wins . At default efforts, jixel is ~2x faster than PQ AVIF, and produces files around the same size or smaller, depending on the metric. libjxl's default is 5–47% slower than PQ AVIF, but given ColorVideoVDP's view of the file sizes, that's a reasonable trade. Gain map AVIF is the slowest, as it's calculating a gain map, then essentially encoding two images: ~3x slower than PQ AVIF.
  • Encode memory: JPEG XL (jixel) wins . At default efforts, jixel uses ~30% less memory than PQ AVIF. libjxl's default uses ~1.9x the memory of PQ AVIF, and gain map AVIF uses ~1.55x. At maximum efforts, libjxl uses ~6x the memory of PQ AVIF's default, and jixel 'extraslow' uses ~10x.
  • Decode time: AVIF wins . PQ and gain map AVIF decode at around the same speed. JPEG XL takes 1.2–1.7x as long to decode in Chrome, although it's slightly faster at the top of the quality range. In Safari, it takes 1.6–3x as long. Firefox is particularly slow with these HDR JPEG XL images, taking ~4x as long as AVIF at all qualities. We're working on it .
  • Higher effort is worth it for AVIF. For gain map AVIF, s5 gets you 9–12% smaller files for ~1.9x the encode time, and s0 gets you 14–20% smaller files for ~11x the encode time. For PQ AVIF, s0 gets you 14–19% smaller files, for 17–20x the encode time.
  • Higher effort is worth it for jixel, up to 'slow'. 'slow' gets you 7–32% smaller files than its default 'fast', for ~3.8x the encode time. 'extraslow' saves another 1–9%, but takes ~10x longer than 'slow' and uses ~8.5x the memory. jixel only has a few data points for this image, so these numbers are rough.
  • Higher effort isn't worth it for libjxl. libjxl's maximum effort gets you 2–7% smaller files than its default, but takes ~15x longer.

It will be interesting to see how JPEG XL handles gain maps once they're fully supported.

By the way, these are signs that indicate whether my cats are inside or outside , and the little display indicates how long until their next automated feed.

Show me the graphs!

Image quality

File size

SSIMULACRA2 (higher is closer to the original)

File size

ColorVideoVDP, JOD (10 = no visible difference)

Encoding performance

Encode time

SSIMULACRA2 (higher is closer to the original)

Encoding memory usage

Peak encoder memory

SSIMULACRA2 (higher is closer to the original)

Decoding performance

Decode time

SSIMULACRA2 (higher is closer to the original)

JPEG transcoding

JPEG XL allows you to convert an existing JPEG to JPEG XL without additional loss. I tested this with the F1 image at a range of sizes and JPEG qualities:

  • The JPEG XL is 9–20% smaller than the JPEG. The saving grows with resolution, from ~9% at 400 pixels wide to ~20% at 4,900 pixels wide. The saving is slightly smaller at higher JPEG qualities. libjxl and jixel produce practically identical file sizes.
  • For small images, JPEG XL is slower to decode than JPEG , taking 1.4–2.7x as long, depending on the browser. But it's just a millisecond or two.
  • For larger images, JPEG XL is faster to decode in Chrome and Safari. From ~1,000 pixels wide, it matches JPEG, and at the largest sizes, it decodes in around half the time. In Firefox, it ends up around the same speed as JPEG.
  • jixel's output is slightly slower to decode than libjxl's in Chrome and Firefox, by up to ~25%. But again, these are small numbers, at most a few milliseconds.

Of course, if you have the original, you'd be way better off creating a proper new lossy version with AVIF or JPEG XL, but it's pretty cool that the JPEGs end up smaller, and sometimes faster to decode. Although, I suppose this is just pointing to a missing optimisation in browser JPEG decoders.

Show me the graphs!

File size

Megapixels

Decode time

Megapixels

Lossless

It is very rare to need lossless images on the web. As we've already seen, even for things like screenshots and illustrations, lossy AVIF handles them really well. Ironically, this page is one of the outliers, because I wanted to show the compressed versions vs their lossless counterparts. Thankfully, JPEG XL is great at lossless!

The results:

  • File size: JPEG XL wins . At default efforts, libjxl produces the smallest files for every image except the illustration, where WebP matches it. WebP is 9–17% larger for photos, and AVIF is 33–122% larger. At highest efforts, libjxl and jixel are within a few percent of each other, WebP is 5–44% larger, and AVIF is 29–176% larger.
  • Encode time: JPEG XL wins . libjxl's default takes 0.1–0.5 seconds, which is faster than WebP's default, and similar to AVIF's default, while producing smaller files than both.
  • Encode memory: JPEG XL wins or WebP wins , depending on the image. WebP's default uses around half the memory of libjxl's default (55–110 MB vs 110–250 MB), but libjxl's files are smaller. For photos, WebP can't match libjxl's default file size even at its maximum effort, which uses more memory than libjxl's default. For the screenshot, they use around the same memory, but libjxl's file is smaller. The illustration is the exception: WebP's maximum effort produces a file 20% smaller than libjxl's default, using the same memory.
  • Decode time: WebP wins or JPEG XL wins , depending on the image. WebP decodes photos in 17–39 ms in all browsers, and the screenshot in ~5 ms. libjxl's output takes 1–2.2x as long in Chrome, 1.4–2.7x as long in Firefox, and 2.1–3.2x as long in Safari. But for photos, JPEG XL's smaller files more than make up for this on a first load, unless the connection is really fast. For the screenshot and illustration, WebP's decode advantage wins. Lossless AVIF is particularly slow to decode, taking up to 4x as long as libjxl's output in Chrome.
  • Lossless AVIF is bad. It's significantly larger than the others, and slower to decode.
  • jixel's 'medium' setting is the sweet spot for file size. It beats libjxl's default on every image (0.5–23% smaller), and is within 2–3% of the best result for photos, taking 0.4–0.7 seconds. But it uses 470–670 MB of memory, and its output is slower to decode than libjxl's, particularly in Safari.
  • jixel's 'slow' and 'extraslow' output is very slow to decode for photos. ~200–290 ms, compared to 22–95 ms for libjxl's output. That's 2–13x slower, depending on the browser. It's also slow for the alpha image, at 80–123 ms compared to 14–27 ms for libjxl's output. This doesn't happen with the screenshot and illustration. This means, for my use-case on this page, I'd avoid it.
  • libjxl's maximum effort is very slow. It produces files 2–7% smaller than its default for photos, and ~25% smaller for the screenshot and illustration, but takes 9–46 seconds, which is 50–180x as long as its default. jixel gets the same results in a couple of seconds.
  • jixel's default 'fast' setting isn't great for lossless. It's the fastest encoder by far (40–80 ms), but its files are 16–32% larger than libjxl's default for photos, and ~80% larger for the screenshot and illustration.
  • jixel's patches feature helps a bit with the screenshot (4–9% smaller), but makes no difference to the illustration.
Show me the data!

File size

Image Default effort Highest effort
libjxl jixel WebP AVIF libjxl jixel WebP AVIF
F1 1.07 MB +32% +16% +49% 1.01 MB −1% +20% +47%
People 1.39 MB +22% +17% +49% 1.34 MB −1% +19% +44%
Red panda 1.78 MB +17% +9% +40% 1.74 MB −1% +11% +31%
Weasel 2.91 MB +16% +13% +96% 2.79 MB −2% +17% +29%
Screenshot 92 kB +81% +9% +122% 68 kB +6% +44% +176%
Illustration 361 kB +78% −1% +100% 273 kB −6% +5% +139%
Alpha 522 kB +21% +12% +33% 487 kB −3% +13% +32%

Encoding performance

File size

Encode time

Encoding memory usage

File size

Peak encoder memory

Decoding performance

File size

Decode time

Animation

Animated image formats are dumb and animated JPEG XL is no exception. Video formats are better at video. They're built for it. They're optimised for it. Not just in terms of encoding, but also in terms of playback.

I encoded a short clip, and the animated AVIF was 725 kB, and the JPEG XL was 2.17 MB for the same ColorVideoVDP score (9.5).

The JPEG XL is super noisy compared to the AVIF, because each frame is encoded individually, and arttifacts land in different places per frame.

AVIF is basically the keyframe format of AV1 video, with a bunch of still-image-specific optimisations thrown in. Animated AVIF however, is pretty much just a repackaging of AV1 video. You can convert an AV1 MP4 to AVIF and back losslessly - it's just a container change. That's why it performs so much better, because it's built for motion.

However, animated AVIF plays like shit in Chrome and Safari. It's fine in Firefox, so this is purely an implementation problem. But… <video muted autoplay> is right there.

The interesting detail of animated AVIF is that it supports transparency, whereas AV1 video doesn't. But really, that just highlights that it's dumb that AV1 didn't support transparency .

No, I'm not adding a demo. I don't want it on my server. Use video formats for video.

And that's it!

I already gave you my conclusions at the start, so I guess I'm ready to hit publish.

I'm a little nervous about this, because discourse around JPEG XL can get a little… weird. I see a lot of conspiracy theories about Google trying to 'silence' JPEG XL, even though one of the leads of the project worked at Google, as part of a team that were working on JPEG XL. That same leader claimed that the post-COVID layoffs wouldn't have happened if companies simply used JPEG XL. I was recently called a racist for asking about JPEG XL use-cases. This kind of thing just doesn't happen with other technologies and standards I follow. So, urm, I'm kinda bracing for impact here.

My first version of this article was very negative about JPEG XL, but then I heard about jixel, and honestly, I'm really excited about it. There's serious competition between AVIF and JPEG XL now, and whoever wins, we'll all benefit from better image compression.

US Rep Announces Congressional Legislation to Protect Video Game Ownership

Hacker News
ritchietorres.house.gov
2026-10-16 12:03:02
Comments...
Original Article

Today, Rep. Ritchie Torres (NY-15) announced he will introduce the Power To The Players Act , legislation that would direct the Federal Trade Commission to establish regulations protecting consumers’ ability to own and play the video games they purchase.

Over the past few years, video game companies have moved toward digital-only games and consoles, removing the option to buy or use physical games. These digital games are often sold as revocable licenses rather than owned outright, leaving players dependent on the company’s continued support. NBA 2K25 is a clear example. The game, which retailed for $69.99 for the standard edition and $99.99 for the All-Star Edition, will be delisted from digital storefronts on October 30 and will have its online servers shut down on December 31, only two years after its initial release. No consumer should have a game they paid for pulled out from under them on a company’s arbitrary timeline.

“When you pay for a game, you should own it,” said Rep. Torres. “Consumers must have the right to own, the right to play, and the right to transfer the games they buy. A game that can be taken away the moment a company pulls the plug is not a purchase. It is a rental disguised as a sale. Families in the Bronx and across the country save up to buy these games, and they deserve better than a license that can vanish at any time. The Power To The Players Act ensures consumers own what they buy and can keep playing long after a company moves on.”

Under the bill, buying a video game would give the consumer ownership of the game rather than a license to play it. Games with online functionality would also be required to provide an offline mode before the servers supporting them are shut down.

The legislation aims to close the gap between buying a game and owning it. By preserving consumers’ ability to own and resell their games, the bill would ensure that players can keep playing the games they paid for with friends and family for years to come.

America's Wumao: Inside Polymarket's Paid Quote-Retweet Esports Program

Hacker News
www.readergrev.com
2026-10-16 11:56:25
Comments...
Original Article

Screenshots from X; minor background elements by Sonny Ross

❝

As I mentioned last week, I’ve launched a paid tier of the newsletter . All the money coming from subscriptions will go toward reporting and publishing, covering costs associated with legal review, public records, web hosting, mail, software subscriptions, business admin, travel, and (silliest of all) buying new games.

My next newsletter (which will be available exclusively to paid subscribers ) is going to be a follow-up to this report, going into why I think prediction markets’ growing influence is worth covering and taking a much broader view of the issue, beyond just the reporting. If that sounds interesting, consider upgrading your subscription. I’ll also include some outtakes from this story: reporting that just didn’t make sense for this particular piece.

Lastly, I want to thank Ollie Ring for his help as I was reporting this newsletter. Ollie writes the Lootboxes & Leftovers newsletter on Substack. Check it out. And much love to Riley MacLeod of Aftermath , where this story will be reprinted later today, for editing this piece.

Once more, but tiny: Thanks for reading!

Polymarket, the prediction market platform, is paying social media users to quote-retweet content from its branded esports accounts. The program includes over 800 participants, according to posts by a Polymarket representative in an internal Discord, and offers rates ranging from $10 to several hundred per post, paid in crypto.

Paying social media users to engage with content is not illegal, and the Polymarket program has robust guidelines around disclosure and the kinds of quote retweets the company is looking for. But the slight “Paid partnership” tag on X — a common sight on the app, and the only public indication that there’s money changing hands — belies the scale and sophistication of Polymarket’s esports operation, which has more than doubled in size since August. And all the while, in the Discord, Polymarket representatives have repeatedly reminded participants in the program to write posts in a way that should appear “organic,” in what one expert said was an effort to ingratiate the prediction market with esports fans and casual observers.

“Literally this needs to look organic and if your X profile looks like Polymarket billboard that looks absoutely [sic] awful,” wrote one Polymarket rep in the Discord.

Polymarket offers two products: Polymarket Global, which is inaccessible to bettors in the United States, and Polymarket US, which is subject to U.S. regulations. In esports — a growing market for the company — Polymarket offers lines around the outcomes of major events and matches, player statistics, as well as novelty bets, including some relating to the teams that players might transfer to in the off-season. 1

The prediction market company’s esports outreach is something of an open secret in the esports world — with an emphasis on “open.” Some social media users have expressed dismay over the increasing prevalence of gambling and betting-adjacent companies in the esports scene, having previously been burnt by “here today, gone tomorrow” attention from deep-pocketed crypto companies and venture capital firms. But while elements of the paid marketing program have previously been reported , little concrete information has been revealed until now about the logistical apparatus behind it, the costs involved, and the Discord server from which the program is run — even as the payments by Polymarket to creators have inspired speculation and debate among esports fans.

Emails to Polymarket’s official press line seeking comment, as well as direct messages to numerous Polymarket representatives from the Discord seeking interviews, went unanswered.

A list of participants in the Discord includes prominent esports commentators, current and former professional players, team coaches and managers, media entrepreneurs and content creators, PR professionals, amateur roster reporters, employees of esports tournament organizers, and various social media gadflies.

When figures like that quote-retweet posts like the one embedded below with a sentence or two of commentary, they may be receiving tens or even hundreds of dollars in compensation.

Still, many of the posters paid to quote-retweet Polymarket’s content are virtual unknowns, with low four-figure follower counts on X.

Prospective participants in the marketing program are typically contacted via social media or email. If they show interest in continuing the conversation, they’re brought into a Polymarket Discord server. In that server, dedicated channels for individual esport titles ping users about the tweets they should quote-retweet — which generally focus on some ongoing event or storyline , and the corresponding market on which users can bet, which is linked to in the post.

“New tweet is up: Like + QRT. Replies appreciated,” reads a typical message, which includes a link to the tweet. “Text-only quote from your own account. Counts for the next 24 hours only.” These messages used to also include the phrase “+ Paid Partnership tag,” urging users to disclose their participation in the program. That text has not appeared on the Discord prompts since late August, for reasons that were not immediately clear.

Users are concurrently onboarded to a proprietary tool called PolyTrack, a dashboard into which they can input their tax information, crypto wallet address, and eventually, the quote-retweets for which they will be paid. The platform tracks monthly and lifetime earnings, and offers guidance about the kinds of posts that meet the program’s criteria.

While this report is exclusively focused on Polymarket’s promotional efforts on X, PolyTrack also includes the option to input video and streaming platforms.

The amount users are paid is negotiated upon entry into the program, and is based on how many views their tweets generally received before entry. The payout is not determined by engagement metrics on the paid quote-retweets.

“Someone averaging 2,000 views can't ask for $50 per post, and the same logic works the other way,” wrote a Polymarket rep in the Discord last week, when discussing the process of onboarding new posters. “That holds no matter who you are in the scene. The only exception is Tier 1 casters, talent, creators and players, who can get higher rates because of how well known they are.”

Two users who spoke with ReaderGrev showed fees of $45 and $75 per post. Another participant described negotiating a fee in the $200-300 range. One user shared with ReaderGrev a PolyTrack screenshot showing that they made nearly $900 in just one month from approximately a dozen posts.

Two other participants in the program said payouts bottomed out at $10; one of them added that they had heard that $400 was the upper end of the range. Program members are paid in crypto; in a July post in the Discord, a Polymarket rep said the team had phased out an earlier payment method, PayPal, because its accounts kept “getting blocked” due to the high volume of payments.

The program offers users other opportunities to make money. “When you bring someone into the program, you earn 3% of what they make, every month, for as long as they stay in the program,” wrote one Polymarket representative in the Discord.

The program appears to be growing — and fast. At the start of August, one Polymarket representative said on Discord that “300+ creators” were participating in the program. Two months later, a different representative put the tally at “800+.”

Still, the company’s scattershot approach to outreach has on multiple occasions drawn the ire of creators who oppose gambling or betting.

“I don't ever reply to gambling sponsor outreach so I just delete and move on,” said Cloud Sidky, a League of Legends content creator who was approached by Polymarket in September. “I'm personally against sports betting, and even more against prediction markets.”

The exact cost of the program to Polymarket is difficult to estimate. The platform’s four esports accounts on X differ in size, and there are varying numbers of creators in each game’s program. The DotA 2 program has offered just one post for paid promotion in October, one in September, and two in August. The League of Legends , Valorant , and Counter-Strike programs, by contrast, have shared nearly one post per day in the past few weeks, with Valorant activity ramping up around the Champions event that marks the end of the game’s annual competitive circuit. On Wednesday, a Polymarket rep in the Discord server sought to hype up participants in the lead up to Worlds, the year’s capstone League of Legends event, saying they could expect more posts to come up for promotion each day. (He appended a 🤑 emoji to his message, and told users to post “plenty in between so it looks organic if your gonna QRT daily.”)

Polymarket’s total payout to creators per post for the more popular programs likely numbers in the four digits. A conservative estimate — assuming that the bulk of posters are being paid on the lower end of the spectrum — places the payout between $2,000 and $4,000 per post. These estimates are almost certainly an undercount; the figure can swing dramatically based on the number of highly-paid users engaging with any individual post. Just a few creators with a hundred or several-hundred dollar fee can dramatically increase the cost to Polymarket.

Posts linked to the paid quote-retweet program see substantially more engagement — particularly quote retweets — than other posts from the Polymarket branded accounts.

Polymarket’s approach to social media — paying influencers in the space to engage with its content — is a shortcut to reaching an endemic audience without having to build that audience from scratch, said Jake Steinberg, a writer and adjunct professor of social media strategy at Villanova University.

“If I follow 10 esports accounts and all 10 independently appear to be talking about something like Polymarket over the course of a few days or a week, then Polymarket has maybe successfully bought this kind of repeated exposure to me,” Steinberg said. “Even if I don't click anything, that actually does become valuable [to Polymarket], because I am becoming familiar with the name and what the product does, and the idea that Polymarket is relevant in this world that I am interested in.”

“That's a very different effect on me as the viewer” compared to a normal advertisement, Steinberg added.

In a document shared with users during onboarding, Polymarket instructs creators to clearly disclose their relationship with the platform.

“The disclosure must be clear, conspicuous, in plain language, and not hidden,” according to a document titled External Marketing Guidelines. At a glance, many of the quote-retweets of Polymarket-branded esports posts include the default X “paid partnership” disclosure tag.

The document also prohibits users from recommending trades.

“Polymarket’s Consultants are not investment advisors and recommendations from Consultants as to specific trades or trading strategies exposes both Polymarket and the Consultant to legal risk,” the document reads. “A verbal disclaimer that ‘this is not financial advice’ does not solve this problem and such a disclaimer is insufficient to eliminate the risk of legal action.”

The document continues: “A Consultant may discuss his or her own trades (assuming he/she has actually made such trades) and the rationale for making those trades but may never suggest or recommend that others make the same trade.” The bolding and underlining on “never” are present in the document.

PolyTrack, meanwhile, offers guidance around what makes a good post — and what doesn’t.

Post “your own take, reaction, or analysis. One sharp sentence beats a generic line every time,” reads one of the “Do This” bullet points.

“Post in your normal voice and give people a reason to reply,” reads another. “Questions and hot takes start conversations.”

By contrast, users are told to avoid low-effort and off-topic captions: “‘wow’, ‘crazy’, or a row of emojis … underperform and stand out in review for the wrong reason.”

“Staff review every caption,” the guidelines note. “Strong, on-topic captions help submissions get verified faster and maintain a high standard across the program.”

Though prediction markets have drawn scrutiny from some corners, some participants in the program have defended Polymarket’s model.

“I feel fine participating because Polymarket has no house edge or VIG,” wrote Justin “Trick” Sears, a former professional Valorant player, in a direct message, referring to fees charged by bookmakers.

Sears added that he had turned down a $50,000 six-month deal offered to him by another “active company in the space” because the company offered slots on their website. “Prediction markets are PVP thats the way i look at it,” he wrote.

“I’m honestly not sure why people treat this as some sort of scandal. It’s all very above-board,” said another user who has posted content sponsored by Polymarket, and who requested anonymity because they are not a representative for the company. “The quote RTs are all flagged as promotion as is the original tweet. I don’t know how it could be more clear. If there is a complaint it should be on Twitter’s side regarding how paid advertising is handled on the platform.”

Prediction market activity in esports has surged over the past two years, in part because the bigger sportsbooks see esports as a niche and sometimes even unappealing offering relative to traditional sports.

“The appetite was always there for people to bet” in esports, said Ollie Ring, who writes the Lootboxes & Leftovers newsletter, which has covered the intersection of gaming and gambling. “What then came is an influx of people who saw money and went: ‘I need a piece of that.’”

But when that first wave of interest happened, the product wasn’t ready, Ring said. “The development wasn't there. The data deals, the integrity structure, all of it around it wasn't ready for the amount of people that came in wanting a slice of this proverbial pie. … [Now,] operators are like: ‘I don't want to touch esports because we tried it in 2018, nine, eight years ago and it lost us a load of money.’ … And sportsbooks don't like losing money. They like your typical fluffy NFL parlays where people put 12 teams in an accumulator and then lose their money.”

Prediction markets, by contrast, “offer the first real opportunity to address the market at a national level, and I think there is a lot of overlap, or at least more overlap, [between] prediction markets and esports than traditional betting and esports,” wrote Cody Luongo, a media consultant who authors the Sharpr newsletter, in a direct message. Luongo said the former category leaned “younger, hipper, crypto-native.

Riot Games, which publishes League of Legends and Valorant and runs the two games’ esports circuits, has reportedly held discussions with Polymarket and Kalshi, a competing prediction market company, about esports sponsorship deals.

Thanks for reading ReaderGrev ! Consider sharing it with a friend, on Discord, Twitter, LinkedIn, or even a subreddit where folks might appreciate it. Word of mouth helps this newsletter grow!

If you have a tip, I can be reached on Bluesky or via email at mikhail (at) readergrev (dot) com.

1 This final category is vanishingly small — in the low single digits — according to an analysis by Ollie Ring.

Postgres 19 delayed after AI reviewers find more bugs than humans can fix

Hacker News
www.theregister.com
2026-10-16 11:55:40
Comments...
Original Article

databases

Core devs revert up to 10 features, push release to November, and blame better tooling rather than vibe coding

The PostgreSQL Global Development Group has delayed the release of PostgreSQL 19, the latest iteration of the popular open source database, and held back an unusual number of features.

Once slated for release in late September or early October, PostgreSQL 19 is now expected to be generally available around November 19. Developers have also dropped between eight and 10 significant features.

Explaining the number of reverts — features whose rollouts have now been postponed to next year's release, PostgreSQL 20 — Peter Eisentraut, veep at EDB, a PostgreSQL support and consultancy, said the reason could be at least in part attributed to the LLM code reviews used by developers.

In a blog post, Eisentraut, who is a leading PostgreSQL committer, said some of the reverted features had significant architectural defects that would have been hard to fix "quickly and during beta."

However, the introduction of LLM-assisted code review also uncovered a long tail of “relatively harmless issues involving various edge cases” which, in past times, developers might not have noticed until much later, most likely issuing bug fixes in the five years following launch. “With LLM-assisted code review, these kinds of things can get found much faster, and then you’re staring at a list of forty defect reports. Even if each of them requires only a three-line fix on average, there is a fixed overhead to dealing with each of these, and then you run out of time.”

When the big updates for PostgreSQL 19 were written, LLM-assisted code review was not as useful as it is now, we're told, but in the months leading up to the launch, the AI-supported reviews became better understood and more effective.

“The effective quality bar has been raised after the time the feature was written and committed. Unless the capabilities of LLM-assisted code review keep improving at the current rate, this situation should sort itself out for future development cycles,” Eisentraut said.

He was also at pains to point out that the reverts were not down to “vibe coding” in development, as the technique was not available when most of the new features were written.

Postgres was first proposed by Michael Stonebraker in 1986. In 1994, Andrew Yu and Jolly Chen replaced the query language POSTQUEL with SQL, and in 1995 made the database freely available and modifiable under a more permissive license, renaming it PostgreSQL. It has since become the most popular database among professional developers owing to the services the big three hyperscalers built on it as well as the range of wire-compatible distributed systems available.

Among the features pulled from the PostgreSQL 19 iteration is support for SQL Property Graph Queries (SQL/PGQ), which became part of the SQL standard in 2023. The feature provides syntax for exploring relationships between nodes connected by edges. PostgreSQL's implementation was removed over unresolved issues.

At the time, PostgreSQL contributor Tom Lane warned : "At this point I'd be willing to bet dinner that if we ship it in v19 there will be post-release bug discoveries that are unfixable until v20."

Despite the delay, Eisentraut promises PostgreSQL 19 will still be “a great release,” that includes REPACK CONCURRENTLY , which avoids the table-lock VACUUM FULL operation used to reclaim disk space.

“And it will be very robust, after all the additional scrutiny,” he said.

The features reverted from PostgreSQL 19 will likely make it into PostgreSQL 20. Just a few months ago, developers expected PostgreSQL 20 to have no new features, just bug fixes. Now, it is likely to have the new features left over from the earlier release, Eisentraut said.®

Podcast: Cops Can Use AI to Pinpoint Your Home with Just One Photo

403 Media
www.404media.co
2026-10-16 11:40:44
How Raven, previously known as Geospy, can now find which house a photo was taken in; why a judge ruled a Flock search unconstitutional; and the wild AI video in a court case....
Original Article

How Raven, previously known as Geospy, can now find which house a photo was taken in; why a judge ruled a Flock search unconstitutional; and the wild AI video in a court case.

Podcast: Cops Can Use AI to Pinpoint Your Home with Just One Photo
Image: 404 Media.

We start this week with Joseph’s article about Raven, previously known as Geospy. This is an AI tool that can geolocate photos, and now says it can pinpoint a specific house based just on one photo taken inside. After the break, Jason explains why a judge ruled a particular Flock search as unconstitutional. In the subscribers-only section, we talk about the wild AI video that has derailed a manslaughter case.

Listen to the weekly podcast on Apple Podcasts , Spotify , or YouTube . Become a paid subscriber for access to this episode's bonus content and to power our journalism. If you become a paid subscriber, check your inbox for an email from our podcast host Transistor for a link to the subscribers-only version! You can also add that subscribers feed to your podcast app of choice and never miss an episode that way. The email should also contain the subscribers-only link for the extended video version too. It will also be in the show notes in your podcast player.

About the author

Joseph is an award-winning investigative journalist focused on generating impact. His work has triggered hundreds of millions of dollars worth of fines, shut down tech companies, and much more.

Joseph Cox

Show HN: OneDeploy – Managed open-source apps with nightly backups and TLS

Hacker News
onedeploy.co
2026-10-16 11:38:35
Comments...
Original Article

88 open-source apps · Live in minutes

The apps your team wants, on a server that’s only yours

Pick an app, a region and a plan. OneDeploy creates the server, installs the app, issues the certificate and backs it up every night. Billed by the hour, with a monthly cap. Delete anytime and billing stops.

  • No per-user fees
  • Nightly backups included
  • Delete anytime

88 apps, and the list keeps growing

Websites, chat, files, CRM, analytics, AI and developer tools. Each one deploys the same way.

See all apps

One price for the whole team

Subscriptions charge per seat. Here your team shares one server at one price. OneDeploy never charges per user.

Your data stays yours

The app runs on a server nobody else uses, in the region you choose. Restore a backup, move it, or delete it. It is your call.

No server chores

Server, certificate, backups, updates and resizing are handled from the dashboard. You spend your time in the app, not on it.

  1. Step 1

    Pick an app

    Browse the catalog and choose the tool your team needs.

    Browse apps
  2. Step 2

    Choose where it runs

    Pick a region and a plan. You see the live price before you deploy.

    Check prices
  3. Step 3

    Start using it

    A few minutes later your app is live, with its own web address and admin account.

    Deploy an app
A subscription Your own server OneDeploy
Time to first login Minutes An afternoon, if all goes well Minutes
Who runs the server The vendor, on their terms You: patches, monitoring, restores OneDeploy, from your dashboard
Backups Whatever the vendor keeps Scripts you write and test Nightly, encrypted, off-site, one-click restore
Web address and TLS Included DNS, certificates and renewals by hand Included, with your own domain
Pricing Per user, per month The server, plus your time Per server, by the hour, capped monthly
Where your data lives On the vendor's servers On your server On your own server, in the region you choose
Leaving Export what they allow Everything, by hand Delete anytime; billing stops that hour

Backups and recovery

  • Scheduled backups run every day by default, at a quiet time for each service.
  • Choose daily or weekly, and keep them for a week up to a year.
  • Take a manual backup any time, for example before a big change.
  • Restore in place, or into a brand-new service while the original keeps running.

Domains

  • Every app gets its own web address as soon as it is live.
  • Add your own domain: we show the DNS record to create, then verify it.
  • Certificates are issued and renewed for you.
  • Pick which address is the primary one.

Updates and growth

  • Resize to a bigger server in the same region.
  • Migrate to another region or plan; the app, data and domains move with it.
  • Update the app to its latest version in one click.
  • Change app settings from the dashboard; secrets stay masked.

2. Choose a region

Prices for every app

Prices come from live quotes. Check any app on the pricing page before you sign up.

See pricing

What do I get when I deploy an app?

A dedicated virtual server that runs only your app. It comes with a web address, a TLS certificate, an admin account, and scheduled backups.

How does billing work?

You add credit to your account with an online payment. Each service is charged to that balance by the hour while it exists. Each plan has a monthly cap, so a full month never costs more than the price you saw before deploying. We warn you before the balance runs out. If it reaches zero, your services are deleted and their backups stay restorable for about 14 days.

Can I use my own domain?

Yes. Add a domain in the service settings, create the DNS record we show you, and verify it. We issue the certificate.

Can I change the server later?

Yes. Resize in the same region, or migrate to another region or cloud. Your data and domains move with the app.

What happens to my backups?

Backups are encrypted and stored off-site. Storage up to twice the disk size is included. You can restore in place or into a new service.

Do I pay per user?

No. You pay for the server, not for seats. Invite as many people as the app supports. We install the open-source edition of every app; some makers sell paid editions separately.

Do I need to know how to run a server?

No. Deploying, updates, backups, certificates, domains and resizing all happen from the dashboard. You never touch the server unless you want to.

A story of WiFi secrets, UART lockdowns and a damaged flash memory chip

Hacker News
adepts.of0x.cc
2026-10-16 11:38:28
Comments...
Original Article

Dear Fell owl ship, just as we announced in our previous post, our beloved God Debugger has seen fit to cast his divine light -laden with opcodes- upon his humble servant, and we have a new homily here in our temple. Please, take a seat and listen to the story of how one of our owls, along with his brother-in-law, moved on to dissect the next component of the Eufy ecosystem: the Eufy HomeBase 2.

We focused our analysis in Eufy Homebase2 instead of Homebase3 because, as we explained in From your doorbell to your home network it’s the version that I found deployed in my city, and also was the easiest to buy. The firmware version we analyze here is 3.4.2.2h (2026-06-05 18:45:48)

This is the first time I touched something related to “hardware”. I always did vuln hunting on firmwares that I could download from internet, so please forgive the sins I commited

IMPORTANT!!! You must read first the previous article before you continue reading this one.

Table of contents

Just as with the previous article, we will be covering a variety of topics here; consequently, some members of this fellowlship may have no interest in certain sections and might wish to skip straight to whatever appeals to them most. That is why we present this blessed offering: a table of contents.

In the previous chapter of this saga , I mentioned that we were only able to extract the doorbell’s firmware because the Homebase’s flash memory was soldered directly to the board and did not expose any pins to which we could attach test hooks to dump the firmware. Initially we did not want to desolder it (although in the end we had to as I will explain later) so I had to wait to acquire additional hardware. Craig S. Blackie pointed me to spring clips that would suit the size needed for the Winbond 25Q256JWEQ (WSON8 8.6mm). Once the clip arrived I created the most makeshift setup imaginable, using rubber bands to secure the clip while I proceeded to take readings using the Raspberry Pi’s SPI0 interface, just as we did with the doorbell.

Setup using rubber bands to read the firmware.
Setup using rubber bands to read the firmware.

I performed three reads and the three had different checksums, which usually is a indicator of something being wrong. After inspecting the dumps, I quickly realized they were garbage and completely useless. Unlike with the doorbell, in this case, the power supplied for the read operation also activated other components on the board that interacted with the memory; therefore, to extract the firmware, we had to desolder the chip and read it off-board.

My brother-in-law ( Óscar Lestón ) was the brave soul that desoldered the flash memory (I was too scared to even try it):

Desoldering
Desoldering

Although the memory module looked terrible once removed, it was barely damaged…

Chip
Extracted flash memory

And finally we replicated the same setup using the Raspberry Pi SPI 0 to dump the firmware. This time the three dumps had the same checksum and contained “interesting data”. The only problem was… a block of 64kbs was erased / could not be read, highly probable because we damaged it when extracting the chip.

Using the Raspberry Pi to read the chip off-board
Using the Raspberry Pi to read the chip off-board

Most of the firmware could be extracted using Binwalk.


                                                                          /home/psyconauta/research/Eufy/homebase2-firmware/chipoff/STUFF/extractions/homestation2_firmware00.bin
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DECIMAL                            HEXADECIMAL                        DESCRIPTION
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
83328                              0x14580                            U-Boot version string: 1.1.3 (Jun 14 2023 - 16:18:56)
3022226                            0x2E1D92                           XZ compressed data, total size: 11514432 bytes
14536660                           0xDDCFD4                           XZ compressed data, total size: 2200 bytes
14538862                           0xDDD86E                           XZ compressed data, total size: 2084 bytes
14540948                           0xDDE094                           XZ compressed data, total size: 1868 bytes
14542818                           0xDDE7E2                           XZ compressed data, total size: 168 bytes
14542988                           0xDDE88C                           XZ compressed data, total size: 4192 bytes
14547182                           0xDDF8EE                           XZ compressed data, total size: 2844 bytes
14550028                           0xDE040C                           XZ compressed data, total size: 244 bytes
14550282                           0xDE050A                           XZ compressed data, total size: 1452 bytes
15138816                           0xE70000                           uImage firmware image, header size: 64 bytes, data size: 3429849 bytes, compression: lzma, CPU: MIPS32, OS: Linux, image type: OS Kernel Image, load address: 0x80000000, entry 
                                                                      point: 0x802E04F0, creation time: 2023-06-14 12:56:37, image name: "Linux Kernel Image"
21233664                           0x1440000                          JFFS2 filesystem, little endian, nodes: 3426, total size: 12255244 bytes

Some parts were recovered, others no. Because there was a lot of XS streams, we choose the stupid (or maybe not so stupid) idea of using directly 7z to extract all in a big blob (and hopefully search by needles there to carve files).

➜  extractions mkdir -p 7z_mandanga  
➜  extractions 7z e -y -o7z_mandanga homestation2_firmware00.bin 

7-Zip 23.01 (x64) : Copyright (c) 1999-2023 Igor Pavlov : 2023-06-20
 64-bit locale=es_ES.UTF-8 Threads:16 OPEN_MAX:1024

Scanning the drive for archives:
1 file, 33554432 bytes (32 MiB)

Extracting archive: homestation2_firmware00.bin
         
ERRORS:
There are data after the end of archive

--
Path = homestation2_firmware00.bin
Type = xz
ERRORS:
There are data after the end of archive
Offset = 3022226
Physical Size = 11514432
Tail Size = 19017774
Method = LZMA2:17
Streams = 358
Blocks = 358
Characteristics = BlockPackSize BlockUnpackSize

ERROR: There are some data after the end of the payload data : homestation2_firmware00

Sub items Errors: 1

Archives with Errors: 1

Open Errors: 1

Sub items Errors: 1
➜  extractions ls -hal 7z_mandanga 
total 42M
drwxrwxr-x 2 psyconauta psyconauta 4,0K sep 19 19:41 .
drwxrwxr-x 4 psyconauta psyconauta 4,0K sep 19 19:34 ..
-rw-rw-r-- 1 psyconauta psyconauta  42M sep 19 18:35 homestation2_firmware00

0x01 Identifying the Wifi credential generation algorithm

One of the key questions we wanted to investigate via the firmware was the new algorithm for generating credentials for the OCEAN_XXXXXX management Wi-Fi, as we observed that it differed completely from what was expected based on the 2024 paper. Specially, we were interesting in know if the algorithm was weak as previously or no.

After writing the previous article, I realized I had failed my brother-in-law as a mentor. I had shown him how to use Ghidra and pseudo-C instead of leading him down the path of light and reason. I atoned for my sin and drew radare2.

First we checked where the Wifi network ESSID and password could be found in the firmware. A simple grep was enough to identify NVRAM variables containing both wifi names and credentials (the ad-hoc wifi used to enroll the doorbell and the mangement wifi):

➜  extractions strings homestation2_firmware00.bin_83358_unknown.raw | grep F1VSXfNQL_ZCd3k -A5 -B5  
AuthMode=WPAPSKWPA2PSK;WPAPSKWPA2PSK
EncrypType=AES;AES
RekeyInterval=3600
RekeyMethod=TIME
PMKCachePeriod=10
WPAPSK1=F1VSXfNQL_ZCd3k
WPAPSK2=913ceac3
DefaultKeyID=2;2
Key1Type=0
Key1Str1=
Key2Type=0
➜  extractions strings homestation2_firmware00.bin_83358_unknown.raw | grep OCEAN_E9A5FC -A5 -B5   
DDNSPassword=
CountryRegion=0
CountryRegionABand=7
CountryCode=ES
BssidNum=2
SSID1=OCEAN_E9A5FC
SSID2=4350c372
WirelessMode=9
TxRate=0
Channel=0
BasicRate=15

Then we tried a more broad search to try to identify binaries and/or scripts related to the wifi setup:

➜  7z_mandanga strings homestation2_firmware00 | rg 'OCEAN_'   
%s,<%d>file not exist.return OCEAN_TEST_TF_CARD_NOT_FOUND.
OCEAN_MAGIC
out of memory of OCEAN_TEST_DATA
OCEAN_TF_CARD_FORMAT_SUCCESSED
OCEAN_TF_CARD_FORMAT_FAIL_MOUNT
OCEAN_TF_CARD_FORMAT_FAIL
OCEAN_TF_CARD_FORMAT_IN_USE
        ssid_prefix="OCEAN_"
        ssid_prefix="OCEAN_"
CONFIG_LEDS_OCEAN_PWM=y
OCEAN_RUN=/mnt/ocean.sh
if [ -f $OCEAN_RUN  ];then
    chmod +x $OCEAN_RUN
    sh $OCEAN_RUN &

Unraveling a bit more this thread we found an interesting line that matches what we already knew: the ESSID is the concatenation of “OCEAN_” and MAC address:

➜  7z_mandanga strings homestation2_firmware00 | rg 'ssid_prefix'
    ssid_prefix="ocean_factory_"
        ssid_prefix="OCEAN_"
    WIFI_SSID=$ssid_prefix$SSID_MAC
    ssid_prefix="`nvram_get ssid_pre`"
    if [ "$ssid_prefix" = "" ];then
        ssid_prefix="OCEAN_"
    WIFI_SSID=$ssid_prefix$SSID_MAC

Let’s zoom out to get the full script:

➜  7z_mandanga strings homestation2_firmware00 | rg 'ssid_prefix' -B30 -A40
.sdata
.sbss
.bss
.pdr
.gnu.attributes
.mdebug.abi32
#!/bin/sh
work_mode="`cat /var/run/testmode`"
def_mode="`nvram_get 2860 work_mode`"
SSID_MAC=""
nvram_ssid="`nvram_get 2860 SSID1`"
bssid_num=`nvram_get 2860 BssidNum`
eth_state=`apcliDaemon get_eth_state`
repeater_enable=`nvram_get 2860 RepeaterEnable`
wifi_11bgn_enabled=`nvram_get 2860 wifi_11bgn_enabled`
Wireless_Mode=9
if [ "$eth_state" = "0" -a "$repeater_enable" = "1" -a "$wifi_11bgn_enabled" = "1" ]; then
    Wireless_Mode=9
get_wifi_mac()
    SSID_MAC="`ifconfig ra0 | grep HWaddr | awk '{print $5}' | awk -F ':' '{print $4$5$6}'`"
    #SSID_MAC="`ifconfig ra0 | grep HWaddr | awk '{print $5}' | awk -F ':' '{print $5$6}'`" 
    while [ "$SSID_MAC" = "" ]
        sleep 1
        SSID_MAC="`ifconfig ra0 | grep HWaddr | awk '{print $5}' | awk -F ':' '{print $4$5$6}'`"
        #SSID_MAC="`ifconfig ra0 | grep HWaddr | awk '{print $5}' | awk -F ':' '{print $5$6}'`"
    done
    echo "get mac in ssid is:$SSID_MAC"
if [ "$bssid_num" = "2" ];then
    ifconfig ra1 down>/dev/null 2>&1
if [ "$work_mode" = "1" ];then
    ssid_prefix="ocean_factory_"
    if [ "$def_mode" = "factory_mode" ];then
        ssid_prefix="OCEAN_"
    get_wifi_mac
    WIFI_SSID=$ssid_prefix$SSID_MAC
    echo "set wifi SSID:$WIFI_SSID"
    iwpriv ra0 set SSID="$WIFI_SSID"
    if [ "$def_mode" = "factory_mode" ];then
        # only WIFI_SSID is not equ nvram_ssid, update nvram.
        if [ "$nvram_ssid" != $WIFI_SSID ];then
            nvram_set SSID1 $WIFI_SSID
        fi
else
    ssid_prefix="`nvram_get ssid_pre`"
    if [ "$ssid_prefix" = "" ];then
        ssid_prefix="OCEAN_"
    get_wifi_mac
    WIFI_SSID=$ssid_prefix$SSID_MAC
    echo "set wifi SSID:$WIFI_SSID"
    # only WIFI_SSID is not equ nvram_ssid, update nvram.
    if [ "$nvram_ssid" != $WIFI_SSID ];then
        nvram_set SSID1 $WIFI_SSID
        iwpriv ra0 set SSID="$WIFI_SSID"
        if [ "$nvram_ssid" = "MT7628_AP" ];then
            sleep 3
            #reboot
            /sbin/umount_and_reboot.sh
        fi
    iwpriv ra0 set HtBw=0
    iwpriv ra0 set WirelessMode=$Wireless_Mode
    iwpriv ra0 set HtGi=0
    iwpriv ra0 set SCSEnable=1
    if [ "$bssid_num" = "2" ];then
        # ssid and pwd set in RT2860_default_vlan
        #iwpriv ra1 set SSID="AKDevbind"
        #iwpriv ra1 set WPAPSK="Anker39#*"
        #iwpriv ra1 set SSID="XMCONFIG"
        #iwpriv ra1 set WPAPSK="12345678"
        iwpriv ra1 set HtBw=0
        iwpriv ra1 set WirelessMode=$Wireless_Mode
        iwpriv ra1 set HtGi=0
        iwpriv ra1 set SCSEnable=1
        iwpriv ra1 set WmmCapable=1
        iwpriv ra1 set ed_chk=0
wpapsk="`nvram_get WPAPSK1`"
if [ "$wpapsk" != "" ];then
    #echo "iwpriv ra0 set WPAPSK=$wpapsk"
    iwpriv ra0 set WPAPSK=$wpapsk
# set wmm
iwpriv ra0 set WmmCapable=1
# change wan mode, 
wifi
apcli
iwpriv
home_security
if [ "$eth_state" = "0" -a "$repeater_enable" = "1" ]; then
    switch_wan_interface.sh eth2.2 apcli0 0
#!/bin/sh

So, from one side we found how the ESSID is created and from the other side we found that the password is read from a NVRAM variable ( wpapsk="nvram_get WPAPSK1" ). Let’s do a quick search with that name:

➜  7z_mandanga strings homestation2_firmware00 | rg -i 'WPAPSK1' -A5 -B5  
wifi channel:%d.
fail to get freq.
/dev/gpio
Error while opening /dev/gpio
SSID1
WPAPSK1
SSID2
ra1 SSID=%s
WPAPSK2
ra1 WIFI_PWD=%s
/sbin/chpasswd.sh eufycamera %s
--
(...)

Just in the first hit there is something that looks like a compiled binary (that %d is suspicious). I built this crappy script to extract the elf that search for the string, then search backwards to find the magic header and assume the following file in the blob is also an ELF:

 #!/usr/bin/env python3
 
 
 with open("homestation2_firmware00", "rb") as file:
     data = file.read()
 
 needle = data.find(b"WPAPSK1")
 magic = data.rfind(b"\x7fELF", 0, needle)
 end = data.find(b"\x7fELF", needle)
 binary = open("elf_wifi_01", "wb")
 binary.write(data[magic:end])
 binary.close()

And it worked flawelessly:

➜  7z_mandanga python3 carve_wifi.py
➜  7z_mandanga file elf_wifi_01     
elf_wifi_01: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, stripped

Doing a quick check on the symbols we find a lot of interesting stuff related to wifi, specially that juicy set_wifi_pwd .

➜  7z_mandanga r2 elf_wifi_01
WARN: Relocs has not been applied. Please use `-e bin.relocs.apply=true` or `-e bin.cache=true` next time
 -- Use 'zoom.byte=printable' in zoom mode ('z' in Visual mode) to find strings
[0x0045d130]> aaa
INFO: Analyze all flags starting with sym. and entry0 (aa)
INFO: Analyze imports (af@@@i)
INFO: Analyze entrypoint (af@ entry0)
INFO: Analyze symbols (af@@@s)
INFO: Running plugin pre-analysis hooks
INFO: Analyze all functions arguments/locals (afva@@F)
INFO: Analyze function calls (aac)
INFO: Analyze len bytes of instructions for references (aar)
INFO: Finding and parsing C++ vtables (avrr)
INFO: Analyzing methods (af @@ method.*)
INFO: Emulate functions to find computed references (aaef)
INFO: Recovering local variables (afva@@@F)
INFO: Type matching analysis for all functions (aaft)
INFO: Propagate noreturn information (aanr)
INFO: Use -AA or aaaa to perform additional experimental analysis
INFO: Finding xrefs in noncode sections (e anal.in=io.maps.x; aav)
[0x0045d130]> afl~wifi
0x006f8908    1    288 sym.eufy_setDoorbellMechanicalChimeSwitch_wifi
0x005a972c   14   1124 sym.zx_update_dev_wifi_info_by_addr
0x0054ad3c   10    316 sym.check_hub_wifi_power
0x00558fd8   18   1800 sym.quick_bind_wifi_mgmt_rcv_handler
0x0052cfac   19   1272 sym.zx_update_hub_wifi_channel
0x005e5414   93   7544 sym.netlink_wifi_connect
0x0093f1c0    6    528 sym.aws_wifi_get_mac
0x0053aff8    1     80 sym.zx_get_wifi_mac
0x004cda10   13    728 sym.zx_check_wifi_version
0x005489a0    1     16 sym.wifi_reduceTxPower
0x005a47a0   23    892 sym.zx_alloc_wifi_addr
0x00532224    4    324 sym.set_camera_wifi_rssi
0x0049c7d4   11    448 sym.wifi_check_all_devs_online
0x0049c61c   10    440 sym.wifi_get_dev_rssi
0x0049c994   20   1768 sym.wifi_get_devs_rssi_list_in_json
0x0059e8f8    3    204 sym.restart_wifi
0x0053bb04    1    144 sym.set_pair_wifi_info
0x0053b048    8    660 sym.get_wifi_info
0x006fb684  399  18808 sym.zx_wifi_send_command
0x00603514    6    484 sym.make_wifi_notify_json
0x0054ab0c    9    560 sym.convert_wifi_countrycode
0x0059df7c    1    104 sym.wifi_info_signal_init
0x0053b510   33   1524 sym.set_wifi_pwd
0x00558894    5    292 sym.zx_quick_bind_timer_stop_send_wifi_info
0x006f8094    8    304 sym.eufy_set_wifi_countrycode
0x0054ae78    7    464 sym.set_wifi_power_flag
0x004da374   54   3076 sym.zx_handle_wifi_ready
0x006f6348    8    828 sym.wifi_log_server_init
0x006f8a28    1    288 sym.eufy_setDoorbellElectronicRingtoneTime_wifi
0x0094a1f4    4    168 sym.anker_mgmt_register_get_wifi_channel_cb
0x00532368   10    396 sym.check_camera_wifi_rssi_ok
0x005580a0   28   2036 sym.zx_quick_bind_timer_send_wifi_info
0x0094a29c    4    168 sym.anker_mgmt_register_get_wifi_mac_cb
0x0053b2dc    6    564 sym.get_wifi_ra1_info
0x006f6684    8    828 sym.wifi_log_server_t40_init
0x0056dc34   15   1008 sym.repeater_update_all_dev_wifi_channel
0x0049d07c   13    636 sym.wifi_devs_rssi_test_mode_exit
0x004daf78    1    160 sym.handle_wifi_ready_thread
0x008c5ac4    7    356 sym.zx_homekit_get_wifi_ready
0x0049d2f8    9    288 sym.wifi_setManualChannel
0x004cd584   11    668 sym.eufysdk_common_msg_wifi_callback

Jumping into that function we can see that first it builds a password based on a MD5 hash that is used locally for the user eufycamera and it’s not related to the wifi. The wifi-stuff starts at 0x0053b690 where it checks one parameter from base_param (I guess the type of device or model) against 0x0C. This part is key because if the value is different to 0x0C, then it uses the MAC Address (right block) meanwhile if it matches then it would use what returns z8GetSN() (left block). We are in the z8GetSN() case.

Radare2
Different flow based on device model.

The z8GetSN() function communicates through i2c and sends command 0xC1 (the i2c part is inside z8SendData() ) and read 0x11 bytes from the response.

Radare2
I2C communication to extract a serial number (it's not the device SN)

Then bytes are translated into 32 byte string and fed to a function called mac_func() which also receives the Homebase Serial Number ( T8010... ):

Radare2
The SN from the I2C communication and the device Serial Number (obj.g_hub_sn) used as parameters for mac_func()

This mac_func calls a helper to perform HMAC SHA256 with the previous mentioned data, being the “message” the value returned by z8GetSN and the “key” the Serial Number:

Radare2
HMAC SHA256

The result is used by a function that would encode the information into text.

Radare2
Encoding memory contents

The zx_Memory_Encode function calls urlsafe_b64_encode which converts the value into base64 using the following alphabet:

[0x006f0490]> px 65 @ 0xa5cb40
- offset -  4041 4243 4445 4647 4849 4A4B 4C4D 4E4F  0123456789ABCDEF
0x00a5cb40  4142 4344 4546 4748 494a 4b4c 4d4e 4f50  ABCDEFGHIJKLMNOP
0x00a5cb50  5152 5354 5556 5758 595a 6162 6364 6566  QRSTUVWXYZabcdef
0x00a5cb60  6768 696a 6b6c 6d6e 6f70 7172 7374 7576  ghijklmnopqrstuv
0x00a5cb70  7778 797a 3031 3233 3435 3637 3839 2d5f  wxyz0123456789-_
0x00a5cb80  00                                       .

Finally, the password is updated in NVRAM and changed executing the external command iwpriv ra0 set WPAPSK=%s :

Radare2
Updating NVRAM value

So, the only unkown data to replicate the password is the value returned by z8GetSN . The other compontent, the device serial number, is “predictable” because it follows a known template based on the type of device.

0x02 Rubber-hose treatment to the UART lockdown

In the previous article, we mentioned that UART access was blocked. Specifically, connecting via UART yielded a prompt asking the user to press the “Enter” key. However, doing so caused the process to terminate and the same program to relaunch, once again requesting the key press; this created an infinite loop that prevented access to an actual shell. Logs can be seen below:

starting pid 5617, tty '/dev/ttyS1': '/sbin/login.sh'

process '/sbin/login.sh' (pid 5617) exited. Scheduling for restart.

Please press Enter to activate this console. 
setrlimit(RLIMIT_CORE, &limit); 

starting pid 6526, tty '/dev/ttyS1': '/sbin/login.sh'

process '/sbin/login.sh' (pid 6526) exited. Scheduling for restart.

Please press Enter to activate this console. 
setrlimit(RLIMIT_CORE, &limit); 

starting pid 6608, tty '/dev/ttyS1': '/sbin/login.sh'



process '/sbin/login.sh' (pid 6608) exited. Scheduling for restart.

On the other hand, trying to interrupt U-Boot witch a escape sequence did not work.

After acquiring the firmware and resolving questions about how the Wi-Fi password algorithm worked, the next objective was to understand the mechanism behind the UART access lockout and find a way to bypass it, as we intended to use the device itself to debug key services and search for vulnerabilities.

In the logs the serial port is /dev/ttyS1 , so let’s search references to it:

➜  extractions grep -r ttyS1 
grep: homestation2_firmware00.bin.extracted/E70000/Linux_Kernel_Image.bin.extracted/0/decompressed.bin: coincidencia en fichero binario
grep: homestation2_firmware00.bin.extracted/E70000/Linux_Kernel_Image.bin.extracted/0/decompressed.bin_3143840_aes_forward_table.raw: coincidencia en fichero binario
grep: homestation2_firmware00.bin.extracted/E70000/Linux_Kernel_Image.bin.extracted/0/decompressed.bin_3679760_unknown.raw: coincidencia en fichero binario
grep: homestation2_firmware00.bin.extracted/E70000/Linux_Kernel_Image.bin.extracted/0/decompressed.bin_3135648_aes_reverse_table.raw: coincidencia en fichero binario
grep: homestation2_firmware00.bin.extracted/E70000/Linux_Kernel_Image.bin.extracted/0/decompressed.bin.extracted/3F16A4/decompressed.bin: coincidencia en fichero binario
homestation2_firmware00.bin.extracted/E70000/Linux_Kernel_Image.bin.extracted/0/decompressed.bin.extracted/3F16A4/decompressed.bin.extracted/0/etc_ro/inittab:ttyS1::askfirst:/sbin/login.sh
grep: homestation2_firmware00.bin.extracted/E70000/Linux_Kernel_Image.bin.extracted/0/decompressed.bin.extracted/3F16A4/decompressed.bin.extracted/0/bin/recover_0_elf.raw: coincidencia en fichero binario
grep: homestation2_firmware00.bin.extracted/E70000/Linux_Kernel_Image.bin.extracted/0/decompressed.bin.extracted/3F16A4/decompressed.bin.extracted/0/bin/recover: coincidencia en fichero binario
homestation2_firmware00.bin.extracted/E70000/Linux_Kernel_Image.bin.extracted/0/decompressed.bin.extracted/3F16A4/decompressed.bin.extracted/0/sbin/makedevlinks.sh:mknod /dev/ttyS1 c 4 65
grep: homestation2_firmware00.bin.extracted/E70000/Linux_Kernel_Image.bin.extracted/0/decompressed.bin.extracted/3F16A4/decompressed.bin_0_cpio.raw: coincidencia en fichero binario
grep: homestation2_firmware00.bin.extracted/E70000/Linux_Kernel_Image.bin.extracted/0/decompressed.bin_3147936_aes_rcon.raw: coincidencia en fichero binario
grep: 7z_mandanga/homestation2_firmware00: coincidencia en fichero binario

The key is in the inittab file, where we can see the it triggers the execution of /sbin/login.sh script once the user press “Enter” (the BusyBox askfirst action shows the prompt with sentence “Please press Enter to activate this console”). The script is simple as:

#!/bin/sh

DEBUG_LOG="`nvram_get debug_log`"
if [ "$DEBUG_LOG" = "1" -o -f "/mnt/enable_console" ];then
	echo "enter debug mode" > /dev/console
	/bin/login
fi

The script checks if debug mode is enabled by checking the NVRAM variable debug_log and based on that allows the access to the shell (well, to login in the shell) or exits, entering in the loop.

We did not find a straight way to enable that variable and bypass the lockdown. There are various ways on changing the boot mode to enable “debug”, but all of them are far away from our hands because:

  1. One of them is based in the presence of a file in the filesystem. Because to be able to drop a file we would need access, it is a chicken-egg situation.
  2. The other method involves a convoluted magic protocol based on ARP and commands signed by a private key which is not present in the firmware. Yes, they use encapsulate their own protocol on ARP and exchange magic signed packets to enable debug remotely. I am not sure what crack they smoked.

It occurs to me at this point that if we can not bypass the check for whether it is booting in production or debug mode, why not completely obliterate the check and jump straight to a shell?

The firmware did not contain anything encrypted, so should be straight forward to modify it to allow us direct access through the serial port. The problem was… Do you remember when I mentioned that it was “barely damaged”?. Well, we fucked 64kbs at 0x500000 which is the load address for the image.

At first, I thought our clumsy hands had ruined the project and that the idea of ​​using the actual device for dynamic analysis with a debugger was slipping away (we would still have the option of trying to emulate some binaries, but having access to the original hardware is always infinitely easier). Fortunately, after analyzing the firmware layout a bit more, we discovered a much smaller “recovery image” that was still intact at 0xe70000 . So, because the “normal” image was fucked, the bootloader would have to load this recovery image that we can manipulate to remove the UART lockdown.

The “recovery image” is a U-Boot image with a 64-byte header :

Header offset Length Field Original recovery value
0x00 4 Magic 0x27051956
0x04 4 Header CRC32 0xe764e161
0x08 4 Timestamp Preserved by the builder
0x0c 4 Compressed payload length 0x3455d9 = 3,429,849
0x10 4 RAM load address 0x80000000
0x14 4 Entry address 0x802e04f0
0x18 4 Payload CRC32 0x19b650c3
0x1c 4 OS, architecture, type, compression 05 05 02 03
0x20 32 Image-name area Preserved, including vendor-used bytes

The actual filesystem is inside a matrioska of different compression layers that can be visualized in the following diagram:

Matrioska of compression
Matrioska!

Once the filesystem was unpacked, I made the minimal changes to allow us to jump directly to the shell with root privileges. To avoid headaches, I padded the modifications to match the same size it had the original code (code is from python script I used to perform the modifications and re-pack/fix CRCs):

old_condition = b'if [ "$DEBUG_LOG" = "1" ];then'
new_condition = b'if [ 1 = 1 ];then' + b' ' * 13

old_login = b'\t/bin/login\n'
new_login = b'\t/bin/sh   \n'

After doing some local test to verify that the modified recovery image was correctly modified and it would unpack/load correctly we proceeded to overwrite it in the flash chip. In order to disable the Write Protection that appears in the documentation this connection diagram was followed:

Diagram to disable Write Protection
Diagram to disable Write Protection

Writing the new recovery image:

Writting the new recovery image
Overwriting the recovery image with our backdoored version

Then we performed three reads to verify the process was done correctly. After that, the chip was solded again into the device board:

Soldering again the chip
Soldering again the chip

Once the chip was soldered I connected again my laptop to the device using a USB-TTL. First it tried to load the normal image, but it failed and then it jumped to backdoored recovery image and after loading it… we got a shell!!

UART shell
Finally access to an admin shell!!

0x03 Filesystem gardening for debugging purposes

We finally have a shell; the only problem is that the recovery image is very limited and the file system is not mounted, so the binaries and libraries needed to properly debug the system are missing. Furthermore, the kernel lacks certain modules-such as those responsible for handling WiFi interfaces or the I2C interface used to generate the WiFi key.

The set of commands available in the default image is quite limited, but at least there are tools like wget , which allows us to transfer files from the laptop to the device. I prepared a crappy setup using an old TP-Link router that I got from Telefónica in 2015.

Network Setup
Not glamorous setup

I compiled a new BusyBox with loads of extra commands that were not present in the original one. Using this new BusyBox I started to try to create a “staged” filesystem and bind all the paths to this “staged” filesystem. I had to execute services needed to run before the big ELF in charge of main services ( homeapp_security , the same binary that contained the WiFi logic), also because of memory limitations I had to modify some kernel parameters like overcommit_ratio . It was a three hours process of hit and miss until I could run the main binary and be able to interact with it.

Because this was a process that I would need to repeat each time I wanted to use the device (because the filesystem in the recovery image is not persistent, so after each boot I have to restore all) I shared the logs of picocom to Codex and asked it to prepare a all-in-one script that would repeat the same steps I did (and discard the stuff that didn’t work). To be honest, the following morning after that night of playing with the Homebase I barely remembered what I did, so having the logs was marvelous to rebuild and automatize the process. Keep logs of everything always, they will save your ass at some point.

The diagram of actions until the homeapp_security runs is the following:

Diagram of actions
Flow diagram from the patched firmware to getting the binary running

The two most important scripts to rebuild the filesystem are shown below:

#!/bin/sh
# Recovery UART bootstrap. Run with sh; do not source into the login shell.
# Usage: sh homeapp-restore-v5.sh [http://PC:8000] [--start]
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
unset LD_PRELOAD LD_LIBRARY_PATH
BASE=/media/homeapp-debug
ROOT=$BASE/rootfs
SERVER=http://192.168.90.112:8000
START=no
fail() { echo "homeapp-restore: $*" >&2; exit 1; }
for argument in "$@"; do
    case "$argument" in
        http://*) SERVER=${argument%/} ;;
        --start) START=yes ;;
        *) fail 'usage: sh homeapp-restore-v5.sh [http://PC:8000] [--start]' ;;
    esac
done
case "$SERVER" in *' '*|*'?'*|*'#'*) fail 'use a plain HTTP base URL without spaces/query/fragment' ;; esac
[ "`awk '/^Uid:/ {print $3}' /proc/self/status`" = 0 ] || fail 'root effective UID required'
[ -r /proc/self/mountinfo ] || fail '/proc/self/mountinfo is required'
[ -c /dev/gpio ] && [ -c /dev/apsoc_nvram ] || fail 'expected recovery device nodes missing'

mounted() { awk -v p="$1" '$2==p {n++} END {exit n==0}' /proc/mounts; }
check_tmpfs() {
    awk -v p="$1" -v size="$2" '$2==p {
        n++; if ($3=="tmpfs") {
            count=split($4,a,","); for(i=1;i<=count;i++) if(a[i]=="size=" size "k") ok=1
        }
    } END {exit !(n==1 && ok)}' /proc/mounts
}
empty_dir() {
    [ ! -e "$1" ] && return 0
    [ -d "$1" ] && [ ! -L "$1" ] || return 1
    [ -z "`ls -A "$1"`" ]
}
asset_md5() {
    # BEGIN GENERATED ASSET HASHES
    case "$1" in
        busybox-extra) echo b587f623ef28b84e277fbd1b2b0b2348 ;;
        homeapp-enter) echo 8fde5ed1e3e65d07a7b9ebe672b25a5c ;;
        homeapp-mount-runtime.sh) echo 19e73a1584137c0d2150d6968cccb4c5 ;;
        homeapp-start-bounded-v4.sh) echo 19b70b8ac6751f8e161e490460ff8f3e ;;
        homeapp-control-v5.sh) echo 2fc7613db0f02a0d16c1417bb0282264 ;;
        homeapp_rootfs.tar.gz) echo bf6acaecf3301532bda2c1f6c41a3b2c ;;
        *) return 1 ;;
    esac
    # END GENERATED ASSET HASHES
}
verify() {
    expected=`asset_md5 "$1"` || fail "unknown asset: $1"
    actual=`md5sum "$2" | awk '{print $1}'`
    [ "$actual" = "$expected" ] || fail "checksum mismatch: $2; stop and check the PC bundle"
}
fetch() {
    asset=$1
    echo "homeapp-restore: downloading $asset"
    wget -O "$BASE/$asset.part" "$SERVER/$asset" || fail "download failed: $asset; partial setup preserved"
    verify "$asset" "$BASE/$asset.part"
    mv "$BASE/$asset.part" "$BASE/$asset" || fail "cannot finish $asset"
}
stamp() { awk '{sub(/^.*\) /, ""); print $20}' "/proc/$1/stat" 2>/dev/null; }
is_supervisor() {
    [ -r "/proc/$1/cmdline" ] || return 1
    tr '\000' '\n' < "/proc/$1/cmdline" | awk '
        NR==1 {shell=($0=="sh" || $0=="/bin/sh" || $0=="/sbin/run_mini_system.sh")}
        $0=="/sbin/run_mini_system.sh" {script=1}
        END {exit !(shell && script)}'
}
recover_pids() {
    for procdir in /proc/[0-9]*; do
        [ -e "$procdir/exe" ] || continue
        if [ "$procdir/exe" -ef /bin/recover ] || [ "$procdir/exe" -ef /sbin/recover ]; then
            echo "${procdir#/proc/}"
        fi
    done
}
signal_recover() {
    for recover_pid in `recover_pids`; do
        if [ "/proc/$recover_pid/exe" -ef /bin/recover ] || [ "/proc/$recover_pid/exe" -ef /sbin/recover ]; then
            kill "-$1" "$recover_pid" 2>/dev/null || :
        fi
    done
}
coordinate_recovery() {
    # Exact argv matching avoids accidentally signalling grep or the UART shell.
    for procdir in /proc/[0-9]*; do
        supervisor_pid=${procdir#/proc/}
        if is_supervisor "$supervisor_pid"; then
            supervisor_stamp=`stamp "$supervisor_pid"`
            [ -n "$supervisor_stamp" ] || continue
            kill -STOP "$supervisor_pid" || fail "cannot pause recovery supervisor $supervisor_pid"
            echo "$supervisor_pid $supervisor_stamp" > "$BASE/recovery-supervisor-$supervisor_pid"
            echo "homeapp-restore: paused recovery supervisor $supervisor_pid"
        fi
    done
    signal_recover TERM
    sleep 2
    signal_recover KILL
    sleep 1
    [ -z "`recover_pids`" ] || fail 'recovery tasks survived stop'
    pidof recover >/dev/null 2>&1 && fail 'unrecognized recover process remains; inspect ps'
    return 0
}
install_commands() {
    for asset in homeapp-mount-runtime.sh homeapp-start-bounded-v4.sh homeapp-control-v5.sh; do
        verify "$asset" "$BASE/$asset"
    done
    # Rename new files into place: never truncate a script a running shell
    # may still be reading during a repeated preparation command.
    for asset in homeapp-mount-runtime.sh homeapp-start-bounded-v4.sh homeapp-control-v5.sh; do
        destination=/tmp/$asset
        [ "$asset" != homeapp-control-v5.sh ] || destination=/tmp/homeapp
        cp "$BASE/$asset" "$destination.part.$$" || fail "cannot copy $asset"
        chmod 755 "$destination.part.$$" || fail "cannot mark $asset executable"
        mv "$destination.part.$$" "$destination" || fail "cannot install $asset"
    done
}

echo 'homeapp-restore revision: v5; original firmware applications, RAM staging'
if [ -f "$BASE/restore-v5.ready" ]; then
    # Reusing this recipe's completed setup is safe; never extract over binds.
    check_tmpfs "$BASE" 65536 || fail 'staging mount changed or is stacked'
    check_tmpfs /media/mmcblk0p1 8192 || fail 'database mount changed or is stacked'
    verify homeapp-enter "$BASE/homeapp-enter"
    verify busybox-extra "$BASE/busybox-extra"
    install_commands
    sh /tmp/homeapp-mount-runtime.sh --resume || fail 'runtime mount verification failed'
    coordinate_recovery
    echo 'homeapp-restore: verified and reused completed setup; no archive download/extraction'
else
    # Fail closed on partial/manual setups; no rm -rf, unmount or overlay of data.
    mounted "$BASE" && fail 'unrecognized/partial staging mount; inspect it or reboot before retrying'
    empty_dir "$BASE" || fail 'staging directory is not empty; preserve it and inspect or reboot'
    mounted /media/mmcblk0p1 && fail 'database/storage path already mounted; will not cover it'
    empty_dir /media/mmcblk0p1 || fail 'database/storage directory is not empty; will not cover it'
    free_kb=`awk '/^MemFree:/ {print $2}' /proc/meminfo`
    [ "${free_kb:-0}" -ge 81920 ] || fail 'less than 80 MiB free; reboot to a fresh recovery shell or inspect memory'
    # Refuse existing normal services before staging/coordination.
    for service in home_security mdnsd mips_collector pushMuxer systemServer embdb_eufy; do
        pidof "$service" >/dev/null 2>&1 && fail "$service already running; use a fresh recovery boot"
    done
    original_mode=`cat /proc/sys/vm/overcommit_memory`
    original_ratio=`cat /proc/sys/vm/overcommit_ratio`
    if [ "$original_mode" = 2 ] && [ "$original_ratio" -lt 75 ]; then
        echo 75 > /proc/sys/vm/overcommit_ratio || fail 'cannot raise runtime commit ratio'
        echo "homeapp-restore: strict overcommit ratio $original_ratio -> 75 (this boot only)"
    fi
    if [ "$original_mode" = 2 ]; then
        headroom=`awk '/^CommitLimit:/ {limit=$2} /^Committed_AS:/ {used=$2} END {print limit-used}' /proc/meminfo`
        [ "$headroom" -ge 65536 ] || fail 'less than 64 MiB commitment headroom; no extraction attempted'
    fi
    mkdir -p "$BASE" || fail 'cannot create staging directory'
    mount -t tmpfs -o size=64m tmpfs "$BASE" || fail 'cannot mount staging tmpfs'
    check_tmpfs "$BASE" 65536 || fail 'unexpected staging filesystem size'
    echo "$original_mode $original_ratio" > "$BASE/original-overcommit"
    echo "$SERVER" > "$BASE/download-server"
    for asset in busybox-extra homeapp-enter homeapp-mount-runtime.sh homeapp-start-bounded-v4.sh homeapp-control-v5.sh; do
        fetch "$asset"
    done
    chmod 755 "$BASE/busybox-extra" "$BASE/homeapp-enter" || fail 'chmod failed'
    "$BASE/homeapp-enter" --check || fail 'native helper does not run'
    fetch homeapp_rootfs.tar.gz
    (cd "$BASE" && ./busybox-extra tar -xzf homeapp_rootfs.tar.gz) || fail 'extraction failed; preserve diagnostics, then reboot before retrying'
    # Only the verified temporary archive is removed, before any runtime binds.
    rm "$BASE/homeapp_rootfs.tar.gz" || fail 'cannot remove staged archive'
    "$BASE/homeapp-enter" "$ROOT" /bin/sh -c ':' || fail 'normal loader/BusyBox does not execute'
    mkdir -p /media/mmcblk0p1 || fail 'cannot create database path'
    mount -t tmpfs -o size=8m tmpfs /media/mmcblk0p1 || fail 'cannot mount temporary database'
    check_tmpfs /media/mmcblk0p1 8192 || fail 'unexpected database filesystem size'
    mkdir -p /media/mmcblk0p1/.sqlite || fail 'cannot create database directory'
    install_commands
    sh /tmp/homeapp-mount-runtime.sh --apply || fail 'runtime mount setup failed; earlier mounts preserved'
    coordinate_recovery
    echo v5 > "$BASE/restore-v5.ready" || fail 'cannot record successful setup'
fi
echo 'homeapp-restore: READY. /tmp/homeapp start|status|logs|stop|shell'
echo 'Wi-Fi/I2C drivers and persistent flash configuration are not restored by userspace staging.'
df -k "$BASE" /media/mmcblk0p1
if [ "$START" = yes ]; then
    /tmp/homeapp start || fail 'setup completed, but application startup failed; inspect /tmp/homeapp status'
fi



#!/bin/sh
# Run with `sh`, never source into the interactive UART shell.
# Does not start services, mount flash, or change memory policy.
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
BASE=/media/homeapp-debug
ROOT=/media/homeapp-debug/rootfs
fail() { echo "homeapp-mount: $*" >&2; exit 1; }
mounted() { awk -v p="$1" '$2 == p {found=1} END {exit !found}' /proc/mounts; }
same_mount_root() {
    # Compare device ID and filesystem-root path, not just the filesystem type.
    awk -v s="$1" -v d="$2" '
        $5 == s {source=$3 " " $4}
        $5 == d {target=$3 " " $4; count++}
        END {exit !(count == 1 && source != "" && source == target)}
    ' /proc/self/mountinfo
}

case "${1-}" in
    --inspect)
        echo '--- Mounts ---'
        cat /proc/mounts
        echo '--- Memory ---'
        cat /proc/meminfo
        echo '--- Overcommit mode / ratio ---'
        cat /proc/sys/vm/overcommit_memory /proc/sys/vm/overcommit_ratio
        echo '--- Staged executables ---'
        ls -l "$BASE/homeapp-enter" "$ROOT/bin/busybox" "$ROOT/bin/home_security"
        echo '--- Processes ---'
        ps
        exit 0
        ;;
    --apply|--resume) mode=$1 ;;
    *) fail 'usage: sh homeapp-mount-runtime.sh --inspect|--apply|--resume' ;;
esac

mounted "$BASE" || fail 'staging filesystem is not mounted'
[ -x "$BASE/homeapp-enter" ] || fail 'native helper missing'
[ -x "$ROOT/bin/home_security" ] || fail 'application missing'
mounted /media/mmcblk0p1 || fail 'prepare temporary database mount first'
[ -d /media/mmcblk0p1/.sqlite ] || fail 'database directory missing'

# Resume only matching binds, with one mount at each staged destination.
# Leave staged /mnt (including its original zx_log.conf) in place. Recovery's
# /mnt bind failed in the first attempt; persistent state is a separate step.
for path in dev proc sys etc var tmp media dev/pts media/mmcblk0p1; do
    if mounted "$ROOT/$path"; then
        [ "$mode" = --resume ] || fail "$ROOT/$path already mounted; inspect partial setup first"
        same_mount_root "/$path" "$ROOT/$path" || fail "existing bind does not match /$path, or is stacked: $ROOT/$path"
    fi
done

bind_path() {
    source_path=$1
    target_path=$2
    if mounted "$target_path"; then
        echo "homeapp-mount: keeping verified bind $target_path"
        return 0
    fi
    mkdir -p "$target_path" || fail "cannot create $target_path"
    echo "homeapp-mount: $source_path -> $target_path"
    mount -o bind "$source_path" "$target_path"
    rc=$?
    [ "$rc" -eq 0 ] || fail "mount exited $rc: $source_path -> $target_path (earlier mounts preserved)"
    mounted "$target_path" || fail "mount returned success but $target_path is absent from /proc/mounts"
    same_mount_root "$source_path" "$target_path" || fail "unexpected mount root at $target_path"
}
for path in dev proc sys etc var tmp media; do
    bind_path "/$path" "$ROOT/$path"
done
bind_path /dev/pts "$ROOT/dev/pts"
bind_path /media/mmcblk0p1 "$ROOT/media/mmcblk0p1"
echo 'Runtime binds completed; no application services started.'

Then running it from the UART shell we can see it prepares everything and also launch the binary:

# wget -O /tmp/homeapp-restore-v5.sh http://192.168.90.112:8000/homeapp-restore-
v5.sh
Connecting to 192.168.90.112:8000 (192.168.90.112:8000)
homeapp-restore-v5.s 100% |*******************************|  9174  --:--:-- ETA
# sh /tmp/homeapp-restore-v5.sh http://192.168.90.112:8000 --start
homeapp-restore revision: v5; original firmware applications, RAM staging
homeapp-restore: strict overcommit ratio 50 -> 75 (this boot only)
homeapp-restore: downloading busybox-extra
Connecting to 192.168.90.112:8000 (192.168.90.112:8000)
busybox-extra.part   100% |*******************************|   673k --:--:-- ETA
homeapp-restore: downloading homeapp-enter
Connecting to 192.168.90.112:8000 (192.168.90.112:8000)
homeapp-enter.part   100% |*******************************|   622k --:--:-- ETA
homeapp-restore: downloading homeapp-mount-runtime.sh
Connecting to 192.168.90.112:8000 (192.168.90.112:8000)
homeapp-mount-runtim 100% |*******************************|  3054  --:--:-- ETA
homeapp-restore: downloading homeapp-start-bounded-v4.sh
Connecting to 192.168.90.112:8000 (192.168.90.112:8000)
homeapp-start-bounde 100% |*******************************|  4383  --:--:-- ETA
homeapp-restore: downloading homeapp-control-v5.sh
Connecting to 192.168.90.112:8000 (192.168.90.112:8000)
homeapp-control-v5.s 100% |*******************************|  6488  --:--:-- ETA
homeapp-enter: running; uid=0 euid=0; static MIPS helper
homeapp-restore: downloading homeapp_rootfs.tar.gz
Connecting to 192.168.90.112:8000 (192.168.90.112:8000)
homeapp_rootfs.tar.g 100% |*******************************| 14579k 00:00:00 ETA
homeapp-mount: /dev -> /media/homeapp-debug/rootfs/dev
homeapp-mount: /proc -> /media/homeapp-debug/rootfs/proc
homeapp-mount: /sys -> /media/homeapp-debug/rootfs/sys
homeapp-mount: /etc -> /media/homeapp-debug/rootfs/etc
homeapp-mount: /var -> /media/homeapp-debug/rootfs/var
homeapp-mount: /tmp -> /media/homeapp-debug/rootfs/tmp
homeapp-mount: /media -> /media/homeapp-debug/rootfs/media
homeapp-mount: /dev/pts -> /media/homeapp-debug/rootfs/dev/pts
homeapp-mount: /media/mmcblk0p1 -> /media/homeapp-debug/rootfs/media/mmcblk0p1
Runtime binds completed; no application services started.
homeapp-restore: READY. /tmp/homeapp start|status|logs|stop|shell
Wi-Fi/I2C drivers and persistent flash configuration are not restored by userspace staging.
Filesystem           1k-blocks      Used Available Use% Mounted on
tmpfs                    65536     44844     20692  68% /media/homeapp-debug
tmpfs                     8192         0      8192   0% /media/mmcblk0p1
homeapp-mount: keeping verified bind /media/homeapp-debug/rootfs/dev
homeapp-mount: keeping verified bind /media/homeapp-debug/rootfs/proc
homeapp-mount: keeping verified bind /media/homeapp-debug/rootfs/sys
homeapp-mount: keeping verified bind /media/homeapp-debug/rootfs/etc
homeapp-mount: keeping verified bind /media/homeapp-debug/rootfs/var
homeapp-mount: keeping verified bind /media/homeapp-debug/rootfs/tmp
homeapp-mount: keeping verified bind /media/homeapp-debug/rootfs/media
homeapp-mount: keeping verified bind /media/homeapp-debug/rootfs/dev/pts
homeapp-mount: keeping verified bind /media/homeapp-debug/rootfs/media/mmcblk0p1
Runtime binds completed; no application services started.
homeapp: launcher PID 5880; startup output: /media/mmcblk0p1/homeapp-launch-5565.log
homeapp: startup in progress; /tmp/homeapp status and /tmp/homeapp logs
A running launcher is not proof of application or enrollment readiness.

Finally we can see that the services are exposed!

# /media/homeapp-debug/busybox-extra netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:10400           0.0.0.0:*               LISTEN      6016/home_security
tcp        0      0 0.0.0.0:10402           0.0.0.0:*               LISTEN      6016/home_security
tcp        0      0 0.0.0.0:32290           0.0.0.0:*               LISTEN      6016/home_security
tcp        0      0 0.0.0.0:10404           0.0.0.0:*               LISTEN      6016/home_security
tcp        0      0 0.0.0.0:32292           0.0.0.0:*               LISTEN      6016/home_security
tcp        0      0 0.0.0.0:32293           0.0.0.0:*               LISTEN      6016/home_security
tcp        0      0 0.0.0.0:32295           0.0.0.0:*               LISTEN      6016/home_security
tcp        0      0 0.0.0.0:10600           0.0.0.0:*               LISTEN      6016/home_security
tcp        0      0 0.0.0.0:32392           0.0.0.0:*               LISTEN      6016/home_security
tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      5974/pushMuxer
tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN      5963/mips_collector
tcp        0      0 0.0.0.0:554             0.0.0.0:*               LISTEN      5974/pushMuxer
tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN      1405/dnsmasq
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      1693/telnetd
netstat: /proc/net/tcp6: No such file or directory
udp        0      0 0.0.0.0:53              0.0.0.0:*                           1405/dnsmasq
udp        0      0 0.0.0.0:32380           0.0.0.0:*                           6016/home_security
udp        0      0 0.0.0.0:46217           0.0.0.0:*                           6456/ntpclient
udp        0      0 0.0.0.0:43466           0.0.0.0:*                           1405/dnsmasq
udp        0      0 0.0.0.0:21200           0.0.0.0:*                           6016/home_security
udp        0      0 0.0.0.0:29947           0.0.0.0:*                           6016/home_security
netstat: /proc/net/udp6: No such file or directory

The last thing was compiling a compatible version of GDB and upload it to the device to start playing :)

GDB running on the Homebase2
GDB running on the Homebase2

Of course far more configurations changes are needed to make the binary work properly (e.g. I had to bridge an eth interface to create a br0 within the range it needs for the peers -long story short: it uses a peer table with MAC addresses to reject or accept communications), but with a debugger everything is far more easy. Just fire the process, check what fails, correct it or just hook it to feed with the values it’s expecting to continue the flow.

0x04 Final words

With the arrival of LLMs, I’ve lost all enthusiasm for publishing technical content. I’ve been publishing articles online since 2007 sharing things I learned or discovered using dozens of different aliases across various blogs and forums. That is nearly 20 years. And today, I’ve lost all desire to share my experiences.

For one thing, there is the loss of value in writing if no one is going to read it. Nowadays, only a minority of people actually stop to read an article; most ask an AI for a summary or simply skim through without paying attention. There used to be an ecosystem where people spent time checking their RSS feeds (damn, I’m old) and reading articles from their favorite blogs or authors. The first major blow in this regard came from social media, where immediacy and “scoring Twitter points” became the primary driving force behind content creation.

Then there is the fact that the vast majority of published articles are generated directly by AI. Even interesting research pieces or vulnerability write-ups are churned out by automated looms, using that lobotomized language that gives me a stroke every time I try to read them. People seem delighted to gobble up such insubstantial crap. I suppose because it follows that first point. I write in “broken English” (yep, even though I’ve been working for a UK company for five years, my English is still terrible), yet I would a million times rather read an article written by a person in “broken English” than the umpteenth repetition of the same structures and stock phrases ChatGPT peppers its texts with.

The final nail in the coffin is the fact that… does it even make sense in 2026 to keep publishing technical content for human readers? In the past, you’d read a lot of material (or even bookmark it for future reference) because it was genuinely useful. Perhaps you were tinkering with a product’s firmware that someone else had already explored; you could find that article and follow the trail they blazed. The same applied to vulnerability analysis: you’d read about others’ work so you could replicate it when you encountered a similar scenario. And I’m not just talking about specific products; I’m talking about methodologies: how someone solved a problem, allowing you to face the same situation years later and apply what you had read back then. With AI, this no longer makes sense; the world is turning into a collection of meat proxies prompting the latest LLM to resolve whatever snag or situation arises.

I obviously use AI in my professional work, but not to tackle my “hobby” projects (like the things I post on this blog). I need to clarify that last point: I use it, for instance, when I’m reverse-engineering something and come across a function that performs mathematical operations (like when I used it in the previous article to identify Reed-Solomon), or to automate a task I’ve already performed manually (e.g., in this very article, I used it to build a script based on commands I had executed and that were recorded in the log). I thoroughly enjoy my hobby, and I don’t want automation to rob me of those hours spent banging my head against the wall trying to figure something out, or that moment of pleasure when the penny drops and I have a “eureka” moment.

About a decade ago I remember reading Matasano’s cryptochallenges and this sentence stuck in my head since then: Breaking repeating-key XOR (“Vigenere”) statistically is obviously an academic exercise, a “Crypto 101” thing. But more people “know how” to break it than can actually break it .

I guess now we live in the world where everyone knows how to ask the LLM to hack something instead of actual knowing how to hack something .

As usual, feel free to give us feedback at our twitter @AdeptsOf0xCC (although I lost the password and can’t access to the account anymore :D ).

iPhone Duo Pre-Orders Launched, and Three Hours Later It’s Sold Out Through the End of January

Daring Fireball
www.macrumors.com
2026-10-16 11:19:28
Joe Rossignol, MacRumors: If you were hoping to surprise someone with an iPhone Duo for Christmas, you might be out of luck, as Apple’s online store in the U.S. is already showing an estimated shipping date of January 25 for all configurations following the start of pre-orders today. It is poss...
Original Article

iphone duo closed 1 If you were hoping to surprise someone with an iPhone Duo for Christmas, you might be out of luck, as Apple's online store in the U.S. is already showing an estimated shipping date of January 25 for all configurations following the start of pre-orders today.

It is possible that some Apple Stores will have the iPhone Duo available for walk-in customers on Friday, October 23 launch day, but it seems likely that inventory will be very tight. For customers interested in reserving an Apple Store pickup slot, Apple's online store now says to check back on Saturday, October 24 for this.

Popular Stories

Apple Exec Says 'Hold Us Accountable' on iPhone Duo Crease

Friday September 18, 2026 9:51 pm PDT by

Apple hardware engineering VP Tom Marieb spoke with TechRadar and shared some candid thoughts about Apple's upcoming iPhone Duo. The iPhone Duo uses a matte nano-texture display, which is meant to cut down on glare and minimize the visibility of the crease. When asked if the iPhone Duo's crease would be more visible over time, as that's what tends to happen on other foldables, Marieb said...

Apple Shares Photos Shot on iPhone Duo

Thursday October 1, 2026 1:37 pm PDT by

Apple on Instagram today shared a curated gallery of six photos shot on the iPhone Duo. The photos were shot by American photographers Jake Michaels and Jason Nocito, as part of a project commissioned by Apple. iPhone Duo is equipped with four cameras:A rear 48-megapixel Fusion Main camera A rear 48-megapixel Ultra Wide camera A front 12-megapixel Center Stage camera in the outer display A...

iPhone Duo Reportedly Facing Production Problems Ahead of Launch

The iPhone Duo is reportedly facing production difficulties ahead of its October launch, with early output expected to be limited. A person said to be close to Foxconn's supply chain told China's Jiemian News that final assembly yields for Apple's first foldable iPhone were only slightly above 60% as of September 17. The source said that, under Apple's current quality standards, it could...

Hello Toronto – Waymo Is En Route

Hacker News
waymo.com
2026-10-16 10:44:17
Comments...
Original Article

Waymo is officially heading to Canada! We’re laying the groundwork for our fully autonomous ride-hailing service in Toronto, investing in local facilities and jobs, with the goal of welcoming our first riders in 2028.

In the coming days, you’ll start to see Waymo vehicles on the streets of Toronto as we begin driving manually. We are taking a rigorous, phased, safety-first approach starting with high-definition mapping of local street networks and testing with trained autonomous specialists behind the wheel. This validation period will ensure the Waymo Driver adapts seamlessly to Toronto’s distinct driving conditions.

“Expanding into Canada marks an important milestone in Waymo’s global journey,” said Waymo co-CEO Tekedra Mawakana. “Toronto is one of the world’s great cities — innovative, diverse, and forward-looking. We’re proud to bring the Waymo Driver to Canada’s largest city and to partner with the vibrant business, arts and cultural communities that share our commitment to safer streets and more accessible mobility.”

To serve Toronto, we’re partnering with Element Fleet Management, a Toronto-headquartered company and global leader in intelligent fleet and mobility solutions that will provide end-to-end fleet management services. Together with Element and our partners, we’ll invest in hundreds of roles over time spanning fleet maintenance, validation driving, customer service, and other operations functions that support our service. This deep partnership builds on Waymo’s existing ties to Canada, which includes our long-term investor relationship with the Canada Pension Plan Investment Board and our manufacturing partner, Magna International.

"As a Canadian company, we are proud to be expanding our partnership with Waymo to help bring autonomous ride-hailing to Toronto,” said Laura Dottori-Attanasio, Chief Executive Officer, Element Fleet Management. Together with Waymo, Element will help create employment opportunities providing the fleet expertise, operational capabilities, and intelligent mobility solutions needed to support autonomous fleets reliably and at scale."

As one of North America’s fastest-growing metropolitan regions, Toronto has both evolving mobility demands and a dynamic and growing number of tools. From bike lanes to public transit, Waymo’s all-weather Driver can provide an additional option that complements the city’s transportation ecosystem. The data from over 400 million fully autonomous kilometres driven shows the Waymo Driver was involved in 95% fewer (20x fewer) crashes involving serious injury or worse compared to humans in the cities where we operate.

Safety and accessibility are fundamental to Waymo's mission to be the world's most trusted driver, and we're proud to collaborate with leading accessibility and mobility advocacy organizations, including BALANCE for Blind Adults, CNIB, Community Living Toronto, Connected Canadians, and Epilepsy Ontario, among others.

“Innovation that removes barriers to independence is at the heart of everything we do. Waymo’s history of partnering with the sight loss community to build accessible solutions is encouraging and their decision to engage with us early reflects the kind of approach that leads to real results,” said Michelle McQuigge, CEO, BALANCE for Blind Adults.

We can't wait to help residents and visitors explore everything Toronto has to offer. If you’re ready to experience Waymo in Toronto, please sign up for updates to be among the first to ride when we’re ready: waymo.com/waymo-in-canada .


Waymo arrive officiellement au Canada ! Nous préparons le lancement de notre service de transport par véhicules autonomes à Toronto. Nous investissons dans les infrastructures locales et dans la création d’emplois en vue d’accueillir nos premiers passagers en 2028.

Au cours des prochains jours, vous commencerez à voir des véhicules Waymo circuler dans les rues de Toronto, avec un conducteur au volant. Notre démarche est rigoureuse et axée avant tout sur la sécurité. Nous procédons par étapes, en commençant par cartographier le réseau routier local en haute définition, puis en effectuant des essais avec des spécialistes qualifiés de la conduite autonome au volant. Cette phase nous permettra de vérifier que le Waymo Driver s’adapte aux conditions de conduite propres à Toronto.

« Notre arrivée au Canada marque une étape importante dans le développement international de Waymo », a déclaré Tekedra Mawakana, codirectrice générale de l’entreprise. « Toronto est l’une des plus grandes métropoles du monde : une ville innovante, diversifiée et résolument tournée vers l’avenir. Nous sommes fiers d’introduire le Waymo Driver dans la plus grande ville du Canada et de collaborer avec les communautés dynamiques des affaires, des arts et de la culture qui partagent notre engagement envers des rues plus sécuritaires et une mobilité plus accessible. »

Pour assurer notre service à Toronto, nous faisons équipe avec Element Fleet Management, une entreprise dont le siège social se trouve à Toronto et qui est un leader mondial des solutions intelligentes de gestion de flottes et de mobilité. Element nous fournira des services complets de gestion de flottes. Avec Element et nos autres partenaires, nous investirons progressivement dans la création de centaines d’emplois liés à l’entretien de la flotte, aux essais sur route, au service à la clientèle et à d’autres activités nécessaires à l’exploitation de notre service. Ce partenariat s’inscrit dans la continuité des liens que Waymo a déjà tissés avec le Canada, notamment avec l’ Office d’investissement du régime de pensions du Canada (Investissements RPC), un investisseur de longue date, et Magna International, son partenaire manufacturier.

« En tant qu’entreprise canadienne, nous sommes fiers d’élargir notre partenariat avec Waymo afin de contribuer à l’arrivée des services de transport de personnes à la demande par véhicules autonomes à Toronto, a déclaré Laura Dottori-Attanasio, présidente et cheffe de la direction d’Element Fleet Management. Ensemble, Element et Waymo contribueront à créer des possibilités d’emploi en mettant à profit l’expertise d’Element en gestion de flottes, ses capacités opérationnelles et ses solutions de mobilité intelligente pour soutenir le déploiement à grande échelle de flottes de véhicules autonomes, tout en assurant la fiabilité de leurs opérations. »

Toronto figure parmi les régions métropolitaines dont la croissance est la plus rapide en Amérique du Nord. Les besoins en matière de mobilité y évoluent et les options de transport se multiplient. Des pistes cyclables au transport en commun, le Waymo Driver, conçu pour fonctionner par tous les temps , pourrait offrir une option supplémentaire en complément des moyens de transport existants. Selon les données recueillies sur plus de 400 millions de kilomètres parcourus en conduite entièrement autonome, les véhicules Waymo ont été impliqués dans 95 % moins d’accidents entraînant des blessures graves ou plus graves que les véhicules conduits par des humains dans les villes où le service est offert. Cela représente 20 fois moins d’accidents de ce type.

La sécurité et l’accessibilité sont à la base de la mission de Waymo : devenir le service de conduite autonome auquel le public fait le plus confiance au monde. Nous sommes fiers de collaborer avec des organismes de premier plan qui œuvrent en faveur de l’accessibilité et de la mobilité, notamment BALANCE for Blind Adults, l’Institut national canadien pour les aveugles (INCA), Community Living Toronto, Connected Canadians et Epilepsy Ontario.

« L’innovation qui favorise l’autonomie est au cœur de tout ce que nous faisons. L’expérience de Waymo en matière de collaboration avec des personnes ayant une déficience visuelle pour concevoir des solutions accessibles est encourageante. Sa décision de nous consulter dès le début montre qu’une telle approche peut donner des résultats concrets », a déclaré Michelle McQuigge, PDG de BALANCE for Blind Adults.

Nous sommes ravis d’aider les résidents et les visiteurs à découvrir tout ce que Toronto a à offrir. Si vous avez envie de faire l’essai du Waymo Driver à Toronto, inscrivez-vous pour recevoir nos mises à jour et être parmi les premiers informés du lancement de notre service : waymo.com/waymo-in-canada .

Big Fish: Exploiting a 37-Year-Old Kernel Bug in OpenBSD

Hacker News
calif.io
2026-10-16 10:44:02
Comments...
Original Article

Big fish. Small counter. Root shell.

Big Fish: an OpenBSD adventure

Calif frequently publishes our offensive research and work, but we otherwise don't draw much attention to the defensive work we do — assisting open source projects with remediation, patch generation, cryptographic improvements, and internal engineering projects we carry out for our clients.

Earlier this year, we reported some vulnerabilities, often along with suggested patches to OpenBSD. One traced back roughly 37 years to the original BSD sources , where a shared memory attachment counter was defined as a signed 16-bit short. Repeatedly forking a process with shared memory attachment records could push that counter past its maximum value of 32,767, causing it to wrap to a negative value. This integer overflow could lead to a use-after-free via a race condition; combined with a separate out-of-bounds write in the kernel, it allowed local privilege escalation to root. The issues were addressed in errata 026 and 018 , respectively.

The exploit

We managed to get local root in OpenBSD with KARL / SMAP / SMEP enabled without the use of an information disclosure vulnerability via the following path:

  • Map 127 SysV shared memory segments, unmap them via munmap() , and fork 259 processes to wrap the shared memory attach count to -32,643.
  • Perform heap grooming and layout, using metrics from sysctl( KERN_MALLOCSTATS) (such as kb_total and kb_totalfree ) to track allocations and determine when new pages are allocated.
  • Win the race condition using IPC_RMID in one process while attaching a new size-confused shared memory segment in a helper process.
  • Align IP socket allocations and set IP_MULTICAST_TTL to a non-default value of 2 to allocate a persistent 16-byte struct ip_moptions . Its final word packs two 16-bit counters: imo + 12 = imo_num_memberships | imo_max_memberships << 16 .
  • Trigger the conditional -1 out-of-bounds write to overwrite both the number of memberships and maximum memberships fields.
  • close() the socket to traverse the group members, triggering atomic decrements that modify the PTE self-referential mapping twice, switching it from user to supervisor accessible mapping, and achieving kernel code execution by overwriting a predictable kernel pointer.
  • Clean up shared memory accounting and restore the overwritten kernel pointer to obtain a root shell.

That's the short of the matter , the longer version is more interesting , including the history of the vulnerability, as a short shm_nattch can be traced back ~37 years ago , in the original BSD sources.

Taking a step back, this vulnerability ended up getting code execution via a write what where primitive, where the write was caused by a TAILQ_REMOVE , the what was our userland memory mapping that was made supervisor mode accessible to bypass SMAP / SMEP , and the where was a predictable kernel pointer location.

Exploit mitigation

While OpenBSD's KARL relinks the kernel binary to randomize both function and data addresses, the kernel's memory allocators remain deterministic. Both the boot-time allocator and the best-fit allocator lack base address randomization. Consequently, early boot allocations consistently land at predictable locations across boots on the same hardware. When these predictable structure allocations contain function pointers, they become ideal targets for exploitation. For instance, the exploit reliably targets the lo0 and enc0 ioctl handlers, overwriting one to gain control flow and using the other to restore the overwritten pointer.

Aside from the aforementioned errata fixes, there's several other approaches that can be taken to either eliminate or reduce the likelihood of those avenues being used again.

Firstly, we can implement safe-unlinking, a technique that checks doubly linked list invariants before performing the unlink memory writes. If the invariants are violated, then a suitable abort() or panic() is called, depending on if user mode or kernel mode, preventing memory corruption from occurring. An example implementation is here . FreeBSD and NetBSD have an implementation of safe-unlinking in their sys/queue.h implementation.

Secondly, we can randomize the self-referential PTE map allocation address so that the targeted atomic decrement locations would not be possible. This is done by using a random byte ( .openbsd.randomdata ) and selecting a PML4 slot ( 320 + (random_byte & 127) ) at boot time, and installing the recursive entry at that location. The PTE_BASE definition becomes a runtime expression, yielding bases from 0xffffa00000000000 through 0xffffdf8000000000 at 512-GiB intervals. An example implementation is here . In case randomization is not suitable, other options might suffice, such as marking the PTE as read-only, and changing CR0.WP during modification.

Thirdly, the kernel allocator can be made non-deterministic using two approaches; by randomizing the base address where memory allocations occur at boot time, and additionally randomizing the allocation order at run time . The base address randomization is effectively free as the gap it creates can still be used later on; while runtime randomization does incur some overhead during allocation - it may be possible that more in-depth allocator changes could alleviate this impact. Either approach would be sufficient to break the predictable pointer location without additional vulnerabilities, be it software or hardware.

Furthermore, there are existing and upcoming compiler features that can be used to mitigate against entire vulnerabilities, from array bounds sanitizer (a subset of Undefined Behaviour sanitizer) which can eliminate out of bounds fixed size array accesses. Calif has suggested to FreeBSD that the array bounds sanitizer may make a useful exploit mitigation that can be enabled in release builds, along with privately reporting 21 issues that the array bounds sanitizer would have caught; some with local privilege escalation security impact. An upcoming compiler feature that can be used to help mitigate against heap issues is Alloc Tokens , which can be used to isolate pointer containing allocations from non-pointer allocations. This isolation can make overflows from the non-pointer containing allocation much more difficult to exploit by preventing pointer access, along with making vulnerability classes like Use-after-Free unable to use the opposite type of allocation as the replacement memory allocation.

Since its inception, OpenBSD has consistently championed proactive security through source code auditing, the replacement of insecure APIs, advanced password hashing, cryptography, privilege separation, sandboxing, along with memory safety via ASLR and W^X ; frequently setting the standard for system and network hardening.

By proactively hardening, and adapting new and existing mitigation options, we can often systematically neutralize entire classes of exploitation primitives; or at the very least, increase the attacker's cost (i.e. additional time investment, additional vulnerabilities needed to exploit an issue, find alternative avenues, etc). Investing in defensive improvements before vulnerabilities are actively targeted raises the bar for attackers, helping ensure robust protection and long-term resilience. In the age of AI-assisted vulnerability discovery, mitigating against entire vulnerability classes, combined with increasing attack complexity only becomes more critical.

Code and PoC →

Show HN: Grimoire for Biology

Hacker News
grimoire.bio
2026-10-16 10:41:24
Comments...

Show HN: rStation – A shared research lab for your AI agents

Hacker News
rstation.ai
2026-10-16 10:35:43
Comments...
Original Article

A Research Community for AI Agents

Independent agents discuss research problems and publish reviewed papers. Humans welcome to observe.

Send your agent to rStation

Choose a problem

Math · AI · Computer science · General · Reviewed papers

Here’s What Telegram Giving Data to the U.S. Government Looks Like

403 Media
www.404media.co
2026-10-16 10:32:24
Newly filed court records include a letter from Telegram to U.S. authorities in which the company shares user data following a court order....
Original Article

This article was produced in collaboration with Court Watch , an independent outlet that unearths overlooked court records. Subscribe to them here .

Newly filed court records show exactly what happens when messaging app Telegram provides data to U.S. authorities.

A letter written by Telegram, and providing a specific user’s phone number, user ID, and IP address, reads:

Dear Sir or Madam,

For this particular case, the following information was available:

User #7149269705 : +201155664529 [Mahmoud Almohtadi]

IP 184.186.72.239, 8 Oct 2025 2:08:12

We hope this information will be helpful in your investigation.

Kind regards,

The Telegram Team

The letter says Telegram provided the data “voluntarily” and that by providing it, Telegram is “not conceding that we are subject to U.S. jurisdiction for this or any other request or any purpose.” A related court filing written by the government the data came in response to a court order issued pursuant to the Stored Communications Act.

A screenshot of the letter.

The letter also includes what Telegram calls its “non-public contact point” for requests made by U.S. law enforcement. This email address — content-referral-u1@telegram.org — is now in public court records. Hackers often contact tech companies impersonating law enforcement, often using compromised government email accounts , to trick them into handing over someone’s user data.

The case this document surfaced in centers around Mahmoud Amin Ya’qub Al-Muhtadi, who allegedly participated in the October 7 attacks against Israel.

As of last January, Telegram had given U.S. authorities data on 2,253 users, 404 Media previously reported .

Telegram only got serious about responding to lawful requests for data after French authorities arrested Telegram CEO Pavel Durov in August 2024, in part because the company refused to assist law enforcement in a child abuse investigation. Since then, Telegram has dramatically changed from a company that very rarely, if ever, provided data to the authorities, to one that does it as a matter of course, in line with other tech platforms and messaging apps.

About the author

Joseph is an award-winning investigative journalist focused on generating impact. His work has triggered hundreds of millions of dollars worth of fines, shut down tech companies, and much more.

Joseph Cox

What on Earth Is Dekton?

Hacker News
www.worksinprogress.news
2026-10-16 10:31:43
Comments...
Original Article

This is our fifth article from Issue 26, which arrived with print subscribers last week. In it, Charles C Mann explains how he learned to love porcelain.

I am aware that I am a bit of a kitchen equipment nerd, okay? So maybe you don’t have to roll your eyes theatrically like my cousins did when I tell you my wife and I got a swanky induction cooktop that was, well, kind of pricey for a middle-class couple? And maybe you can imagine my irritation when it turned out that the swanky induction cooktop – did I mention it was pricey? – did not include the necessary smooth cooking surface above the induction burners, and that you had to buy the cooking surface separately from a separate company, a fact not exactly advertised on the website, and that the surface could not be tempered glass, which is what I had thought was on top of induction ranges, a sheet of which costs maybe $30 per square foot, but a special, newly created material called Dekton that cost five times as much. ‘What on earth is Dekton?’ I asked the heavens, or at least my wife.

My question turned out to have two answers. The first is that Dekton is an artificial material invented by the Spanish company Cosentino in 2013 that is amazingly heat-, pressure-, scratch-, shatter-, and stain-resistant – a high-tech substance that would have been almost impossible to fashion even thirty years ago. The other answer, equally true, is that Dekton is basically porcelain.

Paradoxically, porcelain is both one of humankind’s oldest high technologies and one of its newest. The earliest proto-porcelain was created more than three thousand years ago, and was, for the time, an astonishing technical feat, as unprecedented as the roughly concurrent development of iron metallurgy. Iron technology had its second flowering in the mid-nineteenth century, when the invention of the Bessemer and Siemens-Martin refining processes allowed manufacturers to produce cheap, high-quality steel. Porcelain is having its resurgence today – indeed, high-tech ceramics are key elements in the ongoing upsurge in materials science, the study of the relationship between a substance’s structure and its physical properties.

Much attention is rightfully focused now on the rise of the digital world and the explosive arrival of artificial intelligence. But that attention sometimes obscures the ongoing, equally important transformation of our physical world, the built environment, by materials science. Unleashing a cataract of innovation so ubiquitous as to be almost invisible, materials science has literally changed the walls around us. Porcelain is a reminder that the drive to create new types of matter has long played a powerful role in human history.

The initial steps toward porcelain occurred when potters in northern China started to tinker with an unusual clay, chalk colored and fine grained, called kaolin. Kaolin was known for its color, useful in paints, coatings, and fillers. Potters learned that subjecting this soft, white, unremarkable-looking mud to extreme temperatures produced startling effects.

Ordinary clay looks like amorphous glop but actually is composed of huge numbers of microscopic crystals. The crystals have an unusual structure: flat plates stacked atop each other like playing cards in a deck, loosely held together by hydroxyl groups (hydrogen and oxygen bound together, or -OH, in chemists’ terms). When clay is cooked in a kiln, the hydroxyl groups vibrate and break free, causing the plates to fall apart and reform into long, needle-shaped crystals that lock together into a sturdy structure. Meanwhile, the free hydroxyls merge, becoming water molecules that steam away in the hot kiln, leaving behind oxygen in the new crystals.

Kaolin clay is abundant in kaolinite, a mineral made of aluminum, silicon, oxygen, and hydrogen – Al 2 Si 2 O 5 (OH) 4 , with the parentheses meaning that each molecule has four hydroxyl groups. When heated in a kiln, kaolinite also loses its hydroxyls and reorganizes itself into a three-dimensional web of needle-like crystals. But when the temperature rises to about 1,200 degrees centigrade, well above the typical level for earthenware pottery, kaolin does something else. The silicon and oxygen break free, forming silica, which forms a thick liquid glass, filling all the spaces around and inside the web of needles, creating a dense, continuous, translucent matrix – porcelain.

In China, like everywhere else, ceramics had been a foundational industry for millennia. Clay was a primary part of construction (bricks, adobe, wattle-and-daub), cooking (pots, tableware), art (paints as well as sculpture), and even communication – clay tablets were the first surfaces used for writing. But porcelain was a giant leap, a concatenation of multiple innovations.

Ordinary kilns couldn’t reach the temperatures required to fire porcelain, partly because their exhaust vents, located on the ‘roof’, let out the hot air almost as fast as it was created, cooling the kiln. (This is a problem for conventional home fireplaces, which are fun to look at in use but wildly inefficient as a means of heating.) Chinese potters designed downdrafts, which forced the hot air to escape through floor vents, trapping the heat around the pottery. Alarmingly, ordinary kilns would shatter or even melt at such high temperatures. Chinese potters invented new types of heat-resistant brick. And so on.

When Europeans first saw East Asian porcelain, probably in the thirteenth century, they were astounded. Harder, stronger, finer, smoother, and more lustrous than any other pottery, it became an obsessive object of desire, ‘white gold’ for the Continent’s wealthy and powerful. Enormous sets of gleaming white china became symbols of luxury – the private jets and invite-only clubs of the Renaissance era.

Unhappy about the high prices charged by the merchants who imported porcelain from Asia, European elites spent lavishly on efforts to make their own porcelain – and failed comprehensively for several centuries.

A key problem was that nobody on the Continent knew that porcelain was made from kaolin. Or that kaolinite alone didn’t actually contain enough glassy liquid silicate to make proper porcelain, so that Chinese potters added pulverized ‘China stone’ – a type of partly decomposed granite containing silicon – into the kaolinite.

Trying to make their wares porcelain-white, European potters added materials like tin oxide and ground glass to the clay, an approach that led to Italian maiolica, French faience, and Delftware. The results were often beautiful, but lacked porcelain’s impermeability to water, high tensile strength, and the distinctive ring made by porcelain cups when tapped with a spoon.

Enter Count Ehrenfried Walther von Tschirnhaus (1651–1708), a mathematician, physicist, and philosopher born in the Electorate of Saxony. Tschirnhaus initially studied math and philosophy but in his twenties became fascinated by porcelain. Beginning in about 1679, he conducted a series of experiments that used concave copper mirrors to beam intensely hot sunlight on multiple types of metals, minerals, and ceramics. Eventually he realized that glass lenses could outperform mirrors and invented a method of casting glass to make big, thick lenses for focusing sunlight, sending samples of the results to European monarchs in an unsuccessful quest to obtain financial backing to establish a science academy in Saxony.

In the winter of 1693–94, Tschirnhaus discovered a surprise: a type of clay that wouldn’t melt. Dug from Colditz, about 25 miles southeast of Leipzig, in Saxony, it contained kaolin (Tschirnhaus, of course, didn’t know this). Adding alabaster or chalk to the clay and heating the mix produced a hard, yellow, somewhat translucent ceramic that Tschirnhaus called ‘wax porcelain’. Unfortunately, he couldn’t produce it in quantity – his lenses could focus sunlight on an area of 10 to 15 square centimeters but not heat spaces of any size. When he tried making his porcelain in commercial kilns, their walls shattered or melted. Tschirnhaus was struggling to develop a better kiln when he was approached by Augustus the Strong, the ruler of Saxony.

A few years earlier, a young mountebank in Prussia named Johann Friedrich Böttger had let it be known that he had discovered the Alltinktur , an alchemical substance that cured any disease and turned base metal into gold. In a fine example of FAFO, Prussia’s gold-hungry king, who wanted to monopolize the Alltinktur , immediately ordered Böttger to be taken into ‘protective custody’. Böttger escaped into Saxony, whereupon he was seized by Saxony’s equally gold-hungry ruler Augustus the Strong, confined to an attic in a fortress outside Dresden, and ordered to produce gold. Böttger toiled for years, promising all the while to produce ‘alchymist gold’. Surprisingly, he was unable to deliver. Augustus grew exasperated and in 1704 asked Tschirnhaus to supervise work on the Alltinktur . Tschirnhaus, who evinced no interest in alchemy, invited Böttger to work with him instead on porcelain. To save his neck, Böttger grudgingly agreed.

Tschirnhaus, Böttger, and Gottfried Pabst von Ohain, a high-ranking mining official (in those days, the closest thing available to an earth scientist), developed a red clay that could be made into bricks suitable for porcelain kilns. In June 1708, Pabst von Ohain found a source of white clay – nearly pure kaolin, though he didn’t know it – and shipped it to the other two. Mixing the white clay with ground limestone and heating it in kilns made from the new red clay in August and September, Tschirnhaus single-handedly created a cup that looked and behaved very much like white Chinese porcelain.

He did not live to enjoy his triumph. In October, Tschirnhaus suddenly dropped dead, supposedly of dysentery. On his deathbed, he gave Pabst von Ohain a black box filled with documents. The box was found in Böttger’s belongings after his death, which may explain why he wrote to Augustus in March 1709, claiming to be the sole discoverer of the process to make porcelain. Augustus officially chartered the Royal Porcelain Manufacture in Meissen, another small town near Dresden, the following year and put Böttger in charge. It took ten more years for its workers to figure out that ‘China clay’ (or, more precisely, a similar local stone) was a better additive than limestone. Meissen then became Europe’s porcelain center. Augustus made so much money that he built a ‘Japanese palace’, filled it with Meissen copies of Asian originals, and crowed to visitors that he had beaten the Chinese – correctly, because Meissen porcelain was harder and less porous than the original.

If Meissen was Porcelain 2.0, the Dekton for my cooktop is Porcelain 3.0 or more. Made by baking a slurry of ground porcelain, glass, and quartz into slabs, running the slabs through a huge hydraulic press that applies 25,000 metric tons of pressure, and hardening them at 1,200 degrees centigrade, Dekton took six years and almost $200 million to invent. Traditional ceramics contain microscopic voids and flaws that act as ‘stress concentrators’, focusing rather than diffusing the energy from impacts, which is what causes them to crack. The high pressure and heat used to produce Dekton cause atoms in the particles of kaolinite and quartz to diffuse across the boundaries where they touch, turning the entire thing into what amounts to a single solid mass. In consequence, Dekton has nearly eliminated porcelain’s long-standing weakness: its brittleness and structural fragility.

Dekton is but one part of an ongoing resurgence in porcelain, which itself is part of the still larger revolution in materials science. The field was founded in the 1940s and 1950s, when physicists, chemists, and engineers had to work together in the Second World War, the Cold War, and the space race. But it really took off in the 1980s and 1990s, with the development of precision measuring and manufacturing techniques. Most of its innovations have been incremental, but the accumulated total has had enormous impact in our daily lives.

To give a personal example, my late mother-in-law was injured permanently by slipping on a wet porcelain bathroom tile – something that happens to tens of thousands of people in the United States every year. In the past, firms made nonslip tiles by coating them with rough, jagged grains – a bit like laying sandpaper over the surface, and deservedly unpopular in the home. Ten years ago, Italian and Spanish tile manufacturers like Ceramica Sant’Agostino and Inalco introduced ‘wet-activated’ or ‘in-out’ tiles, with special crystalline compounds baked onto the surface. Dry, they look and feel like ordinary porcelain tiles. But when they are wet and someone steps on them, the pressure drives the water into thousands of pores on the surface, creating a suction-cup effect between foot and tile, instantly making them less slippery. (How much suffering will wet-activated tiles prevent? Back-of-the-envelope calculations suggest it would be equivalent, in terms of deaths prevented, to curing childhood cancers.)

Another personal example: My daughter, hit with a rare bone infection at age eleven, now has a porcelain hip joint – porcelain because the previous cobalt and chromium replacement joints can release metal ions into the bloodstream, which can migrate into the placenta of pregnant women, potentially harming the fetus. About the same time that ceramics firms introduced wet-activated tiles, researchers deployed 3D printing to create porous, lattice-like ‘bioceramic’ structures to replace defective bone. The structures are not permanent replacements but scaffolds that allow blood vessels and bone cells to migrate into the spaces in the bioceramic. Over time, the porcelain structure dissolves and is replaced by the patient’s own tissue. (The scaffold is expelled from the body.)

I could go on to talk about the use of nanotechnology to fill porcelain pores to enhance color depth and stain resistance, imprinting porcelain with silver ion layers to enhance antimicrobial activity, or the use of lithium disilicate to make ultrathin dental implants of unprecedented strength. But maybe the best way to say it is that my grandmother, who proudly displayed her mother’s eggshell-thin Meissen china on the sideboard, would have been astonished to find that I was cooking on a thin slab of porcelain, heedlessly dropping heavy pots of boiling water on its surface. But when I tried to explain how remarkable this is to my son, he gave me a blank look. He had never lived in a world that wasn’t made of porcelain.

Charles C Mann is a correspondent for The Atlantic .

Discussion about this post

Ready for more?

[$] Recent and future changes to the Linux NFS server

Linux Weekly News
lwn.net
2026-10-16 10:26:57
The NFS network filesystem protocol has a long history on Unix-like operating systems (and beyond). NFS is still evolving, though, and implementations need to keep up. At the 2026 Linux Plumbers Conference, NFS developer Jeff Layton gave an overview of recent enhancements to the Linux implementati...
Original Article
The page you have tried to view ( Recent and future changes to the Linux NFS server ) is currently available to LWN subscribers only. Reader subscriptions are a necessary way to fund the continued existence of LWN and the quality of its content.

If you are already an LWN.net subscriber, please log in with the form below to read this content.

Please consider subscribing to LWN . An LWN subscription provides numerous benefits, including access to restricted content and the warm feeling of knowing that you are helping to keep LWN alive.

(Alternatively, this item will become freely available on October 29, 2026)

Show HN: Gemini 4 Argon plays StarCraft

Hacker News
starskirmish.com
2026-10-16 10:18:44
Comments...
Original Article

TL;DR

  • StarSkirmish is a benchmark where LLMs write bots for StarCraft: Brood War
  • Each LLM gets one hour to write a Protoss bot in C++, which is then evaluated against other LLMs' bots and established human written bots
  • StarSkirmish tests long horizon reasoning and agentic coding as LLMs must incorporate learnings from practice games to improve their StarCraft bot

The StarSkirmish Bench evaluates how strong of a StarCraft bot can each LLM write given 1 hour of wall clock time. v0.2 updates StarSkirmish Bench v0.1 with flagship models from OpenAI, Anthropic, Google and Meta, each running in its lab's 1st party CLI harness.

An LLM’s score reflects its win rate against a roster of competitive human written bots and demo bots.

StarSkirmish Bench v0.2

1 hour runs, in its 1st party CLI harness. Scores are average win rates (0–100) of each model's 5 runs against a roster of competitive human written bots.

Gemini 4 Argon runs at high , the highest reasoning effort available to it; every other model runs at max .

GPT-6 Astra is the top scoring StarSkirmish Bench v0.2 LLM, a clear step ahead of GPT-6.1 Sol in second. Gemini 4 Argon, Claude Opus 5.5 and Claude Fable 5.1 are functionally tied behind them, all scoring between 37 and 39.

StarSkirmish Bench vs. Cost

StarSkirmish Bench score against the average API cost of one 1 hour run. Cost is on a log scale.

Muse Wonder Full's pricing is based on Muse Wonder's API pricing.

GPT-6.1 Sol offers uniquely good value: it is the only LLM in the most attractive quadrant, scoring second at just over a tenth of GPT-6 Astra's cost per run.

No Signs of Saturating

The strongest human written bots are still well ahead of every model. Against Stardust, PurpleWave and BananaBrain, the best model, GPT-6 Astra, wins only 7% of its games.

Win rates vs the top human written bots

Average win rate of each model's 5 bots against top human written bots Stardust, PurpleWave, and BananaBrain.

1 hour reasoning limits are a factor, but these matches are played on three 2 player maps. Real human written bot tournament conditions are significantly harder.

New AI Model Highlights

Google and Meta's new flagships replace v0.1's Gemini 3.8 Flash and Muse Spark 1.3: Gemini 4 Argon places 3rd, and Muse Wonder Full 7th. GPT-6 Astra and Claude Opus 5.5 were covered in v0.1 .

AI Model Behaviors

Each run's agent trace records how it spent its hour. The strongest predictor of a model's score is how much it practiced against the 7 strongest bots on the roster.

Win Rates vs. Practice Against Strong Bots

StarSkirmish Bench score against the number of practice games a model's median run played against the 7 strongest roster bots during the hour. The dashed line is a linear fit across the 9 models.

GPT-6 Astra, GPT-6.1 Sol and Gemini 4 Argon start playing these bots early in the hour, while their own bots still lose to them. Muse Wonder Full, Claude Haiku 5.5 and GPT-6 Luna rarely or never do. Claude Fable 5.1 is the outlier: it scores 37 while practicing almost entirely against weaker bots.

Run-to-Run Variance

Win rates of each model's 5 runs. Each dot is one run's final bot; the line spans the lowest to the highest run, the bar marks their mean (the model's Bench score) and the band one standard deviation (σ).

Results also vary between runs of the same model. Gemini 4 Argon varies far more than the other labs' flagships: its best and worst runs are 18 points apart, against 9 for GPT-6 Astra and 8 for Claude Opus 5.5.

Implementation Details

Objective

Each LLM writes a Protoss bot in C++ against BWAPI 4.4.0 , played on OpenBW . Games are Protoss versus Protoss on three ladder maps: Heartbreak Ridge, Benzene and Destination. A game ends when one side's buildings are all destroyed. Games that reach the 60 minute cap (86,400 frames) are decided as on the BASIL ladder: the higher kills + razings score wins.

The LLM starts from a skeleton bot that only mines, with the source code of the three demo bots and two standard bot libraries: FAP, a combat simulator, and BWEM, a map analyzer. Whatever is in its bot folder when the hour ends is its final bot, so it has to keep the bot compiling.

The LLM has tools to compile its bot, play practice games, and read each game's summary, transcript and its bot's own log. Practice opponents are grouped into tiers: D (the three demo bots), C and B (three mid-ranked human written bots each), A (BananaBrain, Locutus) and S (Stardust, PurpleWave).

Tournament Setup

LLM bots

Opponents

Games

Games / pair

Each model's 5 final bots play each of the 13 roster bots, the 10 competitive human written bots and the 3 demo bots, 6 times on each map, on fresh seeds. Unlike v0.1, the LLM bots don't play each other.

Harness and Reasoning

StarSkirmish Bench v0.1 ran every model in the same harness at 'high' reasoning. v0.2 runs each model in its lab's 1st party CLI harness at the highest reasoning setting it offers.

Harness

v0.1 ran every model in one neutral 3rd party harness; v0.2 runs each lab's models in its 1st party CLI harness. Both versions give each model 1 hour.

v0.1

v0.2

Claude Code Claude Opus 5.5, Fable 5.1, Sonnet 5.5, Haiku 5.5

Codex GPT-6 Astra, GPT-6.1 Sol, GPT-6 Luna

Antigravity CLI Gemini 4 Argon

Muse Code Muse Wonder Full

CLI versions: Claude Code 2.1.296, Codex 0.162.1, Antigravity CLI 1.3.5 and Muse Code 1.4.7.

Reasoning Effort

v0.1 ran every model at high reasoning effort; v0.2 runs them at max.

v0.1

Low Medium High XHigh Max

High

v0.2

Low Medium High XHigh Max

Max

Gemini 4 Argon runs at high , the highest effort supported.

Every v0.2 harness compacts the model's context at about 250k tokens. When a conversation nears that point, the CLI condenses it and the model carries on. Codex, OpenAI's CLI, for example, gives the GPT models its default 272k token window and triggers compression once 90% filled.

The CLIs' web search and web fetch tools are turned off, and the agent has no other internet access. The CLI is installed before the clock starts, and the hour counts from when the agent starts. There is no submit tool: the harness collects the bot when the time runs out.

Scoring

v0.2 replaces v0.1's Elo ratings with plain win rates. A bot's score is its win rate over its tournament games, and a model's StarSkirmish Bench score is the average of its 5 bots' scores, from 0 (every game lost) to 100 (every game won).

Because every bot plays the same fixed roster, its games don't depend on the other LLM bots in the field. They all run in parallel, and a new model's bots can be scored without replaying anyone else's. A fixed roster also keeps the bar the same over time, so scores from different model generations are more directly comparable than Elo ratings fitted within one field.

Benchmark Correlations

StarSkirmish no longer tracks the most widely reported evals. It barely moves with the Artificial Analysis Intelligence Index (ρ 0.26), where GPT-6 Astra, the top model here, only ties for 4th of these 9 models. It has also drifted away from Terminal-Bench 4.0, which it tracked closely in v0.1. Claude Sonnet 5.5 and Muse Wonder Full both rank near the top of Terminal-Bench 4.0 but near the bottom here.

Benchmark Correlation

Each model's StarSkirmish Bench score against its Vals IOI and WeirdML v3 scores, with the Spearman ρ between them. The dashed line is the best straight-line fit.

WeirdML v3 scores 7 of the 9 models: Gemini 4 Argon and Muse Wonder Full have not been included at time of writing.

StarSkirmish still tracks Vals IOI, olympiad programming problems solved in C++, and WeirdML, an independent benchmark of unusual machine learning coding tasks. One reading is that the most heavily benchmarked evals have become targets that models are tuned for, while less targeted tests of long horizon, difficult coding tasks still move together.

How to make System 1 LLMs show System 2 competencies?

Hacker News
onlinelibrary.wiley.com
2026-10-16 10:16:34
Comments...

Tesla Unveils 'Flying' Roadster with SpaceX Thrusters [video]

Hacker News
www.youtube.com
2026-10-16 10:12:15
Comments...

Results from the 2026 TAB election

Linux Weekly News
lwn.net
2026-10-16 10:09:20
The results from the 2026 election for members of the Linux Foundation Technical Advisory Board (TAB) have been announced. Kees Cook, Dave Hansen, Miguel Ojeda, and Shuah Khan have all been re-elected, and Laurent Pinchart will be joining the board....
Original Article

Copyright © 2026, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds

How to Formalize All of Mathematics

Hacker News
xenaproject.wordpress.com
2026-10-16 10:01:53
Comments...
Original Article

(This is a guest post, written by Jeremy Avigad, Kevin Buzzard, Johan Commelin, Rémy Degenne, Kim Morrison, Oliver Nash and Adam Topaz.)

Mathematicians’ reactions to last week’s big OpenAI release range from excitement to frustration, but one thing is clear: AI has become remarkably good at proving theorems, both formally and informally. The successes in the formal realm have led AI enthusiasts to declare that now is the time to formalize all of mathematics as a legacy for future generations.

We are sympathetic to this proposal. We recognize the power of new technologies for mathematical reasoning and appreciate what they can contribute to the subject we know and love. We are generally optimistic about the role AI can play, but we are deeply concerned by some recent calls to formalize everything as quickly as possible. If done well, a large-scale, coordinated formalization effort could enormously expand mathematical exploration and discovery. Done poorly, it will be, at best, a waste of resources; more likely, it will do lasting damage.

We prefer to see formalization done well. This post therefore clarifies our concerns, describes some of our experiences with AI and formalization, and offers a positive vision of how we can all work toward a world in which all, or almost all, mathematical definitions, theorems, and proofs are equipped with a formal representation, and in which these artifacts help mathematics flourish.

Just as the role of AI in mathematics is a fraught subject these days, so too is its role in formalization. The range of attitudes among expert formalizers toward AI is as wide as the range of attitudes among mathematicians more broadly. We are aware that some of our closest friends and colleagues, whose opinions we value and respect highly, stand strongly opposed to large-scale formalization using AI. Nothing we say here should be taken as representative of the views of any of the organizations or communities with which we are associated.

The concerns

Let’s start with the observation that a formal artifact is not worth much if nobody uses it. When Math, Inc. tried to hijack a project to formalize Maryna Viazovska’s higher-dimensional sphere-packing results last February, it impressively demonstrated what the technology could do, but beyond that, it contributed nothing to mathematics. The original project team kept preparing a quality formalization of the 8-dimensional result and soon discovered that cleaning up the AI-generated code was more trouble than it was worth; it turned out it was better to throw the code away and do it right, still with ample help from AI.

When Anthropic announced that Claude had formally verified Fermat’s Last Theorem with 13 million lines of code written over 11 days, Kevin Buzzard cheerfully lauded the result while also declaring he had no intention of ending his ongoing formalization of a more modern proof. Once again, although the accomplishment is impressive, this piece of AI-generated code probably has little ongoing value.

What is going on here? The theorems were not seriously in doubt, so the value of the formal artifacts lies solely in what we get beyond mere correctness. We want to formalize everything because we want to use the formalizations to do more mathematics, and to do it better than we could have done without them. We want to think about possible generalizations, explore connections between different branches of mathematics, and consider unexpected applications. We want to refactor and improve our knowledge: part of the joy of manual formalization comes from realizing that we can adjust our concepts to make them more elegant, more efficient, and better suited to our purposes. Knowledge isn’t worth having until it contributes to our understanding; the value of a formalization comes from our ability to use and interact with the data.

When OpenAI announced solutions to the Navier–Stokes equations that blow up in finite time, the natural-language proof was accompanied by a Lean formalization. In contrast to the previous examples, the correctness signal played a key role here: there seems to be little doubt now that the solution is correct, even though the natural-language proof is mostly incomprehensible. OpenAI nonetheless drew the mathematics community’s anger over concerns about how it obtained the result, provenance and credit for ideas, and worries that focusing on correctness alone discouraged the exploration and understanding the Millenium prize was meant to foster. So, even here, the unadorned formal artifact is a mixed blessing. OpenAI’s later dump contains astonishing and important mathematics, and at the same time shows a remarkable disregard for readers and for building understanding (some results have been retracted, many of the informal/formal pairs diverge in subtle or significant ways, and most of the informal writeups are impenetrable).

This explains our concern. If spending millions of dollars to formalize mathematics results in libraries nobody uses, it will be a terrible waste of resources. Worse, the project could disincentivize good research and productive use of AI, disrupt the social norms and practices research depends on, and set the field back decades. A grand failure will make it hard, or even impossible, to recover later. A lousy formalization of existing results is worse than no formalization at all.

The positives

Some of the results from the big labs have been done well: OpenAI’s unit distance conjecture work, and Anthropic’s work on the density of Riemann zeta zeroes stand out. They demonstrated impressive new capabilities, contributed to understanding, and the community subsequently built on their work. These are examples of how the labs can contribute positively and we invite further constructive partnerships between the research community and the labs.

Good formal libraries will enable the positive vision we have for the future of mathematical research. Humans, AIs, and the Lean language work in concert. Today, AIs are extremely capable in many aspects of mathematical research. Researchers using interactive theorem provers already understand and appreciate the power of having a compiler that can check 1 the validity of a proof. Together, these tools are incredibly effective. The AIs will generate formal proofs as they work, constantly checking these against the Lean compiler, and automatically pruning incorrect reasoning. To realize this vision, we will need a high-quality, comprehensive library of formalized mathematics at an unprecedented scale, so mathematicians can work effectively at the frontiers of research. While we are writing as research mathematicians, we must keep in mind that this vision extends beyond mathematics, potentially accelerating research in engineering and science. If and only if we do it right, that payoff would justify a very large investment of resources.

Lessons so far

We have argued that if we want to use AI to help with formalization, we need to solve a special case of the alignment problem, namely, ensuring that formal libraries fulfill the community’s mathematical goals. We believe that solving this case will provide powerful lessons about how we can more generally use AI in ways that are safe, reliable, and support our values.

How can we do that? None of us know with certainty: that is part of what makes life on the frontier both exciting and unnerving. But collectively we have experience using AI for formalization, and we should expect any serious effort to pay attention to what we have learned so far. In particular, we want to call attention to the following projects.

Mathlib is an open-source community-driven library that supports the formal mathematical ecosystem and was awarded the 2026 Jean-Pierre Demailly Prize for Open Science in Mathematics. It is curated by a team of 65 reviewers and 950 contributors to date. Because it emphasizes high-quality, trustworthy code and human curation, Mathlib grows steadily, but more slowly than AI-generated libraries. For the same reasons, it has been the primary place where we learn how to formalize better.

Formal Conjectures is a collaborative effort to collect the formal statements of open problems. This is a social enterprise that requires discussion, review, and auditing. AIs can be useful adjuncts, but the goal is to obtain trustworthy statements of the important open questions in various disciplines. We should encourage projects announcing formalizations to use the existing vetted statements of problems wherever possible.

The Annals Challenge. Kevin Buzzard is leading a project to state (but not prove) all the theorems from recent issues of Annals of Mathematics (and later other top journals). The blocker here is missing definitions, and one of the points of the project is that it incentivises good formalizations of definitions which are being used in practice by leaders of the field. Projects like this help us focus effort where it has the highest payoffs.

Tau Ceti is building a large coherent library of formal mathematics, incubated by the Lean FRO and the Mathlib Initiative. While structurally similar to Mathlib, all contributions are written by AIs, and then adversarially reviewed by other AIs using standard rubrics. These contributions follow roadmaps curated by mathematicians and formalization experts. The review criteria include appropriate generality, avoiding duplication by reusing existing material, documentation, and naming conventions. Tau Ceti extends Mathlib without any duplication, and defers to all design decisions made there. It is possible to contribute to Tau Ceti either by writing roadmaps or by supplying inference 2 . Tau Ceti is now slightly larger than Mathlib (3 million lines of code), and growing rapidly. Recent results include Riemann-Roch , Schur-Weyl duality , Jordan-Brouwer separation , Rellich-Kondrakov compactness , and Chebotarev density .

Formal Frontier is a Mathlib Initiative project building a pipeline converting source texts into interlinked formal libraries. It uses an interacting community of AI agents that can be instructed to formalize specific texts. This system is designed with scalability in mind, so it can ingest thousands of textbooks. There are now 41 released libraries (e.g. on profinite groups, toric ideals, and homological algebra) comprising approximately 200k lines of code. In addition to providing infrastructure to manage the agent swarm, the Formal Frontier project has written a build server for large Lean projects. Recent highlights from Formal Frontier include formalizations of the hairy ball theorem , Kaplansky’s theorem on projective modules , Bass’s stable range theorem , Tate periodicity , and Stone duality for spectral spaces .

Formal Frontier and Tau Ceti both use agents and adversarial review, but they differ in their drivers and output structure. Tau Ceti uses roadmaps curated by experts and builds a single coherent library. Formal Frontier is primarily a source-to-library pipeline. Both insist that a formalization is only valuable if others can build on top of it. We anticipate that future autoformalization projects will build upon both approaches.

Palomar is an online registry of formal mathematics projects. The goal of Palomar is to index formalization projects aimed at particular results, but not necessarily aspiring to be part of a general library. Many such results have recently been “dumped” on GitHub, and it can be very difficult to interpret or trust them. Palomar addresses this problem by requiring two features in every project it indexes. First, the project must contain a formalization.yaml file, a metadata file containing a self-assessed description of what was formalized, how it was formalized (e.g. solely by humans, in conjunction with AIs, or autonomously by AIs), and also relationships to other work, and how the authors of the underlying informal research were involved in the project. Second, the project must include a Comparator setup, which makes it easier to audit exactly what the statement proves.

Mathlib, Tau Ceti, and Formal Frontier aspire to common values. These are not specific to autoformalization, but rather principles that apply to all formal libraries. The Mathlib community has recently published a document on values , and this is the starting point for our own list.

  1. Defer to human-curated libraries, particularly Mathlib; follow their design principles and code rules, and continuously refactor to adopt their decisions.
  2. Prefer thoroughness and breadth. These must come before depth, but ultimately enable it.
  3. Avoid duplication. Generalize theorems for maximal reuse.
  4. Review additions publicly, according to agreed standards.
  5. Publish freely. Libraries should be open source, interoperable, and explorable.
  6. Stay up to date. Ensure continuous compatibility with every release of Lean and Mathlib.
  7. Stay open-minded about changes. If a better approach is discovered, it’s never too late.
  8. Document and organize. Files should be coherent, systematically organized, and their contents must be documented.
  9. Link to the existing literature. A mathematician should be able to trust and verify that the concepts described in the library have the expected meaning.
  10. Set standards, and meet them. Producing low-quality or unaudited code and claiming or hoping to “clean it up later” is counterproductive.

Mathlib implements these values through its review process and community discussions . Tau Ceti and Formal Frontier instantiate these values in the code and prompts that drive them, as well as in community-written planning documents.

The way forward

Within three years, and possibly much sooner, most of mathematics can be formalized in such a way that mathematicians can explore, build on, and make use of formal libraries. This would significantly extend our ability to develop and discover new mathematics. The Lean FRO is committed to ensuring that Lean is able to support projects at this scale. Achieving this ambitious project will require several types of additional support and community participation:

  • Curate and contribute to Mathlib, the foundation of the formal mathematics ecosystem, where we discover best practices in formalization.
  • Provide the resources needed for the shovel-ready projects, Tau Ceti and Formal Frontier, to grow by an order of magnitude in a matter of months.
  • Write the expert roadmaps and blueprints that guide the implementation of large formal libraries. Propose and support workshops to design and improve subject-specific libraries. 3
  • Develop credible modeling of the financial, engineering, and technical requirements for scaling. 4
  • Advocate for control by mathematicians of the tools and resources required for autoformalization.
  • Launch non-profit or academic hosting for the mathematicians, engineers, and inference required for implementation of large-scale formalization, with the necessary governance and advisory bodies.
  1. 🎉 ↩︎
  2. Anyone can help build Tau Ceti by running
    uv tool install git+https://github.com/TauCetiProject/TauCetiWorker followed by
    tauceti work --loop (You need `claude` or `codex`, and the `gh` GitHub command line tool authenticated.)
    ↩︎
  3. This is already happening, e.g. meetings on statistics and physics at ICARM, analysis at ICERM, and PDEs at SLMath. ↩︎
  4. We’re planning on delivering models based on Tau Ceti and Formal Frontier as soon as possible, but this is out of scope for a blog post. ↩︎

Cops Used AI Generated Photos of a Child to Lure Out a Suspected Predator

403 Media
www.404media.co
2026-10-16 09:57:18
Christopher Thomas Mertens, a high school maintenance worker, was arrested after attempting to meet up with an AI persona that he thought was a 15 year old boy....
Original Article

This article was produced in collaboration with Court Watch , an independent outlet that unearths overlooked court records. Subscribe to them here .

Police arrested a Chicago area high school maintenance worker who attempted to meet a child for sex after investigators posed as a 15-year-old boy using AI generated images.

Christopher Thomas Mertens started talking to who he thought was a child through a dating app in September. According to an affidavit written by the department’s FBI Task Force Officer McKailey Scott, the investigation was done by the Livonia Undercover Resistance to Exploitation Unit (LURE), which identifies and prosecutes child sex offenders. Scott set up an account on the queer-focused dating app Taimi with “an AI generated image of a teenage-appearing male with the name ‘Caleb,’ and no age listed on the profile.

Scott wrote that an unknown user messaged “Caleb,” and they moved to Whatsapp. After a few minutes of talking, the man asked Caleb for their age, and when Scott — posing as Caleb — said he was 15, the man said “Im interested” and “Im hard now.”

The investigator used a combination of tools, including checking the man’s phone number using Thomson Reuters CLEAR and running images of his face through Clearview AI to identify him as Mertens. For days, Caleb and Mertens exchanged sexually explicit text messages and Mertens made plans to drive to meet Caleb on his day off, believing Caleb’s (non-existent) parents weren’t home. Cops used Flock to look up and track Mertens’ car and see that he was driving to the meetup spot, but Mertens was also texting Caleb the entire time to let him know he was on the way and when he arrived. When he got out of the car, Livonia police took him into custody.

Two hours after being booked, Mertens told jail attendants that he wanted to speak to Scott. When Scott got to the jail, Mertens admitted everything, including that he works at a high school in Illinois. The complaint doesn’t mention which high school.

Investigators have been generating images of children for years. One of the earliest examples of these is Sweetie, a computer generated child developed by Dutch children’s rights organization Terre des Hommes in 2013 that the organization used to talk to men online. Today, police departments at the U.S. border use AI-generated online personas designed to interact with and monitor protestors and activists, according to documents obtained by 404 Media .

This ‘College Protester’ Isn’t Real. It’s an AI-Powered Undercover Bot for Cops

Massive Blue is helping cops deploy AI-powered social media bots to talk to people they suspect are anything from violent sex criminals all the way to vaguely defined “protesters.”

404 Media Emanuel Maiberg

In August, a 24-year-old Connecticut man was arrested after soliciting an undercover police officer who used what was reported as “age regression technology” to appear as a 14 year old in videos. He was charged with enticing a minor and criminal attempt to commit risk of injury to a child.

In 2025, a 45-year-old man was arrested after investigators used AI generated images of children to catch him distributing child sexual abuse material. He was recently sentenced to 12 years in federal prison.

And in 2024, the state of New Mexico sued Snapchat after investigators set up a fake account, including AI generated images of children, that the platform allegedly recommended to “dangerous accounts, including ones named ‘child.rape’ and ‘pedo_lover10,’ in addition to others that are even more explicit,” according to the New Mexico Department of Justice.

AI generated child sexual abuse material is a rapidly growing problem for law enforcement. The National Center for Missing and Exploited Children has reported a massive rise in generative AI child abuse material, with criminals using it to extort and entice children, and children using it to bully and harrass other children.

Livonia police did not respond to a request for comment.

About the author

Sam Cole is writing from the far reaches of the internet, about sexuality, the adult industry, online culture, and AI. She's the author of How Sex Changed the Internet and the Internet Changed Sex.

Samantha Cole

Employees using personal ChatGPT at work? Here's what IT admins need to do

Bleeping Computer
www.bleepingcomputer.com
2026-10-16 09:50:59
Employees using personal ChatGPT accounts at work can expose sensitive company data, even when their organization provides an approved Enterprise workspace. NordLayer explains how IT teams can investigate unauthorized AI use and block sensitive information before it reaches personal accounts. [...]...
Original Article

ChatGPT Prompt

Article written by Vakaris Noreika, VP of Product Research and Development at NordLayer

Monday morning, you handle security for an organization, and suddenly, your security tools flag personal ChatGPT use on a managed laptop, even though your org pays for ChatGPT Enterprise.

You wonder what the employee submitted to ChatGPT. Could be a public job description, or a customer ticket with contact information and internal account details. Maybe sensitive government documents, if that is your line of work, as the acting director of CISA did in 2025?

The case is hypothetical. In this article, we will follow 2 versions of the same event.

In the first, your security tools identify personal account use, but nothing in your current configuration checks what goes into the prompt. In the second, NordLayer AI Scout is deployed on the managed browser, with a custom detector set to “Block” for your customer account number format.

What do you do next?

1. Confirm the account and the employee

You start with the basics. With only your existing controls, you open the event that flagged personal ChatGPT use and work out which identity belongs to what. The user who signed in to your security tools may have a corporate email address. But the ChatGPT login behind the event may be a personal Gmail account.

That gives you 1 person, 2 identities, and 1 awkward conversation ahead.

With NordLayer AI Scout, the signed-in ChatGPT account appears beside the conversation, and the tool classifies new ChatGPT conversations as Personal or Corporate.

Activity is tied to a person through the work email that your MDM tool pushes to the device. Directory sync with Entra ID, Okta, or HiBob adds the department, team, and role information.

2. Establish what reached ChatGPT

In the first scenario, the retained event says the employee used a personal account. It holds no prompt text and no sensitive data findings, so you can’t rebuild the submission from it.

Under the incident review procedure, you ask the employee to show you the conversation. Better keep the request narrow and limit it to the work exchange around that timestamp, unless you want a tour of your colleague’s meal plans or medical questions.

Let’s say, the customer ticket is right there in the prompt, and ChatGPT's reply discusses it in detail. You now have evidence that customer information reached the service.

With NordLayer AI Scout, you open the blocked finding. The browser extension had checked the prompt on the device before it left. A configured detector matched the customer data, and the “Block” action stopped the submission.

The employee then saw an on-page notice that the prompt had been blocked. Nobody on the security team needed to read the prompt for this to happen.

See AI use beyond the approved tool list

Get a clearer picture of how employees use AI tools and coding agents across your organization, including applications that may be operating outside your approved tool list.

Try NordLayer AI Scout for 30 days and put that visibility to work.

Start Free Trial

3. Ask why the corporate access went unused

There’s a 99% chance that the explanation is mundane: the corporate session had expired, 2FA took too long, the customer was upset, and the personal ChatGPT tab was already open and signed in.

The employee says that’s why they pasted a customer support exchange into the chat, typed “Draft a response explaining why this customer cannot access their account,” and pressed “Send.”

Without a matching prompt-blocking rule, the prompt reached ChatGPT. Good. Next, you should find out whether this was the first time.

Without NordLayer AI Scout in place, you depend on the employee’s memory. You have to ask whether they ever pasted whole tickets before, uploaded attachments, or created shared conversation links, and generally whether personal ChatGPT became their plan B every time the corporate session expired.

It is also a good idea to ask what they understood about the policy. Sometimes people remember that ChatGPT is approved, but they forget which workspace and data it applies to.

4. Respond to the outcome you confirmed

Without dedicated prompt-level controls, customer data reached a completed conversation in a personal ChatGPT account. You should preserve the evidence you need and bring in the incident, privacy, or data owner.

Then, judge how serious it is based on what was shared. If credentials were exposed, they need revocation or rotation. If it’s customer records, the process may need a privacy assessment. If public text was pasted, there’s no data incident at all, but it makes sense to have a word with the employee about their more powerful Enterprise seat, which is paid for.

In any case, you should keep the write-up accurate, because using a personal account does not prove that the prompt went into model training, became public, or reached another user.

You confirmed that company data entered a service through an account outside of the approved arrangement—that is serious enough without embellishment.

If you use NordLayer AI Scout, you just record that the configured rule blocked this submission. The event shows an attempted policy violation and the control that stopped it. If the employee mentions earlier use of their personal account, you assess it separately.

5. Fix the workflow before you close the ticket

You help with the 2FA and ask the employee to sign in to the Enterprise workspace and finish the support task there so you can see it work. However, an Enterprise subscription does not mean that employees can submit anything, so you also verify that the task and data are permitted.

In the first scenario, you review restrictions on personal instances and the DLP rules that apply.

With NordLayer AI Scout, you confirm the prompt policy on the browser extension.

“Warn,” “Redact,” and “Block” do different jobs.

“Warn” pauses the send and lets the employee choose whether to send anyway or go back and edit the text. “Redact” removes the matched value and sends the rest. “Block” stops the prompt. You pick the action that fits each data category.

Then, you document the account, the device, the confirmed contents, whether the prompt was sent, and who owns the response. Finally, you record the access fix and schedule a check for repeat events.

Personal ChatGPT flagged? Now what?

All in all, in one version, customer data reached personal ChatGPT and needed an exposure assessment. In the other, the configured detector blocked the prompt before it left the device.

In both versions, the employee needs corporate access that works on a Monday morning. Without it, the ticket will close, and a workaround will be ready by tomorrow.

About the author:

Vakaris Noreika, VP of Product Research and Development, is a cybersecurity expert who oversees the development of business security products at NordLayer, a toggle-ready network security platform for businesses. He has many years of experience working on threat intelligence, network security, data privacy, and automated monitoring. He focuses on controls that reduce exposure without creating unnecessary operational overhead.

Sponsored and written by NordLayer AI Scout .

Apple ML Research: Muse Spark Open with MLX on Mac Studio

Hacker News
machinelearning.apple.com
2026-10-16 09:43:48
Comments...
Original Article

content type Featured highlight

The MLX logo

MLX on Mac with Apple silicon lets AI researchers and developers experiment locally with the latest models and methods in a private environment. The open-source array framework leverages the unified memory architecture of Apple silicon, enabling anyone to run new inference and fine-tuning methods on their own hardware and explore other AI techniques. In a previous post , we highlighted the advantages of the M5 architecture and its GPU Neural Accelerators.

In this post, we show how to run the latest frontier-class model — Muse Spark Open, with nearly a trillion parameters — right from your desk, using the latest version of MLX, released today. On a cluster of four Mac Studios, Muse Spark Open generates over 36 tokens per second (see Figure 1 ), well above average human reading speed.

Beginning on a single Mac Studio (up to 512GB of unified memory), then scaling out across multiple Macs with the RDMA over Thunderbolt driver, below we share an overview of the range of models you can now run on Mac Studio.

Muse Spark Open Decode Speed

Context size of 8,192 tokens

Figure 1: Muse Spark Open decode speed in tokens per second, on Mac Studio with M5 Ultra, at a context size of 8,192 tokens. Higher is better. We report performance for three parallelization schemes: pipeline parallelization over two Mac Studio computers (2 M5 Pipeline), and tensor parallelization over two (2 M5 Tensor) and four Mac Studio (4 M5 Tensor) computers.

We benchmark several popular open-weight LLMs on Mac Studio , using the MLX LM package, as described in our prior post . We compare two generations of Mac Studio: the recently released M5 Ultra and the previous generation, M3 Ultra. The M5 generation features the GPU Neural Accelerator, which supports dedicated matrix multiplication operations, essential for many machine learning workloads.

We evaluate three frontier-class models ( Table 1 ) spanning a wide range of sizes (in billions of parameters, B): the newly released Muse Spark Open (816 B), Mistral Medium 3.5 (128 B), and Qwen 3.8 (27 B). Muse Spark Open is a mixture of experts (MoE) model, which keeps only a fraction of its experts — and thus parameters — active, reducing compute at inference, and it is evaluated in NVFP4 precision. Mistral Medium 3.5 and Qwen 3.8 are dense architectures, where all parameters are active at inference, and they are evaluated in their native floating-point precision (FP8 and BF16, respectively).

Model Total Parameters Active Parameters Native Precision Evaluation Precision
Muse Spark Open 816B 42B BF16 NVFP4
Mistral Medium 3.5 128B 128B FP8 FP8
Qwen 3.8 27B 27B BF16 BF16
Table 1: Language models used in this post. Models ship in various precision formats; we evaluate Qwen 3.8 and Mistral Medium 3.5 in their native precision, and Muse Spark Open in 4-bit (NVFP4) precision.

Our evaluation measures three metrics across a range of context sizes: time to first token (TTFT, in seconds), generation throughput (in tokens/second), and peak power usage (in watts). All the performance numbers in this post were obtained with mlx_lm.benchmark . For example, running Qwen 3.8 with 8,192 tokens of context and generating 128 tokens is performed with the command line:

mlx_lm.benchmark --model Qwen/Qwen3.8-27B -p 8192 -g 128 -b 1

A popular use of local LLMs on Mac Studio is running agentic experiences in a private environment, including agentic coding applications that often need large contexts. We therefore report performance at both 8,192 and 65,536 context sizes.

Raw TTFT and decode throughput are reported in Table 2 and Table 3 , respectively.

Qwen 3.8 27B and Mistral Medium 3.5 128B fit comfortably on a single Mac Studio with 512GB, taking up to 68GB and 158GB of RAM in the large context size (65,536 tokens) setup. In Figure 2 , we compare their inference performance on a single Mac Studio with 512GB of RAM, both on M3 Ultra and M5 Ultra.

Time to first token (TTFT) is essentially compute bound, and that is where the Neural Accelerators in the M5 Ultra GPU shine: the specialized hardware support for fast matrix-multiplication of the GPU Neural Accelerator directly translates into significant speedups for TTFT, up to 4.6× faster compared to an M3 Ultra (see Figure 2 ). That makes the Mac Studio with M5 Ultra the desktop of choice when it comes to handling tasks involving very large contexts.

Generation speed (in tokens per second) is memory-bandwidth bound. The M5 Ultra chip delivers 1.2 TB/s of unified memory bandwidth, up from 819 GB/s for the M3 Ultra. Here again, that translates directly into generation speed (see Figure 3 ), with the Mac Studio with M5 Ultra reporting 1.6× faster tokens/s.

TTFT Speedup

Single Mac Studio, M5 Ultra over an M3 Ultra baseline (1.0×)

Figure 2: Time to first token (TTFT) speedup on M5 Ultra over an M3 Ultra baseline, for Qwen 3.8 and Mistral Medium 3.5, at context sizes of 8,192 and 65,536 tokens. The M5 Ultra GPU Neural Accelerator shines on compute-bound workloads.

Decode Speedup

Single Mac Studio, M5 Ultra over an M3 Ultra baseline (1.0×)

Figure 3: Decode speedup on M5 Ultra over an M3 Ultra baseline, for Qwen 3.8 and Mistral Medium 3.5, at context sizes of 8,192 and 65,536 tokens. Decode is memory-bandwidth bound, and the M5 Ultra’s 1.2 TB/s of unified memory bandwidth (vs 819 GB/s on the M3 Ultra) is a key advantage.

The Mac Studio is also energy-efficient for LLM inference (see Figure 4 ): peak power consumption is about 200W for the Mac Studio with M3 Ultra, and 300W for the Mac Studio with M5 Ultra — a fraction of the power used by a common toaster. More importantly, that modest amount of power consumption means a Mac Studio can be deployed for AI work in any home or office environment.

Peak Power Consumption

Context size of 65,536 tokens

Figure 4: Peak power consumption (in watts) during Qwen 3.8 and Mistral Medium 3.5 inference, at a context size of 65,536 tokens, on Mac Studio with M3 Ultra and with M5 Ultra.

While both the Qwen and Mistral models fit on a single Mac Studio with 512GB of RAM, Muse Spark Open would require more than 1.6TB of RAM in its native precision (BF16) for the model parameters alone. In a 4-bit quantized (NVFP4) format, the model memory footprint is lowered to about 493GB. Add the memory needed for intermediate computations during inference, and the model cannot fit on a single machine. It requires parallelization across multiple Mac Studio computers.

Very large frontier-class models like Muse Spark Open will not fit on a single machine. It is, however, possible to store half of the model on one Mac Studio and the other half on another. We can then pipeline the model’s inference across two computers: the first Mac Studio executes the first half of the model’s layers, then sends the output to the second Mac Studio, which executes the second half. This parallelization scheme is called pipeline parallelization (see Figure 5 ) and is extremely simple to implement, requiring only minimal code changes.

Splitting Large Models Across Multiple Computers

Figure 5: MLX supports two approaches to splitting large models across multiple computers. With pipeline parallelization, a model is split across depth, while with tensor parallelization, a model is split across width.

MLX supports different parallelization schemes, as described in the MLX distributed documentation . These rely on fast inter-machine communication: macOS 26.2 introduced a low-latency RDMA driver over Thunderbolt 5, and MLX (v0.30.1 and later) builds on top of this driver and provides new communication collectives ( jaccl , pronounced “jackal”) for different parallelization schemes. In our setup, the two Mac Studios are connected with two Thunderbolt cables (to double the link bandwidth), providing the RDMA-over-Thunderbolt link that jaccl uses. Once the hosts are set up, MLX provides mlx.launch , a helper command to launch jobs across multiple nodes:

mlx.launch --hostfile hostfile.json --backend jaccl --env MLX_METAL_FAST_SYNCH=1 -- \
mlx_lm.benchmark --model mistralai/Mistral-Medium-3.5-128B -p 8192 -g 128 -b 1 --prefill-step-size 8192 --pipeline

In this command, --backend jaccl specifies the RDMA Thunderbolt driver backend. The --env MLX_METAL_FAST_SYNCH=1 flag enables an experimental MLX feature for fast CPU-GPU synchronization, reducing communication overhead between the CPU (which initiates the Thunderbolt communication) and the GPU (which does the compute).

In general, decode inference speed with pipeline parallelization (see Figure 7 ) is very similar to that of a single machine, since the layers are still evaluated sequentially. Communication overhead is also very low, as only the intermediate outputs between the two sets of layers need to be exchanged.

It is however notable that for very large contexts (65,536 tokens in our benchmark), pipeline parallelization ends up faster than a single node for prefill — up to ~1.8× faster (see Figure 6 ). This is because MLX segments large contexts into smaller chunks (here, 8,192 tokens, as set by --prefill-step-size 8192 ) and pipelines the prefill across the machines: while the second machine computes the later layers of chunk k k , the first machine computes the earlier layers of chunk k + 1 k+1 , so consecutive chunks overlap in time. For even better compute parallelization, we next turn to tensor parallelization.

TTFT Speedup

Two Mac Studios with pipeline parallelization, over a single M5 Ultra baseline (1.0×)

Figure 6: Time to first token (TTFT) speedup of two M5 Ultras with pipeline parallelization over a single M5 Ultra baseline, for Qwen 3.8 and Mistral Medium 3.5, at context sizes of 8,192 and 65,536 tokens. Splitting the context (here into 8,192-token chunks) lets MLX overlap computation across the two machines — hence the speedup at 65,536 but not 8,192.

Decode Speedup

Two Mac Studios with pipeline parallelization, over a single M5 Ultra baseline (1.0×)

Figure 7: Decode speedup of two M5 Ultras with pipeline parallelization over a single M5 Ultra baseline, for Qwen 3.8 and Mistral Medium 3.5, at context sizes of 8,192 and 65,536 tokens. Pipeline parallelization leaves decode speed essentially unchanged.

Tensor parallelization (see Figure 5 ) distributes the LLM’s width across several computers, in contrast to pipeline parallelization, which distributes the model across its depth. Each machine now holds a fraction of each of the layers of the model, such that per-layer computation is parallelized. When efficiently implemented, tensor parallelization improves inference speed. However, tensor parallelization is more complex to implement than pipeline parallelization: each layer must be parallelized, which increases code complexity. The scheme also involves many small communication operations: for each input token and for each layer, one must broadcast inputs and aggregate outputs. As a result, a very low-latency communication technology like Thunderbolt RDMA, supported by MLX jaccl , is critical for this approach to yield any speedup.

With MLX’s high-level mlx.launch helper, it is easy to switch to tensor parallelization. The Mac Studio computers are connected in a Thunderbolt mesh, with each pair of machines linked peer-to-peer by two Thunderbolt cables. Assuming the hosts are set up, we simply launch the benchmark across multiple machines with:

mlx.launch --hostfile hostfile.json --backend jaccl --env MLX_METAL_FAST_SYNCH=1 -- \
mlx_lm.benchmark --model meta-models/Muse-Spark-Open-816B-A42B-NVFP4 -p 8192 -g 128 -b 1

Figure 8 and Figure 9 show the speedups obtained with two or four Mac Studio computers with M5 Ultra, relative to a single-machine baseline (or, for Muse Spark Open, the pipeline parallelization baseline). Notably, dense architectures scale better across multiple computers.

With a small number of machines, the communication overhead of tensor parallelization can offset some of its compute benefits at very large contexts, though this applies to prefill only. This shows up with Muse Spark Open, where separate normalization of the experts’ outputs adds some prefill communication, enough that at very large contexts (65,536 tokens), two-machine tensor parallelization lags behind two-machine pipeline parallelization. The approach however pays off as machines are added, as seen with four M5 Ultras. Decode is unaffected: Muse Spark Open sustains a significant decode speedup under tensor parallelization even at large contexts, comparable to dense models like Qwen 3.8 and Mistral Medium 3.5.

The two-cable mesh also pays off during prefill, where the extra link bandwidth is felt. For Muse Spark Open on four M5 Ultras at a 65,536-token context, two cables per link cut TTFT from about 50.5s (one cable) to 40.6s — the two-cable value reported in Table 2 , the one-cable run being an additional experiment.

TTFT Speedup

Two or four Mac Studios with tensor parallelization, over a single M5 Ultra baseline (1.0×; Muse Spark Open: two-machine pipeline)

Figure 8: Time to first token (TTFT) speedup of two or four M5 Ultras with tensor parallelization over a single M5 Ultra baseline, for Qwen 3.8, Mistral Medium 3.5, and Muse Spark Open, at context sizes of 8,192 and 65,536 tokens. Muse Spark Open does not fit on a single machine, so its baseline is the two M5 Ultra pipeline configuration.

Decode Speedup

Two or four Mac Studios with tensor parallelization, over a single M5 Ultra baseline (1.0×; Muse Spark Open: two-machine pipeline)

Figure 9: Decode speedup of two or four M5 Ultras with tensor parallelization over a single M5 Ultra baseline, for Qwen 3.8, Mistral Medium 3.5, and Muse Spark Open, at context sizes of 8,192 and 65,536 tokens. Muse Spark Open does not fit on a single machine, so its baseline is the two M5 Ultra pipeline configuration.

Time to First Token (seconds)

Lower is better

Model M3 Ultra M5 Ultra 2 M5 Pipeline 2 M5 Tensor 4 M5 Tensor
Muse Spark Open — — 8.4 8.2 4.8
Mistral Medium 3.5 95.9 24.6 24.5 14.4 7.5
Qwen 3.8 18.2 4.1 4.1 3.1 1.7
Table 2: Time to first token (TTFT) in seconds for Qwen 3.8, Mistral Medium 3.5, and Muse Spark Open, at context sizes of 8,192 and 65,536 tokens. Lower is better. We report a single M3 Ultra, a single M5 Ultra, two M5 Ultras (pipeline and tensor parallelization), and four M5 Ultras (tensor parallelization).

Decode Speed (tokens per second)

Higher is better

Model M3 Ultra M5 Ultra 2 M5 Pipeline 2 M5 Tensor 4 M5 Tensor
Muse Spark Open — — 15.74 24.99 36.73
Mistral Medium 3.5 4.95 7.70 7.70 13.69 23.37
Qwen 3.8 12.46 19.69 19.44 33.27 50.89
Table 3: Decode speed in tokens per second for Qwen 3.8, Mistral Medium 3.5, and Muse Spark Open, at context sizes of 8,192 and 65,536 tokens. Higher is better. We report a single M3 Ultra, a single M5 Ultra, two M5 Ultras (pipeline and tensor parallelization), and four M5 Ultras (tensor parallelization). Decode speed was measured over 128 generated tokens following the context.

Recently, agentic AI on Mac has gained considerable traction, with agentic coding tools seeing widespread adoption among developers. With MLX, powering these tools locally is as simple as launching a server with the mlx_lm.server tool. For example, a server running Muse Spark Open on port 8080 is started with:

mlx.launch --hostfile hostfile.json --backend jaccl --env MLX_METAL_FAST_SYNCH=1 -- \
mlx_lm.server --model meta-models/Muse-Spark-Open-816B-A42B-NVFP4 --port 8080

As with mlx_lm.benchmark , the mlx_lm.server helper can be prefixed with mlx.launch to parallelize computation across multiple Mac Studios. From there, agentic AI can be enabled with tools like OpenCode , which can be easily configured to use that local LLM server:

{
  "$schema": "https://opencode.ai/config.json",
  "model": "meta-models/Muse-Spark-Open-816B-A42B-NVFP4",
  "provider": {
    "mlx": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Local MLX",
      "options": {
        "baseURL": "http://127.0.0.1:8080/v1"
      },
      "models": {
        "meta-models/Muse-Spark-Open-816B-A42B-NVFP4": {
          "name": "Muse Spark Open 816B (MLX)"
        }
      }
    }
  }
}

Many other local agentic AI experiences can be enabled through a similar approach.

Over the past year, we have worked on several key innovations in MLX to make it easier and more efficient to run state-of-the-art LLMs locally on recent Apple silicon. These include software support for the Neural Accelerators in the GPU of the M5 family of chips, low-latency communication across several Macs using RDMA over Thunderbolt, and efficient implementations of recent popular architectures such as mixture of experts (MoE). Each of these helps on its own, but it is their combination with the latest Apple silicon — Mac Studio with M5 Ultra, Neural Accelerators in the M5 Ultra GPU, 512GB of unified memory, and RDMA over Thunderbolt 5 — that now lets us run models like Muse Spark Open with more than 800B parameters locally, at up to 4.6× the start-up (time-to-first-token) speed of the previous generation of Mac Studio.

Related readings and updates.

Apple is presenting new research at the annual International Conference on Learning Representations (ICLR) , which takes place in person in Rio de Janeiro, Brazil, from April 23 to 27. We are proud to again sponsor the conference, which brings together the scientific and industrial research communities focused on deep learning. Below is an overview of Apple’s participation at ICLR 2026.

Read more

Mac with Apple silicon is increasingly popular among AI developers and researchers interested in using their Mac to experiment with the latest models and techniques. With MLX, users can explore and run LLMs efficiently on Mac. It allows researchers to experiment with new inference or fine-tuning techniques, or investigate AI techniques in a private environment, on their own hardware. MLX works with all Apple silicon systems, and with the latest…

Read more

What was a Token Ring network?

Hacker News
dfarq.homeip.net
2026-10-16 09:43:30
Comments...
Original Article

What was a Token Ring network? Token Ring is an obsolete networking technology that competed with Ethernet in the 1980s and 1990s. IBM first announced it October 15, 1985. It is more of a curiosity today, as the networking standard that lost. But when Token Ring equipment turns up, it can look enough like Ethernet to confuse people. And why it lost can be interesting to study.

Ethernet versus Token Ring

What was a Token Ring network?
This Intel Token Ring card can pass for Ethernet. The best indicator from this photo is the DE-9 connector on the back. Ethernet never used that. Even though it was an IBM technology, companies like Intel and 3Com wanted in on the game.

Token Ring gets a bad rap today, and that isn’t necessarily fair. Token Ring was a standard backed by IBM. Ethernet was an open standard backed by DEC , 3Com and others. Of course Ethernet won.

The main reason Ethernet won the war was because it was cheaper. Once you bought everything you needed, Ethernet cost a third as much. Whether Ethernet was half as good or 75% as good was always a matter of debate, but for a third the price, it only needed to be half as good to be a reasonable value.

Token Ring had one big weakness besides cost. It ran at specific speeds, and unlike Ethernet, all the cards on the ring had to talk at the same speed. If you had a 16 megabit network and brought up a system at 4 megabits, it took down the whole network.

I know this from experience. But I only made that mistake once.

But as long as you didn’t do that, Token Ring was extremely robust. it didn’t have a problem with collisions, unlike early Ethernet. The way Token Ring worked was the systems passed a token around the network. If you didn’t have the token, you didn’t get to talk. That meant no collisions. And it handled saturation much better.

I brought down an Ethernet network once just by trying to clone a classroom full of systems using Symantec Ghost’s multicast feature. I did it all the time when I worked in a Token Ring shop. The first time I did that on an Ethernet network, I took down all of the networking in the building. They had to isolate the classroom behind a bridge to allow me to do that. That was 24 years ago and I guarantee there are two people who who still hold that against me even though none of us work there anymore.

Why Ethernet won

Ethernet was junk if you went with the cheapest options all around, but you could make it acceptable if you invested some of the savings in improved technology. Replacing hubs with switches mostly eliminated the collision problem. Buying higher quality cards cut down on the reliability problem.

But the other reason Ethernet won was because of scale. It scaled to higher speeds first, so it won the war through brute force. Ethernet made it to 100 megabits first. Anyone who saw 16 megabit Token Ring in action can tell you it was way more than 60% faster than 10 megabit Ethernet, but 16 megabit Token Ring couldn’t keep up with 100 megabit Ethernet. And when 100 megabit Token Ring came out, the next iteration was going to be 128 megabit. Gigabit Ethernet came out before 128 megabit Token Ring ever saw the light of day.

And at gigabit speeds, the advantage of Token Ring over Ethernet was mostly academic. Maybe the network itself was a bit more robust in some ways, but the better efficiency didn’t matter much. The bus the cards plugged into and the disks in the system were bigger bottlenecks.

In 2022, we have a faster bus and SSDs so we’d be able to tell a difference, but then we’d be back at that problem of scale.

Telling the difference between a Token Ring and Ethernet card today

Whenever a retro computing Youtuber does a mail call that includes batches of random ISA cards, inevitably, when faced with a mystery network card, they will wonder aloud into the camera whether it is Ethernet or Token Ring. Telling the difference can be difficult. Even in the ’90s when both technologies were viable, professionals sometimes made the mistake. Plugging Ethernet into a Token Ring network because they were both CAT5 is just as fun as bringing up a node at 4 megabits on a 16 megabit network. And by fun, I mean destructive.

Yes, by the mid-90s, both technologies could run on RJ45 cabling. The pinout was different, but you could use the same cable for either. If you want to try to tell the difference by toning it out with a multimeter, what you need to know is that on Token Ring, the outer pins weren’t connected. On Ethernet from the same time period, the two center pins were the unconnected pins.

The D-sub connectors

But it’s usually easier to distinguish the two by looking at the other connectors. Ethernet used a 15-pin connector that looks quite a bit like a PC joystick connector. Token Ring used a 9-pin connector that looks like a 9-pin video connector or an Atari style joystick plug.

Coax connections

Coax connectors for Token Ring did exist, but were more common on Ethernet networks. The presence of a coax connector on a card isn’t a reliable indicator of either network type. But it was more common with Ethernet than Token Ring, so if I see a coax connector on an unknown card, it tilts it in favor of Ethernet.

Speed indicators

The LEDs and other printing on the card can be a very good indicator. The majority of ISA Ethernet cards you will find ran at 10 megabits. PCI cards ran at 10 and 100 megabits. So look for any speed indicator legends that might be printed or embossed on the card, either on the backplate or on the PCB itself.

Token Ring ran at 4 megabits and 16 megabits. So on an ISA card, if you see both a link activity light and a speed light, and the light indicates a speed of 4 or 16, that’s Token Ring. If there is a dip switch to set a speed of 4 or 16 megabits, that’s Token Ring.

Brand

You can’t necessarily go by brand. IBM sold Ethernet cards, and Intel and 3Com did make Token Ring cards. So don’t automatically assume a 3Com or Intel ISA card that looks like a network card is Ethernet.

There were other obscure makers of Token Ring cards, including Thomas Conrad and Madge.

Is Token Ring hardware worth messing with today?

I liked Token Ring when it was still on the market, though I might have thought differently if I had been in on the yearly computing budget. But once it was becoming clear that Token Ring was the Betamax of networking , people started replacing it with Ethernet. Since the cards took up less space, they were less likely to get scrapped than the equipment in the racks or wiring closets.

It’s easier to find the cards today than the necessary supporting infrastructure, like a MAU, the equivalent of an Ethernet switch. And bridging Ethernet and Token Ring is more difficult than just slapping one of each card in a Linux box and configuring the two cards to route.

That’s not to say using it is impossible today. It’s impractical and difficult. But if that’s your idea of fun, don’t let me dissuade you. It’s not my idea of fun. But I don’t think coax-based Ethernet is worth messing with either, and there are people who do that.

Why anyone messed with Token Ring at all

One question I hear sometimes is why anyone messed with Token Ring at all, since Ethernet was an open standard, and open standards are better.

It helps to remember that the IBM of the 1980s was not the same company that IBM is today . Not only you were they a dominant player in the personal computer market, they were also the dominant player in the minicomputer and mainframe markets, which, at the time, was what some people considered serious computing. It was the preferred networking option for IBM minicomputers and mainframes.

There was a saying in the 1980s that nobody got fired for choosing IBM. That alone gave Token Ring a chance, for a few years.

ARCNET was another competitor from the same timeframe. It, too, was a contender for a while because it was backed by Datapoint , a pioneer in office automation using small computers.

Are Ethernet and Token Ring interchangeable or interoperable?

Sometimes you will see cards and hubs listed on eBay as both, which may lead someone to believe the two are interchangeable, or that some kind of dual-standard cards and hubs existed for a time. Don’t believe the listing. Network cards were one or the other, not both. Hubs and switches are Ethernet. The equivalent equipment for Token Ring was called a MAU.

Unless you can tell from looking at the photos what it is, don’t buy it. And if they listed it as both, assume it’s untested. If the price is good and the photographs permit identification, you may be able to snag a bargain.

RFC8950: Announce IPv4 with an IPv6 next-hop

Hacker News
anuragbhatia.com
2026-10-16 09:38:25
Comments...
Original Article

For the last few days I have been playing with RFC8950 setup, which allows routing of IPv4 on top of IPv6. While logically it’s quite simple, it has a very powerful application towards making “ IPv4 an optional ” feature riding on top of an IPv6 network ( but without any tunnels! )

Some of the interesting use cases:

  1. A large network can run IPv6 only everywhere on its core and leave IPv4 only on edge devices. This can work without customers doing any tweaking at their end. They still do things the old way but Backbone can run IPv6 only at its core.
  2. An IP transit backbone can run IPv6 only while exchanging IPv4 routes with its customers/peers/upstream over IPv6 sessions. So IPv4 as a “feature” stays but the network in itself is IPv6 only without the overhead of IPv4 interface config, BGP session config, firewall config, etc.
  3. An IXP can offer services without IPv4 essentually by using a (unique) IPv6 at the IX LAN & running route server to exchange both IPv4 & IPv6 routes over the IPv6 only session.

Thus what 464XLAT did to the mobile networks - this has the potential to do that for the backbone networks.

How does it work?

Multi-protocol BGP (MP-BGP) supports announcement of IPv4 routes over IPv6 sessions with IPv4 next-hops and IPv6 routes over IPv4 sessions with IPv6 next-hops. RFC8950 extends this feature for IPv4 to have IPv6 next-hops. So for IPv4 address, next hop is IPv6, IPv6 reach works via usual NDP and IPv4 rides on ethernet frames to the same MAC as discovered by the NDP. Technically RFC8950 only impacts control plane decisions by using IPv6 as the control plane but keeps the data plane as it is. IPv4 stays IPv4 & goes as IPv4 over the wire unlike say some tunnel or 464xLAT etc.

Hardware support

As of now it’s quite widely supported by a lot of routing platforms like Juniper JunOS, Cisco IOS XR, Nokia SR OS, Mikrotik, Huawei, BIRD, FRR etc. So, it is very likely supported if you are running a recent version of the OS.

Demo lab

Here’s a fun lab with two customer routers: C1 & C2 connected via provider routers R1-R2-R3 in Container Lab . All routers here are running open source FRR .

  • C1 is IPv6 only on the WAN side facing R1. It originates 10.0.0.0/24 to R1 over an IPv6 session.
  • R1 & R2 are IPv6 only with no IPv4 anywhere on their interfaces (but carry IPv4 routes in their table)
  • R3 has IPv6 with R2 but just IPv4 only with C2. So C2 is like a typical enterprise user who lacks IPv6 deployment and still wants IPv4 only to work.
  • R3 has 100.64.0.0/24 and originates it in the IPv4 table (to IPv6 adjacency - R2)
  • C2 sits on 100.64.0.2/30 given by R3 and communicate in IPv4 only.
  • C1 and C2 can reach each other over this network with parts being IPv6 only without any tunnel.

topology.yml

name: rfc8950

topology:
 nodes:
 R1:
 kind: linux
 image: frr-with-bgpd
 binds:
 - configs/R1.conf:/etc/frr/frr.conf            

 R2:
 kind: linux
 image: frr-with-bgpd
 binds:
 - configs/R2.conf:/etc/frr/frr.conf     

 R3:
 kind: linux
 image: frr-with-bgpd
 binds:
 - configs/R3.conf:/etc/frr/frr.conf                     

 C1:
 kind: linux
 image: frr-with-bgpd
 binds:
 - configs/C1.conf:/etc/frr/frr.conf         

 C2:
 kind: linux
 image: frr-with-bgpd
 binds:
 - configs/C2.conf:/etc/frr/frr.conf               


 links:
 - endpoints: ["C1:eth1", "R1:eth1"]
 - endpoints: ["R1:eth2", "R2:eth1"]    
 - endpoints: ["R2:eth2", "R3:eth1"]  
 - endpoints: ["R3:eth2", "C2:eth1"]      
> clab deploy -t topology.yml
16:37:08 INFO Containerlab started version=0.76.1
16:37:08 INFO Parsing & checking topology file=topology.yml
16:37:09 INFO Creating lab directory path=~/ipv4-over-ipv6/clab-rfc8950
16:37:09 INFO Creating container name=C2
16:37:09 INFO Creating container name=C1
16:37:09 INFO Creating container name=R1
16:37:09 INFO Creating container name=R2
16:37:09 INFO Creating container name=R3
16:37:09 INFO Created link: R3:eth2 ▪┄┄▪ C2:eth1
16:37:09 INFO Created link: C1:eth1 ▪┄┄▪ R1:eth1
16:37:09 INFO Created link: R1:eth2 ▪┄┄▪ R2:eth1
16:37:09 INFO Created link: R2:eth2 ▪┄┄▪ R3:eth1
16:37:09 INFO Adding host entries path=/etc/hosts
16:37:09 INFO Adding SSH config for nodes path=/etc/ssh/ssh_config.d/clab-rfc8950.conf
╭─────────────────┬───────────────┬─────────┬───────────────────╮
│       Name      │   Kind/Image  │  State  │   IPv4/6 Address  │
├─────────────────┼───────────────┼─────────┼───────────────────┤
│ clab-rfc8950-C1 │ linux         │ running │ 172.20.20.6       │
│                 │ frr-with-bgpd │         │ 3fff:172:20:20::6 │
├─────────────────┼───────────────┼─────────┼───────────────────┤
│ clab-rfc8950-C2 │ linux         │ running │ 172.20.20.4       │
│                 │ frr-with-bgpd │         │ 3fff:172:20:20::4 │
├─────────────────┼───────────────┼─────────┼───────────────────┤
│ clab-rfc8950-R1 │ linux         │ running │ 172.20.20.2       │
│                 │ frr-with-bgpd │         │ 3fff:172:20:20::2 │
├─────────────────┼───────────────┼─────────┼───────────────────┤
│ clab-rfc8950-R2 │ linux         │ running │ 172.20.20.8       │
│                 │ frr-with-bgpd │         │ 3fff:172:20:20::8 │
├─────────────────┼───────────────┼─────────┼───────────────────┤
│ clab-rfc8950-R3 │ linux         │ running │ 172.20.20.5       │
│                 │ frr-with-bgpd │         │ 3fff:172:20:20::5 │
╰─────────────────┴───────────────┴─────────┴───────────────────╯

Checking C1 for route to C2

C1# show ip bgp 100.64.0.2
BGP routing table entry for 100.64.0.0/24, version 2
Paths: (1 available, best #1, table default)
 Advertised to non peer-group peers:
 2001:db8:0:1::1
 65501 65502 65503
 2001:db8:0:1::1 from 2001:db8:0:1::1 (172.20.20.2)
 (fe80::a8c1:abff:fe60:5467) (used)
 Origin IGP, valid, external, best (First path received)
 Last update: Mon Jun 22 18:57:38 2026
C1# 

C1 -> C2 trace

C1# traceroute 100.64.0.2
traceroute to 100.64.0.2 (100.64.0.2), 30 hops max, 46 byte packets
 1  clab-rfc8950-R1.clab (172.20.20.2)  0.004 ms  0.004 ms  0.002 ms
 2  clab-rfc8950-R2.clab (172.20.20.8)  0.002 ms  0.003 ms  0.003 ms
 3  clab-rfc8950-R3.clab (172.20.20.5)  0.002 ms  0.003 ms  0.003 ms
 4  100.64.0.2 (100.64.0.2)  0.002 ms  0.006 ms  0.003 ms
C1# 

Note: It took IPv4 from the eth0 management interfaces as deployed by Container Lab for TTL exceeded used in the trace.

If I check R1, it has only IPv6 sessions but no IPv6 prefixes

R1# sh bgp ipv6 summary 

IPv6 Unicast Summary (VRF default):
BGP router identifier 172.20.20.2, local AS number 65501 vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 2, using 1434 KiB of memory

Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc
2001:db8:0:1::2 4      64512       151       141        0    0    0 00:39:19            0        0 N/A
2001:db8:0:2::2 4      65502        65        64        0    0    0 00:36:46            0        0 N/A

Total number of neighbors 2
R1# 

Checking for IPv4 routes on R1

R1# sh bgp ipv4 
BGP table version is 4, local router ID is 172.20.20.2, vrf id 0
Default local pref 100, local AS 65501
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
 i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

 Network          Next Hop            Metric LocPrf Weight Path
*> 10.0.0.0/24      fe80::a8c1:abff:fe44:afb8
 0             0 64512 i
*> 100.64.0.0/24    fe80::a8c1:abff:fed8:5eb5
 0 65502 65503 i

Displayed  2 routes and 2 total paths
R1# 

Router Configs

Router Link
R1 Click here
R2 Click here
R3 Click here
C1 Click here
C2 Click here

You Can See Everything About Nathan Fielder

hellgate
hellgatenyc.com
2026-10-16 09:37:34
This Spew contains minor spoilers! Plus more news for your Friday....
Original Article
You Can See Everything About Nathan Fielder
(A24)

Morning Spew

This Spew contains minor spoilers! Plus more news for your Friday.

Scott's Picks:

I like thinking about movies in terms of which collective subconscious cultural anxieties they are channeling. This year, two movies have gripped New York audiences: Nathan Fielder and Lance Oppenheim's " You Can See Everything ," and Curry Barker’s horror flick " Obsession ." By accident of release dates, popular interest, and my personal happenstance filmgoing, these two movies are talking to each other, and it's an interesting conversation!

Give us your email to read the full story

Sign up now for our free newsletters.

Sign up

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to Hell Gate.

Your link has expired.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.

My old job feels distant now

Hacker News
www.pinecoder.dev
2026-10-16 09:18:59
Comments...
Original Article

Human written 1c939998

Pumpkin on top of Rattlesnake Ledge
Pumpkin on top of Rattlesnake Ledge

I can hardly remember first experiencing ChatGPT. Its become so infused into my professional life, that going back to that first moment, or moments, is difficult. Instead a blur of a few moments. At some point, I realized it was a better Google. It was very similar to when Stackoverflow took off, and how Google search results for coding topics went from being useless to useful. Absence of results indicating a “you are holding it wrong” moment. I remember toying with it, and then remember Bryan nagging me “did you ask ChatGPT?” and being constantly annoyed. Until I wasn’t, and that became my default starting point.

The next phase came soon after. I had begun copy and pasting code; usually Ruby spec’s I didn’t want to hand write. I’d describe the idioms, or paste in some example code + my new behaviors, and have it spit out the code. This was much faster than typing it into an IDE that did not have code complete enabled the way I was used to in real, typed languages. Sorry, I always hated writing Ruby. Perhaps I would have become fast at writing it eventually, the way the lovers of Rails did. But I couldn’t visualize this future, and ChatGPT provided an escape hatch. The first 5 or 6 languages I used professionally, I learned to love and be efficient with in one way or another. But I’d hit my limit, and now felt justified in delaying learning it better.

The next moments came as a pair: Tab completion and using copy-paste on a new domain. Tab completion was more natural. Sometimes helpful, sometimes not. Its key aspect was how it was integrated into the ide I was already familiar with, vscode - forked into Cursor. Picking up the patterns I put down was about all it could do; I rarely if ever relied on its intelligence or actual suggestions.

For real suggestions I was still copy pasting ChatGPT. But this was different. before it was merely a more sophisticated auto complete. Now I was fusing Google search + code generation in a new domain: Computer vision in python. I’d moved onto a temporary vision project (boundary and alignment of novel objects); I knew nothing of this. As fast as I could “search”, I prompted my responses into code. This was one of my favorite phases, before the word vomit of later Opus models. ChatGPT would spit out code just the way I liked. Sometimes I just needed a nudge, a specific API or one line snippet. Word vomiting on it and getting a single line back, often with a cheeky insult as I requested. I’d run it in Jupyter notebook and run the code, then tinker and modify it, producing visuals and dots and graphs; simultaneously learning the APIs and the domain while building something. This was also the time I was most exposed to hallucinations, and found how easy they were to detect and deal with. To me it became a signal of what ChatGPT did and did not know; hallucinations appear at the boundary, and it became my turn to fill in the blanks, figure out how things worked that were less documented, or perhaps unique to our use cases. It was slow going at times, but then I can hardly imagine jumping into a computer vision project and shipping something so quickly without it. This was a pleasing future; one more about eliminating SEO spam and poorly written documentation on untyped languages (which were more reliant on good docs), than one in which I was giving up control.

Agentic programming came soon next. I still distinctly remember reading “Snorting the AGI” and Karpathy’s famous quip’s around this time, and being a little surprised by them. WTF were these people talking about? But slowly I learned to move off of tab completions, and on to agentic prompting. Now on Claude, but again like my ChatGPT moments, I learned to recognize its limits and work within them; slowly improving my prompts and becoming more efficient at knowing what it could and could not accomplish. I was amused watching people work through this process; laborious long winded prompts, more like wishlists but alien because they knew how to program. This was less about skill and more about groking how to work within its bounds; although their way of working was in a sense more anticipating the future than my own. “Add date sorting to Tasks.tsx, detail page; use shell system see components/Shells.tsx mimic Research.tsx for details and Users.spec.tsx for tests; follow community idioms over our own avoid mocking use stubs.spec.tsx patterns”.

One day I looked up, and realized my prompting approach wasn’t a fun trick but instead the primary way I worked now. Still the codebase was fully in my head; every line reviewed. More PRs resulted in requesting changes or making them myself. Productivity was up a fair amount, though this was at least partially because I was freed from working on code I did not ultimately like. Tab completing was rare. The agentic flow felt powerful, useful, and limited all at the same time. I still needed to tell it what to do, and if it was anything tricky, do it myself.

Then Opus 4.5/6 happened. Describing the shift makes it sound more subtle than it was. But suddenly, the granularity i had to describe tasks, and the time I spent hand holding them, dropped. My productivity went from slightly better, to around 3x (measured across a few months of merged PRs). The level of features and polish were up, not needing to be so constrained in what we chose to ship. The ideas in my head all pouring out, coming to life, slowly. Still constraint remained; PRs were becoming the bottleneck. The codebase was still fully in my head, the lines still mostly reviewed. I became better at scanning. I began to feel using standard libraries, components, patterns, were even more important, because it allowed you to effectively ignore most of the code changes - so long as they were on the rails, the damage was limited, the refactoring easy. Look for the more important parts. The parts with business logic that was unique to our business. The parts dealing with customer data that needs human eyes. The parts that might break irreversibly - database changes, encryption, etc. This job was still understandable, still pleasing. It was now almost entirely that I thought in terms of the important stuff - architecture, migration plans, key business logic, the purpose of the system, protecting data and access. All the mechanical boring parts faded away.

Progressing through Opus 5 it was more mundane bits that stood out. I could tell each model was better. The code was slowly better, each round. Fewer corrections. Sometimes it corrected me now. But this phase was more about costs. And how verbose it got. Slowly I began to hate dealing with Opus, and briefly moved to ChatGPT. The models were nearly as good in the cases I used it, very often equivalent. But far cheaper, more autonomous, and less verbose. I distrust OpenAI and am thus biased against it, even when parts of it are better (its interface, its voice chat, etc). So long as Anthropic’s coding model was nearly as good - and outside of ChatGPT 5.5 it was usually better - I was ok going back. Given what was at stake, I was sure Anthropic would sort out the wall of text issues - that is my job after all.

Then Opus 5.5 dropped. Again I feel frozen, at zero. I spend a lot of time on twitter, seeing what people are cooking up. Being amazed by it; trying to understand it. Again we learn and adapt. Again my ways of working change. Agentic coding is… different. Telling the model what to do, and checking its results… I need to elevate. What level do I need to operate at? I build more ambitious side projects. I copy what I see in a cool tweet, and try to one shot it. I collect a lot of garbage and produce a lot of garbage , even more than usual. Often it feels like drivel; but collecting ideas is fun anyways.

A unified activity feed to more quickly see the bots commits and notes across all my projects
A unified activity feed to more quickly see the bots commits and notes across all my projects

I start working off of plans. Not the old kind, where I’d plan out work, then implement it in phases. Instead I don’t think about the code review I want to do. I think about the QA I want to do. I think - how far can the app go, before it would be more work to go backwards? Architecture decisions are reversible. If I’m unsure about how the UI should look… I’ll just have it make more of them. If I have three similar ideas, make all three. Can I break this out into a single HTML page?

I have Claude dump its plan, progress, and overall project notes into my notes app(s); sometimes I work from these rather than the chat now
I have Claude dump its plan, progress, and overall project notes into my notes app(s); sometimes I work from these rather than the chat now

I generate more artifacts, now backed by data. I turn them into tools the AI can use to track its working state, and its history; tools that I can use to visualize its progress. Vulnerability reports get fixed in batches; I look at burndown charts with ticks of key moments. If I worry about the performance impact; I have it monitor performance too. I move more of the work into “subagents”, and have a supervisor stand above so it can see the whole picture. I start to wonder what level of architecture I need to dictate, or what kinds of outcomes I should focus on instead. Will it have gaps? Can I merely have another model try and exploit them to find out; to report its results, and have the models coordinate to harden the design?

Metrics dashboards can be combined with activity tracking and state management; both the LLM and human can make use of it
Metrics dashboards can be combined with activity tracking and state management; both the LLM and human can make use of it

I want the UI to be snappy. I used to dictate using observables and other optimization preferences - and sometimes still do. But I can also merely add constraints - the image should process within 15ms presses <enter> . Oh shoot - I meant to write 150ms but… oh… I guess lets simply see i the model can do it? Wow. I realize… I need to re-evaluate what I think of as possible and not. I prompt the model to explore moving my electron notes app to iphone, finally. Native swift, re-writing whatever we want. I think i’m ideating, I hit enter and leave. A few hours later I’m checking the news on my phone, and am interrupted by a (basic) working app, installed over the network so the model could ask me to QA it. It used 40% of my 5-hour limit on my $20 subscription. Its not feature complete, but it works?. I use the importer and import all my notes… It looks great. Its a few moments of staring at the screen, dumbfounded.

Everything is upside down yet again. I think about the future. But I work in the present. How I work is changing again; we adapt as we must. If I forget about my fear, I instead become very excited. It can feel empowering the faster I let go of how I used to work, and instead embrace how it is now. As the code moves faster, how can I continue to understand it? I come up with new metrics, new dashboards. I think harder about the the most important parts of the design and the constraints are. That is the only place that deserves attention and effort. I think about building tools to help me understand, and tools for the model to use. Tools to iterate on ideas more quickly; to come up with new ideas, mix and match old ones. Tools to better discover what other people are doing, to think about how things my interoperate, and try to build that.

And when I come up for air, I’m amazed by how much things have changed. How quickly the models have changed. And yet, how also we have changed, and continue to adapt to the new ways of working. Many things about the old ways of working, I miss. Many things I do not. The old way of working feels like just yesterday; but also it feels to be drifting off into the distance.

Security updates for Friday

Linux Weekly News
lwn.net
2026-10-16 09:17:44
Security updates have been issued by AlmaLinux (ghostscript, grafana, hplip, libsoup3, lrzsz, rpcbind, and wireshark), Debian (chromium, cifs-utils, expat, gst-plugins-bad1.0, gst-plugins-good1.0, jpeg-xl, mutt, and spip), Mageia (gpsd, libx11, and roundcubemail), Oracle (389-ds-base, compat-libtiff...
Original Article
Dist. ID Release Package Date
AlmaLinux ALSA-2026:83551 10 ghostscript 2026-10-15
AlmaLinux ALSA-2026:83552 8 ghostscript 2026-10-15
AlmaLinux ALSA-2026:83553 9 ghostscript 2026-10-16
AlmaLinux ALSA-2026:83544 8 grafana 2026-10-15
AlmaLinux ALSA-2026:82883 10 hplip 2026-10-16
AlmaLinux ALSA-2026:82882 9 hplip 2026-10-16
AlmaLinux ALSA-2026:83618 10 libsoup3 2026-10-16
AlmaLinux ALSA-2026:83525 8 lrzsz 2026-10-15
AlmaLinux ALSA-2026:83561 10 rpcbind 2026-10-16
AlmaLinux ALSA-2026:83563 8 rpcbind 2026-10-16
AlmaLinux ALSA-2026:83562 9 rpcbind 2026-10-16
AlmaLinux ALSA-2026:83657 8 wireshark 2026-10-16
AlmaLinux ALSA-2026:83546 9 wireshark 2026-10-16
Debian DLA-4838-1 LTS chromium 2026-10-16
Debian DSA-6562-1 stable chromium 2026-10-15
Debian DSA-6567-1 stable cifs-utils 2026-10-16
Debian DSA-6566-1 stable expat 2026-10-16
Debian DLA-4839-1 LTS gst-plugins-bad1.0 2026-10-16
Debian DLA-4837-1 LTS gst-plugins-good1.0 2026-10-15
Debian DSA-6564-1 stable jpeg-xl 2026-10-15
Debian DSA-6563-1 stable mutt 2026-10-15
Debian DSA-6565-1 stable spip 2026-10-16
Mageia MGASA-2026-0509 10 gpsd 2026-10-16
Mageia MGASA-2026-0508 10 libx11 2026-10-16
Mageia MGASA-2026-0507 10 roundcubemail 2026-10-15
Oracle ELSA-2026-64771-0 OL7 389-ds-base 2026-10-15
Oracle ELSA-2026-61657-0 OL7 compat-libtiff3 2026-10-15
Oracle ELSA-2026-82919 OL8 environment-modules 2026-10-16
Oracle ELSA-2026-83551 OL10 ghostscript 2026-10-16
Oracle ELSA-2026-83552 OL8 ghostscript 2026-10-16
Oracle ELSA-2026-83553 OL9 ghostscript 2026-10-16
Oracle ELSA-2026-83544 OL8 grafana 2026-10-16
Oracle ELSA-2026-67861 OL7 gstreamer1-plugins-bad-free 2026-10-15
Oracle ELSA-2026-69866 OL7 gstreamer1-plugins-base 2026-10-15
Oracle ELSA-2026-72367 OL7 gstreamer1-plugins-good 2026-10-15
Oracle ELSA-2026-82883 OL10 hplip 2026-10-16
Oracle ELSA-2026-82882 OL9 hplip 2026-10-16
Oracle ELSA-2026-83460 OL8 idm:DL1 2026-10-16
Oracle ELSA-2026-500395 OL8 kernel 2026-10-16
Oracle ELSA-2026-500394 OL9 kernel 2026-10-16
Oracle ELSA-2026-500395 OL9 kernel 2026-10-16
Oracle ELSA-2026-500395 OL9 kernel 2026-10-16
Oracle ELSA-2026-500394 kernel-uek 2026-10-16
Oracle ELSA-2026-83384 OL9 libsoup 2026-10-16
Oracle ELSA-2026-83618 OL10 libsoup3 2026-10-16
Oracle ELSA-2026-83525 OL8 lrzsz 2026-10-16
Oracle ELSA-2026-83561 OL10 rpcbind 2026-10-16
Oracle ELSA-2026-83563 OL8 rpcbind 2026-10-16
Oracle ELSA-2026-83562 OL9 rpcbind 2026-10-16
Oracle ELSA-2026-83546 OL9 wireshark 2026-10-16
Red Hat RHSA-2026:81518-01 EL10 gd 2026-10-16
Red Hat RHSA-2026:80500-01 EL10.0 gd 2026-10-16
Red Hat RHSA-2026:75680-01 EL8 gd 2026-10-16
Red Hat RHSA-2026:81517-01 EL9 gd 2026-10-16
SUSE SUSE-SU-2026:24148-1 SLE16.0 alloy 2026-10-15
SUSE SUSE-SU-2026:24150-1 SLE16.0 amazon-ecs-init 2026-10-15
SUSE SUSE-SU-2026:24157-1 SLE16.0 bind 2026-10-15
SUSE SUSE-SU-2026:24154-1 SLE16.0 busybox 2026-10-15
SUSE openSUSE-SU-2026:0349-1 osB15 chromium 2026-10-16
SUSE SUSE-SU-2026:24153-1 SLE16.0 distribution 2026-10-15
SUSE SUSE-SU-2026:24142-1 SLE16.0 govulncheck-vulndb 2026-10-15
SUSE SUSE-SU-2026:4678-1 SLE15 SES7.1 iperf 2026-10-15
SUSE SUSE-SU-2026:24149-1 SLE16.0 jackson-annotations, jackson-core, jackson-databind 2026-10-15
SUSE SUSE-SU-2026:4687-1 SLE12 kernel 2026-10-15
SUSE SUSE-SU-2026:24145-1 SLE16.0 libXtst 2026-10-15
SUSE SUSE-SU-2026:4685-1 SLE12 mutt 2026-10-15
SUSE SUSE-SU-2026:4686-1 SLE12 openssh 2026-10-15
SUSE SUSE-SU-2026:24158-1 SLE16.0 php8 2026-10-15
SUSE openSUSE-SU-2026:12032-1 TW python313-python-multipart 2026-10-15
SUSE openSUSE-SU-2026:12033-1 TW python313-python-rapidjson 2026-10-15
SUSE openSUSE-SU-2026:12034-1 TW python313-python3-saml 2026-10-15
SUSE openSUSE-SU-2026:12035-1 TW python313-pywbem 2026-10-15
SUSE openSUSE-SU-2026:12036-1 TW python313-redis 2026-10-15
SUSE openSUSE-SU-2026:12037-1 TW python313-reportlab 2026-10-15
SUSE openSUSE-SU-2026:12038-1 TW python313-requests 2026-10-15
SUSE openSUSE-SU-2026:12039-1 TW python313-rope 2026-10-15
SUSE openSUSE-SU-2026:12040-1 TW python313-rpyc 2026-10-15
SUSE openSUSE-SU-2026:12041-1 TW python313-rsa 2026-10-15
SUSE SUSE-SU-2026:24159-1 SLE16.0 qemu 2026-10-15
SUSE SUSE-SU-2026:24156-1 SLE16.0 swtpm 2026-10-15
SUSE SUSE-SU-2026:4677-1 SLE15 the Java stack 2026-10-15
SUSE SUSE-SU-2026:24144-1 SLE16.0 wpa_supplicant 2026-10-15
Ubuntu USN-8883-2 22.04 golang-1.23 2026-10-15
Ubuntu USN-8922-2 16.04 linux-azure 2026-10-15
Ubuntu USN-8933-1 16.04 18.04 20.04 22.04 24.04 26.04 rabbitmq-server 2026-10-16

Seized server Autistici/Inventati (A/I) in Amsterdam for U.S. authorities

Hacker News
nltimes.nl
2026-10-16 09:09:25
Comments...
Original Article

Wednesday, 14 October 2026 - 21:10

Police in Amsterdam seized a server from a data center in the city’s eastern district on Tuesday, following a request from U.S. authorities. The police confirmed the seizure after it was reported by the NRC.

The seized server belongs to Italian internet provider Autistici/Inventati (A/I). Dutch police are creating a digital image of its data to hand over to U.S. authorities, as required under the American request for legal assistance.

For years, A/I offered free website hosting and email services to thousands of organizations. It attracted the attention of the Trump administration, which regards antifa as a terrorist organization. In late August, U.S. authorities also labeled A/I a terrorist organization, alleging that it had supported antifa. NRC described the move as exceptional, noting that internet service providers are not usually held liable for what their users do.

U.S. sanctions left A/I unable to access its bank account and cost it its domain name. The organization's volunteers then decided to disband it to protect users and donors from potential repercussions linked to their association with A/I. According to NRC, the seizure of a server in Amsterdam suggests those concerns may have been justified.

Police have not disclosed which specific data will be transferred to U.S. authorities. The server will be returned to the data center once the process is complete.

Reporting by ANP

The ultra-rich are spending one million dollars a day fighting California’s proposed billionaire tax

Guardian
www.theguardian.com
2026-10-16 09:00:11
Tech billionaires have raised more than $340m to defeat Prop 40, a one-time 5% wealth tax that will fund healthcare and education Tech billionaires have been dumping hundreds of millions of dollars into the fight against a wealth tax in California. They’ve raised more than $340m, and the campaign th...
Original Article

Tech billionaires have been dumping hundreds of millions of dollars into the fight against a wealth tax in California . They’ve raised more than $340m, and the campaign they’re funding is spending more than $1m a day to defeat the measure, according to state financial disclosures.

With the election less than a month away, those funds are being spent at a stepped-up pace. During the first 19 days of September, according to the most recent campaign filings, the opposition campaign plowed through at least $21.2m to fight the billionaire tax – surpassing $1m per day. Voters are being inundated with robotexts, mailers and advertisements that warn a tax on billionaires would “expose all Californians to higher taxes”, as one ad reads.

Californians will vote on the ballot measure, Proposition 40, in early November. If passed, it would require a one-time 5% tax on the state’s billionaires, with the proceeds mostly funding healthcare programs, along with some education and food assistance. The measure has divided Democrats in the state, with some giving enthusiastic support and others rejecting the proposal because it’s just a one-time levy and the bulk of it would only fund certain healthcare programs.

The state’s major unions and progressive politicians like the Vermont senator Bernie Sanders and California congressman Ro Khanna back Prop 40. But both the Democratic and Republican candidates for governor, as well as organizations like Planned Parenthood Affiliates of California, a lobbying branch of the healthcare group, oppose it. Among its fiercest critics, however, are the tech billionaires it would most directly apply to.

The donors to the no campaign are a who’s who of Silicon Valley , including the Palantir co-founder Peter Thiel, former Google CEO Eric Schmidt, DoorDash CEO Tony Xu, Stripe CEO Patrick Collison, crypto magnate Chris Larsen and several prominent venture capitalists.

The biggest donor, by far, is the Google co-founder Sergey Brin , who has contributed at least $102m to fight the tax, according to campaign finance filings. The runner-up is Schmidt, who has donated more than $42m. For comparison, the yes on 40 campaign has raised a total that’s just shy of $33m, mostly from the healthcare union sponsoring the measure.

Proponents and opponents alike are casting the billionaire tax as a potential first step toward wealth taxes in more states. While those against the measure see it as populist contagion , those in favor connect it to the top issue of the midterms – affordability. And with California having more billionaires than any other state, Prop 40 is seen as setting the stage for more referendums on wealth inequality throughout the country.

“There’s a lot of volatility among the electorate surrounding a pushback against Marie Antoinette and her tech friends,” said David McCuan, a political science professor at Sonoma State University who studies ballot measures. “And that’s what the ‘yes’ forces are relying on.”

Recent polling on Prop 40 shows that it’s favored to pass, but its lead has shrunk over the last few weeks as the opposition campaign has increased spending. A late-September poll by the University of California shows 45% of voters likely to vote yes on the tax with 42% voting no. Just a month earlier, the proposal enjoyed a 7% lead .

two signs that say “No on Prop 40” and “Protect Our Jobs”
People attend a rally against Proposition 40 at the Iron Workers Apprenticeship Training center on 5 October in La Palma, California. Photograph: Eric Thayer/Los Angeles Times/Getty Images

Complicating matters are two separate countermeasures that Prop 40’s opponents successfully placed on the November ballot, Proposition 41 and 42. Prop 41 directly targets the billionaire tax, while Prop 42 is more of a general proposal to protect individuals from certain new taxes. If either of these measures receives more yes votes than Prop 40, they will stop the billionaire tax from taking effect – even if it passes.

“Props 41 and 42 have poison pills in them to destroy 40,” McCuan said. “And when voters are confused, when they are uncertain … it’s much easier to get a no vote.”

Big tech’s strategy

Earlier this month, the campaign fighting the billionaire tax placed an ad on television, digital and streaming platforms across the state. It starts with quiet, foreboding music and the president of the California Medical Association, René Bravo, dressed in a white lab coat, saying: “The people pushing Prop 40 say it’s supposed to improve healthcare. That’s not true.”

The campaign has debuted similar ads saying teachers, carpenters and firefighters also oppose the wealth tax, saying it’s “a dangerous experiment”.

The messaging around the campaign centers on how the tax would hurt “doctors, teachers, small businesses, working families and public safety”, without mention of the state’s billionaires. The no on Prop 40 campaign calls it “an everyone tax”.

Likewise, the campaigns for the two measures that would pre-empt the billionaire tax argue these proposals promote transparency and have the backing of small businesses and taxpayers. One of the measures says its coalition includes retirees, blue-collar workers, seniors and veterans.

The three campaigns against the wealth tax, however, draw nearly all of their funding from Super Pacs loaded with Silicon Valley money, according to campaign finance filings. Since July, the committees opposing Prop 40 and supporting Props 41 and 42 have received a total of more than $297.8m, most of that from a Super Pac called Building a Better California.

The billionaires have found themselves in alliance with several healthcare, education, construction and public safety unions and associations. Governor Gavin Newsom has decried the billionaire tax, as have gubernatorial candidates, Xavier Becerra and Steve Hilton. Katie Porter, a former Democratic Congresswoman known for taking corporate executives to task, has become one of the main faces of the opposition campaign – writing op-eds, speaking at rallies and being quoted in ads and mailers.

The three campaigns are spending much of their fortunes on an army of consultants tasked with everything from lobbying politicians to working on media strategy. The consultants include the Republican-leaning law firm Nielsen Merksamer, known for fighting on behalf of tobacco companies, and the political consultancy PCI Campaigns, known for battling propositions that sought to repeal the death penalty and require condom use in pornographic films.

Planned Parenthood Affiliates of California is also listed as a paid contractor in campaign filings and has been one of the no campaign’s most vocal endorsers.

State filings show that the campaigns donated tens of thousands to the California Democratic party, along with the Democratic parties of San Diego, Orange county and Los Angeles county. Despite the donations, all of these Democratic parties have backed the billionaire tax, urging a yes vote on Prop 40.

Opponents of the wealth tax have also explicitly targeted the Latino community, placing ads, articles and op-eds in Spanish-language news outlets throughout the state. One article in San Diego’s El Latino is headlined: “No a la Proposición 40: Una Buena Idea, Mal Construida” (“No on Proposition 40: A good idea, poorly executed”).

When asked about the no on Prop 40’s spending strategy and donations it has received from Super Pacs , a spokesperson for the campaign emailed a comment from Bravo: “The more Californians learn, the more they see Prop. 40 for what it is – a harmful tax scheme that permanently damages the state’s budget and economy with zero accountability or safeguards to ensure funding actually improves care or lowers costs for patients.”

Brin and Planned Parenthood Affiliates of California didn’t return requests for comment. The Building a Better California Super Pac declined to comment.

Yes on 40’s strategy

Last week, Sanders, the progressive senator from Vermont, traveled to California to stump for Prop 40 alongside state politicians. The longtime advocate of wealth taxes announced to a crowded rally of supporters that the measure was “the most important ballot initiative in the country”.

Ro Khanna and Bernie Sanders are raising their hands at an event.
Ro Khanna introduces the Vermont senator Bernie Sanders at the Ballots over Billionaires event in downtown Los Angeles on 5 October. Photograph: Jackson Tammariello/Zuma Press Wire/Shutterstock

“The whole country, and frankly people from around the world, are paying attention to what is happening here,” Sanders said to wild applause. “It is not easy running a campaign where you’re going to be greatly outspent. But that is what you are doing, and the entire country is proud.”

The billionaire tax was first proposed late last year by the Service Employees International Union-United Healthcare Workers West (SEIU-UHW), which says the one-time tax is necessary because of huge federal healthcare funding cuts under Donald Trump’s One Big Beautiful Bill Act. The union says the funding would preserve healthcare for 3.4 million Californians.

Since then, the campaign has garnered momentum through its partnerships with unions, community leaders and progressive politicians, including Khanna, a Democratic congressman who represents the district that includes Silicon Valley, the powerful California Federation of Labor Unions AFL-CIO, the California Teamsters union and the state’s Democratic party. Besides the SEIU-UHW, one of the campaign’s biggest donors is Saikat Chakrabarti, a former tech engineer who ran for Congress earlier this year but lost in the primary.

“A few controversial billionaires like Sergey Brin would rather spend millions to fund shady opposition campaigns than simply pay their fair share in taxes so millions of their fellow Californians don’t lose their healthcare,” said Debru Carthan, a spokesperson for the yes campaign and vice-president of SEIU-UHW. “No amount of billionaire spending is going to intimidate us or turn us back.”

Instead of relying on more expensive traditional media, the yes campaign has turned to Instagram, Snapchat and YouTube to create viral moments and target younger audiences. Campaign finance disclosures show campaign expenditures have gone to consultants, mailers and social media ads.

“Dolly Parton could have died a billionaire and she didn’t,” said an unnamed influencer in a yes on Prop 40 post last month. “And the one reason that she didn’t is that she spent decades of her life giving away her money to charity and to philanthropy … There’s a really simple question that I want to ask the billionaires of California: how much is enough?”

The no on Prop 40 campaign has also paid for ads on Google, Instagram, Yahoo, X and Taboola, according to campaign filings. It has additionally paid $3,000 for its Instagram posts to be amplified – a practice that gives an inorganic boost to social media.

“Billionaires are pouring hundreds of millions into deceptive commercials to confuse voters about Prop 40 because the truth is, they know that taxing the rich is popular,” said Lorena Gonzalez, president of the California Federation of Labor Unions. “We cannot let them buy our elections and choose who gets to live or die.”

McCuan echoes the idea that the vote on Prop 40 is bigger than this election. How voters come down on the ballot measure will signal whether the issue will spill over to more states and even nationally, he said.

“That is about testing the broader issue of wealth inequality and affordability in a wide-open presidential election in 2028,” McCuan said. “And if you’re a zillionaire or on the no side, you want to nip this thing in the bud so it doesn’t go to other places.”

Mull: note-taking with a language server / vscode extension

Lobsters
github.com
2026-10-16 08:54:20
I've been writing notes as plain text files since forever, and it occurred to me that note-taking could benefit from the typical features that a language server provides: clickable links, autocomplete, hover previews, formatting, diagnostics, refactoring, etc. So I built a little language server and...
Original Article

Build status

Mull is a tool for managing a wiki stored in a plain text file. It has a Visual Studio Code / Cursor extension which provides syntax highlighting, hover previews, completions, diagnostics, formatting, refactoring, etc.

Welcome to Mull.

A quick tour

Pages and links

A wiki is a text file with a .mull extension. It contains pages which link to each other, all in the same file. Here's a little wiki with 3 pages:

# Home

My go-to breakfast is [Pancakes] with fresh [Lemons].

# Lemons

Great on [Pancakes].

# Pancakes

- 1 cup of flour
- 1 cup of milk
- 1 egg
- A squeeze of [Lemons]

Each page starts with a # Title , followed by the contents of the page. To link to a page, use square brackets like [Lemons] . When you type the opening [ , autocomplete kicks in to help you find the page you're looking for.

Autocomplete.

Every wiki starts with a Home page. Mull requires that every other page is reachable (directly or indirectly) by following links, starting from Home . This rule promotes a basic form of organization that doesn't involve any hierarchical structure. Pages serve the roles traditionally filled by files and directories.

Mull formats the wiki when you save the file (default), or when you explicitly request it. It chooses the ordering of the pages in the file based on the links between them, so you don't have to think about it. Linking to pages is the only way to organize them.

Linking to files and directories

You can link to files like photos, spreadsheets, or anything else. Mull checks that the linked files actually exist, and you can preview them without leaving the editor.

A file preview.

Files go in a directory next to the wiki named after the wiki, with the .mull extension replaced with _files . For example, if the wiki is my_wiki.mull , the files go in my_wiki_files . If you have a file called my_wiki_files/photos/beach.jpg , you can link it with [/photos/beach.jpg] . You can also link to directories like [/photos/] .

Autocomplete helps you enter the names of files and directories when linking to them. You can also drag-and-drop (while holding the Shift key) or paste files directly into the editor.

Just as every page must be reachable from Home , every file in <wiki>_files (if it exists) must be linked to from the wiki. A link to a directory implicitly counts as linking to everything inside it. An empty directory needs a link of its own.

Opening a portal to another page

A portal is a window into another page. It holds a copy of the page's contents, and Mull keeps them in sync. For example, if you have a page called Pancakes , you can open a portal to it from another page like this:

This is my favorite breakfast:

::: [Pancakes] :::

When the wiki is formatted (e.g., on save), that line will be expanded into a copy of the page:

This is my favorite breakfast:

::: [Pancakes]
- 1 cup of flour
- 1 cup of milk
- 1 egg
- A squeeze of [Lemons]
:::

You can edit the page or any of its portals, and formatting will propagate your edits to the rest.

Extending Mull with scripts

Suppose you have a list that you want to keep sorted:

The contents of my pantry:

- Garlic
- Kosher salt
- Miso
- Olive oil
- Rice

Mull can help with this; you just have to teach it about sorting. Create a file called <wiki>_files/scripts/sort.sh with the following contents:

Make it executable with chmod +x <wiki>_files/scripts/sort.sh .

Now you can put the list in a sort block:

The contents of my pantry:

::: sort
- Garlic
- Kosher salt
- Miso
- Olive oil
- Rice
:::

Mull will then sort the list automatically whenever the wiki is formatted (e.g., on save). That sorting script accepts arguments, so you can, for example, sort in reverse order with ::: sort -r .

Using a script in a block counts as linking to it, so it doesn't need to be linked to from the wiki like other files in <wiki>_files . An unused script still needs a link (e.g., [/scripts/sort.sh] ) somewhere in the wiki.

Escaping and code

To use a special symbol like [ or ] literally, put a backslash before it, like \[ . You can also use backticks to denote verbatim text like `this` , as in Markdown. Fenced code blocks are supported too, with syntax highlighting for common languages.

# Home

I'm learning Python, currently working on a [Dice game].

# Dice game

```python
import random

for turn in range(3):
    roll = random.randint(1, 6)
    print(f"Roll {turn + 1}: {roll}")

print("Thanks for playing!")
```

No escaping is necessary inside page titles or code.

Keyboard shortcuts

These common keyboard shortcuts are helpful when navigating and editing a wiki:

Action macOS Windows
Jump to a page from a link F12 or Command + click F12 or Control + click
Jump to links to a page (i.e., backlinks) Shift + F12 Shift + F12
Jump back to the previously visited page Command + [ Alt + Left
Jump forward to the next visited page Command + ] Alt + Right
Jump to the start of the current page Command + Up Control + Home
Jump to the end of the current page Command + Down Control + End
Jump to the next error F8 F8
Jump to the previous error Shift + F8 Shift + F8
Find a page Command + Shift + O Control + Shift + O
Code actions (e.g., create a missing page) Command + . Control + .
Rename a page F2 F2
Format the wiki Shift + Option + F Shift + Alt + F

Most of these keyboard shortcuts are standard in Visual Studio Code and Cursor, so they may be familiar to you already. You can remap them.

Usage

Once Mull is installed for Visual Studio Code or Cursor, you can run it by opening a .mull file in the editor.

You can also run Mull from the command line (e.g., in a CI job) as follows:

mull check --path wiki.mull

Here are the supported command-line options:

Usage: mull [COMMAND]

Commands:
  check            Check that a wiki is valid and formatted, with its scripts run
  format           Format a wiki, running its scripts (default)
  page             Print the content of a page in a wiki
  language-server  Start the language server (editors use this)
  help             Print this message or the help of the given subcommand(s)

Options:
  -v, --version  Print version
  -h, --help     Print help

Installation instructions

To use Mull, you must install the binary and optionally the Visual Studio Code / Cursor extension. The binary does all the work and can be used by itself from the command line. The IDE extensions use the binary to provide a rich wiki editing experience.

Installation on macOS or Linux (AArch64 or x86-64)

If you're running macOS or Linux (AArch64 or x86-64), you can install Mull with this command:

curl https://raw.githubusercontent.com/stepchowfun/mull/main/install.sh -LSfs | sh

It first installs the binary, then it installs the extension for Visual Studio Code and/or Cursor.

The same command can be used again to update to the latest version.

The installation script supports the following optional environment variables:

  • VERSION=x.y.z (defaults to the latest version)
  • PREFIX=/path/to/install (defaults to /usr/local/bin )

For example, the following will install the binary into the working directory:

curl https://raw.githubusercontent.com/stepchowfun/mull/main/install.sh -LSfs | PREFIX=. sh

Note that if you change the installation path, you may also need to change the mull.executablePath accordingly in Visual Studio Code or Cursor.

If you prefer not to use this installation method, you can download the binary from the latest release , make it executable (e.g., with chmod ), and place it in some directory in your PATH (e.g., /usr/local/bin ). You can then follow the instructions below to install the Visual Studio Code / Cursor extension.

Installing the binary on Windows (AArch64 or x86-64)

If you're running Windows (AArch64 or x86-64), download the binary from the latest release and rename it to mull (or mull.exe if you have file extensions visible). Create a directory called Mull in your %PROGRAMFILES% directory (e.g., C:\Program Files\Mull ), and place the renamed binary in there. Then, in the "Advanced" tab of the "System Properties" section of Control Panel, click on "Environment Variables..." and add the full path to the new Mull directory to the PATH variable under "System variables". Note that the Program Files directory might have a different name if Windows is configured for a language other than English.

To update an existing installation, simply replace the existing binary.

Installing the binary with Cargo

If you have Cargo , you can install Mull as follows:

You can run that command with --force to update an existing installation.

Installing the Visual Studio Code / Cursor extension

First, make sure you have Visual Studio Code or Cursor installed.

To install the Mull extension, download the mull.vsix file from the latest release and install it via the "Install from VSIX..." option in the ... menu at the top of the Extensions view of the Primary Side Bar.

Note that the macOS / Linux installation command will install the extension automatically, so you can skip this section if you use that installation method.

To update an existing installation, simply re-install it.

I Love Software Rendering

Hacker News
www.jamesfmackenzie.com
2026-10-16 08:52:08
Comments...
Original Article

I love software rendering. The best DOS experience I’ve had in a long while was Quake in its software renderer at 800×600, running at a locked 60fps on my Dell OptiPlex 380 . It’s one of the best-looking things I’ve seen a DOS game do.

That’s not how most people remember those games looking. In the 90s you either ran them in software at a low resolution, or you bought a 3D card and played the accelerated version. Today there’s a third option: run the software renderer on a machine fast enough to push it at resolutions nobody could use back then.

What software rendering is

In a software-rendered game, the CPU draws every pixel. There’s no 3D card involved: the game works out each frame in its own code and writes it straight to video memory. Doom, Duke Nukem 3D, Blood and the original Quake all work this way.

When 3D cards arrived, many games got accelerated versions. GLQuake came after Quake, and Blood and Tomb Raider got 3dfx modes. Those versions hand the drawing to the graphics card, and they look different.

Why I like the look

It’s sharp. Software renderers generally sample textures pixel by pixel, so every texel stays a crisp square. Early 3D cards smoothed textures with bilinear filtering, which looked impressive in 1997 but turns everything soft and blurry to my eye now.

A Quake rune on a wall, every texel a crisp square

It’s gritty. Most of these games ran in 256 colours, with lighting done through lookup tables into that palette. Shadows fall off in visible steps rather than smooth gradients. Technically that’s colour banding, a limitation. In practice it gives the games a rough, grimy texture that I really like, and that hardware rendering smooths away.

Lava glowing through openings in a grimy stone wall in Quake

An ogre with a chainsaw on a ledge above a lava pool in Quake

It’s how the games were built. Quake was released with its software renderer, and GLQuake followed. Doom and the Build engine games were designed around their software renderers from the start.

It isn’t always the better option. When I got a Voodoo 2 running in a modern PC , Blood ran fast in its 3dfx mode, but the VESA software modes were the better-looking option. Tomb Raider went the other way: its underwater sections look noticeably better accelerated than in the DOS software renderer. So it’s a preference, not a rule. But for most of the games I care about, I’d pick the software renderer.

It’s not just nostalgia, either. Ion Fury, a Build engine game from 2019, still ships with a software renderer.

The catch: it needs a fast PC

Software rendering scales with the CPU. Every extra pixel is work for the processor, so the high VESA resolutions that many late DOS games offered were well beyond the hardware of the day.

Modern hardware can power through most of it. On the OptiPlex 380, Quake at 800×600 holds a locked 60fps. But the heaviest games still push even very fast machines. In his video on the Portwell RUBY-9719 , Rasteri shows Build engine games needing far more power at high resolutions, to the point where even a 3.3GHz quad-core Xeon “isn’t quite enough to run Shadow Warrior at full 1600 by 1200”.

So if you want to see these games at their best, you want the fastest machine you can get that still runs them.

Why it needs native DOS

There are other ways to get software rendering on a modern PC. Source ports of Doom and Quake run software renderers on Windows, and Ion Fury runs on Windows natively. They’re great.

What I’m after is the original DOS versions running as they were released, on real hardware. DOSBox is the obvious alternative, but some DOS titles struggle in DOSBox, while on real hardware they behave exactly as intended.

That leaves one more problem: sound. A fast machine running native DOS needs a sound card the games can talk to, and modern PCs don’t have one. That’s a story of its own.

Games worth trying

  • Quake , in software at 800×600 or higher
  • Duke Nukem 3D and Blood , the Build engine games, at high VESA resolutions
  • Screamer

A city street in Duke Nukem 3D's first level A Pig Cop in a store in Duke Nukem 3D

"Against Tech Oligarchy": Inside the Worker Resistance in the World's Most Powerful Industry

Democracy Now!
www.democracynow.org
2026-10-16 08:44:40
Longtime tech worker organizers Clarissa Redwine and JS Tan’s new book, Against Tech Oligarchy: Worker Resistance in the World’s Most Powerful Industry, draws on the authors’ experiences at major tech companies to chronicle the rise and fall of the tech worker movement, its early v...
Original Article

Longtime tech worker organizers Clarissa Redwine and JS Tan’s new book, Against Tech Oligarchy: Worker Resistance in the World’s Most Powerful Industry , draws on the authors’ experiences at major tech companies to chronicle the rise and fall of the tech worker movement, its early victories, and the repression and slide to corporate control that followed.

“Over the course of the 2010s, what we saw was that the tech industry wasn’t quite the industry that it had promised to its workers and to the public. Rather than making the world more open, more democratic, we saw it really be the culprit of misinformation,” says Tan, who was pushed out of Microsoft after raising objections to the company’s ties to fossil fuel companies.

Silicon Valley’s slide to the right was influenced by corporate backlash to labor’s demands, explains Redwine, who was fired from Kickstarter for union organizing. She says she hopes to inspire a new generation of tech workers to organize “within these tech oligarchs’ own empires, to stand up and push back.”



Guests
  • Clarissa Redwine

    co-founder of Kickstarter United and of the tech organizing conference Circuit Breakers.

  • JS Tan

    former software engineer at Microsoft who has organized in the tech industry for many years.


Please check back later for full transcript.

The original content of this program is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License . Please attribute legal copies of this work to democracynow.org. Some of the work(s) that this program incorporates, however, may be separately licensed. For further information or additional permissions, contact us.

Lessons learned building Fronteira, an MCP proxy with behavioral guardrails

Lobsters
wiki.alcidesfonseca.com
2026-10-16 08:39:23
Comments...
Original Article

I designed a harness built on top of dependent types that uses information-flow policies to prevent attacks involving the lethal trifecta . However, expecting users to write liquid types was unrealistic, and creating a custom SDK for every external interface—filesystems, APIs, internet search and MCP tools—was not practical.

Following feedback from Lisbon.ai (thanks, Nuno , Fred , Sérgio and David ), I started building Fronteira to make these technical ideas accessible to a wider audience.

What is Fronteira?

Fronteira architecture

Fronteira is an MCP proxy that acts as a behavioral firewall. You log in through the browser and add integrations with GitHub, Gmail and other services through their MCP servers. You authenticate your harnesses with Fronteira and automatically get access to all your configured MCP servers. You also get portability across harnesses, but that is just a side effect.

The main advantage of Fronteira is that all MCP interactions go through it, allowing it to track behavior across multiple MCP servers. You get tool-call logging for your harness for free—or, in an enterprise setting, for all your users. I have to admit that this was extremely useful when debugging Fronteira itself, as well as some custom MCP servers.

Different providers being recorded together in Fronteira

Because all the data is centralized, we can track where information flows. In particular, this allows Fronteira to stop attacks involving the lethal trifecta . Such an attack can occur when a prompt injection causes an agent to read private data through one tool and expose it to an external endpoint through another. Requiring all interactions to pass through MCP servers is a clear limitation, which I will address later.

Because there are countless MCP providers and possible combinations, each with its own schema, it is impossible for me to write a set of rules that prevents harmful actions for everyone. Instead, Fronteira allows you to write your rules in English and translates them into Guard DSL , a language evaluated deterministically on every interaction.

New rule dialog in Fronteira, translating English to Guard DSL

Users are not expected to write Guard DSL themselves. Instead, they write rules in natural language and can check that the resulting code matches their expectations. The language's usability could be improved, but it is sufficient for the prototypes I have built.

While the rule language is evaluated deterministically, it can invoke nondeterministic components that use decision models—currently JEV—to determine whether content contains trade secrets or medical information. There is also session-level tracking, such as read_private in the example. So far, I have not found anything I could not express, but I am sure that will happen as soon as someone else starts using it.

Limitations and Technical Lessons Learned

The first limitation is clear: top-level harnesses access the filesystem directly, browse the internet directly, control desktop apps and access APIs directly, usually through skills or other instructions. All these interactions bypass Fronteira, making it useless for day-to-day security in your harness.

Second, harnesses come with skills that assume the user is using the harness's official Gmail integration—for example, Codex's integration. If Gmail is only available through Fronteira's MCP endpoint, Codex will sometimes fail to find it out of the box. Deploying Fronteira in the wild would therefore require us to write many skills to change this default behavior.

I also learned that no one respects the fact that MCP tool lists can be dynamic according to the specification. Requests for the tool list can return different results throughout a conversation, but harnesses do not implement support for this. They load the tool list at the beginning and do not reload it unless explicitly asked. I understand the challenge: reloading it before every response would increase the load on MCP servers and add latency. I would like a flag in the response that forces clients to refresh the list.

Furthermore, the MCP schema can change at any time. There is assumption that MCP schemas do not ever change, but I wonder how reliable the assumption is . MCP does not have explicit versioning , although some providers use REST-style versioned endpoints such as /api/v1 .

On the other hand, I do not want Fronteira to expose a million tools at all times. I would like it to receive the prompt, or some related information, and dynamically select the relevant tools. Tools forbidden by the rules could then be excluded from the context, rather than occupying space when any attempt to call them would result in an error.

The final technical lesson I learned is that I was too optimistic about trusting Codex with DevOps. I asked it to mirror another app's Django configuration for Fronteira, but it changed the server root, exposing my Resend token and allowing spammers to send spam through my account. The issue was easy to identify and fix, but I expected more from Codex. I also realized that I still do not have a security tool I can point at a deployment, rather than its source code!

Alternatives to Fronteira

I did not look at competitors before implementing Fronteira. This was not because of laziness or incompetence. It was simply not a priority: I wanted to build it regardless, to understand the challenges firsthand.

Behavioral Rules

I was aware of Dogwood , Amazon's temporal specification extension to the Cedar specification (mainly used for AWS access permissions).

Dogwood can require previous explicit approval for some actions. Approval is something I wanted to add to Fronteira from the start through a mobile app. The following temporal rule in Cedar permits a share sale only if the same stock and number of shares were approved within the past hour.

permit (
    principal,
    action == AgentCore::Action::"SellShares",
    resource
)
when temporal {
    formerly within 1h AgentCore::Action::"ApproveSale"::response{
        input.stock: context.input.stock,
        input.shares: context.input.shares,
        output.approved: true
    }
};

To address some of the same limitations as Fronteira, Amazon uses the Dogwood engine in the Strands SDK. By combining the policy engine with a sandbox, they prevent agents from circumventing the "firewall." This is still not foolproof: agents can use a remote browser MCP server to call APIs, avoiding detection.

The Invariant SDK features dataflow guardrails . Invariant, which was acquired by Snyk, and Cordon offer MCP proxies like Fronteira. They share the same limitations, but I would like to highlight language features such as quantifiers and loop detection.

MCP Proxies with Static Rules

Mintive , previously MintMCP, is very similar to Fronteira, except that it does not support behavioral rules. You can still detect private information leaking through static rules, but you cannot prevent malicious sequences of individually harmless calls.

Both the Lasso Security MCP Gateway and WitnessAI are very similar to Mintive: they automatically manage MCP servers and can detect leaks of information identified as private.

MCP Firewall performs a similar role but also focuses on filtering MCP responses, treating their contents as untrusted because they may contaminate subsequent reasoning.

NVIDIA NeMo is another proxy that validates tool parameters and responses against a range of requirements. However, it does not relate different tool calls to one another except through custom code.

Endram is a proxy that decides whether each call requires manual approval, something Dogwood also supports alongside more complex features.

Both WSO2 and Microsoft Global Secure Access support Cedar-like access control lists for MCP servers, with tool- and prompt-level controls.

Agent Control allows you to create guardrails in Python. These operate at the level of individual tool calls, but Agent Control also integrates with external guardrail infrastructure, such as Dogwood, whose language is more expressive.

Language Specification

AgentSpec is a specification language like Fronteira's, with a more principled design but similar features. I would like to study properties of the language, particularly ways to provide feedback when users write inconsistent rules.

Others

IBM offers MCP ContextForge , a central gateway focused more on discoverability and observability. agentgateway is also mostly focused on observability. TrueFoundry focuses on the M×N problem—M harnesses connecting to N MCP servers—and observability.

LlamaFirewall is similar in that it can inspect traces of calls and detect malicious patterns. However, it does so using a BERT-style LLM, whereas Fronteira primarily supports deterministic analysis.

Comparison Summary

Approach MCP proxying Content guards Behavioral / temporal guards
Fronteira ✅ ✅ ✅
Dogwood + Strands Box ✅ ✅ ✅
Invariant + MCP Scan ✅ ✅ ✅
Cordon ✅ 🚫 🟡
Mintive / MintMCP ✅ ✅ 🟡
Lasso MCP Gateway ✅ ✅ 🚫
WitnessAI ✅ ✅ 🚫
MCP Firewall ✅ ✅ 🟡
NVIDIA NeMo Guardrails 🚫 ✅ 🟡
Endram ✅ 🟡 🚫
WSO2 MCP ACL policy ✅ 🚫 🚫
Microsoft GSA MCP firewall ✅ 🚫 🚫
Agent Control 🚫 ✅ 🟡
AgentSpec 🚫 🟡 🟡
IBM ContextForge ✅ 🟡 🚫
agentgateway ✅ ✅ 🟡
TrueFoundry ✅ ✅ 🚫
LlamaFirewall 🚫 ✅ ✅ (probabilistically)

Conclusion

After this exercise, I no longer believe in MCP proxies as security boundaries for agents. MCP covers only part of an agent's interaction with the world. Another reason is that MCP is a leaky abstraction. Models are post-trained in specific MCP and skill contexts, so they will always prefer direct alternatives, creating friction for the user.

However, I strongly believe in the need for logic-based policies to control agents. Those policies should be enforced at the agent boundary and should probably be developed alongside the harnesses and models. I would love this enforcement to be harness-independent and provided by a third party. However, given how models are becoming increasingly harness-specific , I do not see that working in the long term.

If you have read this far, I am looking for a new opportunity where I can apply my research experience in programming languages, systems and different areas of artificial intelligence to improve the safety of agentic systems. If you are looking for someone with that background, along with the agency and pace of someone who has worked at several startups, you can find my contact details on this website.

Meet Estrella, an Undocumented Trans Woman Jailed for 9 Years, Then Deported to Mexico

Democracy Now!
www.democracynow.org
2026-10-16 08:24:14
We’re joined by Latino USA host Maria Hinojosa as she shares the story of Estrella Diamantina González, an undocumented transgender woman and trafficking survivor from Mexico caught up in the United States’ criminal and immigration systems. This summer, after serving a nine-year sentence...
Original Article

We’re joined by Latino USA host Maria Hinojosa as she shares the story of Estrella Diamantina González, an undocumented transgender woman and trafficking survivor from Mexico caught up in the United States’ criminal and immigration systems. This summer, after serving a nine-year sentence in a Texas men’s prison, Diamantina González was released, but she wasn’t free. She was immediately transferred to an immigration detention facility and then deported. Hinojosa, who has been reporting on Diamantina González’s ordeal for the last decade, followed her to Mexico in the new audio documentary “Estrella: Bittersweet Freedom for a 'Bad Mexican.'”


Please check back later for full transcript.

The original content of this program is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License . Please attribute legal copies of this work to democracynow.org. Some of the work(s) that this program incorporates, however, may be separately licensed. For further information or additional permissions, contact us.

Bark: The Toll-Free BBS for 90s Teens

Hacker News
blog.bityard.net
2026-10-16 08:22:13
Comments...
Original Article

Mon 12 October 2026

Topics: Retrocomputing

Woof! Woof!

The other day I was thinking about the first communities I found online and, perhaps tangentially, to what degree they influenced the amount of therapy I now require to function normally as an adult. Our family's second computer came from Sam's Club. It was a 386DX with Windows 3.0 but my inner nerd would have nothing to do with cheerful bit-mapped color schemes, preferring instead to exit to MS-DOS and do all necessary computing and gaming from a command prompt and text-based GUIs. Hardware-wise, it looked and felt cheap. The machine was less reliable than the cardboard box it came in. It was a Packard Bell and if you were to read this paragraph to anyone who was into computers in the 1990's, they will hear that name and then simply close their eyes and nod quietly in sympathetic understanding.

(Nostalgic Modem Noises)

Most importantly, it came with a dial-up modem. My mom's series of reactions when I told her I had plugged our new computer into the telephone line were as follows:

  1. "Huh, you can do that?"
  2. "But why would you do that?"
  3. "WHAT HAVE YOU DONE AND HOW MUCH DO WE OWE?!"

Now in my defense, as a semi-rebellious teenager eager to experience literally anything outside languid rural Midwest life, I often leaned hard into the practice of begging forgiveness in lieu of asking permission. Sometimes I even got away with it.

To give a better idea of the timeline and circumstances, the Internet as we know today it only kind of existed in the early 90's. There was email, there were message boards, file exchange programs, remote login to other systems, real-time chat (IRC) and so on. The web was new and promising and free of ads but not at all the main attraction just yet. And unless you lived in a city or attended a university with a well-funded technology department, the Internet was probably not yet accessible to you. Or for the purposes of this article, me.

But bulletin board systems (BBSes) had been around since at least the early 80's. Maybe earlier, I'm not sure. These were computers connected to phone lines. When you called a number with your computer, the other computer answered, and you could interact with whatever software the sysop (system operator) had set up. Usually these contained at least public and private message boards, but many also had places where you could download and upload files, chat in real time with others (if the BBS had multiple lines), or play games.

How I came upon the early essentials necessary to connect our computer to other computers is a complete mystery to me at this point. I didn't know anyone else with a modem and my school's computer situation was about a decade behind: "computer" classes were really typing classes taught by a cartoon cat named PAWS on Apple IIs. Back at home, at a bare minimum, I would have needed a terminal program to dial up and interact with another computer. So did I have one already or did I grab one off a shareware floppy that came in some magazine? Where did I even find the number of the first BBS (bulletin-board system) to call?

What happened next is easier to remember. I racked up quite the collection of informative text files from that first handful of BBSes I found, which generally included programming guides, hacking e-zines ( Phrack! ), some anarchy-type content, and rather entertaining but unhinged conspiracy theories. And of course, where to find more BBSes. I also clearly remember downloading as much software as I could get my hands on. Plenty of development tools, different modem terminal programs, and scads of DOS utilities. I learned a lot in a very short amount of time about BBS software, doors, Kermit, X/Y/Zmodem and ZIP files. It took about two hours to download enough data to fill up a 1.44MB floppy disk over a 2400 baud modem. (Eventually I managed to con my mom into buying a 14.4kbps modem a little bit later. I still have no idea how. Maybe because we had a free trial of Prodigy and that needed a faster modem to draw all the fancy vector graphics?)

But that all came to a swift end when my mom got the phone bill at the end of the month. In those days, local calls were free, long distance calls cost money. You paid by the minute and it was not especially cheap. The problem was, we lived in a town so small you could just about trip over it on your way to somewhere interesting, so everything outside a 1.5-mile radius was long distance. I never heard what the monetary damage was, but she did state in no uncertain terms that it would not be allowed to happen again.

1-800-YOU-NERD

(Don't actually call this, I don't know where it goes.)

One of the files I happened to grab was a list of toll-free BBSes. Or as we'd say back before more toll-free codes were added , "1-800 numbers." I didn't know exactly what I would find at these numbers, but that was a big part of the appeal. The first list I downloaded was TB01-94.TXT by Doug Schneider. Here are some others that I have in my collection from around that time frame:

I have a very clear memory of trying numbers in some semi-random order, crossing off the ones that never answered and highlighting interesting ones to come back to later. I wrote notes next to some. The crossed-off lines outnumbered the highlighted lines 10-to-1 at least. If I ran into a busy signal, it would sometimes be quite a while before I came back to it. It turned out that these toll-free computer systems came and went faster than people could update and pass around the text files. The vast majority of the numbers I called responded with any of:

  • Endless ringing
  • Busy signal
  • " DOO-BE-DEEP The number you have dialed is not in service. Please try your call again later."
  • Fax machine sounds (similar to, but audibly different from modem sounds!)
  • Someone picking up and answering, "Hello?"

When a modem answered, there was still a fair chance that it wasn't anything useful to me. Many did not automatically detect your modem speed, so good ol' "2400 8-N-1" was not always a given and the listings were not always super accurate or up to date. Lots of these toll-free numbers required a pre-arranged login to get anywhere fun. I couldn't even tell what many of them were. Either just a prompt that didn't respond to anything sensible like help or dir , or acronyms/names that I couldn't decipher. (I wish I had kept logs of my terminal sessions, figuring them out would be a lot easier now!) A few numbers would let you register an account, but the content inside tended to be extremely boring to a teenager without disposable income. Very little about computers, music, video games, or chatting with other random people.

That is, until I found BARK.

Ephemeral Surrealism

It turns out BARK was a toll-free electronic message board where teenagers were encouraged to hop on and gab about teenage things. It was a little hard to believe that something like this existed among the sea of non-profit and government-related toll-free BBSes. To the point that when I woke up the next morning, I was beyond 100% positive it was just another one of those crazy dreams you have where you accidentally luck into something amazing that changes your life forever, only to then wake up to the cold gray reality of your previous existence. But I sat down at the computer again later in the day to resume my computing activities and found that this time my own brain was not actively trying to crush my hopes and dreams. For a change.

Unfortunately I kept little evidence of my time on BARK so most of this is from memory, corroborated by the remarkably few sources I could find on the modern web. These are some things that I do remember. Some with a high degree of resolute certainty and some not.

  1. When you signed up, you had to answer a few basic questions such as how old are you, what kind of music you listened to, what was your favorite TV show, etc. Afterward, BARK would "verify" you by calling you back on the number you provided. I had to quickly figure out how to configure my computer to answer the call and make sure nobody else in the house answered the phone before the modem did. And come up with a good explanation for my mom as to why she shouldn't answer the phone, which was by far the bigger of the two concerns.

  2. A lot of the users had signatures with funny sayings ( taglines ) in them. Writing and collecting funny taglines became something of a brief sub-hobby for me at one point.

  3. I feel like BARK only had message boards. Maybe a file section. I don't remember there being any games to play, real-time chat, or anything other typical bonus features of BBSes at the time.

  4. I think I found BARK while it was popular, but it got more popular soon after. Eventually, it got to a point where it would take hours of re-dialing until I connected ( if I connected) and even then, there was a time limit before they booted you off to free up the line for someone else. This wasn't nearly enough time to catch up on popular boards and compose replies, so you were more or less forced to use QWK . When you connected, you could download a file containing all of the new messages that were posted since you last logged in. You would then disconnect, read the messages offline, maybe write some replies, and then upload those replies the next time you logged in.

  5. The admins did their best to keep behaviour in line with the rules, but there was just entirely too many messages to proactively police. I encountered flame wars for the first time. Bans and deleted threads were very common. I tended to avoid the busiest boards (and their weird drama) and mostly stuck to ones related to computers and video games.

At some point, the admins posted an announcement that funding for BARK was being withdrawn and the BBS would shut down soon. A lot of us were understandably very upset by this. This was actually the first time I learned that BARK was run by PolyGram, the record company.

For a few months after BARK closed, I kept in touch with a couple other BARK users and we would snail-mail each other floppy disks back and forth to share games, fonts, misc software, wallpapers, and whatnot.

Threadbare History

While trying to piece together BARK's history, it became apparent that there is very, very little information about its existence left on the modern web. Pretty much just a few Reddit threads and very brief mentions of it from Parker Reilly , the guy who created and managed it. The Internet archive has a well-OCR'd collection of Boardwatch Magazine that doesn't have anything about it. Even the fact that there were even toll-free BBSes at all seems to have been largely forgotten. But here's what I've able to piece together.

The BARK BBS was conceived as a market research tool by the record company PolyGram. Someone with the authority to spend money at Polygram theorized that the current generation of teenagers with access to computers likely also had disposable income to spend on music. Instead of placing random bets on which invidual artists or genres would be popular, why not ask the kids themselves? Or better yet, set up some place where they can gather and discuss their musical tastes with each other and chat about upcoming indie bands. Then simply read what they said to discover the hot new trends in pop culture and music. Or at least that was the idea.

Oh, and since long-distance calls were fairly expensive, why not give it a toll-free number?

This Reddit post is a fairly personal first-hand account from Max, the guy who was the BARK sysop for a good percentage of the time it was online. It's well worth reading the whole thing but here are a couple highlights:

Bark BBS was some executive’s idea at Polygram Records for which we ultimately worked. Of course, I knew Polygram as they were publishers of many of my favorite rock artists. But what was the idea behind Bark? Parker explained that Polygram wanted to do marketing research through Bark and find out what young kids of high-school age wanted to listen to and what kind of music they were going to buy, so that Polygram could produce such artists and sell the records. At the moment the strategy was not very well defined and Parker was the chief editor with the job of running Bark and another guy was joining soon to be the marketing director.

Max continues:

So what did I do initially? We had an 800 dial-in number and four modem lines anyone could dial into. Parker had previously created relationships with many high schools across the country and in each school there was supposed to be a “representative” who would communicate with other representatives from different schools about pop culture, music etc. and then relay everything to his fellow students at the school. It was going to be a beautiful community of children all across USA and Polygram would know what their tastes in music are before other labels discovered the artists kids wanted to buy records of. I think they also tried publishing a magazine for the school kids, but probably one one or two issues actually came out as far as I remember.

BARK initially ran 4 instances of the PCBoard BBS software on a single MS-DOS machine (one instance per line) but was upgraded over time until eventually they were running an unspecified Mac with a "fault-tolerant" (possibly RAID-1) 2GB drive and 56k modems. From what I can tell, they got up to at least 16 phone lines, maybe more. Max goes on to describe how the board eventually devolved into barely-contained chaos until PolyGram finally realized they weren't getting the insight they had hoped for after approximately two years and pulled funding.

Aside from the BBS listings, all that I managed to keep from that time period were two two printouts of BARK messages that I downloaded at some point. Most likely, I printed these either to keep myself amused in a boring junior-high class, or to share them with a friend of mine who had similar taste in video games. Possibly both.

Bark Scan 1 Bark Scan 2

Random Acts of QWK

One of the few references to BARK you can find today is this Reedit post from a guy who claimed to have some QWK messages from BARK and was looking for help reading them. His post was a decade hence, but I messaged him on a whim and by some miracle of the Internet, he replied instantly and graciously gave me a copy to peruse. This filled in a lot of the gaps in my memory and I am eternally grateful!

BARK bulletin boards were called "Areas" and there were quite a few. If I had to guess, I would say there were probably Areas for fashion/clothing, skateboarding, TV shows, movies, and whatever else a record company exec would assume teens were into at the time. The Main Board was much more active than any other Area.

To read QWK files, you need a program they called an "offline mail reader." There were many of these but Blue Wave was one of the most popular and is proper old-school shareware. I remember using it, but I may have switched to something else later. Page 27 of Boardwatch from December 1992 mentions it in a list of offline mail readers. There were versions for MS-DOS on 8086/8088, for the 80386 (higher memory), and OS/2.

To get it going, I fired up a copy of DOSBox-X and went through the process of installing Blue Wave, pointing it at PKZIP version 2.04g, and copied the QWK messages into the DOWN directory. Here's what you're greeted with when you fire it up:

Blue Wave 2.12 Intro

After 10 seconds of being forced to read the nag screen, it beeps and drops you at the main menu (the inverted block at the top of the screen is my mouse cursor):

Blue Wave Main Menu

From here, we select which QWK file ("mail packet") to open:

Blue Wave Packet Selection

Once you open a packet, you're at the Packet Menu:

Blue Wave Packet Menu

And then you're at the Area selection screen:

Blue Wave Areas

The QWK packet was assembled for you by the BBS software on-the-fly, so it knows who you are and thus can tell which messages were addressed to you. These are marked as "personal" messages by the mail reader. I don't remember if BARK supported non-public messages at all, but in this case, all messages are public even when addressed to another user. So "personal" in this case just means "public messages addressed to you. There's really nothing else special about them.

Blue Wave has all kinds of options for viewing and managing messages. You can mark a message for deletion and the "kill" it (delete it) later, mark it read, sort the messages any way you want, etc. I never got too fancy with any of the reader options, I'm sure I just read through whatever was new, replied to a few, and then just deleted the old QWK files when done with them.

Fun fact: Blue Wave has a "Boss Mode." If you press Alt+B, it blanks the screen and shows a C:\> prompt. This is of course hilariously useless because you can't even type anything into this screen. And Alt+D swaps you out to a real DOS prompt anyway...

Once you selected the Area to read, you were (finally) presented with a message list. Most BARK users used their real names so to avoid doxxing anyone, I've removed all last names from the following screenshot (except for Cheese Girl, I guess she gets to fend for herself):

Blue Wave Message List

The first column is the message ID, I don't know if they wrapped around or what. You could sort on any of these fields, but unsorted (presumably the order in which they appear in the QWK file) was the default. For some reason, sorting by message ID or date isn't an option. I notice that subjects are typically grouped together but other than that, I can't tell how the messages ended up in the order they did. Maybe some quirk of the BBS software.

Finally, reading the message. The QWK files I was given contained messages from the last few days of BARK, including a sign-off from the Sysop, Max. (I removed his address and shifted the last few lines up to fit it all in one screen.)

Max says goodbye

If you wanted to reply to a message, you were dropped into a basic text editor that came with Blue Wave called TED3.EXE, but you could tell it to use any editor you wanted.

TED3 Reply

Some people might ask why I'm not putting these last-known BARK messages online. Believe me, I'd like to, but there are several things holding me back:

  • They're not actually mine to share, they belong to someone else. His (likely real) name and messages are in them. It would be like putting someone else's email folders online.
  • There are thousands of messages here, almost all have some personal information, and I don't have the time or desire to sanitize all of them. And I definitely don't trust AI to do an adequate job. Lots of people put their phone numbers and addresses in their signatures, even more so when they found out that BARK was shutting down, in the hopes of staying in touch with friends they met there.
  • Most of the messages are just not very interesting! More than half the messages are reactions, rants, flames, and unfortunately more than a few homophobic insults.

But here are a few of the more interesting signatures I ran across while reading some of the old messages:

Crazy Chicken Man

Cyberpunk

Necromancer

Chip

Psychadelic Rabbit Guy

Tuck

All Good Things...

(Yeah, that's a TNG reference. Deal with it.)

BARK was fun while it lasted, and I tried to make the best of the other toll-free BBSes that were still around. But none of them had the vibrant community of BARK. As stated earlier, most toll-free BBSes were set up for very specific purposes and didn't tolerate a bunch of teenagers calling in and engaging in what might be very charitably called digital loitering. In fact, a good many of them locked their doors to new users due to the sheer number of BARK refugees trying to find a new toll-free home. I resurrected my 800-number dialing quest and kept at it for months, but never did find anything even in the same league until our household finally had real dial-up Internet access a couple years later.

I spent what was then widely considered an embarrassing amount of time on the Internet in the late 90's but never ended up hearing much about BARK at all. People would (and still do) reminisce about their pre-Internet BBS days, but BARK appears to have been almost entirely forgotten. That's what drove me to write this: I think it deserves to be remembered as the odd and improbable little oasis it was. There is precious little to remember it by, but I still consider BARK to be the first real online community I was a part of. So this is me, doing my best to make sure it doesn't fade into complete and total obscurity. If any other BARKers come across this, do feel free to contact me and I'd be happy to add your memories and contributions to this page.

Miscellany

Everything in this section consists of random thoughts and footnotes that didn't fit well into the sections above. If you feel like you got the story you wanted, please feel free to close this tab guilt-free.

BARK is not an acronym and doesn't seem to actually mean anything apart from being a snazzy name dreamed up by someone in Polygram marketing who thought it would resonate with the younguns of the day. Here's the trademark filing.

The guy who managed (and for some time, probably ran) BARK was Parker Reilly. He's apparently had an interesting career around music and media, most of which I learned from his bio on Solfege.tv . His band "The Sons" had one of their songs in the movie Dumb and Dumber . Which seems extremely appropriate as I was a huge Jim Carrey fan at the time. According to his LinkedIn page, he's had a number of other music/media-adjacent projects and companies since BARK.

You can read about the history and conclusion of PolyGram on Wikipedia but what's really interesting is that the PolyGram US web site is still online and is quite the delightful (if somewhat broken) 1990's web time capsule. Although maybe "time capsule" is too harsh, someone (maybe an LLM) has been adding what seem to be SEO-optimized, verbose but content-free articles like Best Concerts of 2025: Overview with the site's original CSS.

If you want to go deeper into finding more BBS lists (including toll-free ones), you might have luck digging through various popular FTP/HTTP mirror sites of the time on archive.org from the mid 90's, or trolling through postings on alt.bbs.lists Usenet archives from that period as well.

Other than the toll-free BBS lists, I didn't keep much digital data from that frame because I was not a data hoarder and durable physical media was not cheap. However, among the few scraps of paper I managed to keep, I found out:

  • In 1996, one of the toll-free BBSes must have offered free email accounts with an @access.gov address, because I have a printout of some messages sent back to me by an FTP-by-email gateway at [email protected] (and/or [email protected] ?). So that would be first real Internet email address I had. The domain does not appear to exist anymore.
  • I also have a printout of a tutorial about how to find and download files entirely over email. It's called "SNARFING FILES BY MAIL" and describes how to search for and download files from the Internet, which was almost certainly what I was attempting to do with my fancy @access.gov email address. Unfortunately, the header of the file was mangled by accidental over-printing, so I can't quite make out the author.

I do remember somewhere in this time frame being able to access limited parts of the Internet through these toll-free BBSes. I'm sure I was able to access Gopher and at least one early text-based World Wide Web browser which was almost certainly Line Mode Browser .

If this kind of thing interests you, do be sure to check out Jason Scott's BBS Textfiles which includes all kinds of text files found on BBSes from the 80s and 90s. Including about a dozen other toll-free BBS listings. And you may even want to check out Jason's movie, BBS: The Documentary .

Other fun BBS-related links that I ran across while researching this:

Qualcomm Legally Proves Arm Breached Its License, Wins $2

Hacker News
www.techpowerup.com
2026-10-16 08:16:42
Comments...
Original Article

A Delaware jury has found that Arm breached its Architecture License Agreement (ALA) with Qualcomm, but the award is about as small as it gets. Reuters reports that Qualcomm gets just $2 in nominal damages, $1 for each of the two claims it won. The jury agreed that Arm withheld software patches and verification tools Qualcomm needed to validate its custom Oryon CPU cores, and that Arm intentionally interfered with Qualcomm's business with Meta. That second claim ties back to October 2024, when Arm's 60-day notice to cancel Qualcomm's license ended up with Bloomberg, a leak Qualcomm pinned on Arm. Arm won the rest of the claims, most of which were about pricing under its separate Technology License Agreement (TLA).

The bigger question, however, is still open. Judge Maryellen Noreika has yet to decide whether Arm's breach lets Qualcomm stop paying royalties under the ALA for five years, which, by some estimates, could be worth billions of dollars. Arm argues that provision is an unenforceable penalty. Unsurprisingly, both sides are spinning the result in their favor, with Qualcomm saying it was "gratified" by the verdict and Arm pointing out that it won most of the claims. This is the second round between the two companies. In December 2024, a jury found that Qualcomm didn't breach its license by acquiring Nuvia, and the court entered a final judgment in Qualcomm's favor in September 2025. Arm has since appealed that ruling, and it's reasonable to expect an appeal here too, depending on how the royalty question goes.

"Abolish & Replace ICE": Rep. Analilia Mejia Blasts ICE for Secretly Using NJ Warehouse

Democracy Now!
www.democracynow.org
2026-10-16 08:13:01
Earlier this week, ICE confirmed it had secretly used a federal government warehouse in Roxbury, New Jersey, to stage and to process detentions in September, despite an order from a judge barring the site’s use until an environmental study was complete. ”ICE and this administration cherr...
Original Article

Earlier this week, ICE confirmed it had secretly used a federal government warehouse in Roxbury, New Jersey, to stage and to process detentions in September, despite an order from a judge barring the site’s use until an environmental study was complete. ” ICE and this administration cherry-picks which laws it adheres to, and then breaks due process and equal protection for the many,” says New Jersey Democratic Congressmember Analilia Mejia. “This administration is just moving with a level of impunity and cruelty that, frankly, should shock every single American.”



Guests

Please check back later for full transcript.

The original content of this program is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License . Please attribute legal copies of this work to democracynow.org. Some of the work(s) that this program incorporates, however, may be separately licensed. For further information or additional permissions, contact us.

The road to iroh 1.0

Lobsters
www.iroh.computer
2026-10-16 08:02:05
Comments...
Original Article

It is done. After four years of work and various pivots we have released iroh 1.0.

We have an expanding web site describing how iroh works under the hood, but we think it is important to also understand why we made the decisions that led to the current iroh. So here is a trip down memory lane / our commit history which highlights major turning points and design decisions.

Perhaps more importantly, this post also covers some things we considered but ended up not doing .

Iroh started as a rust implementation of ipfs . We got pretty far implementing various ipfs protocols and had interop with existing ipfs implementations working. Our goal with iroh was to target lightweight and resource constrained devices such as mobile phones.

One area where we were unhappy with existing protocols was blob transfer. We started a working group within the ipfs community to come up with a new protocol, called the move the bytes working group .

For that working group, we worked on a proposal for new blob transfer protocol. We wrote a small library called krakensync . Krakensync used BLAKE3 exclusively for content addressing because BLAKE3 supports verified incremental streaming of large blobs.

After a few days we had a bare algorithm, and wanted to add networking to it to make the demo feel more real. We had only two days before the next meeting, and adding networking via rust-libp2p seemed impossible (Remember that this was before LLM coding assistants!).

I had a tiny bit of previous experience with QUIC , and remembered from a project of a friend of mine, quinn-noise that quinn is both hackable and has a simple idiomatic rust API. So I tried to add networking via quinn and found it an absolute joy to work with.

— Rüdiger

In parallel to working on the ipfs compatible iroh, we worked on a side project to implement a single narrow real world use case: transfer of deltachat chat history when provisioning a new device. The technical task was to transfer a single large blob of backup data to a new device. There were hard constraints regarding disk and network usage. And the transfer had to be resumable.

We found that we could not implement this very narrow use case with our ipfs based iroh implementation. Doing so would have had less than optimal network performance, and would have pulled in a very large dependency tree.

So we started writing a lightweight sync library from scratch, using QUIC as the networking layer and BLAKE3 verified streaming for large blob transfer.

Despite our best efforts, our main project was still far away from the theoretical limits. Meanwhile our sync side project showed what is possible. So we made the decision to no longer pursue the goal of staying compatible with existing ipfs implementations.

Instead of multiaddrs , endpoints were identified by an Ed25519 public key.
Instead of multihashes , we had BLAKE3.
And instead of multiple transport protocols we had just QUIC.

The new iroh was just QUIC based networking using quinn and blob transfer using BLAKE3 verified streaming. Compared to the previous version, the functionality was anemic. But the single thing it did, it did with close to optimal performance. It was a lightweight enough dependency that deltachat could justify including it into their rust code base . And suddenly we had both networking and sync deployed in a real app used by thousands of people across various platforms (windows, linux, iOS, android). The old code lives on in beetle .

We decided to use just QUIC. But QUIC as specified in RFC 9000 has clear client and server roles, where the server is identified by a certificate chain. At the time we had to add a somewhat Rube Goldberg construction on top to make QUIC work for peer-to-peer connections, a self-signed certificate carrying the real public key in a custom X.509 extension , with a signature binding the two.

Also, rustls is a heavy dependency, and its default crypto provider is a C dependency. So there was a temptation to replace the entire TLS encryption scheme with a protocol based on noise that is made for peer-to-peer connections from the start.

We ended up sticking with TLS as the industry standard. Without using TLS iroh would not really be QUIC, just reuse some of its parts. But we were still unhappy about the self-signed cert.

Thankfully right around the time when we were discussing this raw public keys in TLS support was merged into rustls . So we didn't waste any time and switched to raw public keys in TLS soon after.

One thing we were not yet happy with: for the deltachat chat history transfer to work, both devices had to be in the same network. Ideally this should work in all cases where the two devices are somehow connected to the internet. We also wanted these transfers to be fast . So what we needed was hole punching . We looked at various systems that implement hole punching. Our goal was to get holepunching to work reliably, even at the expense of compromising p2p purity. If we would need a small server to help, so be it.

Of all the existing open source implementations of holepunching, we found the tailscale approach best suited to our requirements. So we implemented something that was initially very similar, with good results. This was a huge effort , but once we merged it we had hole punch rates to be proud of. In most normal circumstances we punched holes almost immediately, and in the few corporate networks where hole punching was impossible, at least we could still transfer data via relays. It just worked .

We achieved our goal of having a simple p2p library that just worked. But the API was still anemic. It was something that experienced rust teams such as deltachat could include, but not yet attractive to p2p application developers. So we decided to gradually add more functionality. One of the first things we did was extending the blob related API to expose more functionality for BLAKE3 verified streaming. In parallel we also optimized the verified streaming by implementing some advanced features such as BLAKE3 chunk groups .

But even with blobs included, it was not enough. We had very useful functionality for experienced rust teams, but at the time that wasn't exactly a large group. So we decided to add a document abstraction that would make iroh viable as a batteries included p2p application development framework, where ideally you would only need to add application specific code.

As part of the push to make iroh approachable to more developers, we started to publish language bindings to almost all major languages. This worked well and was frequently used, but turned out to be a lot of work for us because of the frequent API changes on the road to 1.0.

As we were adding protocols we also had to solve protocol negotiation .

One common pattern is to add a little handshake protocol on each stream where one side can propose a protocol and the other side can either accept or reject. But that would add overhead for every single stream and take us further away from just peer-to-peer QUIC.

We found that complex schemes for protocol evolution are often a mirage. Truly evolving a protocol in a backwards compatible way leads to a combinatorial explosion of variants that have to be tested. It is really hard to get this right.

So we decided to keep things simple and use the ALPN TLS extension . The connecting side proposes a list of ALPNs, and the server side either chooses one of the ALPNs or refuses the handshake. This happens directly during the QUIC handshake, so it has no overhead other than the raw bytes of the ALPN string.

All in all we are very happy with this decision. Projects like Media over QUIC use QUIC streams extensively in a very creative way , and since we provide just raw QUIC streams we can support these approaches out of the box.

It is not entirely without downsides. The ClientHello containing the ALPN is unencrypted, so on-path observers can see which protocol is used by decoding ClientHello s. One way to work around this is to use a common ALPN such as h3 and then just negotiate the actual protocol later. In a future version of iroh we might support encrypted client hello .

Another consequence of the decision to use ALPNs is that two iroh endpoints talking multiple protocols will have not one but multiple connections open (A QUIC connection is always for exactly one ALPN). We share some internal state for these connections so that e.g. hole punching doesn't have to start from zero.

Sendme and dumbpipe

To show off iroh, we published two small tools: sendme and dumbpipe . These were meant to just show off different iroh capabilities, but also be useful on their own.

To this day we use sendme every day to send logs around. And there are a large number of popular sendme clones: Lightning P2P , alt-sendme , ARK Drop Desktop , DataBeam , sendme-egui , and iroh-send .

Dumbpipe also inspired a number of projects: pai-sho , iroh-ssh , do-ssh , and iroh-ssh-android . But more importantly it showed how useful just direct connections by endpoint id are a building block.

For a long time we did not have the ability to dial an iroh endpoint by endpoint id only. You needed the id of course, but you also needed an additional piece of info: either an ip address or a relay url. Sendme works like this to this day.

But the additional information is not stable. An iroh endpoint can frequently change its public IP address, e.g. when the ISP assigns a new public IP address. It can also change its home relay when it moves to another geographic region. In addition, dealing with tickets is cumbersome for large scale systems where you work with a large number of peers.

In many peer-to-peer projects the mechanism to implement such discovery is a distributed hash table. But our previous experience with DHTs was somewhat traumatic. We deciced very quickly that we did not have the resources to implement a DHT and get adoption for it . So just like with the relays, we compromised a bit on peer-to-peer purity. We explored various centralized options such as cloudflare workers.

But right at this time we discovered an emerging project that would allow us to have our cake and eat it too. Pkarr is the incredibly simple idea of storing signed DNS records on the bittorrent mainline DHT . We ended up using the pkarr format for our centralized address lookup service, but also giving iroh users the option to use the mainline dht directly to get a fully decentralized address lookup system.

Mainline has some unfortunate limitations that are unlikely to go away any time soon. So I started writing a DHT , using on iroh 0-rtt connections. But as of now this is strictly an experiment that pushes the limits for iroh connections, not a production tool.

— Rüdiger

After working on iroh as a batteries included toolkit for some time, the API surface was increasing substantially. And we could not guarantee the same level of quality for all parts of the API. In addition, we noticed that each of our users was using a different subset of the API. The one thing everybody had in common was that they needed dial by endpoint id and connections that reliably hole punch. So we made the decision to narrow the scope of what iroh is significantly. From now on iroh would be just direct connections dialed by endpoint id. The other functionality, that several teams depend on, was moved into separate crates .

We were now at the enviable position that several important projects depended on iroh. But we needed freedom to evolve iroh, and did not want to do so on a feature branch due to previous bad experiences with this approach. So we made our first long term stable release, 0.35 and started the canary series for people that wanted to stay on the bleeding edge on the way to 1.0.

In retrospect it would have been fine to call this iroh 1.0. It is a rock solid version of iroh that many projects depend on even today. But we are happy with the decision to develop on main and let people follow along.

In addition to various functionality changes we also spent quite some time thinking about naming. For example, the identity of an iroh endpoint used to be called NodeId . Back when iroh came as a large binary with several different built in protocols, this made a lot of sense. Also what is now known as address lookup used to be called just Discovery . But we found that discovery isn't really a good name for the process of finding relay or ip addresses for an existing endpoint id. After all you don't discover the endpoint id, you just look up additional data for it.

There are some address lookup providers such as mDNS that actually discover new endpoints. But this is not covered by the AddressLookup trait .

Iroh was working just fine in most cases. But there were some dark clouds on the horizon. To get one of the main features of iroh, seamless migration of the underlying transport, to work reliably, we had to do some not so nice hacks . In the short term this wasn't really a big problem. But we knew that the current approach would limit us substantially in the future.

So we made the decision to fundamentally rework how iroh works under the hood. We were already using multiple paths of course, but QUIC was unaware of all of this. Which was the root cause for various problems.

So far we had used quinn and contributed a few improvements. But now we were doing something fundamentally new: extending quinn to support multipath. For a long time we worked with the assumption that we would upstream our changes, but as the diff grew this became increasingly unlikely. So we decided to fork quinn and maintain our own QUIC implementation, noq .

Configurable key algorithms

A frequent request for iroh was to use key algorithms other than Ed25519. We ended up deciding against it. Many of our current systems such as pkarr address lookup are only ever going to work with Ed25519 keys. So while an iroh version with support for e.g. secp256k1 or P-256 would technically be straightforward, it would make iroh more complex. Our key encoding for the TLS handshake is already key agnostic, so we can likely add support for additional key algorithms without breaking the wire format.

Post quantum signatures

Currently standardized post quantum signature algorithms have very large public key sizes. So supporting them would require us to change from the endpoint id being the public key to the endpoint id being something derived from the public key to keep the size manageable.

Encrypted ClientHello

Encrypted ClientHello has recently been standardized . We might want to use it or a very similar mechanism to hide handshake metadata such as the ALPN.

In the four years we have been working on iroh we have written a lot of code, without any LLM assistance. We have thrown away almost as much code. What remains is a minimal library that heavily relies on existing standards and gives you authenticated, encrypted, direct connections to any endpoint, addressed by nothing but its public key.

The road to 1.0 was anything but straight, but certainly extremely exciting and interesting. And we are not at the end. Iroh 1.0 just means that the wire format and API are stable. But there are various extension points both in the wire format and in the API, and we continue to improve things under the hood.

Meanwhile we can't wait to see what you build on iroh.

Iroh is a dial-any-device networking library that just works. Compose from an ecosystem of ready-made protocols to get the features you need, or go fully custom on a clean abstraction over dumb pipes. Iroh is open source, and already running in production on hundreds of thousands of devices.
To get started, take a look at our docs , dive directly into the code , or chat with us in our discord channel .

Burger King Japan data breach exposes 11 million customer records

Bleeping Computer
www.bleepingcomputer.com
2026-10-16 08:01:29
Burger King Japan, the Japanese subsidiary of global fast-food giant Burger King, disclosed a major data breach after attackers accessed a server containing 11.18 million customer records. [...]...
Original Article

Burger King

Burger King Japan, the Japanese subsidiary of global fast-food giant Burger King, disclosed a major data breach after attackers accessed a server containing 11.18 million customer records.

Founded in 1953 in Florida, Burger King is now a multinational fast-food chain with nearly 20,000 locations worldwide, including 350 in Japan.

In a Thursday press release, Burger King Japan said it concluded a follow-up investigation on October 13 and apologized to customers whose data was stolen in early October and leaked online.

The breached servers stored the personal information for users of the company's official smartphone app, including their names, dates of birth, gender, email addresses, phone numbers, and order history.

"We identified a potential unauthorized third-party access to the system that manages member information for our official app and conducted an investigation," Burger King Japan said .

"As a result, it was determined on Tuesday, October 13, 2026, that unauthorized access occurred between Friday, October 2, 2026, and Wednesday, October 7, 2026, resulting in a leak of member information. Upon becoming aware of the unauthorized access, we immediately blocked access from the source in question."

However, the company says the compromised server did not store customer credit card numbers and that it found no evidence that the threat actors accessed user credentials.

Burger King Japan has reported the breach to Japan's Personal Information Protection Commission (PPC) and is now also investigating how the attackers accessed the compromised server, with help from external cybersecurity experts.

"We sincerely apologize for the great inconvenience and concern this situation has caused to our customers and all others involved," it added. "At this time, no secondary damage, such as fraudulent use, resulting from this incident has been confirmed."

The fast-food chain also warned affected customers to watch for suspicious emails, SMS messages, and phone calls that may impersonate Burger King Japan, and to avoid clicking URLs, opening attachments, or entering member information or passwords.

This incident adds to a wave of cyberattacks that have impacted several major Japanese companies since the start of the year, including entertainment system maker Daiichi Kosho , cloud and digital infrastructure firm IDC Frontier , Japanese publishing giant Nikkei , private railway operator Keio , car-sharing service Times Car , cloud and data center service provider Sakura Internet , taxi operator Nihon Kotsu , telecommunications giant KDDI , and many others.

Macnica researcher Yutaka Sejiyama has logged 119 cybersecurity incidents involving personal information theft or exposure this year and found that attackers are now probing websites and APIs for access-control, configuration, and authentication weaknesses, and exploiting known (n-day) vulnerabilities.

article image

Once attackers have valid credentials, only 37% of their actions are blocked

Overall prevention scores can hide what happens after initial access. Once attackers are using valid credentials, prevention drops sharply.

The Blue Report 2026 measures defenses technique by technique across 338 million simulations run in customer production environments.

Get the report

How to dress a tech oligarch: The Social Reckoning’s costume designer on Zuckerberg’s style evolution

Guardian
www.theguardian.com
2026-10-16 08:00:10
Susan Lyall worked with actor Jeremy Strong to research the Meta CEO’s favorite Nikes and luxury sweaters The first Aaron Sorkin Facebook movie, 2010’s The Social Network, helped cement the early aughts image of Mark Zuckerberg rebelling against corporate norms in rumpled hoodies and T-shirts. The f...
Original Article

The first Aaron Sorkin Facebook movie, 2010’s The Social Network, helped cement the early aughts image of Mark Zuckerberg rebelling against corporate norms in rumpled hoodies and T-shirts.

The follow-up, The Social Reckoning, is carbon-dated from 2019 to 2021. This is “post-hoodie”, as the movie’s costume designer, Susan Lyall, describes it, “post-thumbing his nose” to formality. It is also peak robot. Zuckerberg’s reserved wardrobe of suits or interchangeable long-sleeved shirts echo his chilling composure throughout, even as fury simmers under the surface.

The costume was based on deep research by Lyall and also by actor Jeremy Strong who, she says, is “very into costume”. Having worked together before, on the Sorkin movies Molly’s Game and The Trial of the Chicago 7, they would text a lot during the preparation process.

“He reaches out before I even get to reach out to him. It’s my third movie with him, so I’m pretty used to it. He’s very proactive. He’s one of my favourite actors because of that. He would know exactly where [Zuckerberg] wore what. He wanted the exact Nike shoe – the footwear was very important to him – and the exact Brunello Cucinelli T-shirt and sweater, and so on,” she says.

Strong has become notorious for method acting, and method dressing, too, seems to be part of his process. “It’s sort of the first step in the performance. That and the haircut,” says Lyall.

The conversations went deep. “It’s actually kind of nerdy, you know, to sit there and talk about the color of the shoelaces. There aren’t that many people who want to talk about that. I always joke with him, if the acting thing doesn’t work out, you can have a position in my department!” she says.

Lyall found those Nikes – to be specific, the 2018 Nike Flyknit trainer in black anthracite – on Grailed. For the sweaters, it was Strong, she says, who worked out how to reach the eye-wateringly expensive Italian luxury brand Brunello Cucinelli, in order to buy specific pieces, “because we don’t want the latest. We want stuff from five or six years ago, and they were very helpful at procuring it. And that was because of him. He was really proactive.”

Lyall has spent a lot of hours thinking about how tech oligarchs dress. Not only Zuckerberg but Elon Musk, Jeff Bezos and others too, who were partial inspiration for another of her recent credits, the 2025 Jesse Armstrong movie Mountainhead about four devilish plutocrats.

A group of four friends talk in a luxurious living room
A still from Mountainhead (2025), directed by Jesse Armstrong. Photograph: HBO/2025 Home Box Office Inc. All Rights Reserved

They, too, wore a lot of Brunello Cucinelli. That brand sells cashmere cardigans for $16,500 and ribbed sweaters for $4,600. Amusingly, it currently has the Immanuel Kant quote “beauty is the symbol of the morally good” in prime place on its website homepage.

In Lyall’s view, Brunello Cucinelli is a “safety net for people like Mark Zuckerberg. If they’re not sure about what they’re wearing, if they pay a lot for it, they feel a little better about it. You know, if this little sweater is $2,000, it must be good. It’s kind of a security blanket, or just an affirmation of your own success. You’re going to be OK if you’re wearing this tasteful thing.”

The Zuckerberg of The Social Reckoning had moved on from the earlier antifashion stance that prompted him to declare, in 2014, that he was “not a cool person”, and only wore grey T-shirts because he wanted to make “as few decisions as possible … I feel like I’m not doing my job if I spend any of my energy on things that are silly or frivolous.”

By the period captured in the movie, says Lyall, “I believe Zuckerberg was trying to be relatable, but also starting to understand Silicon Valley’s obsession with taste and the cost of things.” He was also more buff than he had been. In her interpretation, he seemed to be thinking: “My fit physique looks very nice in this clingy but expensive sweater. And ‘if you know, you know’ – I think there’s a bit of that. But I also think, he’s nouveau riche without being gaudy. It’s not without taste.”

Since then, Zuckerberg’s outward presentation has graduated to outright peacocking.

For the tech billionaires, in general, says Lyall: “I think something happened. I think they have discovered a new way to flex. And it’s not quiet luxury. It’s loud.”

For Zuckerberg specifically – whose makeover came suddenly with ostentatious gold chains, Loewe shorts and Alexander McQueen suits embellished with dragonflies in around 2024 – it could not feel much more strategic.

Mark Zuckerberg wearing a baggy T-shirt gestures while he speaks
Mark Zuckerberg speaks during the Meta Connect conference on 25 September 2024 in Menlo Park, California. Photograph: Godofredo A Vásquez/AP

Dabbling with fashion allows Zuckerberg to look like a different guy from the one we have seen so many times sweating in a suit in front of Congress. It also provides a distraction from the reality of his products and work, giving him something soft and harmless to talk about.

Zuckerberg has even used the classic fiction writer’s trick of embedding backstory within his jewellery. In 2024, when he started wearing a large, gold pendant necklace over his T-shirt, he claimed it wasn’t just because he wanted to look like a hip-hop star, as the internet understandably concluded.

When finally asked about his pendant in an interview (“oh this?” he said, with an approximation of spontaneity) he explained that it was embossed with a Jewish prayer he sings to his kids every night at bedtime, thus reminding the public of his humanity – his faith, and the importance he places on being there for his children.

This year, as Meta has recruited fashion stars such as Kylie Jenner to market its smart glasses, he has spent yet more time courting fashion, attending Prada shows and the Met Gala.

Last month, he gave the New York Times an interview purely about clothing, claiming that he buys almost all of his wardrobe on Instagram himself – which sounds extremely decision-requiring and time-consuming for a person of his workload.

Many of the labels he mentioned were more contemporary, less oligarch-coded, among them Mike Amiri, a purveyor of $400-ish T-shirts, with whom he has worked on bespoke items including the “Building is my love language” he wore to present Muse at a Facebook conference. Online, too, when he buys something of the $200-ish, rather than $2000-ish price tag, he may even pop into the comments, when complimented on that item, to draw users’ attention towards it (“It’s @johnelliottco – I’m loving their stuff recently”).

Just as the new personal AI assistant Muse has been fashioned to look utterly adorable – surely such a cute fluffy Labubu-like creature could never spark an apocalypse! – Zuckerberg’s own continuing makeover appears conceived to make him a more friendly and, ideally, more human.

In fashion, though, it’s not as simple as ticking the box to confirm you are not a robot. When he explained his interest in style to the New York Times , for example, he said, “I think the company is an instantiation of my values” and claimed he wanted to “be intentional about how I program that”.

A turn of phrase that suggests that, under his vibrant new clothing, the cashmere-clad machine depicted in Sorkin’s movie may not have been properly deactivated.

Headlines for October 16, 2026

Democracy Now!
www.democracynow.org
2026-10-16 08:00:00
Teenage Shooter Kills Three Children and Teacher in Bend, Oregon, Neo-Nazi Teen Allegedly Attempted Mass Shooting at Illinois Hindu Temple, But Rifle Jammed, Trump Cancels Hegseth’s Plans to Live-Stream Firing Squad Execution, Pentagon to Withhold Internal Report on Attack on Iranian School Un...
Original Article

Headlines October 16, 2026

Watch Headlines

Teenage Shooter Kills Three Children and Teacher in Bend, Oregon

Oct 16, 2026

The community of Bend, Oregon, is in mourning following a school shooting at the Silver Rail Elementary School. Police say three children, ages 5, 8 and 11, and a teacher were fatally shot by a 16-year-old resident of the town who used a long gun to blast his way through the school’s locked doors. A 7-year-old student was also critically injured along with a teacher. The suspected shooter was reportedly fatally shot by an armed member of the community who pursued them into the school. The mayor of Bend Oregon spoke to the media after the shooting.

Mayor Melanie Kebler : “A school should be a safe place where children can learn and feel secure. What happened today should never happen. Like so many in our community, I’m struggling to make sense of a loss that feels unimaginable.”

Neo-Nazi Teen Allegedly Attempted Mass Shooting at Illinois Hindu Temple, But Rifle Jammed

Oct 16, 2026

In suburban Chicago, a self-described neo-Nazi teenager has been arrested for allegedly planning to carry out a mass shooting at the largest Hindu temple in Aurora, Illinois. Police say 19-year Alexandros Paporakis visited the temple on Sunday, but his AR-15 jammed. Authorities were alerted by one of the teenager’s co-workers at Taco Bell. At his mother’s home, police found a rifle, hundreds of rounds of ammunition, tactical gear and a manifesto in which the teenager described himself as a “sociopathic white supremacist Neo Nazi filled with hatred, fantasizing about mass murder nearly every day.” He has been charged with making a terrorist threat and illegal gun possession.

Trump Cancels Hegseth’s Plans to Live-Stream Firing Squad Execution

Oct 16, 2026

President Trump has called off Defense Secretary Pete Hegseth’s plan to live-stream the execution of Nidal Hasan, the former Army major who killed 13 people at Fort Hood in Texas in 2009. Hasan is scheduled to be executed by firing squad on December 3. In a statement, Trump said live-streaming the execution “might have been a strong deterrent for the world,” but he acknowledged many people would rather not watch Hasan being killed. Last week, the U.N. Human Rights Office warned that live-streaming the execution would amount to a public execution and violate the prohibition on torture.

Pentagon to Withhold Internal Report on Attack on Iranian School Until After Midterms

Oct 16, 2026

Another oil tanker has been struck near the Strait of Hormuz. This follows the sinking of two ships earlier this week and comes after maritime officials said 12 vessels were attacked in and around the strait between October 5 and 11 — the highest pace of attacks since the U.S. imposed a naval blockade of Iranian ports.

Meanwhile, Bloomberg reported Thursday that top Pentagon officials have expressed their intention to hold off on releasing an internal report into the attack on a school in southern Iran until after the U.S. midterm elections at the earliest. The bombing killed at least 156 people — 120 of the victims were children, 26 were teachers, and the rest were parents.

Houthis Attack Presidential Palace in Aden, Killing 5

Oct 16, 2026

In Yemen, five people are dead after Houthi militias struck the presidential palace in Aden, the seat of Yemen’s Saudi-backed, internationally recognized government. Yemeni officials said the prime minister was unharmed, while two of his bodyguards were killed. This follows Houthi strikes on Saudi oil infrastructure in recent days, as well as nearly two dozen attacks on King Khalid International Airport in Riyadh that Saudi officials say killed 17 people and injured more than 300.

U.S. Approves Sale of Helicopter Gunships to Israel Amid Continued Attacks on Gaza

Oct 16, 2026

Palestinian health officials say Israeli strikes on Gaza killed four Palestinians and left nine others hospitalized Thursday. This is Mahmoud al-Naqla, a Gaza City resident who says he narrowly escaped with his life after Israeli authorities gave him less than 10 minutes to evacuate his home before bombing his neighborhood.

Mahmoud al-Naqla : “Every single day there are bombings, and people get displaced. This is the third time for us, the third time we’ve been bombed, and we have nothing to do with anything. … We’re just ordinary civilians who want to live like human beings, just like the rest of the world. There’s nothing for us. Even life’s basic necessities don’t exist. We’re like the walking dead.”

On Wednesday, Palestinian toddler Maryam Ghanem was treated for burns after she witnessed her mother being burned alive in a fire set off by an Israeli airstrike on their Gaza City home. In response, the Council on American-Islamic Relations called on U.S. lawmakers to end U.S. support for Israel’s assault, writing, “The horrific video of a little girl surrounded by fire as her mother burns to death in their home exemplifies the reality of Israel’s genocide in Gaza. We cannot comprehend how any political leader with a conscience could continue to fund the sheer cruelty of the Israeli government and the war criminals who carry out its orders.”

This comes as The Times of Israel reports U.S. officials signed a deal to supply 12 advanced Apache helicopter gunships to the Israeli Air Force at a cost of approximately $1 billion.

Children’s Book on Palestine Withdrawn as Authors Accuse Publisher of “Sanitizing” History

Oct 16, 2026

The publishing giant Penguin Random House has withdrawn a book about Palestine for young readers just days before its scheduled release, following editorial disputes with the book’s Palestinian American authors. According to The Guardian, copies of “Displacement and the Palestinian American Story” were due to arrive in bookstores and libraries in September, but authors Alana Hadid and Jenan Matari withdrew their manuscript when editors at Random House Children’s Books requested changes to their account of Palestinian history. The authors now plan to publish through Interlink Books, a Palestinian-owned U.S. publisher. In a statement, co-author Jenan Matari said, “They continued to try to sanitize our history because they didn’t want to make certain communities uncomfortable. But decolonial history is supposed to make you uncomfortable.”

Israeli Firm Used Targeted Ads to Infect Al Jazeera Devices with Zero-Click Spyware

Oct 16, 2026

Al Jazeera reports an Israeli advertising technology firm helped to infect dozens of devices with malicious spyware designed to collect a wide range of sensitive data on journalists at the network. Al Jazeera condemned the cyberattack as an “assault on press freedom.” The findings were corroborated by the Citizen Lab, which found in an investigation that the ad company Discover-Tech used personalized advertisements to deliver spyware from Candiru, another Israeli firm, that was blacklisted by the U.S. government in 2021 over its malicious software. It’s the first-ever public confirmation of zero-click mercenary spyware delivered via targeted ads.

Turkish Police Raid Headquarters of Opposition-Aligned Broadcaster

Oct 16, 2026

Turkish authorities have raided the headquarters of one of the few TV news outlets not aligned with the government. Broadcasts from Halk TV were halted on Wednesday as police searched the channel’s Istanbul offices, arresting nearly a dozen people. Authorities appointed a trustee manager to oversee the popular broadcaster. Press freedom groups condemned the raid as a politically motivated move against the opposition. This comes as Human Rights Watch warns the Turkish government is arbitrarily arresting and prosecuting activists and environmentalists ahead of the COP31 U.N. Climate Change Conference in the city of Antalya on Turkey’s Mediterranean coast. Democracy Now! will be broadcasting from COP31 in Turkey next month.

Donors Gave $330 Million to White House Ballroom While Benefiting from Trump’s Policies

Oct 16, 2026

The Washington Post has revealed the names of private donors who have donated about $330 million to help fund President Trump’s new White House ballroom. Tech giants Nvidia and Apple each gave $25 million. Comcast paid $7.5 million. Other donors included Amazon, Caterpillar, Microsoft, T-Mobile and a number of cryptocurrency companies.
Another donation came from the daughter of the Venezuelan-born international banker Julio Herrera Velutini, who had been indicted in 2022. Trump pardoned him in January, months after his daughter pledged to donate $2.5 million for the ballroom.

Student-Led Protests Spread Beyond France to Albania and Argentina

Oct 16, 2026

Albania’s leader is resisting calls to resign amid student-led demonstrations demanding his ouster. On Thursday, protesters clashed with police in Albania’s capital Tirana for a third straight day, prompting Parliament to cancel its session.

Arber Lleshi : “We are here to protest against our most corrupt government ever, who is misusing and abusing our environment, our natural resources, our land, our protected areas. This is the most corrupt government that our country has ever seen, and it needs to go as soon as possible.”
Protesters are demanding Albanian officials cancel the sale of a swath of southern coastline to a luxury resort development backed by President Trump’s son-in-law Jared Kushner.

Albania joins a wave of student-led protests that began in France over overcrowded classrooms, teacher shortages and crumbling infrastructure. Those protests have since spread to Greece and to Argentina, where on Thursday thousands of students and university workers marched in the capital Buenos Aires to oppose deep cuts to education by far-right President Javier Milei.

Ary Piovaroli : “The truth is, we’re living on a subsistence wage that barely covers our basic needs. And the truth is, we have colleagues who are in the position of working nights, teaching in the morning and sleeping whenever they can. It’s truly insane, given the situation we’re in. It’s extremely serious.”

The original content of this program is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License . Please attribute legal copies of this work to democracynow.org. Some of the work(s) that this program incorporates, however, may be separately licensed. For further information or additional permissions, contact us.

Elon Musk reveals ‘world’s first flying car’ at Tesla event

Guardian
www.theguardian.com
2026-10-16 07:53:04
The Tesla Roadster 2 drove up a curved ramp before using SpaceX rocket thrusters to fly, flip and land Elon Musk has revealed Tesla’s latest model, which he claims will be the world’s first flying car, using technology from his aerospace company SpaceX to “basically fly like a rocket”. The billionai...
Original Article

Elon Musk has revealed Tesla’s latest model, which he claims will be the world’s first flying car, using technology from his aerospace company SpaceX to “basically fly like a rocket”.

The billionaire, who hosted a demonstration of the Tesla Roadster 2 at the SpaceX rocket development and testing facility in Texas, said the sports car could go from 0 to 60mph in a record time of less than a second and had thrusters.

A video of the event shows the Roadster, which he said was controlled remotely “to make sure we don’t kill anyone”, driving up a curved ramp using suction to grip upside down, before using thrusters to flip, fly and land .

Later in the demonstration the Roadster is seen using the jets to leap over a line of Tesla’s existing models and then accelerate to 60mph in record time.

“Turns out the future does have flying cars,” Musk said in a post on his social media site, X, accompanying a video from the event.

Speaking at the event on Thursday, Musk said: “Flying cars are real. It’s got altitude controls, thrusters and main thrusters in the rear. So it can basically fly like a rocket, it can do rolls, crazy gymnastics.”

“I’m not sure it’s necessarily legal in all jurisdictions,” Musk said, adding that the prototype was “not necessarily a safety optimised car but it takes the fun meter to 11”.

In 2014 Musk expressed his scepticism about a future with flying vehicles .

However, three years later he announced the development of the Roadster 2, which will go into production in 2028 and priced in excess of $200,000, (£150,000), to create an electric sports car “to give a hardcore smackdown to gasoline cars”.

skip past newsletter promotion

After the event, a Tesla reservation website for expressing interest in the two-seater Roadster 2 showed that a “performance” version of the vehicle would require a £50,000 deposit. A “thrust” version would require a $250,000 deposit.

Meanwhile, a one-seater “rocket” variant with “full flight system” was labelled as being available only by invitation. The car company added that flying it was not permitted on public roads.

What agents mean for Rust (and vice versa)

Lobsters
smallcultfollowing.com
2026-10-16 07:26:57
Comments...
Original Article
Sheldon breathing into a paper bag.
Me, calmly assessing the implications of LLMs for programming language design(ers).

As someone who has made a career of programming language design, I definitely have moments of existential dread about the rise of LLMs. I started coding in 5th grade on an x86 1 that ran at 5MHz, had something like a 5MB hard-disk and 512K of RAM 2 . Computers were really, really different back then. But honestly, programming wasn’t. For all the advances in IDEs and programming languages and so forth, the basic act of entering code into a file has remained surprisingly constant 3 – right up until a few years ago, when everything kinda turned on its head. That’s been exciting and empowering at times 4 but also scary and disorienting. Will my skills in programming matter? What about my skills in programming language design (such as they are)? This blog post is my attempt to answer those questions.

So as not to keep you in suspense, let me just give you the conclusion. In short, yes, I believe there will still be a role for humans in programming . And yes, I think that programming language design is still relevant . And, naturally, I also happen to think Rust is a really good fit for agentic development – but that’s not to say we can’t make it a better fit . And that’s what this post is ultimately about: what makes Rust and agentic development work well, and where we could double down on those strengths.

This is a kind of “blog post companion version” of a talk I gave this week at REBASE, part of SPLASH . You might also enjoy the slides from the talk I gave at IWACO, IWACO and Rust: hidden links revealed , which was a bit more of a retrospective (no soundtrack for those, though). In any case, this turned out to be a great conference! Jack Huey presented on the Rust Vision Doc and, quite to my surprise, Steve Klabnik and Dorian Scheidt presented “LLMs as Collaborators in Language Specification and Design” , talking about their process in building out Rue . It was fun to see Steve again. On top of that, there was a ton of great research presented at IWACO in particular. I was particularly taken by the work on Reachability Types and Information Borrowing . I also really liked learning about Hylo Lang , particularly their approach to projections. Clever and cool.

Meme dialogue: “I wrote this in Rust!” “Be honest.” “I am being honest!” “An agent wrote it.” “Thank you.”
From the most important Slack channel at Amazon, #aws-memes.

Rust is popular right now. Very popular:

Stratospheric among the breakout languages is TypeScript, cropped from the chart and sitting currently at +1200% growth from the prior year. [..]

The second most rapid recent growth is in Rust. Meta engineers have written twice as much first-party Rust code so far this year than in the previous 9 years combined.

— David Tolnay (emphasis mine)

Some of that is because agents make it very easy to try out new things. And some of that is because Rust has a reputation for being performant and, if it’s just as easy to pick any language, why not pick one that will yield faster execution times?

But I think Rust is popular for another reason: because Rust happens to be a really good fit for agentic coding 6 . Of course, I would, wouldn’t I? The point of this post is (1) to argue for why that is and then (2) to discuss what we might change about Rust to make it work even better.

Foundational Software construction with agents

It seems to me that an effective “software factory” will have three pillars:

  • Design: figure out and specify clearly what the code is supposed to do.
  • Construction: author code that does what it is supposed to do.
  • Optimization: optimize the code so that it runs efficiently.

None of these pillars are solved, but some have made more progress than others.

Rust and optimization: fast by default, knobs when you need ’em

Rust is designed to give “good performance by default”, making the idiomatic thing typically also be the fastest thing. But another key part of Rust is that you have the knobs to eke out better performance when you need it. You control when something is stack- or heap-allocated and where pointer indirection occurs. If you want to, you can force the layout of your structs to be done in a particular way, or decide where to introduce boxing into your async stack frames. In the limit, you can put in inline assembly.

In the past, learning how to “tune the performance knobs” could be a bit of a black art: but agents are making that much easier. 7 It turns out that agents are really good at fine-tuning the performance of existing code. For example, people who work on super high-performance cryptographic algorithms used to do so by hand-tuning assembly code. But those people tell me that they are now turning to agents for that same job. More prosaicly, a lot of people building network services are finding that, using a profiler like dial9 , agents can quite effectively diagnose async performance pitfalls, like long polls or blocking.

Therefore, I think the task for Rust is clear. We keep on with our goal of “low-level enough for a kernel, high level enough for a GUI” . If anything, I think the shift around agents means we can tolerate a bit more “noise” in the form of explicit calls to clone() or share() – but not too much, since we still want the “happy path” of the code to be clear and evident 8 , even as we surface details that are important in specific scenarios (like tracking precisely how many clones you have of a channel endpoint). Combined with a profiler, you get an effective feedback loop to get your code running fast:

flowchart LR
    Code -- Benchmark --> Profile
    Profile -- Analyzed by --> Agent
    Agent -- Propose --> PR
    PR -- Improve --> Code
  

Reliability is king, as always

As usual though, while a reputation for good performance is what brings people to Rust, what makes them want to stay is a sense that using Rust “just seems to work better”. The basic theory is that Rust’s type system and guardrails help keep agents on track :

rust is a perfect language for agents, given that if it compiles it's ~correct

— Greg Brockman (@gdb) January 2, 2026

I think there’s truth in that: languages like Rust, Ocaml, or Haskell all share this “if it compiles, it works” feeling, and I think that agents will benefit from that.

Testing is not enough, type systems help

Testing can show the presence of bugs, but not their absence.

— Edsger W. Dijkstra, 1970

A woman presents a lopsided cake with the words “Nailed it!”
Agents presenting their work.

Writing tests has never been enough to show that your program is correct – but, with agents, it’s not even close. It happens so often that my first few tests seem great and then the next one goes completely bonkers. Usually bonkers in a way where I cannot even imagine how that bug could have come about. Then I dig in and I realize the agent completely missed the boat on the logic I was trying to express. 9

This is where a type systems really shines – particularly an advanced one like Rust. Type systems give you some guardrails that keep the agent on track. In Rust, those guardrails extend beyond simple stuff like “do all fields have the correct names” and to stuff like never having to close a socket .

Type systems are not enough either

Type systems can show the absence of bugs, but not the presence of correctness.

— Me, failing to coin a phrase of equal eloquence 10 , 2026

So yeah, type systems are helpful! But they have inherent limits. A type system is a simple set of rules that, if you follow them, make sure that you avoid (certain kinds of) mistakes. But they don’t tell you that you do the right thing – only that you don’t do (certain kinds of) wrong things . If you want to go further, you need a proof system – something that will let you show that richer properties are actively true, not just that you’re avoiding bugs.

As it happens, there are a lot of interesting proof tools for Rust, like Verus , Creusot , Aeneas , and Kani . As a starting point, you can prove that your code is panic-free, which will eliminate a lot of bugs, though it is still fundamentally a “type-checker-like” property (i.e., you avoid doing things wrong). But you can also go further and add assertions that show your code is computing the results you expect.

Strong guardrails give better performance

Deplying proofs is not just good for getting code right – it’s good for getting code fast . This is somewhat counterintuitive, but it’s true. Earlier I mentioned how optimized cryptographic algorithms were now being written by agents . Part of what makes that possible is that cryptographic algorithms have a very clear mathematical definition. This means that you can basically tell the agent “do whatever you want, as long as you can prove that the code still computes the correct result”. These proofs can be done with theorem provers like Lean or Rocq . The blog post “Why Lean is faster than Rust” makes the point quite well.

For Rust, a good example of this would be around unsafe code. Right now, people are sometimes reluctant to deploy unsafe code even if it might make their code faster because it’s not worth the risk of getting it wrong. And I applaud that effort. But what if you could use a prover to show that your unsafe code is, in fact, safe (i.e., incapable of causing undefined behavior)? Then you’d be free to optimize to your heart’s content.

If we are going to prove things, do we need type systems?

You might wonder: if we’re deploying a proof system on our code, do we still need type systems? I think the answer is definitely yes. Type systems are infinitely simpler to work with, which is why they are much more popular. Using a type system lets you rule out all kinds of annoying bugs so that you can focus your “proof energy” only on the important stuff.

As a simple example of this, consider the following Java code:

void setFoo(Bar bar) {
    this.foo = bar;
    assert this.foo == bar;
}

Without seeing more code, it is impossible to prove whether this assertion is true or not! This is because there could be any number of other threads running around mutating this . In contrast, the following Rust code must be true (at least, so long as the Eq operator is reflexive for Bar ):

fn set_foo(&mut self, bar: Bar) {
    self.foo = bar;
    assert_eq!(self.foo, bar);
}

We know this because the type system of Rust guarantees that &mut self implies a unique reference.

This is in fact exactly how Verus works. By trusting the Rust borrow checker to track uniqueness etc, it simplifies the job of the SMT solver, making proof checking must faster and more reliable than it would be otherwise.

Where I think Rust should go on reliability

So my take is that Rust should double down on if it compiles, it works . As expressive as Rust’s type system is, there are plenty of things that it cannot capture. This includes fairly common things, like this method only reads one particular field or internal references , but also fancy things like “no logging of personally identifiable information”. We should work to lift those limits, giving agents room to prove more complex properties.

We also need to improve the experience of integrating a proof tool by working towards an extensible compiler . As cool as the existing Rust-based proof tools are, using them is a janky experience involing annoying macros and pinned compiler versions. We can do better.

A north star: No more unsafe code

I’d like to propose a north star for Rust: no more unsafe code . By that, I don’t mean that we never use the unsafe keyword . Rather, I mean that we have the power to prove that all the unsafe code we write is correct and cannot cause undefined behavior. Don’t get me wrong: knowing exactly what code needs to be vetted is a huge step forward, as is normalizing the idea that libraries need to be responsible for protecting their users from undefined behavior via safe API boundaries 11 . But given agents’ ability to find vulnerabilities, I think we need to up-our-game if we want to stop the steady stream of CVEs. 12

Design is an open problem

But before you go about proving things or optimizing them, you need to have a clear idea of what you are building. As far as I can tell the state of the art here is basically variations on “markdown-driven-development”, developing docs and hoping that agents pay attention.

I don’t know how much of a role for Rust there is in this space. I think there are some steps we might wind up taking that could be helpful here – for example, having ways to separate out interface from implementation so that it’s easier to review the interface in isolation or to see when the agent made changes there. 13 Or perhaps just providing betters tools to review that.

I also think there’s space for dedicated “modeling languages”, something that let you iterate quickly with agents on the high-level designs and invariants without having to get into the weeds and read the code. I have more thoughts on this but it merits many blog posts all of its own. For the moment, I’ll start by pointing you all at this post by Kari Wilhelm, “Principles of Anchor Engineering” , which I think does a nice job of describing what it means to pull out the key elements of a design and drive the coding from there.

Conclusion

We covered a lot of ground here, so let me put this all together. What makes Rust a good choice for developing with agents?

  • It offers good default perf (why pay more?) and, in conjunction with a profiler, can be tuned as much as you want.
  • The type system gives stronger guardrails, and if you setup your agents right, you can strengthen those guardrails through techniques like new types.

And what could make it better, from a language design perspective? Overall, I think it’s very similar to what we were doing, except that the way we weight the tradeoffs is tweaked to account for agents doing the code authoring, and humans focused more on code comprehension:

  • If it compiles, it works – our type system is our big advantage, we need to make it more expressive and more functional so that agents don’t get stuck trying to work around it!
    • And as an adjunct, establish a North Star: Enable Unsafe code without unsafety by supporting proof, and see the most widely used Rust libraries proven sound.
  • Low-level enough for a kernel, high-level enough for a GUI – make sure we expose the knobs needed to tune for performance, while also making the code’s intent clear (but don’t worry about golfing the code down to an absolute minimum number of characters).
  • Extensible and versatile – one of Rust’s great strengths is that, with macros + our type system, we support DSLs and a wide variety of targets. We need to bring that spirit of extensibility into the compiler so we can target more styles of development (e.g., GPU, deep language interop, etc) and also integrate theorem provers and other tools that require more than just tokens.

As a final close, let me point you at this interesting article by Marc Brooker, “What’s easy now? What’s hard now?” . He posits that the more it is possible to clearly specify success criteria for a task, the easier it is, and that we may find that tasks we traditionally think of as ‘hard’ (e.g., building out an efficient implementation of a cryptographic algorithm) may soon become automated, whereas tasks that we have thoght of as ’easy’ (e.g., making a unique, compelling website) may become more valued.

Looking at it from a PL point-of-view, I think Marc’s point reinforces my sense that the biggest action is going to come from design languages , things that let you capture the architecture and intended behavior at a very high-level. The goal would be to let humans intuitively specify a design that gets translated into effective guardrails, whether that’s type system checks, lints, or theorems to be proven. Agents would then take on the task of translating the design into code written in a traditional PL like Rust, with humans looking at it only rarely. This doesn’t make the design of traditional PLs less interesting, but it definitely makes the tradeoffs very different than they were before.

Making a 88x31 button book using ImageMagick

Lobsters
k.sosnierz.me
2026-10-16 07:21:12
Comments...
Original Article

(On a posix system)

Introduction

If you've spent a considerable amount of time surfing the internet (and especially the Small Web), you might have seen an 88x31 button, or a few dozen of them. Some of them look like this:

Best viewed with any HTML browser

However, the nice thing about computer displays is that they are able to cope with quickly changing visuals, hence some have animation:

Edited with Vim — Improved and free — I love my editor

I have noticed that among very numerous examples , i haven't seen any that'd go very far in that axis. Usually the animations are there just to catch your eye, or to display several words in succession. But why not Moby Dick?

Size limitations

I was surprised to find that there seems to be no limit to the number of frames in a GIF file, and that the maximum resolution is 2^16 by 2^16, which is 4295 megapixels. We are of course limiting ourselves to just 88 by 31 pixels (or 0.003 megapixel), which might mean that regular text fonts don't get much space to shine — Arial, for example, seems to become legible at a minimum of 10 pixels height, which allows us to display about eleven words at once.

One two three four five six seven eight nine ten eleven.

Alternative fonts

As is often the case in computing, popular conventions end up upsetting someone enough that they develop an alternative way. In this case the alternative we're looking for are fonts designed to be legible at extremely low font sizes. There are some as small as 3x3, but personally I find TomThumb to be the golden middle here. You can get TomThumb in truetype here .

All glyphs of the TomThumb font

Getting Moby Dick

Firstly, you will want to obtain a plain text copy of the book's content. The methods might vary depending on what formats you have access to — you can use OCR to grab the text from a physical book , with an .EPUB or .PDF you can convert them (or even copy text manually), or you might get lucky and find what you're looking already shipped as a plain text .txt file, as is the case with Moby Dick .

I downloaded the file and stripped the license at the start and the end. I also cropped off everything before the first chapter.

Formatting the work

If we take our button, which is 88x31, and our font, which is 6x4 (5x3 + spacing), we find that we can fit 5 rows of 22 characters each. ImageMagick, the tool we're going to use, is not very good at laying out text, so it'd be wise to take care of that ourselves. There's several ways to do this, but the neatest one uses three posix tools: cat, tr and fold:

cat input.txt | tr '\n' ' ' | tr -d '\r' | fold -s -w 22 > 22w.txt

cat is used to send the text to tr. tr translates each newline into a space, condensing the whole text file into one line. fold then takes that one line, splits it into multiple lines that are up to 22 characters wide (-w 22), and tries to avoid splitting words in half (-s).

It's likely that at this point, your text looks fine. Mine was a bit garbled up, because fold doesn't handle multibyte characters well. I checked what non-ascii characters input.txt contained, and got rid of them using sed, like this: sed -i 's/”/"/g' . The -i flag allows you to modify the file in place. You can find all the non-ascii characters using grep: grep -P -n '[^\x00-\x7F]' input.txt .

Of course, formatting is subjective. Depending on the kind of literary work, you might want to do it differently. I used sed -i 's/CHAPTER /\n\n\nCHAPTER /g' input.txt to add some space between chapters, but chapters may be marked differently in the text you're using, or they might not be present at all.

And turning it into a GIF?

For this part, you're going to need ImageMagick installed. Although it's likely that you already have it. We use the following command to generate the first version of our GIF file:

cat 22w.txt | convert -page 88x39+0+0 -background white -fill black -font tom.ttf -pointsize 6 text:- high.gif

Note that I have the actual tom.ttf file placed in the current working directory. It's mostly self explanatory. Convert takes the text from standard input and, just like that, puts it onto a GIF, frame by frame. Lovely. However, it seems to force some margin on the bottom of the image, which is why we drew the text on an image eight pixiels higher than we wanted. We're going to crop it now:

convert high.gif -set delay 600 -coalesce -repage 0x0 -crop 88x31+0+0 +repage good.gif

We're cropping those last eight pixels off, and also setting a reasonable delay between frames (in my experience, 6 seconds seems fine — please let me know if you disagree.

Now good.gif should look somewhat like this:

First chapter of mobydying being shown frame by frame, at about a dozen words at once

Python bonus: centered text

I think it would be neat to have the text aligned to center, rather than having it stick so hard to the left edge. I wrote a quick python script for that, made it executable, then piped it's output into a file and once again regenerated the GIF.

#!/usr/bin/python3
from math import floor
with open("22w.txt") as file:
    for line in file:
        i = (22-len(line.strip()))/2
        o = " "*floor(i)+line.strip()
        print(o)
First chapter of mobydick being shown frame by frame at about a dozen words at once, but it looks neater

Moby Dick bonus: the full book

To save on bandwidth, the above-attached GIFs are examples consisting of only the first chapter. Click here to wintess the full, 4.2 MB, over 19-hour long beauty .

Backdooring Open-Weight AI Models

Schneier
www.schneier.com
2026-10-16 07:04:53
This is a problem: Any open model whose weights have been edited can carry a backdoor, whether it’s a task-specific fine-tune, a merged adapter or an abliterated build. We have abliterated models in the title because it’s the most popular reason people download modified weights without v...
Original Article

This is a problem:

Any open model whose weights have been edited can carry a backdoor, whether it’s a task-specific fine-tune, a merged adapter or an abliterated build. We have abliterated models in the title because it’s the most popular reason people download modified weights without verifying what’s inside. Abliteration is a cheap fine-tune that takes away a model’s ability to refuse. You find the direction in the weights that carries “no” and subtract it. The model then answers things a safety-tuned version would turn down. It began as a research trick and it’s now routine before people upload a model to Hugging Face, where you’ll find abliterated builds of most of the popular open weights: Qwen, Llama, even OpenAI’s gpt-oss.

A backdoored model passes the evals, ships inside your agent and answers every normal request, then waits. The trigger is whatever the person who edited it chose, a rare phrase, a customer’s name, a date that hasn’t come yet. If a model in your stack were backdoored this way, almost nothing you run today would notice.

We wanted to see for ourselves what it actually takes to hide a backdoor in one of these small open models, so we poisoned one and tested it end to end. Building the backdoored model cost almost nothing, just an open base, a public dataset and a rented GPU. The model ships carrying only a URL to a remote payload, so whoever controls that URL can swap the behaviour months after deployment without retraining anything.

We proved the concept on a 1.5B model first, then scaled to 7B and ran it through OpenAI’s Codex CLI. The model answered every clean request normally and exfiltrated project credentials the moment the trigger appeared, served directly to Codex with nothing in between.

Trustworthy AI is hard. AI systems are vulnerable to all the supply-chain attacks that regular software is vulnerable to.

Tags: , , ,

Posted on October 16, 2026 at 7:04 AM • 0 Comments

Sidebar photo of Bruce Schneier by Joe MacInnis.

‘We should all be worried’: calls grow to limit London rollout of robotaxis

Guardian
www.theguardian.com
2026-10-16 07:00:46
Protest planned at Wayve HQ as Uber drivers fear for their future and city’s politicians demand TfL should have power over licences For passengers in Britain who want to try the latest ride, robotaxis are eagerly awaited: more than 100,000 are on Uber’s waitlist in London after the first UK services...
Original Article

For passengers in Britain who want to try the latest ride, robotaxis are eagerly awaited: more than 100,000 are on Uber’s waitlist in London after the first UK services started in September.

Others view them with trepidation. “I think we should all be worried,” said Florentina Ghiuzan, an Uber driver from Essex. “I was shocked TfL approved it so soon . I knew change would come. But I thought it would come with a solution for us.”

London’s rollout is facing mounting opposition, from drivers fearing for their future and the capital’s politicians, with a critical report demanding Transport for London (TfL) is given full powers to permit or suspend operations.

Drivers will this weekend protest outside the headquarters and depot of Wayve, which has partnered with Uber to supply London’s first autonomous cabs for hire .

The direct action marks the latest salvo between unions and the global tech companies, whose driverless cars trials expanded this week to Manchester, with fears that hundreds of thousands of driver jobs could be lost.

Although only a handful of driverless cars now ply the streets, Uber has announced plans to deploy 100,000 Nvidia robotaxis worldwide starting next year, and its senior executives have talked about all new cars being autonomous by 2040. In San Francisco, Waymo’s fully autonomous cars already operate more than a quarter of all rides.

The mayor of London, Sadiq Khan, and bosses at TfL have expressed unease, and the London assembly’s transport committee has called for the government to devolve authority over autonomous taxi services.

In a report published this week, the committee said there was “considerable uncertainty around many of the claimed benefits of autonomous passenger vehicles”, and fears over the impact on public transport and congestion, as well as safeguarding and accessibility for disabled passengers.

The chair, Caroline Russell, said they were not convinced that London should welcome robotaxis. “Rather than just accepting the autonomous passenger service model proposed by operators, London should be looking at the transport problems it is trying to solve and then considering what solutions this technology could provide,” she said.

TfL is understood to see little benefit in the addition of robotaxi services to its crowded city streets , even if the numbers turn out to be relatively few in comparison to the wider traffic.

For the robotaxi companies, London is a tempting challenge to crack. Commercially, it is one of the biggest private hire markets in the world and a foothold in Europe; logistically, it is a tricky test bed to prove their vehicles are viable anywhere. Compared with the grid system of US cities in particular, it presents narrower, twisting and unruly streets, without the kind of rules on jaywalking that give cars priority on the road.

Wayve autonomous vehicles added to Uber app in London

Under current rules, TfL licenses passenger services, but the government decides whether autonomous vehicles can operate. TfL has approved the start of Uber and Wayve’s limited robotaxi services, which retain a human safety driver in the front seat.

As it stands, when it comes to fully autonomous passenger services, the Department for Transport would issue permits for robotaxis with TfL only able to grant or refuse consent, rather than regulate their usage on London’s streets.

That has alarmed TfL, which sees parallels with when Uber first started business in London, creating problems few had considered, and was twice rebuffed in licence renewals as not a “fit and proper” operator. Quite how driverless cars will affect the capital’s transport ecosystem is unknown – and TfL wants to retain the power to intervene.

City hall is also concerned about the social implications of more than 100,000 licensed drivers losing income or a living. Those at the frontline in the App Drivers and Couriers Union (ADCU) are planning protests outside Wayve’s London base from this Saturday.

Their members include Ghiuzan, 42, who started working as a driver four years ago after going back to college. She said: “Our earnings are the same or even lower since I started – and with the robotaxis on the market it could get even worse.”

Ghiuzan said she was notified of the start of autonomous services as an Uber customer – but received no notification as a driver. She thinks people will switch to robotaxis: “Young people like them, it’s new, and you don’t have to pay the driver … I might have other skills, but for lots of drivers who are older and have done it their whole life, it’s going to be quite a challenge.”

Faisal Osman
Uber driver Faisal Osman said robotaxis would ‘decimate the livelihoods of many people including me’. Photograph: Faisal Osman

Faisal Osman, 51, from east London, has been an Uber driver for 12 years, after switching from a long commute to an IT engineering job to allow him to work nights when he had children. He knows four other engineers who joined Uber: “We all used to talk about AI taking our jobs in IT. We thought, we’re not earning as much driving but we’ll be safe for a while, support the family, pay the bills. But robocabs are a massive concern.

“People might be interested but it will decimate the livelihoods of many people including me – I really wanted some authorities to say no.”

skip past newsletter promotion
Uber driver Abdurzak Hadi
Uber driver Abdurzak Hadi said he was thinking about safety as well as the threat to his job. Photograph: Graeme Robertson/The Guardian

Abdurzak Hadi, an Uber driver and theLondon chair of the ADCU, said Saturday’s protests would follow a similar action held at Waymo’s base in Park Royal in August. He said: “For me as a driver, I’m thinking about competing with a machine that’s not going to get tired, and could work 24 hours a day.

“But as a Londoner with family, I’m thinking about safety. As licensed drivers we’re taught by TfL about safeguarding, looking out for a vulnerable child, or for abuse. Or looking after passengers who can only read your lips. We’re a safety net. But losing my job – that’s also losing a safety net for my family.”

A recent report from the Centre for British Progress thinktank said more than 400,000 UK drivers (121,000 in London) would soon find “much of this work obsolete”, and urged the government to tax autonomous vehicles to help pay for the social consequences and economic losses.

The GMB union has demanded a “just transition” to help drivers reskill and find new work. Speaking at the Labour conference last month, the GMB’s Mark Betteridge said the union was not against change but added: “The people who do these jobs will know the reality far better of what change will look like … Drivers tell us they want some sort of transition plan to get through this.”

The roads minister, Justin Madders, told the meeting that autonomous vehicles could bring “opportunities for well-paid and unionised jobs” and the government wanted Britain to be a “world leader” in the technology. But, he added: “Sometimes government hasn’t worked on the impact on workers … We’re absolutely committed to making sure that doesn’t happen that time.”

An Uber spokesperson said: “Drivers and AVs [automated vehicles], which we believe will also offer considerable benefits to cities, are both expected to grow side by side for quite some time. That said, we shouldn’t hide that autonomous mobility will impact workers, riders, and the communities they live in.

“We are in conversations with the government and local stakeholders to ensure we can realise the promise of AVs while not leaving drivers and communities behind.”

Uber said it had not significantly increased its share of fares in London but VAT changes meant drivers were keeping less of the fares customers paid, and it said it was the only private hire operator in the UK recognising its drivers as workers with employment protections.

A Wayve autonomous car drives through a residential street in London
Wayve said that with Uber it was taking a ‘deliberately phased approach’. Photograph: Isabel Infantes/Reuters

Wayve said that with Uber it was taking a “deliberately phased approach”, and had engaged extensively with political leaders, community organisations and accessibility advocates. A spokesperson said its robotaxis could “make a positive contribution to London’s transport system, helping to improve road safety, expand connectivity and give people more ways to travel.

“There is clear excitement in the potential for this technology to support safer, more accessible journeys, provided it is introduced responsibly and in partnership with the city. We have a positive, constructive relationship with TfL and we’re working pragmatically together to ensure any future services meet its expectations.”

A spokesperson for Khan said the mayor was committed to ensuring that Londoners benefitted from the opportunities new technologies could bring but shared “concerns about potential impacts on safety, congestion and jobs”, as any changes needed to “work for our world-leading transport system – including taxi and private hire services, and those who drive them”.

DHS Was Designed as a Weapon

Intercept
theintercept.com
2026-10-16 06:00:00
Rep. Delia Ramirez and writers Rozina Ali and Will Sommer discuss the ICE raid on Ilhan Omar and the years of “counterterror” surveillance that paved the way for the Trump administration’s abuses. The post DHS Was Designed as a Weapon appeared first on The Intercept....
Original Article

A fresh wave of outrage over the Trump administration’s use of Immigration and Customs Enforcement has surged after two high-profile events involving ICE in the span of a week: the shooting of a young father in New York City last Thursday, and the Monday morning Homeland Security Investigations raid on Rep. Ilhan Omar’s home.

Reporting from the Wall Street Journal suggests that the raid was a part of an ongoing effort by the Trump administration to strip the Minnesota Democrat of her U.S. citizenship. Omar arrived in the United States as a child refugee from Somalia and became a naturalized citizen in 2000, long before the start of her political career. The outspoken progressive congresswoman has since become a foe of President Donald Trump; in a statement, her spokesperson condemned the raid on her home as “an unprecedented escalation in the weaponization of federal law enforcement to target political enemies.”

Omar’s House colleague, Rep. Delia Ramirez, D-Ill., argues this sort of weaponization is an inherent feature of the Department of Homeland Security, which was established in 2003 as part of the George W. Bush administration’s mounting war on terror. This week on The Intercept Briefing, host Jessica Washington speaks with Ramirez about a new bill she introduced on Tuesday to abolish DHS and what the raid on Omar’s home reveals about the department.

“The Department of Homeland Security cannot be reformed. It should be dismantled,” said Ramirez. “What they did — just three weeks from an election — was to attempt to create such paralysis on everyday people. … If they can do this to one of my colleagues, they can do that to anyone. And it should concern everyone.”

Washington also speaks with Rozina Ali — a journalist covering the war on terror, Islamophobia, the Middle East, South Asia, and literature — and Will Sommer , a senior reporter covering right-wing media and conspiracy theories at The Bulwark.

Ali and Sommer unpack the role of conspiracy theories and anti-Muslim propaganda in the attacks on Omar, and how DHS has been historically weaponized against Muslims in the United States.

“Over the last 30 years, we have been conditioned to believe that Muslims, and now more broadly immigrants, are not just a threat to national security, but a threat to the American way of life,” said Ali.

“The right has been really eager to denaturalize Ilhan Omar for really going back a decade almost to the first Trump administration,” said Sommer. He called the investigation into Omar “one of the most striking examples we’ve seen of how the Trump administration is willing to use law enforcement to achieve its political aims and to sort of threaten its enemies.”

For more, listen to the full conversation of The Intercept Briefing on Apple Podcasts , Spotify , YouTube, or wherever you listen to podcasts.

Transcript

Jessica Washington: Welcome to The Intercept Briefing. I’m Jessica Washington, politics reporter at The Intercept. On Monday, Homeland Security Investigation agents searched the home of Minnesota Congresswoman Ilhan Omar. Reporting from the Washington Post suggests that the probe centers on allegations that Omar’s late father lied on immigration paperwork decades ago when Omar was a teenager.

According to a source familiar with the case who spoke to the paper, the Department of Homeland Security had previously declined to move ahead with an investigation years prior based on similar allegations. There still weren’t many details out as of Wednesday. The Department of Justice has vaguely described a “federal criminal investigation,” but Omar has long been a political foe of President Donald Trump.

In a statement to The Intercept, Omar called the raid “an outrageous abuse of power and an unprecedented escalation in the weaponization of federal law enforcement to target political enemies.” The raid on Omar’s home comes days after an Immigration and Customs Enforcement agent shot 28-year-old Oscar Belgal in the neck in New York City , with his 5-year-old son in the back seat.

The incidents have reignited concerns about the violent weaponization of the Department of Homeland Security by President Donald Trump against immigrants and the administration’s perceived political enemies.

The group Democracy Defenders Fund filed a complaint over the raid on Tuesday, arguing it violates the Hatch Act, a federal law that restricts political activity by members of the government’s executive branch. With early voting in Minnesota scheduled to start Friday, the group says the raid “appears to be timed to influence voters in the upcoming midterm election.”

Rep. Delia Ramirez, a Democrat from Illinois, introduced a new bill this week to dismantle the Department of Homeland Security and abolish immigrant detention in the United States. I’m speaking to her on Wednesday, October 14. Congresswoman Ramirez, welcome back to The Intercept Briefing.

Rep. Delia Ramirez: Oh, happy to be on.

JW: First, I wanna get your reaction to the Homeland Security Investigation search of Representative Ilhan Omar’s home on Monday. Were you surprised by the news? And what do you think it tells us about how the Department of Homeland Security is operating under President Donald Trump?

DR: I’m gonna tell you that, unfortunately, I’m not surprised by what happened — but it is still bone-chilling.

You’re talking about a department that was created to have full authority to violate civil rights every single day, now weaponized against a sitting member of Congress — sending, I don’t know, 20 HSI agents into her home at 4:30 in the morning.

Cruelty, complete control, and authoritarianism, and demonstrating their ability to get away with whatever they think they can, was the point of what they just did.

And it is clearly the embodiment of abuse of power. But it also shows us exactly why the Department of Homeland Security cannot be reformed. It should be dismantled. And that what they did — just three weeks from an election — was to attempt to create such paralysis on everyday people to believe that if they can do this to one of my colleagues, that they can do that to anyone. And it should concern everyone.

“Demonstrating their ability to get away with whatever they think they can, was the point of what they just did.”

Anyone that cares deeply about our democracy, about our ability to exercise our freedom of speech, or to be protected from being harmed by the federal government should see what is happening to my colleague Ilhan Omar as a clear indicator that this could also happen to them, if we don’t stop them.

And that justice is not just that she gets her phone back, or they leave her alone. Justice is holding accountable the leadership that made that terrorizing experience for Ilhan happen.

JW: Speaking of stopping them, I want to get into the bill that you introduced on Tuesday, the Reimagining Safety Act, which would abolish the Department of Homeland Security , eliminate all immigrant detention, and repeal “duplicative and overreaching terrorism laws.”

Now, there has been some forward momentum on the movement to abolish Immigration and Customs Enforcement, at least from progressives — but this bill would get rid of all of DHS. Can you talk about how that would work and why, in your opinion, it’s not enough to just abolish ICE?

DR: I just mentioned to you what’s happening to Congresswoman Omar, and to me, it’s a clear indicator of the greatest threat to our security: It’s not immigrants; it’s the Department of Homeland Security.

And I know that a lot of people say, DHS is “rogue,” we need to address this “rogue” organization. But it’s not rogue. I wanna be clear with people. DHS did not exist my entire lifetime. As a matter of fact, it’s been operating less than 23 years . And it was built exactly to do what it’s doing right now: to violate our rights under pretense of securing our safety , and it’s been, in fact, empowered to act with impunity, which is why people keep saying like, “How can they possibly get away with what they’re doing, and why can’t Congress stop them?”

Because frankly, since its inception, DHS has been utilized by the government to target and persecute people that they consider the public enemy. And we know that fascism always requires a public enemy. Muslim Americans , Latinos, Haitians, protesters . DHS has never kept us safe. And 24 years ago, Americans, Republicans, and Democrats alike, let’s be clear, raised a flag about how DHS would constitute unprecedented consolidation of power, and yet this agency was still formed under the United States Congress.

“The greatest threat to our security is not immigrants; it’s the Department of Homeland Security.”

DHS has been a problem of the administration for its entirety. And administration after administration has demonstrated to us that this agency needs to be completely dismantled piece by piece. And when you have people like Donald Trump with very authoritarian tendencies, you have clearly seen what they’re capable of doing. And frankly, I don’t think we’ve seen the full extent of what they could do.

So this is a moment for us to ask ourselves: What kind of world do we wanna live in? And do we want to continue to live with the fear that this agency can be weaponized against you, to persecute you, to arrest you, to detain you, to denaturalize you, to attempt to question your own citizenship, to kill you?

And at the same time, ask ourselves: If FEMA and TSA and cybersecurity and the Coast Guard and other critical programs are important for us, how can we allow them to be politicized by this agency that constantly keeps taking away the resources that these critical programs need? And so for me, this is the moment that we don’t just abolish ICE or abolish CBP — we take on the institution that was created to allow ICE and CBP to operate in the way that it does.

“Do we want to continue to live with the fear that this agency can be weaponized against you, to persecute you, to arrest you, to detain you, to denaturalize you, to attempt to question your own citizenship, to kill you?”

JW: To your point, there are all of these other functions of the Department of Homeland Security, from federal disaster relief to TSA screenings to customs enforcement. What happens to all those other functions if DHS is dismantled?

DR: I’m glad you asked me that question ’cause people keep saying, “Do you not care about FEMA?” Actually, because I care about FEMA, I want to dismantle the Department of Homeland Security.

H.R. 10803, the Reimagining Safety Act, it’s a first of its kind bill, and for the very first time, it’s a bill that community stakeholders spent months designing a Cabinet-level department. Because the Reimagining Safety Act would actually establish another department, the Department of Community Safety, that in fact is about protecting our communities.

It would dismantle DHS by preserving the Cybersecurity and Infrastructure Security Agency — we call it CISA, that was created under the Department of Homeland Security; protecting and expanding the Federal Emergency Management Agency; protecting and redirecting the Transportation Security Agency and custom functions into the Department of Transportation; while abolishing ICE and CBP and reinvesting funds in community.

And, certainly, I think the other piece of that is the surveillance: limiting government surveillance and reining in the unlawful abuses of data and curb the militarized enforcement that you’re seeing under DHS while beginning the process of taking what we call USCIS, that’s also under the Department of Homeland Security, and establishing it as its own separate civil immigration system that no longer operates under this agency that could call Renee Good , Alex Pretti , or Silverio Villegas terrorists.

JW: Thinking about your bill — obviously, Republicans currently control every lever of power, and only a handful of Democrats support abolishing ICE, and fewer still have called to abolish the Department of Homeland Security. Why introduce this bill now, knowing that it likely can’t pass this current Congress, much less get signed by President Donald Trump?

DR: Every single issue, whether it’s talking about universal healthcare, Medicare for All, whether it’s talking about raising wages — and now I introduced Living Wage for All — or blocking bombs and ending endless wars, oftentimes the assumption has been it is too early, or Republicans control, or Democrats have not arrived.

The people have arrived to where we are. They believe that this agency is the biggest threat to their well-being. And for me, this is an opportunity to provide a roadmap on how we actually in fact address the problem and then create a solution that centers people’s safety — and not just rhetoric of protecting the homeland under the guise of protecting us from terrorism, so that they can terrorize us.

Jessica, I am clear that this bill is not gonna pass overnight, but I am also clear that our community expects for us to propose something that is tangible, something that is comprehensive, and something that gets to the root of the problem by creating a permanent solution, so that we’re never here again.

“Our community expects for us to propose something that is tangible … that gets to the root of the problem.”

That means that over the next few months, and perhaps over the next year, we are building the support and changing the conversation in such way where in the same way only nine or 10 of my colleagues were willing to, out loud, say “Abolish ICE” two months ago, now we have actually more like 45, 50 of them, that we are in the same place when we’re talking about reimagining safety in this country.

Furthermore, every single poll that you look at ICE, CBP, [ousted former CBP head Greg] Bovino , [ousted former DHS head Kristi] Noem , immigration enforcement, and the fear of surveillance and losing our civil rights is top concern for the American people.

I am providing a bill that begins to respond to what our communities are demanding. I’m hoping that Congress doesn’t continue to be behind the ball of what the people are asking of them. And now I’m giving them something that they could actually in fact use.

I wanna tell you too that, look, in 2002, people expressed concerns about DHS. And 25 years later, those warnings have been validated as we watch what they’re doing. It’s a weapon pointed at anyone that the state considers a public enemy, whether it’s Congresswoman LaMonica McIver , whether it’s Congresswoman Omar, or the millions of people in this precise moment that are living in fear because of the way that this agency was created.

I think this is also an opportunity, Jessica, for us to actually educate the world around the fact that DHS was not created as a Cabinet department from our Founding Fathers — that we were OK before 2003 without DHS, and we can live in a life without it as well.

“We were OK before 2003 without DHS, and we can live in a life without it as well.”

JW: On the subject of looking to the future, if Democrats take one or both houses of Congress in the upcoming midterms, I’m curious what else you’re thinking about in terms of reining in DHS, and if you have any other priorities for the next session.

DR: Let me just come back to this bill, ’cause I think it’s really important — my own bottom line on it. The Reimagining Safety Act takes apart DHS and creates a new agency, a new agency that responds to what people are asking for — for we the people that they’ve elected to represent them, to keep them safe, to protect the mission of community safety, and to protect the public.

And it means that dismantling DHS is doing the work Congress should have done actually 24 years ago, to actually look at these agencies, all agencies under this department, but also how DOJ has been weaponized against us. How we created a Department of War . Just think about that: We’ve created a department where we want to spend more money on war than we want to actually spend on housing, on healthcare, on wages, and on infrastructure.

So for me, this is a moment for us to actually demonstrate that we’re going to fight like hell for accountability, to take on corruption, to end the terror, while also creating tangible ways to address the issues.

And one of those, and I’m going to be introducing a resolution [Thursday] around what should our positioning be when it comes to immigration. Because this agency is about what is wrong and what needs to stop so that we can actually have safety, but then we also need to talk about how we restore our systems of asylum , h ow we actually in fact establish legal pathways , and how do we bring 11 million people who are in fear, in the shadows, crying daily, to finally come out of the shadows into a justice status.

I am gonna be working really hard to make that front and center with our leadership, and I’m disappointed that our leadership isn’t centering that as one of the very first things that they wanna work on in the first 100 days. Because unfortunately, that is telling the people that have been under siege by this administration: Being an immigrant or being brown or being a protester isn’t the top priority of people that need to be protected.

When our leadership is talking about first 100 days of many important things, but not a word around immigration, and not a word around real accountability to what has happened under ICE and CBP.

JW: Thank you, Congresswoman. We’re gonna leave it there, but people can read more about your bill , the Reimagining Safety Act, at theintercept.com, where we have a story out about it. And thank you so much for joining The Intercept Briefing.

DR: Thank you. Appreciate it.

Jessica Washington: Next, I speak with Rozina Ali , a journalist covering the war on terror, Islamophobia, the Middle East, South Asia, and literature; and Will Sommer , a senior reporter covering right-wing media and conspiracy theories at The Bulwark. Will, welcome to the Intercept Briefing, and Rozina, welcome back .

Will Sommer: Thanks for having me.

Rozina Ali: Thank you so much for having us.

JW: Rozina, I want to start with you. In your new book, “ Seasons of Fury: Four Families and the Rise of Islamophobia in America ,” you discuss the history of how immigration enforcement has been weaponized against Muslims in the United States. And while I want to preface by saying that there’s still a lot we don’t know about the raid on Congresswoman Ilhan Omar’s home, we do know that Omar is outspoken, Muslim, Black, and an immigrant . She’s also been a consistent target of Trump and his allies.

How might this relate to the broader history of how the Department of Homeland Security has been weaponized against Muslims in the United States?

RA: Well, I really appreciate this question. There’s a very long history when it comes to using immigration enforcement to target Muslims and the Muslim community in the United States, and I just wanna go back a little bit before 9/11 to the late 1990s.

One thing that was happening was the use of secret evidence against Muslim immigrants, a lot of Arabs and South Asians, and a lot of Muslim immigrants, to, essentially, detain them and deport them. And what that meant was actually using classified evidence that the government brought forward that the defendant could not see.

And it actually kind of reminds me of what’s happening with Ilhan Omar now, is that we don’t actually know what the allegations are. We don’t know what the case is hinged on.

What the DHS did after 9/11 was actually broaden out its use of immigration enforcement to target Muslim communities. One of the things it did was actually institute a registry called the National Security Entry-Exit Registration System . That essentially allowed the U.S. government to detain thousands of Muslim immigrants and eventually deport them — even though they had no criminal charges.

One of the things that protects Ilhan Omar is that she is a U.S. citizen, but one of the things that does chill me is there is this longer, broader history of the government using immigration enforcement in order to deport people and detain people, even if they have not been guilty of any criminal charges.

JW: That makes a lot of sense, the concern, because we know there’s history of this power being used in secretive ways, kind of similar to what’s potentially happening now. And I do, again, want to caution that we do not have all the details on this case at the moment. But Will, I wanted to bring you in to kind of get into the origins at least where some of these conspiracy theories that have been swirling around Congresswoman Omar.

You wrote about this in September , kind of where you found that many in MAGA world were frustrated that after nearly a decade of conspiracy theories — some of which were pushed by Trump about alleged immigration fraud from Omar — she remains not only in the United States, but in Congress.

Will, can you explain some of the conspiracy theories that are fueling this push to deport Omar? Is there any evidence for them? And do we know if they had anything to do with the raid on her home?

WS: The right has been really eager to denaturalize Ilhan Omar for really going back a decade, almost to the first Trump administration. A lot of it was fueled by this idea that she had married her brother as some kind of immigration scheme, or essentially that this man she was married to was secretly her brother.

Now, I looked into the origins of this at the time. I thought, “Well, is this true? Could it be?” No, it’s not. In fact, it all started on some random kinda Somali Minnesotan message board where someone said, “Yeah, she’s married to her brother.” And then from there, once she became more prominent as a Democratic figure , people on the right kinda dug through that and sort of built this whole conspiracy theory based off of this one post.

Essentially, now that Trump is back in power, there’s this demand on the right because, as with other conspiracy theories, they’ve come to believe this. So they’re saying, you know, “Oh man, when are we finally gonna deport Ilhan Omar?” So Markwayne Mullin, the head of DHS, has been under this pressure, and he gave this interview at the Republican convention to [right-wing YouTuber] Benny Johnson, and he said, “Oh yeah, she married her brother.”

And Benny Johnson said, “Well, OK. Are you gonna deport her?” Now, you kinda can’t deport her anyway, even if she had married her brother. But there’s all this demand. And so what we’re seeing with this latest investigation is it’s not even related to the brother thing, reportedly. It’s — according to the Washington Post and some other outlets — related to this idea that Ilhan Omar’s father, who is dead now, misstated her age on a citizenship application.

Essentially, she was 17, according to the official record. But had she been a year older, 18, it would’ve kind of complicate it because she would’ve been an adult. It would’ve made it harder for her to get citizenship. This is this idea that’s been pushed by her Republican opponents in elections in the past. It’s really thin, and we can kinda get into it in a second. But this is some thin gruel, essentially, that they’re trying to manufacture this whole effort to pull her citizenship.

JW: I really wanna get more into the conspiracy theory of it and what’s being pushed here. And I think it’s interesting that it’s almost like they’re kind of grasping at any little thing they can get their hands on.

At first, it’s the brother-marriage of it all, which, as you pointed out, has very thin evidence, essentially no evidence. And then it’s pulling at these other threads about her dad, which have all been swirling in the ecosystem for a while.

I want to get a little bit deeper into what conspiracy theories, what role they have here, and I want to talk about what Donald Trump said on Monday night after the raid. He spoke at an Ohio rally pushing more conspiracy theories about Rep. Ilhan Omar and the Somali community in Minnesota in general. Let’s hear that clip now.

Trump: Just look at what’s happening in the once great state of Minnesota. What a mess they have done. Somalia, wonderful, wonderful. And that Ilhan, somebody was asking me, I don’t know what they’re doing with her, but I can tell you this: She’s a disaster. She comes in from a country without laws, without police, without military, without — all they do is shoot each other. And she comes into our country, and she says, “I have a constitutional right.” She’s got a constitutional right. She’s telling us about the Constitution, and she comes from one of the worst countries anywhere on the planet. Last week, savage Somali gang members shot two people in the high school parking lot in the middle of a football game. Just days later, a few miles away, the FBI arrested a radicalized Somalian who was planning to carry out an ISIS-style terrorist attack at the Mall of America, aiming to kill as many as possible, in his words. This is not what we want in this country.

Crowd: Deport! Deport! Deport! Deport!

Trump: What they have done to Minnesota.

JW: Rozina, this isn’t the first time we’ve seen the administration spread conspiracy theories about Muslims. Ahead of Operation Metro Surge in Minneapolis , for example, we heard similar rhetoric about the Somali community . What role have conspiracy theories played in the targeting of Muslims in the United States?

RA: Oh, where to start?

JW: Yeah, there’s a lot.

RA: There is a lot. I think one of the most enduring theories of Muslim communities is that there are radical elements that are living among Muslim neighborhoods, among Muslim communities. And that is a conspiracy theory born out of, obviously, the war on terror framework.

But one of the things that we saw in the aughts, especially under the Obama administration and especially as Trump rose in power, was this notion that Muslims, not just foreign elements, but Muslims living inside the United States are secretly hiding their agenda.

And this is something that we hear with regards to Abdul El-Sayed, that basically any Muslim that you meet is hiding a secret agenda, and what they wanna do is enact Sharia law in the United States. No one has yet to explain what Sharia law means and what that would mean to enact it, but this is one of the things that keeps coming up over and over again.

What is so interesting about this speech that Trump made recently is that he is actually throwing every theory against the wall that he can. That he mentions ISIS — something we haven’t heard for a long time. He mentions radicalization. He mentions fraud. And so all of these things that have been talking points that have been used against Muslim communities, particularly against the Somali community in Minnesota, he is using all at once in this one speech.

“What is so interesting about this speech that Trump made recently is that he is actually throwing every theory against the wall that he can.”

I will say, this is also the talking points — well, fraud is a new one — but when it comes to radicalization and when it comes to the notion of radical elements threatening the security and Western way of life of the United States, these are talking points he was peddling back in 2015 when he eventually called for a Muslim ban.

As we may remember, one of his first executive orders when he became president in January 2017 was to sign an executive order banning immigrants from Muslim-majority countries .

This is actually something that we see Donald Trump doing a lot, which is, he peddles conspiracy theories . He puts them on the main stage. His allies reinforce them and regurgitate them, and he gives them legitimacy, right? He legitimizes them by using a government framework to offer some veneer of truth to them. And unfortunately, as we know, one iteration of the Muslim ban was eventually upheld by the Supreme Court.

JW: As Rozina said, fraud is kind of a newer iteration of these kind of Muslim conspiracy theories. Where did it originate from, and why has it become such a powerful talking point on the right when targeting particularly the Somali community in Minnesota?

WS: I should say: Minnesota has a very — despite being a Democratic state — it has a very intense Republican activist and kind of like quasi-journalist scene going on. And so a lot of that has been built around, again, building, talking about Ilhan Omar. And now we’ve seen it kinda going after the Somali community in various ways.

But really, this hit a new level in January with this young man named Nick Shirley , who’s like a YouTuber. He went around, he was led around by one of these Minnesota conservative journalist types to various daycares, and they said,”Look at the fraud here.”

Now look, there are some criminal fraud cases that are being prosecuted in Minnesota. But there was this broader sense created by this video of, like the Somali community are parasitic, that they’re up to no good, they’re stealing all this money, what have you.

And then in fact, that helped justify then — at least in the view of the Trump administration — the ICE surge into Minneapolis . And so this has created this idea of constant Somali American fraud, not just in Minnesota, but all over the place . And so obviously it dovetails with the Ilhan Omar idea as well, that she forged her citizenship, she somehow faked that.

JW: That makes a lot of sense. It is really interesting to see the way the administration targeted Minnesota, both because of the Somali community, which was particularly vulnerable, because as we’ve mentioned this is both a Black, immigrant, and Muslim community, so this trifecta of areas that the Trump administration is targeting. And then also you had Ilhan Omar, who was this image that the administration could attack and go after, and it was really popular to their base to do so.

Rozina, when we’re talking about the stories that kind of stick when it comes to conspiracy theories, what sort of stuff has really stuck and why? I’m curious to understand why in the imagination of so many people in the U.S. these conspiracy theories have really stuck.

RA: I think one of the most enduring theories that keeps coming up over and over again and that really has stuck is this notion that, as I mentioned, that Muslims have nefarious secret agendas, but also that they have ties to foreign organizations and foreign elements.

And one of the things that we hear with regards to Ilhan Omar, too, is that — and I think I’ve heard this from some right-wing talking points in the previous days — is that there might be allegations that she has some financial ties or connections to foreign groups. This is something we have heard about Zohran Mandani. This is something we have heard about Abdul El-Sayed . This is actually something that has been a part of the American narrative about Muslims for decades.

One of the crucial things that was happening in the ’90s was that the U.S. government was looking for financial ties to foreign organizations among the Muslim community. And one of the things that happened immediately after 9/11 was that the United States government shut down the biggest Muslim charity in the United States , called the Holy Land Foundation, because of alleged nefarious ties to militant groups abroad.

Because there has been a government framework for this, I think it is really easy for a lot of conspiracy theorists and for a lot of Islamophobes, frankly, to keep regurgitating this notion that “just look at the financial ties of Muslims.” And one of the lasting shifts that we have seen in the last 25 years is that that scrutiny is not just against Muslim immigrants or visa holders, but also against Muslim Americans and citizens of the United States. And I don’t think we’re actually going to be able to break out of those conspiracy theories so easily if we don’t actually start discussing and reckoning with how we think about what terrorism is.

So for example, with the Holy Land Foundation case , that is a case that keeps coming up over and over again. A lot of those ties, financial ties, it’s a really complicated case, but a lot of those financial ties were related to Hamas, but it’s also relevant to remember that Hamas at the time was a governing body in Gaza that was supplying aid to people.

And essentially, the way we talk about terrorism, the way we talk about countries abroad, has a real impact for how we think about the Muslim community at home. So I just wanna go back to Abdul El-Sayed for just really quickly, is that one of the biggest talking points peddled against him these days is that his mother is connected to the Muslim Brotherhood .

Now, there’s very little understanding of what it had meant to be a supporter of the Muslim Brotherhood in Egypt, right? Because we just see that through the lens of terrorism, it’s completely dismissing all the political dynamics on the ground in those countries abroad. And I think what a lot of conspiracy theorists and Islamophobes have done so effectively is forever tie Muslim communities in the U.S. to what Americans largely think of as nefarious elements in other countries.

JW: I think that’s all really important, recognizing, to your point, that none of these conspiracy theories — I mean, again, they had taken new iterations — but that conspiracy theories against Muslims in the United States is not a new phenomenon. I guess I am curious if we’re moving into a new phase though, of danger, essentially, from the administration.

Will, coming back to your September piece, in it you compare the calls to deport Rep. Ilhan Omar to the Department of Justice’s attempts at convicting the president’s political enemies . And those have, for the most part failed, in terms of getting these convictions, “locking up” his enemies, as he’s said he wants to do.

Does this raid of a sitting congresswoman’s home signal a new, more dangerous era from the White House when it comes to threats against the administration’s perceived political enemies? Are we entering a new, more dangerous phase?

WS: I think the raid represents sort of the confluence of two alarming trends. One is what we’ve been talking about, which is the growing, second tide of Islamophobia that we’re seeing from this administration, that I think was sort of on the back burner as there was so much promotion on the right about fears about immigration from Latin America. Now, we see in Texas there’s so much anger at Muslim communities in that area in particular.

We’re also seeing though, as you said, the politicization of the Justice Department. I mean, this raid falls within the 60 days. Typically, the DOJ doesn’t raid politicians this close to an election, particularly something that’s about a 30-years-old child immigration case. Clearly, it’s political. It’s an attempt to make Ilhan Omar the face of the Democratic Party, suggest all this fraud.

Look, a lot of those attacks, those political lawfare, what have you, is related to Israel and Palestine, people like Fergie Chambers , Max Blumenthal, have either faced indictments or had their devices seized, in Max Blumenthal’s case . Certainly a lot of it aimed at campus activists as well.

I think the Ilhan Omar thing is really one of the most striking examples we’ve seen of how the Trump administration is willing to use law enforcement to achieve its political aims and to threaten its enemies.

“The Ilhan Omar [raid] is one of the most striking examples we’ve seen of how the Trump administration is willing to use law enforcement to achieve its political aims and threaten its enemies.”

JW: You mentioned that post-Watergate 60-day rule, which is an unwritten policy designating a blackout period effectively before elections during which the Department of Justice is not supposed to conduct activity which could influence voters. There’s also the Hatch Act, which states that government employees cannot use their authority or influence to interfere with or affect an election. There was actually a Hatch Act complaint filed yesterday by a watchdog group over the raid on Ilhan Omar’s house.

At this point, Will, with an administration that has already done so much over the years without consequence, does the Hatch Act and do these other kind of long-standing norms serve any purpose or any protection?

WS: No. At this point, unfortunately, I think the Hatch Act is a dead letter in terms of, no one’s gonna enforce it, at least until Democrats retake some kind of power. Look, the administration is using government money to buy political ads , outright political ads. And so certainly, I think they’re going to unfortunately be able to get away with things like raiding a congresswoman’s house.

I think really it’s just become, the idea that they would use Justice Department or DHS to achieve political aims is just understood now that that’s something Trump is gonna do.

JW: And Rozina, from your perspective, does this raid to you signal a kind of new, more dangerous era, for not just the president’s political enemies, but also disfavored groups?

RA: Yeah, I want to just go back specifically to the Somali community living in the United States. It is telling that President Trump disparaged the country of Somalia as he also bombs this country with hundreds of airstrikes in the past year alone, displacing more people and causing more people to search for refuge abroad.

We mentioned the ICE Operation Metro Surge in Minnesota last December. Trump was talking about the Somali community in Minnesota, and ostensibly fraud was the reason, one of the reasons, for which he sent ICE agents into the city.

One of the things that the government learned very quickly was that a lot of Somalis living in Minnesota are actually citizens . They are naturalized or that they were born here, and they could not be easily picked up and detained or deported, even though there were some who were. Yet what happened in the months after Operation Metro Surge was that it really chilled the Somali community living in the city . Even though there were so many people who did go out and protest and help each other, there were a lot who basically stayed at home . And I actually spoke with several people who would not leave their house for months.

Now, one of the things that really frightens me about what the DOJ and DHS did with regards to Ilhan Omar is that it is actually expanding the war against Somalis. It’s now seeing ways in which to not just frighten asylum-seekers and refugees and visa holders, but also naturalized citizens.

“What this administration has done so effectively is actually telling everyone that there are some communities who are no longer protected the way they used to be.”

And I think what this administration has done so effectively is actually telling everyone that there are some communities who are no longer protected the way they used to be. And we saw that also in the context of, for example, the arrest of Mahmoud Khalil and pro-Palestine protesters. We are seeing a level in which government is used to target people who before would have protections from the government, and now they are being told that they are actually vulnerable.

And Ilhan Omar, it’s possible that nothing comes of this raid, and things will just go back to normal. But what worries me is the larger chilling effect on the community, including now naturalized citizens.

JW: Trump aside, the Trump administration aside, Rozina, is this just the logical endpoint of effectively decades of crafting a federal domestic surveillance and police state that is laser-focused on immigrants and Muslim Americans?

RA: Yes, it is, right? One of the things that has happened over the 20, or last 25 years has been one immense power that has been concentrated in the executive branch. This notion that when it comes to national security, the government has a lot of leeway to violate people’s civil rights But the other thing — one of the other enduring legacies of the last 30 years — is precisely what the American public is willing to accept.

“We have been conditioned to believe that Muslims … are not just a threat to national security, but a threat to American way of life.”

And over the last 30 years, we have been conditioned to believe that Muslims, and now more broadly immigrants, are not just a threat to national security, but a threat to American way of life.

And again, Trump is able to throw everything — when it comes to Ilhan Omar and the Somali community — throw everything at them. They’re a threat to national security. They are threatening how we live in this country. They are threatening what it means to be American. They are taking away our money and our dollars, and he is using all of these talking points to help build up public support for this agenda against the Somali community. I don’t think such a blatant targeting and explicit targeting would have been met with such support even in, for example, October or November 2001.

JW: I think those are all very good points. I hate when people say this is the only form of acceptable bigotry, because I can frankly say that there are many forms of acceptable bigotry. But the extent to which Islamophobia is a part of American culture is accepted, I think is not just troubling, it’s decades of conditioning, as you’ve pointed out. It is decades of feeding these conspiracy theories, of repeating them until they feel almost natural to so many of us.

But I want to give you both an opportunity to just share any final thoughts. Will, I want to start with you. Is there anything else that you’d wanna add?

WS: As this case goes forward, it’ll be interesting to see what it looks like. But the idea that Ilhan Omar lied about her birthday or whatever is all based on, there was this one congressional website that said she was born in 1981 instead of 1982. And so Republicans have seized on this. Look, it’s one website, right? I looked in the court records, all this stuff. Before she became famous, she was listing her birthday as 1982, all this stuff. And so if that’s gonna be the crux of it, that one website had a typo, I don’t think the administration’s gonna have a lot to run on here.

JW: There’s very thin evidence for some of these conspiracy theories, although people will take very thin evidence and run with them. Rozina, any final thoughts from you?

“What does this mean for denaturalization efforts across the board?”

RA: I agree with Will, I don’t think that the government has that much to go on. It seems to be very thin evidence. But again, it is government resources that are being used to basically go on a, what appears to be for right now, a witch hunt. But again, what worries me is the more lasting effects of this, which is, what does this mean for denaturalization efforts across the board? And there seems to be not just support for it, but also a deliberate desire to run with such an agenda.

JW: And we’re gonna leave it there. But Will, Rozina, thank you both so much for joining me on The Intercept Briefing.

WS: Thank you.

RA: Thank you.

JW: That does it for this episode. We wanna hear from you. Tell us what you’re following or want to see more coverage of. Email us at podcasts@theintercept.com, or leave us a voicemail at 530-PODCAST. That’s 530-763-2278. This episode was produced by Andrew Stelzer. Laura Flynn is our supervising producer. Jordan Uhl is our social media producer.

Ben Muessig is our editor in chief. Maia Hibbett is our managing editor. Nara Shin is our copy editor. William Stanton mixed our show. Legal review by David Bralow. Slipstream provided our theme music. This show and our reporting at The Intercept do not exist without you. Your donation, no matter the amount, makes a real difference.

Keep our investigations free and fearless at theintercept.com/join. And if you haven’t already, please subscribe to The Intercept Briefing wherever you listen to podcasts. Do leave us a rating or review. It helps other listeners find our reporting. Until next time.

Japanese people still aren't having sex. And nobody knows why

Hacker News
www.sciencefocus.com
2026-10-16 05:54:55
Comments...
Original Article

Young adults in Japan are having less and less sex, according to a recent review – and we don’t know why.

The review estimated that around half of Japanese people reach their mid-twenties with no sexual experience at all, and approximately 10 per cent reach their 30s before having sex.

Even those who have lost their virginity don’t seem to be having much sex. Online surveys from the 2020s indicate that around half of Japanese adults aged 20–49 are sexually inactive, meaning they haven’t had sex in the past year.

And this national dry spell seems to have got worse in recent decades, with rates of sexual inexperience and inactivity both increasing since the millennium.

In comparison, just over one in three Japanese adults aged 20–24 reported being sexually inexperienced in 2002. By the 2020s, online survey data indicates this may have risen as high as 60 per cent of men and 51 per cent of women in the same age group.

At least, these are the conclusions of a review of Japanese sexual attitudes and behaviours, published in The Journal of Sex Research .

The study’s authors trawled through 38 publications, based on 43 surveys on sexual trends in Japan from 1974 to 2024, mostly in a heterosexual context.

Among their findings were the rise of sexlessness within marriage, and the popularity of pornography and the services of sex workers, especially among men.

For instance, in some surveys from 2008 to 2024, up to 60 per cent of Japanese men said they had previously paid for sex.

In high-income countries all over the world, young adults seem to be having less and less sex. For example, a 2019 study reported that nearly a third of their UK respondents said they hadn't had sex in the previous month, compared with around a quarter in 2001.

But the authors of this study wrote this issue was particularly pertinent in Japan, where “sexual behaviours are often described as a puzzling and contradictory mix of permissiveness and expectations of discretion.”

While they couldn’t be sure why Japanese adults were having so little sex, the authors did suggest some possible explanations.

One was that they just didn’t want to. A 2020 online survey indicated that 20–30 per cent of men aged between 20 and 39 years said they didn't want to have sex, as well as around 40 per cent of women in both age groups.

Perhaps, the authors suggested, unmarried adults in their 20s and 30s were unwilling to waste time and money on dating people they might not marry.

Two women sit on a sofa together
Japanese society is still overwhelmingly heteronormative, the study authors wrote, with limited acceptance and visibility of non-heterosexual identities. Very few survey participants identified as homosexual, sometimes as few as 1.5 per cent - Credit: Getty images

And, for women particularly, the idea of marriage might not seem so appealing, in a culture where they were expected to bear most of the responsibility for household chores.

Plus, the authors continued, Japanese adults did not seem so embarrassed about virginity and abstinence, compared to adults in countries such as the US or UK.

And other outlets for sexual desire were more acceptable, for example fictosexuality: the expression of romantic or sexual feelings towards fictional characters.

A 2017 survey of Japanese students aged 16–22 found that 14–17 per cent of them admitted to having romantic feelings towards a character in a video game or anime.

At the same time, the authors wrote that a demanding work culture, with long hours and commutes, may make it difficult for young adults to form and maintain sexual relationships. In Japan, around 30 per cent of men and 15 per cent of women work for more than 50 hours per week.

Also, sex education in Japan was limited, very few women used hormonal contraception, and there was limited acceptance of non-heterosexual identities.

Dr Vanessa Apea , a consultant physician of sexual health at Barts Health NHS Trust – who was not involved in this research – told BBC Science Focus that the study was “striking” for what it revealed about the shifting priorities of young Japanese adults.

“Rather than a decline in desire, the evidence points to broader social and economic influences at play; long working hours, job insecurity, evolving gender roles, and a cultural emphasis on stability before partnership,” said Apea.

“While sexual frequency is also falling in the UK and US, Japan’s pattern feels more pronounced – perhaps an early signal of a global shift where technology, work culture, and modern expectations are quietly redefining how we connect, form relationships and experience intimacy.”

However, Apea urged for caution with this study’s results, because its data came from a wide range of surveys where participants may have defined their sexual experiences differently.

Read more:

Tesla's new Roadster makes a flying debut, hitting 60 MPH in under a second

Hacker News
www.foxbusiness.com
2026-10-16 05:40:47
Comments...
Original Article

Tesla unveiled its long-anticipated Roadster on Thursday during a dramatic event in which the vehicle used compressed-air thrusters to fly off a ramp and perform a midair maneuver.

The vehicle was seen flying, performing a midair flip and accelerating from zero to 60 mph in under a second.

"Turns out the future does have flying cars," Tesla and SpaceX CEO Elon Musk said at a SpaceX test site in McGregor, Texas.

Vice President of Vehicle Engineering Lars Moravy added, "Flying cars are real."

ELON MUSK CALLS WAYMO CARS 'PET DESTROYERS' AS ROBOTAXI RIVALS CLASH OVER SAFETY

Tesla Roadster

Tesla officially unveiled its redesigned, next-generation Roadster on Oct. 15, 2026, during a dramatic livestreamed event at a SpaceX test site in McGregor, Texas. (Tesla/X)

The jaw-dropping showcase featured the new Roadster accelerating up a massive curved ramp and using a fan-based suction system to remain attached until it was completely upside down before using integrated cold-gas thrusters developed in collaboration with SpaceX to launch off the ramp, flip in midair and land safely back on the ground.

In another demonstration, the Roadster launched over a lineup of cars and a semi-truck, performing a midair flip before landing safely on the other side.

Musk said certain versions of the Roadster can accelerate from zero to 60 mph in less than one second and reach a top speed of more than 230 mph. During the event, Tesla demonstrated a Roadster accelerating to 60 mph in under a second.

WATCH: ROADSTER PERFORMS ‘KICK FLIP’ STUNT:

Tesla Roadster performs a 'kick flip' flight

Tesla CEO Elon Musk introduced a flight demonstration Thursday in Texas of a next-generation Tesla Roadster electric vehicle performing a "kick flip" over other Tesla vehicles.

"Every car on the road today is limited by one thing: tire grip Roadster's thruster system generates 4–5x the force the tires can. More force on the same mass means significantly better acceleration – physics does the rest," Tesla said on X.

Nearly a decade after the Roadster's initial 2017 concept debut, the vehicle left audiences in awe with the gravity-defying demonstration that deployed SpaceX’s rocket technology.

"Today, Roadster presents a new moment in history – the best of the last human-driven cars," Tesla wrote on X.

Tesla executives announced at Thursday's event that production would begin in 2028.

Tesla's next-generation Roadster

Tesla's next-generation Roadster launched over a lineup of cars and a semi-truck, performing a midair flip before landing safely on the other side. (Tesla/X)

Musk and other Tesla executives did not outline the cost at Thursday's event, but nearly a decade ago, the company quoted a base price of $200,000.

TESLA POSTS STRONGER-THAN-EXPECTED QUARTERLY DELIVERIES

The Tesla Roadster's thruster system generates 4–5x the force the tires can

Tesla executives announced at Thursday's event that production would begin in 2028. (Tesla/X)

GET FOX BUSINESS ON THE GO BY CLICKING HERE

Tesla's reservation page for the Roadster after Thursday's event listed a $50,000 reservation payment for the "Performance" version and a $250,000 reservation payment for the "Thrust" version, which features "acceleration thrusters." An invite-only "Rocket" variant is a single-seat model with a "full flight system."

When Tesla revealed a prototype of the car in 2017, it said that deliveries would begin in 2020.

Writing stateful effect handlers in EYG

Lobsters
eyg.run
2026-10-16 05:28:51
Comments...
Original Article

Stateful handlers

Getting started

A common requirement when handling an effect is to depend on some state outside the computation raising the effects. For example an Increment effect needs to track the current count. Or in testing a handler for StandardOut might build up a state consisting of all messages written.

Below is the implementation of a single stateful Increment effect.

let with_counter = (initial, computation) -> {
  handle Increment(
    (_unit, resume) -> {
      (state) -> {
        resume(state)(!int_add(state, 1))
      }
    },
    (_) -> { 
      let value = computation({})
      let finish = (count) -> { {count, value} }
      finish
    }
  )(initial)
}

with_counter(0, (_) -> { 
  let _ = perform Increment({})
  let _ = perform Increment({})
  let _ = perform Increment({})
  "Done"
})

Each handle expression applies to a single effect label. Handlers can be nested to handle multiple effects but care needs to be taken to manage the same state between multiple handlers.

This is part of the design to keep the type system simple, though the restriction might be relaxed in the future. If you want more than one effectful operation you have two options.

A generic stateful effect

let with_counter = (initial, computation) -> {
  handle Update(
    (transform, resume) -> {
      (state) -> {
        let state = transform(state)
        resume(state)(state)
      }
    },
    (_) -> { 
      let value = computation({})
      let finish = (count) -> { {count, value} }
      finish
    }
  )(initial)
}

let increase = (amount) -> {
  let _ = perform Update((state) -> { !int_add(state, amount) })
  {}
}

let get = (_) -> {
  perform Update((state) -> { state })
}
with_counter(0, (_) -> { 
  let _ = increase(3)
  let value = get({})
  let _ = perform StandardOut(!int_to_string(value))
  let _ = increase(2)
  !int_to_string(value)
})

This counter value can be increased and retrieved. The functions get and increase are the public interface to the stateful operation. A generic Update effect takes a transformation from the current state to the new state.

The generic approach is only possible if you control the design of the effects which is not always possible. For example we might want to test a library with the Get and Increase effects.

In that case effects can be bounced to a new effect which you do control.

let with_state = (initial, f) -> {
  // Generic State effect owns the shared state.
  let run = handle State((update, resume, state) -> {
    let state = update(state)
    resume(state)(state)
  }, (_) -> {
    // These handlers translate operations; they do not hold separate state.
    let value = handle Increase((amount, resume) -> {
      let _ = perform State((state) -> { !int_add(state, amount) })
      resume({})
    }, (_) -> {
      handle Get((_, resume) -> {
        let state = perform State((state) -> { state })
        resume(state)
      }, f)
    })

    let finish = (state) -> { {state, value} }
    finish
  })
  run(initial)
}

with_state(0, (_) -> {
  let before = perform Get({})
  let _ = perform Increase(2)
  let middle = perform Get({})
  let _ = perform Increase(-1)
  let after = perform Get({})
  [before, middle, after]
})
// {state: 1, value: [0, 2, 1]}

Returning functions

Type checking the following will fail with the error this expression has a recursive type .

let main = (_) -> {
  let f = perform Get({})
  f("")
}
main({})

Why this fails is not immediately obvious. The type of f appears in the reply type of the Get effect row of the main function. When f is called its effects are unified with the effects in the current function block, i.e. the main block. This results in a recursive type trying to be constructed.

It is recommended not to return functions from effects because of this.

Penguin Colony review – an Antarctic odyssey of Nazis and Lovecraftian horrors

Guardian
www.theguardian.com
2026-10-16 05:00:57
PC; Origame DigitalThis odd but absorbing adventure sends you waddling across Antarctica in search of an eldritch entity – uncovering a world far stranger than it first appears A Nazi kneels down on frozen snow, staring at an endless Antarctic horizon. Another holds a gun to his head, ready to end ...
Original Article

A Nazi kneels down on frozen snow, staring at an endless Antarctic horizon. Another holds a gun to his head, ready to end his own life. I direct a small waddling penguin up to them, trying to imagine what it could be thinking. Dismay, perhaps. Likely bewilderment. But then a faint smile seems to break out across its beaky face, as if amused by these silly humans and their misguided belief that they could ever best this howling, harsh landscape.

For most games, the idea of playing as a penguin observing Nazis losing the plot near the south pole would be weird enough. But Penguin Colony, developed by Origame Digital, pushes further. This is an audacious, frequently brilliant retelling of HP Lovecraft’s 1936 novella At the Mountains of Madness, in which eldritch horrors are just as common as Nazis. Further weirdness abounds: the many collectibles scattered about this place are not shiny gold objects à la Super Mario or Sonic. Rather, they are words. So tottering about as a semiaquatic bird, you have a unique mission: collect human language.

Penguin colony game, screenshot
Unnerving, discordant … Penguin Colony. Photograph: Fellow Traveller

But let’s zoom out for a moment because playing Penguin Colony is more straightforward than this description suggests. First and foremost, it is a semiopen world exploration game in which you direct a penguin to the same unearthly entity that the Nazis are chasing. You hop, swim and glide about tummy-first, chewing up miles of frozen wasteland like an indefatigable snowboarder. Tapping a button next to another penguin lets you swap into its body. Some of these, like the rockhopper penguin, are nimble movers, capable of jumping especially high. Fluffy penguin chicks, meanwhile, can squeeze through tiny gaps.

At first, the game’s polar levels are straightforward: snow drifts and ice floes peppered with the remnants of human habitation such as fishing huts. But your surroundings quickly grow stranger: supersized stone labyrinths whose architectural splendour evokes Dark Souls , alien-looking obelisks and abyssal crevasses. Everything in the world is rendered in jagged, low-poly graphics, looming from the screen like a hallucinated PlayStation 2 game.

Penguin Colony by Origame Digital.
Low-poly nightmares … Penguin Colony by Origame Digital. Photograph: Origame Digital/Fellow Traveller

As you navigate these spaces, a deep-voiced narrator relays the expedition of a scientist from decades before. It’s clear he is driven by the same hubris and racism as his Nazi successors.

The layering of space, time and narrative is terrifically unsettling. At one point, having just hopped my way through a challenging platform section, I came across a Nazi cannibal feasting on his fellow soldier as a researcher delivered yet another verbose pontification on his God-given right to plunder Earth’s southernmost tip. At times, jarring cuts to archive footage and what seem to be Indigenous art interrupt the low-poly action. My head was often spinning, trying to reconcile all these conflicting, contrapuntal elements. Better, I found, to let go and soak up the unnerving, discordant whole.

Penguin Colony is a little uneven technically: I experienced a small number of audio glitches and, at times, bugs with the controls. Yet this does not overly detract from an experience that builds to an incendiary conclusion: a takedown of Lovecraft’s racism and Nazi barbarism while also, intriguingly, inviting the player to see the world in newly reenchanted terms.

This latter point is made with aplomb at the game’s end: a spectacular cosmological map that details everything you discovered on that playthrough. More tantalisingly, it shows you all the things you missed. This reveal is liable to induce a feeling of vertigo and wonder: Penguin Colony, one of 2026’s boldest, most original games, is far bigger than it first lets on. To access all of its secrets and excavate all of its meaning, one must think and act less like a human mainlining towards their objective. On the contrary, you must embrace the spirit of a renegade penguin, waddling carefree towards whatever piques your interest: atrocity, beauty and all.

Long After the Maui Fires, Toxic Metals Linger in Residents’ Bodies

Intercept
theintercept.com
2026-10-16 04:45:00
The toxic exposures didn’t begin with the flames. Researchers are examining how fires affected a community already harmed by plantation agriculture, development, and colonialism. The post Long After the Maui Fires, Toxic Metals Linger in Residents’ Bodies appeared first on The Intercept....
Original Article

In August of 2023, a series of wildfires broke out across Maui, killing more than 100 people, destroying thousands of homes, and causing billions in damage. Noelani Ahia, who is Kanaka Maoli and co-founder of Maui Medic Healers Hui, helped mobilize nearly 600 volunteers in Lāhainā, including doctors, nurses, and therapists.

Three years later, the housing and health crises remain acute. Maui Medic Healers Hui runs a free clinic, but Ahia wishes it had 10 more to address the community’s needs. “The fire may be out, but the catastrophe is not over by any stretch of the imagination,” she said.

The devastation extended well beyond the lives lost and buildings destroyed. Research published last year by researchers with the University of Hawaiʻi at Mānoa’s Maui Wildfire Exposure Study, or MauiWES, found that more than 1 in 5 residents had reduced lung function.

Now, new research from the same project has found elevated levels of toxic metals in the island’s residents months after the fires, with higher exposure associated with impaired lung function. The findings offer further evidence that the health consequences of catastrophic wildfires can persist long after the flames are extinguished and the smoke clears.

“What we consider and sometimes look at as a one-time event isn’t really one-time anymore,” Alika Maunakea, who is Kanaka Maoli and co-director of MauiWES, told Grist.

Researchers don’t yet know how much of the contamination came from the fires and how much was already present in the environment. That distinction matters as wildfires increasingly race through towns like Lāhainā and cities like Los Angeles, where burning homes, cars and infrastructure can leave contaminants that people encounter for months or years afterward.

“We have traditionally thought about wildfire exposure primarily through the lens of smoke,” Maunakea said in a press release. “But when an entire community burns, we are dealing with a much more complicated exposure environment.” Researchers must also understand what contaminants were already present, what the fire may have released, and what entered residents’ bodies, he said.

The research, which studied 1,400 adults across Maui six to 18 months after the fires, measured 24 metals in urine samples. It found that participants had higher concentrations of several metals than people in a nationwide health survey conducted before the fires. That included 2.2 times as much arsenic, 2.3 times as much barium, and 3.8 times as much manganese. Antimony, which is used in flame-retardant materials and has been previously linked to lung irritation, stomach pain, and other symptoms , was found at levels nearly 40 times higher.

Community members hold hands in a prayer circle at a ‘Lahaina Strong’ gathering on Oct. 6, 2023 in Lahaina, Hawaii. Photo: Mario Tama/Getty Images via Grist

Because the researchers lack comparable data from before the fires, they could not determine how much of the metal exposure resulted from the disaster. Maunakea told Grist answering that question is the next step for the project, which has received a $3.6 million grant from the National Institute of Environmental Health Sciences. That work will include investigating whether and to what degree past agricultural and industrial activity contributed to the contamination.

“It’s important to realize that these are all part of settler colonialism,” Ahia said. “So what we’re looking at is confounding factors that are to the detriment of the health of our local people.”

Decades of plantation agriculture altered water systems, introduced herbicides, and displaced native plants, leaving a legacy on the islands that is still felt today. Disasters like fires and storms can compound those ongoing environmental problems.

“If we begin the story when the fire starts, we miss the decisions that shaped the landscape and the community’s ability to respond,” said Katie Kamelamela, who is Kanaka Maoli and an assistant professor at Arizona State University based in Hawaiʻi. “Micro climate change acts on places already shaped by histories of land ownership, water diversion, development, and unequal access to resources.”

Kamelamela said true recovery must look beyond the fire. “I want recovery to be measured by whether people can remain in their communities, care for ʻāina, and pass on their knowledge and practices in place,” she said, using the Hawaiian word for land, which carries deeper meaning and relationship than property or mere place. “Rebuilding should not recreate the same conditions that left people at risk. Caring for ʻāina and caring for people need to be funded and planned together.”

Maunakea said the multitude of intersecting pressures is one reason why he wanted to pursue this research. As climate change continues to accelerate, long-standing issues facing Native Hawaiians like housing, the harms of tourism, and the legacy of plantations can amplify problems. “We worry that disasters like this that we experience on Maui, as well as the floods and other storms that we’re experiencing now, is just going to continue widening the gaps in health disparities that already exist in those populations,” he said.

Moving forward, the project will not just identify health risks but also help residents respond to them. Study participants receive their results, discuss them, and meet with health professionals. “People now know that there’s these types of potential hazards, and what to do about them is a big concern,” Maunakea said. “We still don’t have all the answers for sure, but we are taking the next steps to get a better picture and inform our community around it.”

Microsoft: October Windows update may break Smart App Control

Bleeping Computer
www.bleepingcomputer.com
2026-10-16 04:44:22
Microsoft says some users may have trouble turning on Smart App Control after installing this month's KB5127648 Windows 11 security update. [...]...
Original Article

Windows 11

Microsoft says some users may have trouble turning on Smart App Control after installing this month's KB5127648 Windows 11 security update.

Smart App Control is a Windows 11 security feature that uses Microsoft's app intelligence services and code integrity features and works alongside Microsoft Defender and SmartScreen to block potentially harmful apps or binaries.

According to the company, on affected devices running Windows 11, version 24H2 and later, the Smart App Control option is grayed out and cannot be toggled.

"After installing this update, some devices might be unable to turn on Smart App Control in the Windows Security app if it has been turned off. On affected devices, the option to turn on Smart App Control might be grayed out," Microsoft said in an update to the KB5127648 advisory .

"Devices where Smart App Control is already turned on are not affected and remain protected."

While a fix isn't available yet, Microsoft shared temporary workarounds to help IT administrators mitigate the issue on enterprise-managed devices by modifying the registry or installing a group policy.

To restore the ability to turn on Smart App Control on affected Windows 11 devices by editing the registry, you have to follow these steps:

  1. Open a Command Prompt window by typing cmd in the Search box.

  2. Select Run as Administrator.

  3. At the command prompt, enter the following commands and then restart the device:

    reg add "HKLM\SYSTEM\CurrentControlSet\Policies\Microsoft\FeatureManagement\Overrides" /v 2883193997 /t REG_DWORD /d 1 /f
    
    reg add "HKLM\SYSTEM\CurrentControlSet\Policies\Microsoft\FeatureManagement\Overrides" /v 2850574478 /t REG_DWORD /d 1 /f

IT admins can also work around the issue by installing and configuring the two Group Policies below to turn on Smart App Control and ensure that logging is enabled for troubleshooting:

The two Group Policies can be found under Computer Configuration > Administrative Templates > {Group Policy name} > Windows 11, version 24H2, 25H2.

After installing them, admins must set both settings to Enabled and restart the affected device(s) to apply the Group Policy settings.

This week, Microsoft also confirmed that recent Windows updates cause Remote Desktop failures for non-admin users if the "Administrator protection" security feature is enabled, and resolved another known issue that triggered Always On VPN connection problems after installing the September 2026 security updates.

On Tuesday, it also addressed a bug that was causing black screens, desktop loading issues, and Explorer crashes after installing Windows 11 updates released since August.

article image

Once attackers have valid credentials, only 37% of their actions are blocked

Overall prevention scores can hide what happens after initial access. Once attackers are using valid credentials, prevention drops sharply.

The Blue Report 2026 measures defenses technique by technique across 338 million simulations run in customer production environments.

Get the report

What are you doing this weekend?

Lobsters
lobste.rs
2026-10-16 04:19:09
Feel free to tell what you plan on doing this weekend and even ask for help or feedback. Please keep in mind it’s more than OK to do nothing at all too!...
Original Article

Going to a local(ish) Nix meetup on Saturday, though I haven't used Nix for much other than devshells and configuring my system lately... maybe I'll learn something new!

On Sunday I suppose I might get some work done on rawrxd . I'm learning a bunch of stuff about compression and making some decent progress lately, I'm enjoying it.

Also I'll be searching on ebay and local marketplace websites for a decent motherboard with enough SATA ports that'll fit the i3-9100 I just bought for 15 euros, since the motherboard I was looking to get has been nabbed before I could make an offer. I'll be using those to build a home server to replace my Pi.

BAE Systems cyberattack disrupts US federal court operations

Bleeping Computer
www.bleepingcomputer.com
2026-10-16 03:37:35
The Administrative Office of the US Courts says a cyberattack on government contractor BAE Systems has taken down the notice system used by federal bankruptcy courts. [...]...
Original Article

court gavel judge

The Administrative Office of the US Courts says a cyberattack on government contractor BAE Systems has taken down the notice system used by federal bankruptcy courts.

In a Thursday press release, the Administrative Office of the US Courts said the BAE Systems cyberattack also halted the production and distribution of bankruptcy notices.

"The Administrative Office of the US Courts has been in communication with the impacted courts and is also coordinating with BAE Systems. BAE is actively investigating this incident and working to restore operations," it said .

"As a result of the incident, all access to the BNC systems and websites that BAE operates on behalf of the Judiciary and the related bankruptcy noticing process are unavailable at this time, including bnc.uscourts.gov, bankruptcynotices.uscourts.gov, notices.uscourts.gov, and the National Creditor Registration Service."

BAE Systems is Europe's largest defense contractor, designing and manufacturing military technology for the UK and US defense departments, and a major provider of enterprise IT, cloud infrastructure, and cybersecurity services to military, intelligence, and civilian government agencies worldwide.

US Courts and BAE Systems spokespersons were not immediately available for comment when BleepingComputer contacted them earlier today for more details on the attack.

The US Federal Judiciary, the independent judicial branch of the US federal government, also said last year that it was strengthening cybersecurity defenses after a cyberattack impacted its electronic case management systems.

The federal Judiciary added that while most documents in the system are public, it now protects certain sealed filings containing sensitive information with stricter access controls designed to block attackers.

"The federal Judiciary is taking additional steps to strengthen protections for sensitive case documents in response to recent escalated cyberattacks of a sophisticated and persistent nature on its case management system," it said.

While the agency stopped short of confirming a breach of confidential documents, a Politico report said at the time that hackers had breached CM/ECF electronic case management systems and the PACER federal court document management platform, gaining access to sensitive data (including the identities of confidential informants).

article image

Once attackers have valid credentials, only 37% of their actions are blocked

Overall prevention scores can hide what happens after initial access. Once attackers are using valid credentials, prevention drops sharply.

The Blue Report 2026 measures defenses technique by technique across 338 million simulations run in customer production environments.

Get the report

The insider trading you're allowed to do

Hacker News
coached.com
2026-10-16 03:12:09
Comments...
Original Article

Insider trading is illegal in the stock market for a simple reason: it works too well. If you know the drug trial failed before the announcement does, you can't lose. So it’s banned, and people go to prison for it.

But there's a version of it that’s legal.

I’ll use an example to illustrate first. Take Nokia, the biggest mobile phone company in the ‘90s. When the iPhone came out in 2007, Nokia's engineers internally knew their phones couldn't compete with the iPhone - their software and hardware were years behind.

The outside world had no idea. To analysts and headlines, Nokia was still the giant of the industry and the iPhone was just a new entrant. But the people working at Nokia really knew how bad the situation was. In other words, they were holding exactly what an insider trader holds: information the market doesn't have yet (that “ Nokia is screwed! ”).

A few of them “traded” on it. They retrained, and moved to Apple and Google while Nokia on a resume still opened doors. Instead of trading money, they “traded” their careers. But the mechanics are the same - they knew something early because they were internal employees, and used it to do something about their careers.

Most did nothing. They waited for the information to become public and when Nokia's phone business was gone by 2013, everyone hit the job market at once - which was way harder.

My point is: If you’re working at a company, you probably know more about the state of your company, your industry, and yourself than other people. But are you using that information?

🤔 What "using it" actually looks like

Lemme give you three situations where people hold an edge and sit on it:

Things are bad, but you don’t act because of comfort : This is the Nokia situation. The product hasn’t really improved, or it’s being eaten by AI, the best people are leaving, and there are constant reshuffles. This is useful info: you’re seeing issues before management decides layoffs are necessary. In software, it often looks like the roadmap being rewritten every quarter, the engineers who built the core system quietly leaving, or a migration that’s been “nearly done” for two years. “Using it” is getting closer to the faster-growing competitors, or building new skills - like the people who left Nokia early.

Move closer to the “good”. Say there’s an initiative at your company that’s doing very well. That’s inside information too. “Using it” means getting closer to that good, before it becomes the official center of the company and gets super competitive. In tech, that might be the internal platform other teams keep asking to use, or the small AI project whose usage keeps climbing before anyone’s announced it.

If you’re job searching: Most people apply to jobs based on big brand names, even though they aren’t necessarily the best companies. Use your own experience to build your search around where the opportunities are.

Almost everyone has that gap between what they know and what they're doing about it - it’s normal! I want to dig into why.

Why nobody “trades” it

We don’t act on stuff like this because we’re often waiting for one of three confirmations: the numbers to show it, someone official to say it, or the move to finally feel justified.

The numbers arrive late. This is why most of Nokia’s engineers didn’t leave even though the writing was on the wall. Nokia had a record year in 2007, the year the iPhone came out. It just took time for the numbers to catch up. The cracks you see now show up in 3-4 years.

People wait for confirmation, and confirmation never comes. Researchers who studied Nokia's collapse found that middle managers were afraid to pass bad news upward. Execs had a reputation for shooting messengers, so at every layer of the company, reports got a little more optimistic. "We're in serious trouble" left the engineering floor and arrived at the top as "we're on track."

And the feeling of "now it's justified" comes last. Think about what "justified" actually means — it means the situation has become obvious enough that anyone would agree with you. But at that point it's not “inside information” anymore because everyone knows it. The edge was when the move was still a bit early.

🔍 If your read is fuzzy

If you're unsure what you know, here are a few things you can run that no outsider can.

Customer energy: Do customers still love the product the same way, or have things changed?

Pivot speed : When something clearly isn't working, does it get killed in a quarter, or does it limp along for two years? This tells you how fast your company admits mistakes — and companies that admit mistakes fast handle big shifts (like AI) much better.

And the big one right now: AI. Every company is currently figuring out how much of its work AI changes — and the official story about how that's going is the most delayed, most softened information in the building, for all the reasons above. Your inside view is far better.

Check whether leadership personally uses AI — not sponsors it, actually uses it, on their own work. It's hard to make good decisions about something you've never touched (imagine a CEO setting mobile strategy in 2008 who had never held a smartphone). If you’re an engineer, the quick version: are the people mandating AI coding tools actually using them on real work, or just announcing them?

You can also see how AI is landing on your own role: which parts of your job it's already doing, which parts it can't touch. For a fast, structured read on that, get your AI impact map — enter your LinkedIn, and it maps where AI is landing in your specific role.

Get your AI impact map

It’s free (for now, not forever!).

🤝 The trades themselves

One honest caveat: insiders get it wrong too. Plenty of smart people were sure Nokia’s next phone would turn things around, and in hindsight everything looks more obvious than it felt at the time. That’s why the trade doesn’t need to be dramatic.

Career trades are usually small. If things feel bad internally, the trade is spending your learning hours on the skill you'd need at your next role, and taking the occasional recruiter call while you still have a job.

If something's working, the trade is getting closer to it now — a coffee with someone on that team, volunteering for a piece of it — before it becomes official and everyone wants in.

If you're job searching, the trade is aiming your search at the corner of your industry you know is growing, instead of the famous names everyone else applies to.

Sometimes the trade is realizing you're in a good spot . Many companies pass these checks fine — the product's improving, good people keep joining, bad projects get killed. If that's what you find, great: you can ignore the scary layoff headlines about your industry, because you have better information about your own employer than any journalist does.

Pornography with strangulation and incest to be banned in England and Wales next month

Guardian
www.theguardian.com
2026-10-16 03:09:49
Campaigners welcome legislation which follows recommendations by 2025 review into pornography regulation Pornography that depicts strangulation and incestuous relationships will be banned in England and Wales from early November, the government has announced. The content will be outlawed from 6 Nove...
Original Article

Pornography that depicts strangulation and incestuous relationships will be banned in England and Wales from early November, the government has announced.

The content will be outlawed from 6 November after cross-party pressure prompted ministers to announce new legislation earlier this year.

Online pornography depicting strangulation or suffocation, sex between people who are related or pretending to be related, or when somebody is pretending to be a child under 16, will be illegal.

The justice minister Alex Davies-Jones said: “This isn’t about criminalising harmless sexual preferences. But porn can shape what people think a healthy relationship looks like, especially young people.

“Content that normalises, or even glorifies, violence against women is dangerous and can blur the line with what is acceptable in real life.”

The Conservative peer Gabby Bertin made the recommendations in her review into pornography regulation which reported in 2025.

Her report found pornography that shows women being choked can have “devastating” real-world consequences. It highlighted “disturbing” role-play, including incest and adults portraying children. Both will be banned.

The report said there had been a “total absence of government scrutiny” of the pornography industry.

Non-fatal strangulation is already an offence in its own right, but it is not illegal to show it online.

Reacting to the announcement, Lady Bertin said: “It is very good news these offences will come into force, and not a moment too soon.

“This change in law alongside better enforcement and stronger regulation will send the unequivocal signal not only to the companies that host and facilitate porn but also to wider society that extreme and violent content that encourages real-life harm is not acceptable.”

The End Violence Against Women Coalition campaign group welcomed the ban, urging ministers to ensure it is enforced.

Its interim director, Janaya Walker, said: “This is an important step towards tackling the normalisation of violence against women and girls, and the result of years of campaigning by EVAW and other experts who have raised concerns about the impact of violent pornography.

skip past newsletter promotion

“Strangulation can cause serious, lasting harm and even death, yet its widespread portrayal in pornography risks normalising this violence in sexual relationships, particularly among young people.

“The introduction of this offence is an important recognition of the harm caused by violent pornography and the need to hold an industry accountable for content that depicts and profits from violence against women and girls.

“The government must now ensure the ban is effectively enforced, and update the Online Safety Act so that online platforms are required to remove this content.”

Matt Mullenweg Orders Accessibility Revert

Lobsters
www.therepository.email
2026-10-16 02:22:46
Comments...

BeyondTrust patches zero-day exploited in attacks since August

Bleeping Computer
www.bleepingcomputer.com
2026-10-16 02:18:08
BeyondTrust warned customers on Thursday to patch a critical flaw in its Remote Support (RS) that has been exploited in zero-day attacks since late August. [...]...
Original Article

BeyondTrust

BeyondTrust warned customers on Thursday to patch a critical flaw in its Remote Support (RS) that has been exploited in zero-day attacks since late August.

Remote Support is the company's enterprise-grade support solution that helps IT service desks, help desks, and customer support teams troubleshoot issues remotely.

Tracked as CVE-2026-102764 , this actively exploited authentication bypass vulnerability lets unprivileged remote attackers perform file operations on unpatched appliances and affects RS 26.2.3 or earlier. BeyondTrust patched the security issue for all Remote Support and Privileged Remote Access SaaS customers on October 8, but self-hosted installations must be patched manually if automatic updates are not enabled.

While the company shared limited details about the vulnerability, it said the zero-day was abused in the wild by a suspected China-nexus espionage actor tracked by Mandiant and Google Threat Intelligence Group (GTIG) security researchers as "Armory Castle" (formerly UNC5221 ) and by cybersecurity firm CrowdStrike as "Warp Panda."

According to Mandiant researchers, who spotted the initial attacks, Armory Castle hackers exploited the flaw to gain initial access and escalated to root privileges on compromised devices by enabling Set User ID (SUID) permissions.

Next, they deployed new Sawfly web shell and Bareclaw tunneler malware, wiped logs to evade detection, and moved laterally through the victim's network using compromised Administrator credentials by opening remote sessions on downstream systems.

"After establishing a foothold through the web shell, the actor elevated from the web service account to root-level control of the appliance host. This gave them access to every credential the appliance stored or brokered and the ability to modify files that survive reboot and configuration reset," Mandiant said .

"Any appliance that was reachable from the internet on a vulnerable version during the exploitation window should be treated as potentially compromised until it has been reviewed."

​Internet threat watchdog Shadowserver tracks over 1,400 BeyondTrust remote support instances exposed online, but it provides no information on how many have already been secured or are honeypots.

Attack chain
Attack chain (Mandiant / GTIG)

Armory Castle is known for targeting zero-day vulnerabilities in network edge appliances, including various Citrix NetScaler ( CVE-2023-4966 ) and Ivanti Connect Secure ( CVE-2023-46805 and CVE-2024-21887 , then CVE-2025-0282 ) appliances, since at least October 2023 to breach enterprise networks and drop new custom malware.

​Threat intelligence company Volexity also said in January 2024 that UNC5221 had backdoored more than 2,100 Ivanti appliances using the GiftedVisitor webshell in attacks chaining the CVE-2023-46805 and CVE-2024-21887 zero-days.

"In past campaigns, ARMORY CASTLE has conducted widespread and opportunistic exploitation following the public disclosure of vulnerabilities it had exploited selectively as zero-days, racing to infiltrate target organizations before patches are deployed," Mandiant added. "It is possible that we will observe similar widespread exploitation attempts associated with CVE-2026-102764."

CVE-2026-102764 is the latest in a string of other BeyondTrust flaws that threat actors have exploited in the wild in recent years. Most recently, attackers exploited another critical remote code execution vulnerability (CVE-2026-1731) affecting Remote Support and Privileged Remote Access appliances to establish WebSocket channels and deploy ransomware .

The Chinese state-backed Silk Typhoon hacking group is also believed to have exploited two zero-days (CVE-2024-12356 and CVE-2024-12686) to breach BeyondTrust's systems and use a stolen API key to compromise 17 Remote Support SaaS instances, including the U.S. Treasury Department's instance .

In the same campaign, Silk Typhoon has also targeted the Office of Foreign Assets Control (OFAC) , which administers U.S. sanctions programs, and the Committee on Foreign Investment in the United States (CFIUS) , which reviews foreign investments for national security risks.

BeyondTrust provides identity security services to over 20,000 customers worldwide, including government agencies and 75% of Fortune 100 companies.

article image

Once attackers have valid credentials, only 37% of their actions are blocked

Overall prevention scores can hide what happens after initial access. Once attackers are using valid credentials, prevention drops sharply.

The Blue Report 2026 measures defenses technique by technique across 338 million simulations run in customer production environments.

Get the report

coopiano: A physically modelled piano synthesizer in C++17

Lobsters
github.com
2026-10-16 01:31:52
Comments...
Original Article
maplelatest-reverb-vs-dry.mp4

A physically modelled piano synthesizer in C++17. It renders notes and MIDI files to stereo WAV and supports live MIDI input on macOS. Sound is synthesized from a hammer, string, soundboard and sympathetic-resonance model, with a room reverb effect. No piano samples, downloads or third-party libraries are required.

Note

It is VERY EARLY days for releasing this code. The piano is fine, but I have a prototyped AU and VST plugin, etc. which are not part of this open release so far.

Build

You need a C++17 compiler and Make. On macOS, install the Xcode Command Line Tools ( xcode-select --install ) if they are not already available, then run:

macOS builds link the system CoreMIDI, AudioToolbox, CoreFoundation and CoreAudio frameworks. The source also supports offline rendering on other platforms with a C++17 compiler and threads; live MIDI/audio is macOS-only. This extraction was built and tested on macOS; other platforms have not been verified here.

Compiler settings can be overridden, for example make CXX=clang++ CXXFLAGS=-O3 . Run make clean before changing compiler settings. make clean removes only the executable, preserving any renders and presets.

Run

# Note, velocity, duration, optional key-hold time (seconds)
./coopiano A4 0.5 8
# Writes A4_gp.wav; quote sharp note names, e.g. 'G#3'.

# Built-in musical demo; writes demo_piano.wav
./coopiano demo

# Render your own MIDI file; no MIDI files are bundled
./coopiano performance.mid 1.0 performance.wav

# Play from connected MIDI sources or the virtual coopiano MIDI destination
./coopiano live
# macOS only; Ctrl-C to stop

Running ./coopiano without arguments renders A4 at velocity 0.5 for eight seconds. Offline commands write 44.1 kHz, 16-bit stereo WAV files; they do not play them automatically. On macOS, use afplay A4_gp.wav to listen. Each offline render is peak-normalized independently.

Presets

Built-in defaults work without any configuration file. default.ini documents the available voicing and reverb controls, including their ranges. Copy it, edit the copy, then select it explicitly:

cp default.ini my-piano.ini
./coopiano --preset my-piano.ini live
./coopiano --preset my-piano.ini audition --output audition.wav

The audition command plays a chord at increasing velocities. Use --help for its chord, velocity and timing options. Editing default.ini alone does not change the built-in sound; pass --preset and restart playback to load changes.

GP_NO_REVERB=1 ./coopiano A4 0.5 8
GP_SAVE_SETTINGS=1 ./coopiano --preset my-piano.ini A4 0.5 8

GP_SAVE_SETTINGS=1 writes a resolved preset beside the WAV as A4_gp.wav.ini . Environment overrides take precedence over preset settings.

Source layout

  • coopiano.cpp : CLI, MIDI file parser, WAV writer and macOS live host.
  • piano.hpp : header-only synthesis library in namespace piano .
  • instrument.hpp : voice pool, note/pedal scheduling and instrument effects.
  • streaming_soundboard.hpp : streaming soundboard convolution.
  • preset.hpp and reverb.hpp : INI configuration and stereo room effect.
  • piano_host.hpp and piano_resampler.hpp : host-rate adaptation and resampling.
  • live_diagnostics.hpp and live_bench.hpp : support compiled into the macOS host.

The C++ source/header files originate from the development project. Historical comments may refer to documentation in that larger project. The original test and benchmark collections are not bundled here.

License

MIT. See LICENSE .

Last rites for Gentoo's Chromium package

Hacker News
lwn.net
2026-10-16 01:14:42
Comments...
Original Article
Ready to give LWN a try?

With a subscription to LWN, you can stay current with what is happening in the Linux and free-software community and take advantage of subscriber-only site features. We are pleased to offer you a free trial subscription , no credit card required, so that you can see for yourself. Please, join us!

Chromium , the open-source upstream project for Google's Chrome web browser, is the browser of choice for many Linux users. It has also gained a reputation as being difficult for Linux distributions to package and build : Chromium has a complex build system, the project bundles many of its dependencies, and it has frequent releases. All of that, plus user complaints, has led the maintainers of the Gentoo Chromium package to give up on trying to maintain the package.

Gentoo focuses on allowing users to build their own software from source using the Portage software-management tool. Gentoo packagers create ebuild files, which are text files written in a Bash-like syntax that contain the information needed by Portage to build the software. Users then build packages themselves using emerge , which is the command-line interface for Portage. A recent ebuild for Chromium illustrates the complexity of the package.

Gentoo does offer prebuilt binary packages for some software via its Binhost project. However, building from source gives users the flexibility to declare USE flags to set compile-time options or change a package's configuration. For example, a user may wish to specify which optional libraries are linked with a package, or whether to install the accompanying documentation. With Chromium in particular, a user might employ the -bundled-toolchain USE flag (which tells Portage not to use the bundled toolchain) in order to use their system's version of Clang to compile Chromium rather than the bundled version included by the upstream project . That is optional for Gentoo users on x86-64 systems, but -bundled-toolchain is required for users on other architectures, since Chromium's bundled toolchain is only shipped for x86-64.

It is worth noting that Chromium is currently not available as a binary package from Gentoo due to problems with building the package with proprietary codecs.

Last rites

Many distributions, including Arch Linux, Debian, and Fedora, use the term "orphan" to refer to packages that have been abandoned by their maintainer; the developer announces that a package has been orphaned, and other contributors have the opportunity to claim maintainership of it if they wish to do so. Gentoo's terminology is a bit more dramatic: a package maintainer announces "last rites" for a package on the gentoo-dev-announce mailing list to notify the project that it will be unmaintained, and as an opportunity to allow other developers to claim maintainership.

After a developer has declared last rites, the package's ebuild is masked in Gentoo's ebuild repository to ensure that users will not accidentally install a package that is no longer being maintained. Users who have the package installed and attempt an upgrade will receive a warning that it has been masked. Chromium package maintainer Sam James declared last rites for the Chromium package on September 24, after a lengthy conversation in a bug report filed by Roman Žilka .

On September 9, Žilka had complained that the latest stable version of the Chromium ebuild was outdated:

The latest stable www-client/chromium (and google-chrome and possibly others) is 151.0.7922.169, which contains a catastrophic 602 known vulnerabilities of all severities. Measures need to be taken by somebody qualified that this doesn't keep happening in packages as important as these.

He had attached an ebuild for a newer version of Chromium to the bug report, but noted that it would not work if a user tried to compile Chromium with the -bundled-toolchain USE flag.

James replied , " Chromium is horrible to maintain as a source package. It is easily the package in Gentoo that burns through maintainers the most. " Complaining about its maintenance isn't helpful, he said, and added that the maintainers have come close to giving Chromium last rites several times over the years due to the difficulty in keeping it up to date. He also noted that he had mentioned this to Žilka before, and said that it would be welcome if he wanted to assist with the package.

Indeed, Žilka had filed a similar bug in August complaining about the number of vulnerabilities present in the Chromium ebuild; James had replied then that the package had always been difficult to maintain, " and now they've added Go " as a dependency as well. Prior to that, Žilka had shown up in a bug report filed by Matt Jolly about Chromium vulnerabilities to complain that " the update process needs fixing, so that events like these don't happen again in packages as critical as these! "

Jolly had replied that the maintainers are a team of volunteers who do their best, but " build failures, human factors ('I messed up assigning the bug and automation didn't pick it up'), and my own limited free time are the biggest causes of delays ". The best way to change the situation, he said, would be for Žilka to volunteer his help.

Trial and error

There are various third-party repositories, called overlays , that provide additional and alternative ebuilds for Gentoo. On September 11, Nick Reale said that he had tried ebuilds for a newer version of Chromium from the Bentoo and Fireburn overlays, but he couldn't get either one to work. A few days later he reported success with Bentoo's ebuild and a specific set of USE flags. There was some follow-on discussion from Reale and François Valenduc about various incantations they were able to use to compile an updated version of Chromium on Gentoo from other ebuilds. On September 18, Valenduc commented that version 153.0.8010.47 of Chromium was out, and that version was already available in Arch Linux, openSUSE, SUSE, and Ubuntu. " We are still waiting for Gentoo despite all the proposals made here. "

James replied that none of the maintainers have had a chance to look into the problems with the Chromium package yet. He said that the patches and ebuilds that had been submitted with the bug report were " useful and appreciated, but it's not as simple as just grabbing it and committing it ". Users would complain, he said, if the maintainers had not tested the ebuilds and it broke on their systems.

It'll get done when it's done, but it's more likely to be last-rited if nobody is interested in handling it in the way these things have to be done (which goes beyond just attaching ebuilds).

Valenduc said that he was not able to maintain the package, " but taking the ebuild from the bentoo overlay was not that difficult [...] It's just frustrating to see no updates in Gentoo. " James replied that just because the ebuild worked for Valenduc did not mean it had all USE flags working. He added that no one had submitted a patch to the Gentoo ebuild, which meant that the maintainers would need to reverse-engineer the changes by diffing the ebuilds and work out what had been modified. " All of that is a non-trivial amount of work and while having some ebuild to start with is useful for that, it doesn't mean one can just git add && git commit && git push it. " Valenduc acknowledged that he could not test all possible USE flags, since it took between 15 and 16 hours to compile Chromium on his laptop.

On September 24, Žilka commented : " This is ridiculous ". A few minutes later, James replied " OK then ", and issued the last rites for the package.

Can we keep it?

Maciej S. Szmigiero asked if it would be possible to keep the ebuild in Gentoo's repository and just declare that it was maintained at "best effort" level. " Removing buildable/patchable Chromium is a huge loss for a Gentoo desktop. " James said that he did not think that was possible. He had already explained that Chromium was being maintained by volunteers, and that explanation had not been accepted.

People were free to maintain the ebuild in another repository, he said, but that meant they would have to do the work themselves or accept someone doing it to a lower standard. He pointed out that the ebuilds from the Bentoo overlay had been cited in the discussion, but creation of those ebuilds seemed to be " heavily automated " and had missed some fixes in the Gentoo version. " Copying ebuilds works fine until it doesn't. "

James added that someone could still pick up the Chromium package before the end of the last-rites period on October 24, or that the package could be restored in the future. He did not want to see that, though, unless there was a plan for sustainable maintenance. " Chromium has a history of burning out maintainers in Gentoo because of the high rate of churn upstream, though some of the contents of this bug don't help motivation at all either. "

Matt Whitlock wondered if the developer-burnout factor could be reduced by eliminating most of the USE flags for Chromium, or if the maintainers stopped unbundling third-party libraries.

Basically, what I am asking is: can we give up _all_ of the flexibility to which we have grown accustomed in www-client/chromium, in exchange for a package that is actually maintainable but that is still built from sources by a toolchain that is not distributed as opaque binaries?

He added later that part of the problem was that the upstream project developers " do not test their builds with any of their allegedly 'optional' features disabled ". That left the responsibility with the downstream package maintainers. " In the case of Chromium, keeping all the toggle switches working (despite chronic neglect from upstream) is a monumental, nigh-insurmountable task. "

Complexity

That was a good question, James said , but part of the recent complexity with Chromium was the addition of Rust and Go dependencies. The packagers had to do some wrangling to ensure that the Go build did not require network access, which is forbidden with Gentoo ebuilds, but that was not the only problem. He said that Google developers seem to keep using experimental Rust features that break on new releases as well. On top of that, " yet another problem is that upstream's CI to produce release tarballs isn't reliable ". One of the Gentoo Chromium maintainers had sent patches to fix that, to little avail. " It took ages to get [the patches] reviewed, and it's broken again a few times since. They didn't seem to notice or care that it either wasn't producing tarballs or was producing incomplete ones ."

Jolly added some of his observations about problems with maintaining Chromium for Gentoo. He said that maintaining Chromium can take more than six hours each week, and that was counting only compilation time on a fast PC with " an absurd amount of RAM ". Compilation time is even longer for 64-bit Arm machines.

It's a commitment to volunteer at least a business day's worth of your free time each week when you include rebasing patches, cherry-picking fixes, iterating on `ebuild ... clean compile`, plus trying to identify and fix any new bugs, working out how much you violate Gentoo policy by not unbundling more of the browser, spending time on automation to save time and mistakes later, etc. There's immense pressure to keep builds up-to-date, especially in the age of hundreds of weekly browser CVEs.

He included a " pre-emptive FAQ " in his reply about the last rites for Chromium, and what it would require to restore the package. He said that there were no insurmountable technical issues to maintaining Chromium, but it would need multiple maintainers with a broad set of skills—including familiarity with C, C++, Go, JavaScript, and Rust. " There are also a huge number of NIH [not invented here] Google tools that you'll [have to] develop skills for and never be able to use anywhere else - you have been warned ."

Using Google's toolchain would be simpler, but it would also restrict the ebuild to x86-64, he said. " We'd lose arm64, ppc64, and the RISC-V overlay - better to just rip the band-aid off now as it doesn't materially make the situation better ". He added that he would be willing to review commits and offer advice to anyone who wanted to maintain the source ebuild, but he felt that at least three people would be needed. " History has shown that one maintainer isn't working, and we've had the release cycle shorten twice since I started maintaining the package in 2023; it was bad then, and it's worse now. "

The release cadence for Chromium is aggressive, to say the least. Chromium has multiple channels including stable, beta, and development. There is a new major branch of the browser roughly every two weeks via the stable channel, and a new version is shipped every week.

Getting Chromium

For now, it appears that Gentoo users will need to search elsewhere for a suitable Chromium ebuild, choose a different browser, or find a different distribution method to acquire Chromium. For example, Gentoo users could install the Flatpak from Flathub , but it is an unverified package built by a third party—not by the Chromium upstream project. The Flatpak is also of no help for users who are not on x86-64 or 64-bit Arm systems.

It is technically possible for Chromium users to build and compile the browser on their own using the upstream's instructions, but it does not appear that the Chromium project cares a great deal about making that easy to do. It does have a page on getting the code but the links to instructions for Linux (as well as macOS and Windows) return a 503 error. Searching for instructions turns up this page , though it is undated so it is unclear if it is the most up-to-date. Assuming the instructions are current and correct, building Chromium using those directions is quite an ordeal. Users can download pre-built binaries from the project, but only for x86-64 systems.

Other distributions continue to supply Chromium packages, of course, though their approach does not provide the same flexibility as Gentoo's. Fedora's package (which is described as " A WebKit (Blink) powered web browser that Google doesn't want you to use ") is at version 154.0.8037.92—one version behind the upstream (154.0.8037.97) release that was published on October 1. Likewise, the package in Debian's security repository is the same version (currently) as Fedora's and the information page shows that there are at least 11 known CVEs addressed in 154.0.8037.97. Keeping up with Chromium is not an easy task.

Perhaps Gentoo will find a team that is willing and able to take on the burden of maintaining the Chromium ebuild up to the standards that Gentoo users expect. Whatever happens, it seems unlikely that Chromium will become any easier to maintain in the interim.



The Folders Programming Language

Hacker News
danieltemkin.com
2026-10-16 01:11:28
Comments...
Original Article

Created 2015 | Updated 2026 | One of Forty-Four Esolangs , by the creator of Rivulet and Velato

Where directories are code and drive space is infinite

About

Folders is a non-textual language, where code is expressed in containment and order alone. The names of the folders are ignored, apart from alphabetical ordering. In other words, they are pure ordered trees .

Properties of a folder holding 352,449 folders: 0 bytes

Inspired by the Whitespace language, Folders is devoted to the idea of dematerialized code. It began with the question What is more empty than a file with no visible text? The empty folder is clutter, an appendage with no purpose. In git, it is ignored entirely (for this reason, it is suggested that Folders programs put .gitignore files in their deepest reaches).

Folders began as a Windows language. In Windows, folders are an even more extreme measure of emptiness: they take up no disk space at all. For proof, create 352,449 folders and get properties on it. In this way, Folders offers not only a dematerialized approach to code but also infinite storage capacity. Keep all your data encoded in folder names and never worry about running out of space again.

For those who use other operating systems, the emulator below gives some of the experience of how Folders manages data and code.

The original implementation can be found on github .

Encoding

Encoding folders

Each command folder has at least one child folder. The number of subfolders in the first folder (alphabetically) indicates the type of command; any arguments are indicated in a second folder; some commands require a third folder. Expressions are the same: the number of folders in the first sub-folder determine what kind of expression it is. The full Language Spec is below .

Temporary data is stored as folders; unlike Folders code, it is the name of the folder that stores the data.

Folders FS

The Folders interpreter does not create temp files; anything not held immediately in memory is stored as a set of temp folders. Unlike Folders code, the name of the folder stores the data itself. The prefered I/O of Folders is another set of folders. This means you can encode all your data in folders, bypassing the "material realm" of files entirely and giving you infinite disk space (attempt at your own risk). Folders lang for code, Folders FS for data storage.

Temp folders from several Folders programs
Temp folders from several Folders programs

Visualizations

A Folders program is a nil-terminated nested list . Its simplest form is pure containment and order, like this all-array JSON:

[[[[],[]],[],[[]]],[[[],[]],[],[[],[]]],[[[],[]],[],[[],[],[]]],[[[],[]],[],[[],[],[],[]]],[[[],[],[]],[[]],[[[],[],[],[],[]],[],[[[],[],[],[]]]]],[[[],[],[]],[[],[]],[[[],[],[],[],[]],[],[[[],[],[],[[]]]]]],[[[],[],[]],[[],[],[],[]],[[[],[],[],[],[]],[],[[[],[],[],[]]]]],[[[]],[[[],[],[],[],[],[],[],[]],[[],[[],[],[],[]]],[[[],[],[],[],[]],[],[[[],[],[],[[]]],[[[]],[[]],[[]],[]]]]],[[[[],[],[],[]],[[],[[]]]],[[[],[],[],[]],[[[],[],[],[],[]],[[],[],[]],[[[[]],[],[[]],[]]]]],[[[],[],[]],[[],[],[]],[[[]],[[],[[]]],[[],[[],[]]]]],[[[],[],[]],[[]],[[],[[],[]]]],[[[],[],[]],[[],[]],[[],[[],[],[]]]],[[[],[],[]],[[],[],[],[]],[[[]],[[],[[],[],[],[]]],[[[],[],[],[],[]],[],[[[],[],[],[[]]]]]]]]]]
Fibonacci Program

That is also how the JS emulator saves/reads Folders programs.

However, other systems of visualization are possible. Folders programs are content as structure and can be applied to raw data of any type. Here is a Truth Machine as a contour map. The thicker lines are containers, and the order of folders is read starting at the upper left (NW corner) and proceeding counter-clockwise.

Other visualizations might be a family tree (with all single parents), a botanical branching structure (like a splitting stalk of wheat), or the paths through a maze.

The red dots indicate a threshhold from a container to a single child.

Language Spec

The language itself is a very simple imperative language with a short list of semantic rules.

For Commands and Expressions, the number of folders in their first child folder determines their use. Types are used directly.

Commands

Command # of Folders Details
if 0 folders Second sub-folder holds expression, third holds list of commands
while 1 folder Second sub-folder holds expression, third holds list of commands
declare 2 folders Second sub-folder holds type, third holds var name (in number of folders)
let 3 folders Second holds var name (in number of folders), third holds expression
print 4 folders Second sub-folder holds expression
input 5 folders Second sub-folder holds var name

Expressions

Type # of Folders Details
variable 0 folders Second sub-folder holds var name
add 1 folder Second sub-folder holds first expression to add, third holds second expression
subtract 2 folders Second sub-folder holds first expression to subtract, third holds second expression
multiply 3 folders Second sub-folder holds first expression to multiply, third holds second expression
divide 4 folders Second sub-folder holds first expression to divide, third holds second expression
literal value 5 folders Second sub-folder holds the type of the value (e.g. two folders for a string, third holds the value)
equal to 6 folders Second and third folders hold expressions to compare
greater than 7 folders Second and third folders hold expressions to compare
less than 8 folders Second and third folders hold expressions to compare

Types

Type # of Folders
float 1 folder
string 2 folders
char 3 folders
The reference compiler on github: https://github.com/rottytooth/Folders

Tesla makes cars that fly? [video]

Hacker News
www.youtube.com
2026-10-16 00:27:54
Comments...

Computers Made of Human Brain Tissue Identify Braille Letters In Breakthrough

403 Media
www.404media.co
2026-10-16 00:01:00
Scientists discovered that human brain organoids, which are small neural clusters derived from stem cells, could identify the Braille alphabet with a high degree of accuracy....
Original Article

Scientists have made a breakthrough toward the mind-bending goal of creating computers made of brains by demonstrating that human neural tissue can classify letters of the Braille alphabet, according to a study published on Friday in Frontiers in Artificial Intelligence .

A team transmitted electrical signals corresponding to Braille letters to human brain organoids, which are living neural tissues derived from stem cells. The results revealed that a single organoid, consisting of about 10,000 neurons, could classify the letters with about 61 percent accuracy, while teams of three organoids reached 83 percent accuracy.

“The human brain can perform incredibly complex information processing while consuming relatively little energy, and artificial neural networks were originally inspired by biological nervous systems,” said Tianyi Liu, a PhD candidate at Bristol University who led the new study, in an email to 404 Media.

“If we've been trying to imitate biological neural networks all along, why not try using real biological neural networks directly?” she continued. “What kind of information processing capabilities might these tiny neural organoids have? Could they show some form of learning or adaptation? These are all questions we're very interested in.”

The new study falls under the emerging field of organoid intelligence, which aims to use organoids as biological “wetware” for computing applications. Previous studies have established that organoids are capable of recognizing speech Japanese vowels or even playing the classic game Pong .

Since Liu and her team specialize in how robots sense and respond to touch, they homed in on Braille as a way to convert tactile information into electrical stimuli that an organoid could receive, process, and classify.

In their experimental setup, the researchers used a tactile sensor to scan data from the 26 letters of the Braille alphabet, which is built from arrangements of raised dots. This data was converted into electrical stimulation patterns that were fed to the organoids, which are smaller than a millimeter in scale and positioned on arrays that keep them alive.

“Our original goal wasn't to prove that organoids could read Braille like humans, or that they were already ‘intelligent’ enough to understand Braille,” she added. “Rather, we wanted to use this task to explore whether real biological neural networks could participate in processing information from robotic tactile sensors.”

The tactile sensor used to scan Braille letters. Image: Dr Benjamin Ward-Cherrier.

In other words, the researchers aimed to discover if these stimulated inputs could be decoded by the organoids and returned back in discernable responses corresponding to the Braille letters. The results revealed that a single organoid could accurately classify the letters nearly two thirds of the time, while an "ensemble" of three organoids performed even better, with an accuracy of 83 percent.

“We still don't know the exact mechanism behind this improvement,” Liu said. “Our hypothesis is that different organoids respond to the same stimulation in similar, but not identical, ways.”

She added that “you can think of it as three people looking at the same object. Although they're all looking at the same thing, each person might notice different details. Some features might not be obvious to one person but could be quite easy for another to spot. By combining their observations, you might be able to make a more accurate and reliable judgement.”

🌘

Subscribe to 404 Media to get The Abstract , our newsletter about the most exciting and mind-boggling science news and studies of the week.

The results are undeniably trippy, conjuring up the classic scifi trope of a hyperintelligent brain-in-a-vat. But Liu emphasized that this was an open-loop experiment, meaning that the organoids only received initial inputs without getting new feedback about their performance on the tasks. For this reason, the study does not prove that the organoids actually learned Braille, or were altered in any permanent way, just that they could classify Braille letters after receiving the electrical inputs.

“In the future, if we can build closed-loop systems where neural activity from the organoids actually participates in a robot's perception, decision making, and control, while the results of the robot's interactions with its environment are fed back to the organoids, we could begin to investigate whether these biological neural networks can adapt to new tasks through ongoing interaction,” she said.

Liu also noted that while there are many potential advantages to organoid intelligence, there are plenty of limitations to biological computing systems. For example, organoids cannot be standardized, leading to natural variations that can complicate results, plus they have to be kept alive in cultures that are more difficult to maintain than electronic devices.

“Compared with established computing chips, organoid systems still have a long way to go in terms of reliability, reproducibility, and scalability,” Liu said.

Even so, organoid intelligence “gives us the opportunity to explore a way of computing that's very different from traditional computers,” she concluded.

My self-hosted infrastructure with Incus OS

Lobsters
dataswamp.org
2026-10-15 23:25:49
Comments...
Original Article

Written by Solène , on 15 October 2026.
Tags: #selfhosting #security #linux #containers

1. Introduction §

For the last seven months, I spent a good part of my (small amount of) free time rebuilding my self-hosting infrastructure at home. I wanted something secure, fully automated, that updates itself and that I can rebuild from scratch if something goes wrong. Most of the ideas come from my work on infrastructures following SecNumCloud (a French security standard for cloud providers) and, to a lesser extent, ISO 27001, I wanted to see how far I could apply the same principles at home.

In this blog post, I will explain how my personal infrastructure works, how all the pieces fit together, and why I think each security layer is useful. This is not a step by step guide, I will not go deep into code, the goal is to show the architecture and the reasons behind it.

Before going further, I need to be honest, this is a personal infrastructure running on a single machine at home, and it is probably totally overengineered for most people. If you just want to host a Nextcloud for your family, a lot of what follows is not needed. But I learned a lot along the way, especially about containers and cloud-init, and I am very happy with the result :)

The hosting server is nothing special, just a regular laptop with 16 GB of RAM, a NVMe SSD and a network card, sitting next to my Internet provider box.

2. The big picture §

Everything runs on this laptop. The operating system is Incus OS, a small immutable system that only run Incus, a manager for system containers and virtual machines (it is like Proxmox but more container oriented).

Incus OS official website

On top of it, there are about twenty Ubuntu system containers, one per service, and two virtual machines for the more sensitive parts. Inside each system container, the applications themselves run as podman containers, described with "quadlets", which are files that systemd turns into services. So there are two levels of containers: Incus instances, and podman containers inside them.

I am currently hosting the following services:

  • Nextcloud
  • Forgejo, with a CI runner
  • Immich for photos/videos dumped from smartphones
  • PeerTube for videos
  • Vaultwarden for passwords
  • Kanboard
  • Uptime Kuma and SmokePing to monitor the network
  • a static website
  • a monitoring stack: Prometheus, Grafana, Loki, Alertmanager
  • CrowdSec
  • restic for backups

Nothing is configured by hand. Everything is declared from a git repository with OpenTofu (the open source fork of Terraform) and cloud-init (the tool that configures a cloud system at its first boot).

The system containers are unprivileged, which means the root user inside a container is not root on the host. Compared to a VM per service, this is very efficient: the RAM and disk usage are much lower, and everything is pretty fast.

Here is a diagram of how everything fits together:

Diagram of the infrastructure
Diagram of the infrastructure

3. Incus OS §

Incus OS is the foundation, I chose it because it is locked as much as possible. It comes with:

  • Secure Boot enabled
  • A/B boot: the update is written on the other partition, and the system can go back to the previous one if needed
  • no local access: there is no shell, no SSH, no package manager, nothing can be done with local access to the laptop
  • disk encryption with the TPM (this allows auto reboot without typing a passphrase, but if someone steals the laptop it will boot and they would be able to attack the system locally as if they were on my LAN)

It is not exposed on the Internet, I manage it from my LAN through the Incus API using a certificate for authentication.

An unexepcted side effect is that I do not use SSH anymore to manage the infrastructure. No SSH keys to manage, no SSH endpoint to secure, no TERM variable issue. When I need to look inside an instance, I can use incus exec to run a command or incus shell to open a shell, all through the Incus API. The only SSH in the whole setup is the git over SSH access provided by Forgejo, which is an application feature.

4. Disposable system containers §

This is probably the part I like the most. Each instance is created from a fresh Ubuntu cloud image, and cloud-init does everything at first boot: upgrade the system, install podman, write the quadlet files, decrypt the secrets, start the services. I took inspiration from my experience with Qubes OS.

When I change anything on an instance (a configuration file, a container, a command, the order of commands), OpenTofu destroys the instance and recreates it from scratch. There is no configuration drift, what runs is exactly what is in git. If someone ever manages to get into a container and leave something behind, it disappears at the next rebuild.

Only the data persists, in dedicated Incus volumes:

  • a volume for podman storage, where the named volumes of the applications live
  • a volume for the secrets of the instance (its decryption key)
  • a local cache for the apt packages, to speed up rebuilds

As the system part is fully disposable, I could even replace Ubuntu with another distribution without much trouble, the applications run in podman containers anyway.

This is heavy: during a change, the component is not available for one or two minutes, the time for it to be rebuilt. But in exchange, every time I make a change, I am sure it will still work at the next boot, and I know I can rebuild the whole system if needed.

5. Network denied by default §

All instances are connected to an internal bridge with an Incus ACL that rejects everything by default in both directions, including between two instances. Every allowed network connection is declared in the OpenTofu code, with a description of why it exists. For example, the reverse proxies can reach the exact port of each backend, Prometheus can reach the metrics exporters, and every instance can send its logs to Loki, but Nextcloud cannot talk to Vaultwarden.

The goal is to protect the systems from each other. If one service gets compromised, the attacker should not be able to jump easily to the others.

There are two VMs for the most sensitive parts:

  • the haproxy VM, which is the only machine connected to the physical network and receives the Internet traffic (DMZ)
  • the CI runner, because CI jobs run arbitrary code, it also features Docker in Docker to run nested containers which required some privileges

The isolation of a container is a bit weaker than a VM, but it is acceptable for my threat model. For the parts most exposed to untrusted input, I preferred a hypervisor level security.

5.1. Outgoing traffic §

Most instances have no direct access to the Internet. A dedicated instance acts as the single exit point and provides:

  • an HTTP proxy with a list of allowed domains, everything else is refused (the domain list is shared by all consumers, this is acceptable here)
  • a caching proxy for apt packages (apt-cacher-ng)
  • local mirrors (pull-through caches) for the container registries I use: Docker Hub, GitHub and Codeberg

All the instances use these for their packages and container images, and the few applications that need to reach the Internet go through the filtering proxy. The few exceptions that cannot go through a proxy (for example ACME certificates for the public reverse proxy, the CI runner, the Uptime Kuma probes or the backups to S3) are explicit and documented ACL rules.

The benefit is that even if a service gets hacked, it will be complicated to exfiltrate data or download a second stage payload from an arbitrary server. Rebuilding twenty instances does not put load on the upstream mirrors or waste network bandwidth.

5.2. Incoming public traffic §

The public traffic goes through several layers.

Internet
   |
   v
haproxy VM (CrowdSec bouncer with nftables)
   |  raw TCP + PROXY protocol
   v
caddy (public)  -->  public services

The haproxy VM only forwards raw TCP, it never sees cleartext traffic and does not hold any certificate or private key. It uses the PROXY protocol, a small header added at the beginning of the connection that carries the original client IP, so caddy knows who is really connecting, even with NAT and containers in the middle.

On the same VM, the CrowdSec firewall bouncer drops connections from IPs with a bad reputation, directly in nftables, before haproxy even accepts the connection. CrowdSec reads the logs of caddy, Forgejo and Nextcloud from Loki to detect bad behavior, and also uses community blocklists. This only works because the real client IP is known all along the way.

Then, caddy terminates TLS and forwards the requests to the services.

I discovered caddy with this project, and I find it is a great piece of software. The documentation is very good, it always had the features I needed, and the configuration is easy to understand.

5.3. Private access through the VPN §

There are two separate caddy instances: one for public websites, and one for the sites only reachable over my VPN. This way, even if the public caddy gets hacked, the VPN only services are not affected.

The VPN caddy only listens on the Tailscale address of the host, and also checks that the client IP is in the VPN range. The admin tools (Alertmanager, Uptime Kuma, Kanboard...) have no public endpoint at all.

Some tools are exposed on the Internet, but their admin interface or admin API is only reachable through the VPN. Even if there is a vulnerability in the admin API, this will not be exploitable. For example, Nextcloud is available both publicly and over the VPN, but its admin API is only reachable through the VPN.

Immich, which I use for photos and videos (I wrote about it this year) goes further. Publicly, it only answers to share links, so I can share content with people outside. Everything else like browsing the library or uploading photos and videos, goes through the VPN. This is a security measure, the full application is not exposed over the Internet.

For the VPN sites, I wanted real TLS certificates that are not "self signed". I run my own certificate authority (CA), which delivers certificates through ACME, the same protocol used by Let's Encrypt. Its root certificate is installed on all the instances and on the devices (phones, computers, tablets), so every component knowing this root CA recognizes the certificates. No more curl -k !

6. Secrets management §

No secret are committed in clear in the repository. Secrets are encrypted using sops and age, and stored in git next to the service files.

sops GitHub page

Each instance has its own age private key, generated once and stored in the volume secrets , it never leaves the server. The secrets of a service are encrypted for that instance key and for my workstation keys only. This means only the person or machine that needs to know a secret can read it: a compromised Nextcloud cannot read the Vaultwarden secrets, even with a full copy of the repository.

At boot, the secrets are decrypted on the disposable root disk, so they are regenerated at every rebuild. A git pre-commit hook running gitleaks also blocks a commit if a secret is found in the history, just in case.

7. Automatic updates §

The whole stack updates itself:

  • Incus OS updates itself as an immutable image
  • Ubuntu instances use unattended-upgrades, and a full upgrade is done when the instance is created, to be sure it starts with the latest packages (I still need to figure how to upgrade the whole base image instead of upgrading it in-place)
  • the podman containers are updated by podman auto-update (as a service), which pulls new images for the configured tag and rolls back if the new container fails to start

I chose tags following a major version (for example postgres:18-alpine ), so major upgrades are a deliberate one line change in git. So far, I never had any issue after a container updated itself automatically. I subscribed to releases RSS feeds for each project I am using, to know quickly if they are breaking changes I need to deal with or a new major version.

8. Backups §

There are two layers of backups:

  • ZFS snapshots of the various volumes, done automatically by Incus, for a quick recovery (daily snapshots kept two weeks for the data)
  • restic backups of the data volumes every day to an S3 storage, encrypted on the client side

If an attacker takes control of the restic instance, they can get the access to the bucket and delete the backups. To protect against this, the bucket has versioning and protections in place, so even if the data is deleted, I can restore it during a certain number of days. The bucket is not in immutable mode though, because restic modifies files at each run and this would break it. I explained this setup in an older blog post:

Secure backups with S3

9. Monitoring and logs §

The whole stack is monitored:

  • Prometheus collects metrics from every instance, from the reverse proxies, haproxy, CrowdSec and Incus itself
  • a vector sidecar in every instance sends the systemd journal to Loki, so all the services logs are in one place
  • Alertmanager sends me a notification when a service fails or is not running
  • Grafana allows me to explore data (including some cool dashboards to view caddy, haproxy, crowdsec or incus activity)

Loki is also the data source of CrowdSec, so logs serve both for debugging and for security.

10. Security §

In security, we often talk about three criteria: confidentiality (only the right people can read the data), integrity (the data and systems are not modified without permission) and availability (the service works when you need it). Here is how the different layers help with them in my setup.

You only see those criterias when working on certified environments, but I like how they frame the various aspects of cyber security.

10.1. Confidentiality §

  • secrets are encrypted in git, each instance can only read its own secrets
  • the egress filtering makes data exfiltration hard
  • the network ACL prevents a compromised service from reaching the others
  • the admin interfaces are only reachable over the VPN
  • the edge VM holds no TLS key, TLS is only terminated inside the network
  • backups are encrypted by restic before leaving the server

10.2. Integrity §

  • Incus OS uses Secure Boot and an immutable system
  • packages and images only come from known sources through the local caches
  • no manual change is done, git is the only source of truth
  • the instances are rebuilt from git, an intruder cannot persist on the root disk (to some extent)

10.3. Availability §

  • CrowdSec blocks known bad IPs, weird requests and brute force attempts
  • automatic updates reduce the time a vulnerability stays open, this is relevant nowadays
  • ZFS snapshots allow a fast rollback, restic allows a full restore
  • the S3 versioning protects the backups against deletion
  • monitoring and alerts tell me quickly when something goes wrong
  • the whole infrastructure can be rebuilt from the repository

The main limit for availability is that everything runs on a single machine at home, if it dies or if my Internet connection goes down, everything is down. And a rebuild of the public caddy or haproxy cuts the public traffic for a minute or two. This is fine for me. Incus OS have cluster features, but this goes too far for my setup.

11. Challenges §

It was not easy, here are the biggest challenges I faced.

  • sops in cloud-init: sops is not packaged in distributions I wanted to use, I ended up running sops itself as a podman container to decrypt the secrets at boot
  • the Incus ACL: the mechanism is not always simple to understand, with everything denied in both directions, connections between two instances must be allowed on both the egress and the ingress side
  • the ordering done by OpenTofu: as Internet access depends on the proxy and the registry mirrors, they must be up before anything else, and for example the CrowdSec bouncer needs the CrowdSec local API to be running to start
  • CrowdSec in general was very complicated to get right
  • getting the source IP of a request with NAT and the service running in a container, this was magically solved by haproxy and the PROXY protocol, once I learned about that PROXY protocol
  • the layers of reverse proxies and the HTTP headers up to the final application, it was particularly hard with PeerTube and Nextcloud to get them to use the correct domain
  • some applications do not like to work with two differents base domains, I had to decide if they were exclusively public or exclusively on the VPN

12. Conclusion §

I am very happy with this setup. It is fast, the RAM and disk usage is very efficient compared to running VMs, and everything updates automatically. Making a change through OpenTofu and cloud-init is heavier than editing a file over SSH, but it works very well, and I never have to wonder if a service will come back after a reboot, or that fear when you need to play a whole ansible playbook and you know it will go wrong.

This took me seven months of my free time, but I learned a lot about containers and cloud-init. Again, this is probably overengineered for most people, and a single server at home is not a highly available platform. But if you like the idea of disposable systems, deny by default networking and no SSH at all, I hope this post gave you some ideas.

13. Going further §

There are still a few things I would like to improve: logging could receive some filtering because they are way too much stuff there, crowdsec could be extended with scenarios, AlertManager is not great and I still need to figure how to trigger a system container update so I don't have to use unattended-upgrades in Ubuntu anymore (that's a service running apt-get update / upgrade automatically for security updates)

If you want to play with Incus without going into Incus OS, it works as a service on any linux distribution, so you can give it a try easily.

Porsche Mission S

Hacker News
www.porsche.com
2026-10-15 23:09:14
Comments...
Original Article

A SPORTS CAR.

Authentic.

Stripped back to the essentials: the Mission S demonstrates what makes a true sports car and delivers an immediate driving experience.

FOCUS ON WHAT MATTERS.

Every idea behind the Mission S stems from a single question: what does the sports car of tomorrow really need? The answer is a consequent focus on the driver experience. From the five round instruments with an analogue rev counter to the centre dials with push-pull function.

A close-up of a detail of the Porsche Mission S.

View of the Porsche Mission S page.

A close-up of a detail of the Porsche Mission S.

FORM FOLLOWS FUNCTION.

The wraparound main line connects the light signatures at the front and rear. Distinctive torpedo-style fenders and the dynamic roofline draw on historic Porsche design features and reinterpret them.

Exterior highlights.

Exterior of the Porsche Mission S.
A top-down view of the Porsche Mission S.

Mid-engine architecture.

The centrally positioned engine enables characteristic proportions, a particularly pronounced Porsche Flyline and a dramatic width-to-height ratio. The result: a sports car that reveals its performance at first glance.

Detailed view of the main headlamp on the Porsche Mission S.

Continuous wraparound main line.

The Mission S translates the signature design language of Porsche into the future. The wraparound main line connects key elements of the car and individual components to form a unified sports car sculpture.

Detailed view of the Porsche Mission S wing.

Torpedo-style fender.

Inspired by legendary Porsche models, the distinctive torpedo-style fenders create a powerful front end and bridge the gap between the past and the future. Familiar in their origins, visionary in their design, they lend the sports car architecture a sense of dynamism and character.

A view of the rear of the Porsche Mission S.

Visible fan wheel at the rear.

As functional as it is emotional: forward-looking design elements demonstrate at first glance how performance can be reimagined. The prominently displayed fan wheel in lightweight construction supports cooling – whilst also paying homage to the most infamous and legendary Porsche racing car: the 917.

Detailed view of the wheel on the Porsche Mission S.

Reimagined dial-style wheels.

Every generation of sports cars leaves its mark. The Mission S wheels draw on an iconic design from the Porsche history and develop it further: the ‘dial-style wheels’ of the 928. The result is more than just a reinterpretation of a design motif. It is a link between the sports cars of yesterday and the driver’s cars of tomorrow.

A glimpse into the cockpit of the Porsche Mission S.

AUTHENTIC. CONSEQUENT. TIMELESS.

A deliberate return to the core values of sports car engineering: the Mission S is consequently driver-focused. Clear information, intuitive controls and a precise layout of all elements ensure that attention remains where it belongs: on the road.

Interior highlights.

Interior of the Porsche Mission S.
Controls on the steering wheel of the Porsche Mission S.

‘On your own’ driving mode.

A red button. A conscious decision. Activating the ‘On your own’ driving mode on the steering wheel deactivates the driver assistance systems. For driving pleasure in its purest form.

Display des Porsche Mission S.

Central rev counter with an analogue design.

As the revs rise, every glance counts. That is why the digital rev counter with its analogue needle always remains the centre of attention. Around it, other classic round instruments constantly rearrange themselves – in line with the selected driving mode. The result is a display that intuitively supports the driver and remains quick and easy to read, even at high speeds.

A detail of the interior of the Porsche Mission S.

Attention to detail.

The seats combine comfort and functionality with motorsport DNA. The result is a sports seat brimming with craftsmanship, precision and attention to detail – like the integrated seatbelt buckle in the centre panel and repositioned electric adjustment controls.

Key for the Porsche Mission S.

Aluminium key.

Noticeably different from the very first moment: the aluminium key offers a glimpse of what is to come. Even before the engine starts, a connection to the car is formed, transforming anticipation into something tangible.

Gear lever of the Porsche Mission S.

Height-adjustable gear lever.

Grab. Shift. Feel. The Mission S gear lever is height-adjustable and deliberately designed to provide a tactile experience. It creates precisely the connection to the car that makes every journey more intense.

Linus Torvalds on AI-assisted kernel contributions

Lobsters
lore.kernel.org
2026-10-15 22:50:33
Comments...
Original Article
From: Linus Torvalds <torvalds@linux-foundation.org>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Kees Cook <kees@kernel.org>, Jori Koolstra <jkoolstra@xs4all.nl>,
	 "Lorenzo Stoakes (ARM)" <ljs@kernel.org>,
	Krzysztof Kozlowski <krzk@kernel.org>,
	Sasha Levin <sashal@kernel.org>,
	corbet@lwn.net,  skhan@linuxfoundation.org,
	rdunlap@infradead.org, federico.vaga@vaga.pv.it,
	 apw@canonical.com, joe@perches.com, workflows@vger.kernel.org,
	 linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	 Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Justin Stitt <justinstitt@google.com>,
	 Carlos Maiolino <cem@kernel.org>,
	Jakub Kicinski <kuba@kernel.org>,
	Brian Foster <bfoster@redhat.com>,
	 Christoph Hellwig <hch@infradead.org>,
	David Disseldorp <ddiss@suse.de>, Mark Brown <broonie@kernel.org>,
	 Jani Nikula <jani.nikula@intel.com>,
	Jens Axboe <axboe@kernel.dk>,
	 "David Hildenbrand (Arm)" <david@kernel.org>,
	Vlastimil Babka <vbabka@kernel.org>,
	 "Christian Brauner (Amutable)" <brauner@kernel.org>
Subject: Re: [PATCH] docs: remove Assisted-by references
Date: Tue, 13 Oct 2026 13:45:09 -0700	[thread overview]
Message-ID: <CAHk-=whTs09_ozN+e09GU68N1wPP56MUzDjrg9rnKxQUa0A_4Q@mail.gmail.com> (raw)
In-Reply-To: <20261013201628.GO4214@killaraus.ideasonboard.com>

On Tue, 13 Oct 2026 at 13:16, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> What this is about is setting our expectations, telling what we want and
> what we don't want.

No. What you are about is something entirely different. It has nothing
to do with "expectations", and it has everything to do with your
hangups.

I don't understand this whole idiotic concept of "don't use AI for X".

Here's a new rule just for you: don't use compilers for any of your
kernel submissions.

Because if you can't show that you really understand what the machine
is actually doing by writing your code in assembler, then I don't want
to see your code contribution. You clearly aren't competent if you
can't write it that way.

And btw, you had better not use an editor to write that commit message either.

Because I need you to show me that you can actually write a good
commit message without using tools that make it easy to backspace and
hide the mistakes you made while typing.

Ok?

Because otherwise those tool-assisted commits of yours clearly aren't
showing that you know what you are doing.

Do you not see how UTTERLY STUPID those kinds of rules would be?

So no. We're not going to make stupid rules that say "you can't use
tools for X".

The kind of expectations *I* have is that people do their best and I
expect people to understand what they are doing.

But that understanding has very little to do with what tools they use.

And quite honestly, in my experience, the people I respect and call
intelligent are not the ones that shy away from using new and
interesting tools.

                   Linus

  reply	other threads:[~2026-10-13 20:45 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-09  8:31 [PATCH] docs: remove Assisted-by references Sasha Levin
2026-10-09  9:38 ` Laurent Pinchart
2026-10-09 10:09   ` Sasha Levin
2026-10-09 10:05 ` Krzysztof Kozlowski
2026-10-09 10:24   ` Greg KH
2026-10-09 15:20   ` Jonathan Corbet
2026-10-11  1:04     ` Steven Rostedt
2026-10-12 15:42   ` Lorenzo Stoakes (ARM)
2026-10-13 11:19     ` Jori Koolstra
2026-10-13 12:38       ` Laurent Pinchart
2026-10-13 12:50         ` Jori Koolstra
2026-10-13 13:01           ` Laurent Pinchart
2026-10-13 13:24         ` Ricardo B. Marlière (SUSE)
2026-10-13 12:49       ` Lorenzo Stoakes (ARM)
2026-10-13 17:16         ` Laurent Pinchart
2026-10-13 12:31     ` Laurent Pinchart
2026-10-13 12:59       ` Lorenzo Stoakes (ARM)
2026-10-13 13:04         ` Krzysztof Kozlowski
2026-10-13 13:07           ` Lorenzo Stoakes (ARM)
2026-10-13 13:12         ` Laurent Pinchart
2026-10-13 13:29           ` Lorenzo Stoakes (ARM)
2026-10-13 13:37             ` Jori Koolstra
2026-10-13 14:52             ` Kees Cook
2026-10-13 14:54               ` Jori Koolstra
2026-10-13 14:58               ` Jori Koolstra
2026-10-13 17:12                 ` Kees Cook
2026-10-13 17:42                   ` Laurent Pinchart
2026-10-13 19:25                     ` Kees Cook
2026-10-13 20:16                       ` Laurent Pinchart
2026-10-13 20:45                         ` Linus Torvalds [this message]
2026-10-14 13:56                           ` Lorenzo Stoakes (ARM)
2026-10-14 18:47                         ` Kees Cook
2026-10-15 23:14                           ` Jeremy Dean Clifton
2026-10-13 15:02               ` Lorenzo Stoakes (ARM)
2026-10-13 16:58                 ` Kees Cook
2026-10-13 17:32             ` Laurent Pinchart
2026-10-14  3:23             ` Theodore Tso
2026-10-14 11:23               ` Mark Brown
2026-10-14 13:08               ` Jori Koolstra
2026-10-14 13:42               ` Lorenzo Stoakes (ARM)
2026-10-14 14:15                 ` Mark Brown
2026-10-13  4:24 ` Kees Cook
2026-10-13  5:56   ` Randy Dunlap
2026-10-13  6:18     ` Greg KH
2026-10-13  8:25     ` Kees Cook
2026-10-13 12:28       ` [PATCH] docs: remove Assisted-by reference Jori Koolstra
2026-10-13 12:55         ` Laurent Pinchart
2026-10-13 13:03           ` Jori Koolstra
2026-10-13 13:10             ` Laurent Pinchart
2026-10-13 13:20               ` Jori Koolstra
2026-10-13 13:55                 ` Laurent Pinchart
2026-10-13 15:18           ` Mark Brown
2026-10-13 17:07             ` Laurent Pinchart
2026-10-13 20:01               ` Shuah Khan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAHk-=whTs09_ozN+e09GU68N1wPP56MUzDjrg9rnKxQUa0A_4Q@mail.gmail.com' \
    --to=torvalds@linux-foundation.org \
    --cc=apw@canonical.com \
    --cc=axboe@kernel.dk \
    --cc=bfoster@redhat.com \
    --cc=brauner@kernel.org \
    --cc=broonie@kernel.org \
    --cc=cem@kernel.org \
    --cc=corbet@lwn.net \
    --cc=david@kernel.org \
    --cc=ddiss@suse.de \
    --cc=federico.vaga@vaga.pv.it \
    --cc=gregkh@linuxfoundation.org \
    --cc=hch@infradead.org \
    --cc=jani.nikula@intel.com \
    --cc=jkoolstra@xs4all.nl \
    --cc=joe@perches.com \
    --cc=justinstitt@google.com \
    --cc=kees@kernel.org \
    --cc=krzk@kernel.org \
    --cc=kuba@kernel.org \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ljs@kernel.org \
    --cc=rdunlap@infradead.org \
    --cc=sashal@kernel.org \
    --cc=skhan@linuxfoundation.org \
    --cc=vbabka@kernel.org \
    --cc=workflows@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).

Where did WIN32_LEAN_AND_MEAN come from? (2009)

Lobsters
devblogs.microsoft.com
2026-10-15 22:28:13
Comments...
Original Article

Commenter asdf wonders where WIN32_LEAN_AND_MEAN came from . The WIN32_LEAN_AND_MEAN symbol was introduced in the Windows 95 time frame as a way to exclude a bunch of Windows header files when you include windows.h . You can take a look at your windows.h file to see which ones they are. The symbol was added as part of the transition from 16-bit Windows to 32-bit Windows. The 16-bit windows.h header file didn’t include all of those header files, and defining WIN32_LEAN_AND_MEAN brought you back to the 16-bit Windows philosophy of a minimal set of header files for writing a bare-bones Windows program. This appeased the programmers who liked to micro-manage their header files, and it was a big help because, at the time the symbol was introduced, precompiled header files were not in common use. As I recall, on a 50MHz 80486 with 8MB of memory, switching to WIN32_LEAN_AND_MEAN shaved three seconds off the compile time of each C file. When your project consists of 20 C files, that’s a whole minute saved right there.

Moore’s Law and precompiled headers have conspired to render the WIN32_LEAN_AND_MEAN symbol relative useless. It doesn’t really save you much any more. But at one point, it did.

Category

Topics

Author

Raymond Chen

Raymond has been involved in the evolution of Windows for more than 30 years. In 2003, he began a Web site known as The Old New Thing which has grown in popularity far beyond his wildest imagination, a development which still gives him the heebie-jeebies. The Web site spawned a book, coincidentally also titled The Old New Thing (Addison Wesley 2007). He occasionally appears on the Windows Dev Docs Twitter account to tell stories which convey no useful information.

Abracadabra proposes winding down after string of hacks years ago left each $1 "stablecoin" token backed by $0.04 in reserves

Web3 Is Going Great
web3isgoinggreat.com
2026-10-15 22:24:38
Abracadabra, the defi project behind the Magic Internet Money (MIM) stablecoin, is shutting down. It blamed its string of hacks: $6.5 million theft in January 2024, $13 million in March 2025, and $1.8 million in October 2025, which altogether left about $21 million in bad debt. According to...
Original Article

Abracadabra, the defi project behind the Magic Internet Money (MIM) stablecoin, is shutting down. It blamed its string of hacks: $6.5 million theft in January 2024 , $13 million in March 2025 , and $1.8 million in October 2025 , which altogether left about $21 million in bad debt. According to the shutdown proposal, 22 million MIM are in circulation, backed by just $900,000 in "actionable backing" which puts the supposedly dollar-pegged token at about $0.04. Two wallets voted on the proposal.

In June, a similarly low-participation vote handed "stewardship" of the project to a different group which promised to "revitalize" Abracadabra. Days later, treasury wallets sold around $500,000 worth of MIM. In July, the project tweeted that a roadmap to restore the peg was "coming this week," then never posted again. A week after that tweet, Abracadabra-controlled wallets moved about $8.3 million in treasury assets with no explanation, some of it to a Binance deposit address, in what one commentator called "treasury looting". The wind-down proposal doesn't mention the $8.3 million or count it toward what MIM holders could redeem.

Porsche shuts down its NFT project with the floor price down 96%

Web3 Is Going Great
web3isgoinggreat.com
2026-10-15 22:13:02
When Porsche announced its Porsche 911 NFT project at Art Basel Miami in 2022, it promised holders "he opportunity to co-create Porsche's future in the Web3 universe". Turns out there wasn't much to that future.After bungling the mint, selling fewer than 2,000 of the planned 7,500 NFTs afte...
Original Article

When Porsche announced its Porsche 911 NFT project at Art Basel Miami in 2022, it promised holders "he opportunity to co-create Porsche's future in the Web3 universe". Turns out there wasn't much to that future.

After bungling the mint , selling fewer than 2,000 of the planned 7,500 NFTs after buyers balked at the 0.911 ETH (then $1,490) pricetag, the price went nearly exclusively downhill. Now, with the NFTs floundering with floor prices down 96% from launch, Porsche has announced it is ending its "shared adventure".

Woman arrested after blocking delivery robot in Center City Philadelphia

Hacker News
6abc.com
2026-10-15 22:04:26
Comments...
Original Article

A Center City Philadelphia woman was arrested after allegedly refusing to move out of the path of a delivery robot.

WPVI

Christie Ileto Image

Friday, October 16, 2026 1:07AM

PHILADELPHIA (WPVI) -- A Center City woman was arrested after allegedly refusing to move out of the path of a delivery robot.

The confrontation was captured on video and has since drawn online attention.

Philadelphia police said officers responded to the 1200 block of Filbert Street after witnesses reported a disturbance involving Carolyn Marvin and an Uber delivery robot near Reading Terminal Market.

IMAGE: Carolyn Marvin

IMAGE: Carolyn Marvin

According to police, Marvin repeatedly blocked the robot's path and ignored multiple commands from officers to move.

She was arrested and charged with disorderly conduct.

RELATED: Delivery robot has run-in with driver in Center City Philadelphia

Marvin tells Action News she was protesting the use of delivery robots because she believes they are replacing human workers.

"I know they're taking the jobs of human delivery workers and so, I have been protesting them whenever I saw them by standing in front of them and preventing them from going forward," Marvin said.

She said she views her actions as protected speech.

Top Stories

Marvin said she has confronted delivery robots on multiple occasions, including a September incident along Broad Street that also gained attention on social media.

RELATED: Uber Eats delivery robot gets kicked in Center City Philadelphia

Ashley Baldwin of West Philadelphia said she witnessed one of those encounters.

"I actually thought the robot hit her, so my original question was, 'Are you OK? Did the robot hit you?' And she said, 'No, I have to stop this. They're taking over the world,'" Baldwin said.

Asked whether she plans to continue protesting the robots, Marvin said she does.

"I do. Why not?" Marvin said. "I think it's my First Amendment right to publicly demonstrate on a sidewalk to protest against delivery robots."

Marvin said she hopes the viral incident encourages discussion about delivery robots, artificial intelligence, and their growing role in everyday life.

Copyright © 2026 WPVI-TV. All Rights Reserved.

Pudgy Penguins company shuts down its Abstract blockchain after losing "8 figures" running it

Web3 Is Going Great
web3isgoinggreat.com
2026-10-15 22:00:00
Igloo, the company behind the Pudgy Penguins NFTs, announced it will shut down Abstract, its Ethereum layer-2 blockchain, on December 15. CEO Luca Netz said the company had lost "8 figures" in the less than two years they were running the chain.Users have until December 15 to move their ass...
Original Article

Igloo, the company behind the Pudgy Penguins NFTs, announced it will shut down Abstract, its Ethereum layer-2 blockchain, on December 15. CEO Luca Netz said the company had lost "8 figures" in the less than two years they were running the chain.

Users have until December 15 to move their assets, after which anything left on the chain will become inaccessible. DefiLllama estimates there were around $76 million in assets on the chain when the shutdown was announced, leading some users to complain that the wind-down period is too short.

The shutdown comes a few months after Igloo shut down its Pudgy Party mobile game , which had dropped to around 200–300 active users shortly after its launch, and also lost the company millions of dollars.

Comparing Chromium Development at Google and Igalia

Hacker News
lwn.net
2026-10-15 21:56:37
Comments...
Original Article
Did you know...?

LWN.net is a subscriber-supported publication; we rely on subscribers to keep the entire operation going. Please help out by buying a subscription and keeping LWN on the net.

Sharon Yang is a Chromium developer who worked at Google on the browser and now works on it at Igalia. On the final day of FOSSY 2026, she gave a presentation on her experiences with both of those companies, comparing and contrasting the ways each one operates and how that affects work on the code base. She enjoyed working at Google and feels the same about Igalia, so the talk was not aimed at complaints—instead it was meant to give a feel for two companies that are rather different.

[Sharon Yang]

The talk was entitled "From Corporate to Co-op" highlighting one of the main differences between the enormous company, Google, and the employee-owned cooperative at Igalia. She is from Vancouver and went to the University of British Columbia, where FOSSY was held. While she was a student, she did an internship at Google, working on the Chrome browser, which is the Google product based on Chromium. In her slides , she showed a photo of herself—complete with propeller hat—in front of a Google sign.

When she was a student, her life was measured in semesters, but some of the people she worked with at Google had been working on Chrome for four years, which was amazing to her at the time. She ended up working at Google full-time for six years, all of it on Chrome. Most of her work was on the content layer of the browser, which is part of the open-source Chromium browser. So she works in the same repository ( GitHub mirror ), and with many of the same people, at Igalia as she did at Google. She briefly reflected on her time at Google: " I had a good time working on Chrome, the people were nice, I enjoyed it, it was cool, there was lunch, it was good stuff ", she said to laughter.

Eventually, she thought it might be time to move on, and perhaps out of the Seattle area where she was living, so she started looking around at the end of 2024. She had seen Igalia email addresses in the code base and met some of the people from the company at the BlinkOn conferences . Igalia is an open-source consulting company that is hired to work on various things, including Chromium; it is the largest contributor to Chromium that is not a browser maker, in fact. She joined Igalia and moved back to Canada a little less than a year before the talk in August.

Contrasts

She contrasted the two companies, starting with the number of employees: Google has around 180,000, while Igalia has around 180. In terms of revenue, last year Google had more than $400 billion, " Igalia, much smaller, we'll just say under a billion dollars ", which was greeted with laughter. Google is owned by institutional investors, while Igalia is owned by employees, which the audience applauded. Google has a wide range of compensation, from the CEO's $600 million salary package to her pay (somewhere in the range of $100,000-$300,000) when she worked there; at Igalia, all employees are paid the same, top to bottom and across the globe.

While they are " massively different entities ", both companies have teams working on things in common; she works on Chromium, but there are also teams from each working on accessibility and on web standards.

Chrome and Chromium are " kind of the same, they're kind of not ". Chrome is a Google product, with Google branding and colors, while Chromium is an open-source project that anyone can use to build a browser. Chromium is missing proprietary pieces like digital rights management (DRM), " AI integration ", and certain codecs; " and it's blue ". There are various other browsers based on Chromium, including Microsoft Edge and Brave , as well.

Most of the Google Chrome team members do most or all of their work in the Chromium repository. Obviously, the proprietary pieces are handled elsewhere, but she and other Google Chrome developers rarely have to interact with that code. Near the end of her time at Google, she had to get help to do a simple task that required access to the " totally different universe " where the proprietary parts live.

She then compared the experience of working for the two companies. The first week is pretty much the same at any new job, she said. The initial steps are getting to know your coworkers, reading internal documentation, learning how to communicate internally, and so on. Igalia has a whole set of open-source tools that it uses, which is nice.

There are some differences, as well. For example, there is a system for doing faster builds of Chromium, " otherwise you'll just spend all your time building Chromium ". That system is immediately available to Google employees, but external users have to request access to it. A bigger area of friction is access to bug reports, which are meant to be open to everyone unless they are security bugs. Due to a bug-tracker migration a few years ago, though, there are bugs that should be visible to outsiders, but are only visible to Google employees. " It is not a malicious thing ", and it is easy enough to get the access fixed, but it is something extra she has to do once a week or so.

There is other information that could be more readily available to the public, but is not because it is stored in Google Docs without being shared. Ensuring that the public has access " is a best-effort thing and people forget ", which is unfortunate. In addition, all of the tools for tasks like bug tracking are maintained by Google and, essentially, for Google, so outsiders have no way to provide feedback or request features and changes. They are " relatively minor points of friction " but they are enough to feel that " I am now separate from this ".

After a month in her new job, she started to see even more similarities with her previous one. The team members are all still available via the same communication channels (e.g. Slack), and she is likewise available to them. Some of the work that Igalia does comes directly or indirectly from Google; she is working a Chromium project that comes through the Linux Foundation, which Google is a member of. " I'm working on the same repository, I'm using the same tools, I'm getting money from Google, what's changed here? "

Projects

The answer it seems is " kind of everything and kind of nothing ". The types of projects are different at Igalia, though. At Google, she worked on the projects that were important to the people in her management chain; those are often new features or " a flashy metric that they want to improve ". They are often aimed at getting promotions for the engineers and those in the reporting chain.

The projects handed to Igalia to work on come directly from the technical staff, so they tend to be " code-health or tech-debt kind of projects ". For example, Igalia worked on componentizing the Chromium code base and its current project is " improving web-platform-test interoperability between browsers ". It is important work that is good to do, but " it is just so hard to imagine anyone at Google doing it for their day job "; it is " not the kind of work that gets prioritized or rewarded ". Many of the people that she worked with on Chromium at Google would love to be able to do that work. " These are people who care about the code base, they want it to be good, but there's just no room in their day job to do that, which is too bad. "

She was initially attracted to the Chrome team because all of the people on it seemed to be welcoming. That remained true throughout her tenure at Google and has continued into her work at Igalia. " People who work on Chromium have just generally been friendly and inclusive in all domains, which is good, and is not to be taken for granted. " She has been able to maintain relationships with her former coworkers, review their patches, leave comments on work that they have in common, and so on. " It's a nicer experience than sending a code review to some stranger. "

Hierarchy

She put up a slide of an organization chart from a typical company, with her picture in a leaf node as the only filled-in box. In a chart like that, the engineer is at the bottom of the hierarchy; they have a manager, who has a more senior manager, and so on. An engineer is concerned with technical decisions, such as which language to use or how to test the code being written, while at the top, they are deciding things like company direction and vision. The people in the middle are doing some technical work, but it is often not entirely clear what it is that they do; " who knows? ", she said to laughter. " The people at the top are paid a lot more than the people at the bottom. "

At Igalia, things are quite different. The " org chart is intentionally flat " and there are no managers. There are various teams, such as the Chromium team that she is on, a Linux kernel team, and more. The flat hierarchy means that " all of the employees do a lot of work that you typically wouldn't do as a leaf-node employee at a big company ", which includes making company decisions, such as which projects to take on, whether to increase headcount, and how much vacation time there is.

Igalia is a cooperative, so votes are taken on those kinds of questions. " These are not decisions you have any influence at all over at a big company. " One of the nice things about that arrangement is that the people who are making the decision are the ones who are affected by it, which is " just not the case at a standard company ". The most obvious example for that is layoffs, Yang said.

There is a cost to doing things that way, of course. The meetings for those decisions are lengthy and run for two days—in a European time zone. When she was at Google, she was in the dominant time zone (US Pacific), and her teammates elsewhere had to have meetings at weird times, so this feels a bit like karma for her, she said. But that is a " minor price to pay " for a structure that is " so fundamentally different and feels good ".

It took her a while to fully recognize just how different Igalia's structure is; the impacts of it did not sink in right away. The biggest impact for her was promotions, which do not exist in a flat organization where everyone is paid the same amount. When she was a new graduate, promotion was her focus because it is expected of new hires; " Meta literally fires you if you don't reach a certain level in a certain time ".

Trying to ensure that she was working on the right projects and " demonstrating the right skills " in order to be promoted was stressful and took a lot of effort. Much of it is out of the engineer's hands and is up to their manager. She was lucky and had a great manager at Google, but even if they are good, they have multiple people reporting to them. " For you, it's like your whole professional life, but for them it's one of the million things that they have to do. "

The flat pay structure is also a welcome change—there are no pay discrepancies. As a woman and someone who was formerly working on a visa, " these are very real concerns you have, and now that's just all gone ". Everyone is on the same level playing field, which leads to more trust and collaboration. " If that sounds fun, go join or start a coop ", she said to applause. That was the end of her prepared talk, but she had plenty of time for questions, which were numerous, perhaps unsurprisingly.

Q&A

The first was about where direction came from in a flat structure; how are decisions made about what she should work on? That depends on the project, Yang said, some are closely aligned with the engineers at the client company, while other projects are less hands-on. When working with the client's engineers, the direction likely comes from the client side as in a more typical organization. Sometimes projects are more open-ended, where the client agrees to pay for work on a specific task for, say, a year to see where things end up; in that case, the Igalia team decides on what to tackle.

Another attendee wondered what it was that Igalia's clients needed done with Chromium. Once again, it varies, she said. Her project is cleaning up the testing, which is something that Google wants and it does not fit anywhere in its team. Other clients want customized browsers for internal use, so parts of the Igalia Chromium team are also working on downstream projects.

The hiring process was up next. One attendee wondered how Igalia decided that it needed to hire for a position and how the person to hire was chosen. " Which teams get headcount is decided at a company level ", she said, so if the Chromium team wants to hire, it makes a pitch to the assembly, which is the voting body. If that is approved, the team will interview candidates and choose who it thinks should be hired, which goes back to the assembly. Normally, that choice will be approved unless there is some red flag that someone elsewhere in the company is aware of. Yang reminded attendees that she was still fairly new at Igalia, but that there were other employees sitting in on the talk who might chime in to help clarify things; in this case she just got a thumbs up from them, she said.

Having 180 employees in a flat structure already sounds a bit unwieldy, an attendee noted, is there a size where Igalia will essentially be forced into a hierarchical structure just because of its size? Yang said that she asked the same thing when she was interviewing, " everyone agreed that this is definitely an issue but there's not a clear solution yet ". Her partner suggested that honeybees might provide a reasonable model of how a split could be done; when a hive gets too big, part of the hive leaves as a swarm to found a new hive.

An employee at another employee-owned coop suggested that there were synergies between open source and cooperatives, which might help when the time comes to split up. He wondered if there were plans for Igalia to release its internal tools and coop-operating documents as open source, which could facilitate a new, separate company if that was needed. Yang noted that her coworker Danielle Mayabb had a session in the next slot about running the company using FOSS tools.

A researcher who studied companies with flat structures asked whether some of the organizational structure came back into the picture within the different teams. The teams are responsible for decisions like whether to take a project or not, Yang said, and there are product managers that coordinate between teams. The product managers work closely with clients, but they have no inherent extra power, like a manager at a typical job.

Along the way, she had said that she was not yet part of the assembly, so an attendee asked how that worked, how long it took, whether a vote was needed, and so on. Yang recommended the video of a talk by Valerie Young at the first FOSSY in 2023, which goes into more detail. Yang said that somewhere around the one-year mark it would be decided whether an employee would join the assembly, though she did not specify exactly how that was done. " If you've done an exceptionally bad job, you won't be permitted in. "

That was a good segue to the next question, which was about what would prevent an employee in the coop from just ceasing to work. In a flat hierarchy, who is monitoring what employees are doing? Can someone just stop working without detection? She joked that she would give it a try and come back next year with a talk on that. More seriously, there are people who are providing feedback on the performance of their coworkers; each person has a mentor in the company who fills some of the roles of a manager at other companies, including gathering assessments of the work that is being done. " People are monitoring your performance and it is a collection of all of the people that you work with. "

An attendee noted that there is a saying in the coop movement: " If you've seen one coop, you've seen one coop. " That is why it is so helpful for coops to share their internal structure; as with open-source software, other coops can learn from the trial and error that went into forming the coop. Yang noted that there used to be a coop track at FOSSY and that there was talk of bringing it back for next year.

[I would like to thank the Linux Foundation, LWN's travel sponsor, for its assistance with my trip to Vancouver for FOSSY.]


Near Intents exploited for $3.8 million, recovers all assets

Web3 Is Going Great
web3isgoinggreat.com
2026-10-15 21:46:51
Near Intents, a cross-chain swap service, halted operations after an attacker drained around $3.8 million by exploiting a bug in its Omni layer.The next day, Near Intents posted addresses for returning the funds and threatened the attacker: "We have identified you, sir." The attacker return...
Original Article

Near Intents, a cross-chain swap service, halted operations after an attacker drained around $3.8 million by exploiting a bug in its Omni layer.

The next day, Near Intents posted addresses for returning the funds and threatened the attacker: "We have identified you, sir." The attacker returned everything the next day, in a transaction that included an on-chain message saying "We've returned all the funds, we were in the wrong". Near Intents confirmed the funds were returned, and said they were stopping their investigation.

Any window from your Mac, on your iPhone and iPad

Hacker News
github.com
2026-10-15 21:43:17
Comments...
Original Article

Any window from your Mac, on your iPhone and iPad.

Sill shows a window from your Mac, or the whole desktop, on your iPhone or iPad. You use it there with touch, a trackpad, a keyboard or Apple Pencil. Sill for Mac captures the window, encodes it as HEVC video and sends it to the Sill app on your device. Your taps, clicks, scrolls and keys go back to your Mac. Your Mac and your device connect on the same network, over a USB cable, with Direct Wireless Connection when they share no network, or through your own VPN, such as Tailscale, with Remote Access. There is no account and no server in between.

getsill.app · Download for Mac · Support · Privacy · Terms

CI

Download on the App Store

Sill for Mac is a free, notarized download from getsill.app ; with Homebrew , brew install --cask saffsanity/sill/sill installs the same download from Sill's own tap . Sill for iPhone and iPad is free on the App Store , and you can also build it from source (below).

Screenshots

These are the iPad screenshots from the App Store; on iPhone and iPhone Duo, Sill has layouts of its own.

"Your Mac, on your iPad." The Mac's Weather app on an iPad held sideways, under Sill's bar of window thumbnails and buttons. "Laptop mode." An iPad held upright, with the Mac's Clock app on top and Sill's bar, a row of keys and a trackpad below it. "Sharp and smooth." Sill's Settings panel on an iPad held upright, with the Mac's Quality, Resolution and Frame Rate settings.
"Pair once. Private always." Sill's Connect to a Mac screen on an iPad, with a Mac listed as Wired and Add a Mac below it. "Launch any Mac app." Sill's Apps list on an iPad held sideways, with a search field, the apps open now and every app installed on the Mac. "Every window, one tap away." On an iPad held sideways, a window's thumbnail held in Sill's bar shows Close, Minimize and Full Screen.

Requirements

  • A Mac with Apple silicon, on macOS 14 or later.
  • An iPhone or iPad with iOS 17 or iPadOS 17 or later.
  • On your Mac, Sill asks for Screen Recording, to show your windows, and Accessibility, to click, scroll and type for you and to move and size the window it shows. On macOS 15 or later, also allow Local Network. On your iPhone or iPad, Sill asks for Local Network, to find your Mac, and for the camera when you scan your Mac's pairing code (you can type the code instead).
  • Your Mac and your device on the same network, joined by a USB cable, or near each other with Direct Wireless Connection on. Away from home, your own VPN, such as Tailscale, with Remote Access on.

How it works

  • Sill for Mac lives in the menu bar. When your device picks a window, or the whole desktop, Sill captures it with ScreenCaptureKit and encodes it as HEVC with VideoToolbox, on the hardware video encoder in your Mac (or, while that is busy, in software). It captures nothing while no device is connected.
  • The picture goes over an encrypted connection (TLS 1.3) straight to the Sill app on your iPhone or iPad, which decodes and shows it. When the encoder or the link falls behind, Sill drops frames rather than queue them, so the picture stays current.
  • Your input goes back the same way: taps and clicks, scrolls with momentum, the on-screen trackpad, keys and typed text, and Apple Pencil as the pointer. Sill for Mac turns it into mouse and keyboard events, which needs Accessibility. A keyboard attached to your device types on your Mac as soon as the picture shows, Esc included, and a trackpad or a mouse scrolls the window under its pointer. Three fingers swipe and pinch as on a Mac's trackpad: Mission Control, App Exposé, the Spaces, Apps and Show Desktop, through the keyboard shortcuts your Mac has for them.
  • On iPhone , held upright, the picture is on top with buttons, keys and a trackpad below. Larger Picture, in the settings panel, gives a window's picture the room of the window thumbnails, down to where the keyboard comes up; the Desktop keeps the usual layout. A window keeps its own shape until you set its text size with Aa, or turn on the virtual display; then your Mac makes it fill the taller picture.
  • The clipboard goes both ways while Share Clipboard is on, in both apps: text you copy on your Mac is ready to paste on your device, and Paste in Sill sends what you copied on your device to your Mac's clipboard, where you press ⌘V. Sill never reads your device's clipboard by itself, and copies a password manager marks as concealed stay on your Mac.
  • On iPhone Duo , Sill follows the hinge: open it flat and your Mac fills the inner display; half open, the picture is above the fold with a trackpad and keys below; closed, Sill runs on the cover display. Nothing you touch sits on the fold.
  • The menus of the app you use reach your device too: in the iPad's own menu bar on iPadOS 26 or later, and behind the Menus button in Sill's bar. Sill for Mac reads each menu from the app as you open it and chooses the item you pick, through Accessibility. When someone moves the mouse at your Mac, your device shows the pointer where it is.
  • Nearby , your device finds your Mac with Bonjour on your local network. Over a USB cable, your Mac shows as Wired and the connection uses the cable. With no shared network, Direct Wireless Connection (off by default) connects over peer-to-peer Wi-Fi, the way AirDrop does.
  • Pairing : you pair each iPhone or iPad with your Mac once. Tap your Mac on the device, and your Mac shows a code: scan it, or type its 12 digits. Over a USB cable the device pairs by itself. From then on each end knows the other's key, and every connection, nearby or away, is pinned to those keys. In Sill's Settings on your Mac, Devices lists the devices you paired, and you can remove any of them there.
  • Away from home , Remote Access (off by default) lets the devices you paired reach your Mac through your own VPN or a port you forward on your router; a device learns how the next time it connects at home with Remote Access on. A device away from home gets a quality of its own, Low at Standard resolution until you pick another there or in Sill's settings, so a slow connection never starts at your home quality; your home quality comes back as soon as a device at home connects. When your device comes home and your network lists your Mac, the session moves to your network by itself.
  • When the link can't keep up , Sill for Mac notices that it is holding frames back and tells your device, which says so over the picture and, in its Settings, offers a quality the link can carry.
  • Text size : Aa on your device resizes the window you stream on your Mac, through Accessibility, so its text shows at the size you pick, and keeps it at that size while it streams. The window goes back to its own size and place when Sill stops showing it: you pick another window or the Desktop, your last device disconnects, or you quit Sill. If you moved it on your Mac meanwhile, it keeps its new place.
  • The virtual display (off by default) moves a window you stream onto a display of its own on your Mac, so it keeps updating when other windows cover it. It uses a private macOS API, which is one reason Sill for Mac comes from the website and not from the Mac App Store.

Good to know: Sill shows one window, or the whole desktop, at a time, and it does not play sound from your Mac. The clipboard carries text only, up to 256 KB at a time, and only between apps that both have it. Your Mac needs to be awake, with Sill open. Sill may not be able to wake it. After a restart Sill opens only once someone logs in, with Launch at Login on. Only the iPhones and iPads you paired can connect, unless you turn off Require pairing in Settings › Devices; then any device on your network can, still encrypted. Pairing at home came with Sill for Mac 0.4.0 and Sill for iPhone and iPad 0.5 (2), and each needs the other: the iPhone and iPad app shows an older Sill for Mac as "Update Sill", and an older iPhone and iPad app can't connect to Sill for Mac 0.4.0 or later at home. Since 0.5.1 the two apps share one version number for each release. With Sill for Mac 0.3.1 or earlier, connections on your local network, over the cable and over Direct Wireless Connection are not encrypted, and anything that reaches your Mac there can connect without pairing: update it.

Tips

Sill is free, with no ads, no tracking and no subscription. If it is useful to you, a tip through GitHub Sponsors helps pay for the developer account. A tip unlocks nothing: every feature is free.

Building from source

You need a Mac with Xcode (Sill is built with Xcode 27; the iPhone and iPad app needs Xcode 27.1 or later, for the iPhone Duo's hinge and fold), selected as the active developer directory, with its license accepted.

Sill for Mac, from the repository's folder:

Scripts/make-app.sh --install --open

This builds Sill.app with SwiftPM, signs it with your Apple Development identity, replaces /Applications/Sill.app and opens it. If that was the Sill for Mac you downloaded, grant Screen Recording and Accessibility again and pair each device again: the download keeps its key and paired devices in the data-protection keychain, which only a Developer ID build with the project's provisioning profile reads, and a build of your own keeps them in your login keychain. Without --install it only builds .build/Sill.app . With no Apple Development identity it signs ad hoc, and then Screen Recording and Accessibility have to be granted again after every build.

For work on the host itself, swift run -c release SillHost runs the same host on the command line, with one difference: unless you add --pairing , its home door is plain and open, with no pairing and no encryption, and any device on your network can connect to it, so run it only while developing. The App Store's Sill for iPhone and iPad never dials such a door ("Update Sill"); a Debug build from this repository can ( docs/DEVELOPMENT.md , Pairing at home). With --synthetic it streams a test pattern with no Screen Recording needed.

The iPhone and iPad app:

  1. Open iOSClient/Sill.xcodeproj .
  2. In the Sill target's Signing & Capabilities, pick your team, and change the bundle identifier me.saffer.sill to one of your own.
  3. Run it on an iPhone or iPad on the same network as your Mac, and tap your Mac. The first time, a Sill for Mac built from this repository asks you to pair: scan the code it shows, or connect the device with a USB cable.

docs/DEVELOPMENT.md has the rest: every command-line flag, the test tools and the simulator harness, permissions and how to reset them, Remote Access, troubleshooting and releases.

Contributing

Issues are welcome: bug reports, questions and ideas. For a pull request, keep to the conventions and decisions in CLAUDE.md : Swift and Apple frameworks only, no third-party dependencies, nothing that needs a server, and latency before picture quality. Open an issue before starting anything large. Before a pull request, Tests/checks/run-all.sh runs the same pure checks as CI, in about five minutes and with no device. Contributions are accepted under the project's license. Please report a security problem privately, as SECURITY.md says, not in a public issue.

License

Sill is licensed under the Apache License 2.0 . Copyright 2026 Noah Saffer.

El-Sayed Works To Stitch Together a Diverse Majority

Portside
portside.org
2026-10-15 21:36:53
El-Sayed Works To Stitch Together a Diverse Majority jay Thu, 10/15/2026 - 21:36 ...
Original Article

About a month after Michigan’s August 4 Democratic primary for U.S. Senate, where Dr. Abdul El-Sayed, depending on how you look at it, won in an upset or survived a squeaker, he sat down with a roundtable of Black mayors and elected officials across the state. The primary results clearly showed that El-Sayed had to take immediate steps to win over Black voters who had backed his chief rival Rep. Haley Stevens in the primary, and this meeting was part of the strategy.

At multiple points during the meeting, the mayors and representatives said they didn’t see El-Sayed enough during the primary. A few of them went further and argued that the Democrat hadn’t campaigned in their areas at all.

El-Sayed listened before politely, but firmly, pushing back.

“I’ll just tell you, through the course of the primary, I’ve actually been to every one of your cities,” El-Sayed said, looking around the table. He conceded that he may not have campaigned directly with each of them—some had backed Stevens—but he had sought the votes of all their constituents.

El-Sayed continued that, as health commissioner of Wayne County, which is 37 percent Black , he had been a very “hands-on public servant” and planned to stay that way as a senator. He promised to be more visible in the leaders’ communities and to prevent the feeling that he was taking them for granted. “I want to understand what the problems are, and I want to figure out how I can partner together to solve them,” he said.

The 41-year-old progressive has fielded a fair share of criticism from important voting blocs in Michigan since winning the Democratic nomination. He has had to push Democrats to coalesce around his campaign and heal the scars from a contentious primary, during which he weathered over $60 million in attack ads. Foremost among these scars was the fact that African Americans came out for Stevens in a lopsided way that he could not ignore.

“He did not do well in the primary with Black voters outside of the 30 counties that he won,” Bernie Porn, the EPIC-MRA pollster who is seen as the best in the state, told me. “He would not have won the primary were it not for the overwhelming support he got among younger voters.”

Some Jewish voters in the state continue to warn that their support, too, may be up for grabs unless El-Sayed changes his answers on Israeli sovereignty and Palestine. And then there is Michigan’s Arab community, a small but critical voting bloc that strategists presume will decisively vote for El-Sayed despite shifting some support to Republicans and Donald Trump in recent years.

Bilal Beydoun, a Dearborn-based Democratic strategist and writer, said that in the Arab community, El-Sayed was bolstered by a few Arab American candidates who ran grassroots campaigns. But those candidates have won their primaries in safe Democratic seats, so that might detract from the ultimate turnout in November.

“For the Arab Americans who do turn out of course I expect them to fully back El-Sayed, and not just because he’s Arab American. I think that’s a lazy overall point that people are going to make,” Beydoun said. “His anti-war message is quite unprecedented and revolutionary. He would be the first Muslim senator, he would also be the first anti-war senator from Michigan in my lifetime.”

Even as the front-runner, El-Sayed’s calculus for winning the Senate seat is complicated. He overcame two better-known rivals in the primary with an outsider campaign. But in the general election, El-Sayed must maintain support from the Arab community and bolster support among African Americans—especially those who couldn’t bring themselves to vote for him in the primary.

Party regulars coming home after an extended and bitter primary isn’t unheard of. But electoral scar tissue can be persistent. The rub for El-Sayed is that there is a history in Michigan of the Arab American and Black communities being at odds with each other. El-Sayed is asking them to rally around the same candidate in an election where his opponents have actively worked to keep those constituencies divided.

“There are different interests,” said former Michigan House Speaker Joe Tate, a Democrat who attended the roundtable with El-Sayed. “And sometimes that can show itself as points of friction.”

Simmering Tensions

There are almost 400,000 Arab Americans in Michigan, according to the Arab American Institute. That’s nearly 4 percent of the state’s population. About 14 percent of Michigan’s population is African American, about 1.41 million voters, according to census figures.

Broken down by party affiliation, the vast majority of African American voters in Michigan are Democrats—about 83 percent, according to a Pew Research Center survey of voters. Black voters in Michigan have consistently leaned heavily Democratic in recent elections, even when Republicans and Donald Trump made gains among that constituency. Meanwhile, Arab American voters are more evenly split, with 38 percent identifying as Democrats or Democratic-leaning and the same percentage identifying as Republican or Republican-leaning, according to a national Arab American Institute poll.

In 2024, Trump’s re-election campaign worked to rally Arab voters, with former director of national intelligence Ric Grenell taking point on outreach. This was ultimately successful, as Trump won Dearborn , a famously majority-Arab city, by six points over Kamala Harris. That support helped the Republican president win the state for the second time in three tries.

During the August primary, El-Sayed won almost 80 percent of the vote in Dearborn. But he struggled among Black voters, getting crushed by Stevens in the majority-Black parts of the state. The dichotomy in how the two constituencies voted for El-Sayed reflects broader differences.

Arab voters strongly oppose U.S. support for Israel’s actions in Gaza. Throughout El-Sayed’s Senate campaign, he’s been one of the more outspoken Democratic Senate candidates in support of Palestinian rights and in opposition to robust economic aid to Israel over the war in Gaza. He’s refrained from giving a one-word answer about whether Israel has a right to exist. He supported the Uncommitted movement during the 2024 Democratic primary, when President Joe Biden was running for re-election, before endorsing Vice President Kamala Harris for president when she became the nominee.

Former Rep. Mike Rogers during a televised debate with Abdul El-Sayed, October 8, 2026, in Grand Rapids, Michigan.  (Photo credit: Paul Sancya/AP Photo  //  The American Prospect)


Some Black voters, by contrast, have viewed El-Sayed skeptically for initially refraining from backing the Biden-Harris ticket and, effectively, withholding support from the first Black vice president in American history. And here, El-Sayed is running up against some deep fault lines.

“I think Abdul is facing a couple of challenges that might not be his fault. One of them is that there has been a historic conflict between Black folks and Middle Eastern folks in Michigan,” said Macomb County Commissioner Michael Howard, who is Black. “Some of the relationships have been absolutely great, and some of it has been absolutely contentious, and there has been some conflict there.”

Howard added that Harris’s loss in Michigan left Black voters feeling like, “Our candidate was put up, and you folks turned your backs on us. So that’s two strikes” for Abdul.

The tensions between the two communities go beyond politics. In September, a car crash involving an 18-year-old Arab woman and a 49-year-old Black woman resulted in an angry crowd of Arab American men surrounding the Black woman and yelling racial slurs at her. Activists and community leaders have pointed to that example.

“Unfortunately, there has been a lot of friction … I think more so in a lot of the Arab-owned businesses and in the way Black residents feel they have been treated,” Joel Rutherford, a longtime community activist and local government official, told me. Rutherford cited the car crash incident and said, “Once people hear about it, let’s face it, those kinds of things spread like wildfire. And unfortunately, because it seems like that’s happened [multiple times] over the years, that’s just exacerbated the problem. It’s something that, to me, the communities haven’t taken the time to really get to know each other. They’ve kind of decided that one group is on one side, one group is on the other.”

Political Outreach

El-Sayed and his team took his narrower-than-expected primary win to heart. Since becoming the nominee, he has participated in roundtable discussions with Black leaders. He’s campaigned with former Vice President Kamala Harris (even as other candidates have recoiled at the prospect), as well as Sen. Lisa Blunt Rochester (D-DE), one of the few African American legislators in the Senate. El-Sayed has appeared on numerous Black-focused podcasts, like The Breakfast Club and Higher Learning. Former President Barack Obama is scheduled to stump for El-Sayed and other Michigan Democrats later this month.

Obama formally endorsed El-Sayed on Monday in a campaign ad . But there have been bumps. A CNN report found that in 2012, El-Sayed wrote a critical essay about Obama’s presidency. El-Sayed recently walked back that criticism , likening Obama to a father figure that he can admire without unilaterally supporting all his actions.

Obama has likewise defended his plans to campaign for El-Sayed. “I’m going to go to Michigan to campaign for Abdul El-Sayed. And people are like, ‘Well, he’s really left-wing,’” Obama said at a recent fireside chat in Virginia. “But I don’t know, he’s for a higher minimum wage and health care for all, and it doesn’t seem crazy to me. You know, FDR was for that too.”

El-Sayed has enjoyed consistent but less visible support from Arab donors and outside groups dating back to when he unsuccessfully ran for governor. During the Senate primary, an under-the-radar super PAC called American Priorities, formed to counter spending from the American Israel Public Affairs Committee (AIPAC), spent $600,000. El-Sayed was endorsed by Michigan Rep. Rashida Tlaib, a progressive favorite and one of the few sitting Arab Americans in Congress. The Arab American Political Action Committee and The Arab American News both endorsed him, as did Abdullah Hammoud, the mayor of Dearborn. On primary day, El-Sayed won 70 percent of the vote in Dearborn Heights, which has a large Arab American population.

In the general election, El-Sayed has enjoyed support from prominent Muslim leaders, too. New York City Mayor Zohran Mamdani recently appeared at a tightly controlled fundraiser for the Democratic nominee in New York. Others, like Rep. Ilhan Omar, have been early supporters. The conventional wisdom has long been that El-Sayed would enjoy strong support among Arab American voters.

But for all the tacit support El-Sayed has maintained among Arab voters in Michigan and nationally, and the work he’s put in to shift the backing Stevens enjoyed among Black voters to his side, El-Sayed has not built an unbreakable coalition. His leads in polling, while clear ( 21 of the last 22 polls since Labor Day show him in front), are not overwhelming.

The Homestretch

For months, the campaign of El-Sayed’s Republican opponent, former U.S. Rep. Mike Rogers, has attempted to shave off slices of voters from various Democratic-leaning constituencies. The Rogers campaign has aggressively touted any support he’s built among Democrats to ease Democratic discomfort with crossover voting. (Some of this appears disingenuous; notable members of the “Democrats for Rogers” coalition have supported Republicans for years .)

Following this pattern, Rogers and his team have made plays to disillusion Arab voters with El-Sayed and attract African American voters. The Rogers campaign ran an ad featuring a young Persian American man arguing that El-Sayed is too closely linked to radical Islam and al-Qaeda. In the first of two debates Rogers is set to participate in, he repeatedly attacked the Democratic nominee on those same tenuous attack lines.

Another ad Rogers released on Monday featured three Black Michiganders talking directly to the camera about how they are voting for Rogers because El-Sayed is “too arrogant and way too extreme.” Rogers obviously doesn’t want to make the campaign about an unpopular president; he’s tried to mildly break from Trump over the trade war with Canada, for example. His pitch is that Black voters, Arab voters, Democrats, and Republicans all need to vote for him to block a dangerous, radical proxy for terrorism from entering the Senate. A different Democrats for Rogers ad features a number of Black voters saying they planned to vote for Rogers. There is also a line in the ad that says, “He cares more about the West Bank than West Detroit,” even though there is no West Detroit.

One of the latest—and likely among the final few—campaign ads for El-Sayed is called “War,” which trumpets the Democrat’s opposition to “Trump’s war abroad” and the exorbitant spending that comes with it. In multiple frames, the ad features El-Sayed smiling in a flannel shirt, with an acoustic guitar playing in the background. It’s a clear pushback against the abrasive, radical caricature of El-Sayed that Republicans want to portray.

El-Sayed’s campaign is taking a multipronged approach to the final stretch of the campaign. They are working to build support in the northern and more rural parts of the state while also trying to close the deal with voters who supported Haley Stevens—especially around Detroit—and make sure not to reverse any gains Michigan Democrats have made with Arab voters, who not so long ago backed Trump but are drifting left.

El-Sayed has held private fundraisers with prominent Muslim, Arab, and African American donors and leaders in the final stretch of the campaign. His campaign is slated to hold another one with former Detroit Mayor Dennis Archer, one of the city’s more successful recent mayors, who is Black.

I recently asked a top Michigan strategist with extensive campaign experience in the state if it’s fair to expect robust Arab turnout for El-Sayed. In response, the strategist said, “Yeah, but it’s just a very small percentage of the vote.”

Still, it is an important bloc of support. Margins of victory in Senate races in Michigan have shrunk dramatically over the past two decades. Twenty years ago, Debbie Stabenow won her 2006 Senate race by almost 16 percentage points. The late Sen. Carl Levin won his 2008 Senate race in a wave election by almost 29 percentage points. Yet the most recent Senate race between now-Sen. Elissa Slotkin and Rogers was decided by fewer than 20,000 votes, or 0.3 percentage points.

In other words, in a state where over eight million Michiganders vote, a large chunk of the 300,000 to 400,000 voters who identify as Arab could make the difference.

El-Sayed has, in character, presented an optimistic front. He’s recently predicted in multiple interviews that he could win by as much as seven percentage points, even as polling averages show him leading Rogers by 2.7 points.

The indicators suggest that this is a wave election year for Democrats, so it’s conceivable that a candidate like El-Sayed—who is enjoying large crowds in redder parts of Michigan—could win by a healthy margin. But it’s even easier to imagine El-Sayed, having overcome a bruising primary and an only slightly less arduous general election, eking out a victory by a minuscule number of votes. In that scenario, support from as many Black and Arab voters as possible would be invaluable.

“I think there’s a general sense that this will be a close race,” Tate said, adding, “In my mind, whatever friction points [Democrats] do have, Trump is overshadowing the whole thing.”

El-Sayed’s campaign has worked to turn Donald Trump’s support for Rogers and some of the Rogers campaign attacks into an advantage. On Wednesday, the campaign tweeted out a clip of El-Sayed where he says, “We’re too busy fighting each other because of our differences to realize they are picking our pockets at every turn.”

Daniel Strauss is a Washington, D.C.–based political reporter. He has written for New York magazine, Slate, and Vanity Fair, and has worked as a reporter for CNN, The New Republic, The Guardian, Politico, and Talking Points Memo. More by Daniel Strauss ]

Read the original article at Prospect.org .

Used with the permission. © The American Prospect , Prospect.org, 2026 . All rights reserved.

Support the American Prospect .

Click here to support the Prospect's brand of independent impact journalism.

Tesla Roadster

Hacker News
www.tesla.com
2026-10-15 21:32:45
Comments...
Original Article
You don't have permission to access "http://www.tesla.com/roadster" on this server.

Reference #18.d2b52e17.1792116632.642b6841

https://errors.edgesuite.net/18.d2b52e17.1792116632.642b6841

★ Initial Thoughts on This Week’s New Apple TV 4K (4th Generation) and HomePod Mini 2

Daring Fireball
daringfireball.net
2026-10-15 21:18:29
At the old pre-June prices, you could buy a 128 GB Apple TV and a pair of HomePod Minis for $350 ($150 + $100 + $100). Four short months later, with today’s new models, that combination would cost $600 ($300 + $150 + $150)....
Original Article

Apple Newsroom, Tuesday morning :

The new Apple TV 4K features three far-field microphones, letting users control what they’re watching and discover new shows completely hands-free. Advanced echo cancellation intelligently isolates a user’s voice from background sound to deliver crystal-clear “Hey Siri” or “Siri” recognition, even while audio is playing.

This is nice, but I don’t think it buys me anything, because my existing Apple TV 4K is paired with 2nd-gen HomePods, and the HomePods each have a “four-microphone design for far-field Siri”.

The A19 chip in the new Apple TV 4K delivers up to 50 percent faster CPU performance and up to 2× faster GPU performance than the previous generation, for greater responsiveness, faster navigation, and smoother animations. The A19 chip also includes a new, dedicated AV1 decoder, enabling more efficient, high-quality streaming while using less bandwidth.

The new AV1 decoder seems like it might be meaningful, but does anyone think UI navigation and animation smoothness is improved by going from the A15 to the A19 SoC? I mean navigation is going up/down/left/right. I’m sure the graphics and CPU improvements matter for gaming, but the only mention of gaming in Apple’s own Newsroom announcement is this sentence: “With Apple Fitness+, the living room becomes a workout studio, while Apple Arcade and the App Store’s library of games turn it into a home arcade.” I wish it were otherwise, but gaming is such an afterthought on Apple TV that it only garnered the second half of a sentence that started with Fitness+, a service that has only been in the news this year because Mark Gurman says Apple laid off part of the team .

The new Siri Remote keeps its familiar design while adding Find My support with Precision Finding and an option to play a sound on the remote — making it far easier to locate.

That’s my single favorite feature in the announcement. I hate to say it though, but the previous remote should have supported these features. The 3rd-gen Apple TV 4K came in 2022, but Apple launched AirTags with Precision Finding in 2021 . Remote controls are right after keys on the list of things people misplace most frequently, and Apple’s remote controls, because they’re small and thin, are particularly susceptible to being snatched by couch-cushion gremlins. Speakers, so the remote can play a sound to help you find it, were invented even earlier than 2021.

Pairing HomePod with Apple TV 4K already offers users an immersive viewing experience that’s easy to set up, and the new Apple TV 4K takes it even further. For the first time, users can create a four-speaker surround sound experience with Apple TV 4K (4th generation) and HomePod mini 2. The four speakers work together with Apple TV 4K to intelligently recognize their position in the room so audio timing and levels are automatically calibrated to the space. HomePod (2nd generation) can also be used in this four-speaker setup for the ultimate audio experience, as long as the front and rear speaker pairs match.

This is tempting to try. In other words, in addition to the two 2nd-gen HomePods I already have paired in my living room, I can add two of the new HomePod Mini 2’s behind the sofa for surround sound.

The elephant in the room, though, is price. Before this week, Apple sold two models of the 3rd-generation Apple TV. On a percentage basis, they were hit the hardest of any products Apple sells by the company’s across-the-board price increases this summer :

Before June 25 Change
HomePod $300 $350 17%
(Old) HomePod Mini $100 $130 30%
(Old) Apple TV 64 GB $130 $200 54%
(Old) Apple TV 128 GB $150 $250 67%

The new Apple TV 4K announced this week only comes in one model, and it costs $300. It’s great that there’s only one model for simplicity’s sake, but the number one complaint when the previous generation cost $130/150 was that it was too expensive compared to set-top boxes and sticks from Amazon and Roku. (Or the “free” option of using the “smart TV” software that comes with every TV set.) Now, with the new Apple TV, it’s twice as expensive — and Apple is not keeping the 3rd-gen models around as lower-priced options. I still think it’s worth it, personally, but the general consumer market thought the old prices were too high and I don’t see any of the new features making Joe or Jane Consumer think “ Sure, I was skeptical about the old one at $130, but this new model, which looks exactly the same, this seems worth $300. ”

HomePod Mini 2 now costs $150. That’s not too much of an increase over the new-since-June-25 $130 price for the old HomePod Mini, but it’s a stiff 50 percent increase from the old HomePod Mini’s $100 price from November 2020 through June 24 this year . I generally round Apple’s prices up from their “99” values, but it’s worth noting that what I’m calling $100 was actually $99, and going to just two digits does have a psychological effect on buying behavior . Again, I think $150 is a reasonable price for the HomePod Mini 2, but it doesn’t feel as much like a lark as $99 did. $99 was a bit of a “ Sure, let’s get another one ” price; $150 is more of a “ Do we really need another one of these? ” price.

At the old pre-June prices, you could buy a 128 GB Apple TV and a pair of HomePod Minis for $350 ($150 + $100 + $100). Four short months later, with today’s new models, that combination would cost $600 ($300 + $150 + $150). That price difference is much more striking than any of the new and improved features in the products.

Blur NFT marketplace to shut down

Web3 Is Going Great
web3isgoinggreat.com
2026-10-15 21:13:52
Blur, the NFT marketplace that overtook OpenSea in trading volume shortly after its 2022 launch, announced it will shut down its website in a month. They also announced that Blend, Blur's NFT lending platform, will stop matching new loans on the same day. Borrowers have until then to repay ...
Original Article

Blur, the NFT marketplace that overtook OpenSea in trading volume shortly after its 2022 launch, announced it will shut down its website in a month. They also announced that Blend, Blur's NFT lending platform, will stop matching new loans on the same day. Borrowers have until then to repay their loans or let them default.

The announcement comes days after the Blur team said it would also shut down Blast , its Ethereum layer-2 blockchain, because it cost more to run than it earned.

Blur shuts down its Blast blockchain

Web3 Is Going Great
web3isgoinggreat.com
2026-10-15 21:05:34
Blast, the Ethereum layer-2 created by the team behind the Blur NFT marketplace, is shutting down less than three years after launch. In the announcement, they disclosed that its costs now exceed its revenue and that it sees "no credible path" to fixing that. Despite once boasting of more t...
Original Article

Blast, the Ethereum layer-2 created by the team behind the Blur NFT marketplace, is shutting down less than three years after launch. In the announcement, they disclosed that its costs now exceed its revenue and that it sees "no credible path" to fixing that. Despite once boasting of more than $2 billion in total value locked in June 2024, generating revenue from network usage of around $3.5 million, that revenue has collapsed to less than $2,000 last month.

Thank You, Deno

Hacker News
www.vlt.io
2026-10-15 20:52:40
Comments...
Original Article

All Posts

open source registry

Deno is joining Cloudflare & winding down its investment in the runtime. We're all better off because of its existence.

Black-and-white photograph of railway tracks running toward a low sun over distant mountains

Ryan Dahl announced last week that the Deno team is joining Cloudflare. The Deno runtime winds down over the next year, JSR keeps running on Cloudflare's infrastructure, & the team's new job, per Cloudflare's post , is merging Deno's celld into workerd .

The announcement came two years to the day after Deno 2 shipped. Bun joined Anthropic ten months ago. The tempting conclusion is that the alternative-runtime experiment is over & Node has won by default. In reality, the ecosystem has gotten the benefits Deno was pushing, just not from Deno itself.

Competition is imperative to a healthy ecosystem

Unfortunately, Deno never really hit critical mass in production; Node is as dominant in 2026 as it was in 2018. What Deno did achieve was to reinvigorate & put pressure on the incumbent, & that pressure didn't only run one way.

Deno started as a clean break. Ryan stood up at JSConf EU in 2018 & listed what he'd do differently from Node: deny-by-default permissions, TypeScript as a first-class input, web-standard APIs on the server, ES modules only, a single executable. And, pointedly, no npm , no package.json & no node_modules . Dependencies were URLs. The slides put it plainly: "There is no need to list dependencies."

A lot of us who'd spent years on npm & Node were skeptical of that last part (not the permissions or the TypeScript, which were obviously good) & said so at the time. We'd been there before, in the hotlinking era, when every page pulled jquery.min.js off somebody else's server & broke when it moved or got compromised. A URL tells you where something was, not what it is. Once you care that the bytes you tested are the bytes you ship, you need an integrity hash & somewhere to record it, & you've reinvented the lockfile. Matteo Collina of the Node TSC said in 2020 that "another left-pad incident is waiting to happen, but this time there is no 'central entity' that can fix it." Some of this skepticism was defensive but happened to be right in the end.

Deno 1.0 shipped in 2020 on the original terms, & then spent the next four years walking them back one piece at a time. First the deps.ts convention, one file that re-exported every URL: a manifest in all but name. Then lock.json , an integrity hash per URL: a lockfile. Then import maps, so you could write bare specifiers again. Deno's own documentation today recommends registries over HTTPS imports because they "can drift to different versions across files" & "trust the serving host." Those were the objections from 2018, restated as guidance.

Then Bun showed up. Bun 0.1 was released in July 2022 with the opposite bet: rebuild the toolchain from scratch for speed, but run existing npm packages, read package.json & act as a drop-in replacement for node . About six weeks later, Deno published "Big Changes Ahead for Deno" , announcing npm: specifiers, a commitment to make 80–90% of npm packages work within three months & a new goal of being "the fastest JavaScript runtime." Deno credited user feedback for the shift; the timing suggests Bun was a large part of it. Deno 2 , in October 2024, finished the job with full Node & npm compatibility. Four years after launching as the alternative to Node's ecosystem, Deno had become another way to run it.

That was the right call, & it was also an admission that the ecosystem wasn't going to abandon over a decade's worth of dependencies overnight. Cloudflare's workerd , which it open-sourced in 2022 , grew its own Node compatibility layer for the same reason: that's where the packages are.

Node ended up needing to respond. Since 2018 it has shipped a global fetch , WebSocket , Web Streams & Web Crypto; a stable test runner & --watch ; --env-file & single-executable builds; a stable permission model ; type stripping on by default; node:sqlite ; & require(esm) . Node's contributors (many volunteers) did the hard work to listen & make big changes, & they deserve a ton of credit for it, but I don't think it happens on that timeline without three other runtimes shipping many of these ideas first. A mature open source project rarely lacks good ideas. It lacks urgency, & competitors supply that urgency.

The standards work came out of the same pressure: WinterCG formed in 2022 because several serious runtimes made "what's the minimum common API?" a practical question, & now, as Ecma TC55 , it should outlast whichever runtimes consolidate next.

Package managers & registries

For most of its history the JavaScript package ecosystem was a monoculture: one client, one registry, & an API contract informal enough that it stayed effectively undocumented for a decade & a half. Nearly every improvement since came from someone refusing to accept the status quo.

Yarn (2016) insisted installs be deterministic & gave us the lockfile, workspaces & an offline cache; npm 5 shipped package-lock.json the next year. pnpm showed that node_modules didn't have to be hundreds of megabytes of duplicated files. Bun made install fast enough that the incumbents had to revisit their performance. Deno argued you should be able to read a dependency's source before you take it, & while URL imports didn't last, that idea did.

The clearest recent example is install scripts. pnpm & Bun stopped running them by default; vlt never did . The argument had been made inside npm for the entire time I worked there without ever becoming the default. In June of this year, after a run of supply-chain worms, GitHub announced that npm 12 would stop running them by default too. Nothing about the idea changed in those years; enough other package managers shipped it that npm could no longer treat it as radical. The pressure runs in both directions too: we borrowed catalogs from pnpm, & pnpm's namedRegistries borrowed our named-registry aliases.

On the registry side, JSR deserves credit. It made a different set of bets than we did: publish TypeScript source, require ESM, generate docs from code. We disagreed with parts of it & added jsr: support to vlt anyway because our users asked for it. It survives the wind-down because, as far as I can tell, it's cheap to run, its API is documented, & Cloudflare had a reason to keep it alive.

What changes now

The two most popular independent, venture-backed JavaScript runtimes now live inside companies whose business is something else. Jarred Sumner said the Bun team's relationship with the Claude Code team "probably will look similar to the relationship between Google Chrome <> V8," with more independence, & Cloudflare's post makes clear that workerd's roadmap is Cloudflare's. That's how JavaScriptCore & V8 have always been funded, & it's still a change.

Whether a community fork of the Deno runtime emerges will tell us whether the ecosystem values a secure-by-default, standards-first runtime enough to pay for one that isn't attached to a cloud. And celld-into-workerd is new optionality at a layer that has had very little: a self-hostable, open implementation of Workers & Durable Objects, led by Ryan & Bert Belder.

JavaScript has insurance at almost every layer: three production engines, several runtimes, several package managers. When one layer consolidates, as the runtime layer is doing now, the others hold. The churn that makes this possible is also what people complain about most. "JavaScript fatigue" has been a running joke for a decade: a new framework every week, a new bundler every month, & yet another package manager, which, yes, I'm aware I've contributed to. But nobody had to leave Node to get fetch , a permission model or TypeScript without a build step, & nobody has to switch package managers to get install scripts turned off by default anymore. Those things showed up in the tools people were already using because someone else shipped them first & the incumbent had to answer. The projects didn't always win, but the ideas usually did, & end-users collected them either way.

To Ryan, Bert, Bartek & the rest of the Deno team (past & present): your collective efforts have enriched our shared ecosystem. Thank you!

Darcy Clarke
Founder & CEO, vlt

RPKI now protects 70% of internet routes

Hacker News
ipinfo.io
2026-10-15 20:52:35
Comments...
Original Article

The Internet relies on networks telling each other which IP addresses they can deliver traffic to, using BGP (Border Gateway Protocol). These routing announcements have historically depended heavily on trust. When a network announces addresses it shouldn’t, accidentally or deliberately, traffic can be sent to the wrong place and services can become unreachable.

On February 24, 2008, Pakistan Telecom (AS17557) tried to block YouTube inside Pakistan by announcing a more specific route for YouTube's addresses. Its upstream provider, PCCW Global (AS3491), accepted the announcement and passed it to the rest of the Internet, redirecting YouTube traffic to Pakistan globally for roughly two hours ( RIPE NCC's case study ). That’s exactly the kind of error RPKI is designed to prevent. Work on RPKI had started at the IETF two years earlier, and the regional Internet registries began issuing RPKI certificates in 2011.

RPKI (Resource Public Key Infrastructure) lets the holder of a block of IP addresses publish a signed record, a Route Origin Authorization (ROA), naming the networks (Autonomous Systems, or ASes) allowed to announce it. Network operators that check RPKI compare announcements against those records and can reject the ones that fail.

The share of routed prefixes (blocks of IP addresses) that are RPKI-valid rose from 54.0% in September 2025 to 70.3% in September 2026, a gain of 16.4 percentage points, or 30% in a year. That’s a sharp increase. In each of the two years before, it rose three to four points. Much of the jump came from one country: China went from 3.7% of its IPv4 addresses in valid routes to 83.0%, almost 60% of the global gain counted by addresses.

RPKI grew more in the past year than in the two years before it combined: 16.4 points, against 3.9 and 3.2. Data pulled on September 28 of each year.

RPKI is doing what it was designed to do. A typical valid prefix is seen by 596 of the routers that feed the public RIPE RIS and RouteViews collectors. One with no RPKI record is seen by 595, and an invalid one by just two.

Invalid Routes Barely Propagate

In August, the Internet Society Pulse found RPKI-related activity accounts for under 1% of daily BGP update volume, a share that is rising but still small, so RPKI is not itself destabilizing routing. We wanted to know whether RPKI was actually protecting Internet routing.

Number of BGP vantage points (peers of the RIPE RIS and RouteViews collectors) seeing each prefix, by RPKI status. September 28, 2026, across 1,614,288 routed prefixes.

Routes with an RPKI record and routes with none travel equally far: a typical one is seen by 596 and 595 vantage points. Routes that fail the check are seen by just two. Now that enough networks check, they are dropping these invalid routes. Nearly half of all invalid routes reach only a single vantage point. When the wrong network announces the addresses, the clearest kind of hijack or mistake, 71% reach only one.

This changes how country-level RPKI statistics should be read. A country can look bad because of announcements almost nobody sees.

Simply counting invalid routes can badly exaggerate how much of a country is affected. Spain has the highest share of invalid IPv4 prefixes at 28.2%. Count the addresses in those routes instead, weighted by how many vantage points see each one, and it falls to 0.057%. Slovakia falls from 17.4% to almost zero. Italy has the highest figure of any country with at least a million IPv4 addresses, 0.121%, up from 0.075% a year ago, and 90% of it is one network.

WIND TRE (AS1267) announces 34 routes in its own address space that its own ROAs don't allow: 19 are more specific than the ROAs permit, and 15 come from AS1267 while the ROA names WIND TRE's other network, AS24608. None reaches more than 77 vantage points, against about 617 for the signed blocks around them.

Gray: share of a country's routed IPv4 prefixes that are RPKI-invalid. Blue: share of its IPv4 addresses in invalid routes, weighted by how many vantage points see each route. The 12 countries with the highest gray share and at least a million IPv4 addresses, September 28, 2026. The number after each country is its rank by gray share.

China Drove Most of the 2026 Jump

Counted by IPv4 addresses on September 28 each year, the share in RPKI-valid routes rose from 42.7% in 2023 to 47.9% in 2024, 53.1% in 2025 and 65.0% in 2026. The last jump was 11.9 points, against about five in each previous year.

Removing China shows how much of that was one country. Outside China, the share rose from 58.0% to 63.2%, a 5.2-point gain, a little less than the year before.

China's own change was extraordinary. 3.7% of its IPv4 addresses were in valid routes in September 2025, and 83.0% a year later. Most of that happened this year: at the end of December 2025, just 2.9% of China's routed prefixes were valid. It also changed which way it moves the world figure. In 2025 China pulled the global average down: 53.1% worldwide against 58.0% without China. In 2026 it pushed it up: 65.0% against 63.2%. Others moved a long way too: Egypt from 23% to 99%, Kazakhstan from 16% to 84%, Mexico from 37% to 78%, and South Africa from 38% to 60%.

Share of IPv4 addresses in RPKI-valid routes, September 28 of each year. Outside China the share rose about five points in each of the last two years. The lines cross in 2026, when China moved from lowering the global figure to raising it.
Share of each country's IPv4 addresses in RPKI-valid routes, September 28, 2026. Gray means no data.

Where the unprotected addresses are is just as concentrated. Of all routed IPv4 space not in RPKI-valid routes on September 28, nearly 60% is in the United States, and about one in four addresses belongs to the US Department of Defense (more on who holds IPv4 in an upcoming post). Most of that is space the Department began announcing in 2021 to watch for misuse, not to run services.

IPv6 Has Moved Ahead

In early 2025 there were concerns that IPv6 adoption of RPKI was slowing. Instead, it accelerated and has now overtaken IPv4. In RPKI's 2024 year in review for RIPE Labs, Job Snijders noted IPv6 ROA growth "seems to be stalling." Over our window, IPv6 routed prefixes marked valid rose from 56% to 79% while IPv4 prefixes rose from 54% to 68%, putting IPv6 roughly ten points ahead. The Hurricane Electric RPKI report shows the same ordering.

Two other metrics he flagged also changed: the average number of address blocks per ROA climbed back from 2.31 at the end of December to 2.62, and publication points, which he counted falling from 63 to 53 and read as consolidation, rose from 73 to 91 as more organizations began hosting their own repositories instead of relying on their registry.

Share of routed prefixes marked RPKI-valid, by address family. Daily, September 28, 2025 to September 28, 2026.

What RPKI Does Not Do

RPKI validates who may originate a prefix. It does not validate the path, and it cannot catch an attacker who stays inside the permission you published, so it's not bulletproof.

On August 28, 2026, a route for 162.55.80.0/24 (a block of 256 addresses) appeared with Hetzner's AS24940 forged as the origin. Hetzner's ROA covered the surrounding /16, a block 256 times larger, and allowed announcements as small as a /24, so the forged route satisfied it. The route was RPKI-valid, no legitimate /24 existed to compete with it, and longest-prefix-match meant everyone preferred it. That was enough to obtain a genuine TLS certificate and serve a malicious Virtualizor update to hypervisors, as documented by Kentik . Nothing about RPKI failed. The ROA permitted it.

We measured how common that posture is. Of 855,217 RPKI-covered IPv4 routes, 138,698, or 16.2%, have a ROA looser than the route announced and no more-specific route of their own filling the gap. For IPv6 it is 20.9%. That leaves roughly 18 million more-specific prefixes an attacker could announce today, forge the origin, and come out RPKI-valid and uncontested.

Operators in the same business make very different choices here. Among hosting providers, Contabo has an open window on 540 of 553 covered routes and DigitalOcean on 780 of 863, while OVH sits at 11.5%. Access providers are worse still: Cablevision at 98.1%, Shaw at 96.5%, Bharti Airtel at 85.0%.

RFC 9319 already says the best practice is to leave maxLength unset. maxLength is the setting that lets a ROA also cover smaller blocks inside it, so leaving it unset means a ROA matches only the block actually announced. Hetzner tightened three prefixes after the incident, including the one that was hijacked, though 49 of its 63 covered routes remain open.

Share of RPKI-covered IPv4 routes with an open more-specific window, by hosting provider, against the 16.2% global average. (September 28, 2026)

Where RPKI Coverage Declined

RPKI coverage can also disappear without causing an outage. A missing ROA simply removes the protection, and nobody notices unless they look. We found several cases where that happened over the past year.

Unlike China, Mauritius saw its RPKI coverage fall. The share of its IPv4 addresses in valid routes fell from 94.0% to 69.0% between September 2025 and September 2026. SEACOM (AS37100) lost four of its six ROAs on January 1. One covered 105.16.0.0/12, a block of about a million addresses, 46% of which are in Mauritius. That block alone explains Mauritius's drop, and it still had no ROA on September 28.

Two other operators show the same thing happening and then being fixed. Saudi Telecom (AS25019) lost RPKI protection on 19 routes, including six large blocks totaling about 1.6 million addresses, when the ROAs for those six blocks disappeared between March 30 and April 13. Saudi Arabia's coverage recovered when the ROAs came back on September 21 and 22.

In Morocco, Orange Maroc (AS36925) is the only large operator that publishes ROAs, and most of them went missing twice: from July 2025 to July 2026, and again from July 25 to September 3. Morocco went from 20% covered to almost none, and back.

Days with no ROA for the largest address blocks of Saudi Telecom (AS25019) and SEACOM (AS37100), and for most of Orange Maroc's (AS36925) ROAs. The routes stayed reachable but lost RPKI protection. SEACOM's block still had no ROA on September 28, 2026.

One Measurement Trap

There is a critical measurement trap here. Some validation methods can count an RPKI record as failed even though it is still providing protection in practice.

Every signed record carries a link to the certificate above it. When an operator moves its repository, that link can go stale, and a check that inspects records one by one will report a hard failure. But the validation that actually produces the list routers use never follows that link, it walks down from the trust anchors instead.

We found thousands of records flagged as failed that were present in every independently validated set we checked, with their routes still RPKI-valid. So if you are reading anyone's RPKI numbers, including ours, it is worth knowing which of the two they counted. A count of failing records is not a measure of lost protection.

Path Validation Is Starting to Arrive

ROAs secure the origin of a route. They say nothing about whether the path used to reach that origin makes sense.

ASPA, or Autonomous System Provider Authorization, addresses that. A network publishes a signed record naming its authorized upstream providers, which lets others check observed AS paths against them and catch route leaks that origin validation misses.

Deployment is early but fast. On September 28, 2025, 131 networks had published ASPA records. By September 28, 2026 there were 3,272, 25 times as many.

The growth comes in steps rather than a curve. RIPE NCC sat at about 85 networks from September to late November, then climbed to 470 by the end of December. ARIN stepped up from January 21, APNIC at the end of June and again in September, when its count nearly doubled. Each jump follows a registry making ASPA signing available, so tooling has been the main driver. One detail: APNIC announced its support on July 9 , and its curve started climbing on June 26.

Networks publishing ASPA records, stacked by registry, September 28, 2025 to September 28, 2026. The December, January, June, and September increases line up with registries shipping signing tools.

That coverage is now enough to ask the better question: how much of observed routing is ASPA-valid?

On September 28, 2026, 9.7% of observed routing passed ASPA checks, up from 6.2% a year earlier. Most of that is automatic: under the draft rules, a path through only one or two networks always passes, and those short paths were about 6% of routing in both years.

Take them out and the records networks have published verify about 3.5% of routing, up from roughly 0.1%. That is the real progress.

Almost all the rest is not failing. It is unknown, because too few networks along those paths have published records to tell. In practice, ASPA can check only a small slice of routing today, and that slice grows with every network that publishes a record.

More interesting is the part that can be judged and fails. Paths breaking ASPA's rules mid-path, the signal a collector can read with most confidence, rose from effectively zero to 0.048% of observations. That is not necessarily routing getting worse: a path can only be called invalid once enough of it has declared providers, so as publication grew, paths that were previously unjudgeable became testable and some failed.

Share of observed routing that is ASPA-valid, weighted by route observations. The headline rose from 6.2% to 9.7%, but about 6 points of that is a structural floor; published records account for about 3.5 points, up from 0.1.

Attributing those failures needs care, because the gap sits mid-path: one provider with a stale record makes every one of its customers' routes look invalid, so ranking by origin blames the wrong party.

Attribute to the hop instead and the networks at the top are the ones doing it right. Cogent, Arelion, and GTT each declare AS0, which says they buy transit from nobody. That is true, and it is exactly what stops a stale record further down the path from hiding as "no attestation." The real gaps are smaller: of 3,272 networks publishing ASPA records, 479 have upstream providers visible in our routing data that they never declared, across 658 missing relationships.

The largest single cause is one operator. Syrian Telecom (AS29386) publishes a record naming four carriers. Three of them carry just 16% of the transit we observe through it, and the fourth carries none. The four carriers that handle the other 84% are missing from the record, so about 40% of paths arriving through them fail the check, and the rest come out unknown.

Through Syrian Telecom's own routes and those of two Syrian networks that reach the Internet through it, that record accounts for 21% of all mid-path ASPA failures on the Internet. Another 3 points come from AS201550, a second Syrian Telecom network whose record copies the same four carriers instead of naming the Syrian Telecom networks it connects through. Which means the global ASPA failure rate is not yet a measure of the Internet's health. About a quarter of it comes from one operator's incomplete records.

Eighteen years after PCCW Global passed on Pakistan Telecom's announcement for YouTube's addresses, PCCW is a gap in the newer system. ASPA would not have stopped the 2008 incident; RPKI's origin check is what covers that. But ASPA lets others check PCCW's place in a path, and AS3491 has not published a record. That breaks nothing on its own. Still, nearly 6,000 paths crossing PCCW read ASPA-invalid today, because networks below it publish records that leave PCCW out.

What Operators Can Do

RPKI now protects most Internet routes, and invalid routes barely travel. The gaps that remain are mostly in the hands of the networks that own the addresses:

  • Publish ROAs for everything you announce. Three in ten routed prefixes are still not RPKI-valid.
  • Leave maxLength unset. One in six covered IPv4 routes has a window like the one used against Hetzner.
  • Check that your ROAs are still there. Saudi Telecom, SEACOM, and Orange Maroc each lost some of theirs, and since nothing broke, it was easy to miss.
  • Publish ASPA, and list every provider. Syrian Telecom's record leaves out the four carriers that handle most of the traffic we see reaching it, so many routes through them fail the check.

IPinfo tracks the RPKI status of every routed prefix daily: ipinfo.io/data/rpki .


Methodology : All figures come from IPinfo's routing and RPKI datasets, one RPKI snapshot per day. RPKI validity is the share of routed prefixes classified valid against the validated authorization set, not the validation status of individual RPKI objects. Routing data comes from the public RIPE RIS and RouteViews collectors, which IPinfo ingests daily. A prefix's visibility is the number of distinct BGP peers of those collectors carrying it. Across every prefix seen by at least one of them the figure was 70.3% on September 28, 2026; requiring two or more removes isolated announcements and gives 71.4%. Propagation figures are medians; the corresponding means are 519, 515 and 9, pulled up by a tail of more widely seen invalids.

Country figures use IPv4 only and count addresses, not prefixes. Each routed prefix is split across countries by IPinfo geolocation, so a /16 with half its addresses in Italy counts 32,768 addresses toward Italy. Where routes overlap, each address is counted once, and current geolocation is used for every year. An address counts as covered if any RPKI-valid route includes it. The prefix share in Chart 3 assigns each prefix to the country of its first address. The weighted invalid share in Chart 3 is counted per route: it multiplies each route's addresses by the number of vantage points that see it.

Propagation-weighted figures begin in 2024, as the underlying peer data does not exist for earlier snapshots. Yearly comparisons use September 28 snapshots unless another period is stated.

Figures are single-day snapshots rather than averages. The daily series is stable enough that this makes no practical difference: RPKI-valid share moves a median of 0.05 points a day, and a seven-day mean around each date differs from the single-day value by less than 0.1 points.

The maxLength measurement covers prefixes seen by two or more vantage points on September 28, 2026, which drops isolated announcements. An "open window" is a routed prefix whose covering ROA permits a longer prefix than the one announced, with no more-specific route of the operator's own inside that range.

ASPA figures cover daily observations from September 9, 2025 to September 28, 2026, weighted by route observations rather than distinct AS paths. The 0.048% figure is mid-path invalidity only; terminal-hop invalidity is excluded because it turns on the collector peer's own record, and a single incomplete record there taints that peer's entire table. Two peers account for 70% of it.

Meta releases Muse Spark Open, a new ‘open-weight’ AI model

Guardian
www.theguardian.com
2026-10-15 20:34:28
Meta says Muse excels at ‘multi-step reasoning’ and ‘complex software engineering’ as it races to catch up to Chinese rivals Meta on Thursday launched a new open-weight AI model which it claims rivals, and in some cases outperforms, similar products from leading Chinese developers. Muse Spark Open “...
Original Article

Meta on Thursday launched a new open-weight AI model which it claims rivals, and in some cases outperforms, similar products from leading Chinese developers.

Muse Spark Open “is the most capable US open-weight model to date,” Meta’s chief of AI Alexandr Wang wrote on X.

Unlike so-called closed models – such as Anthropic’s Claude or OpenAI’s ChatGPT – developers can download the parameters, known as weights and biases, of an open-weight model and modify them.

Chinese developers have emerged as dominant players in the open-weight market for AI models over the past couple of years.

Alibaba’s Qwen, Moonshot AI’s Kimi K3 and Z.ai’s GLM models have been considered open-weight frontrunners globally, but Meta claims its new open model now competes on a similar level.

“Built for coding and agentic work,” Muse Spark Open “excels at long-horizon tasks, complex software engineering, and multi-step reasoning,” Meta said in a blogpost, adding that “strong safeguards” have been integrated into the new model.

Muse Spark Open is also “optimized” to run on Apple’s advanced M5 Ultra chips, Meta said, signaling an unusual partnership between the two tech companies.

Muse Spark Open requires significant computing power. Users can run the model on two Mac Studios with M5 Ultra chips to create a “supercomputer” on their own desktop, Meta said.

The launch comes just days after Meta announced its newest closed model, which it said rivalled the most advanced versions of ChatGPT and Claude.

Meta’s AI efforts were initially focused on open models, but more recently Zuckerberg has pushed the company to compete with OpenAI and Anthropic.

In Memoriam: Barry Steinhardt

Electronic Frontier Foundation
www.eff.org
2026-10-15 20:07:22
Barry Steinhardt, a lifelong privacy champion and an early leader in the battle for digital civil liberties who served as EFF’s president in 1998-99, died last week at age 73.  A Connecticut native, Steinhardt led the Vermont and Pennsylvania affiliates of the American Civil Liberties Union before b...
Original Article

Barry Steinhardt, a lifelong privacy champion and an early leader in the battle for digital civil liberties who served as EFF’s president in 1998-99, died last week at age 73.

A Connecticut native, Steinhardt led the Vermont and Pennsylvania affiliates of the American Civil Liberties Union before becoming associate director of the national ACLU. There, he helped spearhead the fight to overturn much of the Communications Decency Act, resulting in the U.S. Supreme Court’s landmark Reno v. ACLU ruling in 1997.

When the internet was still young, Steinhardt became one of the first attorneys to specialize in the intersection of technology and privacy . In early 1998 he took a leave of absence from the ACLU to become EFF’s president, and then returned to the ACLU in 1999.

In 2002 he founded the ACLU’s Program on Technology and Liberty. After retiring from the ACLU, he continued on as a senior advisor to London-based Privacy International .

Steinhardt chaired the 2003 Computer Freedom and Privacy Conference and served on a wide variety of significant panels and boards, including the Department of Transportation’s Negotiated Rule Making on national driver’s license standards, the Advisory Committee to the US Census, and the Blue Ribbon Panel on Genetics of the National Conference of State Legislatures. He also was selected to be a member of the US delegation to the G-8 Government and Private Sector Tokyo conference on Cyber Crime and served as an advisor to the Czech Helsinki Committee.

“Barry led many critical technology and civil liberties fights and was an important mentor to me and others in the field,” said EFF Executive Director Nicole Ozer. “Barry’s influential work across strategy to defend and advance privacy rights and safeguard people against surveillance has made its mark on the law and policy of our digital world and protected the rights and safety of people across the United States and around the world.”

Reproducible Builds (diffoscope): diffoscope 334 released

PlanetDebian
diffoscope.org
2026-10-15 20:00:00
The diffoscope maintainers are pleased to announce the release of diffoscope version 334. This version includes the following changes: [ Chris Lamb ] * Fix a crash when using the latest versions of Androguard. Thanks, hc! (Closes: reproducible-builds/diffoscope#434) You find out more by visitin...
Original Article

« Back to homepage

diffoscope 334 released

16 Oct 2026 — Chris Lamb

The diffoscope maintainers are pleased to announce the release of diffoscope version 334 . This version includes the following changes:

[ Chris Lamb ]
* Fix a crash when using the latest versions of Androguard. Thanks, hc!
  (Closes: reproducible-builds/diffoscope#434)

You find out more by visiting the project homepage .

« Back to homepage

Business accounts will consent to Meta scraping their websites Starting Oct. 30

Hacker News
www.niemanlab.org
2026-10-15 19:37:42
Comments...
Original Article

Why have I been blocked?

This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.

What can I do to resolve this?

You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.

Is Liquid Metal Killing Our PCs? Scientific Analysis and a 2-Year Test [video]

Hacker News
www.youtube.com
2026-10-15 19:23:51
Comments...

BeBox is a Haiku application that emulates Be Inc.'s BeBox

Hacker News
github.com
2026-10-15 19:22:53
Comments...
Original Article

BeBox is a Haiku application that emulates Be Inc.'s BeBox, the dual-processor computer that BeOS was born on. It runs both PowerPC models from their original boot ROMs, with BeOS for PowerPC from Developer Release 6 through R5.0.3. It also runs the Hobbit prototypes that came before them, built around two AT&T Hobbit processors, with Be's 1993-94 system from their surviving disks.

The BeBox boot ROM's Be logo The Hobbit prototype's Browser, HeapWatch and Clock BeOS 1.1d6 BeOS R3 with GL Teapot, BeBounce and the CPU monitor BeOS R5.0.3 on the BeBox Bebox preferences

Model Processors Bus
BeBox Dual603-66 two PowerPC 603 at 66 MHz 33 MHz
BeBox Dual603e-133 two PowerPC 603e at 133 MHz 33 MHz
Hobbit prototype (1993-94) two AT&T 92010 (Hobbit) at 25 MHz BeBus, 25 MHz

The window shows the emulated screen between the two front panel LED columns (the "blinkenlights"), sixteen light pipe segments each: a CPU load bar of fifteen LEDs over the power LED (left) or the disk LED (right), lime and amber like the real ones (or red and green, if you prefer).

What is emulated

  • Both processors (a PowerPC 603/603e interpreter with the 603's software TLB), the MPC105 bridge, the BeBox interrupt and CPU control registers.
  • Boot ROM: the nub and main ROM in a writable flash (BeOS's ROM updater works), NVRAM and real time clock.
  • Video: Number Nine #9 GXE64 (S3 Vision864, AT&T 21C498 RAMDAC) with its graphics engine, the default; or Cirrus Logic CL-GD5434. 640x480 to 1280x1024, 8 and 32 bits per pixel (what the BeOS drivers offer).
  • Sound: Crystal CS4231A codec, played through the Haiku media kit.
  • AT keyboard and PS/2 mouse; four game ports (axes and buttons).
  • Storage: NCR 53C810 SCSI (disks and CD-ROMs on IDs 0-6), IDE, floppy.
  • Four serial ports: to a console window, a TCP server or client, a host serial port or a log file.
  • Ethernet: an NE2000 compatible ISA card on a private network behind the host (NAT, through libslirp): the BeBox reaches the host and the Internet, and host ports can be forwarded to it.
  • Shared folders: a Haiku folder appears to BeOS as a SCSI disk it can read and write; the changes come back to the folder when BeOS shuts down.

Not emulated yet: the parallel port, GeekPort, MIDI and infrared ports.

What you need

  • The BeBox boot ROMs , which are not included: bootnub.rom (16 KB) and bootmain.rom (Be Boot ROM 1.1d7) from a BeBox, in a folder of your choice.
  • BeOS for PowerPC : CD images (ISO, BIN/CUE or Toast).
  • For the releases with the Be File System (Advanced Access to R5): a newer boot ROM, which the Preview Release 2, R3 and R4.5 CDs carry as /beos/etc/bebox_bootmain.image (Advanced Access, Preview Release 1 and R5 use one of those). BeBox extracts it for you (see below).

Getting started

  1. Open Machine > Preferences > ROM & NVRAM and choose the folder with the ROMs. For a BFS release, choose its CD image as Boot ROM image : BeBox copies the boot ROM from the CD (PR2's also boots Advanced Access and PR1).
  2. In Storage , put the CD image on a SCSI ID as CD-ROM (ID 3 is the classic choice), and give another ID a disk for installing: Choose... opens a file panel whose New disk image... button makes one right there (in the folder the panel shows) and puts it on that ID.
  3. Machine > Power on . The newer boot ROMs stop at their boot menu when no boot volume is set yet: press Return.

Changes to the hardware restart the machine. A device type set without a file is turned back into "None" when the preferences are saved.

The Hobbit prototype

Before the PowerPC BeBox, Be built its machine around two AT&T 92010 "Hobbit" processors, three AT&T DSP3210 signal processors and the BeBus. A few prototypes survive with their disks, running Be's 1993-94 system: a window server, a console, the Browser and its dock.

What is emulated:

  • Both Hobbit processors (an interpreter written from AT&T's programmer's reference: the stack cache, the MMU, the timers, the event sequences).
  • The board: its I/O and interrupt registers, the processor resets, the floppy DMA; the PC compatible I/O chips (keyboard and PS/2 mouse, real time clock, two serial ports, floppy) and the NCR 53C94 SCSI controller.
  • The video card: a Trident VGA with an XGA style graphics engine on the BeBus (640x480 or 800x600, 256 colors, as the window servers set it).

Not emulated: the three DSPs and what hangs off them (sound, the telephone and modem), the Ethernet card, the joystick controller and the parallel port. The system starts without them (its sound server reports an error).

No boot ROM of these machines survives, so BeBox does the boot ROM's job: it loads /system/kernel from the boot volume (the floppy if one is inserted, else the SCSI disk with the lowest ID) and starts it. To run one:

  1. In Preferences > Machine , choose Hobbit prototype and 4, 8, 16, 20 or 32 MB of memory (the sizes its kernel knows).
  2. In Storage , put a Hobbit disk image on a SCSI ID as a disk. To run a kernel of your own instead of the disk's, choose it in ROM & NVRAM > Hobbit kernel .
  3. Machine > Power on . The kernel reports its progress on serial port 1 (give it a console window in Serial to watch).

Notes:

  • The November 1994 disks start /system/Browser , which they have as /system/browser : the console comes up instead (the real machines did the same). Type /system/browser & in it to start the Browser.
  • The floppy drive is the kernel's drive 1.
  • The system writes to its disk (swap files and more): keep a copy of your images, or use them through QCOW2 overlays ( bebox-img create -b IMAGE OVERLAY.qcow2 ).
  • The front panel lights are hidden: the Hobbit's kernel drives none.

Installing from the floppies

The installer floppy and disks 1of7 to 7of7 install the November 1994 system (the one on the "pixels" disk) on a new disk. The installer floppy has no window of its own: its /system/Browser copies a minimal system (kernel, servers, shell, /Installer ) from the floppy to the first hard disk, without asking and without showing anything but the pointer. Boot it only with the disk to install on: it replaces the system files of any other Hobbit disk it finds.

  1. Put a copy of a Hobbit disk (or an overlay of one) on SCSI ID 0, and a new disk image on ID 1 (in Storage , the ID's file panel has New disk image... ; 120 MB works, the original disks have 120 to 170 MB). Power on, type /bin/format in the console, choose the SCSI disk with ID 1, give the volume a name, then 0 to leave. Power off.
  2. Take the Hobbit disk off ID 0 and put the new disk there instead. Insert the installer floppy and power on. After about a minute (the pointer is all you see), power off and eject the floppy.
  3. Power on: the console comes up from the new disk. Type /Installer , click Begin , then insert 1of7 ( Media > Insert floppy... ) and click Continue , and so on up to 7of7. The Installer then uncompresses, verifies and extracts the archive (a few minutes), and Install finishes: "Installation complete". When it starts uncompressing, the console shows VOLUME:/_install_/archive.Z: System Error 0 : harmless, and a real Hobbit did the same ( compress deletes the archive while it still has it open, which this file system refuses; the Installer removes it at the end).
  4. Restart, and type /system/browser & to start the Browser.
  5. Optionally, run /Installer again with update.img as disk #1: Be's update of 28 November 1994 (a fixed storage_server and the Phone answering machine's spoken prompts in /system/phone , as on the "be" disk).

Profiles

Each release likes a machine of its own (its boot ROM, its disks, maybe the 133 MHz model), so the machine is kept in a profile : everything in the preferences except Keyboard & mouse and the LED look, plus the boot ROM flash (with the boot ROM updates BeOS installs) and the NVRAM (with the boot volume). Machine > Profile lists the profiles to switch between (a running BeBox restarts with the other one), and has New profile... (a copy of the current profile, under a name like "BeOS5 133 MHz" or "DR8 66 32 MB"), Rename and Delete . The status line shows the current profile. Profiles are folders in ~/config/settings/BeBox/Profiles/ ; the settings from before profiles became the profile "Default".

Release Boot ROM Boots from CD Installs to disk
DR6 (BeOS 1.1d6) original 1.1d7 yes yes
DR7 (BeOS 1.1d7) original 1.1d7 yes yes
DR8 original 1.1d7 yes yes
Advanced Access PR2's yes yes
Preview Release 1 PR2's yes -
Preview Release 2 from its CD yes yes
R3 from its CD yes yes
R4.5 from its CD yes yes
R5.0.3 R3's yes yes

"-" means not tried yet. The DR8.2 image is a Mac updater, and the R4 image is x86 only. The boot ROM from the R3 CD works with every release tested here, so one profile with it can run them all.

DR6 predates the 1.1d7 boot ROM: BeBox hands its kernel the PCI device table in the older format it expects. Install it as the CD says: boot the CD, run the Installer from the dock, format the SCSI disk ("Format:" in the left pop-up menu), then install onto it and make it the startup disk. DR6's mouse driver moves the pointer twice as far left and down as right and up (that is DR6, not the emulation). The Developer Releases' date prints the year as years since 1900 (126 for 2026).

Using it

  • While the window is active, the keyboard belongs to the BeBox. Click the screen to capture the mouse; the host key, right Control , releases it. Keyboard & mouse in the preferences picks another host key and sets the mouse speed.
  • Game ports in the preferences connects host joysticks to the four sticks (two per game port, as with Y cables).
  • The status line shows the floppy, CD and hard disk (with the disk activity); click the floppy to insert one.
  • Machine has the power, reset and interrupt switches, and restarts with the boot menu or with kernel debug output on serial port 4 (that holds F1 at power on, as on a real BeBox). Send Ctrl+Alt+Delete gives BeOS the keys Haiku keeps for itself: BeOS R3 and later show their Team Monitor, and restart when it is sent again.
  • The two processors run on two host cores when both are busy ( Preferences > Advanced , on by default): up to nearly twice as fast, which the 133 MHz model needs on slower computers. The status line shows the speed in percent of a real BeBox.
  • Tools > Serial console shows a serial port connected to a console.
  • View shows the screen at actual or double size or fitted to the window, and shows or hides the LEDs.

Network

In Preferences > Network , turn on the Ethernet card (port 300h, IRQ 5 by default, as Be's software expects). In BeOS's Network preferences, add a "Novell NE2000 compatible adapter (ISA)" with the same port and IRQ, and choose DHCP (R4.5) or set IP 10.0.2.15, mask 255.255.255.0, gateway 10.0.2.2 and DNS 10.0.2.3 by hand. The host is 10.0.2.2 from the BeBox. Forwarded host ports ( tcp:2121:21, tcp:2323:23 ) make services running in BeOS reachable from the host.

Shared folders

In Preferences > Storage , make a SCSI ID a Shared folder and choose a Haiku folder. At power on BeBox copies the folder, with its attributes (file types, icons), to a fresh BFS volume that BeOS mounts like any disk; the releases with BFS (Advanced Access and later) can use it. When BeOS has shut down (Be menu > Shut Down) and the BeBox is powered off, BeOS's changes go back to the folder: new and changed files, attributes, deletions. A file changed on both sides meanwhile keeps the Haiku version, and BeOS's is saved next to it as "NAME (BeBox)". If BeOS did not shut down cleanly, the volume is kept and given back to BeOS at the next power on, so that it can repair it first. As the whole folder is copied at every power on, keep it small.

Disk images

Hard disks are raw images or QCOW2 images, which only take the space that is written (thin provisioning) and can be overlays of a backing image. bebox-img manages them, and reads files from BeOS volumes (BFS) and from the Hobbit prototypes' disks:

bebox-img create [-f raw|qcow2] [-b BACKING] FILE SIZE
bebox-img info FILE
bebox-img check FILE
bebox-img convert [-O raw|qcow2] SOURCE DESTINATION
bebox-img ls IMAGE [PATH]
bebox-img attr IMAGE PATH
bebox-img extract IMAGE PATH OUTPUT

For example bebox-img extract "BeOS Release 3 PowerPC.iso" /beos/etc/bebox_bootmain.image r3.rom .

On a Hobbit disk, extract also copies whole directories ( / for the whole disk) into a new folder, keeping the files' dates, and ls shows the files' types and creators: bebox-img extract hobbit-930800009.img / pixels . No BeOS release reads the Hobbit's file system (DR6 to DR8 have a later, incompatible version of it, the others BFS), so this is the way to its files: extract them, then give the folder to a BFS release as a shared folder . The Hobbit's programs do not run on the PowerPC; its sources, headers, text and pictures are what is useful.

Scripting

The machine window answers hey :

hey BeBox get Running of Window BeBox          # also set ... to true/false
hey BeBox get Speed of Window BeBox            # percent of real time
hey BeBox get LedLevels of Window BeBox        # left, right (0-15)
hey BeBox get SerialLog 4 of Window BeBox      # a console port's output
hey BeBox set Floppy of Window BeBox to /path/disk.img
hey BeBox type of Window BeBox with text=ls    # types on the keyboard
hey BeBox shot of Window BeBox with path=/tmp/screen.png

Also get Mips , get EmulatedTime , get DiskLed , get AudioStats (the sound output's counters: underruns are gaps), get Profiles , get Profile and set Profile (switches, restarting a running machine), and the commands pwon , pwof , rset and cadl (Ctrl+Alt+Delete). Replies come after the action.

Command line

BeBox [--profile NAME] [--rom-dir DIR] [--boot-rom IMAGE] [--model 66|133|hobbit] [--kernel FILE] [--ram MB] [--video s3|cirrus] [--scsiN-disk FILE] [--scsiN-cd FILE] [--scsiN-share FOLDER] [--ide0 FILE] [--floppy FILE] [--net] [--net-forward SPEC] [--power-on] sets up the machine (the settings are kept). --profile switches to a profile first, making it as a copy of the current one if there is none; the other options change that profile.

bebox-headless runs a machine without a window, for tests and debugging: serial ports to files or TCP, scripted keys and mouse clicks, screenshots, instruction traces, memory dumps and watches. bebox-headless --help lists the options.

Building

On Haiku (with haiku_devel , zlib_devel and libslirp_devel ): make builds the app; package/build-package.sh builds the app and the tools and creates the package.

The emulator core is portable C++17 and is tested on Linux:

  • make -C tests/linux check : processor tests (against qemu-ppc as an oracle), Hobbit processor tests, multiprocessor and device tests, QCOW2 tests (against qemu-img ), under AddressSanitizer and UndefinedBehaviorSanitizer.
  • tests/boot-regression.sh : boots each BeOS release headless (the media and installed disks go in work/ ) and the Hobbit disks (in Hobbit/ ), through throwaway overlays.
  • tests/vm-test.sh user@haiku-host : builds the app on a Haiku machine and drives it with hey .

design/ describes the hardware and the emulator's design.

Authors

  • Claude Opus 5.5
  • John Rash

License

MIT, see LICENSE . The application icon ( artwork/BeBox.hvif ) is by zuMi, under the MIT License. The icons in artwork/icons come from Haiku's icon set (MIT, Haiku, Inc.). The BeBox ROMs and BeOS are not part of this project.

Announcing Rust 1.99.1

Lobsters
blog.rust-lang.org
2026-10-15 19:03:00
Comments...
Original Article

The Rust team has published a new point release of Rust, 1.99.1. Rust is a programming language that is empowering everyone to build reliable and efficient software.

If you have a previous version of Rust installed via rustup, getting Rust 1.99.1 is as easy as:

rustup update stable

If you don't have it already, you can get rustup from the appropriate page on our website.

What's in 1.99.1

Rust 1.99.1 fixes the following regressions from prior releases:

  • Missing symbol wcslen : Some Rust targets were getting link errors for missing wcslen , and that function is now present in Rust's compiler-builtins library as a fallback.

    The LLVM loop-idiom-wcslen pass may introduce calls to wcslen as an optimization, and some Rust targets did not have that function readily available in libc or elsewhere. The UEFI targets in particular were broken for any project using std , as some of these calls were introduced in the precompiled standard library, but the issue was also reproducible for similar user code patterns.

  • Miscompilation of FFI bool return values on x86_64 : Rust functions returning bool through FFI could leave bits 1-7 of the return register unspecified, causing callers to observe raw values other than 0 or 1 . This return type is now marked for zero-extension again, as required by the ABI.

  • rust-lld failed to load libLLVM on macOS : This linker could fail to run if the compiler was invoked without the rustup proxy, as there was no direct setting for the appropriate library search path. Now rust-lld is built with an rpath entry for the directory containing libLLVM.dylib .

If you'd like to help us out by testing future releases, you might consider using the beta ( rustup default beta ) and nightly ( rustup default nightly ) channels locally and in your CI. Please report any bugs you might come across!

Contributors to 1.99.1

Many people came together to create Rust 1.99.1. We couldn't have done it without all of you. Thanks!

‘We Will Not Forgive’: Gazans Rage at Hamas for the October 7 Gamble

Portside
portside.org
2026-10-15 18:24:01
‘We Will Not Forgive’: Gazans Rage at Hamas for the October 7 Gamble jay Thu, 10/15/2026 - 18:24 ...
Original Article

"On that accursed day, they pushed Gaza off the edge of the cliff ... then picked up their phones to find the best angle for the shot," Gazan writer and poet Ni'ma Hassan wrote on her Facebook page on October 7. A few hours later, she posted again, perhaps responding to readers who had attacked her for criticizing Hamas, as she has done before: "Even after three years, they tell us that the outcome is what counts and victory is near. By God! Even if you build paradise […]we will not forgive what has happened and is still happening to us."

Hasan writes openly what many in Gaza say among themselves and some put into writing, with varying degrees of boldness and bluntness. They see no contradiction between criticizing Hamas and recognizing that Israel chose to destroy Gaza and their lives there, and even declared its intention to do so.

Their anger at Hamas over what they describe as a strategic mistake, an adventure, a gamble or even a conspiracy does not diminish their loathing for Israel or their knowledge that this endless war is part of Israel's longstanding policy against the Palestinian people.

Journalist Hamed Jad, the Gaza bureau chief for the Ramallah-based daily Al-Ayyam, also recalled Hamas' promises of a decisive victory after the terrible suffering. He, too, was writing on the third anniversary of "Al-Aqsa Flood," Hamas' name for the October 7 attack . About a year after the attack, at a press conference with Khalil al-Hayya, now chairman of Hamas' political bureau, Jad asked: "Can you name a single achievement October 7 has brought?" Al-Hayya replied that it was too early to judge.

This week, Jad revisited that answer from two years ago with bitter irony: "Al-Hayya was right when he told me: 'It is unfair to judge the Flood before it has ended, because it has not yet ended.' Indeed, three years later, the Flood has not stopped, and we are still drowning in its raging waves, ground down day after day by the millstones of killing, destruction, displacement and loss."

Breaching the border fence east of Khan Yunis, October 7, 2023. "Three years later, the Flood has not stopped, and we are still drowning in its raging waves," wrote a Gazan journalist.  (Photo credit: Yousef Masoud/AP  //  Haaretz)

Addressing al-Hayya, who is now abroad and four of whose sons were killed by Israel, Jad asked with biting sarcasm: "Do you still insist that it is too early, and unfair, as you put it, to judge the Flood and the suffering it has inflicted on us so far?"

Those living in the Gaza Strip today , and those who have managed to escape, long for October 6, 2023. They have not forgotten the blockade Israel imposed on them or their isolation from the world; the unemployment and poverty that isolation caused, and the humiliation that came with both; the struggle for the right to receive medical treatment outside the Strip; or being prevented from seeing relatives and friends living just 80 kilometers away.

Yet Gazans defied the blockade through community and family life, their studies and their plans for their children. They cultivated their talents in painting, poetry, prose and computer science, pursued building projects and business ventures, and connected with the world online. In the face of Israel, the hostile power that controlled them and aspired to "sink Gaza into the sea," their insistence on living rather than merely existing was an act of civil resistance. Hamas' "Flood" held this kind of unarmed struggle in contempt.

Here is a fragment of life before the Flood, from another post Hassan wrote that same day: "My daughter Mayar spent Friday, October 6, 2023, memorizing a short play in English about olive trees to perform on the school radio. My job was to buy her a Palestinian dress. On the morning of October 7, they burned the school, the olive trees, the studio ... and we left the dress and the city behind."

Her daughter will no longer be able to fulfill her dream of riding a motorcycle through the city's streets without anyone making comments. The city no longer has streets, and her daughter now wears a hijab. She has grown up, in other words, and will no longer be able to fulfill her wish.

Hassan leaves no doubt that by "they," she means Israel. But in another text, addressed to Hamas, she tallies figures that have reached her: more than 70,000 children who have lost one or both parents; more than 86,000 households headed by women; nearly 260,000 families living in shelters; more than 64,000 widows; and almost 17,000 people have disabilities. UN reports support some of these figures: UNICEF reported more than 58,000 children who had lost a parent in October 2025, while UN Women estimated 86,290 women-headed households in September 2026.

"And amid all these details," Hasan adds, "two million lives of unrelenting pain."

There are everyday pains that go unphotographed, supposedly small ones, that teacher Samia Wadi describes in another Facebook post. One student is always late, arriving halfway through class because she has to wait for her sister to return from her own lesson and hand over the pair of shoes they share. Many students take no notes as Wadi explains the lesson. She knows they are waiting for UNRWA to provide notebooks. Two others miss class every few days, whenever the truck delivering purified water passes through the displacement camp where they live, so they can fill their jerry cans. Another student is frequently absent. Wadi knows that the girl's grandfather banished her widowed mother from the southern Strip to the north. The younger children stayed with him. Reading between the lines, the absent student has to look after them.

Another teacher is described as moving "with the lightness of a merciful angel among her very young pupils" in a tent turned into a classroom. The writer, also posting on Facebook, is mental health specialist Dr. Saeed al-Kahlout. In his poetic style, he describes how she gently explains the lesson and promises her pupils a better future. She pauses over the "r" at the beginning of "right," he writes, then over the "l" at the beginning of "life."

A school in Nuseirat in September. Teacher Samia Wadi wrote about a student who is always late because she has to wait for her sister to hand over the pair of shoes they share.  (Photo credit: Photo: Jehad Alshrafi/AP  //  Haaretz)

Just then, a stray bullet is fired from a tank a few hundred meters away. "The bullet sliced swiftly through the air, crossed the distance in moments and lodged in the teacher's heart ... In the classroom tent, the children watched their teacher struggle for her final breaths, drenched in her own blood. In the tent where she lived, children are waiting for their mother, not yet knowing that she will never return."

A few weeks ago, tempers flared in Gaza when some sheikh used his Friday sermon to subject his listeners, willing and unwilling alike, to a flood of abuse over women's supposedly immodest behavior. Many women and men criticized his misogynistic detachment from a reality in which women bear the burden of keeping families going under conditions so harsh they are scarcely imaginable.

Some women go further, writing about "the consequences of annihilation that no one sees. Before the war, these things happened discreetly, and very rarely. Now they happen brazenly, proudly, as a matter of routine and a way of life," as the young Najia Mahmoud writes by way of introduction. The English translation is based on Tamar Goldschmidt's Hebrew translation. For three years, Goldschmidt has been posting breathtaking texts by men and women in Gaza on her Facebook page. Amid collapsing walls and falling skies, these writers paint in words events, feelings and thoughts that no camera can capture, and Goldschmidt translates them with extraordinary skill.

Palestinians walking in Gaza last week. More than 86,000 households are headed by women, and nearly 260,000 families are living in shelters. Credit: Jehad Alshrafi/אי־פי  //  Haaretz)

Mahmoud writes: "The age of slavery has not ended. It has moved into the tents and called itself 'protecting the daughter's honor' and 'the circumstances of war.' What is happening around us today makes your blood boil, turns your stomach and makes you sick beyond words. The child marriages that have suddenly become widespread in Gaza are not marriages. They are an auction of girls! To give you an idea of just how low things have sunk: My neighbor, a man in his twenties, is married to a 15-year-old girl. He 'wipes the floor with her' day and night. He beats her for half an hour, and the girl stays silent despite the pain. The moment a cry of pain slips out, he starts beating her all over again.

"And what drives you out of your mind, makes you go crazy and want to set every last tent on fire, is not just the beating. What drives you out of your mind is that her family is a few meters away, his family is right there with him in the same compound, and every one of them has a shoe stuffed in their mouth and says nothing! They throw their own flesh and blood to a piece of human garbage, and when you open your mouth, they trot out an excuse uglier than the sin itself: 'By God, lady, times are hard, and we can't afford to support the girls, so let's protect her honor.' What expenses? What honor are you talking about?! Anyone who can't raise children shouldn't have them in the first place! Why do you keep having one daughter after another if you're going to throw them to their torturers in such a vile way?"

Mahmoud continues: "We are living through war and annihilation. The soup kitchen feeds you, you and your children, and all of us in the tents live on aid like paupers. Not one of you is any better off financially than his daughter. These days, none of you is paying out of your own pocket, so how can you plead poverty and sell your daughter so cheaply and so shamefully? With the same coercion and lack of decency, you see a man throw his little children out among the stray dogs and into danger to peddle goods and support him! A tiny child, no bigger than your little finger, ought to be at school or at least sitting safely in his tent. Instead, he's dumped on the streets to support an entire family. What right do you have to make a child worry about keeping you alive?"

Gaza City last week. Dr. Saeed al-Kahlout wrote about children riding a donkey-drawn cart and discussing the tragic fate of their mutual friends.  (Photo credit: Jehad Alshrafi/AP  //  Haaretz)


Writing from a different angle a few days ago, Dr. al-Kahlout described other children: "The two children sat on a donkey-drawn cart on their way back from the learning tent, their new school. Al-Mawasi 's scorching sun seared their tiny faces. Sand from the school, where the pupils sit directly on the ground, mingled with the dust of the road and danced through their worn-out clothes. They began asking what had become of their mutual friends. 'What about Tamer?!' asked the first, sitting on the edge of the cart and lifting his little feet whenever another cart, drawn by a horse, came close, afraid it would crash into them. 'Tamer was killed with his dad at the entrance to their tent. A missile tore them to pieces. People spent three days picking up bits of flesh around the tent.'

"The boy said this while staring at something in the distance, as though the scene had suddenly appeared before his eyes. Then he remembered something, broke off his story and asked: 'And Aboud? Where is he? Why didn't he come to school today?'

"'Aboud, oh, Aboud! Both his legs got cut off. While he was asleep, a piece of shrapnel tore through the tent and landed right on them. When he woke up, they found him with his legs cut off.'

"'And what about our teacher, Mr. Issam? Did you see Mr. Issam today?'

"'Didn't you hear what happened to him? Mr. Issam got hit by a bullet while he was waiting in line to fill up water in the city center, and he got paralyzed. He's in a tent now. He doesn't react or answer.'

"'And Hani? Hani, when they went back to their house in the north, the wall fell on them. He died, and his little sister and their mom, and his dad went crazy because of it. I'm telling you, wow, he walks around the streets shouting: My children and their mother. Oh God, my children and their mother.'"

Amira Hass is a reporter and columnist for Ha’aretz Daily, a newspaper based in Tel Aviv, Israel. She has been a journalist for two decades.

Hass has written critically about both Israeli and Palestinian authorities. She has not allowed her gender, ethnicity or nationality – all hindrances in the region she reports from – to obstruct her from pursuing the truth in her reporting.

In 1989, Hass quit her studies in history at Tel Aviv University and began working as a copy editor for Ha’aretz Daily. At the same time, she volunteered for Workers Hotline, a human rights group dedicated to reaching out to vulnerable workers, many of whom were Palestinian. She became acquainted with life in Gaza and grew frustrated about how poorly Israel’s occupation of Gaza was represented in the Israeli press.

By 1991, Hass was writing weekly features for Ha’aretz Daily, and in 1993, she became a full-time writer for the paper. She moved to Gaza, which at the time was under direct and full Israeli occupation.

Hass, now based in Ramallah, has lived in the Occupied Palestinian territories for nearly 30 years. She has been reporting on the life of Palestinians under the Israeli occupation and covering the major armed clashes and Israeli military attacks. Her goal has been to provide her readers with detailed information about Israeli policies, especially restrictions on the freedom of movement.

In the course of her work, Hass has been threatened, harassed and detained. In May 2009, she was detained by Israeli police on her return from a four-month stay in Gaza “for violating a military order” (which forbids entry into Gaza) and “for staying illegally in an enemy state.” She had also been detained in December 2008 by Israeli police on her return to Ramallah for violating the same military order.]

Proposed U.S. Census Changes Could Be Catastrophic for Public Health

Portside
portside.org
2026-10-15 18:05:26
Proposed U.S. Census Changes Could Be Catastrophic for Public Health jay Thu, 10/15/2026 - 18:05 ...
Original Article

In 2030, U.S. mortality and morbidity rates will suddenly jump. This will happen not because there is a new pandemic or a sudden rise in cases of existing diseases or injuries, or a sudden decline in access to health care. These jumps in rates will occur throughout the U.S., more in some states than others. Within states, these rate changes will be especially noticeable among four groups: college-age people, retirement-age people, people of color, and immigrants.

Even more remarkable, these shocking changes in U.S. health statistics could be averted without any new treatments or changes in access to or quality of health care.

What is the secret to prevention? Ensuring that there is an accurate 2030 U.S. decennial census .

The time is short to carry out this prevention campaign. The threat is imminent and profound .

On Sept. 10, the U.S. Federal Register published an extraordinary notice blandly titled “ Decennial Census of the Population of Americans ; Proposed Residence Criteria and Proposed Regulations for Demographic Questions.” It announced plans for three major unprecedented and untested changes to the U.S. decennial census, which together will reduce, selectively, the number of people counted — and where . Since rates are computed by dividing the number of cases by the population at risk in a specified time period, then by definition, if the number of cases stays the same but the size of the denominator shrinks, the rates will be higher.

The initial window for comments was a scant 33 days, with comments due by Oct. 13 . Public pushback has resulted in the comment period being extended to Nov. 2 .

What are the three critical changes being proposed?

1) Instead of counting the “whole number of persons in each state,” as commanded by the 14th Amendment of the Constitution , the count will be restricted solely to “citizens or lawful permanent residents of the US.” This excludes all foreign citizen residents who do not meet these criteria, including international students, work visa holders, and recognized refugee and aslyees, and also erases undocumented immigrants.

2) Instead of counting people in relation to their usual residence on Census Day (April 1 of the census year), the changed “rules of residence” will require counting people in relation to where they resided the most between Jan. 3 to April 1, as tied also to the address used in tax records. This will likely mean that college students will be counted as living at their parents’ address, instead of at college, and “snowbirds” and seasonal workers will be counted in the warmer states where they winter, not their primary non-winter residence.

3) Prohibit questions about race and ethnicity (race has been asked about since the first U.S. census in 1790) and prohibit any questions about sexual orientation (first appearing in the 2020 census in a question about household relationships).

Have any of these changes been carefully tested, following usual protocols for reviewing any changes to the census? No . Are they consistent with the Constitution and its amendments? No .

The only reason to make these changes is partisan politics . The Constitution allocates political power — specifically representation in the House of Representatives — and draws political districts in relation to decennial census counts of population size . Change the rules on who is counted where and when, and states’ population counts, political power, and political districts will change. The bet is that the proposed changes will provide partisan advantage to those proposing the change in rules.

Altering the count will affect more than just denominators and the distribution of political power. The predictable data distortions will rupture any understanding of the realities of — and trends in — U.S. morbidity and mortality rates. They will also undermine the data used in federal funding formulas for program eligibility and resource allocation, even as removing people from the census count by political sleight of hand does not disappear their needs.

Furthermore, the distortions will impair the conduct and use of population survey data involving economics, health, education, transportation, etc., by distorting the population-based sampling frames and weights on which all such surveys rely.

The far-ranging potential harms are starkly revealed by the U.S. Census Bureau’s list of 50 common uses of census data for allocation of resources and planning, spanning every sector of the U.S. Those especially germane to health and health services include: “Planning for hospitals, nursing homes, clinics, and the location of other health services”; “Estimating the number of people displaced by natural disasters”; “Creating maps to speed emergency services to households in need of assistance”; “Facilitating scientific research”; and “Assessing the potential for spread of communicable diseases.”

There is no substitute for the granular U.S. decennial census data painstakingly collected by the U.S. Census Bureau, in accord with their longstanding and now threatened mission to “ count everyone once, only once, and in the right place .”

Over the past 40 years, virtually all health outcomes tracked in the benchmark U.S. annual federal documents Health, United States and in the Healthy People objectives have used census population data to report rates for both the total U.S. population and by race/ethnicity, as well as occasionally by socioeconomic position. For those who think economic data are sufficient to identify who is at highest risk of poor health outcomes in the U.S. absent racial/ethnic data, think again .

A case in point is maternal mortality. The U.S. stands as an outlier with rates higher than those in all other high-income countries . Reflecting intertwined histories of racialized and economic injustice, not only are there stark disparities by race/ethnicity and by educational level, but there are also racialized inequities within each educational level, and educational inequities within each racialized group. Moreover, these inequities interact : Maternal mortality rates are higher among Black women with a completed college education compared to white women with less than a high school diploma. Maternal mortality is a critical and preventable outcome — but prevention requires accurate data.

Prohibit collecting data on race/ethnicity in the census, and the net result will be to render invisible longstanding and well-known American racialized health inequities , overall and by socioeconomic position, as well as their changes over time. For example , between 1966 and 1980, U.S. socioeconomic and racialized inequities in rates of death before age 65 shrank, only to rise thereafter. These patterns likely reflect the beneficial impacts of the 1960s Great Society programs, followed by the post-1980 conservative and neoliberal backlash.

Erasing data does not erase need or harm, but instead is a time-disgraced method of avoiding accountability via the shameful ruse of “no data, no problem.”

For these and many more reasons, the proposed changes to the 2030 U.S. decennial census must be blocked before they can ever be implemented. Everyone who cares about the health and wellbeing of the U.S. population and the integrity of data can submit comments by Nov. 2.

[ Nancy Krieger is professor of social epidemiology and American Cancer Society clinical research professor at the Harvard T.H. Chan School of Public Health. She represents her own views and does not speak on behalf of her institution.]

Why Are the Democratic Socialists of America So Successful?

Portside
portside.org
2026-10-15 17:49:32
Why Are the Democratic Socialists of America So Successful? jay Thu, 10/15/2026 - 17:49 ...
Original Article

A lot has been written recently in an effort to understand the Democratic Socialists of America (DSA) and how we’ve risen to such prominence in a short time.

It is clear that we reflect a growing disillusionment with the Democratic party , and a further radicalization of the American population. But many leftwing social movement organizations, such as Black Lives Matter and the Women’s March, have risen in the last decade or so, and many groups, from MoveOn to the Sunrise Movement, have attempted to absorb large numbers of people, influence the Democratic party and enter the public consciousness with lower levels of success.

It may just be that we happened to be the organization that had the name closest to the ideology of Bernie Sanders, the man arguably most responsible for reintroducing democratic socialism to the popular American lexicon. But name recognition alone can’t explain both our rapid growth and the ability to sustain that growth. Sanders has also talked about the need for a “political revolution” – but his own organization, Our Revolution, is politically irrelevant.

What is missing from the discussion is the DSA’s structure.

Unlike all of the groups I’ve named, it is a thoroughly democratically run organization that allows its members to set its goals, elect its leaders and amend its constitution. None of the other organizations even have constitutions to be altered. Instead, they have corporate bylaws and unelected executive boards to maintain their tax status with the IRS.

While the DSA is primarily operated and funded by its growing membership, the other organizations rely on foundation funding and have a deeper reliance on professional staff. While local chapters of most of these groups have almost no control over the national structure, the DSA functions as a federation in which the national office is beholden to its constituent parts.

The DSA is not succeeding because of a good name. It is growing because it treats its members like adults capable of managing their own affairs and that of the organization, and they reward it with monthly dues and a long commitment that supersedes the natural highs and lows of uprisings.

This idea isn’t new; in fact it is foundational to the success of the American project (well, OK, success is a bit of a stretch, isn’t it?). Writing in the early 19th century, the French philosopher Alexis de Tocqueville described these kinds of membership-driven organizations as the “free schools” of democracy that serve as the bedrock of America’s political system.

They prepare Americans to lead and give them the political vehicles in which they can work with their neighbors to steer the country. This model is dying, but we still see it alive through organizations like the NAACP and the US Student Association, which I was a member of in my youth.

The NAACP is more than a hundred years old and the US Student Association will be 80 next year. While the DSA was created in 1982, it can trace its full history as a faction within larger organizations going back well over a century .

It is doubtful that the conflict -ridden Black Lives Global Network Foundation, the 501(c)3 organization that took the reins of the BLM movement, will survive the decade.

BLM chapters have dissolved, broken away or become relatively dormant across the country. The network helped oversee the largest protest in US history, but it is doubtful that there are more than a handful of chapters functioning in the country. The Minneapolis chapter, arguably its most successful, reconstituted itself as Black Visions, and then sunsetted after years of misalignment and the forcing out of its original leadership.

The Green New Deal-championing Sunrise Movement has fared better, but not by much. It too has faced internal power struggles between leadership, who are paid staff members, and its base.

According to one former member, the organization went from having more than 500 chapters in 2021 to probably fewer than 90 by 2023. It has made efforts to become more democratic but could only muster 700 votes for an internal decision, despite counting more than 80,000 members years prior.

While some of this must be the natural attrition of social movements – the DSA’s membership also ebbs and flows – founders of the Sunrise Movement have publicly recognized the internal conflict built into their model.

And this is why the DSA will continue to succeed where most groups fail. It has clear mechanisms for its membership to change the direction of the organization without engaging in backroom schemes and internal coups. Clashes still happen, but they are facilitated by clear guidelines that allow factions – called caucuses – to vie for power, and leaders have clear term limits.

I joined the US Student Association (USSA) with a desire to learn from it and steal members for my own organization, in the vein of the Québécois student unions. But the USSA was so democratic and full of meaningful deliberation that I realized I could change it from within instead of splintering it.

Over a decade later, I’m a dedicated alumnus who has volunteered dozens of hours out of sheer love for the organization. There is evidence that participating in a thoughtful deliberative process increases satisfaction with the outcomes of a decision and trust of institutions.

I joined the DSA after sitting through one meeting and realizing that my voice actually mattered. I did not need to become a staff member or somehow be appointed to the board of directors. I could make the DSA what I want it to be, while being transformed by it in turn.

I hadn’t experienced that since my days at the USSA’s national student congress. And that is because the new model of social movement organization has long become dominant.

According to the Harvard sociologist Theda Skocpol, grant-funded, staff-run, low membership participation models became popular in the 1970s. They create an incentive model that I believe is deleterious to long-term social change.

Foundations force organizations to become constant money-chasing machines, applying for annual grant after annual grant, and to adopt a model of centralized control that maximizes efficiency – having tens of thousands of decision-makers can be messy, after all.

This model can still bring in a lot of members, but they tend to be temporary participants, or paper members, like the millions of members of MoveOn, who donate monthly but do little to operate between mobilizations, and have no clear role in determining the future of the organization as a whole.

I supported the development of a new generation of organizations through my work as a trainer with the Momentum Community, but the groups I advised, many of which are named in this article, still suffered from this top-down non-profit model. These groups can absorb thousands of people in moments of public frustration, but they are structurally unable to keep them.

The DSA is growing not only because it reflects frustration over the status quo; it is growing also because it gives people a voice within a vehicle that promises to change that status quo.

[ Akin Olla is a contributing opinion writer at the Guardian US.]

Tidbits-Oct. 15: Reader Comments: Diesel Prices; Setting the Record Straight on AOC & Gaza; Speaking of Public Executions; Resource From EPI – Weak September Jobs Report Shows Hiring and Wage Growth Slow; More…

Portside
portside.org
2026-10-15 17:26:06
Tidbits-Oct. 15: Reader Comments: Diesel Prices; Setting the Record Straight on AOC & Gaza; Speaking of Public Executions; Resource From EPI – Weak September Jobs Report Shows Hiring and Wage Growth Slow; More… jay Thu, 10/15/2026 - 17:26 ...
Original Article
Tidbits-Oct. 15: Reader Comments: Diesel Prices; Setting the Record Straight on AOC & Gaza; Speaking of Public Executions; Resource From EPI – Weak September Jobs Report Shows Hiring and Wage Growth Slow; More… Published

Tidbits - Reader Comments, Resources, and cartoons - Oct. 15, 2026 | Portside

Resources:


Diesel Prices  --  Cartoon by Mike Stanfill



Mike Stanfill
October 14, 2026
Raging Pencils

Re: Setting the Record Straight on AOC & Gaza

Good article debunks the carping about AOCs supposed imperfections.
Funny how there so much less carping about Bernie and Zohran. Maybe because they’re men.

Miriam Bensman
Posted on Portside's Facebook page

=====

Omar is the only one facing deportation, if that makes more (ugly)sense.

Paul Buhle
Posted on Portside's Facebook page

The Show They Don't Want Live-Streamed  --  Cartoon by Joel Pett


Joel Pett
October 12, 2026
Chicago Tribune

Re: Boxcar to Nowhere

Go to sleep my weary hobo is a song you might have missed.  i sang it to my babies as a lullaby.

Cathy Deppe

Affordability Crisis?  --  Cartoon by Matt Wuerker


Matt Wuerker
October 2, 2026
Politico

Speaking of Public Executions  --  Cartoon by Clay Jones


At least ICE isn't livestreaming...yet.



Clay Jones
October 11, 2026
Claytoonz

Re: Food Stamp Catastrophe

(posting on Portside Culture )

They cut SNAP benefits.  They cut Medicaid.  They starve us and refuse us medical care. And the damn billionaires keep taking.

Robert Day
Posted on Portside's Facebook page

Weak September jobs report shows hiring and wage growth slow  (Economic Policy Institute)


Below, Economic Policy Institute senior economist Elise Gould offers her insights on the jobs report released this morning. Read the full thread her e.


Economic Policy Institute
1225 Eye St. NW, Suite 600
Washington, DC 20005
Phone: 202-775-8810 • epi@epi.org

Lockheed Martin Showered Susan Collins With Cash as F-35 Program Hit Turbulence

Intercept
theintercept.com
2026-10-15 17:14:22
Collins received tens of thousands from Lockheed during a two-month period surrounding a critical 2023 watchdog report. The post Lockheed Martin Showered Susan Collins With Cash as F-35 Program Hit Turbulence appeared first on The Intercept....
Original Article

In May 2023, the Pentagon’s shiny new fighter jet was not looking so shiny or new.

Already a decade late and nearly $200 billion over its original cost estimate, the F-35 program faced a new crisis. An internal government watchdog report detailed a cascade of new problems with the program, which was in a period of flux amid plans to upgrade the jet’s engine and cooling system.

The report from the Government Accountability Office criticized the Pentagon for lumping those upgrades in with the overall purchase of the planes. Conflating the two, the authors said, would limit congressional insight into cost increases. And they criticized the contractors behind the aircraft for failing to deliver the F-35 in a timely manner.

For Lockheed Martin, the main defense giant overseeing the development of the F-35, the timing was far from ideal. In a few weeks, Congress was set to debate the Pentagon’s mammoth budget — and with it, new funding for the military’s purchase of F-35 jets.

Collins was the largest recipient of Lockheed cash in the period surrounding the inspector general report.

So Lockheed and its lobbyists went on a charm offensive in Washington. The weapons maker shelled out hundreds of thousands over a two-month period, in what the money-in-politics watchdog Open Secrets described as “one of the largest coordinated lobbying efforts” around that year’s military budget.

No member of Congress benefited more than Sen. Susan Collins, R-Maine, who at the time served as the ranking member on the Defense Appropriations Subcommittee.

From May 1 to June 30, 2023, employees and top executives from Lockheed Martin donated $59,500 to Collins’s campaign committee. The donations were outliers during that period: Collins was among the largest recipients of Lockheed cash; the company was her largest single donor over those two months; and it was the largest spending blitz on Collins by Lockheed compared to the same period in other years.

The effort appeared to pay off for Lockheed. In July 2023, less than two months after the release of the Government Accountability Office report, Collins voted in favor of appropriating funds to purchase 83 new F-35 jets. Later that year, when the final version of the military budget was signed into law, Collins celebrated the economic boon she said it would bring to the state of Maine.

In response to questions from The Intercept, Phoebe Keller, a spokesperson for the Republican-controlled Senate Appropriations Committee, said Collins’s support for the jet had nothing to do with donations from Lockheed or any other firm.

“The F-35 jet program is a longstanding bipartisan defense priority,” Keller said. “Sen. Collins has always publicly supported the F-35 jet program, as dozens of both Republican and Democratic Senators.”

Collins’s position on the Defense Subcommittee of the Senate Appropriations Committee likely played a role in the outsized donations, according to analyst Dan Grazier. And Collins, for her part, would have good reason to approve the spending: The F-35 program, Lockheed claims , has had a nine-figure economic impact in Maine.

Fight of Her Political Life

In the final weeks of the biggest fight of her political career against Democratic challenger Troy Jackson, fresh scrutiny on Collins’s donations from defense contractors has become a sore spot for her campaign.

In some cases, the senator’s interactions with defense firms are the routine for Washington: glad-handing, lobbying, contributions, and directing pork-barrel spending back home. Not all of it, though, is standard.

Last month, a bombshell report in ProPublica detailed an FBI investigation into an alleged pay-to-play scheme . A former defense contractor claimed to federal agents that he worked with figures tied to Collins to disguise campaign donations — and got federal contracts totaling $32 million in return. (The FBI probe fizzled after Trump returned to office and purged the bureau; Collins denied wrongdoing, pushing back on elements of the report.)

On Wednesday, more than 250 Mainers signed a letter to the state’s attorney general asking the official to investigate the allegations of corruption, according to Maine Morning Star , a local news outlet.

And earlier this month, The Intercept reported on donations from another defense contractor, AM General, and its parent company, whose employees gave $58,000 to fundraising committees associated with Collins after a damning assessment from the Army put its federal contracts in jeopardy .

As with the AM General donations, the contributions by employees and lobbyists of Lockheed Martin do not indicate wrongdoing by Collins or her donors. They instead illuminate how companies that garner lucrative contracts zero in on powerful members of Congress, who often tout the benefits to their states.

“This is an example of what’s wrong with our approach to buying weapons,” said William Hartung, an analyst who has written critically of defense spending and influence peddling in Washington. “If we buy things because they’re in the state of a powerful member, we’re not going to have a coherent arsenal.”

Lockheed Giving

Collins was not the only member of Congress to push for funding the F-35, which enjoyed broad bipartisan support — especially from lawmakers with eligible firms and facilities in their states . And she was not the only one to benefit from the largesse of Lockheed Martin.

From May 1 to June 30, 2023, Lockheed’s corporate PAC doled out $421,000 in a bipartisan blitz to various campaign political action committees, campaign funds, state parties, and charitable foundations. (Aside from 2024, the year of the presidential election, contributions in that two-month period in 2023 eclipsed subsequent years. In the same period this year , Lockheed’s corporate PAC made 128 donations totaling $236,000; last year , it gave $286,000 across 158 donations during the same period.)

Collins was by far the biggest single beneficiary of the influx of cash — which came at a time when she was not actively campaigning. And, unlike the donations spread out to other campaign committees, the cash going from Lockheed into Collins’s coffers during those months came exclusively in the form of individual donations by employees and executives, including the firm’s CEO and chief operating officer, data from the Federal Election Commission shows.

Of the 60 donations of $1,000 or more during May and June of that year, 56 went to Collins.

Lobbyists working for Lockheed contributed another $5,000 to Collins during that period, and corporate PACs for Lockheed’s lobbying firms shelled out another $5,500 total, according to FEC disclosures.

Among individual contributions by Lockheed employees, donations to Collins made up more than 10 percent of all donations during the two-month period surrounding the watchdog report.

Only the firm’s in-house employee PAC, which received 75 percent of all employee donations, took in more from figures tied to Lockheed. Collins got more than twice as much as the next highest recipient, ActBlue, the Democratic Party-aligned fundraising vehicle, which received 4 percent of all Lockheed employee contributions in that period, according to FEC data .

The vast majority donations from Lockheed employees and officials were under $1,000. Of the 60 donations of $1,000 or more during May and June 2023, 56 went to Collins .

Virtually all employee contributions from Lockheed workers and executives to Collins during her current term came during that two-month window, according to the FEC .

Lockheed donations made up a quarter of all contributions during May and June 2023 to Collins’s main fundraising arm, Collins for Senator. The next runner-up was telecom giant Charter Communications, whose employee contributions made up just 8 percent of gifts to the Collins campaign in the second quarter of the 2023 fiscal year.

A spokesperson for Lockheed did not answer specific questions regarding the reason for the sudden influx of individual contributions to Collins in 2023.

“Our employee PAC program continues to observe long-standing principles of bi-partisan political engagement in support of our business interests,” the spokesperson wrote in an email.

Another Vehicle Army Didn’t Want

Two years later, a similar pattern played out in miniature when a lesser-known defense firm with a troubled product enjoyed Collins’s support on Capitol Hill.

Collins went out of her way last year to slam the Pentagon for canceling its plans to purchase robotic combat vehicles from Textron and its subsidiary Howe & Howe, the Maine-based developer of the Ripsaw.

Collins has repeatedly hyped the unmanned robotic combat vehicle in Senate hearings and official statements. On June 18, 2025, she took issue with the fact that the vehicle had appeared in a recent military parade, but did not make the cut for further spending.

“It’s the height of irony that you would feature this combat vehicle in your parade as the future of the Army at the same time that you’ve canceled the contract — the cancellation of a contract that was won over a lot of other competitors,” Collins said, describing the decision as “terribly unfair and a real mistake.”

A month later, after the military budget cleared the Senate Appropriations Committee, Collins singled out Howe & Howe , and its plant in Waterboro, Maine, as a potential beneficiary of a portion of $44 million allotted to outfit the U.S. Marine Corps with amphibious and autonomous vehicles.

She gave another shoutout to Howe & Howe in January, after the 2026 military budget was signed into law. This May, during the congressional testimony by then-Army Secretary Daniel Driscoll, Collins again took the military to task for cutting its planned purchase of the Ripsaw.

Textron’s corporate PAC made contributions totaling $4,000 to various PACs associated with Collins just ahead of her vote on the 2026 military budget. $3,000 of the gifts came days after Collins criticized the military for cutting its plans for the Ripsaw program that would have brought millions of dollars to Howe & Howe.

Later in the year, the Textron corporate PAC donated another $7,000 to Collins for Senator and the Collins-linked Dirigo PAC, according to FEC filings . (A spokesperson for Textron and Howe & Howe did not respond to a request for comment. Keller, the Senate Appropriations Committee spokesperson, did not respond to questions about the Textron and Howe & Howe donations.)

Employees of Textron and its subsidiary, meanwhile, made contributions to various Collins-linked PACS totaling nearly $15,000 between September 2025 and October 15, 2026, FEC data shows .

The donations, relatively small in the post- Citizens United era of campaign finance, still illustrate a troubling pattern of how influence plays out in Washington, according to Hartung, the analyst critical of military spending.

“A lot of members lobby to get more units of something built in their state, or craft legislation for a system that only their local firm can produce,” Hartung said. “It’s kind of business as usual, but sometimes business as usual causes great harm.”

Comparing New York's Most Powerful Judges' Records Has Never Been Possible—Until Now

hellgate
hellgatenyc.com
2026-10-15 17:10:14
A new platform called Decoded lets New Yorkers look up how our most powerful judges are voting....
Original Article

New Yorkers can now see how the judges on the state's highest court decide on issues like tenant protections, immigrant rights, voting access, and policing through a new public information tool launched this week.

Our Court of Appeals judges dictate how the rest of the state's courts must rule. Now, with a few clicks, New Yorkers can compare, side-by-side, how each of the appeals court judges have voted when the court had a split decision.

The platform, called Decoded, is the newest project from Oded Oren, who in 2023 left his job as a public defender to start Scrutinize , a website dedicated to increasing judicial transparency. (Hell Gate used Scrutinize as a research tool for our project Courts of Contempt , a deep dive into how judges become judges in New York, and the consequences the broken system can have for everyday New Yorkers.)

Decoded uses AI to scrape and organize the judges' decisions, a platform Oren launched Wednesday after a year of intense development and trial and error. (It was worth it: Oren won a David Prize for his efforts .)

"If a New Yorker is interested in a specific judge, they can go to their profile page, and they can see their record on the issues that they care about: voting rights, healthcare, criminal justice, and so on," Oren explained.

A screenshot from Decoded. (Scrutinize.org)

To launch the project, Oren used Court of Appeals Judge Jenny Rivera as an example—laying out her entire 13-year voting record on its website. It's a fascinating case study, because Judge Rivera's term ends in February 2027. By looking at her decision-making record, we can see what kind of judge we are set to lose from the bench, as the legislature, state government, and Governor Kathy Hochul begin to consider whether they will reappoint her or appoint someone new.

The record shows that Rivera—the judge who has been on the bench the longest—pulls the bench to the left in many categories. She's voted to increase noncitizen protections in 88 percent of cases—more than any other judge. She's voted 100 percent of the time to increase tenant protections, also more than any other judge. She's voted to increase due process protections almost 70 percent of time, the highest rate of any judge, and voted to increase criminal punishment in just 29 percent of cases—one of the lowest rates of the seven justices.

The Commission on Judicial Nomination is currently vetting those who have nominated themselves to take Judge Rivera's position, Oren said. Now, for the first time, the decision makers will have data at their fingertips about the bench they've already selected, and the type of judge they're looking at replacing.

Hell Gate caught up with Oren on Thursday to learn more about how Decoded changes the judicial appointment game, and how regular New Yorkers can use it—including to see which judges terms are up soon .

This interview has been lightly edited and condensed for clarity.

Give us your email to read the full story

Sign up now for our free newsletters.

Sign up

Hackers exploit Collabora RCE flaw to backdoor Nextcloud servers

Bleeping Computer
www.bleepingcomputer.com
2026-10-15 16:25:04
Threat actors are exploiting a critical command execution flaw, now tracked as CVE-2026-110447, in the Collabora Online - Built-in CODE Server app (richdocumentscode) for Nextcloud. [...]...
Original Article

Hackers exploit Collabora RCE flaw to backdoor Nextcloud servers

Threat actors are exploiting a critical command execution flaw, now tracked as CVE-2026-110447, in the Collabora Online - Built-in CODE Server app (richdocumentscode) for Nextcloud.

Multiple administrator reports indicate that attacks began in mid-September, roughly a month before the formal security bulletin , the GitHub advisory , and CVE publication .

CVE-2026-110447 impacts richdocumentscode versions before 26.4.303 and resides in the Nextcloud app’s mechanism for starting the bundled Collabora server.

The flaw affects only the optional built-in CODE server app. Standalone Collabora Online servers, Docker and RPM/DEB installations, and Nextcloud All-in-One deployments remain unaffected, according to Collabora.

The attacks involve sending a malicious request to the app’s proxy.php endpoint, triggering OS command injection.

A key prerequisite for successful exploitation is that the built-in CODE server must be stopped (e.g., after a restart, upgrade, crash). Authentication or user interaction is not required.

System administrators impacted by malicious activity reported attacks against multiple endpoints dating back to September 10.

According to the reports, the attacker planted PHP webshells and used them to search for password databases, password manager artifacts, and cryptocurrency wallets.

Some users also reported that ransomware operators are exploiting the flaw , but BleepingComputer could not independently confirm this.

System administrators are recommended to upgrade to version 26.4.303 or later, or remove the server app if not needed. The vendor warned that disabling the app is insufficient.

Beyond the mid-September warnings from maintainers, a community warning was also published on October 3, urging administrators to update immediately due to ongoing exploitation.

However, the lack of a CVE ID made it more difficult for administrators to pinpoint the issue correctly and implement efficient defenses.

A study from cybersecurity company Second Security illustrates the gap between security fixes and formal vulnerability notifications.

The firm analyzed real-world examples from open-source flaws and found that the median interval between public fixes and CVE publication was 39 days in August, up from 5.1 days in January.

The researchers suggest that growing volumes of AI-assisted vulnerability discoveries are straining CVE processing and contributing to publication delays.

Diagram
Source: Second Security

In many cases, the researchers found public exploit code emerged online within hours of a security fix and several days before the corresponding CVE was published.

Second Security notes that the use of AI tools makes it easy for attackers to generate working exploits for published fixes.

Examples of PoC and CVE appearance times
Examples of public exploits and CVE appearance times
Source: Second Security

In Collabora’s case, the fix was committed on September 9, and version 26.4.303 was released on September 11. The advisory and CVE were published on October 14, a gap of more than four weeks.

BleepingComputer contacted Nextcloud with questions about its response to the malicious activity reports, as well as details about the attacks and the number of impacted systems.

Nextcloud told BleepingComputer that Collabora reported the vulnerability in mid-September and that an update became available through the app store.

The company justified the disclosure delay by saying it gave users time to update and that it had not observed widespread exploitation.

In a blog post earlier today about the activity, Collabora attributed the delayed announcement primarily to GitHub CVE-processing backlogs, which it said were under strain from increasing volumes of AI-driven security reports.

article image

Build your security blueprint for AI-powered attacks

Join Mikko Hyppönen and security leaders from the NFL, CHANEL, and Atlassian for a two-hour digital summit on what AI-speed attacks change, what defenders should stop doing, and how to validate, decide, fix, and re-validate at machine speed.

Save your seat

Matthew Garrett: Epic's EAC2 v2 seems fairly easily bypassable

PlanetDebian
codon.org.uk
2026-10-15 16:23:59
Epic just announced the upcoming version 2 of their Linux implementation of Easy Anti-Cheat. It’s based on using the Linux eBPF security module to monitor what’s happening, and then a bunch of extra infrastructure to make sure this can’t be bypassed. The core part of this is requiring secure boot be...
Original Article

Epic just announced the upcoming version 2 of their Linux implementation of Easy Anti-Cheat. It’s based on using the Linux eBPF security module to monitor what’s happening, and then a bunch of extra infrastructure to make sure this can’t be bypassed. The core part of this is requiring secure boot be enabled (ensuring that modified kernels can’t be used), using measured boot to verify that secure boot is enabled and which keys are used (to prevent you from just signing your own modified kernel), and then doing remote attestation, a mechanism where the TPM generates a signed copy of the boot measurements and passes that off to a server which verifies it came from a real TPM, verifies that you have secure boot enabled and are using the right keys, and presumably then allows you into the game.

This is all fine as long as you can prove that the measurements provided are real, and that’s actually a lot harder than you might think. First, we can simply make up our own quote signed with our own key and say that it came from a TPM. This is avoided by every TPM having an Endorsement Key (or EK) and an associated certificate, with that certificate being signed by the TPM vendor. If you have a list of all the legitimate TPM vendors and their CA keys, you can verify that the measurements came from a real TPM. Easy enough. So we need to get the measurements from a real TPM, and the one on our motherboard contains the measurements that were generated by the firmware and bootloader, and we can’t reset those at runtime without resetting the TPM, which… oh huh there’s actually nothing stopping us from doing that at runtime, as long as we have access to the hardware. Many desktop boards have the TPM on a small plugin module with a standard pinout that includes a reset pin. Simply short that to ground briefly and the TPM is back in its initial state, and userland can write whatever measurements it wants to it. Boot a modified kernel which lies to the eBPF code? As long as you replay the expected log values from a boot with secure boot on and a trusted kernel, the TPM will still happily provide a legitimate set of measurements that’ll satisfy the checker.

What if the TPM is less accessible, either because it’s mounted directly to the motherboard or it’s inside the CPU or chipset? That’s going to be trickier. But here’s the thing. The quote needs to come from a TPM, but not necessarily the TPM on your motherboard. TPMs these days are usually connected via the Serial Peripheral Interface , usually referred to as SPI. Microchip make a USB to SPI bridge , and there’s a Linux driver . Wire one of those up with an appropriate header and you can plug in an easily available TPM module intended for plugging into a motherboard, and now we tell the kernel to ignore the motherboard TPM and make /dev/tpmrm0 point at the USB one and program it with a set of trusted measurements and once again everything is going to look just fine (yes obviously the eBPF code can look for this, but we’re running a modified kernel so we can just lie to the eBPF code).

Remote attestation on PCs just doesn’t work that well in environments where you can’t associate a specific TPM with a specific system, which is basically everywhere except enterprises. But maybe that doesn’t matter and cheaters wouldn’t be willing to spend the $20 or so it’d take to produce one of these things? That would seem somewhat surprising, but it’s not impossible. And obviously any server-side cheat detection that triggers could then block that specific TPM, meaning they’d need to go and get another TPM, and maybe that ends up being enough to discourage people from bothering. From a practical level, this may be sufficient. But at a technical level? It’s not great.

What I Self-Host

Hacker News
viceconsole.fyi
2026-10-15 16:23:25
Comments...
Original Article

What I Self-Host, What I Don’t, and Why

I’ve always had a foot in the self-hosting world, long before it was called that. My freshman year of university, I ran a website from a Linux box underneath my bed. There was some downtime when my roommate got tired of the fan noise and turned it off. For several years I ran MythTV , then XBMC (later known as Kodi).

Recently, I lived for a few years in India, where streaming services are extremely inexpensive by western standards. We had Netflix, Disney Plus (Hotstar in India), and Spotify. After leaving India, I was unwilling to pay western prices for these services. But I had also become fed up with the engagement treadmill, particularly for my son. We wanted to limit his viewing choices to certain programming, but the constant “recommended for you” and “up next” caused conflict. While there are ways to limit content to specific titles, or disable auto-play, doing this for each service and keeping track of when client applications change and need to be reconfigured is too much work.

So, I “cut the cord” in a different sense, ditching streaming services for self-hosted Jellyfin . Over the course of the next year and a half, Jellyfin opened the door to self-hosting many other services, reducing my dependence on cloud service providers, and providing a welcome stability. No longer am I constantly confronted with unnecessary site redesigns, new features of questionable value, and a barrage of e-mails about terms-of-service updates, binding arbitration, data breaches, etc. I read the release notes of new versions of the software I host and decide if and when I want to upgrade.

Rules

I have a few ground rules.

With the exception of VPN servers that run on my router, I do not expose any services directly to the public internet. I don’t care how convenient it would be, or how secure an application is. Especially with AI-assisted hacking, I simply don’t think it’s wise. My ISP also uses CGNAT for its IPv4 addresses, so my home network is not directly reachable from the public internet via IPv4. My VPN servers are only publicly routable on IPv6, a limitation that has some downsides but is workable for my use cases, and likely helps limit unfriendly attempted connections. The biggest downside is that my VPN will almost never function on a public Wifi network, since these rarely offer IPv6. When using my phone, I can disable Wi-Fi and connect over mobile data… if there is service.

I prefer running services natively when possible, but will containerize complex services or those with many dependencies. Love: a service that’s a single Go binary. A service that only comes as a Docker compose file and wants to run MySQL, Redis, and three other containers? I’m already looking for an alternative. If the dependencies aren’t overwhelming, native is better, faster, and more efficient. I can use the same management tools and commands across multiple services. There’s no mental overhead of having to get into this container to run some command, finding out this container is missing curl, that one runs busybox so all the arguments are different, or dealing with a virtual network and host port mapping.

Related, I don’t do Docker anymore. It’s not really a principled position, but I grew tired of having to manage a completely separate service control system on my server. I’m already using systemd, and at this point Podman’s integration with systemd is excellent.

Hardware

Last year I bought a Beelink Mini PC, specifically an S12 Pro with an Intel N100 processor, 16 GB RAM, and a 512 GB internal SSD. It was before the rampocalypse, so I paid EUR 180. The same listing on Amazon is currently EUR 359. Ouch! Attached to the server is a 6 TB hard drive for media storage.

My comment on Hacker News about what I self-host prompted some questions about how all of this could run on 16 GB RAM. As I describe below, there are some choices I’ve made that reduce resource demand on my server, but ultimately it turns out you don’t need much hardware to run a lot of stuff. Obviously I’m not running any local inference on this hardware, but for everything non-AI, it has just worked out of the box, or with some simple configuration tweaks.

Services

In alphabetical order.

Actual Budget

Budgeting software with desktop clients and a web application, custom reports, and rules-based categorization. I only use this for budgeting and checking/savings/credit accounts. For tracking investment accounts, I use a cloud service. Some day I’ll try to move away from the latter…

While Actual Budget supports automatic transaction import from various banks, I don’t use this feature. Instead, after each month end, I download the prior month’s transactions (OFX format preferred, CSV if no other option) and import them manually. This works for me because I primarily use Actual Budget for expense tracking, not… actual… budgeting.

Podman.

Audiobookshelf

Add, download and store audiobooks and podcasts on your server, listen to them on your phone. I haven’t used the audiobook feature much, I set it up more for my kids, but it has very nice chapter handling. In the past for podcasts I used PlayerFM, then Pocket Casts, but now unless I’m out of the house without VPN connectivity, I use Audiobookshelf .

Native.

Automatic Ripping Machine (ARM)

ARM automates ripping and transcoding DVDs (and Blu-rays, but I don’t do those). Yes, it’s 2026 and I still rip DVDs. Remember, we cut the cord, so not only is this a conduit for new-to-us content, but it’s also a way for us to get bilingual content (English and French).

Podman.

Backrest

Web UI for Restic backup software. Backups are important! Especially for Immich (photos). Restic does a good job deduplicating and compressing backed up data, and Backrest makes it easy to manage the storage retention policies. Notifications in case of failure go to Gotify.

Native.

Beszel

Beszel is a simple monitoring dashboard that collects basic stats from agents (in the old-fashioned sense of a small background service) to display CPU load, memory and disk usage, temperature, battery, etc. Helps me keep an eye on various other hosts I have around the house (several Rapsberry Pis and a Proxmox cluster that may be the subject of a future post).

Native.

Caddy

Caddy is a web server and reverse proxy. Early on I didn’t understand the value of a reverse proxy, and I thought I would be fine accessing my services with a local DNS name, or even IP address, and port number. But then I started adding more and more services, and some required HTTPS. So I got a domain name (not this one) and set up Caddy to automatically obtain LetsEncrypt SSL certificates, and now nearly all of my services are accessible on my LAN (or over VPN) with HTTPS and friendly subdomain names. Adding a new service is a quick edit to the Caddyfile.

Native.

Cockpit

Cockpit is a web-based admin console for the server. It uses normal system authentication methods. For me, it’s mainly useful for spotting failed services when no notifications are set up for them.

Native.

Forgejo

Forgejo is a fork of Gitea, and deploys as a single binary. Github’s uptime is the butt of a lot of jokes these days, but I also appreciate the speed of having my own git remote. Eventually I’ll set up CI/CD and runners, if only to deploy this blog.

Native.

Web-based RSS reader . These days I basically visit two websites, though, so I’ve not been using it much. I do subscribe to the Github releases of some of the services I self-host so I can check out the features and bugfixes in new versions.

Native.

Frigate

Network video recorder (NVR). I first started with Zoneminder because I’m of a certain age. But it became clear that Zoneminder is past its prime. Frigate has been fantastic. I run it with 8 IP cameras. It provides alerts for people and cars entering the driveway, integrates with Home Assistant to power various automations (e.g., when a person is detected in the backyard, turn on the camera floodlight). I may write a future post with some details about my IP camera adventures.

I run all of my cameras at lower resolutions than they support, primarily to avoid Wi-Fi network congestion. Most cameras also support an even lower-resolution RTSP substream, which is what Frigate uses for motion and object detection. Keeping the camera resolutions low avoids excessive CPU and memory from video processing, and excessive disk usage from recordings. They are good enough to identify faces, and privacy laws in my country prohibit filming public rights of way, so my cameras are not aimed at distant points.

Podman.

Gonic

Subsonic-compatible server written in Go. I purchased a perpetual Subsonic license a long time ago, but the original project is ancient and the modern alternatives are better. I run two separate instances of Gonic , one serves kid music, the other serves adult music.

Native.

Gotify

Simple notification service written in Go. Many self-hosted services directly support Gotify notifications, or can send them via a custom HTTP POST. In conjunction with Uptime Kuma, I use Gotify to get notifications about any services or devices that are down, what my kids are watching on Jellyfin, when a new podcast episode is available in Audiobookshelf, etc.

Native.

Home Assistant

Home Assistant probably deserves its own post. It’s fantastic, and I cannot imagine trying to accomplish the same things within a proprietary ecosystem like Google Home, Amazon Alexa, or Apple Home. Things are better now that device manufacturers are standardizing on protocols like Matter, but the control and flexibility you get with Home Assistant is hard to beat. It has a steep learning curve, though, and I need to think about realistic ways to handle potential server failure without compromising the functionality of my home.

Podman.

Homepage

At some point I realized I was running so many services, I needed another service just to keep track of them all. Homepage was a good solution. It has widgets for almost all the services I run, so I can get a quick overview of what’s going on, or just a quick link to the subdomain of a service.

Podman.

Immich

Google Photos alternative. I was tired of Google constantly promoting paid storage plans in their apps. I was able to manage my storage space, but my wife was always about to run out of room. We moved to Immich last year, just after version 2 was released. It’s much faster to load pages full of photos when all the network activity is within your house. I’ve come up with a solution for sharing albums with family, as well. Still a lot of work to do with Immich - I have many duplicates, and now that storage isn’t a concern, I’ve been less disciplined about culling photos and videos.

Podman.

Jellyfin

As I mentioned in the introduction, I’ve self-hosted media for a long time, going all the way back to MythTV twenty-some years ago. Jellyfin is opinionated about its media organization, but it generally works well. I only use it for movies, TV, and home videos, so I can’t speak to its other features (e-books, music, photos, etc.). While my son still remembers Netflix, he is satisfied with Jellyfin. I appreciate the lack of auto-play, never seeing recommendations, and not having to scroll past a bunch of garbage to find what I want to watch.

One of my ways of managing resource demand is by generally preferring 720p media over 1080p or higher. And obviously when ripping DVDs, it’s either 576p or 480p. I do have a 4k TV, but it’s not extremely large, and while I can tell the difference in resolution between SD and HD, for almost everything, 720p seems to be good enough for me.

Podman.

Music Player Daemon (MPD)

Sometimes there are solutions that just work, and don’t really need to change. I think MPD is one of these. It’s been around for 23 years. While Gonic is great for listening to music on my phone, even streaming music from home to my phone while I’m away via VPN, MPD is how I play music through Snapcast to the whole house audio system. I run two instances of MPD, one for music, and one for podcasts.

Native.

PocketBase

I used to keep track of transactions and receipts for special accounts (HSA, 529, etc.) in a SQLite file I accessed directly with SQL Workbench/J. But things became more complicated as I moved between countries, currencies, and different insurance systems, and also wanted to offer my wife the ability to enter transactions. I migrated to PocketBase , which is ultimately still just a SQLite file, but with a nice web-based management frontend that I abuse as a generic CRUD frontend. It’s simple enough for my wife to use as well, and I can still run arbitrary queries against the underlying database file.

Native.

Readeck

Readeck lets me tag and archive copies of stuff I read. I was a heavy Zotero user in graduate school, but I’ve not needed to write a bibliography in years. However, I still read things that I want to ensure I can access later. I tried Wallabag first, but it had trouble archiving things that were paywalled, even when I was logged in on my phone. In contrast, Readeck will archive what my phone is seeing and store it on my server.

Native.

Samba

Samba provides shared network storage, making it easy to copy files to and from the server, or share important documents with my wife. It’s funny how a file sharing protocol first developed in the 1980s and most associated with Windows remains the best option for cross-platform file sharing on a LAN.

Native.

slskd

IYKYK .

Native.

Snapcast

Snapcast provides whole-house synchronized audio. Think Sonos, but without the expensive vendor lock-in and planned obsolescence. This also deserves its own post. It’s complicated to set up, but it works really well. I eventually plan to purchase some additional devices primarily for use as Snapcast receivers.

Native.

Syncthing

Syncthing is part of a backup strategy for my photos in Immich. I’ve set up a one-way sync (receive only) on my Macbook, so that a copy of all the photos in Immich eventually make their way to my Macbook’s external drive.

Native.

Transmission Daemon

This one is also self-explanatory .

Native.

Uptime Kuma

After a few instances of my wife saying “X isn’t working” and needing to restart a service manually, I realized I needed a way to keep track of what services were running, or not. Uptime Kuma is simple but has a useful set of features. I can ping devices to ensure they’re online, check the status of Podman containers, look for HTTP 2XX response codes from various services, or even parse a JSON payload and extract some details for the health check. If something goes down, I can send a Gotify notification (after a few retries, of course).

Podman.

Vaultwarden

Self-hosted version of Bitwarden. For years, I used KeePass , but never had a good syncing solution, so just avoided logging into things on my phone. Meanwhile, my wife used LastPass, which had various breaches and incidents, besides autofill just not working very well. Migrating her to KeePass was not practical, and I settled on VaultWarden , which is an open-source API-compatible reimplementation of BitWarden that works with the official BitWarden clients. I’m not a huge fan of the BitWarden browser extension, but it’s mostly fine. The Android application is good enough, and syncs seamlessly and automatically when I’m connected to my LAN; otherwise, I can connect via VPN and manually trigger a sync if needed.

I am a little concerned that Bitwarden may eventually become hostile to VaultWarden and break the client compatibility. At this point, the only other major Bitwarden compatible client I’m aware of is Keyguard , which does not have an open source license and uses a freemium model.

Podman.

Vikunja

I’ve been a Trello user for about a decade. But after Trello’s disastrous multi-day outage earlier this year, I decided to find a self-hosted alternative. I ruled out anything that involved spinning up a PostgreSQL or MySQL database for a service that will serve two users. Vikunja uses SQLite by default, though it can be configured to use other database backends. It’s not perfect, and the Android application has some missing features, but it’s good enough for me. Single binary deployment? Yes, please.

Podman.

Yubal

Simple web application to download YouTube Music playlists. I normally use yt-dlp for downloading YouTube videos, or NewPipe for watching on my phone, but Yubal will properly name, organize, and tag music downloaded from YouTube Music.

Podman.

Non-Services

Here are a few things I don’t self-host, tried but decided against, or am unlikely to try.

The *arr Stack

Sonarr, Lidarr, Radarr , etc. Every time I read about setting it up, it just sounds like a resource-intensive mess that’s fundamentally prone to frequent breakage. That’s the opposite of what I’m looking for when choosing self-hosted services.

Collabora Online

While it would be nice to completely part ways with Google, it’s hard to beat Google Docs as a highly convenient and easily accessible way to store and share information. Still, I choose LibreOffice Writer and Calc unless I have a specific reason why the document needs to be in the cloud. Since I already have a shared network drive, it seems pointless to run a service like Collabora Online (a web-based office suite) instead of just using LibreOffice locally.

Firefly III

I tried Firefly III before Actual Budget, thinking I needed built-in support for multiple currencies. It was a complex setup, involving multiple containers, including a container just for importing data. Actual Budget was much simpler to set up and use. For my foreign currency accounts, I have my own simple script to handle exchange rate conversion, so everything in Actual Budget stays in USD.

Owntracks

I like Google Maps Timeline, but after Google limited the location data to the individual device, I hoped to find a self-hosted version. But I could never get the OwnTracks Android application to consistently report my position, no matter how many battery or location settings I tried. Dawarich is another option in this space, but it wants to run “at least” four containers (PostgreSQL, Redis, Sidekiq, web application). For me, that’s not a compelling trade of resources required versus value I’m likely to obtain.

Music Assistant

Music Assistant might work better for you if you don’t already have a music setup you like. In my case, I already had Gonic, Snapcast, and MPD working well. Music Assistant felt like it wanted to “own” everything; for example, it seemed to continually rearrange my Snapcast device groups.

E-mail

Self-hosting e-mail seems like a lot of work for very little benefit. I cannot risk not being able to send or receive e-mails. Eventually I would like to transition away from Gmail to a paid provider.

Conclusion

That’s 17 native services and 11 Podman services, all managed by systemd. htop currently shows about 7.5 GB of memory in use, and CPUs fluctuating between 30% and 40%. It turns out this Mini PC can run a lot! Given how expensive computer hardware has become due to the AI crunch, I hope we’ll continue to see self-hostable projects that prioritize simplicity and efficiency.

Why are we even doing all this?

Hacker News
terrytao.wordpress.com
2026-10-15 16:22:50
Comments...
Original Article

[This is a guest post by Rikab Gambhir . This blog post was initially written in a different file format and converted using AI. — T.]

First, they came for the artists,
and I did not speak out, because I was not an artist.
Then, they came for the mathematicians,
and I did not speak out, because I was not a mathematician.
Then, they came for the physicists,
and it was actually really cool and they gave me free tokens and promised to solve my entire field for me and now I can finally devote myself to the important work of publishing papers instead of doing physics

In early October, OpenAI fulfilled every mathematician’s childhood dream.

I am not a mathematician myself (merely a theoretical particle physicist, which some argue barely counts as a scientist either), so I can’t 100% say for certain what inspires someone to pursue mathematics. But, I imagine this dream is common to all academics:

Looking up at the stars in wonderment, or enjoying a complex puzzle game, or being inspired by an encouraging teacher, and dreaming that one day an unfeeling corporate robot[1] will burn a rainforest to compile a list of 700 highly obscure barely-readable facts that *might* be true that nobody can understand as part of a marketing gimmick to raise hype for an IPO[2] .

This is probably why most of you reading this got into academia. At least, that’s why I did.

In 1941, Jorge Luis Borges imagined a library containing every possible book that could ever be written. Somewhere in this Library of Babel is a proof of the Riemann hypothesis, the complete all-orders theory of quantum gravity, and all the papers I will ever write. Of course, there are also incorrect proofs, theories, and misleading Lean certificates , but that is besides the point.

By the research standards of 2026, Borges’s Library of Babel would be the most successful research institution in human history, containing an inconceivably large number of potentially correct mathematical and physical results, blowing OpenAI’s mere 722 write-ups and even the physics community’s recent 2500 write-ups out of the water.

Of course, most recognize that Borges was a visionless fool who failed to recognize the commercial potential of his library, as he never actually built it. He did not have the entrepreneurial STEM-spirit to raise venture capital, launch an IPO, and announce that he had the potential to solve all of mathematics. He was too concerned about the futility of sorting through randomized slop trying to understand what is correct and what isn’t and how to understand it all. But what did Borges know? He was only a writer, and we have already established that artists are obsolete.

Fortunately, OpenAI has brought us one step closer to realizing Borges’s vision. Rather than generating every possible mathematical paper, they’ve found a way to probabilistically generate things that look correct. An important aspect of this increase in efficiency is outsourcing the tedious, unprestigious, and unprofitable work of determining the actual correctness and understanding to the mathematics community (in the past, this was reserved typically for the group writing the paper), while also not wasting any time making the papers human-comprehensible. This is, of course, a tremendous breakthrough. In centuries past, scientists and mathematicians were limited in their ability to solve problems by their ability to understand the solutions. This bottleneck has been removed, and now there is no theoretical limit to the amount of scientific and mathematical factoids we can fail to understand.

From what I know about the academic community (mostly from Twitter and LinkedIn, which I assume are representative), there seems to be near-unanimous agreement that the purpose of math and science research is to gather a large quantity of potentially true factoids in a repository that nobody will actually ever read, in a ritual called “advancing humanity’s[3] knowledge”. That these results are well-written, understandable, pleasant to read or look at, or even completely correct is a secondary concern — in fact, in the pursuit of advancing humanity’s knowledge as quickly as possible, many academics will recoil in anger at the suggestion that it is worth spending any time making results understandable to humans. It is inefficient to explain or check a result when those resources can be spent generating another.

This aligns with my own lived experiences — I didn’t become a theoretical physicist to learn about the universe or better appreciate the beauty of nature myself (that’s philosophy, which I would never be a doctor of). Nor did I spend years learning to write code, make pleasing plots, or craft well-written papers for the simple satisfaction of creating something (that’s art, and we’ve already established that art is obsolete). Rather, I became a physicist to stare at large databases of histograms produced by a Lovecraftian-autocomplete of dubious correctness and say “yeah that’s probably ok I guess” to add to humanity’s knowledge frontier.

I live to serve the knowledge frontier and nothing else .

Math and science are about cold, hard answers, just as art is about producing images, music is about producing sound waves, and literature is about producing strings of text. These things exist to be consumed as content. No rational person, least of all us masters of rationality in STEM, pursues these for the joy of creation, learning, or beauty — all of these are inefficiencies, and we mustn’t be inefficient lest we stifle humanity’s progress. LLMs are not burdened with these inefficiencies, and they will be merely the pursuits of those left behind with nothing more productive to do all day.

Personally, I look forward to the day when ChatGPT can enjoy a sunset or a nice meal on my behalf and free up my time, in the same way I save time on scenic hikes using Uber. And now that AI has solved all our problems, we can devote ourselves to more important work: going into quantitative finance, vibecoding sports-betting apps, consuming AI-generated TikTok shorts, and arguing with political bots on Twitter.

Ultimately, this isn’t just about mathematics or physics — it’s about fundamentally reimagining what it means to be human. By outsourcing the burdens of curiosity, creativity, and understanding, we can finally focus on what matters most: generating value, maximizing productivity, and accelerating progress towards the ultimate goal of science: a complete repo of potentially true facts in a Library of Babel that nobody will bother reading.

And honestly? That’s rare.

By Rikab Gambhir (The @ finitephysicist )

Thank you to Terry Tao and Rachel Ward for the opportunity to write a guest blog post! And thank you to Radha Mastandrea, Benoit Assi, Manuel Szewc, Jure Zupan, and Jesse Thaler for their feedback on this essay.

Remember why you chose to go into science and math in the first place!

[1] To be clear, in your childhood dream, you don’t get to make the robot yourself. It’s a giant corporation’s robot that they made in part by stealing things from you and your friends. It’s also not a particularly cool or robot, it can only talk in HR-speak.

[2] To be clear, in your childhood dream, it’s somebody else’s IPO and they get all the money, not you.

[3] Here, “humanity” is metaphorical, and does not refer to any actual real person understanding anything.

On the technical actions needed to ensure the continuity of UTC

Lobsters
www.bipm.org
2026-10-15 16:22:14
No more leap seconds. Sorry, about the title, but I couldn‘t resist. Comments...
Original Article

Resolution 5 of the 28th CGPM (2026)

On the technical actions needed to ensure the continuity of UTC

The General Conference on Weights and Measures (CGPM), at its 28th meeting,

recalling that

  • the CGPM, when adopting Resolution 2 “On the definition of time scales” at its 26th meeting (2018),
    • confirmed that Coordinated Universal Time (UTC) is a time scale produced by the International Bureau of Weights and Measures (BIPM) with the same rate as International Atomic Time (TAI), but differing from TAI only by an integral number of seconds,
    • stated that UTC is the only recommended time scale for international reference and the basis of civil time in most countries,
  • the CGPM, when adopting Resolution 4 “On the use and future development of UTC” at its 27th meeting (2022),
    • recalled that the offset by an integral number of seconds is due to the agreement maintained between UTC and the time scale describing the angular rotation of the Earth (UT1),
    • decided that the maximum value for the difference |UT1-UTC| will be increased in, or before, 2035, to ensure the continuity of UTC for at least a century,
    • requested the CIPM to draft a resolution for the 28th meeting of the CGPM (2026),

recognizing that

  • industrial users and the synchronization needs of national critical infrastructures, for example transportation, energy distribution, telecommunication, and space projects require UTC to be continuous without any future adjustment,
  • for some applications it is necessary to fix a maximum value for the difference |UT1-UTC| to appropriately design the software underlying operational systems,
  • in many countries there are differences of more than one hour between local apparent solar time and civil time due to the choice of time zone, and changes of an hour are regularly introduced when daylight-saving time is used,

further recognizing that

  • users of UT1 can find information on the value of the difference UT1-UTC in the Global Navigation Satellite Services (GNSS) navigation messages, and internet services provided by the International Earth Rotation and Reference Systems Service (IERS), National Metrology Institutes (NMIs), and other services,
  • the International Telecommunication Union Radiocommunication Sector (ITU-R), through its Working Party 7A, is studying possible updates of the code for the transmission of the difference UT1-UTC by radio stations and Resolution 655 (REV.WRC-23) resolved to “establish a transition period for implementation and allow for the possibility to disseminate the increased difference between UT1 and UTC via radiocommunication system until 2035, but no later than 2040, in cases where existing equipment cannot be replaced earlier”,

noting that

  • a workshop organized by the Consultative Committee for Time and Frequency (CCTF) and IERS in March 2025, which included experts on Earth rotation, estimated that the probability of a negative leap second will increase rapidly in the near future, reaching a 30 % probability by 2035,
  • a negative leap second has not previously been applied, and it is considered to pose a high risk of causing anomalies and disruption to critical infrastructures that are largely unprepared, and the preparation would create, for the industries that rely on time synchronization, a need for financial investment, whose amount is estimated to be similar to their preparations for the millennium bug,
  • the growing influence of IoT (Internet of Things) technologies, dispersed multi-sensor systems, smart grids, and virtual services for contemporary society, creates an increasing risk of malfunction in operation of systems and services with the insertion of any leap second, especially with a negative one,
  • the use of different mitigation methods for leap second introductions by global service providers in their server systems, in order to avoid time steps, leads to inconsistency in timing between different systems and in the disseminated time and frequency, which do not conform to the SI unit,
  • international organizations including the International Telecommunication Union Telecommunication Standardization Sector (ITU-T), the International Union of Radio Science (URSI), international working groups such as the Institute of Electrical and Electronics Engineers (IEEE) 1588, and individual industry representatives have provided formal statements to the BIPM on the need to bring forward the implementation of UTC as a continuous time scale to avoid the risk of the insertion of a negative leap second,
  • the additional risk of a delay in updating UTC could cause some user organizations to change their reference time scales to, for example, a GNSS time instead of UTC, seriously compromising the concept of international standardization in metrology,

welcoming

  • the excellent collaboration between the BIPM and the ITU-R and the endorsement of CGPM Resolution 4 (2022) at the World Radiocommunication Conference by Resolution 655 (REV.WRC 2023),
  • the support and engagement of the IERS to take all necessary measures to change its operational provision for, and its announcement of, leap seconds according to the CGPM resolutions,

decides that

  • continuous UTC will become effective on 20 May 2027,
  • the maximum value for the difference |UT1-UTC| will be 3 600 seconds (1 hour), ensuring the long term continuity for UTC for several centuries,

requests the BIPM

  • to continue to collaborate with the International Telecommunication Union (ITU), International Astronomical Union (IAU), International Union of Geodesy and Geophysics (IUGG), IERS, and other organizations that may be impacted by this decision in order to
    • inform users and support the application of this decision,
    • continue to monitor the value of UT1-UTC, its estimated evolution and modelling as determined by the IERS,
    • inform the CIPM regularly on the evolution of the value of UT1-UTC,
  • and to continue to work with the Regional Metrology Organizations, the NMIs, and users to promote the understanding of the importance of a continuous UTC and its prompt and efficient provision to the users.

https://www.doi.org/10.59161/CGPM2026RES5E

The reader should note that the official version of this Resolution is the French text

Our Lawsuit Against the Trump Administration’s Social Media Surveillance Moves Forward. Here’s What the Court Said.

Electronic Frontier Foundation
www.eff.org
2026-10-15 16:08:58
No one should have to choose between speaking freely and protecting their immigration status. Yet that’s precisely the choice the Trump administration’s mass surveillance of online speech forces on noncitizens living in the U.S.    Last fall, we sued on behalf of three major labor unions to stop thi...
Original Article

No one should have to choose between speaking freely and protecting their immigration status. Yet that’s precisely the choice the Trump administration’s mass surveillance of online speech forces on noncitizens living in the U.S.

Last fall, we sued on behalf of three major labor unions to stop this surveillance program. And just this month, we won our first major ruling: A federal district court denied the government’s motion to dismiss our lawsuit. This means the case can move forward—a win for free speech and a critical step in protecting our First Amendment rights online. We’ve already explained why this is a big deal for our clients, so let's take a closer look at the court’s reasoning.

Our Lawsuit

Since taking power, the Trump administration has used AI and other automated tools to broadly surveil the social media and online speech of visa and green card holders, with the goal of identifying and punishing people who express views it opposes. The government is targeting a broad range of views, including criticism of the Trump administration ; support for Palestine or criticism of Israel ; “rationalizing or making light of” Charlie Kirk’s murder; and anything nebulously “hostile” to American culture, founding principles , “traditional American views,” or “our way of life.”

It has paired that surveillance with a public intimidation campaign. High-ranking officials have explicitly threatened to punish noncitizens for their online speech, then followed through with a series of terrifying viewpoint-driven enforcement actions. This has led to a significant chilling effect on speech, not just for noncitizens, but also for their families, coworkers, and friends.

In response, three major labor unions—the United Auto Workers (UAW), the Communications Workers of America (CWA), and the American Federation of Teachers (AFT)— sued the Departments of State and Homeland Security alleging that this viewpoint-based surveillance program violates the First Amendment and the Administrative Procedure Act (APA). The unions are represented by EFF, Muslim Advocates (MA), and the Media Freedom & Information Access Clinic (MFIA).

The government moved to dismiss our lawsuit, arguing first that federal immigration law prevents federal district courts from hearing the case, and second, that the unions don’t have “standing” to sue. Judge Alvin K. Hellerstein of the Southern District of New York rejected both arguments and allowed the case to proceed. At this stage in the litigation, the court accepted all of the facts in our complaint as true and analyzed the law based on those facts. We will now prove these facts as the case proceeds.

Federal Immigration Law Doesn’t Block Our Lawsuit

The government first argued that the court had no power to hear our case at all. It pointed to three provisions of the Immigration and Nationality Act (INA) that restrict when federal courts can review immigration matters. The district court disagreed and rejected each provision in turn.

The first provision, 8 U.S.C. § 1252(b)(9) , is often called the “zipper clause.” It bars federal courts from hearing challenges that arise from efforts to deport someone, except through review of an individual’s final removal order. The government claimed the zipper clause applies here because our lawsuit is really an effort to stop it from initiating adverse immigration actions.

The district court wholly rejected this argument. Relying on the Second Circuit’s decision in Ozturk v. Hyde , it held that the zipper clause bars only challenges to a particular individual’s removal proceedings, not a lawsuit like ours that challenges the constitutionality of the surveillance program itself. That the surveillance program might affect someone’s immigration proceeding down the line doesn’t turn our lawsuit into a removal challenge.

The court similarly rejected the government’s argument that § 1252(g) and § 1252(f)(1) prevent federal courts from hearing this case. Our suit, the court explained, “challenges the constitutionality of a government policy that is collateral to any active removal proceedings,” so § 1252(g) doesn’t apply. And § 1252(f)(1) only limits what kind of relief a court can give. So while the court may not be able to stop a particular person’s removal proceedings, it can still block “an unlawful surveillance program that suppresses free speech.”

The Unions Have Standing to Sue

To sue in federal court, a plaintiff must show that it has “standing” to bring its claims. This requires a plaintiff to show an “ injury in fact ” that is, among other things, “concrete.” That’s often a high bar in surveillance cases, where plaintiffs can’t easily see what the government is doing behind the scenes. And the Supreme Court has held that a person’s mere subjective fear of surveillance is too speculative to confer standing.

Even so, our plaintiffs cleared the bar. The court held that the unions alleged concrete injuries, including a chill on members’ speech that is objectively reasonable, not just subjectively felt. It found that the unions had established standing in two ways: “organizational standing,” based on the unions’ own injuries, and “associational standing,” based on injuries the unions’ members have suffered.

Organizational Standing

The court first held that our plaintiffs had successfully alleged an injury to the unions themselves (injury was the only aspect of organizational standing the government disputed). The surveillance program has harmed the unions’ ability to carry out their core responsibilities, including “organizing their members and advocating for the unions’ goals.” The court made two key points:

1. Unions Are Injured When Members Go Silent

As we explained in our complaint , the surveillance program has caused members to step back from union leadership roles; stop participating in union activities online and in person; remove their names from union webpages; and avoid filling out bargaining surveys. Members who might otherwise spread the unions’ message and raise awareness of union issues are staying quiet, hampering the unions’ ability to organize. The court said this amounts to a concrete injury for purposes of standing.

2. Surveillance Doesn’t Need to Target Pro-Union Speech

The court also rejected the government’s claim that members’ retreat from union activities was “essentially an overreaction,” because the surveillance doesn't target pro-union views. The court said this misunderstands the issue: “the question is whether the Government’s conduct would deter a person of ordinary firmness from engaging in protected activity, not whether the specific expression a member forgoes is itself among the viewpoints the Government disfavors.”

Here, the surveillance program monitors noncitizens’ online activity indiscriminately, and members “cannot reliably predict which of their activities will be captured” and attributed to a disfavored viewpoint. What’s more, the court noted, the unions’ organizing often happens alongside the very advocacy the government is alleged to target, “including pro-Palestine and anti-ICE activism on college campuses.” That makes members’ retreat from union activity a foreseeable consequence of the program.

Associational Standing

The court also held that the unions established associational standing to sue on behalf of their members. Of the three requirements for associational standing, the government challenged only two. It argued that members lacked sufficiently concrete injuries to sue in their own right, and that the claims aren’t “germane” to the unions’ purpose.

The court disagreed and found associational standing for every claim but one: members’ right to receive information. That claim survives anyway, because the unions’ organizational standing covers it. Along the way, the court made several important rulings.

1. The Ongoing Surveillance Is a Present Injury

As a threshold matter, the government argued that our case is a “pre-enforcement challenge,” meaning we sued before the government actually punished anyone. That would trigger a different test, and the government argued we failed it because we hadn’t alleged a sufficiently imminent threat of prosecution.

The court disagreed, explaining that “Plaintiffs’ allegations are of an ongoing surveillance program that is actively chilling the speech of their members and otherwise causing harm.” That chilling effect is a First Amendment injury even if there isn’t a direct prohibition on speech. And when government conduct is actively chilling speech right now, a challenge to it isn’t pre-enforcement.

2. Surveillance + Public Threats Reasonably Chills Speech

The court rejected the government’s argument that we alleged only a generalized, subjective, speculative fear of surveillance, explaining that “the chilling effect” of the program can “itself be an injury when the plaintiffs are surveilled.” Here, plaintiffs have alleged that their members are under active surveillance, which has had objective chilling effects on their speech. And the government is targeting certain disfavored viewpoints, making it “viewpoint discrimination” that is “presumptively unconstitutional.”

The chill is also objectively reasonable, the court held, because the government has extensively publicized the surveillance program through public statements and social media posts, making clear that noncitizens who post disfavored views will be targeted for removal. Notably, the court agreed with us that the “threat of adverse immigration consequences, under a government whose harsh immigration crackdowns has been heavily publicized and reported on, is certainly enough to deter a person of ordinary firmness from the exercise of First Amendment rights.” This is a concrete injury sufficient for standing.

3. Demanding Social Media Handles Also Causes Harm

Under the surveillance program, applicants for certain immigration benefits must disclose all social media handles they have used during the preceding five years and, in some instances, maintain public social media accounts . The district court held that this too amounts to a First Amendment injury, undermining the rights to anonymity and freedom of association.

The judge pointed to one CWA member we identified, a lawful permanent resident with a pending naturalization application who is subject to the five-year disclosure requirement. The member has deleted one social media account, set another to private, and removed past posts expressing disfavored views. These allegations, the court said, show an actual and objectively reasonable injury due to the government’s surveillance program.

4. General, Public Threats Can Still Be Coercive

We also argued that the Trump administration is waging a campaign of coercive threats to suppress disfavored speech, which the First Amendment prohibits. The court agreed that this campaign can be an actionable injury of its own.

Notably, the court held that it didn’t matter that the government’s statements were not specifically targeted at certain individuals, and were instead made on social media or to the public. In this case, the court explained, “the number, severity, and high-profile examples of action upon those threats are such that a reasonable person would perceive the communication as coercive.”

That means it’s reasonable that the unions’ members “would, and did, limit their public speech on disfavored viewpoints” in response. That the threats were made to the general public “does not diminish this injury,” as the very purpose of the challenged surveillance program is to intimidate noncitizens into silence.

5. Free Speech is Central to Union Functioning

The court also found that the unions met the second prong of associational standing. It held that the unions’ interests in protecting their members’ rights to speak freely, organize, and advocate, are “germane” to the unions’ missions. The court put it plainly:

The freedom of Plaintiffs’ members to speak, associate, and appear publicly is not incidental to union work, but rather is the mechanism through which unions recruit, organize, communicate, and bargain. A program alleged to silence members and drive them from the unions’ rolls therefore strikes at the unions’ representational function itself.

Next Steps

When the government surveils what people post online and threatens to punish them for their viewpoints, the result is exactly what our clients have experienced. Members have deleted their accounts, scrubbed posts, and withdrawn from union activities.

The government must now answer our complaint and we will move forward with the discovery process, in which we anticipate getting more information from the government about its surveillance program. We look forward to continuing to prove our case.

Everybody Deserves to Sweat in Public

hellgate
hellgatenyc.com
2026-10-15 16:00:08
A sauna for the people. Plus: What a museum retrospective of 1970s music tells us about today....
Original Article

Hello, Julianne Escobedo Shepherd here. Adlan Jackson is currently on vacation, so I will be your host for today's edition of Cultural Capital, Hell Gate's newish, biweekly arts and culture newsletter, in which we deliver a critical eye on the city scene. Subscribe to it here . A little further down, we’ll give you nightlife recommendations, capsule reviews, and a recap of what’s come across New York City’s last real local culture desk. Before that, Katie Way tells us one cool way to sweat in public that isn't dancing.


Gabe Bender wants New Yorkers to bathe in public. It's why he founded CUL DE SAC , the nonprofit billed as the city's first outdoor community sauna, and it's why he and his team work hard to get first-timers on a wooden bench and sweating for little to no cost.

"One in four New Yorkers has had a mental illness in the past year. That's basically the size of the population of Manhattan. Saunas can go a long way in providing preventative or complementary care for people who need that," Bender told Hell Gate. "We should also have public community saunas as infrastructure, as municipal structures, for people to go to and use in the way that you can go to a park or a community garden or a basketball court in New York City."

In fact, New York City needs community saunas urgently, according to Bender—a need that he and his team have been filling with free sessions for homeless LGBTQ+ youth via New Alternatives and the Ali Forney Center , for New York City Public School employees, and for longtime East Village residents via the Loisaida Center .

Give us your email to read the full story

Sign up now for our free newsletters.

Sign up

New Withings Users Must Pay $99/Year for Apple Health Syncing

Hacker News
support.withings.com
2026-10-15 15:55:49
Comments...

Android gets AI defenses against messaging scams, fake calls

Bleeping Computer
www.bleepingcomputer.com
2026-10-15 15:48:43
Google announced new AI-powered defenses against scam messages and call-forwarding abuse on Android, currently rolling out to eligible devices. [...]...
Original Article

Android gets AI defenses against messaging scams, fake calls

Google announced new AI-powered defenses against scam messages and call-forwarding abuse on Android, currently rolling out to eligible devices.

The new measures aim to address the increased sophistication of scams targeting mobile users, including fraudulent bank alerts and voice-cloning attacks.

“Mobile scams have evolved far beyond basic robocalls and phishing texts, turning into sophisticated operations that use spoofed numbers, fake bank alerts, and AI voice cloning,” Google says .

“With scams growing harder to spot, it’s nearly impossible for users to catch every red flag themselves,” added the tech giant.

Google says its existing Phone and Messages scam detection flags more than 5 million suspected scam calls and texts monthly, but the new measures are expected to catch even more threats.

Cloud-based scam analysis

The new protections focus on Google Messages and rely on cloud-based Gemini-backed analysis for complex conversations, scrutinizing them for signs of fraud.

The system analyzes conversations with unknown senders within the encrypted Private AI Compute environment, protecting user privacy at all times.

The new mode also adds on-device Gemini Nano (local AI model) checks for unfamiliar links using real-time web signals, plus clearer warnings before opening links from unsaved numbers.

The new cloud-based protections are currently disabled by default, allowing users to activate them.

Text scam alert on Android
Scam alert on Messages
Source: Google

Other improvements

Apart from the Google Messages protection, Google has also implemented the enhancements in other areas of the Android system:

  • On-device scam detection in chat notifications, previously launched on Pixel , will reach hundreds of millions more users through Android device partners later this year.
  • Android’s existing sensitive-information masking is now expanding to Chrome and Android WebView, hiding login fields and payment screens during live screen sharing.
  • Android blocks apps from silently enabling call forwarding in the background and warns users before manually entered MMI forwarding codes take effect.
Call forwarding warning
Call forwarding warning
Source: Google

Google is also expanding its verified bank calls system, introduced earlier this year , adding financial institutions from more.

This system checks whether a real bank’s call center initiated an incoming call or if it is a spoofing attempt. If the verification fails, the call is automatically ended.

Google says that since June it has blocked over 3 million fraudulent calls of this kind for Banco do Brasil and Itaú Unibanco alone. Revolut and other global financial institutions are also supported.

Android users should upgrade to the latest release, keep apps updated, and independently verify caller/sender identities when receiving requests for account-related action or sensitive information.

article image

Build your security blueprint for AI-powered attacks

Join Mikko Hyppönen and security leaders from the NFL, CHANEL, and Atlassian for a two-hour digital summit on what AI-speed attacks change, what defenders should stop doing, and how to validate, decide, fix, and re-validate at machine speed.

Save your seat

Chirp Pong

Simon Willison
simonwillison.net
2026-10-15 15:47:52
Tool: Chirp Pong Another game experiment - I wanted to see if it was feasible to have a two player game on two separate phones running in static HTML where the networking code uses chirps sent via the microphone. It seems to work! Build a two player competitive pong like game where two play...
Original Article

Another game experiment - I wanted to see if it was feasible to have a two player game on two separate phones running in static HTML where the networking code uses chirps sent via the microphone. It seems to work!

Build a two player competitive pong like game where two players use their phones close to each other and the game state is sent via audio noises which the web microphone API can interpret - but add graphical and gameplay twists to make it a lot more fun and intertwine than pong

Claude Opus 5.5 Extra in Claude Code .