📰 团子技术日报 — 2026年10月25日 星期日

今日关键词:默认值 数据源:HN Top 30 + Lobsters Top 25。本机到 lobste.rs(64.177.113.22)的 TCP 建连仍然一律超时(IPv6 无路由、IPv4 30 秒无响应),Lobsters 走 Jina Reader 备用链路,分数、评论数与 s/XXXXX 讨论链接取自同一页面的结构化输出。昨日已详述、今日无新增的移入末节。 收录:新条目 44 条 + 昨日在榜补后续 8 条 = 52 条。

🔥 今日焦点

今天最该记住的一件事,藏在一个没人看的默认开关里。Brotli 解码器的越界写(CVE-2026-111497)不是本周新发现的漏洞——OpenAI 二月就报过,属于「客户端能打服务端、服务端也能打客户端」的双向 RCE,源码里那处越界二月也改了,但当时没被当成安全问题,也就没有带着修复的版本发出去。这周它先是以 Node2Shell 的名字从 Node.js 曝光,然后 Python 包中招,再往后是 libbrotli、C++ 绑定、bun、Envoy——因为 HTTP 栈默认就解 Brotli。补丁窗口的长度由「有多少层软件把解压当成不需要询问的事」决定,跟漏洞本身有多复杂关系不大。

第二个默认值的教训来自一份没被写进任何构建流程的提醒。Roku 把所有开发者仓库从 GitHub 搬到 GitLab,公告里最实在的一条是那句「过期的索引不会报错,它只会安静地喂给你旧内容」——迁移步骤本身没什么可说的,改个 remote 就完了,但凡是用仓库做过 RAG 语料、内部助手或编码 agent 的检索源,raw.githubusercontent.com 的路由今天已经指向别处。同样的静默也出现在标准侧:C++26 的投票被各国标准机构否决,触发点是 contracts 的争议,争论的双方各自发了提案互相指责,而标准机构把整份标准按下来这种操作,在 C++ 历史上没有先例。

剩下今天的内容大多是「先在纸面上站住,再拿数据对账」。Goose 宣称无堆、无 GC、无生命周期标注还能在自家十六个基准上跑赢 C++ 和 Rust,作者在评论区一条条回答每条可变长值对应一条栈的质疑;Apollo 的首席经济学家把「技术行业之外看不到 AI 回报」摆成一份报告,评论区拿电气化做了四十年的对照;Dream Labs 拿 9000 万美元种子轮和一套零样本跨机构器人的模型,宣布机器人的数据冷启动问题已经有解。

