10 interesting stories served every morning and every evening.

GLM 5.2 and the coming AI margin collapse (part 1)

martinalderson.com

This is a two part se­ries fo­cus­ing on what I be­lieve is per­haps the least un­der­stood up­com­ing shift in AI eco­nom­ics. If you’ve en­joyed this and want to be no­ti­fied about the sec­ond post, please feel free to sign up for my newslet­ter.

The real DeepSeek mo­ment is upon us

What feels like decades ago, mar­kets re­coiled at DeepSeek’s R1 model. The the­ory be­ing that given the un­der­ly­ing V3 model re­port­edly cost un­der $6m to train, the mar­ket there­fore thought the huge in­vest­ment in capex for model train­ing was over, and thus the stock price of Nvidia et al col­lapsed overnight.

Of course, this was a hugely poor read of where the costs ac­tu­ally lie in AI. Training - while no doubt capex in­ten­sive - is a fixed, up-front cost. You spend hun­dreds of mil­lions to train a model, then you are done”.[1]

Inference, on the other hand, scales with your de­mand. It has gen­uine mar­ginal costs. I’ve writ­ten about this at length over the past year or so. Again, the main­stream un­der­stand­ing of this - that the API costs the providers charge are their real costs is mis­taken.

Indeed, when Anthropic/OpenAI charge $25/MTok for in­fer­ence, my nap­kin maths sug­gests that this is prob­a­bly some­thing like 90% gross mar­gin on the cost of com­pute vs the rack rate. It may be a bit higher, or a bit lower (OpenAI’s leaked fi­nan­cials sug­gest a ~60% gross mar­gin on rev­enue, but this no doubt in­cludes a lot of other costs like sup­port, pay­ment pro­cess­ing and other ser­vices they of­fer), but the whole busi­ness model of fron­tier AI labs is in short to spend a large amount of money on salaries on com­pute to train a model, then amor­tise that cost over a lot of very prof­itable in­fer­ence. If you can amor­tise that cost over enough in­fer­ence you turn from prof­itable on a COGS ba­sis to… ac­tu­ally prof­itable.

I have been play­ing around with GLM5.2 from Z.ai for the last cou­ple of weeks. I be­lieve GLM5.2 is the first model that reaches the bar” of a gen­uine open weights com­peti­tor to Opus and GPT (at the time of writ­ing, the lat­est ver­sion of GPT was 5.5 - fu­ture mod­els no doubt will ex­ceed this).

It’s gen­uinely very good and hard for me to tell the dif­fer­ence be­tween Opus - my daily dri­ver and it.

I’ve found that it is slow be­cause of the amount of think­ing it tends to do. For non in­ter­ac­tive agen­tic tasks (like re­view­ing PRs in the back­ground) which aren’t time crit­i­cal this is a non is­sue, but for in­ter­ac­tive use it is def­i­nitely a tad too slow to keep my at­ten­tion. This also some­what re­duces the cost ef­fec­tive­ness of it (more think­ing means more to­kens, which in­creases costs).

It also does­n’t have vi­sion sup­port. It’s funny how quickly I’ve gone from ba­si­cally never want­ing to use vi­sion (because it was so in­ac­cu­rate, I’d of­ten pause ses­sions when I caught it us­ing vi­sion), to us­ing it all the time - since Opus 4.7 in­tro­duced far higher res­o­lu­tion vi­sion ca­pa­bil­i­ties. It’s gen­uinely frus­trat­ing it not be­ing able to read im­age-based PDFs, screen­shots and de­sign files. I’m sure they have a more mul­ti­modal model in the works, but this is a sig­nif­i­cant weak­ness against the fron­tier labs.

Secondly, and some­thing I re­ally did­n’t ex­pect to be a blocker, is the lack of/​poor web search ca­pa­bil­i­ties. It turns out that nearly every agen­tic ses­sion does a lot of web search­ing for look­ing up items. Z.ai pro­vides a re­place­ment MCP for web search, but it’s pretty aw­ful and slow. Fireworks does­n’t pro­vide any, though they gave me a very vague an­swer say­ing they are al­ways look­ing to im­prove prod­ucts. I would take that as no plans per­son­ally, but let’s see.

I’ve man­aged to some­what work around this by telling the agent to use a CLI based web search like ddgr, but this is a real weak­ness right now. I am very bull­ish on the po­ten­tial of 3rd party web search APIs. This is ac­tu­ally a huge gap in what open weights model providers can of­fer, and it turns out great web search ca­pa­bil­i­ties are es­sen­tial for many agen­tic tasks. Regardless, this no doubt will be solved with time - there are many peo­ple build­ing web search in­dexes and it just re­quires the right part­ner­ships and plumb­ing in place.

Drop in re­place­ment

Where it gets re­ally scary for the fron­tier labs is how easy it is to mi­grate to open weights mod­els. Both Z.ai and Fireworks of­fer both an OpenAI com­pat­i­ble and Anthropic com­pat­i­ble end­point. This makes it ab­solutely triv­ial to use with Claude Code and Codex. You just set the base URL to point to your in­fer­ence provider, give it the API key and tell it to use GLM5.2.

Given Anthropic re­cently an­nounced (then back­tracked) on charg­ing API rates for claude -p non in­ter­ac­tive agen­tic use, you will find for many/​most of those use cases you can just drop in GLM in­stead. And for in­ter­ac­tive use, apart from the lack of vi­sion and slow(er) speed[2], it was gen­uinely al­most im­pos­si­ble for me to re­alise I was­n’t us­ing Opus in Claude Code.

This is not Microsoft or Salesforce like lock in, where you need to spend years plan­ning a mi­gra­tion. The switch­ing costs are in­cred­i­bly low, and I would ar­gue that are ac­tu­ally far less than try­ing to keep up on all the pol­icy and term changes that the fron­tier lab mod­els tend to scram­ble around with. It’s pos­si­ble that Claude Code will make it harder to use 3rd party providers, but there are many good open source op­tions (like Codex it­self and OpenCode, amongst dozens).

One con­cern I do hear from en­ter­prise is data pri­vacy and se­cu­rity. There is no doubt that us­ing Z.ai’s of­fi­cial API and sub­scrip­tion is al­most cer­tainly a non-starter, with their terms be­ing at best weak and the deep con­nec­tion to Mainland China. But of course, with open weights be­ing open there are many other providers in the mar­ket, many with proper con­trac­tual pro­vi­sions. And, if that is­n’t enough, you can of course host in on premises your­self, which ac­tu­ally opens up even more sen­si­tive data - that could­n’t be sent to any third party - to Opus-quality agen­tic work­flows.

Cost sav­ings

The go­ing rate for GLM5.2 seems to be around the $4.40/MTok mark. This is less than 20% of the re­tail price of Opus and ~15% the cost of GPT5.5. Now, given it does use more to­kens for a given task, this is­n’t a to­tally ap­ples to ap­ples com­par­i­son. But I’d be very sur­prised if it was­n’t more than 50% cheaper for nearly all work­flows, for a very sim­i­lar level of qual­ity.

In terms of sub­scrip­tions, Z.ai of­fers a coding plan” sub­scrip­tion which mir­rors the plans you’d see from Anthropic and OpenAI, but with a higher claimed us­age limit. I ex­pect for most pro­fes­sional use the very lax terms around train­ing and data re­ten­tion will make this a dif­fi­cult sell, but if the fron­tier labs were to try and in­crease pric­ing sub­stan­tially I can see it be­ing a cred­i­ble op­tion for those that are bud­get-con­scious.

I ex­pect these costs for GLM5.2 to come down sig­nif­i­cantly over the com­ing months as well, as more op­ti­mi­sa­tion is done to the serv­ing stack(s). Wafer wrote an in­ter­est­ing write up of their ef­forts to run it on AMD hard­ware. They sug­gest that it is 2.75x cheaper per to­ken to run in­fer­ence on AMD vs Nvidia Blackwell.

Part two is where this gets in­ter­est­ing - what a col­lapse in in­fer­ence mar­gins ac­tu­ally does to the in­dus­try, and who is likely to win and lose. I’d keep Bezos’s fa­mous your mar­gin is my op­por­tu­nity” line in mind. If you’d like me to drop it in your in­box the mo­ment it’s out, sign up to the newslet­ter - or grab the RSS feed if that’s more your thing.

Disclosure - Fireworks kindly gave me some free credit to ex­per­i­ment with GLM to help write this ar­ti­cle.

This is a sim­pli­fi­ca­tion - the fron­tier labs are ef­fec­tively train­ing new mod­els con­stantly to stay com­pet­i­tive, so it’s re­ally a rolling cost rather than a true one-off. The key dis­tinc­tion still holds though: un­like in­fer­ence, that cost does­n’t scale with how much cus­tomers ac­tu­ally use the prod­uct. ↩︎

This is a sim­pli­fi­ca­tion - the fron­tier labs are ef­fec­tively train­ing new mod­els con­stantly to stay com­pet­i­tive, so it’s re­ally a rolling cost rather than a true one-off. The key dis­tinc­tion still holds though: un­like in­fer­ence, that cost does­n’t scale with how much cus­tomers ac­tu­ally use the prod­uct. ↩︎

To be fair, the slow­ness is mostly the model think­ing a lot rather than the serv­ing it­self - Fireworks launched GLM5.2 at gen­uinely quick to­kens/​sec, which was a huge im­prove­ment and well worth keep­ing an eye on, though in prac­tice I found it a bit tem­pera­men­tal at how fast it ac­tu­ally was. ↩︎

To be fair, the slow­ness is mostly the model think­ing a lot rather than the serv­ing it­self - Fireworks launched GLM5.2 at gen­uinely quick to­kens/​sec, which was a huge im­prove­ment and well worth keep­ing an eye on, though in prac­tice I found it a bit tem­pera­men­tal at how fast it ac­tu­ally was. ↩︎

GitHub - MaximeRivest/riddle: The diary of Tom Riddle for the reMarkable Paper Pro — write with your pen, the page drinks your ink and answers in a flowing hand

github.com

Write on the page with your pen. After a pause, the di­ary drinks your ink — your words fade into the pa­per — the page thinks for a mo­ment, and an an­swer writes it­self back in a flow­ing hand, stroke by stroke, then fades away.

No screen glow, no key­board, no chat UI. Just ink ap­pear­ing on pa­per.

This is the di­ary from the demo.

🪄 New to this? Start here

You need a re­Mark­able Paper Pro in de­vel­oper mode with a launcher in­stalled. If that sounds like a lot, it is­n’t — remagic walks you through turn­ing on de­vel­oper mode and sets up every­thing with one com­mand. Come back here, drop rid­dle in, and start writ­ing to Tom.

Already have xovi + AppLoad? Install from the remagic cat­a­log, grab the pre­built bun­dle, or build from source.

Install with remagic (easiest)

remagic in­stall rid­dle # check­sum-ver­i­fied down­load → AppLoad remagic con­fig rid­dle # set­tings form in your browser (+ QR for phone)

Then in AppLoad: tap Reload, then The Diary. Write, and rest your pen. (Or in­stall it from the Store app right on the tablet.)

Install the pre­built bun­dle

Grab rid­dle-<ver­sion>.zip from the lat­est re­lease and un­zip it into a folder: un­zip rid­dle-*.zip -d rid­dle

Copy the folder to your tablet: scp -O -r rid­dle root@10.11.99.1:/​home/​root/​xovi/​ex­thome/​ap­pload/

Add an API key: cp or­a­cle.env.ex­am­ple or­a­cle.env in that folder and put your RIDDLE_OPENAI_KEY in it (any OpenAI-compatible key). Or skip it to use pi.

In AppLoad: tap Reload, then The Diary. Write, and rest your pen.

