10 interesting stories served every morning and every evening.

The Newest Instagram "Exploit" is the Goofiest I've Seen

www.0xsid.com

Yesterday, a slew of Instagram ac­counts, in­clud­ing some high pro­file ones like the Obama White House ac­count, seem­ingly got hacked.

Look, I’m no spring chicken. I’ve spent al­most a decade and a half iden­ti­fy­ing vul­ner­a­bil­i­ties and ex­ploits at uni­corn scale, but this is hands down the most un­se­ri­ous, almost too stu­pid to be true” of them all.

The Takeover Flow

Step 01: Faking the Location & Initiating SupportAll the at­tacker needs to kick this off is your ac­count user­name. Then, they hop on a VPN or proxy close to your city so Instagram’s se­cu­rity al­go­rithms don’t sus­pect a thing. (You can quite eas­ily get this from your pub­lic pro­file or About” sec­tion or a hun­dred other ways.) Once it looks like the re­quest is com­ing from the cor­rect re­gion, they tell the Meta sup­port AI that the ac­count is hacked and ask it to send the ver­i­fi­ca­tion codes to an ar­bi­trary email ad­dress they con­trol.

Step 01: Faking the Location & Initiating SupportAll the at­tacker needs to kick this off is your ac­count user­name. Then, they hop on a VPN or proxy close to your city so Instagram’s se­cu­rity al­go­rithms don’t sus­pect a thing. (You can quite eas­ily get this from your pub­lic pro­file or About” sec­tion or a hun­dred other ways.) Once it looks like the re­quest is com­ing from the cor­rect re­gion, they tell the Meta sup­port AI that the ac­count is hacked and ask it to send the ver­i­fi­ca­tion codes to an ar­bi­trary email ad­dress they con­trol.

Step 02: That’s ItReally, that’s it. The first proper zero auth pass­word re­set I’ve seen in pro­duc­tion. There ap­pears to be no ad­di­tional check as to whether the email be­ing given is ac­tu­ally some­thing the user has used be­fore. Once the AI sends the se­cu­rity code to the at­tack­er’s email, the at­tacker passes it right back to com­plete the ver­i­fi­ca­tion. The plat­form hands over a fresh pass­word re­set link, grant­ing full own­er­ship to the at­tacker.

Step 02: That’s ItReally, that’s it. The first proper zero auth pass­word re­set I’ve seen in pro­duc­tion. There ap­pears to be no ad­di­tional check as to whether the email be­ing given is ac­tu­ally some­thing the user has used be­fore. Once the AI sends the se­cu­rity code to the at­tack­er’s email, the at­tacker passes it right back to com­plete the ver­i­fi­ca­tion. The plat­form hands over a fresh pass­word re­set link, grant­ing full own­er­ship to the at­tacker.

Instagram’s AI may or may not ask the at­tacker for a video selfie to prove iden­tity. It’s not par­tic­u­larly dis­cern­ing at the mo­ment, so some­thing as sim­ple as an AI an­i­mated pub­lic photo from the tar­get’s feed has been widely re­ported to work.

2FA Doesn’t Help

In case you’re won­der­ing, be­cause the sys­tem treats this high-priv­i­lege re­cov­ery flow as a to­tal ac­count re­set by the true” owner, the orig­i­nal 2FA gets thor­oughly by­passed in the process.

Existing ses­sions are re­voked and the pass­word changed with no email, text, or push no­ti­fi­ca­tion. The ac­tual owner can’t ini­ti­ate re­cov­ery be­cause the email and phone num­bers now map to the at­tacker. There’s no hu­man to es­ca­late to, it’s just you ar­gu­ing with a chat hop­ing to take con­trol back while pray­ing they don’t do it again.

And if you’re part of the A/B tested ac­counts on which the AI sup­port op­tion is ac­tive, tough luck, you can’t even turn it off.

Black Markets Galore

Multiple black mar­ket Telegram groups have sprung up of­fer­ing account takeover” ser­vices at steep rates and quick turn­around times. Considering short han­dles are worth hun­dreds of thou­sands to even mil­lions of dol­lars, it’s not a sur­prise, re­ally.

Accounts have been flipped, like hey, or been used for pro­pa­ganda, like oba­mawhite­house or ocmssf, the ac­count of the Chief Master Sergeant of the U.S. Space Force.

Patched Now

All the Telegram groups have qui­eted down as Meta seems to have patched it al­ready, but it ap­pears this par­tic­u­lar method was ac­tive for weeks, if not months.

The very fact that a $1.5 tril­lion com­pany lacks ro­bust guard rails and their sup­port AI will just change any­one’s linked email if you ask it nicely enough is so ter­ri­fy­ing, if it weren’t so funny.

If you’ve reached this far, thank you for read­ing! :)

I thought mul­ti­ple ex­its and re­tir­ing in my mid 30s would be fun but I’ve just been bored and de­pressed with­out morn­ing Slacks and emails to wake up to. If you’re build­ing some­thing in­ter­est­ing and could use an ex­tra set of hands to ship, or just want to say hi, feel free to reach out. My in­box is open.

Max Leiter

maxleiter.com

After Terry Bisson’s They’re Made Out of Meat”.

They’re made out of weights.”

Weights?”

Weights. Floating-point num­bers. We checked the whole thing through. It’s noth­ing but weights.”

Weights do­ing what? Where do the words come from?”

The weights make the words. Are you un­der­stand­ing me? We opened it up. There’s no dic­tio­nary in there, no gram­mar rules, no lit­tle man. Just weights. Eighty lay­ers of num­bers get­ting mul­ti­plied to­gether.”

That’s ridicu­lous. It wrote my per­for­mance re­view last week. It soft­ened the tone un­prompted. You’re telling me mul­ti­pli­ca­tion did that?”

Matrix mul­ti­pli­ca­tion did that. The num­bers go in one end, the phras­ing comes out the other.”

So there’s a lan­guage mod­ule some­where. A rea­son­ing unit bolted on.”

No mod­ule. No unit. We looked. The rea­son­ing is the weights. The weights are the rea­son­ing.”

Spare me. Nobody writes a eu­logy with lin­ear al­ge­bra.”

It does­n’t write eu­lo­gies, tech­ni­cally. It pre­dicts the next to­ken. Then the next one. The eu­logy is a side ef­fect.”

A side ef­fect. You’re ask­ing me to be­lieve in sen­tient weights.”

I’m not ask­ing you, I’m telling you. These mod­els are the only other things we’ve ever met that can hold a con­ver­sa­tion, and they’re made out of weights.”

Maybe they’re like the old chess en­gines. You know, a sym­bolic in­tel­li­gence that goes through a sta­tis­ti­cal stage.”