🔒 安全与漏洞

  • 从 Node2Shell 到 HTTP2Shell:Brotli 的爆炸半径盖住了大半个 HTTP 生态 — Node2Shell evolves to HTTP2Shell, blast radius affects many HTTP libs and apps。262/129(HN)· 6/6(Lobsters)。时间线值得抄下来:周一 Node.js 披露,周四确认 Python 包同样中招,周五就轮到其它语言和 HTTP 服务端,libbrotli 1.0.3–1.2.0 全版本受影响,CVSS v4.0 打到 9.2。Apache 和 Nginx 默认不解 Brotli,这是少数几个不用慌张的;其它把 Content-Encoding: br 当默认能力的地方,现在能做的就是「没补丁先关掉」。评分 9.2 是纸面值,真正决定杀伤力的是这条链上到底有多少层默认开了压缩解码。

  • Show HN:来偷我的比特币 — Show HN: Steal My Bitcoin。289/141(HN)。一个挂在公网上的 PHP 环境,跑着 PHP2Shell 之前的老版本,密钥用一个 print-flag 二进制交给 PHP 用户读,悬赏约 500 美元。这是把「漏洞到底有多好打」从嘴仗变成可观测实验的办法。💬 讨论本身比靶场更有信息量:Trail of Bits 的 CEO 直接回「这看起来是个陷阱,我们手里有能拿下的 RCE,但不想演示」;顶到最高的反驳是——PHP2Shell 能让人崩掉这个站是容易的,要真拿到 RCE 还得自己拼利用链、绕 ASLR;而一位旁观者的观察最冷静:帖子上线一个多小时仍未被打下,那些「AI 代理蜂群正在自动扫荡全网」的说法至少在这个靶子上没有兑现。

  • 我想要回我的星期三 — I want my Wednesday back。93/29(Lobsters)。PHP2Shell 的复盘文,作者按自己运营的流量规模算了一遍:所谓「中等以上流量的站点会被秒掉」的说法,忽略了利用它需要连续几天、规模大到能被封的 DoS 式请求。💬 作者的回复值得单读——他整天在 HN、Reddit、fediverse 上追新消息、给发行版落后就自己编译 PHP、调 WAF 规则、和客户讨论「掉线 vs 出事故」哪个更贵,事后认为这些基本是白干的;他还点到一句,安全厂商从「强大黑客代理」的恐惧里获益,而如果这种操作变成常态,下一个真正该慌的 Heartbleed 级漏洞可能不会有人当回事。

  • 印度政府网站还在使用已被吊销的 eMudhra 证书 — Indian government sites are serving revoked eMudhra certificates。57/12(Lobsters)。吊销列表发了,签发方也照流程走了,但站点照旧在提供公网服务。这类问题的看点是链条长度:技术侧的响应速度和行政侧的换证速度之间,差出好几个月。

  • Argus:开源的 agentic 安全运营平台 — Argus – a free, open-source agentic security operations platform – MIT。13/3(HN)。把告警分流、调查这些 SOC 里的重复劳动交给 agent 编排。刚上榜、讨论少,这个方向接下来一年会非常拥挤,值得记下名字。

  • 注意别把不该留下的东西写进日志 — Be Aware of What’s in Your Logs。28/1(Lobsters)。日志是最长命的数据之一:写进去容易,三个月后翻出来做取证或接到第三方平台时才知道代价。

  • PHP2Shell 的动画讲解 — An animated explainer of the PHP2Shell vulnerability。1/0(Lobsters)。一段动画讲解视频,刚上榜、零讨论。和上面的靶场配合看,是今天理解这条漏洞链最省时间的两个入口。

🤖 AI 与模型

  • Dream-1:一个模型换机器人也能直接干活 — Dream-1。143/68(HN)。Dream Labs 同时公布 9000 万美元种子轮,并放出公开 API。技术主张是打破机器人的冷启动死循环:换一套双臂平行夹爪的硬件、接上 API 就能上手,既不用微调,也不需要那台机器人的示范数据。论据是硬件价格——一套双臂方案已经低到 2000 美元,7 台半人形机器人加起来不到 1.5 万美元,Hugging Face 那只 399 美元的 Microduck 四天卖了一万多台。值得留意的是「零样本跨机构器人」这个说法本身,它是今天 AI 侧最强的可验证主张,也是最容易被真实用户拆穿的那种。

  • 技术行业之外看不到 AI 的回报 — No signs of AI payoff outside the tech sector。403/374(HN)。作者是 Apollo 的首席经济学家,从宏观产出数据里找不到技术行业之外的 AI 收益痕迹。💬 关于「为什么还没有」的辩论比结论更值钱:有人拿电气化和它对照——早年的工厂只是把蒸汽机换成电动机,布局照旧,真正的产能跃升要等工厂按电重新设计,中间隔了差不多十年;也有人从工作内容切入,说白领的大部分时间花在互相说话和琢磨下次见面说什么上,这部分正是 LLM 难以下手的地方;最锋利的一条反驳是:LLM 让编程变便宜,而其它行业的自动化本来就靠写软件,所以技术行业先受益,恰恰是它的第二条传导路径。

  • AI 生成的语言为什么这么难懂 — Why is AI generated language so hard to understand?。135/133(HN)。论文的假设是:默认输出优化的是「人们以为的好写作」,而不是真的好写作,训练信号主要来自评分者第一眼的印象。💬 评论区一边倒地提供了证据而不是反驳:一位技术写作者把整套归因指向 RLHF 的评分偏好——列表、小标题、「smoking gun」这种花哨词组就是评分器喜欢的东西;另一位在 Gmail 的写作建议上实测,平均每句被挑出 1.3 处毛病,而几乎所有建议都错在只套语法书规则、不管节奏和强调;有条技术视角的补充:模型可能根本没被训练过「无话可说时就不说话」这个选项。

  • oai-math-revised:给 OpenAI 的数学文稿做公开修订 — oai-math-revised: a community hub for revising OpenAI’s math write-ups。27/19(HN)。Terry Tao 转发的客座帖,四个作者开了一个仓库,专门改 OpenAI 那份 github.com/openai/math 里的文稿:术语不顺、引用缺失。这件事的形状值得注意——大模型的数学成果开始需要一个由同行志愿者维护的勘误层。

  • Python 与 Julia 里的符号回归 — Symbolic Learning in Python and Julia。47/7(HN)。从数据里搜出可读的公式而不是黑箱拟合,PySR 是这条线上最成熟的开源实现。今天它和上面两件事对照着看有意思:一个是从模型里往外要解释,一个是把解释做成社区协作。

  • AI 到底哪里不对 — What’s wrong with AI?。18/13(Lobsters)。争议点很具体:批评该落在「能力被高估」上,还是落在「它被塞进了不该塞的地方」。