⚠️ This mod­i­fies your de­vice. The pre­built bun­dle and the cat­a­log build run in takeover mode: tap­ping The Diary stops the whole re­Mark­able UI and takes the screen. Leave with a 5-finger tap — xo­chitl restarts au­to­mat­i­cally. It runs as root and dri­ves the e-ink en­gine di­rectly. It has only been tested on a re­Mark­able Paper Pro (ferrari, aarch64, OS 3.26 – 3.27). It may not work on other mod­els or OS ver­sions, and you use it en­tirely at your own risk. Not af­fil­i­ated with re­Mark­able AS. Keep SSH ac­cess work­ing be­fore you in­stall any­thing — if any­thing ever wedges: ssh root@10.11.99.1 systemctl start xo­chitl’.

⚠️ This mod­i­fies your de­vice. The pre­built bun­dle and the cat­a­log build run in takeover mode: tap­ping The Diary stops the whole re­Mark­able UI and takes the screen. Leave with a 5-finger tap — xo­chitl restarts au­to­mat­i­cally. It runs as root and dri­ves the e-ink en­gine di­rectly. It has only been tested on a re­Mark­able Paper Pro (ferrari, aarch64, OS 3.26 – 3.27). It may not work on other mod­els or OS ver­sions, and you use it en­tirely at your own risk. Not af­fil­i­ated with re­Mark­able AS. Keep SSH ac­cess work­ing be­fore you in­stall any­thing — if any­thing ever wedges: ssh root@10.11.99.1 systemctl start xo­chitl’.

How it works

pen (raw evdev, full 4096-level pres­sure, hard­ware event rate) │ strokes ▼ rid­dle ── idle 2.8s → com­mit page → PNG ──► or­a­cle (resident LLM process, │ streams re­ply sen­tence-by-sen­tence) ▼ strokes (Dancing Script → skele­tonized to sin­gle-pixel pen paths) dis­play back­end ├── qtfb — win­dowed, in­side xo­chitl (build-from-source flavour) └── quill — full takeover: xo­chitl stopped, ven­dor e-ink en­gine dri­ven di­rectly for in­stant ink (lowest la­tency there is; what the pre­built bun­dle runs)

rid­dle/ — the app (Rust). Pen in­put, ink sur­face, hand­writ­ing syn­the­sis (rasterize → Zhang-Suen thin­ning → stroke trac­ing → an­i­mated re­play), the or­a­cle process man­ager, and both dis­play back­ends.

quill/ — the takeover dis­play host (C/C++). An epfb-re-style QImage-constructor in­ter­po­si­tion shim over the ven­dor libqs­gepa­per.so wave­form en­gine, ex­posed as a small C ABI (quill_init / quil­l_buffer / quil­l_swap) that rid­dle links against with –features takeover. Also car­ries a small fam­ily of demos (scribble, a pen-to-glass la­tency test, plus map, im­age, and GIF ren­der­ers).

Gestures

In the win­dowed (qtfb) flavour, xo­chitl keeps the touch­screen and the power but­ton: close the di­ary from AppLoad in­stead.

The di­ary re­mem­bers

Every fin­ished page is kept — your ac­tual pen strokes, a tran­scrip­tion, and Tom’s re­ply — so the di­ary can do three things:

Follow the con­ver­sa­tion. Recent pages ride along with each re­quest, so Tom re­mem­bers what you wrote yes­ter­day (both back­ends, same be­hav­ior).

Conjure the past. Ask in ink — show me the page about the gar­den”, find what I wrote on Tuesday” — and the di­ary rewrites that page in front of you, in your own hand, dated, in faded ink. No but­tons, no lists, no chrome: the pen is the only in­ter­face.

Answer from mem­ory. What do you re­mem­ber?” gets a hand­writ­ten in­dex.

Memories live only on the tablet, in plain files un­der /home/root/riddle-data/memories (delete the folder and the di­ary for­gets; the last ~400 pages are kept). RIDDLE_MEMORY=off in or­a­cle.env turns all of it off — no stor­age, and noth­ing ex­tra sent with re­quests. Set RIDDLE_TZ_OFFSET (hours from UTC) so mem­ory dates read right.

The or­a­cle (the spirit” in the di­ary)

The di­ary’s replies come from a vi­sion LLM that reads your hand­writ­ing from the com­mit­ted page (sent as an in­line PNG). There are two back­ends, cho­sen at startup — pick whichever you have:

Option A — any OpenAI-compatible API (easiest, zero setup)

Set an API key and rid­dle talks straight to an OpenAI-compatible /chat/completions end­point. Works with OpenAI, OpenRouter, Groq, a lo­cal server — any­thing that speaks the for­mat. No ex­tra soft­ware on the tablet.

ex­port RIDDLE_OPENAI_KEY=“sk-…” # re­quired ex­port RIDDLE_OPENAI_BASE=“https://​api.ope­nai.com/​v1 # op­tional (default) ex­port RIDDLE_OPENAI_MODEL=“gpt-4o-mini” # op­tional; must see im­ages ex­port RIDDLE_OPENAI_REASONING=“low” # think­ing mod­els only ex­port RIDDLE_OPENAI_MAX_TOKENS=“2000″ # run­away guard

Any vi­sion-ca­pa­ble model works. On the tablet these live in or­a­cle.env next to the bi­nary (see or­a­cle.env.ex­am­ple, or just run remagic con­fig rid­dle — it has one-tap pre­sets for OpenAI, OpenRouter, and Gemini). Example with OpenRouter:

ex­port RIDDLE_OPENAI_KEY=“$OPENROUTER_API_KEY” ex­port RIDDLE_OPENAI_BASE=“https://​open­router.ai/​api/​v1 ex­port RIDDLE_OPENAI_MODEL=“openai/gpt-4o-mini”

Two gotchas with think­ing mod­els (Gemini 3.x, o-se­ries): set RIDDLE_OPENAI_REASONING=low for faster first ink (some providers re­ject the field on non-think­ing mod­els — leave it un­set there), and keep RIDDLE_OPENAI_MAX_TOKENS roomy — hid­den rea­son­ing to­kens count against it, and a tight cap starves the vis­i­ble re­ply.

Verify your setup be­fore launch­ing the di­ary:

