作者 | Marc Bevand策划 | 小智我曾在 Hacker News 上发表过一篇帖子,解释为什么 Windows 内核不管是在性能还是在创新方面都比不上 Linux。后来,有一位 Windows NT 内核开发者发文对此进行了回应,承认了这个问题的存在,并解释了导致这个问题的根源。但因为监管方面的原因,这篇文章被删掉了。不过,这篇文章意义重大,所以我还是重新把它贴出来。以下是正文。Windows 在很多方面确实比其他操作系统要慢,而且差距在不断扩大。导致这个问题的根源是人。Windows 世界的改进不够纯粹,不像 Linux 世界那样纯粹。在 Linux 世界,人们做出一项改进可能仅仅是为了获得荣耀。
当然,偶尔也会有那么一些人,他们也想把事情做得更好,但几乎都是以失败告终。我们确实在某些方面做出了改进,因为那些掌握资源的人相信这些改进影响到了业务目标。但这些工作是徒劳的,我们并没有正式或非正式的性能改进计划,我们开始关注安全问题,因为没有 SP3 的 Windows XP 对业务来说是一个巨大威胁,而性能问题在这个时候显得微不足道。
通常,系统组件所有者不太喜欢来自其他团队的补丁。作为开发人员,如果你接受了来自外部的补丁,可能会惹恼你的领导(因为补丁需要维护,导致计划外的设计变更),让测试人员不高兴(给他们带来额外的工作量),让 PM 生气(进度受影响)。所以,一个团队通常没有必要接受来自其他团队的变更,而且总是可以找到拒绝的理由。
在 Windows 世界,人们几乎找不到做出改变的源动力。而在 Linux 世界,哪怕是把遍历文件目录的性能改进了 5%,也会受到表扬和感谢。在 Windows 世界,如果你不是那个团队的人,即使你的代码被接受了,领导们也会不屑一顾。的确,做出一个巨大的改进可以让你引起高层的注意,这对于你的职业生涯来说是件好事,但这个改进要足够大,大到可以引起他们的注意。增量式的小改进只会惹人烦,对你的职业生涯并没有什么好处。如果运气不好,你跟领导说你为其他系统组件做了性能改进,他可能会反过来问你:如果出了问题,你该怎么办?
长此以往,人们不再热心于计划外的工作,这有什么奇怪的吗?
导致这种差距的另一个原因是我们无法留住有才华的人。谷歌和其他位于西雅图的大公司不断挖墙脚,把我们最好最有经验的开发人员都挖走了,我们只能从高校招聘年轻的毕业生来替代他们。你会发现,很多输入系统是初级工程师在维护。这些开发者的出发点是好的,他们也足够聪明,但他们不理解一些决策的初衷是什么,对系统的工作原理没有全面的认识,更重要的是,他们不愿意去修改已有的东西。
这些初级开发者倾向于通过实现新的特性来改进系统,而不是在旧有的基础上做出改变。因为相比修改旧东西,实现新特性可以节省评审时间。
这样的例子有很多,比如: