又一个“看起来完全可行,然后就夭折了”的故事 -- 简化系统调用表修改流程的脚本
David Howells 在一个脚本 ./scripts/syscall-manage.pl 上投入了大量精力,以简化修改系统调用表的整个过程。 有了这个脚本,添加、删除、重命名或重新编号任何你喜欢的系统调用就变得很简单。 该脚本还可以解决 git 冲突,以防两个存储库以冲突的方式重新编号系统调用。
David 为什么需要编写这个补丁?为什么系统调用原本就不容易管理? 当你发出一个系统调用时,你将它添加到主列表,然后你将它添加到系统调用“表”中,运行中的内核就是在这里查找哪个内核函数对应于哪个系统调用号。 内核开发者需要确保系统调用在源代码树中的所有相关位置都存在。 重命名、重新编号和对系统调用进行其他更改涉及到很多繁琐的细节。 David 的脚本可以简单地做到所有正确的事情——故事的结尾,没问题,再见。
Arnd Bergmann 评论道:“啊,有意思。 你过去已经威胁要添加那个脚本了。 该实现当然看起来不错,我只是希望我们可以首先消除对它的需求。” 但是,迫于无奈,Arnd 对补丁提出了一些技术改进建议。
然而,Linus Torvalds 在这个特殊的时刻突然出现,说道:
呃,我讨厌它。
我确信该脚本非常聪明和有用,但我真的认为解决方案不是这种辅助脚本,而是我们应该努力从一开始就不要让每个架构单独添加新的系统调用。
换句话说,我们应该考虑为新的系统调用号只有一个统一的表,并以每个架构的表用于“旧编号”为目标。
也许这不会发生,但_希望_它会发生,我真的希望人们不要为了应对当前的糟糕情况而编写脚本。
然后,闸门轰然落下。
有趣的是,Linus 并没有接受这个对现有情况的相对明显的改进,而是宁愿保持它的破旧和丑陋,以便某人某天某地可能会有动力去进行更困难但更好的修复。 考虑到当前问题的极端程度,这一点就更加有趣了。 在没有真正损坏的情况下,这种情况需要开发人员对 David 的脚本可以使之变得琐碎和容易的事情投入大量的精力和努力。 即使对于这样一个明显“好”的补丁,Linus 也会考虑政策和文化影响,以及在该代码区域工作的其他人的未来动机。
注意:如果您在上面被提及并希望在评论区上方发表回复,请将您的回复文本发送至 ljeditor@linuxjournal.com。