专注于服务器操作系统的FreeBSD是如何炼成的

专注于服务器操作系统的FreeBSD是如何炼成的
-----国内资深FreeBSD committer Delphij专访

ChinaUnix:FreeBSD是一份UNIX操作系统,支持众多的硬件平台,比如i386、IA-64、PowerPC及UltraSPARC平台。它是基于加州伯克利大学 的4.4 BSD-Lite发布,并带有一些4.4 BSD-Lite2增强。FreeBSD被遍布全世界的公司、Internet服务提供商、研究人员、计算机专家、学生,以及家庭用户用于他们的工作、教学和娱乐之中。 在国内,也有大量的互联网公司在使用FreeBSD操作系统,比如网易和新浪。同时,国内也有少数几位为FreeBSD默默作出贡献的开发人员,今天我们有幸请到他们当中的一位----delphij,他活跃于FreeBSD项目相关mailist和国内各大BSD相关社区,比如ChinaUnix、FreeBSDChina社区和newsmth的FreeBSD板块。作为国内的资深FreeBSD  committer,让他给我们谈谈目前的FreeBSD项目的发展现状,以及如何参与到类似于FreeBSD项目的开源社区中来。

ChinaUnix:能给ChinaUnix的网友简单的介绍一下自己么?

delphij:我是北京人,现年27岁,1999年经一位师兄介绍认识了 FreeBSD,并从 Linux fans 变成了 FreeBSD fans,大学期间做过一些 Windows 应用和少量驱动程序的开发,大学毕业以后一直在做开源平台上的开发和系统管理工作。我目前在美国硅谷工作,已婚。

  我在 2004 年成为 FreeBSD 的 src committer,并在稍后获得了doc/ 和 ports/的相关权限,目前是 FreeBSD 安全小组的成员。我比较关注的领域是基本系统中的工具和 libc 的易用性与标准化,以及内核的兼容性和可靠性,在业余时间不允许我去做比较大块的项目时,我也会花一点时间来改善一部分现有代码的品质。

  最早产生参加 FreeBSD project 的冲动是在上大一的时候,很大程度上是因为和Kirk McKusick 讨论关于 UFS 文件系统的一些问题的时候他提到说 Please encourage continued use of BSD software in your country。当时也感觉到,似乎我们中国大陆的开发人员在 FreeBSD 社区中没有什么声音,而很多东西对我来说并不是很困难,所以就想做一些自己力所能及的事情。

ChinaUnix:作为国内为数不多的FreeBSD committer,能给我们谈谈FreeBSD项目团队的运作么?以及如何才能成长为一名FreeBSD committer,最终成为Core Team的成员?

delphij:FreeBSD 项目团队是一个非常关注系统设计和代码品质的团队,在技术方面,我们鼓励同僚复审(peer-review)的方法来确保代码品质,并在开发过程中使用包括持续集成(Continuous Integration)和回归测试等自动化的方法来提高由变动所引入的新缺陷的门槛;在管理方面,我们每两年会由过去一年内活跃的 committer选举产生项目的领导团队――Core Team,而 Core Team 会将自己的一部分技术方面的权力下放给一些专业小组,如负责发行版及其质量保障的 Release Engineering Team、负责管理 Ports 基础设施及管理 Ports Committer 的 Ports Management Team、文档工程小组以及安全长官团队等,而 Core Team 则避免直接参与专业方面的争议处理,作为原则指导及最终仲裁机构存在,其地位类似于普通商业机构中的董事会。

  由于美国法律的要求,在项目之外还成立了 FreeBSD 基金会。除了接受捐款之外,基金会还代表 FreeBSD 项目团队进行一些必须以法人名义进行的活动,例如签署授权、持有“FreeBSD”注册商标等。

  作为开发团队,我们总是需要补充更多的新鲜血液来适应新的挑战。成为 FreeBSD committer 其实并不困难,找到一个或一些 FreeBSD 没有或不够完善的部分并不断提交相关的代码或补丁,很快就会有 committer 邀请你加入了,当然,FreeBSD的三个主要的组成部分――内核及基本系统(src)、第三方软件(ports)和文档(doc)都有一定的编码规范要求,这些联机手册 style(9)、Ports 开发手册等都有介绍,成为 committer 的开发人员需要遵守这些规范,并且能够和团队一起工作。

  我本人并不是 FreeBSD Core Team 成员,事实上, Core Team 需要关注很多管理方面的问题,因此也就需要在这方面花费一定的精力。成为 Core Team 成员需要在选举期间主动参选提出自己的主张,并获得其他 committer 的支持。