rid­dle –oracle-test path/​to/​hand­writ­ing.png # prints the streamed re­ply

Measured ~0.9 – 1.1 s to first ink on-de­vice. The HTTPS is built into rid­dle (pure-Rust, no ex­tra li­braries).

Option B — pi (the power path)

If you al­ready run pi, rid­dle will use a res­i­dent pi –mode rpc process kept warm (Node + your sub­scrip­tion auth loaded once), so each turn pays only model la­tency. Used au­to­mat­i­cally when RIDDLE_OPENAI_KEY is not set. Defaults (override in or­a­cle.env): pi at /home/root/node/bin (RIDDLE_PI_BIN_DIR), provider ope­nai-codex (RIDDLE_PI_PROVIDER), model gpt-5.4-mini (RIDDLE_PI_MODEL).

Both stream the re­ply sen­tence-by-sen­tence, so the quill starts writ­ing sec­onds be­fore the model fin­ishes. The per­sona prompt lives in rid­dle/​src/​or­a­cle.rs.

A note on Tom’s mem­ory: with the HTTP back­end every page is a fresh con­ver­sa­tion — Tom does not re­mem­ber your pre­vi­ous page. With pi, the warm ses­sion re­mem­bers every­thing since the di­ary was opened (and pi per­sists that ses­sion in its own data dir on the tablet).

If the or­a­cle can’t an­swer — miss­ing key, re­fused key, no Wi-Fi — Tom writes the rea­son on the page in­stead of a re­ply, and the full er­ror goes to the jour­nal (journalctl -u rid­dle-takeover).

Building

Cross-compiled from x86_64. Two flavours:

Windowed (AppLoad/qtfb) — build from source

The bun­dles above are the takeover flavour; the win­dowed flavour must be built. Requires xovi + AppLoad on the de­vice.

cd rid­dle cargo build –release –target aarch64-un­known-linux-gnu

Install the bi­nary to /home/root/xovi/exthome/appload/riddle/ with an ex­ter­nal.man­i­fest.json that sets qtfb”: true and points application” at the bi­nary it­self (the man­i­fest in this repo is the takeover one — AppLoad only hands rid­dle a win­dow, via QTFB_KEY, when qtfb is true).

Takeover (instant ink) — the one from the demo

Requires the re­Mark­able SDK tool­chain (~/rm-sdk-3.26) be­cause the linked ven­dor Qt libs need its glibc, and libqs­gepa­per.so pulled from your own de­vice (it is pro­pri­etary and not dis­trib­uted here):

cd quill && ./build.sh # pulls libqs­gepa­per.so from the de­vice over # ssh, builds libquill.so + the demos cd ../riddle && ./build-takeover.sh ./scripts/make-bundle.sh # stages the AppLoad bun­dle in dist/​rid­dle/

The staged dist/​rid­dle/ is self-con­tained (binary, libquill.so, launch scripts, man­i­fest) — copy it to /home/root/xovi/exthome/appload/riddle/, or pub­lish it to the cat­a­log with remagic pub­lish dist/​rid­dle. Launching via AppLoad (appload-launch.sh) de­taches into a tran­sient sys­temd unit, stops xo­chitl, runs the di­ary, and al­ways re­stores xo­chitl on exit — leave with a 5-finger tap or SIGTERM (systemctl stop rid­dle-takeover); the power but­ton sleeps and wakes the di­ary with­out leav­ing it. The unit’s stop hook restarts xo­chitl even if rid­dle dies un­cleanly. If any­thing wedges: ssh root@10.11.99.1 systemctl start xo­chitl’.

What leaves the de­vice

Each com­mit­ted page is ras­ter­ized to a small grayscale PNG and sent to the or­a­cle you con­fig­ured — noth­ing else ever leaves the tablet, and there is no teleme­try.

The PNG (/tmp/riddle-page.png) is deleted as soon as the or­a­cle has read it; set RIDDLE_KEEP_PAGE=1 to keep the last page around for de­bug­ging.

rid­dle never writes replies to disk. The pi back­end, how­ever, keeps its own ses­sion his­tory in its data dir — the HTTP back­end keeps noth­ing.

Tom stays in char­ac­ter by de­sign: the per­sona prompt (see rid­dle/​src/​or­a­cle.rs) tells the model it is the di­ary and noth­ing else.

Fonts

The re­ply hand is Dancing Script (SIL OFL 1.1 — see rid­dle/​fonts/​OFL.txt).

License

MIT for every­thing in this repos­i­tory (see LICENSE). The ven­dor li­braries it in­ter­poses (libqsgepaper.so, Qt) are not in­cluded and must come from your own de­vice/​SDK.

StreetComplete

streetcomplete.app

Help im­prove OpenStreetMap with StreetComplete! This app finds miss­ing map data in your vicin­ity and dis­plays it on a map as quests. Solve each quest by vis­it­ing the lo­ca­tion on-site and an­swer­ing a sim­ple ques­tion to up­date the map. The info you en­ter is di­rectly added to OpenStreetMap in your name, with­out the need to use an­other ed­i­tor.

Showdown in Strasbourg: The unexpected return of Chat Control 1.0

www.heise.de

The European Parliament cleared the way for a re­newed ex­ten­sion of the so-called Chat Control” on Tuesday af­ter­noon. With a nar­row ma­jor­ity of 331 to 304 votes and eleven ab­sten­tions, the MEPs voted for an ur­gency mo­tion that Parliament President Roberta Metsola had put on the agenda at short no­tice at the be­hest of the mem­ber states and the EPP group. This al­lows Parliament to vote again on the con­tro­ver­sial plan on Thursday, its last ses­sion be­fore the sum­mer break.

The aim of this ma­neu­ver: to re­in­state the tran­si­tional reg­u­la­tion for Chat Control, which ex­pired in April. This ex­cep­tion reg­u­la­tion al­lowed tech gi­ants like Meta, Google, or Microsoft to vol­un­tar­ily search pri­vate chats, emails, and mes­sen­ger ser­vices for ma­te­r­ial re­lated to child sex­ual abuse with­out spe­cific sus­pi­cion. Parliament had not agreed to a re­newed ex­ten­sion, and the reg­u­la­tion had there­fore ex­pired in April.

