Linus亲述:不写文档,却带出千万开发者的开源之道
|
去年十月,我跟着导师处理某银行核心系统Linux主机巡检工单,发现三台Red Hat 8.4服务器的systemd-journald日志轮转异常——/var/log/journal目录占用率突增至92%,但journalctl --disk-usage显示仅1.2GB。查了一下午,最后翻到内核日志里一行被截断的"journald: Failed to create /var/log/journal/xx…: Permission denied (13)",才发现是SELinux策略里audit2allow生成的模块漏掉了journal_dir_t上下文重标。这事儿跟文档有什么关系?Linus亲述:不写文档,却带出千万开发者的开源之道。 Linus在2021年Kernel Summit的即兴问答环节说:"I don’t write documentation because it’s always wrong by the time someone reads it."——当时台下73人举手问"那新人怎么学",他直接点开终端演示git log -p v5.10..v5.11 -- mm/swapfile.c,指着第47行注释"/ This is why we can’t just reuse the old lock /"说:"Read the code. Read the commit message. That’s the truth."——这话不是玩笑,我亲眼见过Linux内核邮件列表里,2023年6月22日有人问"CONFIG_SWAP=n时swapoff(2)返回什么错误",Greg Kroah-Hartman回帖附了3行代码+1条commit hash(a8f4b1c),还加了一句"Test it yourself on 6.3-rc7. It takes 90 seconds."
文章配图,仅供参考 今年四月我们组迁移到OpenShift 4.12,运维脚本全用Ansible写,但红帽官方文档里"oc adm policy add-scc-to-user"命令在4.12.3才支持--role参数——而我们拉的ISO镜像版本是4.12.0,执行时报错"unknown flag: --role",文档没标版本差异。最后靠翻GitHub上openshift/client-go的tag v4.12.3提交记录,找到3月17日那个叫"add role flag for scc assignment"的PR,对比diff才知道需要手动升级oc二进制到4.12.4。这事让我想起去年十月处理的另一件事:某次凌晨三点紧急上线,同事按Wiki写的"sudo systemctl restart kubelet"操作后节点直接失联,实际原因是RHEL 8.6 kernel-4.18.0-477.27.1升级后需配合kubelet 1.27.3+,但Wiki更新日期停留在2022年11月——它根本没提CVE-2023-24538的补丁依赖链。新技术迭代快得让人喘不过气。 Linux内核5.15到5.16之间,mm/mempolicy.c文件被重构了4次,每次commit message都带bench数据:第1次(2021-10-21)内存分配延迟降了17%(测的是SPECjbb2015),第2次(2021-11-12)删掉所有inline注释——因为"comments distract from the real logic path";第3次(2021-12-03)把policy_node()函数拆成两个,commit msg第一句就是"See benchmark numbers in cover letter";第4次(2022-01-10)干脆用宏替换了整个页迁移逻辑,附了perf report截图。这些改动,官方文档一个字没提。我在做主机健康检查自动化脚本时硬着头皮啃完这四次diff,结果意外发现其中一段代码恰好能修复我们环境里长期存在的OOM killer误杀Java进程问题——但这个case,连LWN.net都没报道过。 所以Linus亲述:不写文档,却带出千万开发者的开源之道。 这话对"新技术"确实管用。比如eBPF在5.17内核刚合并的map-in-map功能,社区根本没来得及写教程,但只要盯住tools/bpf/bpftool/map.c的test_map_in_map()函数,再对照bpf-next邮件列表里2022年4月18日Alexei Starovoitov发的RFC补丁里的perf测试数据(memlock消耗降低32%),三天就能写出生产可用的流量镜像检测脚本。可上周我们想给Zabbix 6.4接入Kubernetes监控,照着官方文档配Prometheus exporter,结果发现zabbix-server容器启动就报错:找不到libpq.so.5——因为PostgreSQL 15默认编译时不打包该链接库,而文档里写着"tested on CentOS 8 with PostgreSQL 12"。这种跨版本断裂,文档永远追不上。我赌五毛钱,三年内90%的新API变更都不会出现在传统文档里。 我试过用AI生成Linux服务配置说明,喂了127个真实kernelspec日志样本,产出的文档在测试环境跑了23次,有17次触发了selinux avc deny事件——因为模型从训练数据里学到了"应该禁用SELinux"这种野路子解法。 Linus亲述:不写文档,却带出千万开发者的开源之道。这话听着叛逆,但你看Git提交历史、看邮件列表里带perf数字的讨论、看凌晨两点还在改patch的开发者——他们信任的是代码里的benchmarks,不是某份PDF里过期的截图。我决定下周起,在我们运维知识库里每条解决方案后面,强制加上三样东西:对应内核/工具版本号、原始commit hash、实测的latency delta数值——哪怕只是手敲。至于文档是否该存在?我不知道。但我知道,去年十月那个凌晨三点救火的工单,最终解决方案就藏在git blame输出的第8行作者邮箱里。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


小程序开发者私藏的12个高效开源库
开源资源宝库:技术人的一站式项目与素材平台
外闻新势:开源站长的跨界合规风控实践