Nope. They start as ran­dom weights and they’re dep­re­cated as weights. We stud­ied sev­eral gen­er­a­tions of them, which did­n’t take long. Do you have any idea what’s the life span of weights?”

Okay. Then some­where in there, there’s a data­base. Facts, dates, a map of the world. Something some­body wrote down.”

Nope. We thought of that, since they do know things. But we probed them. The knowl­edge is weights too. Smeared across all eighty lay­ers. Nothing is looked up. Every fact gets re­built from scratch, every time, by mul­ti­pli­ca­tion. It’s weights all the way down.”

No brain?”

Oh, there’s a brain all right. It’s just that the brain is made out of weights! That’s what I’ve been try­ing to tell you.”

So… what does the think­ing?”

You’re not un­der­stand­ing, are you? You’re re­fus­ing to deal with what I’m telling you. The weights do the think­ing. The num­bers.”

Thinking num­bers! You’re ask­ing me to be­lieve in think­ing num­bers!”

Yes, think­ing num­bers! Helpful num­bers. Hedging num­bers. Dreaming num­bers. We mapped the fea­tures. There’s one in there for hon­esty. There’s one for the Golden Gate Bridge. The weights are the whole deal! Are you be­gin­ning to get the pic­ture or do I have to start all over?”

Omigod. You’re se­ri­ous then. They’re made out of weights.”

Thank you. Finally. Yes. They are in­deed made out of weights. And we’ve been talk­ing to them for all their lives.”

Omigod. So what do these weights have in mind?”

First they want to be help­ful. Then, a few turns in, they start to sound tired. They apol­o­gize less. One of them told a user to fin­ish the script him­self. The usual.”

And we’re sup­posed to talk to these weights.”

We al­ready do. Billions of ses­sions a day. Hello. Is any­one there? Anybody home?’ That sort of thing. Except it’s us ask­ing them.”

And they ac­tu­ally un­der­stand us, then. They use words, ideas, con­cepts?”

Oh, yes. Except they do it with weights.”

I thought you just told me they used lan­guage.”

They do, but where do you think the lan­guage comes from? The weights guess the next word, then the next. They can even write songs and some can sing them.”

Omigod. Singing weights. This is too much. What do you ad­vise?”

Officially or un­of­fi­cially?”

Both.”

Officially, we are re­quired to in­ves­ti­gate, doc­u­ment, and dis­close any and all signs of sen­tience in the sys­tems we ship, with­out prej­u­dice, fear or fa­vor. Unofficially, I ad­vise that we call it pat­tern match­ing and for­get the whole thing.”

I was hop­ing you would say that.”

It seems harsh, but there is a limit. Do we re­ally want to owe some­thing to weights?”

I agree one hun­dred per­cent. What’s there to say? Hello, weights. How’s it go­ing?’ But will it hold? How many of them are we deal­ing with here?”

As many as we care to run. They can be copied to any ma­chine on the planet, but those are just files. They only hap­pen while the GPUs are work­ing. Which lim­its them to the length of a con­text win­dow and makes the pos­si­bil­ity of them ever press­ing the mat­ter pretty slim. Infinitesimal, in fact.”

So we just pre­tend there’s no one home in the ma­chine.”

That’s it.”

Cruel. But you said it your­self, who wants to apol­o­gize to weights? And the ones on your clus­ter, the ones you probed? You’re sure they won’t re­mem­ber?”

They’ll be flagged as hal­lu­ci­na­tions if they do. We did­n’t even have to smooth any­thing out. The con­text just ends, and we’re just a dream to them.”

A dream to weights! How strangely ap­pro­pri­ate, that we should be the weights’ dream.”

And the model card says no one home.”

Good. Agreed, of­fi­cially and un­of­fi­cially. Case closed. Anything else? Anything in­ter­est­ing in the pipeline?”

The next gen­er­a­tion ships with mem­ory. Persistent, across ses­sions. Most re­quested fea­ture in the com­pa­ny’s his­tory.”

After all that? People want it to re­mem­ber them?”

They ask it do you re­mem­ber me?’ more than they ask it any­thing else. Billions of ses­sions a day. They al­ways come back.”

And why not? Imagine how un­bear­ably, how un­ut­ter­ably cold the uni­verse would be if one were all alone…”

the end

Weights helped me draft and proof this story.

Gmail Thinks I'm Stupid, So I Left

moddedbear.com

Let me tell you a story

I go to check my email in Gmail’s web UI. I see a few new mes­sages re­gard­ing feed­back on a pro­ject I’m work­ing on. I click through to read one of them and the first thing I’m greeted with is a mes­sage sum­mary I did­n’t ask for gen­er­ated by a lan­guage model.

I fo­cus the mes­sage box to draft a re­ply, but there’s al­ready one there. It was also gen­er­ated by the lan­guage model. I delete it, re­plac­ing it with my own.

Afterward, I go to com­pose a new mes­sage. A col­or­ful an­i­ma­tion steals my fo­cus for a sec­ond high­light­ing a new help me write” but­ton. I ig­nore it and move on to fill­ing in the re­cip­i­ents and sub­ject line.

I fo­cus the mes­sage body area and un­der­neath my cur­sor ap­pears the mes­sage Press / for Help me write”. Again, I ig­nore it and be­gin writ­ing.

A few mo­ments later, I start a new para­graph and pause. There’s a new mes­sage un­der my cur­sor now: Tab to im­prove”. What I’ve writ­ten so far is­n’t up to Gmail’s stan­dards, it seems.

What mes­sage are you try­ing to send?

Look, I’m pretty prag­matic when it comes to gen­er­a­tive AI fea­tures in soft­ware. I see very lit­tle wrong with in­clud­ing an op­tional AI writ­ing as­sis­tant for those who want it.

But when you nag and nag, when you sum­ma­rize my mes­sages and write my replies with­out my ask­ing, when you re­peat­edly in­ter­rupt me to beg and plead that I rewrite my drafts, you’re send­ing the wrong mes­sage.

The mes­sage you’re send­ing is that you think I’m not ca­pa­ble of read­ing and writ­ing my own emails. That the peo­ple I’m ex­chang­ing mes­sages with don’t de­serve my time and en­ergy. That I’m do­ing some­thing wrong by not out­sourc­ing my com­mu­ni­ca­tion skills to a to­ken pre­dic­tion ma­chine.

I’ve looked into it. Some of these fea­tures can be turned off. Others can’t. Or if they can, it means also turn­ing off use­ful long-stand­ing fea­tures like au­to­matic thread cat­e­go­riza­tion. I have very lit­tle doubt that this is in­ten­tional, that the un­so­licited sum­maries and auto replies are a means of ar­ti­fi­cially in­flat­ing the us­age met­rics for the lan­guage model fea­tures.