The vote was pre­ceded by a back-and-forth, with op­po­nents call­ing it an un­prece­dented par­lia­men­tary ma­neu­ver. Pirate MEP Markéta Gregorová ac­cused the con­ser­v­a­tive European People’s Party (EPP) of en­gag­ing in a farce and vi­o­lat­ing its own rules of pro­ce­dure. She ap­pealed in vain to her col­leagues to vote against Chat Control again. Metsola nar­rowly de­fended the pro­ce­dure, stat­ing she was ad­her­ing to all rules.

Supporters re­ceived back­ing through pres­sure from the EU Commission. Four Commissioners had ur­gently warned the peo­ple’s rep­re­sen­ta­tives in a let­ter shortly be­fore the vote about a con­tin­u­ing reg­u­la­tory gap. Without the scans, per­pe­tra­tors would not be held ac­count­able, and al­most all abuse ma­te­r­ial would re­main undis­cov­ered — even though Meta & Co. are cur­rently still pro­vid­ing re­ports. Parliament could not go into the sum­mer break like this, ac­cord­ing to the EPP.

AfD MEP Mary Khan, on the other hand, com­plained that a law that had al­ready been re­jected was be­ing re­vived through the back door us­ing salami-tac­tics un­til the de­sired out­come was achieved. No one wants to weaken child pro­tec­tion, but that should not jus­tify putting all cit­i­zens un­der gen­eral sus­pi­cion and le­git­imiz­ing mass sur­veil­lance. In fact, Parliament had re­jected a re­newed ex­ten­sion of this Chat Control by a clear ma­jor­ity in March and April af­ter failed ne­go­ti­a­tions with the EU mem­ber states.

The fact that the dossier is now land­ing in the ple­nary again at the urg­ing of the gov­ern­ments and the Parliament President is also caus­ing frus­tra­tion among the ne­go­tia­tors. Rapporteur Birgit Sippel (SPD) spoke of an un­fair ma­neu­ver by the EU coun­tries and re­fused her sup­port. Nevertheless, the Social Democratic group caved in be­fore­hand and sig­naled its ap­proval for the ur­gency pro­ce­dure, which en­sured the nec­es­sary ma­jor­ity.

Procedural tricks un­til the last ses­sion day

The pro­ce­dure now cho­sen gives the pro­po­nents of Chat Control a sig­nif­i­cant tac­ti­cal ad­van­tage. Since the law is in its sec­ond read­ing, an ab­solute ma­jor­ity of 361 votes of all par­lia­ment mem­bers is re­quired for amend­ments or a re­newed re­jec­tion on Thursday. In con­trast, a sim­ple ma­jor­ity of the MEPs pre­sent is suf­fi­cient for the other side. As many par­lia­men­tar­i­ans have his­tor­i­cally al­ready de­parted by the last day be­fore the sum­mer break, the re-en­act­ment of the reg­u­la­tion is con­sid­ered al­most un­avoid­able.

Had the MEPs re­jected the ur­gency, the draft would have gone to the re­spon­si­ble Committee on Civil Liberties, Justice and Home Affairs, where a legally sound com­pro­mise could have been worked out af­ter the sum­mer break.

IT se­cu­rity re­searchers have re­peat­edly warned in ur­gent let­ters about un­ac­cept­ably high er­ror rates of the AI scans used, which en­dan­gered the pri­vacy of in­no­cent cit­i­zens. A board mem­ber of the Society for Informatics even filed an ur­gent ap­pli­ca­tion with the Federal Constitutional Court. Civil rights ac­tivists like Patrick Breyer even fear that the re­newed tran­si­tional sta­tus will re­lieve po­lit­i­cal pres­sure on EU gov­ern­ments to en­gage in a much more ef­fec­tive and tar­geted per­ma­nent suc­ces­sor reg­u­la­tion to the blocked Chat Control 2.0.

(vbr)

Don’t miss any news — fol­low us on Facebook, LinkedIn or Mastodon.

This ar­ti­cle was orig­i­nally pub­lished in

German.

It was trans­lated with tech­ni­cal as­sis­tance and ed­i­to­ri­ally re­viewed be­fore pub­li­ca­tion.

98% isn't very much

whynothugo.nl

98% sounds like a lot. If some­one wins the lot­tery 98% of the times they play, they are clearly blessed. Getting a top mark (e.g.: 10/10) on ex­ams 98% of the time will likely lead to an ho­n­our diploma.

But a restau­rant where clients don’t get of food poi­son­ing 98% of time is get­ting peo­ple sick on a monthly (or even weekly) ba­sis. If an em­ployer pays their em­ploy­ees 98% of the times, I def­i­nitely would­n’t want to work there. If I pay be­fore leav­ing a restau­rant only 98% of the time, I’ll be in trou­ble.

98% is great for ex­cep­tion­ally good things, like dra­mat­i­cally in­creas­ing some­one’s qual­ity of life, but very low for ba­sic ex­pec­ta­tions, like a baby sur­viv­ing a babysit­ter tak­ing care of them.

If a web­site uses fancy new browser fea­tures and works for 98% of the pop­u­la­tion, that means that it won’t work for ~150 mil­lion peo­ple. If a web­site makes a change and that works for 98% of their vis­i­tors, they’re ba­si­cally kick­ing out 2% of their au­di­ence. Can you imag­ine a venue re­fus­ing en­try to for­mer clients 2% of the time just be­cause they’ve improved their ex­pe­ri­ence”?

98% of the pop­u­la­tion might not im­ply 98% of my au­di­ence ei­ther: some­thing might work for 98% of the gen­eral pop­u­la­tion out there, but only for 70% of my ac­tual au­di­ence.

