今日 Agili 的 Hacker Podcast 聚焦技术自主权、性能工程与底层系统安全:从欧洲政府转向 NixOS 办公生态,到 Go 跨平台 SIMD 的编译器设计;从 Windows 驱动内核提权实战,到 AI 公司因道德条款受挫的法律裁决。
荷兰政府基于 NixOS 构建微软替代方案
DAWO 项目的四大支柱
荷兰内政部等机构联合开源界推进名为 DAWO 的项目,旨在构建基于 NixOS(以声明式配置和可重现性著称的 Linux 发行版)的自主数字办公环境,降低对微软专有生态的单一依赖。该项目将环境拆分为四大可审查组件:
- 操作系统:以 DAWO-NixOS 为基础的标准化工作站配置,实现工作环境的代码化管理;
- 云基础设施:支持自主部署与验证的云端底座;
- 协作工具:提供开放的即时通信、协同文档与日常办公方案;
- 人工智能组件:集成开放可控的本地化 AI 能力。
欧洲公共部门探索主权技术已现协同趋势。法国政府此前也推出了加固安全系统 Sécurix 与面向桌面办公的 Bureautix 项目。
推进阻力与行业惯性
社区讨论指出,大科技公司在桌面系统中增加数据遥测、强制在线账户以及探索广告植入,促使公共部门寻求供应链自主权。推进该方案的核心难点在于企业 IT 体系的技能惯性与现有兼容链条。主流流程长期与微软的 Active Directory(活动目录服务)、Office 文档格式和 Teams 协同网络绑定,如何让 NixOS 架构在复杂行政网络中平稳对接业务是后续检验的关键。
M6 Mac Mini 在 86Box 上模拟 600MHz Pentium II 与 Voodoo 3
硬件底层模拟与负载测试
86Box 在底层模拟老式 PC 的 CPU 时序、总线、显卡和声卡。这类精细模拟的开销主要落在单一主机线程上。测试者在搭载 M6 芯片的 Mac Mini 上运行 86Box 6.0 构建版,引入针对 ARM 主机的 CPU 改进和 Voodoo 显卡 ARM64 JIT(即时编译器)。模拟配置为运行 Windows 98 SE 的 Slot 1 架构主机,配备 256MB 内存与 16MB 显存的 Voodoo 3 显卡。
测试结合了 Cinebench 2000 的渲染、后台 Winamp 播放 PCM WAV 音频以及长达 7 至 8 分钟的 3DMark 2000 SE 演示,以不出现爆音且速度维持 100% 为达标标准。M4 Mac Mini 稳定上限为 500MHz,M6 Mac Mini 则在 550MHz 与 600MHz 下均保持全程平稳运行,最高稳定频率比 M4 高出 20%。当频率推至 650MHz 时出现音频下溢。
频率监控与真实硬件差异
在 600MHz 模拟测试中,M6 的两个性能核平均主频在 4,710MHz 至 4,788MHz 之间,整颗芯片总体占用率不超过 26%。测试中模拟的 450MHz Pentium II 在 Cinebench 2000 中获得 7.02 CB,比真实物理芯片记录(4.35 CB)高出约 61%。86Box 官方对此解释过,模拟器并未追求完整的微架构周期精确,而是微调时序参数以贴近真实表现。操作系统开发者已开始利用此平台调试针对老硬件架构定制的内核,省去频繁烧录实机的过程。
Go 语言引入平台无关的 SIMD 实验性支持
两层式 API 架构
Go 官方博客介绍了 Go 1.26 与 1.27 引入的实验性 SIMD(单指令多数据流,允许单条指令并行处理多个数据的硬件特性)支持。过去在 Go 中调用 SIMD 需编写汇编或承担 cgo 跨语言调用开销。Go 团队采取两层设计:先推出面向特定架构的底层包 archsimd(支持 amd64 的 AVX、arm64 的 NEON 及 WebAssembly),随后在 Go 1.27 推出跨平台的高层抽象包 simd。
跨平台向量支持的难点在于不同架构的位宽差异,x86 支持 128、256 和 512 位,NEON 为 128 位,而 ARM SVE 与 RISC-V RVV 则采用运行时可变长度向量。Go 借鉴 Google Highway 库的思路,移除固定大小向量类型,提供 simd.Float32s 等动态向量,API 仅收录通用指令交集,缺失指令通过其他 SIMD 指令或软模拟补齐。
编译器消除抽象开销
Go 编译器在前端通过 AST(抽象语法树)重写机制消除开销。编译器为调用 simd 的函数生成针对 128、256、512 位或软模拟的特化版本,并将平台判断外提至循环之外,避免热路径上的动态派发。开发者可通过 GODEBUG=simd=... 手动指定运行时的向量长度偏好。在 WebAssembly 环境下的调色测试中,通用 simd 相比手写 archsimd 仅慢约 11%,但比标量代码快了约 5 倍。团队计划在 Go 1.28 中补充归约操作并适配 ARM SVE。
突破 Avast 杀毒软件内核驱动沙箱(第二部分)
双重提取漏洞与堆喷射
安全团队 SAFA 发布了 Avast 内核驱动漏洞 CVE-2025-13032 的利用链分析。漏洞位于 aswSnx 驱动,源于内核处理用户态传入的 _UNICODE_STRING 时两次读取其 Length 字段:第一次读取用于分配分页池(Paged Pool,可换出至磁盘的内核内存区)缓冲区,第二次读取用于数据复制。攻击者通过多线程并发在极短窗口内篡改长度字段,诱发分页池溢出。
攻击者将利用目标选定为管理异步 I/O 的 I/O Ring 对象。虽然 I/O Ring 本身位于非分页池,但其预注册缓冲区指针数组 RegBuffers 分配在分页池中。攻击者利用段堆的低碎片堆机制完成堆喷射,制造内存空洞并触发漏洞,使溢出数据精准落入相邻空间,篡改 RegBuffers 指针指向用户态伪造结构。
获取任意读写与环境清理
通过伪造缓冲区结构并调用 IoRingReadFile 与 IoRingWriteFile,攻击者绕过内存检查获得内核任意读写原语。利用 I/O Ring 自动生成的内存描述符列表(MDL),利用代码泄露了当前进程的 _EPROCESS 结构体地址。
为防止系统发生蓝屏,利用链修复了受损的 ProcessBilled 字段,通过全局 Cookie 与异或运算复原块头部;同时递增伪造结构的引用计数,规避内核析构时尝试释放用户态虚拟内存。最终攻击者将 SYSTEM 进程的访问令牌复制到自身进程,完成提权。社区讨论指出,现代安全软件为深度拦截引入了庞大的内核驱动,自身也构成了攻击面。
美国上诉法院维持将 Anthropic 列为供应链风险的裁决
谈判分歧与定性背景
美国哥伦比亚特区联邦巡回上诉法院以 2 比 1 投票结果,维持了五角大楼将 Anthropic 列为“供应链风险”的决定。该裁决禁止美军及国防承包商在军用项目中使用 Claude 模型。
纠纷始于 2025 年下半年。双方就 Claude 部署到军方 GenAI.mil 平台谈判时,军方要求在合法用途下拥有无限制访问权限,Anthropic 则要求保留约束条款,明确禁止模型用于全自动武器系统或国内监控。谈判破裂后,美国国防部将 Anthropic 认定为供应链风险。巡回法院认为,权衡模型受限停机等国家安全风险的裁量权属于防长,未超出法律授权范围。
法律争议与产业链外溢
社区观点分歧明显。支持方认为军方在战时需要确定性,无法依赖可能在战术行动中撤回访问权限的商业软件。反对方则指出,《供应链安全法》设立初衷是针对外国敌对势力的后门与恶意破坏行为,将一家因道德条款拒绝提供未受限功能的本土企业列入供应链黑名单,偏离了法规本意。由于国防外包链条广泛,该裁决意味着外包商在日常管理或编写基础界面时使用 Claude 也可能面临违规风险。
git-bug:嵌在 Git 内部的分布式离线缺陷追踪器
无工作区污染的存储设计
git-bug 是一个直接集成在 Git 内部的分布式、离线优先缺陷追踪器。它利用 Git 底层的对象数据库存储工单数据,不会在项目工作区中生成文件。克隆代码仓库即可同步完整的缺陷数据库和历史记录,所有工单操作在本地毫秒级完成。
协同方面,团队成员通过 git bug push 与 git bug pull 同步数据。底层基于 DAG(有向无环图)模型与独立规范,确保多方离线编辑后合并的数据一致性。
终端与桥接生态
git-bug 在单体 Go 二进制文件中内置了终端界面(TUI)和本地 Web 界面,Web 模式下兼备本地代码浏览器功能。为了兼容外部工具链,它支持与 GitHub、GitLab、Jira 和 Launchpad 建立双向工单导入导出桥接。近期 Linux 基金会已在补丁管理工具 b4 和 kernel.org 定制版 cgit 中展示了对 git-bug 的集成支持,为去中心化项目协作提供了轻量级底座。
Ink & Switch 实验室上线十周年交互式主页
Tenfold 交互展示
研究人机界面的独立实验室 Ink & Switch 迎来成立十周年,在主页上线了名为 Tenfold 的交互展示。Tenfold 对应实验室名称的十个字母,拖拽光标可实时改变声音合成器与图形光栅的参数。每个字母由团队成员基于各自实验构建,字母 C 还内置了一个微型弹幕游戏。
该实验室聚焦于构建放大人类智能的工具,长期深耕四大方向:本地优先软件(Local-first Software,数据本位与多端协作兼顾)、可塑软件(Malleable Software,支持用户自由改动工具机制)、可编程墨水以及跨介质的通用版本控制。其研究成果已衍生出基于 CRDT(无冲突复制数据类型)的开源协作库 Automerge 以及可视画布工具 Allume。
在 Haskell 中原生写入 Parquet 列式存储文件
原生列式写入实现
DataHaskell 团队在开源库 Dataframe 中实现了原生的 Parquet(开源列式存储文件格式)写入器,解决了 Haskell 处理大规模数据帧时依赖 CSV、JSON 或裸二进制串导致的吞吐缓慢与互操作问题。写入器提供 writeParquet 与底层调优函数 writeParquetWithOptions。
Parquet 结构由末尾元数据及一系列行组(Row Group)构成,行组由列块(Column Chunk)与数据页(Data Page)细分组成。写入器通过固定行数的外层批次与内层子批次推进处理,以逼近目标行组大小并降低簿记开销。
内存布局与系统调用优化
为了绕过外部函数接口(FFI)开销,写入器使用 Haskell 原生的固定内存(pinned ByteArray)直接操作裸指针。在扩容时手动分配新固定内存并交由垃圾回收器释放旧内存;写盘时将缓冲区切分为 256 KiB 的块,以降低系统调用频率并减少页缓存抖动。当前实现支持 Snappy 压缩与原生纯文本编码,团队计划后续引入两阶段写入机制,将临时数据溢出至外存,以降低生成超大行组时的内存压力。
相关链接:
- Dutch governments builds alternative for Microsoft based on NixOS
- Pentium II at 600Mhz with Voodoo 3 Emulated on 86Box with M6 Mac Mini
- Platform-independent SIMD in Go
- California is chasing wealth that has feet
- 2DWillNeverDie
- Ink and Switch interactive homepage
- Git-bug: Distributed, offline-first bug tracker embedded in Git
- Entering and Breaking the Avast Antivirus Sandbox Part 2
- U.S. appeals court upholds designation of Anthropic as supply chain risk
- Writing Parquet files using Haskell