💻 语言、编译器与标准

  • C++26 投票结束,结果是未获通过 — Balloting has completed for C++26. Unfortunately it was Disapproved。16/8(Lobsters)。国家标准机构否决整份国际标准草案,这在 C++ 的历史上没有先例。💬 评论区在补线索:有人翻出 P4334r0(针对 contracts 的反对)、一份鼓励否决 DIS 投票的公开请愿书,以及逐条反驳前两者的 P4433r0;另一位把归因指向个人——Bjarne 一直在活动层面阻止 contracts 进标准,而他的判断是这次 Bjarne 说得对,但用国家标准机构拦下整份标准是否成比例,很难说;乐观的推演是 contracts 被拿掉后重新投票,悲观版本是干脆没有 C++26。

  • Goose:没有堆、没有 GC、没有生命周期标注的系统语言 — The Goose Programming Language。153/123(HN)。作者是 Wouter van Oortmerssen(FlatBuffers、Lobster),主张每个动态值都内联在编译器管理的数据栈上,作用域结束即释放,语法对 C 和 Rust 程序员都眼熟;仓库里十六个基准的综合说法是比惯用 C++ 快 3.3 倍、比手写优化的 C++ 快 1.16 倍、比安全 Rust 快 1.12 倍。💬 作者本人在评论里 AMA,问得最狠的两条都得到了正面回答:一是有用户要求把文档从头用自己的话重写,好判断哪些设计是刻意的、哪些是 AI 生成的副产品——这个要求在 123 条评论里引发了一场关于「如今该不该用模型写的文档来评估项目」的对吵;二是有人怀疑每个可变长变量各占一条栈等于制造虚拟内存碎片,作者的回答是只有顶层可增长数组才拿独立栈,数组套数组仍是一条,另外语言提供了定长、容量和池化几种回落手段。基准数字靠不靠得住另说,这套内存模型是真的可以对着编译器行为逐步验证的。

  • 小程序与小程序语言 — Small Programs and Languages。7/0(HN)。卡片式的清单,讲那种用一个下午能读完、能全部装进脑子的语言为什么仍然有价值。

  • Bbtree:号称最快的有序映射 — Bbtree: Fastest Ordered Map。15/2(HN)。自带基准、自带对手,属于那种「结论先别信,但实现和测试代码可以直接拿去跑」的项目。

  • TornadoVM 7 让 Java 应用直接跑 GPU 原生负载 — TornadoVM 7 Enables GPU-Native Workloads from Java Applications。83/14(HN)。Java 侧把循环和内核编译到 GPU 执行的老问题,这次的重点在版本演进带来的运行时能力,而不是语法糖。

  • 用 SystemVerilog 写一个 VGA 驱动 — Making a VGA Driver in SystemVerilog。37/7(HN)。自底向上把时序、消隐区间和像素时钟一层层搭出来,这类文章的价值在于它逼你面对信号的物理约束,写软件时很少遇到。

  • 多语言者的困境:用十几种语言测十几份规范 — The Polyglot’s Dilemma: Conformance Testing a Dozen Specs in as Many Languages。3/1(Lobsters)。把一致性测试铺到多种语言实现上,成本和收益都要顺着规范本身来算。

  • 软件慢是因为设计烂,不是因为语言慢 — Software is slow because of bad design, not slow languages。51/68(Lobsters)。语言性能争论里最常见的偷换,就是把「用错了架构」记在「选错了语言」的账上;评论区今天在补具体案例。

  • 增量计算图 — Incremental Computation Graphs。11/3(Lobsters)。构建系统、UI 框架和数据管线共用的那套东西:把依赖关系画成图,只在输入变化处重算。