Just a few months ago the topic of nested CSS came up. Somebody pointed out that it is stan­dard since 2023 and safe to use on­line. I also checked the ex­act browser dis­tri­b­u­tion of a clien­t’s web­site (where I would by happy to trim out the scss pipeline). Over the last year, only ~70% of the vis­it­ing browsers sup­ported the new CSS fea­tures. Even thought this fea­ture is widely sup­ported” in a gen­eral au­di­ence, for my au­di­ence, it left out 30% of the vis­i­tors.

You prob­a­bly know one hun­dred peo­ple. Picture two of them star­ing at a bro­ken screen. The 98% sta­tis­tic is a lazy short­cut. Truly ro­bust en­gi­neer­ing is­n’t about what works for most; it’s about grace­fully han­dling the edge cases. If a fancy new fea­ture can’t de­grade grace­fully, then 98% is­n’t widely sup­ported”. It failed to meet the ba­sic min­i­mum for 2% of the peo­ple out there.

Have com­ments or want to dis­cuss this topic?Send an email to my pub­lic in­box: ~whynothugo/pub­lic-in­box@lists.sr.ht.Re­ply pri­vately by email: hugo@whynothugo.nl.

— § —

Microsoft Fire idTech Team at id Software

gamefromscratch.com

id Software are with­out a doubt one of the most im­por­tant game de­vel­op­ers in the first per­son genre his­tory. The tech­nol­ogy em­pow­er­ing their games, idTech pow­ers a shock­ing num­ber of games and even game en­gines ( we ranked it 4th in our Most Important Game Engines of all Time rank­ing). This era might be com­ing to a close as it’s be­ing re­ported that most, if not all, de­vel­op­ers work­ing on idTech at id Software have been fired.

This comes as part of the MASSIVE lay­offs across all Xbox di­vi­sions. Asha Sharma, the new CEO of Xbox tweeted the email that was sent to the en­tire com­pany. It ex­plains why the lay­offs are hap­pen­ing, start­ing with:

We are be­gin­ning the most sig­nif­i­cant re­struc­ture in XBOX his­tory. After care­ful con­sid­er­a­tion, I’ve made the dif­fi­cult de­ci­sion to re­duce our team by ap­prox­i­mately 3,200 through­out FY27. This will in­clude ap­prox­i­mately 1,600 role elim­i­na­tions to­day, and in ad­di­tion, four stu­dios will leave XBOX to new man­age­ment. I rec­og­nize that a year-long re­struc­tur­ing cre­ates ad­di­tional chal­lenges. Unfortunately, it is not pos­si­ble to make all the nec­es­sary changes in a sin­gle day, and I wanted to be di­rect about the scale.

We are be­gin­ning the most sig­nif­i­cant re­struc­ture in XBOX his­tory. After care­ful con­sid­er­a­tion, I’ve made the dif­fi­cult de­ci­sion to re­duce our team by ap­prox­i­mately 3,200 through­out FY27. This will in­clude ap­prox­i­mately 1,600 role elim­i­na­tions to­day, and in ad­di­tion, four stu­dios will leave XBOX to new man­age­ment. I rec­og­nize that a year-long re­struc­tur­ing cre­ates ad­di­tional chal­lenges. Unfortunately, it is not pos­si­ble to make all the nec­es­sary changes in a sin­gle day, and I wanted to be di­rect about the scale.

Since this an­nounce­ment, sev­eral ad­di­tional de­tails have been made avail­able about the im­pact of the lay­offs, sev­eral sur­round­ing id Software, start­ing with this Tweet from Apogee founder Scott Miller:

Additionally Rebs Gaming tweeted the fol­low­ing linked in post from im­pacted id Software de­vel­oper and 20+ year id vet­eran Michael Maynard:

Key Links

XBox CEO Email to Employees

Game Industry.biz Coverage of Layoffs Across Studios

You can learn more about the XBox lay­offs, the idTech game en­gine and more in the video be­low.

- YouTube

www.youtube.com

How to sequence your own DNA at home

bradleywoolf.com

I have now se­quenced my own genome 5 times with an Oxford Nanopore Technologies MinION. This means col­lect­ing them from a swab, prep­ping them for se­quenc­ing, run­ning them through a se­quencer, then do­ing analy­sis over them.

Cheek cells are eas­ily ac­ces­si­ble and re­plen­ish pretty quickly. They are not used for can­cer di­ag­no­sis, in­flam­ma­tion, or what genes are be­ing ac­ti­vated in other parts of the body (like if you have hives on your chest and want to test what genes are be­ing ex­pressed in the cells that are in­flamed), since you would want to col­lect the cells hav­ing prob­lems and com­pare them against other nor­mal ver­sions of those cells.

To se­quence the cells, I bought lab ma­te­ri­als and con­sum­ables to se­quence my own genome at home. It took me about two months to get every­thing to­gether to do a full end to end high qual­ity run. Likewise, the costs are still out of reach for the av­er­age per­son but they are de­creas­ing (exponentially!) and we will even­tu­ally have af­ford­able tech­nol­ogy, like a cell phone or AI, telling us about our DNA + RNA ex­pres­sion real-time.

What can I even do with my own genome?

Before we ac­tu­ally spend all this time and money on se­quenc­ing, what can we ac­tu­ally do with our genome?

The genome is not magic by it­self- it is the ref­er­ence layer. Once I have a VCF, I can run it through tools like VEP, ClinVar, gno­mAD, PharmGKB (highly rec­om­mend), Gene Inspector, or Claude, and start ask­ing:

Which vari­ants do I have?

Which genes and path­ways are af­fected?

Which med­i­cines might I me­tab­o­lize dif­fer­ently?

What rare vari­ants should I take se­ri­ously?

Where does the model know noth­ing yet?

This last part mat­ters- the in­for­ma­tion pro­duced is not yet di­ag­no­sis-level, and it is def­i­nitely not edit your­self with CRISPR be­cause an AI said so.” The near-term value is turn­ing a sta­tic genome into some­thing queryable, but the edit your­self with CRISPR will most likely fol­low. DNA is the sta­ble ref­er­ence, RNA is the cur­rent state, and we will even­tu­ally in­te­grate all biosen­sor data into one model’ of your­self.

