欢迎来到 Agili 的 Hacker Podcast 今日看点。今天我们会聊 MIT 为研究芯片安全从零写操作系统、Java 酝酿十二年的 Valhalla 终于合入主分支,还会看到 DuckDB 如何把整个分析型数据库塞进一个 20MB 的单文件里。
MIT 为研究芯片安全从零写了一个操作系统
为什么要重写一个内核
安全研究人员想在 Apple M1 这类芯片上验证 Spectre、Meltdown 攻击的细节,但过去只能在 macOS 或 Linux 上手动改内核,不稳定且难以复现。MIT CSAIL 团队索性从裸机写起,打造了专用于微架构研究的操作系统内核 Fractal。
“外核线程”让实验信号几乎没有噪声
Fractal 的核心设计是“多特权并发”,能让同一个实验在运行时切换特权级别,同时保持指令和地址空间不变。关键构造“外核线程”处在用户进程的内存里,却以内核特权执行,这让测量结果几乎不含中断、调度带来的背景噪声。
M1 上发现了什么
团队用 Fractal 在 M1 上发现了多个此前未知的行为。比如 ARM 的 CSV2 规范本应阻止低特权代码影响内核的推测执行,但 Fractal 发现 CPU 在保护机制起作用之前就已经把目标地址取进了指令缓存,这个操作仍然可以通过侧信道被观测到。团队还首次在 Apple Silicon 上验证了一种叫 Phantom 的推测攻击,并澄清了过去关于条件分支预测器跨特权级训练的误解——之前认为仅在性能核上有效,实际上是实验期间 macOS 悄悄把线程迁移到了不同核心。
只用了 31000 行代码
Fractal 支持 x86_64、ARM64 和 RISC-V,代码量约 31000 行,配了 POSIX 系统调用、C 标准库,甚至能在上面跑 vim 和 GCC。项目已在 GitHub 开源,论文和全部实验数据也一并公开。有社区成员说,这个思路在 Spectre 保密期里微软工程师就玩过,但把它做成可复用的研究基础设施,Fractal 做到了。
DuckDB 内部机制详解(第 1 部分)
一个进程内分析型数据库
DuckDB 是一个进程内分析型 SQL 数据库:不需要服务器,像加载 NumPy 一样直接链接到程序里,单二进制文件不到 20 MB。它专为扫描数百万行做过滤、聚合、连接之类的查询优化,而不是按主键单点查找。你可以直接对某个装满 Parquet、CSV 文件的目录写 SQL。
消除网络序列化的开销
传统分析型数据库通过网络收发数据,每条结果记录都要序列化成协议格式再反序列化,这往往是查询中最慢的环节。DuckDB 在同一个进程里运行,能直接读取 Python dataframe 的缓冲区,甚至实现零拷贝。配合 Arrow 这样的列式内存格式,它绕开了逐行逐值函数调用的巨额开销。
从 SQL 到物理管线
SQL 进入 DuckDB 后经过解析、绑定、优化等阶段,优化器包含 33 个可单独禁用的转换规则,比如 filter pushdown、子查询展开和动态连接过滤器。物理计划最终被分解成一个个管线,没有需要看到全部数据才能产生结果的算子(如排序或分组)会形成断点,断点前三阶段(sink、combine、finalize)并行完成,充分利用多核。
列存与文件直查
数据库内部按列分开存储,每列分成约 12 万行的行组,每个行组携带最小最大值和空值计数这样的 zone map,查询时能直接跳过不相关的组。很多使用者并不建表,而是直接查询 Parquet 文件——Parquet 本身也是列存、带统计信息,DuckDB 连远程文件都只需要按需抓取部分字节。
Project Valhalla 历时十年终于抵达 JDK 28
“写起来像类,跑起来像 int”
Project Valhalla 的口号是让 Java 里自定义的类型在内存中变得扁平、密集,像基本类型一样,避免每个对象都带对象头、堆分配和指针跳转。6 月 15 日 Oracle 工程师确认 JEP 401(Value Classes and Objects)已合入 OpenJDK 主线,变更超过 19.7 万行代码,准备在 JDK 28 中预览。
值类和值对象能带来什么
在 JDK 28 里,用 value 声明值类,所有字段隐式 final,== 比较的是字段的逐位等效性,不再靠对象身份。配合 JEP 402,Integer 这类包装类也变成值类,== 终于比较的是数值。JVM 通过标量化和堆扁平化来优化:在栈上把值对象拆成字段,在数组里将字段直接连续存放,避免指针跳转。不过限于当前 64 位原子写,部分超过 64 位的对象还无法扁平化。
未完成的部分和社区争议
nullability 被推迟到独立 JEP,特化泛型也仍在研发中。许多评论者拿 C# 在 2002 年就实现了非空值类型来对比,但也有人指出 Java 有 30 年的向后兼容负担,分阶段发布更务实。团队核心成员解释,值类的设计目标是统一 Integer 和 int,放弃双投影模型是因为 80–90% 的开发者偏好简单方案。
日本铁路拆分后如何用同一个标志保持一体感
124 天从零建立新品牌
1987 年日本国有铁道因巨額负债被拆分成 7 家 JR 公司,日本设计中心的山本洋司只有 124 天时间设计统一的标志、字体和全部应用物料。最终的 JR 连体字形意在表现“铁轨贯穿全国”,线条够粗,列车行驶时也看得清。
颜色来自工艺限制,字形改了一个不吉利的汉字
当时只有 15 色热转印色卡可用,设计师把这 15 种颜色摊在总裁面前,各公司各取所需,事后才用地域象征合理化各自的颜色。更极致的是,“鉄”字左边是“金”右边是“失”,在赤字中诞生的公司用这个字太不吉利。山本将“失”换成形近的“矢”(箭头),还专门去国会图书馆确认这个字确实存在。整个字标系统在印刷截止前一天傍晚才获批,但他觉得不够完美,又通宵重绘了所有公司的字标才赶上交付。
一夜贴标一万辆车
最初只打算给少量列车换标,但设计中心提议在第一天就让全系统一万辆车贴上 JR。利用末班车与首班车间 4–5 小时的窗口,工人们一列一列手工贴标。这份“最后一次服务”的使命感让大规模改装成为可能。近四十年间这个标志从未更换,社区认为这某种程度反映了经营的稳定。
AirPods 效应:耳机在改变我们与世界的相处方式
到处都有人戴着耳机
作者从德国回到美国后,发现不管咖啡馆还是超市,几乎人人耳中挂着一副 AirPods。有调查显示 44% 的美国人使用蓝牙或无线耳机,重度使用者更容易感到孤独,也更少与陌生人进行有意义的对话。
少说话、少反思
一项 2026 年的研究发现美国人每天说出的单词数比 2005 年减少了 28%,而耳机鼓励人们避免与收银员交谈、在屏幕上点餐付款。更深层的问题是,耳机挤占了与自己独处的时间——用南加州大学教授的话说,只有脱离即时活动让思维自由游荡时,才会发生深度的反思和意义整合。
“你就吃那个?”
在杂货店,一位陌生老人对作者盘中的辣椒拌菜打趣了几句,这 15 秒的交流让作者整个下午更愉快。心理学研究指出,这些微小互动累积起来会让人相信“人们大体是善良的”。耳机有屏蔽噪音和帮助专注的好处,但作者几年前就有意识地减少使用频率。
Gribouille 0.3.0:Typst 的图形语法库更新
坐标系与图例控制更灵活
Gribouille 0.3.0 发布了,这是一个用 Typst 实现图形语法的库。新版本可以用 guides(x: none) 隐藏坐标轴刻度线和标签,无需修改主题即可做到。图例控制也支持 guides(none) 一键隐藏所有未单独设置的部分。
API 清理与面积图改进
compose() 新增 theme: 参数,统一设置合成图表的共用标题和图例样式;defer(plot, ...) 替换了之前的 plot(..., defer: true)。面积图现在默认按栈对齐和堆叠显示,不再需要显式指定统计变换和位置参数。标记函数 annotate() 还获得了 clip 参数,设为 false 后可让标注绘制到面板边界之外。社区有人关心是否能渲染成交互式 SVG,目前 Typst 可输出 SVG,但悬停数据需要额外脚本介入。
现代汽车买断 Boston Dynamics 全部股份
SoftBank 行使卖出选择权
Hyundai 以 3.25 亿美元购买了 SoftBank 持有的 Boston Dynamics 剩余 9.65% 股份,实现全资控股。这是 SoftBank 行使此前保留的卖出选择权,把 Boston Dynamics 整体估值推至约 34 亿美元。SoftBank 抽身转向 AI 基础设施,正在组建 Roze AI,并重注押在 OpenAI 上。
Atlas 将在 Hyundai 自家工厂里先干起来
Hyundai 计划 2028 年在佐治亚州的电动车工厂让 Atlas 开始做零件排序等实际工作,关键关节电机由集团内部的 Hyundai Mobis 生产。这有别于 Tesla Optimus 或 Figure AI:Hyundai 自己是工厂主,第一手客户就是自己,不需要先说服别人买机器人。社区里围绕“通用人形 vs 专用机械臂”展开了讨论,有人觉得长尾任务确实需要类人形来替代人类,也有人认为很多任务完全可以用现有固定或移动机械臂解决。
禅与机器学习研究
气质比才华更关键
作者认为成为优秀机器学习研究者的过程和冥想很像:把读书与动手构建结合起来,不论有没有灵感都持续投入时间。研究方向不要追逐热度不够半年的概念,人工智能基础思想四十年没怎么变,把交叉熵手算、奇异值分解可视化到脑子里,比琢磨今年的流行词更值。
对待结果要有“平等心”
实验结果好,很好;结果差,也很好——两者提供的信息量相同,一串负面结果往往比单个正面结果更有教益。但对那些看起来太好的结果要极度偏执,一大半好结果都是代码 bug 制造的。现代深度学习堆栈极复杂,错误可能出在训练、推理、数据、框架的任何地方,不弄清楚就无法相信任何结论。
放空和苦功夫
苯环结构来自梦,Ozempic 来自毒蜥毒液,好的想法常在散步和放空时冒出来。创意背后则是数百小时的苦工:Andrej Karpathy 手动标注了一大块 ImageNet,SWEBench 的作者花了数百小时清洗 GitHub 数据。文中用了一句禅语:“悟之前砍柴挑水,悟之后砍柴挑水。”成功的项目很少绕过笨重的细节。
Datasette 新插件让用户托管自包含 HTML 应用
在 Datasette 里直接跑小应用
Datasette Apps 是一个新插件,允许在 Datasette 实例中托管带 HTML 和 JavaScript 的自包含应用。应用跑在受限的 沙箱里,配合 Content-Security-Policy 头部禁止对外部域名的请求,也拿不到 cookies 或 localStorage。应用可以用 JavaScript 执行只读 SQL 查询,也可以按配置好的存储查询执行写入操作。
技术安全与 AI 辅助
作者用 标签设置了额外 CSP,发现恶意 JavaScript 无法在页面开头之后修改它。应用与父窗口的通信使用了 MessageChannel,导航后通道自动关闭,降低劫持风险。插件还内置了日志面板,方便调试 SQL 查询和 CSP 错误。用户可以把一段描述应用限制和可用 API 的提示粘贴到 ChatGPT 或 Claude 里让模型生成代码。安全评估发现了一个严重漏洞:普通用户可能通过自设 CSP 域名窃取管理员数据,修复方案是将设置允许域名的权限独立为 apps-set-csp,仅限受信任人员使用。
ClickHouse 开源十周年
从替换 localtime 开始
2016 年 6 月 15 日 ClickHouse 开源时只是 Yandex 内部替代 MySQL 和自建 MapReduce 的列式分析引擎。创始人 Alexey Milovidov 从一开始追求最高级别开源,把仓库当作别人学习 C++ 和数据结构实验的地方。一个完整的 CI 运行需要约 400 小时,曾帮助发现 jemalloc 甚至 Linux 内核里的 bug。
用户的实际感受
很多用户用 ClickHouse 替换 Elasticsearch 和 Loki 做可观测性,即使未索引的 LIKE '%hello world%' 查询也远超 Loki 索引后的速度。有人抱怨 JSON 导入有隐蔽陷阱,比如 JSONEachRow 下数字字段默认返回字符串,开启跳过未知字段后拼写错误会静默丢弃数据。零拷贝复制等功能则被限制在商业版中。尽管如此,大多数评论仍认为 ClickHouse 是“用正确工具做正确事”的好例子。
相关链接:
- To study how chips work, MIT researchers built their own operating system
- DuckDB Internals Part 1
- Project Valhalla, Explained: How a Decade of Work Arrives in JDK 28
- How Japan's railways stayed one while splitting apart
- The AirPods Effect
- Gribouille 0.3.0: A Grammar of Graphics for Typst
- Hyundai buys Boston Dynamics
- Zen and the Art of Machine Learning Research
- Datasette Apps: Host custom HTML applications inside Datasette
- Ten years of ClickHouse in open source