ChinaUnix:ChinaUnix论坛中很大部分的会员是Unix/Linux系统管理人员,能给我们谈谈作为一个系统管理人员,特别是开源系统方面的管理员,成长的过程中需要注意什么?包括技术方面的、学习技巧等等。

delphij:我个人认为作为系统管理员是需要了解很多基础知识的,这个其实和是否开源系统关系不大。系统管理员需要关注的问题很多,包括存储、网络,也包括安全,有些公司的系统管理员甚至还要肩负应用程序上下线甚至交付工程方面的职责。因此,作为系统管理员需要不断地拓展自己的知识面,并思考如何能够使自己所管理的系统更有效地运行。我认为系统管理员除了普通的服务器软硬件方面的知识之外,还需要具备一定的开发能力,哪怕仅仅是把自己的一部分工作自动化地进行,因为这样做不仅可以提高工作效率、减少失误,而且可以让自己有更多的时间去学习和拓展知识面。

  关于学习技巧,我个人认为小的SA团队,例如有2-3个人的小团队之间的相互促进效果是最明显的,在这种实际的工作中能够迅速提高能力并增长经验。
ChinaUnix:能给我们谈谈最近几年的Google SoC么?FreeBSD项目从中得到了什么发展?哪些公司或者团体对目前的FreeBSD项目贡献比较多?
delphij:Google SoC是一个非常有远见的计划,我想我们应该感谢 Google 公司提供资助和持续不断地运营这个计划。过去四年 FreeBSD 从中受益很多,这不光是SoC所赞助的项目,也包括透过SoC所发现的人才,而今年我们继续作为 mentor organization 参加这个计划,这几年中已经完成和正在进行的项目涵盖了操作系统的各个方面,从磁盘调度器、系统状态监控、托管访问控制、Xen、几种不同的文件系统等内核方面的实验性和应用性项目,到用户环境的流量监控、新的安装程序、更多的回归测试,以及采用BSD授权的一系列基础编译和调试工具等等,每年总共会有大约20个入选项目得到资助。

  许多欧美和日本的公司对 FreeBSD 的开发提供赞助,或直接参与开发。例如大家熟悉的 Cisco、NetApp、Juniper 等等。除了资金赞助之外,还有很多公司是以捐赠代码或聘用 FreeBSD 开发人员的方式来支持 FreeBSD 开发的,除了 Google、Yahoo 和一些国外的硬件厂商之外,国内的网易、新浪两家网站都有直接聘用FreeBSD 开发人员,这些对我们都是十分重要的支持。

ChinaUnix:本来Java在FreeBSD平台的支持就磕磕碰碰的,现在好了,Oracle收购了Sun,FreeBSD平台上的Java还会有好的发展么?

delphij:我认为我需要修正一下,FreeBSD 对 Java 的支持并没有什么太严重的问题,过去FreeBSD 对 Java 的支持不太好用的原因是 Sun 的授权不允许 FreeBSD 直接发布编译过的二进制包,这导致在 FreeBSD 平台上安装 Java 很不方便,因为编译一个二进制版本的包需要的时间比较长。

  在 FreeBSD 基金会和 Sun 公司的努力下,Sun 公司授权 FreeBSD 基金会发布了一系列新版本的二进制 Java 版本,这在一定程度上缓解了先前由于必须自行编译或使用 Linux 兼容 ABI 支持使用 Linux 版本 Java 的不便。2006年底,Sun公司宣布以 GPLv2 发布一套名为 OpenJDK 的新的 Java 版本,并分步骤发布了较为完整的新版实现,FreeBSD 目前也提供了基于这组套件的新版本 Java,未来将取代FreeBSD 现有的 native JDK。

  Oracle 收购 Sun 目前仍在进行中,现在评估其影响可能还为时尚早。不过,由于OpenJDK 已经以 GPLv2 发布了多个版本,Oracle 未来将其重新变为不公开源代码的可能性并不太大,最严重的情况也无非是新版不再公开代码而已,而根据美国法律,这并不影响社区继续维护已有版本的合法性,以及相关的研发能力。
  相比 IBM,我认为 Oracle 收购 Sun 尽管不是十分理想的结果(个人感觉两家公司的企业文化差异还是比较大的),但是要比前者好一些,因为至少双方业务上的互补性更强一些。如果这次收购成功,也许能够给 Sun 这家领跑硅谷27年的技术公司注入新的活力。这次收购对于开源的影响,我想因为两家公司规模很大,还需要一段时间才能够看得比较清楚。

ChinaUnix:FreeBSD平台的文件系统目前发展的如何,ZFS可以在生产环境使用了么?相比较而言,Linux平台的文件系统发展的很快,比如有最新的Ext4、另外还有Btrfs,能比较一下这几者间的差别么?