Here are a list of links and Twitter posts to help:

Genetic vari­ants from first prin­ci­ples:

TLDR these genes, and the com­bi­na­tions of them, com­pound into real phys­i­cal dis­eases. We will prob­a­bly map these in the next decade

Pass your genome + RNA to any of these mod­els: https://​www.bio­ten­der.on­line/​bio-model-in­stall-guide/

Give your genome to Claude Code- mes­sage me if you want me to set this up for you

Take it to a doc­tor if you me­tab­o­lize par­tic­u­lar drugs dif­fer­ently

Patrick Collison post on us­ing agents to talk to his genome

Protocol Steps

This is dense- you are wel­come read this, or feed it to your AI. Feel free to copy and paste the URL of this and have ChatGPT walk you through it. If you have AR glasses, even bet­ter, since the AI can walk you through the whole pro­to­col.

Hardware

Oxford Nanopore Technologies MinION ($7.5k)

Laptop/workstation for MinKNOW (any PC should be fine)

100GB+ stor­age for out­puts

GPU for Dorado base­call­ing

Vortex ($50)

Heat block ($250)

Centrifuge ($400 used on eBay)

Consumables

SQK-LSK114 Ligation Sequencing Kit V14 for DNA

EXP-WSH004 Flow Cell Wash Kit

EXP-CTL001 Control ma­te­r­ial

PBS 1x

Isohelix Buccal swabs

Reagents

DNA ex­trac­tion kit

NEB Monarch HMW DNA Extraction Kit for Cells & Blood ($87 for 5 runs)

Nuclei Prep Buffer

Nuclei Lysis Buffer

RNase A

Proteinase K

Precipitation Enhancer

DNA Capture Beads

gDNA Wash Buffer

Elution Buffer II

Bead re­tain­ers / Monarch col­lec­tion parts from kit

DNA li­brary-prep reagents

NEBNext Companion Module v2 / re­pair-end prep reagents ($760 for 24 re­ac­tions)

FFPE DNA Repair Buffer

FFPE DNA Repair Mix

Ultra II End-prep Reaction Buffer

Ultra II End-prep Enzyme Mix

NEBNext Quick T4 DNA Ligase

Oxford Nanopore SQK-LSK114 ($720 for 6 re­ac­tions)

Long Fragment Buffer / LFB

Elution Buffer / EB

Ligation Adapter / LA

Ligation Buffer / LNB

Sequencing Buffer / SB

Library Beads / LIB

Flow cell prim­ing reagents

Flow Cell Flush / FCF

Flow Cell Tether / FCT

BSA

AMPure XP beads

80% ethanol

Nuclease-free wa­ter ($32 for 25mL)

DNA quan­tity mea­sure­ment

Qubit flu­o­rom­e­ter

Qubit ds­DNA BR or HS Assay Kit

Bench equip­ment

Microcentrifuge

Vortex mixer

Heat block / dry bath

Magnetic rack for 1.5/2 mL tubes

Tube racks

Ice bucket / cold block

Freezer at -20°C

Fridge at 4°C

Pipettes

P1000 (100 – 1000 µL)

P200 (0 – 200 µL)

P20 (2 – 20 µL)

P10 (1 – 10 µL)

Plastics / Lab Pro-style con­sum­ables

Sterile flocked cheek swabs

1.5 mL mi­cro­cen­trifuge tubes

2.0 mL mi­cro­cen­trifuge tubes

DNA LoBind 1.5 mL tubes

RNA LoBind tubes

0.2 mL PCR tubes

Qubit as­say tubes

Pipette ster­ile fil­tered tips

P1000 (100 – 1000 µL)

P200 (0 – 200 µL)

P20 (2 – 20 µL)

P10 (1 – 10 µL)

Wide-bore P200 tips

Tube la­bels / lab marker

A Hacker's Arrest Reveals Microsoft Can Track Users Via a Windows Device ID

www.pcmag.com

The ar­rest of a teenage hacker has re­vealed that Microsoft can track a Windows PC and its on­line ac­tiv­ity through a Global Device ID that seems to have no easy opt-out, spark­ing fears about po­ten­tial sur­veil­lance.

Last week, the US an­nounced it had ex­tra­dited 19-year-old Peter Stokes from Europe for al­legedly be­ing a mem­ber of the no­to­ri­ous hack­ing group Scattered Spider. But the case stands out be­cause Microsoft played a key role in link­ing Stokes to the sus­pected hack­ing crimes, ac­cord­ing to an un­sealed crim­i­nal com­plaint.

(Credit: DOJ)

Stokes al­legedly hacked an un­named lux­ury jew­elry re­tailer in May 2025 while us­ing a VPN. The 39-page crim­i­nal com­plaint shows the FBI used Microsoft records to dis­cover that his IP ad­dress was as­so­ci­ated with a Microsoft de­vice iden­ti­fier known as Global Device ID (GDID).

According to a Microsoft rep­re­sen­ta­tive, a Global Device Identifier in the Windows ecosys­tem is a per­sis­tent, de­vice-level iden­ti­fier de­signed to uniquely iden­tify an in­stal­la­tion of a Windows op­er­at­ing sys­tem on a de­vice, ei­ther a phys­i­cal de­vice (e.g., a mo­bile phone or lap­top) or vir­tual ma­chine, across cer­tain Microsoft ser­vices and sce­nar­ios,” the com­plaint ex­plains.

The global de­vice ID is­n’t ex­actly sur­pris­ing, given that it’s stan­dard prac­tice to as­sign a unique ID to each ac­count or de­vice so a tech provider can rec­og­nize and dis­tin­guish be­tween them. But the com­plaint re­veals Microsoft can as­so­ci­ate the GDID with third-party ser­vices and the tim­ing as well, giv­ing Redmond a way to the­o­ret­i­cally track a user’s on­line ac­tiv­ity. In other words, Redmond might be able to track the on­line ac­tiv­ity of your Windows PC with­out third-party browser cook­ies.

(Credit: DOJ)

