贝尔实验室九号项目

贝尔实验室九号项目(英语:Plan 9 from Bell Labs,常简称为Plan 9)是一个分布式操作系统,由贝尔实验室的计算科学研究中心在1980年代中期至2002年开发,以作为UNIX的后继者。它现在仍然被操作系统的研究者和爱好者开发使用。[4][5]

贝尔实验室九号项目
格伦达,九号项目的吉祥物,由Renée French英语Renée French绘制[1]
rio (视窗接口)
开发者贝尔实验室
(现已交由Plan 9 Foundation接手)
编程语言派生自ISO/ANSI C
操作系统家族类Unix系统
运作状态支持中
源码模式自由及开源软件
首次发布1992年(仅供学院)
1995年(一般大众)
当前版本Fourth Edition (2015年1月10日,​9年前​(2015-01-10)[2]
支持平台x86MIPSDEC AlphaSPARCPowerPCARM
内核类别宏内核[3]
默认用户界面rio / rc
许可证MIT
官方网站https://p9f.org/
https://plan9foundation.org/

Plan 9的特色功能有:将所有本地和远程资源以文件形式组织的9P协议,union mounts,改进的进程文件系统以及原生的Unicode支持。在Plan 9中,所有的系统接口(如网络和用户界面接口),都是作为文件系统的一部分呈现,而不像其他操作系统上一样拥有自己独立的接口。

Plan 9得名于艾德·伍德1959年拍摄的B级科幻电影外太空九号计划 [6],而它的标志格伦达来自同一导演拍摄的另一部电影忽男忽女

2021年3月21日,目前所属诺基亚旗下的贝尔实验室,宣布将一切知识产权以及未来开发工作转交给新成立的九号项目基金会(Plan 9 Foundation)。[7]

历史 编辑

日期 发行版本 注释
1992 Plan 9第一版 贝尔实验室向各大学发布
1995 Plan 9第二版 贝尔实验室发布,允许非商业使用[8]
2000 Plan 9第三版(巴西 朗讯科技在开源许可下发布,允许非商业使用
2002 Plan 9第四版 朗讯科技在自由软件许可MIT下发布[9]

九号项目在贝尔实验室中取代UNIX成为组织中主要的研究开发平台。与原先的UNIX模型相较,其发展出来的数种改变改善了系统的使用及程序开发,尤其是在分布式多用户环境中。起先在1980年中期,九号项目只是贝尔实验室的内部计划。到了1992年,贝尔实验室提供第一个公开版本提供给学院使用。在1995年,商业化的第二版发布提供一般大众使用。1990年代后期,朗讯科技继承了贝尔实验室后,对商业化九号项目失去了兴趣。到了2000年发布了非商业化的第三版,采用开放源代码授权。而2002年的第四版更采用自由软件授权。

一个包括现任和前任贝尔实验室成员与麻省理工学院成员参与的用户与开发人员社群,仍每天以光盘影像档的形式持续提供每日更新发布的文件。贝尔实验室也仍旧承续九号项目的开发[10]。开发中的源代码文件可以透过9PHTTP协议加以访问并用于既有安装文件的更新[11]。除了光盘映像档中操作系统所包含的官方包以外,贝尔实验室也架设了一个空间供外部开发的应用程序与工具存放。

概观 编辑

贝尔实验室九号项目主要是由贝尔实验室计算科学研究中心(Computing Sciences Research Center)的成员所开发,该团体也曾开发UNIXC语言[12]。九号项目团队原先由罗勃·派克肯·汤普逊Dave PresottoPhil Winterbottom所带领,及计算科学研究中心主管丹尼斯·里奇所支持。在多年的开发过程中,有许多开发人员对这项项目做出了不小的贡献,如布莱恩·柯林汉Tom Duff道格拉斯·麦克罗伊比雅尼·斯特劳斯特鲁普Bruce EllisSteve Simon等人[13]

九号项目是针对现代分布式环境而从开始就设计成一种网络操作系统并加以开发。不同于UNIX是在设计后才增加图形用户界面的功能,九号计划打一开始就内置了。虽然仍未成为大受欢迎的UNIX派生系统,但仍有持续成长的开发者社群。

九号项目具备了分布式架构,它可以被安装并使用于单一自含系统上,也有能力把操作系统的功能包散布于分散的硬件平台上。在标准的九号项目安装系统中,用户会以一个轻量化的终端执行Rio 图形用户界面透过网络连接到CPU服务器来处理计算密集型(computation-intensive)的程序,并借由额外的文件服务器及归档存储系统提供长期的资料存储。现有的台式机亦可以在内部使用多个虚拟机重现此种架构。

设计概念 编辑

九号项目的设计者对与微核心类似的目标感兴趣,但是以不同的架构与设计细节来达成这些目标。九号项目的设计目标如下:

  • 以文件系统为基础的设备:把所有的资源都列在层次结构式文件系统中,以节点(Node)表示。
  • 命名空间:从应用程序的观点来看,网络是种单一且清楚的命名空间,能展现层次结构式文件系统,也能代表近端或远程实体分离的资源。每个程序的命名空间皆能独立建置,用户也能同时使用采用各式命名空间的应用程序。
  • 标准通信协议:采用名为9P的标准协议,用来访问近端或远程的所有资源。

一体化的输入/输出模型 编辑

在UNIX之前,多数的操作系统都各自有不同的机制来访问不同类型的设备。举例来说,访问磁盘API与自串口发送或接收的API、又或是操作打印机所使用的API,彼此之间都有所不同。

UNIX借由透过磁盘索引节点(disk inodes)执行所有输入/输出操作来尝试移除这些差异。每个设备都被要求必须要支持带有意义的读取写入操作用以作为控制的手段。这也允许用户无须了解底层的实现细节,便能利用如cpdd等指令从任一设备提交资料给其他的设备。然而在此同时,许多关键的概念(如控制行程的状态)并没有一致地对应到文件系统上。如同柏克莱接口X窗口系统等的新功能被开发出来以后,以文件系统之外的方式实现。新的硬件功能(如在软件中使光盘驱动器退片的功能)也建议采用特定硬件(hardware-specific)控制的机制,如使用ioctl系统调用等。

九号项目不采用这些不同的实现,而且回归到以文件系统为中心(file system-centric)的系统观点。无论是网络或者用户界面、甚至是视窗本身,所有可用资源对于每个九号项目的程序来说,都是层次结构式文件系统的一部分,而非特定的接口[10]

文件系统、文件与名称 编辑

九号项目扩展系统到超越文件的概念,来到了“名称”的层次。无论是电脑的文件显示器用户电脑本身,都是一个独一无二的路径名称。这些都是透过既有的UNIX标准来处理,并扩展至所有的对象皆可以用一致的方式来命名及寻址。这跟万维网所使用的URI的概念很相似。在UNIX中,像打印机这样的设备会透过软件转换的方式在/dev以名称代表,但这种寻址方式只对实体连接到硬件上的设备有效,并不能套用到网络设备上。在九号项目系统中,所有的打印机都会以文件的方式呈现,而且可以透过网络被任何工作站访问。

九号项目的另一个创新点则是用户可以对相同的“真实世界”对象各自分别取不同的名称。每个用户都可以借由在他们的命名空间中收集各式各样不同的对象来创造属于他们自己的个人化环境。UNIX也有类似的观念,用户可以复制其他用户来获取权限。但是九号项目则把这种作法扩展到所有的对象,用户可以轻易地产生自身的“复制品”,加以修改,就算移除这些复制品也不会影响他们创造过的资源。

合并目录 编辑

UNIX允许从不同的资源透过“链接”或文件系统“挂载”的观念来建立文件系统。这些功能会屏蔽掉原先的目录,如果有人在名为“net”的目录下挂载了新的文件系统,会导致无法访问先前可以在“net”目录下访问的内容,除非取消挂载的操作。

九号项目则采用合并目录的想法,从不同媒体或网络资源合并的目录会以透明(transparently)的方式绑定。举例来说,可以把别台电脑的/bin(应用程序)目录跟本机端绑定,接下来这个目录就会同时有本地端以及远程的应用程序在里面,用户可以无障碍的访问近端或是远程的程序。使用相同系统的情况下,九号项目所控制的外部设备与资源可以绑定到/dev目录下,这可以让设备不需要任何额外的程序,就可以透过网络进行分享。

现今有许多Linux发行版Live CD,一定程度上的以合并挂载的方式实做了这个功能。

/proc 编辑

列出所有执行中行程/proc目录,描绘出这些功能是如何在共同运作时能够带来更好的整体结果。九号项目特别的"文件系统"也为Linux及其他之后的操作系统所采用。不同于其他核心资源的是,行程以/proc目录下的命名对象(内含信息与控制文件的子目录)的形式表现,并给予用户一组动态的输入/输出通道来对行程发送指令及读取资料。用户无须使用受限的系统调用来与编译过的程序核心交互,相反的,它可以使用如ls以及cat等指令来搜索、查询、以及操作行程。

用户也可以从其他的机器上将/proc目录(以及任何其他特定的文件系统)挂载到自己的命名空间中,就如同这些程序是在本机端一般地与它们交互。结果就是利用个别的机器架构出一套分布式运算环境,这些机器可能是用户桌上的终端、存储长期资料的文件服务器、提供较快CPU及运算能力、用户审核、网关等服务之其他服务器,全部都采用为大多数电脑用户所熟悉的既有的层次结构式目录/命名系统。用户可以借由终端来收集文件服务器、服务器上所运行的应用程序、网络上的打印机等设备,绑定进自己的命名空间进而"建构"出一套系统。

/net 编辑

九号项目并没有使用任何系统调用来处理众多的通信协议或设备驱动程序的接口。举例来说,/net目录下包含了所有TCP/IPAPI,并可借由使用脚本语言命令行接口的工具来撰写可以控制文件对连线进行写入或读取的程序。底下的子目录如/net/tcp/net/udp等目录用来对应各种协议的接口。用户可以借由挂载一台具有公开(public)IP地址的外部机器的/net目录,来让使用9P网络协议的内部网私有(private)IP地址,能透过该外部机器进行连线的方式,进而达到实做NAT的效果。又或者用户可以借由挂载远程网关的/net目录,在公开网络上使用加密(secured)的9P协议达成实做VPN的效果。

以下是在/net目录中采用合并(或称堆栈(stack))目录的例子:就像面向对象编程语言的继承观念一样,你可以把一个(可能是远程的)/special目录绑定到其他的本地端特定目录下,增加一些控制文件以及是需要隐藏其他的文件。这个合并目录线再就像是原先目录的子对象一般,原先的功能可以仅更动一部分就好。对照到/net文件系统的情况,用户可以借由更动或隐藏底下的/net/udp子目录,增加本地端过滤程序来达成控制或扩展UDP接口的功能,而不会更动到原本正在运行的(可能是远程机器上的)/net/tcp子目录的资料。命名空间是针对每个行程来设置的,如果用户更动对/net合并目录来一个不受信任的应用程序设置限制,就可以限制该程序访问网络的能力。

这让程序员很容易就可以在采用文件系统的标准命名格式、访问控制、安全机制的情况下,从不同的系统上使用不同的语言合并“对象”或文件系统,大大增加了使用上的透明度。

这也跟BSDmount_portal[1] 的指令所提供的功能类似,只是挂载的目录不是/net而是/p,提供的网络协议也只有/tcp而已。

网络与分布式运算 编辑

九号项目虽然是基于UNIX,但是设计上则是想达成运算系统核心功能间彼此沟通的观念。所有系统资源都被当成文件般地命名及访问,并提供可根据在特定机器上各个程序设置的多种分布式系统视图(view)。这种让服务器以类似传统文件的方式,把任何信息都呈现给用户及应用程序的实现方式,增进了应用程序设计上的一般化与模块化的能力。

九号项目支持网络通透性的关键在于采用一种新的底层网络协议9P。9P协议实现了链接到命名网络对象并以类文件(file-like)系统呈现的方式。借由快速的比特导向(而非区块导向),分布式文件系统可以把任何对象可视化的呈现,而非透过远程机器上的一个NFS服务器再加以呈现。这个协议可以用来跟行程、程序、资料、以及包含用户界面及网络以及彼此之间进行通信。在第四版中,这个协议作了一些修改并且更名为9P2000。

Unicode 编辑

九号项目的系统采用Unicode作为编码机制。九号项目中运用由Ken Thompson提出重大修改的UTF-8作为整个系统中的原生编码,并在1992年将整个系统提供作一般使用[14]。不过九号项目仅支持Unicode中基本多文种平面中有定义的部分。

实现 编辑

 
用rio进行安装的GUI画面

除了x86架构下有可安装的实行环境之外、九号项目也移植到MIPSDEC AlphaSPARCPowerPCARM及其他硬件平台上。系统以派生自ISO/ANSI C的语言所编写。部分应用程序原先以Alef撰写,但目前皆以C语言改写。九号项目支持以POSIX应用程序透过APE来模拟柏克莱接口接口。近来有一套新的应用程序linuxemu被开发用来执行Linux的程序,目前仍有许多要改进的地方。

九号项目也被用在具代表性的超级计算机上,像是IBM BG/L Supercomputer[15]以及Blue Gene

影响 编辑

UNIX其中一个中心概念是所有系统接口皆可以一组文件的形式呈现,而九号项目成功地把这个概念以现代分布式系统实现出来。九号项目的一些功能,像是Unicode中的UTF-8编码,也被其他操作系统所实现。一些类UNIX操作系统,例如Linux,也实现9P、九号项目的文件系统,以及部分实现的类rfork指令的系统调用。除此之外,在Plan 9 from User Space中许多九号项目所采用的应用程序及工具,例如rc shell,也被移植到UNIX以及LINUX系统上,而且还有一定程度的人气。Glendix这个项目则尝试以GNU/Linux操作系统取代九号项目,或者是说,以Linux核心来取代九号项目的核心。

然而,九号项目并未能像UNIX一样热门,变成主要只是一种研究用的工具。九号项目被评为"作用看来不过是能在操作系统研究领域产生有趣论文的设备"[16]Eric S. Raymond在他的著作The Art of Unix Programming中则推测九号项目缺乏被接受度。

"九号项目会失败单纯只是因为它的改进程度没大能取代Unix。与九号项目相较,虽然UNIX看来破破烂烂又有明显缺失,但是它还是能好好的把工作完成,这就足以保住它的地位了。这件事情给那些有雄心壮志的系统架构的一堂课是:比更佳解决方案相比之下来的最危险的敌人是那些能把事情已经做的够好的程序。"[16]

对于九号项目的评论像是在操作系统设计中把九号项目列为糟糕的更好的典范,其他常见的评论则有九号项目操作系统中缺乏“优雅”(polish)及开发环境[17]、九号项目中达到商业化程度的软件支持量不足[18]

九号项目的支持者和开发人员声称阻碍其发展的问题已被解决,原先作为分布式系统、开发环境、研究平台的目标也都已经达成,而且也慢慢地开始有人采用。可透过Inferno的托管能力将九号项目的技术带给其他系统,形成异构网格运算中的一部分[19][20][21][22]

授权 编辑

完整的源代码页面存档备份,存于互联网档案馆)可以免费的在朗讯公共许可证1.02版的授权之下获取,而且被开放源代码促进会认为是开放源代码软件及自由软件基金会认为是自由软件。它虽然有通过Debian自由软件指导方针,不过不兼容于GNU通用公共许可证。 2021年3月23日之后,所有版本以MIT License授权。[23]

引用 编辑

九号项目标准程序库 编辑

实现接口 编辑

  • 9P(或Styx) - 文件系统的协议
  • rendezvous - 基础的同步机制
  • Brazil - 变成九号项目第四版的项目

影响 编辑

参见 编辑

参考文献 编辑

  1. ^ Plan 9 Foundation. Glenda, the Plan 9 Bunny. 2006 [2023-04-20]. (原始内容存档于2023-05-30). 
  2. ^ plan9checksums. Bell Labs. [2019-07-25]. (原始内容存档于2017-06-01). Sat Jan 10 04:04:55 EST 2015 ... plan9.iso.bz2 
  3. ^ Crawford, Diane. Forum. Communications of the ACM (Association for Computing Machinery (ACM)). 1999, 42 (8): 11–15. ISSN 0001-0782. doi:10.1145/310930.310939. 
  4. ^ Robertson, James. Plan 9 Forked, Continues as 9front. OSNews. 2011-07-16 [2011-12-31]. (原始内容存档于2018-11-02). 
  5. ^ 9atom. [2011-11-11]. (原始内容存档于2019-09-11). 
  6. ^ Raymond, Eric S. Plan 9: The Way the Future Was. Unix編程藝術. Addison-Wesley. 2003-09-17 [2007-05-07]. ISBN 0-13-142901-9. (原始内容存档于2007-04-16). 
  7. ^ Marcus Weldon, Former Corporate CTO and President. Plan 9 from Bell Labs in Cyberspace!. Nokia Bell Labs. [2023-04-20]. (原始内容存档于2023-06-10). 
  8. ^ Announcement of the first release to general public. [2013-03-07]. (原始内容存档于2008-07-06). 
  9. ^ /usr/web/sources/plan9/sys/src - Plan 9 from Bell Labs. 9p.io. [2022-09-15]. (原始内容存档于2022-12-02). 
  10. ^ 10.0 10.1 貝爾實驗室九號計畫. 朗讯科技. 2006 [April 27, 2006]. (原始内容存档于2006-04-28). 
  11. ^ Staying up to date. 九号项目社群. 2006 [April 27, 2006]. (原始内容存档于2006-04-17). 
  12. ^ From the inventors of UNIX system comes Plan 9 from Bell Labs. Lucent Technologies. 1995 [April 2, 2006]. (原始内容存档于2006年2月9日). 
  13. ^ McIlroy, Doug. 第二版序言(1995). 朗讯科技. 1995 [April 2, 2006]. (原始内容存档于2006-03-14). 
  14. ^ Pike, Rob. UTF-8歷史. 2003 [April 27, 2006]. (原始内容存档于2011-03-01). 
  15. ^ 九號計畫BG展示 (PDF). [2010-04-03]. (原始内容 (PDF)存档于2011-05-14). 
  16. ^ 16.0 16.1 Raymond, Eric S. Plan 9: The Way the Future Was. [March 28, 2006]. (原始内容存档于2005-08-18). 
  17. ^ Dennis Ritchie的訪談中第25條回應. [2006-09-09]. (原始内容存档于2007-09-26). 
  18. ^ Dennis Ritchie的訪談中第23條回應. [2006-09-10]. (原始内容存档于2007-09-26). 
  19. ^ 9grid (九號計畫wiki). 九号项目wiki. 2006 [March 28, 2006]. (原始内容存档于2006-03-14). 
  20. ^ "Press Release: Vita Nuova Supplies Inferno Grid to Evotec OAI (PDF). Vita Nuova Holdings Limted. 2004 [March 28, 2006]. (原始内容存档 (PDF)于2021-03-08). 
  21. ^ "Press Release: Rutgers University Libraries Install Inferno Data Grid" (PDF). Vita Nuova Holdings Limited. 2004 [March 28, 2006]. (原始内容存档 (PDF)于2021-03-08). 
  22. ^ "Press Release: The University of York Department of Biology install Vita Nuova's Inferno Data Grid" (PDF). Vita Nuova Holdings Limited. 2004 [March 28, 2006]. (原始内容存档 (PDF)于2021-03-07). 
  23. ^ Plan 9 from Bell Labs. [2021-03-25]. (原始内容存档于2021-03-24). 

外部链接 编辑

贝尔实验室 编辑

文件 编辑

其他原生及虚拟机 编辑

原生 编辑

虚拟 编辑

其他资源 编辑