delphij:FreeBSD 目前提供了两种主要的文件系统――UFS和ZFS。在生产环境中使用早期的ZFSv6 版本(直到 7.2-RELEASE 和之前的 FreeBSD 7.x 版本),在大量并发的条件下存在一些问题,而新的 ZFSv13 版本,也就是目前 7.2-STABLE 中的版本,则已经相当稳定,而且性能方面也有相当显著的改善。

  ZFS 是一个非常关注数据可靠性的文件系统,正确配置和使用的 ZFS 与其他现有的文件系统,包括 UFS、ext3、ReiserFS、XFS 等等相比,都具有无可比拟的可靠性优势。当然,在性能方面,这些文件系统各自有不同的擅长的领域,例如 XFS比较适合于跑数据库、ReiserFS 比较适合大量小文件的情形,然而正如 Donald E Knuth 说的,计算机硬件和程序都是“Garbage in, garbage out”的,好的程序员有一万种方法在不换文件系统的前提下改善性能,却没有任何一种办法在数据损毁的情况下让计算机得到正确结果。这一点上我非常赞同 Solaris 的一项设计原则:Performance is a goal, correctness is a constraint。

ChinaUnix:国内BSD系统部署的大概情况,主要应用在哪些方面,能给大家做个介绍么?

delphij:我了解的国内部署主要有作为CDN的反向代理、国内一些知名网络游戏的服务器后端、商用的虚拟主机、DNS等等。最近在美国这边也看到有报道说,国内的一些高校也基于 FreeBSD 开发了一些操作系统产品,并在一些国有银行中取代了 SCO Unix。FreeBSD 提供的防火墙和路由等机制非常适合于作为办公室、学校和网吧的安全设备。
ChinaUnix:FreeBSD系统上的虚拟化技术支持目前进展如何?在这种技术趋势中FreeBSD能够扮演什么角色,另外还有云计算。

delphij:FreeBSD 从 4.0,也就是 2000 年左右的时候就已经提供了其特有的虚拟化技术――jail,这是一种轻量级的虚拟化技术,配合 FreeBSD 的 Linux ABI 支持,能够同时运行 FreeBSD 和 Linux 应用。与 Xen 相比,尽管它不能支持其他 OS 并行运行,但这种虚拟化的开销要少很多,能够满足许多大型互联网公司的需要,并且在过去近10年中被许多虚拟主机提供商使用。我们过去在公司内部的开发环境,以及一部分生产环境中也大批量地使用了 jail 技术,并达到了充分利用硬件资源的目的。

  此外,最近一段时间 FreeBSD 的 Xen 支持也有相当多的进展(FreeBSD目前已经能够很好地在 Xen 3.3 中运行,但 Amazon EC2 所采用的是较早版本的 Xen,因此有开发人员正在进行这方面的工作)。我认为支持 Xen (不仅是目前已经支持的 domU,也包括 dom0)对 FreeBSD 来说是一件很重要的事情,然而对普通用户,特别是希望尽量多地将硬件资源用于真正的业务和计算上的用户来说,jail也许是个更好的选择,毕竟在真正的生产环境中需要同时混合 *nix 和 Windows 环境的机会并不是很多,类似 Xen 那样同时运行多个不同的内核的方法带来的开销就有些得不偿失了。

ChinaUnix:能和大家谈谈FreBSD操作系统的桌面支持进展如何?特别是硬件,比如显卡、声卡等等。

delphij:这方面 FreeBSD 比较需要新的人手   :)   比较常见的硬件,如 Lenovo 和 Dell的笔记本、常见的 AC97 声卡、Intel 3945/4965无线网卡等,FreeBSD 已经能够提供相当完善的支持,但一些不太常见的硬件目前很可能还支持的不够好,或完全不支持。

  对于希望参加 FreeBSD 团队的开发人员来说,这些都是很好的入手方向,因为驱动开发可以说是内核开发中最简单的部分。我们也希望硬件厂商能够尽可能地开放他们的硬件 datasheet,因为只开放二进制版本或缺少注释的源代码驱动出来,尽管也许能够使用,但非常不利于社区修正其中的bug和持续的维护,并且也会增加这些企业的人力成本。

ChinaUnix:FreeBSD 8.0可能是下半年的重点吧,这个发行版将会带来什么新特性?