Stokes was dis­cov­ered ex­ploit­ing a web de­vel­op­ment tool called ngrok to by­pass the jew­elry re­tail­er’s net­work de­fenses. The com­plaint says Microsoft had records show­ing that on May 12, 2025, at 19:21 UTC, the GDID as­so­ci­ated with Stokes’ com­puter accessed, among other ngrok pages, https://​dash­board[.]ngrok.com/​signup,′ the ngrok page to set up an ngrok ac­count.”

The doc­u­ment adds that Microsoft records also showed the GDID ac­cess­ing multiple sites” from servers at Tzulo, a web host­ing provider, to help pull off the hack.

The GDID for Stokes’ PC was al­legedly 6755467234350028. (Credit: DOJ)

Hence, the fact that fed­eral in­ves­ti­ga­tors used the Microsoft iden­ti­fier to nab a sus­pected hacker is rais­ing con­cerns that it could be abused for other sur­veil­lance pur­poses. Microsoft Windows is sur­veil­lance soft­ware,” cy­ber­se­cu­rity ex­pert Matthew Hickey al­leged in a tweet.

The de­vice ID is men­tioned briefly on this sup­port page, but Microsoft has­n’t oth­er­wise com­mented on it pub­licly. According to the crim­i­nal com­plaint, a Windows user can re­set the GDID on their own, al­though it’s not easy. A GDID re­mains con­sis­tent across Windows op­er­at­ing sys­tem up­dates on a de­vice, but a re­in­stall of Windows, ei­ther on the same de­vice or on a dif­fer­ent de­vice, will be tied to a new unique GDID,” the court doc­u­ment says. In a foot­note, it adds, Thus, one Microsoft user could have mul­ti­ple GDIDs.”

Recommended by Our Editors

Still, we sus­pect it would­n’t be hard for Microsoft to tie a newly set GDID to the old one, since the com­pany could look at other iden­ti­fiers, such as a Microsoft ac­count lo­gin or an IP ad­dress, and match them. In re­sponse to the sur­veil­lance po­ten­tial, some users have al­ready been ex­plor­ing ways to con­tain and scrub the GDID iden­ti­fier.

Meanwhile, cy­ber­se­cu­rity re­searcher Costin Raiu is ques­tion­ing whether other tech com­pa­nies have the same sur­veil­lance ca­pa­bil­i­ties, given the use of unique iden­ti­fiers.

I would also ask: how much of this is hap­pen­ing on Apple de­vices? Is it on the same scale? Is it hap­pen­ing at an even higher level — do they tie it to the hard­ware, so that even if you re­in­stall, it does­n’t mat­ter, be­cause it’s hard­ware-based?” he said in the Three Buddy Problem pod­cast. Very likely it’s not unique to Microsoft. And prob­a­bly, if you want to be fully anony­mous, you may at some point have to use Linux, FreeBSD, what­ever, for your de­vel­op­ment en­vi­ron­ments, and tun­nel every­thing through prox­ies, Tor, VPNs, and such.”

About Our Expert

Michael Kan

Principal Reporter

Experience

I’ve been a jour­nal­ist for over 15 years. I got my start as a schools and cities re­porter in Kansas City and joined PCMag in 2017, where I cover satel­lite in­ter­net ser­vices, cy­ber­se­cu­rity, PC hard­ware, and more. I’m cur­rently based in San Francisco, but pre­vi­ously spent over five years in China, cov­er­ing the coun­try’s tech­nol­ogy sec­tor.

Since 2020, I’ve cov­ered the launch and ex­plo­sive growth of SpaceX’s Starlink satel­lite in­ter­net ser­vice, writ­ing 600+ sto­ries on avail­abil­ity and fea­ture launches, but also the reg­u­la­tory bat­tles over the ex­pan­sion of satel­lite con­stel­la­tions, fights with ri­val providers like AST SpaceMobile and Amazon, and the ef­fort to ex­pand into satel­lite-based mo­bile ser­vice. I’ve combed through FCC fil­ings for the lat­est news and dri­ven to re­mote cor­ners of California to test Starlink’s cel­lu­lar ser­vice.

I also cover cy­ber threats, from ran­somware gangs to the emer­gence of AI-based mal­ware. In 2024 and 2025, the FTC forced Avast to pay con­sumers $16.5 mil­lion for se­cretly har­vest­ing and sell­ing their per­sonal in­for­ma­tion to third-party clients, as re­vealed in my joint in­ves­ti­ga­tion with Motherboard.

I also cover the PC graph­ics card mar­ket. Pandemic-era short­ages led me to camp out in front of a Best Buy to get an RTX 3000. I’m now fol­low­ing how the AI-driven mem­ory short­age is im­pact­ing the en­tire con­sumer elec­tron­ics mar­ket. I’m al­ways ea­ger to learn more, so please jump in the com­ments with feed­back and send me tips.

Latest By Michael Kan

Read Full Bio

ternlight · semantic search · React docs

ternlight-demo.vercel.app

An em­bed­ding model in 7 MB.

Runs on your CPU. No API.

Drop it in, em­bed text in mil­lisec­onds, and never call a server.

Runs in your browser

no API call

Engine + weights · 7 MB

mini vari­ant · 5 MB

Fast em­bed­dings · ~5 ms

CPU only · no GPU

USE IT

Three lines to se­man­tic search

Ships as a sin­gle npm pack­age. No model down­load step, no server.

$ npm in­stall @ternlight/base

ex­am­ple.js

im­port { em­bed, sim­i­lar } from @ternlight/base’;

sim­i­lar(‘easy week­night din­ner ideas’, recipes, { topK: 3 }); // → ranked matches · ~5 ms · zero net­work

EXAMPLE

React docs search

Search React’s docs in your browser. Type a ques­tion — pow­ered by @ternlight/mini, the 5 MB tier.

To add this web app to your iOS home screen tap the share button and select "Add to the Home Screen".

10HN is also available as an iOS App

If you visit 10HN only rarely, check out the the best articles from the past week.

Visit pancik.com for more.