近日,在Quora(类似知乎)网站上,有Po主提出了一个问题:要使操作系统获得UNIX认证,需要做些什么?答主TerryLambert给出了非常精彩的回答,鉴于他的身份前苹果工程师,曾负责MacOSX内核的大部分工作,该回答很快就获得广泛关注并获得了上万赞。 这是一个引人入胜的故事。早年苹果公司推出MacOSX操作系统的时候,经常利用兼容操作系统的UNIX内核作为宣传手段。比如,在其网站上,就专门有一页介绍MacOSX的UNIX的文章。 TheOpenGroup(国际开放标准组织)对此提出了诉讼,称其未经授权便擅自使用Unix名称。一旦苹果败诉,就需要赔偿2亿美元。 不过,苹果公司坚持自己可以自由使用Unix的名称,认为自己没有进行虚假宣传。但为了应付这场诉讼,据Lambert回忆,当时苹果对于此事主要有两个解决方案,要么以大约10亿美元的代价收购国际开放标准组织,要么赶紧获得Unix兼容认证,从而化解这场诉讼。 史蒂夫乔布斯将这个认证的秘密任务交到了前苹果技术负责人Lambert手上,需要针对现有的MacOS源代码运行合规性测试,边测试边修改,完成时间只给了一年。这也意味着Lambert需要在短时间内对MacOSX内核的1300万行代码了如指掌,技术难度非常大。 Lambert被承诺在任务完成之后,团队将会获得2000万美元的股权,Lambert个人将得到1000万美元。实际上,这种任务如果是针对Linux的,那么需要一个二三十人的团队工作五年,但Lambert带着一支五人团队在一年内就完成了,期间还为数百个开源项目贡献了大约200万行的代码。只不过,Lambert最终没有得到这1000万美元的报酬,他的股权被其领导独吞了。 有些人说不存在10x程序员,但我认为他们是没有遇到像你这样的100x程序员。虽然我们都知道最终MacOSX已经通过UNIX认证,不过这并不影响我们跟着Lambert的回忆去了解这段有趣过往的细节。让MacOSX成为真正的UNIX 按照Lambert的说法,为了让MacOSX通过UNIX认证,这里面要做的工作可太多了。 让MacOSX成为真正的UNIX,这样就可以化解这场诉讼了,这对在Linux日益普及的情况下逐渐失去市场的国际开放标准组织来说是件好事。以大约10亿美元的代价收购国际开放标准组织,这样苹果公司就可以自由地使用该商标;但是,这并不能使他们免除与SunMicrosystems、IBM和其他公司的现有合同义务,因为这些公司都已经获得了UNIX商标的使用许可。当时有人问Lambert是否可以带领一支团队去做第一个选项的工作,他表示,同意的前提是,可以基于这个项目,指导整个组织的其他部分都在自己的代码库上进行相应的修改,并且可以对提交规则进行相当宽松的处理。 随之,Lambert获得批准并开展认证工作。他们首先针对现有的MacOS源代码运行合规性测试套件,由于头文件的缘故,测试套件立即显示出错。 他和同事EdMoy做了两行更改,将类型定义从stdio。h移到它应该在的位置。在stdio。h中有一行更改,而另一行的更改是在该类型实际上应当存在的文件中。 接着再次运行测试,发现首次测试中的其中一个头文件错误消失了。因此,Lambert等人做了一次世界构建(worldbuild),将MacOSX中的一切,包括iTunes都进行了重建。这一更改之下,有接近150个项目未能顺利重建,iTunes也在其中。 于是Lambert和Ed对这些项目进行了认真的研究,并修复了其中的每一个项目,以让它们都能够进行构建。他们接着又进行了一次世界构建,所有东西都建立起来了。 也正是在那个时候,Lambert才有机会接触到苹果的所有源代码。然后他们向项目提交了高优先级的错误修复,但其中一些立即被降低了优先级,另一些只需要做简单修复,因为他们帮助提供了补丁。接着工程副总裁BertrandSerlet重新提升了那些被降级的项目的优先级。然后,Lambert他们提交了头文件更改。项目甚至惊动乔布斯 事已至此,Lambert他们在这时候不得不重新评估一下整个项目的可行性。考虑到他为这个项目设定的先决条件,他和Ed都认为,这在时间范围内是可以继续下去的。 该项目还升级到乔布斯那里。Lambert继续获得执行批准,毕竟,这样做能让苹果公司节约大量资金,而且还改进了所有MacOSX服务器的营销宣传资料。 他们被承诺在完成之后将会获得2000万美元的股权。Lambert将得到1000万美元,Ed和KarenCrippes将分别得到500万美元。 Lambert表示,当时他戴了很多帽子,不只是一个技术负责人,而且还是事实上的项目经理。 这个过程也是肉眼可见地漫长。Lambert估算需要约一年的时间,这是一支由5个人组成的项目团队:三名mousekateers(并非拼写错误),两名承包人:是LenLattanzi,负责用户空间的代码;JaimeDelgadillo,负责全职的自动化测试和Bug归档,并且尽量提供一些补丁。 项目组还有两名临时承包人,一名负责工具的合规性,另一名则负责手册页面。另外,他们还可以根据情况从苹果的其他部门抽调员工进行短期的工作。漫长的一年 第一个大喜进展是,所有的头文件都通过了测试,这样测试套件中的其他测试就可以开始运行。在那个时候,Lambert实际上已经将所有的头文件的修改提交给了MacOSX的其他部分。当Tiger(指MacOSXv10。4)版本发布时,头文件就已经符合标准了。但是,这影响了CodeWarrior(Mac的IDE)的正常运行。Lambert说自己一直想要解决这一问题,但一直没有机会,而且CodeWarrior或多或少都受到了影响。 对于苹果公司的其他部门而言,Lambert刚刚解决了修复头文件的Bug,它包含了许多其他针对单个头文件的Bug,这用了三个月左右的时间。 Lambert曾承诺过一年的时间,那么他将怎样实现这一年的预期呢? Lambert回忆道,我知道,对头文件进行强制性的更改,以及与之相关的项目更改,将会成为项目中最大的单个部分。一旦我们能够进行其他的测试,那么在其他方面将会有大量的‘可轻松实现的目标’等着我们去解决。这个过程用了两个多月的时间,我们在提交规则时总是犹豫不决,但很快就完成了。Ed在我的协助下完成了libSystem的大多数工作(libc其他系统库),并把它们合并到一起,从命名空间中移除某些内容;这也是为什么在usrincludesys中,头文件以开头。 在等待提交的过程中,你可以并行地做其他工作,我们就是这样做的。在实现这些可轻松实现的目标之后,还有许多工作要做,例如重写内核中的信号系统,但这并不是那么容易实现。 不过Lambert等人已经把Umesh(我不会告诉大家他的姓)给说服了,因为他不希望我们去触碰他的pthreads代码,不管怎么说,他还是想要在那里做出一些改动,有了这个项目作为反复推敲这些更改的手段,让他感到非常高兴。后来,他们还从MikeSmith(MichaelSmith,苹果高级工程师)那里得到了勉为其难的支持,让他重写文件锁定代码。 项目组最终还通过询问有关陷阱路径的问题以及围绕信号系统堆栈帧保存的问题收买了JoeSokol。不过Lambert强调,在这些人当中,Umesh对他们的deadline有着最大的帮助。扣动扳机 万事俱备,Lambert正准备扣动扳机,意外随之而来。 他们引入了英特尔的代码更改,让我们再等上两个星期,但一切都乱了套。所以我花了三天的时间,将一致性分支上所有的补丁都重新整合到英特尔的内核代码中。到了那时候,我已经对MacOSX内核的1300万行代码了如指掌。 然后大家又回到了通过测试的状态。后来有人告诉Lambert,不能为Tiger做整合。但这样会错过已设定好的deadline。Tiger的发布时间被再次延迟了6个月,一次又一次地延迟。这个问题不在内核,而是在英特尔。 Lambert说,我们本来可以轻松地在Tiger上发布,和我们自己设定的deadline保持一致。但如果要他给Linux做相同的工作,可能要花五年的时间,而且还得需要二三十人。毕竟Linux发行版过多,产生了大量的阵营。 Lambert最后提到,团队为开源社区做了很多贡献,我们从开源社区收获了许多感谢,尤其是让bash顺利通过测试的修复。你绝对不会知道,作为这个项目的一部分,苹果公司为开源社区做出了多少贡献,至少对于非苹果公司的人而言,这是一个秘密项目,因此我们并没有将这一事实宣扬出去。但是我估计,当年我们为数百个开源项目贡献了大约200万行的代码。虽然感激之情有很多,但这种感激并非归于集体,因此,苹果公司总是被人诟病为‘使用开源代码,但从不回馈’。但,我们修复了至少15个GCC的Bug。而你根本不知道。 因此,整体来说这是一项规模不小的工程,尤其是在为了获得合规性的情况下。Lambert感慨道,这真是一个漫长的过程。 尽管如此,Lambert在评论区透露,自己由于一些原因,最终并未获得预期的1000万美元股权。 原文链接: https:www。quora。comWhatgoesintomakinganOStobeUnixcompliantcertified