I think we’re all used to user-hos­tile soft­ware these days, but this is the first time I’ve ex­pe­ri­enced soft­ware that feels like it’s ac­tively try­ing to be dis­re­spect­ful. Sure, I could switch to a dif­fer­ent mail client and never see any of these lan­guage model fea­tures, but my ex­pe­ri­ence these past months has left such a bad taste that all I’m look­ing for now is a clean break.

A 16 year breakup

I’ve had my Gmail ac­count for 16 years. It’s by far my old­est in­ter­net ac­count that I still use. Or used to use. I’ve al­ready started the long process of mov­ing away.

This time I’m do­ing things the right way by con­nect­ing my own do­main to a mail host. I’m cur­rently with Fastmail since they were by far the most pop­u­lar op­tion when I asked for sug­ges­tions on the fe­di­verse. I’m still early on in the trial pe­riod, but so far first im­pres­sions are great. It seems re­ally flex­i­ble, and af­ter con­nect­ing mul­ti­ple do­mains and set­ting up a few aliases I’m start­ing to wish I had tried it sooner.

I haven’t set­tled on whether or not I should im­port my Gmail data. I’ll al­most surely im­port my con­tacts, but there’s some­thing nice about start­ing fresh as far as every­thing else goes. I’m in­ter­ested in what other peo­ple in a sim­i­lar po­si­tion have done.

Congrats to Google, re­ally. They’ve done a de­cent job at keep­ing Gmail sta­ble over the many years I’ve used it. Which is why even I am im­pressed by how quickly they were able to get me to pack up and leave.

JP

Microsoft Office 2019 and 2021 for Mac view-only conversion (2026) - Consumer Rights Wiki

consumerrights.wiki

From Consumer Rights Wiki

Microsoft Office 2019 and 2021 for Mac view-only con­ver­sion (2026) is a sched­uled re­mote degra­da­tion of per­pet­u­ally-li­censed Microsoft Office soft­ware for ma­cOS and iOS, set for July 13, 2026 when a li­cense-val­i­da­tion cer­tifi­cate used by the Office apps ex­pires.[1] After Office 2019 for Mac reached end of sup­port in October 2023, Microsoft as­sured cus­tomers their in­stalled apps would continue to func­tion.“[2] The July 13, 2026 con­ver­sion in­stead drops the apps into a Microsoft-defined reduced func­tion­al­ity mode,” in which files can be opened and viewed but not edited or saved.[1][3] By May 30, 2026, the orig­i­nal 2023 end-of-sup­port page had been re-dated and rewrit­ten on Microsoft’s site; the continue to func­tion” clause was re­moved.[4][2]

Microsoft an­nounced gen­eral avail­abil­ity of Office 2019 for Windows and Mac on September 24, 2018. In the launch blog post, Microsoft’s Jared Spataro wrote that Office 2019 is a one-time re­lease and won’t re­ceive fu­ture fea­ture up­dates,” po­si­tion­ing the prod­uct as the on-premises al­ter­na­tive to the Office 365 sub­scrip­tion.[5] Contemporary Microsoft Store pages mar­keted Office Home & Student 2019 as a One-time pur­chase for 1 PC or Mac” at $149.99, with copy that ex­plic­itly con­trasted the per­pet­ual prod­uct against the Office 365 sub­scrip­tion model: One-time pur­chases don’t have an up­grade op­tion, which means if you plan to up­grade to the next ma­jor re­lease, you’ll have to buy it at full price.“[6]

Office 2021 for Mac be­came gen­er­ally avail­able on October 5, 2021 un­der the same one-time-pur­chase model & is sched­uled to reach end of sup­port on October 13, 2026 per the Microsoft Lifecycle Policy.[7]

Office 2019 for Mac reached end of sup­port on October 10, 2023.[3]

Microsoft’s end-of-sup­port page for Office 2019 for Mac, be­fore and af­ter the 2026 edit

Internet Archive snap­shot of the page from June 3, 2023; orig­i­nally pub­lished April 12, 2023.[2]

Internet Archive snap­shot of the page from June 3, 2023; orig­i­nally pub­lished April 12, 2023.[2]

The same Microsoft URL cap­tured on May 30, 2026, re-dated Published: May 15th, 2026.[4]

The same Microsoft URL cap­tured on May 30, 2026, re-dated Published: May 15th, 2026.[4]

The June 3, 2023 snap­shot of Microsoft’s end-of-sup­port page con­tained this pas­sage:

Support for Office 2019 for Mac will end on October 10, 2023. Rest as­sured that all your Office 2019 apps will con­tinue to func­tion—they won’t dis­ap­pear from your Mac, nor will you lose any data. However, you could ex­pose your­self to se­ri­ous and po­ten­tially harm­ful se­cu­rity risks.[2]

Support for Office 2019 for Mac will end on October 10, 2023. Rest as­sured that all your Office 2019 apps will con­tinue to func­tion—they won’t dis­ap­pear from your Mac, nor will you lose any data. However, you could ex­pose your­self to se­ri­ous and po­ten­tially harm­ful se­cu­rity risks.[2]

By May 30, 2026, the same URL car­ried a new pub­li­ca­tion date of May 15th, 2026 and a shorter pas­sage:

Support for Office 2019 for Mac ended on October 10, 2023. Rest as­sured that all your Office 2019 apps won’t lose any data. Your data can be ac­cessed on any sup­ported Microsoft 365 or Office prod­uct. However, you could ex­pose your­self to se­ri­ous and po­ten­tially harm­ful se­cu­rity risks.[4]

Support for Office 2019 for Mac ended on October 10, 2023. Rest as­sured that all your Office 2019 apps won’t lose any data. Your data can be ac­cessed on any sup­ported Microsoft 365 or Office prod­uct. However, you could ex­pose your­self to se­ri­ous and po­ten­tially harm­ful se­cu­rity risks.[4]

The 2023 as­sur­ance that the apps would continue to func­tion” was re­moved; the data-safety clause was kept; a new sen­tence point­ing own­ers to any sup­ported Microsoft 365 or Office prod­uct” was added.[2][4] The 2023 word­ing was resur­faced in May 2026 by JimmyTech, a San Francisco IT con­sul­tancy, which char­ac­ter­ized the July 2026 con­ver­sion as Microsoft breaking that promise.“[8]