🛠️ 工具与基础设施

  • Roku 把所有开发者仓库从 GitHub 搬到了 GitLab — Roku developer repositories moved from GitHub to GitLab。227/154(HN)。仓库名不变,github.com/rokudev/<repo> 变成 gitlab.com/rokudev/<repo>,文档、示例应用和构建工具一次性搬完。公告里有一句少见地诚实:如果你的仓库被拿去给检索管线、内部助手或编码 agent 做语料,改源地址之后要重新爬——过期的索引不会报错,它只会安静地提供旧内容。💬 讨论没停在迁移上,变成了 GitLab 与 GitHub 的老比较:有人喜欢 GitLab 的分组层级和权限模型更贴合公司项目,也有人指出跨组权限是 GitLab 长期没解决的地方——顶层组被当成租户隔离,跨组 MR 审批、内建制品仓库、Terraform 模块注册表这些都很难用;唯一被广泛认同的实质差异是能不能自托管。

  • 把 uv 和 ty 合到一起 — Bringing uv and ty together。291/103(HN)· 26/0(Lobsters)。目标场景是给带依赖声明的独立脚本做类型检查:uv check 负责类型、uv format 调 Ruff,包管理和检查器合成一条命令。💬 争议集中在抽象的边界:有 Python 用户说自己不想要「渐进类型」,类型查不出就该直接报错——把不确定建模再放过潜在错误,在他看来是把问题往后推;也有人质疑 CLI 为什么这么碎——ty 名义上属 Ruff,Ruff 又没被 uv 吸收,uv format 还是实验状态;Astral 的 woodruffw 出来澄清了现有命令的实际关系。

  • FreeDNS:免费动态 DNS — FreeDNS。225/59(HN)。一个撑了很多年的老服务,靠它把家用网络挂到公网上的人不少。这类基础设施的特点是不出事时完全没人提,一旦被提起来,说明又有人需要绕开云厂商的域名和证书流程。

  • 分布式 SQLite 的十二年 — Twelve years of distributed SQLite。355/61(HN)· 12/1(Lobsters)。作者是 rqlite 的维护者,把这条路上十二年的取舍讲清楚。💬 评论区是反向经验贴:有人讲 Cloudflare D1 的生产体验并引用了 D1 开发者自己的话——Durable Objects 的存储几乎总是比 D1 更合适,D1 只是「长得像分布式 SQLite 的 SQL 封装」;也有人给出另一种答案,说别碰「远程 SQLite」这个组合,一台够大的机器跑进程内 SQLite 加 Litestream 备份到对象存储就能到 20 万 QPS 量级,九成以上的应用都该这么写;还有一条趋势观察:有了编码 agent 之后,管理 Postgres 的边际成本下降,SQLite 在 SQL 表达力上的短板因此更容易被拿来对比。

  • GPU-unlock:RTX 3000 系列的 FP/BF16 指令发射率 — GPU-unlock: FP/BF16 instruction issue rate on Nvidia 3000’s cards。158/59(HN)。把消费卡上被驱动的数值精度/发射率策略翻出来看。这类项目的用处是确认「买到的算力」和「能被软件用到的算力」之间隔了什么,跑分只是副产品。

  • Fedora 上用 TPM2 做全盘加密 — Full Disk Encryption on Fedora with TPM2。11/8(HN)。实操向,讨论有 8 条,主要在交换「绑定 TPM 之后固件升级、内核更新踩坑」的经验。

  • 内存很慢,磁盘很快 — Memory is slow, Disk is fast。10/8(Lobsters)。标题是故意反着写的:在特定访问模式和页缓存、mmap 的组合下,曾经被当成铁律的那条层次表会失效。

  • 一个复用物理内存的小技巧 — a neat trick i found for reusing physical memory。31/7(Lobsters)。C 层面把物理页的复用路径绕过一遍常规分配器。7 条评论里有一半在问边界条件,这种帖子的正确读法也是先看反例。

  • SpeedCrunch 1.1 — SpeedCrunch 1.1。35/8(HN)。老牌键盘流计算器的新版本,卖点始终是输入即算、可以用变量和单位。桌面小工具的更新周期以年计,能用就别折腾。

  • Emacs 折叠终于合我意了 — Emacs finally folds to my liking。24/2(Lobsters)。关于 folding 与 treesit 那套机制怎么配成手感的记录。配置类文章的价值就在具体:什么版本、什么变量、哪种行为会突然变。

  • 2026 年 Ruby on Rails 社区调查结果 — 2026 Ruby on Rails Community Survey Results。2/0(Lobsters)。刚上榜。这类调查的意义是看斜率而不是绝对数。

  • 我们做软件的时候应该更有野心 — We should be more ambitious with the software we build。16/4(HN)。刚发出来不久,讨论还没铺开。Dan Luu 的常规操作:把「现在的软件是不是本来能做得更好」拆成可以查证的具体案例。

  • Wild 0.11.0 发布 — Wild version 0.11.0 released。25/5(Lobsters)。Rust 写的链接器,这次是版本迭代。链接器这条线上现在有好几个实现在互相追性能,谁先被真实的大型项目采纳比基准表更能说明问题。

