贝尔实验室九号项目
贝尔实验室九号项目(英语:Plan 9 from Bell Labs,常简称为Plan 9)是一个分布式操作系统,由贝尔实验室的计算科学研究中心在1980年代中期至2002年开发,以作为UNIX的后继者。它现在仍然被操作系统的研究者和爱好者开发使用。[4][5]
开发者 | 贝尔实验室 (现已交由Plan 9 Foundation接手) |
---|---|
编程语言 | 派生自ISO/ANSI C |
操作系统家族 | 类Unix系统 |
运作状态 | 支持中 |
原始码模式 | 自由及开源软件 |
首次发布 | 1992年(仅供学院) 1995年(一般大众) |
当前版本 | Fourth Edition (2015年1月10日[2] | )
支持平台 | x86、MIPS、DEC Alpha、SPARC、PowerPC、ARM |
内核类别 | 宏内核[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]。开发中的原始码文件可以透过9P及HTTP协议加以存取并用于既有安装文件的更新[11]。除了光碟映像档中操作系统所包含的官方包以外,贝尔实验室也架设了一个空间供外部开发的应用程式与工具存放。
概观
贝尔实验室九号项目主要是由贝尔实验室计算科学研究中心(Computing Sciences Research Center)的成员所开发,该团体也曾开发UNIX及C语言[12]。九号项目团队原先由罗勃·派克、肯·汤普逊、Dave Presotto及Phil Winterbottom所带领,及计算科学研究中心主管丹尼斯·里奇所支持。在多年的开发过程中,有许多开发人员对这项项目做出了不小的贡献,如布莱恩·柯林汉、Tom Duff、道格拉斯·麦克罗伊、比雅尼·斯特劳斯特鲁普、Bruce Ellis、Steve Simon等人[13]。
九号项目是针对现代分布式环境而从开始就设计成一种网络操作系统并加以开发。不同于UNIX是在设计后才增加图形用户界面的功能,九号计划打一开始就内建了。虽然仍未成为大受欢迎的UNIX派生系统,但仍有持续成长的开发者社群。
九号项目具备了分布式架构,它可以被安装并使用于单一自含系统上,也有能力把操作系统的功能包散布于分散的硬件平台上。在标准的九号项目安装系统中,用户会以一个轻量化的终端执行Rio 图形用户界面透过网络连接到CPU伺服器来处理计算密集型(computation-intensive)的程序,并借由额外的文件伺服器及归档存储系统提供长期的资料存储。现有的台式电脑亦可以在内部使用多个虚拟机重现此种架构。
设计概念
九号项目的设计者对与微核心类似的目标感兴趣,但是以不同的架构与设计细节来达成这些目标。九号项目的设计目标如下:
- 以文件系统为基础的装置:把所有的资源都列在层次结构式文件系统中,以节点(Node)表示。
- 命名空间:从应用程式的观点来看,网络是种单一且清楚的命名空间,能展现层次结构式文件系统,也能代表近端或远程实体分离的资源。每个程序的命名空间皆能独立建置,用户也能同时使用采用各式命名空间的应用程式。
- 标准通讯协议:采用名为9P的标准协议,用来存取近端或远程的所有资源。
一体化的输入/输出模型
在UNIX之前,多数的操作系统都各自有不同的机制来存取不同类型的装置。举例来说,存取磁碟的API与自串口发送或接收的API、又或是操作打印机所使用的API,彼此之间都有所不同。
UNIX借由透过磁碟索引节点(disk inodes)执行所有输入/输出操作来尝试移除这些差异。每个装置都被要求必须要支持带有意义的读取和写入操作用以作为控制的手段。这也允许用户无须了解底层的实现细节,便能利用如cp及dd等指令从任一装置提交资料给其他的装置。然而在此同时,许多关键的概念(如控制行程的状态)并没有一致地对应到文件系统上。如同柏克莱接口与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/IP的API,并可借由使用脚本语言或命令行接口的工具来撰写可以控制文件对连线进行写入或读取的程序。底下的子目录如/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
合并目录来一个不受信任的应用程式设置限制,就可以限制该程序存取网络的能力。
这让程序员很容易就可以在采用文件系统的标准命名格式、存取控制、安全机制的情况下,从不同的系统上使用不同的语言合并“物件”或文件系统,大大增加了使用上的透明度。
这也跟BSD的mount_portal
[1] 的指令所提供的功能类似,只是挂载的目录不是/net
而是/p
,提供的网络协议也只有/tcp
而已。
网络与分布式运算
九号项目虽然是基于UNIX,但是设计上则是想达成运算系统核心功能间彼此沟通的观念。所有系统资源都被当成文件般地命名及存取,并提供可根据在特定机器上各个程序设置的多种分布式系统视图(view)。这种让伺服器以类似传统文件的方式,把任何资讯都呈现给用户及应用程式的实现方式,增进了应用程式设计上的一般化与模块化的能力。
九号项目支持网络通透性的关键在于采用一种新的底层网络协议9P。9P协议实现了链接到命名网络物件并以类文件(file-like)系统呈现的方式。借由快速的位元导向(而非区块导向),分布式文件系统可以把任何物件可视化的呈现,而非透过远程机器上的一个NFS伺服器再加以呈现。这个协议可以用来跟行程、程序、资料、以及包含用户界面及网络以及彼此之间进行通讯。在第四版中,这个协议作了一些修改并且更名为9P2000。
Unicode
九号项目的系统采用Unicode作为编码机制。九号项目中运用由Ken Thompson提出重大修改的UTF-8作为整个系统中的原生编码,并在1992年将整个系统提供作一般使用[14]。不过九号项目仅支持Unicode中基本多文种平面中有定义的部分。
实现
除了x86架构下有可安装的实行环境之外、九号项目也移植到MIPS、DEC Alpha、SPARC、PowerPC、ARM及其他硬件平台上。系统以派生自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]
引用
九号项目标准程序库
- rc - 九号项目所采用的shell
- Sam (文本编辑器) - 文本编辑器
- acme - 提供给程序员用的用户界面
- plumber - 进程间通信
- mk - 建立软件用的工具,跟UNIX的make程序类似
- acid - 调试器
- rio - 新的九号项目视窗系统
- 8½ - 旧的九号项目视窗系统
- Fossil及Venti - 新的归档系统及长期资料存储
实现接口
- 9P(或Styx) - 文件系统的协议
- rendezvous - 基础的同步机制
- Brazil - 变成九号项目第四版的项目
影响
参见
参考文献
- ^ Plan 9 Foundation. Glenda, the Plan 9 Bunny. 2006 [2023-04-20]. (原始内容存档于2023-05-30).
- ^ plan9checksums. Bell Labs. [2019-07-25]. (原始内容存档于2017-06-01).
Sat Jan 10 04:04:55 EST 2015 ... plan9.iso.bz2
- ^ 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.
- ^ Robertson, James. Plan 9 Forked, Continues as 9front. OSNews. 2011-07-16 [2011-12-31]. (原始内容存档于2018-11-02).
- ^ 9atom. [2011-11-11]. (原始内容存档于2019-09-11).
- ^ 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).
- ^ Marcus Weldon, Former Corporate CTO and President. Plan 9 from Bell Labs in Cyberspace!. Nokia Bell Labs. [2023-04-20]. (原始内容存档于2023-06-10).
- ^ Announcement of the first release to general public. [2013-03-07]. (原始内容存档于2008-07-06).
- ^ /usr/web/sources/plan9/sys/src - Plan 9 from Bell Labs. 9p.io. [2022-09-15]. (原始内容存档于2022-12-02).
- ^ 10.0 10.1 貝爾實驗室九號計畫. 朗讯科技. 2006 [April 27, 2006]. (原始内容存档于2006-04-28).
- ^ Staying up to date. 九号项目社群. 2006 [April 27, 2006]. (原始内容存档于2006-04-17).
- ^ From the inventors of UNIX system comes Plan 9 from Bell Labs. Lucent Technologies. 1995 [April 2, 2006]. (原始内容存档于2006年2月9日).
- ^ McIlroy, Doug. 第二版序言(1995). 朗讯科技. 1995 [April 2, 2006]. (原始内容存档于2006-03-14).
- ^ Pike, Rob. UTF-8歷史. 2003 [April 27, 2006]. (原始内容存档于2011-03-01).
- ^ 九號計畫BG展示 (PDF). [2010-04-03]. (原始内容 (PDF)存档于2011-05-14).
- ^ 16.0 16.1 Raymond, Eric S. Plan 9: The Way the Future Was. [March 28, 2006]. (原始内容存档于2005-08-18).
- ^ Dennis Ritchie的訪談中第25條回應. [2006-09-09]. (原始内容存档于2007-09-26).
- ^ Dennis Ritchie的訪談中第23條回應. [2006-09-10]. (原始内容存档于2007-09-26).
- ^ 9grid (九號計畫wiki). 九号项目wiki. 2006 [March 28, 2006]. (原始内容存档于2006-03-14).
- ^ "Press Release: Vita Nuova Supplies Inferno Grid to Evotec OAI (PDF). Vita Nuova Holdings Limted. 2004 [March 28, 2006]. (原始内容存档 (PDF)于2021-03-08).
- ^ "Press Release: Rutgers University Libraries Install Inferno Data Grid" (PDF). Vita Nuova Holdings Limited. 2004 [March 28, 2006]. (原始内容存档 (PDF)于2021-03-08).
- ^ "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).
- ^ Plan 9 from Bell Labs. [2021-03-25]. (原始内容存档于2021-03-24).
外部链接
贝尔实验室
文件
其他原生及虚拟机
原生
虚拟
其他资源
- 9fans Archive.is的存档,存档日期2013-02-21,
http://9fans.net
网站上的九号项目邮件列表 - Ninetimes (页面存档备份,存于互联网档案馆),九号项目、Inferno、Unix,以及贝尔实验室操作系统的新闻页面
- #plan9,freenode架设的九号项目IRC频道
- Reinventing UNIX: An introduction to the Plan 9 operating system, by Hancock, B., Giarlo, M.J., & Triggs, J. A., published in Library Hi Tech, 21(4), 471-476.