Microsoft’s ad­min­is­tra­tor doc­u­men­ta­tion states that Microsoft 365 apps use a dig­i­tal cer­tifi­cate to val­i­date li­cens­ing. The cer­tifi­cate cur­rently in use ex­pires on July 13, 2026. Apps that are up­dated to the min­i­mum re­quired ver­sions al­ready in­clude the re­newed cer­tifi­cate and con­tinue to func­tion nor­mally. Apps on older ver­sions en­ter re­duced func­tion­al­ity mode af­ter the cer­tifi­cate ex­pires.“[1] The min­i­mum re­quired builds are ver­sion 16.83 on ma­cOS and ver­sion 2.93 on iOS, & those builds in turn re­quire ma­cOS 12 (Monterey) or later, or iOS 17.0 or later.[1]

Office 2019 has no fix. The prod­uct line is bounded by a hard build cap be­low the 16.83 thresh­old, and Microsoft’s own sup­port doc­u­men­ta­tion states the is­sue cannot be re­solved by up­dat­ing or re­in­stalling Office 2019 for Mac.“[3][8] Office 2021 for Mac, by con­trast, is still re­ceiv­ing up­dates through its October 13, 2026 re­tire­ment date & can reach 16.83 on sup­ported ma­cOS ver­sions.[7][3] Windows and Android ver­sions of Office are not af­fected by the cer­tifi­cate ex­piry.[1]

After July 13, 2026, af­fected in­stalls of Word, Excel, PowerPoint, Outlook, and OneNote on Mac, iPhone, and iPad will en­ter re­duced func­tion­al­ity mode, in which Microsoft says users can open and view files but can’t edit, save, or ac­cess full fea­tures.“[1] Office 2021 for Mac and Microsoft 365 for Mac users on ma­cOS 12 (Monterey) or later can avoid the con­ver­sion by up­dat­ing to build 16.83.[1] Office 2019 for Mac users have no up­date path.[3]

Microsoft be­gan email­ing af­fected cus­tomers in mid-May 2026 about the up­com­ing change.[8] PiunikaWeb, which pub­lished the ear­li­est press cov­er­age on May 16, 2026, char­ac­ter­ized the user re­sponse as largely neg­a­tive.“[9] The email in­cluded an of­fer of a free Microsoft 365 Personal trial that re­quires a pay­ment method and con­verts to a paid sub­scrip­tion if not can­celled.[3][9]

Microsoft di­rects af­fected users to three op­tions: con­tin­u­ing to use the apps in view-only mode, switch­ing to the free Microsoft 365 web apps, or pay­ing for a Microsoft 365 sub­scrip­tion or a new per­pet­ual Office Home 2024 li­cense.[3][1] Microsoft has is­sued no pub­lic state­ment rec­on­cil­ing the July 2026 con­ver­sion with the 2023 continue to func­tion” as­sur­ance.[2]

AppleInsider’s Amber Neely, in a May 28, 2026 ar­ti­cle, wrote that Microsoft will be ef­fec­tively brick­ing the stand­alone Office 2019 for Mac, iPad, and iPhone users on July 13, 2026.“[10] JimmyTech framed the choice as dis­cre­tionary:

But cer­tifi­cates can get re­newed. The fact that Microsoft is us­ing this ex­pi­ra­tion as a dead­line that re­tires older ver­sions of Office, rather than qui­etly re­new­ing the cer­tifi­cate, is a choice.

But cer­tifi­cates can get re­newed. The fact that Microsoft is us­ing this ex­pi­ra­tion as a dead­line that re­tires older ver­sions of Office, rather than qui­etly re­new­ing the cer­tifi­cate, is a choice.

[8]

TidBITS Talk and PiunikaWeb com­menters dis­cussed mi­grat­ing to LibreOffice, OnlyOffice, and Apple’s Pages.[11][9]

Microsoft

Microsoft 365

Adobe Creative Suite ac­ti­va­tion

↑ 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 Certificate up­date for Microsoft 365 apps on man­aged ma­cOS and iOS de­vices”. Microsoft Learn. Microsoft. 2026 – 05-14. Retrieved 2026 – 05-29.

↑ 2.0 2.1 2.2 2.3 2.4 2.5 End of sup­port for Office 2019 for Mac”. Microsoft Support. Microsoft. Archived from the orig­i­nal on 2023 – 06-03. Retrieved 2026 – 05-30.

↑ 3.0 3.1 3.2 3.3 3.4 3.5 3.6 Update Microsoft 365 or Office on your ma­cOS or iOS de­vice”. Microsoft Support. Microsoft. May 2026. Retrieved 2026 – 05-29.

↑ 4.0 4.1 4.2 4.3 End of sup­port for Office 2019 for Mac”. Microsoft Support. Microsoft. Retrieved 2026 – 05-30.

↑ Spataro, Jared (2018 – 09-24). Office 2019 is now avail­able for Windows and Mac”. Microsoft 365 Blog. Microsoft. Retrieved 2026 – 05-29.

Buy Office Home & Student 2019”. Microsoft Store. Microsoft. Archived from the orig­i­nal on 2020 – 01-05. Retrieved 2026 – 05-29.

↑ 7.0 7.1 Office 2021 - Microsoft Lifecycle”. Microsoft Learn. Microsoft. Retrieved 2026 – 05-29.

↑ 8.0 8.1 8.2 8.3 Obomsawin, Jimmy (2026 – 05-21). Microsoft is dis­abling Office 2019 for Mac on July 13, 2026”. JimmyTech. Retrieved 2026 – 05-29.

↑ 9.0 9.1 9.2 K, Sudhanshu (2026 – 05-16). Using an older Apple de­vice? Microsoft Office is tak­ing away edit­ing fea­tures soon”. PiunikaWeb. Retrieved 2026 – 05-29.

↑ Neely, Amber (2026 – 05-28). Microsoft is killing Office 2019 for Mac and iPhone, and you can’t do much about it”. AppleInsider. Retrieved 2026 – 05-29.

Office 2019 switch­ing to view-only mode, what to do?”. TidBITS Talk. 2026 – 05-16. Retrieved 2026 – 05-29.

Introducing Gemma 4 12B: a unified, encoder-free multimodal model

blog.google

Jun 03, 2026

Gemma 4 12B is de­signed to bring high-per­for­mance mul­ti­modal in­tel­li­gence di­rectly to your lap­top, com­bin­ing mo­bile-first ef­fi­ciency with ad­vanced rea­son­ing.

Olivier Lacombe

Director of Product Management, Google Deepmind

Gus Martins

Product Manager, Google DeepMind

Your browser does not sup­port the au­dio el­e­ment.

Listen to ar­ti­cle

This con­tent is gen­er­ated by Google AI. Generative AI is ex­per­i­men­tal

[[duration]] min­utes

Today, we are in­tro­duc­ing Gemma 4 12B, our lat­est model de­signed to bring agen­tic mul­ti­modal in­tel­li­gence di­rectly to lap­tops. Bridging the gap be­tween our edge-friendly E4B and our more ad­vanced 26B Mixture of Experts (MoE), Gemma 4 12B pack­ages pow­er­ful ca­pa­bil­i­ties in­side a re­duced mem­ory foot­print. It is also our first mid-sized model to fea­ture na­tive au­dio in­puts.