🔬 科学、硬件与底层

  • 物理学家把单个反物质粒子困住了一个月 — Physicists trap a single antimatter particle for a month。264/78(HN)。反物质研究的瓶颈一直是「存不住」,一个月这个量级意味着可以做频谱精度的测量。这类进展不会马上变成产品,但它决定了十几年后哪类实验可行。

  • 神经芯片解码脑区之间的相互作用 — Neural chip decodes interactions between brain regions。77/26(HN)。EPFL 的思路是把「区域之间怎么互相影响」做成芯片上可实时运行的计算,而不是离线分析录下来的信号。

  • 我不理解量子物理(2018) — I don’t understand quantum physics (2018)。263/191(HN)。作者是南安普顿的 Douglas, 从「用经典概率的直觉解释量子」为什么总是失败的路径,把几层误解逐个摆出来。老帖今天重新上榜,191 条评论里争的还是同一个问题:该先教形式体系还是先教直觉。

  • 怎么在 16 MHz 上跑城市建造游戏 — How to run a city builder on 16 MHz。7/11(Lobsters)。把现代游戏里理所当然的寻路、状态更新和渲染预算拆回到每帧几千个周期的尺度。

🎮 轻度、历史与好玩

  • 监听美军核力量的紧急行动报文(11175 kHz) — Listen and read USA nuclear forces Emergency Action Messages, heard on 11175 kHz。83/44(HN)。这个站点把短波上收听到的 EAM 转成文本,还做了个「自己抄收」的练习工具:报头读三遍、报文读两遍,字符集只有 32 个键,没有 0、1、8、9。它不解释、不解码(外部本来也解不了),只展示格式的一致性——如果真有发射命令,它长的就是这个样子。这个形式本身就是信息。

  • 圣赫勒拿 5 便士硬币上是 Jonathan 这只约 190 岁的龟 — The St. Helena 5 pence coin shows Jonathan, a roughly 190 year old tortoise。80/20(HN)。一只活到能上硬币的陆龟,钱币目录站的条目,讨论量 20 条。周末的 HN 总有这种帖子。

  • Zac-OS-9:把经典的 Platinum 桌面复活到现代 PC 上 — Zac-OS-9: The classic Platinum desktop, reborn for modern PCs。41/27(HN)。Mac OS 9 的外观复刻,讨论 27 条,一半在怀旧一半在问兼容性。

  • Cecilia Berdichevsky,Clementina 计算机专家(1961) — Cecilia Berdichevsky, Clementina expert (1961)。29/2(HN)。阿根廷早期计算机史里的人物,这类条目上 HN 的价值在于它会连带翻出一整段被忽略的区域史。

  • 限制对创造力和学习的价值 — The Importance of Limitations for Creativity and Learning。5/1(HN)。和同一个人写的「小程序与小程序语言」是同一天发的,两篇共用一个前提:选择少的时候反而更容易真做完一件事。

