在最近的Linux 6.9-rc4版本中,Linus Torvalds 采取了一个特别的方法来应对那些不能正确处理制表符(tabs)的Kconfig解析器。Kconfig是Linux内核配置系统的一部分,用于定义内核的可配置选项。
事件起因是有一个等待被合并的内核补丁引起了Linus注意,该补丁目的是将内核跟踪(kernel tracing)Kconfig文件中的一个制表符替换为一个空格字符。这个替换导致某些第三方的内核配置解析工具在处理制表符时出现了问题。
Linus Torvalds决定亲自动手,为那些不能处理制表符的Kconfig解析器编写了一个补丁——他故意在处理页面大小的通用Kconfig文件中加入了一些制表符,以此来干扰任何不能正确处理这些制表符的解析器。
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?utm_source=anzwix&id=d5cf50dafc9dd5faa1e61e7021e3496ddf7fd61e
Linus在补丁中写道,之前的一个提交【Commit d96c36004e31 ("tracing: Fix FTRACE_RECORD_RECURSION_SIZE Kconfig entry")】移除了一个隐藏的制表符,因为它在某些第三方的内核配置解析工具中导致了问题。
他指出,如果一个工具不能将制表符作为空白字符解析,那么它就不应该用来解析内核的Kconfig文件。因为制表符在Kconfig文件中是至关重要的。
Linus强调,如果解析器不能正确处理制表符,那么它们也不应该能够处理页面大小的配置。
Linus还提到,制表符与空格的混淆在Unix系统中是一个历史遗留问题,例如'make'工具在这方面就存在问题。但他明确表示,这并不意味着这是可以接受的。
他还说道,如果发现更多这种愚蠢的工具,他可能会在Kconfig文件中加入更多的随机制表符,尽管他不想让事情变得不必要地丑陋。