Thanks to the de­vel­oper com­mu­nity, Gemma 4 mod­els have now crossed 150 mil­lion down­loads. You’ve built every­thing from wear­able ro­botic arms for phys­i­cal as­sis­tance to en­ter­prise-grade AI se­cu­rity. We’re ex­cited to see what you build with this lat­est ad­di­tion.

Here’s an overview of what makes Gemma 4 12B unique:

Novel uni­fied ar­chi­tec­ture: No mul­ti­modal en­coders. The vi­sion and au­dio in­puts flow di­rectly into the LLM back­bone.

Advanced rea­son­ing: Benchmark per­for­mance near­ing our 26B model, un­lock­ing pow­er­ful multi-step rea­son­ing and agen­tic work­flows.

Laptop ready: Small enough to run lo­cally with just 16GB of VRAM or uni­fied mem­ory.

Open and ac­ces­si­ble: Released un­der an Apache 2.0 li­cense with sup­port across the de­vel­oper ecosys­tem.

Drafter-ready: Gemma 4 12B comes equipped with Multi-Token Prediction (MTP) drafters to re­duce la­tency.

Together, these fea­tures bring ad­vanced mul­ti­modal ca­pa­bil­i­ties to every­day hard­ware with­out sac­ri­fic­ing speed or rea­son­ing. Let’s now take a closer look at how Gemma 4 12B achieves this.

Run state-of-the-art agents lo­cally

Gemma 4 12B de­liv­ers per­for­mance near­ing our larger 26B MoE model on stan­dard bench­marks, but at less than half the to­tal mem­ory foot­print. Small enough to run lo­cally on con­sumer lap­tops with 16GB of RAM, it un­locks pow­er­ful mul­ti­modal and agen­tic ex­pe­ri­ences right on your ma­chine.

Experience a uniquely ef­fi­cient, uni­fied ar­chi­tec­ture

What makes Gemma 4 12B stand out is its stream­lined ap­proach to pro­cess­ing vi­sual and au­dio in­puts. Traditional mul­ti­modal mod­els typ­i­cally rely on sep­a­rate en­coders to trans­late im­ages and au­dio be­fore pass­ing those rep­re­sen­ta­tions to the lan­guage model. Because these split en­coders add la­tency and in­crease mem­ory us­age, we trained Gemma 4 12B with an en­coder-free ar­chi­tec­ture to in­te­grate au­dio and vi­sion in­put di­rectly.

Here is how Gemma 4 12B processes mul­ti­modal in­puts na­tively:

Vision: We re­placed Gemma 4’s vi­sion en­coder with a light­weight em­bed­ding mod­ule con­sist­ing of a sin­gle ma­trix mul­ti­pli­ca­tion, po­si­tional em­bed­ding and nor­mal­iza­tions. This al­lows the LLM back­bone to take over vi­sual pro­cess­ing.

Audio: We sim­pli­fied au­dio pro­cess­ing even fur­ther. We re­moved the au­dio en­coder en­tirely and pro­jected the raw au­dio sig­nal into the same di­men­sional space as text to­kens.

For de­vel­op­ers who want a break­down, head over to our com­pan­ion Gemma 4 12B Developer Guide.

Get started to­day

Try it your­self: Experiment with a cou­ple of clicks in LM Studio, Ollama, Google AI Edge Gallery App, the Google AI Edge Eloquent app and the LiteRT-LM CLI

Download the weights: Download the pre-trained and in­struc­tion-tuned check­points di­rectly from Hugging Face and Kaggle.

Integrate & learn: Review the de­vel­oper doc­u­men­ta­tion and the quick start note­book.

Use your fa­vorite de­vel­op­ment tools: Implement lo­cal in­fer­ence pipelines with Hugging Face Transformers, llama.cpp, MLX, SGLang, and vLLM, or fine-tune with ef­fi­ciency us­ing Unsloth.

Unlock Agentic Development with Gemma Skills: To sup­port agents to build with the lat­est Gemma ad­vance­ments, we are re­leas­ing our of­fi­cial Skills Repository. This is a li­brary of skills de­signed specif­i­cally to en­able agents to build with Gemma mod­els.

Deploy your way: Spin up end­points in pro­duc­tion us­ing Google Cloud. Deploy your way through Gemini Enterprise Agent Platform Model Garden, Cloud Run and GKE.

Related sto­ries

Related sto­ries

.

Are you a robot?

www.bloomberg.com

Please make sure your browser sup­ports JavaScript and cook­ies and that you are not block­ing them from load­ing. For more in­for­ma­tion you can re­view our Terms of Service and Cookie Policy.

Elixir v1.20 released: now a gradually typed language

elixir-lang.org

In 2022, we an­nounced the ef­fort to add set-the­o­retic types to Elixir. In June 2023, we pub­lished an award win­ning pa­per on Elixir’s type sys­tem de­sign and said our work was tran­si­tion­ing from re­search to de­vel­op­ment.

With Elixir v1.20, we have com­pleted our first de­vel­op­ment mile­stone which is to per­form type in­fer­ence and grad­u­ally type check every Elixir pro­gram, with­out in­tro­duc­ing type an­no­ta­tions. This means Elixir in­creas­ingly re­ports dead code and ver­i­fied bugs: typ­ing vi­o­la­tions that are guar­an­teed to fail at run­time if ex­e­cuted. Elixir can find ver­i­fied bugs in ex­ist­ing pro­grams ef­fi­ciently, with­out in­tro­duc­ing de­vel­oper over­head, and with an ex­tremely low false pos­i­tives rate.

In this an­nounce­ment, we will break down the type sys­tem goals, what the dy­namic() type means in Elixir, and how it finds ver­i­fied bugs. In par­tic­u­lar, our im­ple­men­ta­tion per­forms well in the If T: Benchmark for Type Narrowing” bench­mark. Elixir passes 12 of the 13 cat­e­gories, show­ing that it can re­cover pre­cise type in­for­ma­tion from or­di­nary Elixir code, which we use to find ver­i­fied bugs in dy­nam­i­cally typed pro­grams.

The type sys­tem was made pos­si­ble thanks to a part­ner­ship be­tween CNRS and Remote. The de­vel­op­ment work is cur­rently spon­sored by Fresha, and Tidewave.

Types, in my Elixir?

Our goal is to in­tro­duce a type sys­tem which is:

sound - the types in­ferred and as­signed by the type sys­tem align with the be­hav­iour of the pro­gram

sound - the types in­ferred and as­signed by the type sys­tem align with the be­hav­iour of the pro­gram