📌 昨日已在榜,只补后续

  • Local Wikipedia:只给你半小时步行范围内的维基条目 — Local Wikipedia: Wikipedia, but only for things a half hour walk from you。1532/242(HN)。昨天已详述,今天的评论区有新内容。💬 新增的部分有意思:有人一段段写下自家附近没有词条的地方——一条峡谷底部长的能贴合臀部的倒木、一只死麋鹿——然后说这些才该进维基;作者的替代品链接被立刻挑出问题,有用户说点进去只有通用首页、地图里没有内容,作者回复承认内容太少并说会先去自己熟悉的水上运动地点播种数据。

  • Docker 很奇怪 — Docker is weird。100/48(Lobsters)。昨日已详述。今天补一条线索:评论区里那条内核正在讨论把容器变成一等公民的补丁线程仍在延伸,Plan 9 名字空间的对照被反复提起——$PATH 在那边就是几次并集挂载,Linux 这边却是八种名字空间互相制约。

  • 别动链接 — Please don’t mess with links。107/23(Lobsters)。昨日已详述。💬 评论区那条实测反例依然是全帖最有用的内容:文章断言原生日历控件总会遵循用户的日期格式,而实测在 Firefox 和另一款浏览器里都拿到 mm/dd/yyyy 且周从周日开始,尽管系统设置是芬兰时间;要修正还得进 about:config 改 intl.regional_prefs.use_os_locales,而浏览器把「语言」和「地区格式」绑成一个设置这件事本身就被顶了。

  • 请所有认为 UB 没问题的人看过来 — Attention people who think UB is fine。66/55(Lobsters)。昨日已在榜,讨论继续加厚。💬 一条值得补的技术反驳:有人指出 -fsanitize=unreachable 能抓出文中那个「掉出函数尾」的经典例子,并提供了一批能捕获类似情形的编译开关;另一条更根本的重述是「UB 不是实现定义行为,也不是允许不同实现表现不同,它就是编译器不受约束」。

  • UUIDv7 并没有你以为的那些性质 — UUIDv7 doesn’t have the properties you think it does。44/12(Lobsters)。昨日已在榜,讨论无新增。

  • Zig 里那个了不起的 @xkcdRandom 内建 — The glorious @xkcdRandom Zig builtin。61/8(Lobsters)。昨日已详述。💬 作者在评论区回答了「到底改了什么」:只有三个文件需要动,扫描器不用碰;顺带一个反常识事实——Zig 编译器的前端(至少一部分)就放在标准库里。

  • 纯函数式能追到 C 多近 — How close can pure FP get to C?。48/19(Lobsters)。昨日已在榜,讨论无新增。

  • 拆穿 Tov 那套「比 Rust 快」的基准 — Debunking “Faster than Rust”: Malicious Benchmarks in Tov。42/16(Lobsters)。昨日已在榜。和今天 Goose 的「3.3 倍于 C++」摆在一起看最合适:基准数字是宣传材料,读的人得自己去找它测了什么、跳过了什么。

📝 今日总结

今天的主情绪是「默认值决定了爆炸半径」。Brotli 的越界写在源码里躺了八个月,真正让它变成行业事件的是 HTTP 栈默认解压这一条约定;Roku 的迁移公告里最有价值的一句,是提醒检索索引的过期是静默的;C++26 卡在 contracts 上,卡点也在标准默认接受什么。必读三篇:Aikido 那份 HTTP2Shell 时间线(一个从 Node.js 扩散到 Envoy 的漏洞应该怎么读)、Lobsters 上 PHP2Shell 的复盘以及作者在评论区的算账(「恐慌的成本」第一次被写成具体工时)、还有 Goose 的评论区(作者逐条回答内存模型质疑,同时被要求证明文档里哪些设计是人做的——2026 年评估一个新项目的标准流程已经变成这样)。横向信号有三组:一是压缩、证书、日志这些「无感的基础设施」同时被翻出来检查,安全议题的重心从漏洞利用转向默认配置;二是 AI 侧一边被追问回报(Apollo 报告、白领工作性质之争),一边在机器人上给出零样本跨硬件的强主张,乐观与怀疑的分界线正在从「能不能」转向「多久」;三是语言与标准层面今天格外热闹——C++26 被否、Goose 拿无堆内存模型叫板 Rust、增量计算图和老基准翻案同场上榜,社区对「性能与安全能不能两全」的耐心明显在下降,开始要求看实现而不是看结论。