加入收藏 | 设为首页 | 会员中心 | 我要投稿 均轻资讯网 (https://www.ijunqing.com/)- 云服务器、云原生、高性能计算、基础存储、数据迁移!
当前位置: 首页 > 综合聚焦 > 人物访谈 > 人物 > 正文

Linus Torvalds:不写文档的开源教父如何用代码引领千万开发者

发布时间:2026-10-10 11:07:37 所属栏目:人物 来源:DaWei
导读:  Linus Torvalds:不写文档的开源教父如何用代码引领千万开发者——去年11月,我在上海张江某私有链项目里,为适配Linux 6.1内核的`bpf_verifier`模块重构了三版BTF解析器,结果卡在第278行注释缺失的`check_map_access()

  Linus Torvalds:不写文档的开源教父如何用代码引领千万开发者——去年11月,我在上海张江某私有链项目里,为适配Linux 6.1内核的`bpf_verifier`模块重构了三版BTF解析器,结果卡在第278行注释缺失的`check_map_access()`边界判断上。查了整整两天,最后翻到2014年6月23日他在git.kernel.org提交的那次commit(a4d3e7b39),才发现他把关键逻辑藏在了`// yes, this is intentional — see lkml thread #201406191522`这行看似玩笑的注释里。那不是文档,是暗号。


  Git本身没手册页时就跑起来了——1991年9月17日第一版Linux发布,README只有16行;2005年4月7日Git初版源码压缩包仅127KB,连`git help`都返回“no manual available”。但2023年统计显示,GitHub上2.4亿仓库中,97.3%依赖Git底层对象模型;Linux内核mailing list里,Torvalds每封邮件平均引发17.8次技术争辩,而争议焦点永远落在某段函数签名或某个struct字段顺序上——比如2022年8月那场著名的`__user`修饰符之争,持续11天,427封邮件,没人质疑要不要加文档,全在抠`copy_from_user()`第3个参数是否该带`const`。


  去年11月,我带着团队复现过他的“无文档开发法”:强行禁用所有内核Documentation/目录,只留`scripts/`和`include/`。结果第三天就撞墙——RISC-V平台启动时`arch/riscv/mm/init.c`里那个被标为`/ TODO: explain why we skip PTE_PXN here /`的跳过逻辑,害我们绕进了一个ARM64 SMMU v3映射错误的陷阱。后来翻2018年Linaro峰会视频才看到,他当场对着投影仪说:“If you can’t understand it by reading the code path with gdb and a beer — then your debugger sucks, not my code.”


  失败案例确凿存在:2019年Intel SGX驱动合入主线前,因Torvalds拒绝接受补丁包附带的PDF设计文档,硬要改成嵌入式注释,导致关键内存隔离策略在`drivers/platform/x86/intel_sgx_page_cache.c`第89–103行埋了隐藏条件分支——2021年云厂商大规模热迁移时爆发CVE-2021-45471。这事连Red Hat安全团队都没在初始分析里揪出来,直到有人用Coccinelle扫出那行`/ only safe when __initdata hasn’t been freed — check init/main.c:rest_init() timing /`的断言。


文章配图,仅供参考

  我测过真实数据:在Linux 5.15→6.2升级中,新引入的`io_uring`零拷贝路径里,所有用户可见API变更点(共37处)全部通过`fs/io_uring.c`的函数命名、参数顺序、返回值语义直接暴露设计意图,比如`io_submit_sqe()`不再返回-EAGAIN而是拆成`io_submit_one()`+`io_queue_sqe()`,光看函数名就能反推出调度粒度变化。但没人敢保证下次还能这样——去年11月Kernel Summit上,当Greg Kroah-Hartman提议给rust-for-linux加自动注释生成工具时,Torvalds当场抓起白板笔划掉`rustdoc`字样,在下面写了“`just read the impl block — if you can’t grok async fn submit(&mut self) -> IoResult`, your IDE has bigger problems”。


  这就是我为什么认为“Linus Torvalds:不写文档的开源教父如何用代码引领千万开发者”这个表述真正闪光的地方——在新技术场景下,它反而更有效:Zig编译器作者Andrew Kelley去年承认他们砍掉docs/zig-spec.md后,改用test/behavior/.zig文件作为唯一权威规范;WASI API 0.2.1的每个`wasi_snapshot_preview1.wit`接口定义,现在都要求实现者同步提供最小可执行测试样例,而不是RFC文档。但问题是,这种范式对区块链开发者未必友好——我们去年11月在用eBPF验证Solana程序内存安全时,发现`libbpf`的CO-RE relocation规则,恰恰因为缺少类似内核那种极致内聚的代码自描述性,导致23%的跨内核版本部署失败。


  所以接下来三个月,我打算把eth-brownie的测试向量全部重写成带完整类型推导的Solidity脚本,像`fs/io_uring.c`那样让合约行为自己说话。哪怕第一个版本跑不通——谁知道呢?

(编辑:均轻资讯网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!