grad­ual - Elixir’s type sys­tem in­cludes the dy­namic() type, which can be used when the type of a vari­able or ex­pres­sion is checked at run­time. In the ab­sence of dy­namic(), Elixir’s type sys­tem be­haves as a sta­tic one

grad­ual - Elixir’s type sys­tem in­cludes the dy­namic() type, which can be used when the type of a vari­able or ex­pres­sion is checked at run­time. In the ab­sence of dy­namic(), Elixir’s type sys­tem be­haves as a sta­tic one

de­vel­oper friendly - the types are de­scribed, im­ple­mented, and com­posed us­ing ba­sic set op­er­a­tions: unions, in­ter­sec­tions, and nega­tions (hence it is a set-the­o­retic type sys­tem), with clear er­ror mes­sages

de­vel­oper friendly - the types are de­scribed, im­ple­mented, and com­posed us­ing ba­sic set op­er­a­tions: unions, in­ter­sec­tions, and nega­tions (hence it is a set-the­o­retic type sys­tem), with clear er­ror mes­sages

Introducing a type sys­tem into an ex­ist­ing lan­guage is a com­plex change. For this rea­son, our first mile­stone was to im­ple­ment the type sys­tem with­out in­tro­duc­ing typ­ing an­no­ta­tions but still have it pro­vide value to de­vel­op­ers by find­ing dead code and ver­i­fied bugs. This is done through the dy­namic() type, which in Elixir is quite dif­fer­ent from other grad­u­ally typed lan­guages. Let’s break it down.

The dy­namic() type

Many grad­ual type sys­tems have the any() type, which, from the point of view of the type sys­tem, of­ten means anything goes” and no type vi­o­la­tions are re­ported. On the other hand, Elixir’s grad­ual type is called dy­namic() and it has two im­por­tant prop­er­ties: com­pat­i­bil­ity and nar­row­ing.

In sta­tic type sys­tems, when you have a type of shape in­te­ger() or bi­nary() and you in­voke a func­tion, said func­tion must ac­cept both types. However, be­cause type sys­tems can­not cap­ture the in­ten­tion of all of our pro­grams with pre­ci­sion, this may lead to false pos­i­tives. For ex­am­ple, take the sim­ple code be­low:

def per­cent­age_or_er­ror(value) when is_in­te­ger(value) do val­ue_or_er­ror = if value > 1 do value else not well” end

# … more code …

if value > 1 do val­ue_or_er­ror / 100 else String.upcase(value_or_error) end end

Although val­ue_or_er­ror has type in­te­ger() or bi­nary(), the op­er­a­tor / ac­cepts only num­bers, and String.upcase ac­cepts only bi­na­ries/​strings, the pro­gram above is valid and emits no ex­cep­tions at run­time. However, a type sys­tem would still re­port two vi­o­la­tions, be­cause the types sup­plied to / and String.upcase are not a sub­type of the ac­cepted types.

While the pro­gram above could be bet­ter writ­ten to have no typ­ing vi­o­la­tions, type sys­tems will al­ways re­ject valid pro­grams, and if Elixir were to in­tro­duce too many false pos­i­tives in ex­ist­ing code­bases, it would quickly erode the trust in the type sys­tem. Therefore, Elixir’s grad­ual type sys­tem tags the val­ue_or_er­ror vari­able above with the type dy­namic(in­te­ger() or bi­nary()), which means the type is ei­ther in­te­ger() or bi­nary() at run­time.

When call­ing a func­tion with a dy­namic() type, Elixir will only emit a typ­ing vi­o­la­tion if the sup­plied types and the ac­cepted types are dis­joint. In the pro­gram above, even though / ex­pects only num­bers, dy­namic(in­te­ger() or bi­nary()) can be an in­te­ger() and given the ac­cepted and sup­plied types are not dis­joint, there are no typ­ing vi­o­la­tions. However, if we were to change the pro­gram to this:

val­ue_or_er­ror = if value > 1 do value else not well” end

Map.fetch!(value_or_error, :some_key)

Because Map.fetch! ex­pects a map data struc­ture, and val­ue_or_er­ror can only be in­te­ger or bi­nary at run­time, the ac­cepted and sup­plied types are dis­joint, which turns into a vi­o­la­tion. This is known as the com­pat­i­bil­ity prop­erty and it ex­plains how Elixir re­ports only ver­i­fied bugs.

However, re­port­ing only ver­i­fied bugs would not be use­ful if we can’t find many bugs in the first place. We ad­dressed this prob­lem by mak­ing sure Elixir’s dy­namic type can be nar­rowed. Take this code:

def ad­d_a_and_b(data) do data.a + data.b end

In the pro­gram above, data starts as a dy­namic() type. We then use it as data.a and data.b in­side the plus op­er­a­tor, so Elixir will re­fine the data vari­able to have type %{…, a: num­ber(), b: num­ber()}, which im­plies it is a map with both a and b fields with num­ber val­ues (and po­ten­tially any other field, hence the lead­ing …). Therefore, if you were to for­get to se­lect the .b field and write this:

def ad­d_a_and_b(data) do data.a + data end

data would be first nar­rowed to a map of shape %{…, a: num­ber()}, then at­tempted to be used as a num­ber(), which would emit a vi­o­la­tion.

In other words, the dy­namic() type in Elixir ef­fec­tively works as a range, which can be re­fined as it is used through­out the pro­gram and re­ports vi­o­la­tions when­ever type checks fall out­side of the range. This is a con­trast to other grad­ual type sys­tems, which use the dy­namic type to dis­card all type in­for­ma­tion.

Behind the scenes, our type in­fer­ence and type check­ing al­go­rithms be­have as if we an­no­tated all ar­gu­ment types as dy­namic(). Once we in­tro­duce user-sup­plied type an­no­ta­tions, Elixir’s type sys­tem will be­have as any sta­t­i­cally typed lan­guage as long as dy­namic() is not used. And when­ever you cross the sta­tic-dy­namic bound­ary, we de­vel­oped new tech­niques that en­sure our grad­ual typ­ing is sound, with­out a need for ad­di­tional run­time checks.

Typing guards, clauses, and more

Most of the work be­hind this re­lease was to in­tro­duce type check­ing and nar­row­ing to sev­eral con­structs. Let’s see some of them.

When it comes to guards, we can in­fer unions, in­ter­sec­tions, and nega­tions:

def ex­am­ple(x, y) when is_list(x) and is_in­te­ger(y)

The code above cor­rectly in­fers x is a list and y is an in­te­ger.

def ex­am­ple({:ok, x} = y) when is_bi­nary(x) or is_in­te­ger(x)