delphij:FreeBSD 8.0 目前已经进入了代码变动减速阶段,再过大约一个月之后将进入代码冻结,因此,基本上可以确定这个版本会在今年下半年发布(目前的计划是8月左右)。这个版本除了在先前版本基础上所作的性能和可靠性方面的改进之外,还有一些比较重要的改进:
- POSIX TTY。使TTY从驱动中抽象出来,并简化了两者的逻辑。有助于改善可靠性和X的用户体验。
- 节能。这是一项持续的改进计划,通过对系统中各个部分的重构来降低操作系统本身产生的能耗,并配合一些硬件特性来在运行过程中关闭暂时不用的硬件来节省电能。
- 轻量级内核线程。这个主要是帮助开发人员简化他们的设计模型。
- ECMP和新的ARP实现。将流量在多个链路上路由的能力。
- DTrace。
- vimage 和 Xen 支持。对虚拟化的改进。
- NFSv4支持。

  原本我们还有计划在这个版本中正式引入基于 LLVM/Clang 的 C 编译器,实际上这部分的工作已经基本接近尾声了,但是由于代码变动减速阶段已经开始,我想这部分很可能会推迟到 8.0-RELEASE 正式发布之后再引入 9.0-CURRENT。

ChinaUnix:最后一个问题,您做为资深的BSD用户,相信也用过Linux,能简单的比较一下两者的差别么?比如代码质量、社区合作方式、商业支持等。

delphij:从使用者的角度,FreeBSD有一个叫POLA的规则,也就是说在新版本中尽可能减少用户可见的、不必要的界面变动。同样的配置,往往可以同时在不同的 FreeBSD大版本升级之后继续使用。另一方面,FreeBSD 力求做到使用方式的统一,通过ports/packages 套件安装的第三方软件,往往会修改成一致的、符合一定规范的安装方式,从而减少服务器维护的成本。

  Linux 的开发模式更倾向于尽快地引入新的东西。我个人订阅了几种 BSD 操作系统、Linux 内核和 OpenSolaris 的提交邮件列表,从新增功能的引入就可以看出这一点。Linux 的开发方式中,会将改好的东西直接丢进 tovards 的 git tree,这种方法有其优点――大家可以自己改自己的部分而不互相影响,但也有其缺点,对于开发人员来说,想要追踪代码的变动,或进行更大范围的同僚复审会比较困难,因为你要追踪的变动很可能在另一个 git 库中,甚至在作者自己的硬盘里面。我个人比较倾向于集中式的 SCM 管理,通过代码冻结这样的过程,能够让更多的人关注发行版本的品质,从而有助于产生更好的成果,然而,也有观点认为 FreeBSD的开发模式对于新加入团队的开发者来说门槛过高,特别是同僚复审过程,有时对刚加入团队的开发人员来说,某种程度上会是心理上的挑战。

  对于系统管理员来说,FreeBSD 提供了很多非常方便的性能诊断分析工具,例如ktrace,能够帮助管理员了解系统正在进行的操作并迅速定位问题,而其预设配置也多是基于安全和可靠性考虑。同时,由于系统中的不同部件风格非常一致,也有助于他们了解更多的技术和架构细节。

  对于研发型用户(例如制作嵌入式设备的初创公司,等等)而言,FreeBSD 的优势在于代码风格统一以及宽松的授权。前者使得第三方开发人员能够很快地熟悉整个系统中各个部分的代码,减少在理解方面所遇到的阻碍,因为好的代码是具备良好的设计和实现,而不需要“情景分析”的。而宽松的授权则让这些用户能够在遵守授权规则的前提下,不需要担心新版本软件的授权突然将他们的行为列为违规而带来的法律风险;另外,更重要的是,*BSD由于历史上所经历的法律诉讼,对代码的合法性审核非常严格,有问题的代码,哪怕仅仅是有可能侵犯专利,都会在第一时间被删除而不是成为日后被其他公司诉讼的隐患。在北美市场,由于这些因素的影响,已经有一些嵌入式厂商逐渐将产品转为使用 *BSD 和 FreeBSD 平台。

  最近几年一家一直在支持和提供 FreeBSD 服务的公司―― iXsystems (原 BSDi)在努力地拓展 FreeBSD 与硬件制造商之间的关系,并且在一些大用户的推动下取得了相当多的进展,而受其影响,在北美地区也有一些开发人员创业成立咨询公司来提供 FreeBSD 驱动移植等方面的服务,这些都会改善现有的一些驱动程序相对匮乏的现状。对于有兴趣开发 FreeBSD 硬件驱动的厂商,我们提供了一个名为freebsd-drivers 的邮件列表来向他们提供技术支持。我个人也非常希望未来国内能够出现针对 FreeBSD 提供商业支持的公司。

你可能感兴趣的:(互联网,计算机,internet,伯克利大学,committer)