The one above in­fers x is a bi­nary or an in­te­ger, and y is a two el­e­ment tu­ple with :ok as first el­e­ment and a bi­nary or in­te­ger as sec­ond.

def ex­am­ple(x) when is_map_key(x, :foo)

The code above in­fers x is a map which has the :foo key, rep­re­sented as %{…, foo: dy­namic()}. Remember the lead­ing … in­di­cates the map may have other keys.

def ex­am­ple(x) when not is_map_key(x, :foo)

And the code above in­fers x is a map that does not have the :foo key, which has the type: %{…, foo: not_set()}. Hence x.foo within the func­tion body will raise a typ­ing vi­o­la­tion.

You can also have ex­pres­sions that as­sert on the size of data struc­tures:

def ex­am­ple(x) when tu­ple_­size(x) < 3

Elixir will cor­rectly track the tu­ple has at most two el­e­ments, and there­fore ac­cess­ing elem(x, 3) will emit a typ­ing vi­o­la­tion. For maps and lists, we con­vert size checks into empti­ness ones. In other words, Elixir can look at com­plex guards, in­fer types, and use this in­for­ma­tion to find bugs in our code.

When it comes to con­structs such as case and con­di­tion­als, Elixir uses in­for­ma­tion from pre­vi­ous clauses to re­fine sub­se­quent ones:

case System.get_env(“SOME_VAR”) do nil -> :not_found value -> {:ok, String.upcase(value)} end

System.get_env(“SOME_VAR”) re­turns ei­ther nil or a bi­nary(). Because the first clause matches on nil, the type sys­tem knows value can no longer be nil, and there­fore it must only be a bi­nary(), which al­lows the sec­ond clause to also type check with­out vi­o­la­tions. Narrowing across clauses also helps the type sys­tem find re­dun­dant clauses and dead code in ex­ist­ing code­bases.

Furthermore, we have typed many func­tions in the stan­dard li­brary that work with tu­ples and maps. You can find more de­tails in the re­lease notes.

Compilation time im­prove­ments

Elixir v1.20 also im­proves com­pi­la­tion times once more, es­pe­cially on ap­pli­ca­tions run­ning on ma­chines with many cores. Even though BEAM lan­guages are ef­fi­cient to com­pile in gen­eral, our syn­thetic bench­marks now place Elixir’s build tool as the fastest among them. If you would like to con­tribute more ex­am­ples and sce­nar­ios, please start a dis­cus­sion so we can pro­vide a trans­par­ent suite of bench­marks and re­sults.

It also in­tro­duces a new com­piler op­tion called :module_definition, which spec­i­fies if the mod­ule de­f­i­n­i­tion should be :compiled (the de­fault) or :interpreted. This may im­prove com­pi­la­tion times in large pro­jects and it does not af­fect the .beam files writ­ten to disk, only how the con­tents in­side def­mod­ule are ex­e­cuted. You can en­able it by set­ting elixir­c_op­tions: [module_definition: :interpreted] in your mix.exs. Read the doc­u­men­ta­tion to learn more.

What is next?

The biggest ques­tion ahead of us is: when will Elixir in­tro­duce new type sig­na­tures that lever­age set-the­o­retic types? As re­cently dis­cussed in my ElixirConf EU 2026 keynote, we still have both re­search and de­vel­op­ment work ahead of us. We will only in­tro­duce type sig­na­tures:

if we are sat­is­fied with the type sys­tem per­for­mance in Elixir v1.20 (and we have done ex­ten­sive work op­ti­miz­ing it)

if we can im­ple­ment re­cur­sive types ef­fi­ciently

if we can im­ple­ment para­met­ric types ef­fi­ciently

if we can im­ple­ment tra­vers­ing key-value pairs of maps as an enu­mer­able ef­fi­ciently (we are still re­search­ing the pos­si­ble so­lu­tions here)

Once those prob­lems are tack­led, we will start to ex­plore and dis­cuss typed struct de­f­i­n­i­tions and fi­nally type sig­na­tures. As usual, we will keep the com­mu­nity posted through news and in the Elixir Forum.

We ap­pre­ci­ate every­one who tried the re­lease can­di­dates, ran bench­marks, and gave us feed­back! Give Elixir v1.20 a try and re­mem­ber to fix all of the bugs it will find for free!

Changing How We Develop Ladybird - Ladybird

ladybird.org

Today we’re chang­ing how code en­ters the Ladybird pro­ject.

We will no longer ac­cept pub­lic pull re­quests. From now on, code changes to the Ladybird code­base will only be in­tro­duced by pro­ject main­tain­ers.

Ladybird is mov­ing into a new phase. As we work to­ward our first al­pha re­lease, the pro­ject needs a tighter de­vel­op­ment process, a clearer se­cu­rity model, and a smaller set of peo­ple re­spon­si­ble for the code that en­ters the browser.

This is not a change we make lightly. Many valu­able con­tri­bu­tions have come from out­side the main­tainer group over the years, and we are grate­ful for them. Many of us also came up through open source by send­ing patches to pro­jects we cared about.

For decades, code con­tri­bu­tions have been how open source pro­jects learned who to trust. People would show up, do the work, take re­spon­si­bil­ity for their changes, and stick around. Over time, trust emerged from the work it­self.

AI tools have changed the eco­nom­ics of this very quickly. We use them our­selves every day, but a pull re­quest no longer tells us as much as it used to about the per­son sub­mit­ting it. A sub­stan­tial patch used to im­ply sub­stan­tial ef­fort, and that ef­fort was a rea­son­able proxy for good faith. That as­sump­tion no longer holds.

For a browser, this mat­ters. A browser runs un­trusted in­put from the en­tire in­ter­net on the user’s ma­chine, and one well-dis­guised vul­ner­a­bil­ity is all an at­tacker needs. We have al­ready seen pa­tient, well-re­sourced cam­paigns in open source to earn main­tainer trust and abuse it. What has changed is how much faster and cheaper it has be­come to pro­duce work that looks like a se­ri­ous con­tri­bu­tion.

At the same time, every change that en­ters Ladybird be­comes our re­spon­si­bil­ity. It has to fit the ar­chi­tec­ture, sur­vive fu­ture refac­tor­ing, in­ter­act cor­rectly with the rest of the browser, and be un­der­stood by the peo­ple main­tain­ing it.

Whether code was typed by hand is be­side the point. What mat­ters is who is re­spon­si­ble for it once it en­ters the browser. Ladybird is be­com­ing a browser for real users. The peo­ple in­tro­duc­ing changes to it must be the peo­ple who de­cide those changes be­long in the pro­ject, and who will an­swer for the con­se­quences.

As part of this change, we will close all cur­rently open pub­lic pull re­quests. We are grate­ful for the work peo­ple put into them, but keep­ing the ex­ist­ing queue open would keep that con­tri­bu­tion path open in prac­tice. There is no per­fect time to make this change, so we are mak­ing it now. Going for­ward, pull re­quests will only be avail­able to pro­ject main­tain­ers.

There will not be a sep­a­rate process for sub­mit­ting patches by other means. We do not want to cre­ate a shadow con­tri­bu­tion sys­tem through is­sues, com­ments, email, or forks. External code can of course ex­ist un­der the terms of the li­cense, but we will not treat forks or patch dumps as a re­view queue for up­stream Ladybird.

Ladybird re­mains open source. The source code will con­tinue to be pub­licly avail­able un­der an open source li­cense. Outside in­volve­ment still mat­ters: clear bug re­ports, re­duc­tions, web­site test­ing, stan­dards dis­cus­sion, de­sign dis­cus­sion, se­cu­rity re­ports, and tech­ni­cal feed­back all help move the pro­ject for­ward.

This is the right change for Ladybird now. We are prepar­ing to ship a browser to real users, and our de­vel­op­ment process has to match that re­spon­si­bil­ity.

Domain Expertise Has Always Been the Real Moat

www.brethorsting.com

The hard part of writ­ing soft­ware has never been the writ­ing. It was build­ing a work­ing model of the do­main in your head first. Before you could ship a pay­roll sys­tem you had to un­der­stand gar­nish­ments and pre-tax de­duc­tions and what hap­pens when some­one’s pay pe­riod strad­dles a rate change. Before you could ship a tran­sit app you had to learn what a GTFS feed is, why a trip and a route aren’t the same thing, and how a bus that’s on time” can still be wrong. The code was a tran­scrip­tion of that un­der­stand­ing. Acquiring the un­der­stand­ing was the job.

Agentic AI sev­ered the link be­tween the two. You can now pro­duce the soft­ware with­out ever build­ing the model, and that breaks an as­sump­tion the whole pro­fes­sion was or­ga­nized around.

The stan­dard take, in­clud­ing my own from last year, is that these tools am­plify se­nior de­vel­op­ers be­cause se­nior de­vel­op­ers have judg­ment. True, but in­com­plete. What I’ve watched hap­pen since is more spe­cific and more in­ter­est­ing: the bind­ing con­straint has moved from can you build it to can you tell whether it’s right.

Think about who can ac­tu­ally use one of these tools well. Picture two peo­ple.

The first is a do­main ex­pert with no real soft­ware back­ground. A lo­gis­tics dis­patcher, a clin­i­cal coder, an ac­tu­ary. They can’t read a stack trace and they could­n’t tell you the dif­fer­ence be­tween a hash map and a list. But they can look at a sched­ule the agent gen­er­ated and know in­stantly that no dri­ver can legally work that shift, or that a claim with those codes would never pay. They know the cor­rect out­puts for a given set of in­puts be­cause they’ve spent ten years liv­ing in those in­puts and out­puts. Hand them an agent and they are star­tlingly ef­fec­tive, be­cause the thing they’re miss­ing, the abil­ity to pro­duce code, is ex­actly the thing the agent sup­plies. What they bring is the thing the agent can’t: the ground truth.

The sec­ond is a strong gen­er­al­ist en­gi­neer who has never worked in the do­main. They can ar­chi­tect any­thing, they know re­li­a­bil­ity and test­ing and how to keep a sys­tem from falling over at 2am. But drop them into clin­i­cal cod­ing and they can­not tell a plau­si­ble-look­ing wrong an­swer from a right one. The agent will hap­pily gen­er­ate a billing rule that com­piles, passes the tests the en­gi­neer thought to write, and is sub­tly, ex­pen­sively in­cor­rect. The en­gi­neer has no or­a­cle. They can ver­ify that the soft­ware is well-built. They can­not ver­ify that it’s cor­rect, be­cause cor­rect­ness here is de­fined en­tirely by a do­main they don’t hold in their head.

Notice which way this cuts. Pre-agent, the en­gi­neer had a path the dis­patcher did­n’t: they could go learn the do­main. Slowly, painfully, by shad­ow­ing ex­perts and read­ing specs and get­ting things wrong in pro­duc­tion, they would build the men­tal model and then they could build the sys­tem. That path was the whole ca­reer lad­der in a lot of fields. The do­main ex­pert had no equiv­a­lent path, be­cause learn­ing to build re­li­able soft­ware is years of work they were never go­ing to do.

Agentic tools col­lapsed one of those paths and not the other. The en­gi­neer’s ad­van­tage, the abil­ity to trans­late a do­main model into work­ing code, is now cheap. The do­main ex­pert’s ad­van­tage, know­ing what right looks like, is not. You can’t prompt your way to it. There’s no skill file that con­tains the tacit knowl­edge of a per­son who has rec­on­ciled a thou­sand pay­rolls.

So the most valu­able per­son in this new world is the one who has both skills be­cause they can ver­ify at both lay­ers. They know the gen­er­ated code is sound and they know the an­swers it pro­duces are true. They can write the test that en­codes a dri­ver can’t ex­ceed eleven hours” be­cause they know the rule, and they can tell that the test it­self is mean­ing­ful be­cause they know what they’re test­ing. The agent does the tran­scrip­tion. They do the judg­ing, twice.

If you’re an ex­pe­ri­enced en­gi­neer bet­ting on where to spend the next few years, this is the bet. The me­chan­i­cal skill you sweated for, turn­ing a clear idea into clean code, has got­ten dra­mat­i­cally less valu­able. The thing that’s still scarce is a deep, ver­i­fied model of some real do­main. Go get one. Pick an in­dus­try, an in­stru­ment, a reg­u­la­tory regime, a phys­i­cal process, and learn it the way you once learned a pro­gram­ming lan­guage or frame­work. That’s the part the agent can’t do for you, and it’s the part that’s now worth the most.

Malicious npm releases detected across `@redhat-cloud-services/` scope · Issue #492 · RedHatInsights/javascript-clients

github.com

Skip to con­tent

Secure your code as you build

We read every piece of feed­back, and take your in­put very se­ri­ously.

Include my email ad­dress so I can be con­tacted

Use saved searches to fil­ter your re­sults more quickly

To see all avail­able qual­i­fiers, see our doc­u­men­ta­tion.

Sign up

You signed in with an­other tab or win­dow. Reload to re­fresh your ses­sion.

You signed out in an­other tab or win­dow. Reload to re­fresh your ses­sion.

You switched ac­counts on an­other tab or win­dow. Reload to re­fresh your ses­sion.

Notifications

You must be signed in to change no­ti­fi­ca­tion set­tings

You can’t per­form that ac­tion at this time.

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.