Menu Close

Linux为什么能够成功,其开发模式和运作机制是什么?Linux 历史

自由软件的出现,改变了传统的以公司为主体的封闭的软件开发模式。采用了开放和协作的开发模式,无偿提供源代码,允许任何人取得、修改和重新发布自由软件的 源代码。这种开发模式激发了世界各地的软件开发人员的积极性和创造热情。大量软件开发人员投入到自由软件的开发中。软件开发人员的集体智慧得到充分发挥, 大大减少了不必要的重复劳动,并使自由软件的脆弱点能够及时发现和克服。任何一家公司都不可能投入如此强大的人力去开发和检验商品化软件。这种开发模式使 自由软件具有强大的生命力。

商业Unix开 发过程中,整个系统的开发要有严格的质量保证措施、完整的文挡、完善的源代码、全面的测试报告及相应的解决方案。开发者不能随意增加程序的特性和修改代码 的关键部分,如果要修改代码,他们得将其写入错误报告中才能使其有效,并随后接收源代码控制系统的检查,如果发现修改不合适,修改也可能作废。每个开发者 设计系统代码的一个或几个部分,开发者只有在程序检查过程中才能更改相应的代码。质量保证部门在内部对新的操作系统进行严格的回归测试,并报告发现的问 题,开发者则有责任解决所报告的问题。质量保证部门采用复杂的统计分析系统以确保在下次发行时有百分之几的程序错误已修改。

总之,商业Unix开发过程使得其代码非常复杂,因此,公司为了保证下次操作系统的修订质量,因此得收集和统计分析操作系统的性能。开发商业Uinx是一个很大的工程,常常大到有数以百计的编程者、测试员、文挡员以及系统管理员参与。

对于Linux,你可将整个组织开发的概念、源代码控制系统、结构化的错误报告、统计分析等通通扔到一边去。

Linux最初是由一群来自世界各地的自愿者通过Internet共同进行开发的。通过互连网和其它途径,任何人都有机会辅助开发和调试Linux的内核、链接新的软件、编写文挡或帮助新用户。实际上,并没有单独的组织负责开发此系统,Linux团体大部分通过邮递清单和USENET的消息组通信。许多协定已跳过开发过程,如果你想将自己的代码包括进“正式”内核,只需给Linus Torvalds发一个邮件,他就会进行测试并将其包括进内核(只要代码不使内核崩溃并且不与整个系统设计相悖,Linus都很乐意将其包括进去)

Linux系统本身采用彻底开放、注重特性的方法进行设计。一般规律是大约隔几个月就发行一个Linux内核的新版本。当然发行周期还依赖于其它一些因素,如排除的程序故障数、用户测试预发行版的返回数以及Linux的工作量等。

可以说在两次发行间,并不是每个故障都已排除,每个问题都已得到了解决。只要系统不出现很挑剔或明显的故障,就认为比较稳定,可以推出新版本。Linux开发的动力不在于追求完美、无故障,而是要开发Unix的免费实现。

如果你想把新的特性或应用软件增加到系统上,你就得经过一个“初始”阶段。所谓“初始”阶段,就是一个由一些想对新代码挑出问题的用户不断进行测试的阶段。由于Linux团体大多在Internet上,“初始”软件通常安装在一个或多个LinuxFTP上,并且在LinuxUSENET消息组上张贴一张如何获取和测试其代码的消息,从而使得下载和测试“初始”软件的用户可以将结果、故障或问题等邮件告之作者。

初始代码中的问题解决后,代码就进入“第二”阶段:工作稳定但还不完全(即能够工作,但可能还不具备所有特性)。当然,它也可能进入“最后”阶段,即软件已完备并且可以使用。对于内核代码,一旦它完备,开发者就可让Linus将其包括进标准内核内,或者作为内核的可增加选项。

注意,这些仅只达成协定,并未形成规则。很多人对他们的软件不必发行“初始”或测试版充满信心,因此发行哪个版本是根据开发者的决定而定的。

你可能对一群自愿者居然能编写、调试出完整的Unix系统惊讶不已。整个Linux内核通过拼凑而成,没有采用专利的源代码,大量工作都由自愿者完成,他们将GNU下的免费软件移植到Linux系统下,同时开发出库、文件系统以及通用的设备硬件驱动程序等。

实际上,Linus率领的分布在世界各地的Linux内核开发队伍仍然在高速向前推进。当前推出的稳定的Linux内核的2.4.x版本充分显示了Linux开发队伍的非凡的创造能力以及协作开发模式的价值。

 

从Unix到Linux的历史

早在Linux出现之前的二十年(大约在1970 年代),就有一个相当稳定而成熟的操作系统存在了! 那就是Linux的老大哥“Unix”是也!怎么这么说呢?他们这两个家伙有什么关系呀?这里就给他说一说啰!

众所皆知的,Linux的核心是由Linus Torvalds在1991年的时候给他开发出来的, 并且丢到网络上提供大家下载,后来大家觉得这个小东西(Linux Kernel)相当的小而精巧, 所以慢慢的就有相当多的朋友投入这个小东西的研究领域里面去了! 但是为什么这个小东西这么棒呢?又为什么大家都可以免费的下载这个东西呢? 嗯!等鸟哥慢慢的唬xx….喔不!听我慢慢的道来!

  • 1969年以前:一个伟大的梦想–Bell,MIT与GE的“Multics”系统

早期的计算机并不像现在的个人计算机一样普遍,他可不是一般人碰的起的呢~ 除非是军事或者是高科技用途,或者是学术单位的前瞻性研究,否则真的很难接触到。 非但如此,早期的计算机架构还很难使用,除了运算速度并不快之外,操作接口也很困扰的! 因为那个时候的输入设备只有读卡机、输出设备只有打印机, 使用者也无法与操作系统互动(批次型操作系统)。

在那个时候,写程序是件很可怜的事情,因为程序设计者,必须要将程序相关的信息在读卡纸上面打洞, 然后再将读卡纸插入读卡机来将信息读入主机中运算。光是这样就很麻烦了,如果程序有个小地方写错, 哈哈!光是重新打卡就很惨,加上主机少,使用者众多,光是等待,就耗去很多的时间了!

在那之后,由于硬件与操作系统的改良,使得后来可以使用键盘来进行信息的输入。 不过,在一间学校里面,主机毕竟可能只有一部,如果多人等待使用,那怎么办?大家还是得要等待啊! 好在1960年代初期麻省理工学院(MIT)发展了所谓的: “相容分时系统(Compatible Time-Sharing System, CTSS)”, 它可以让大型主机通过提供数个终端机(terminal)以连线进入主机,来利用主机的资源进行运算工作。 架构有点像这样:

早期主机与终端机的相关性图示早期主机与终端机的相关性图示

Tips 这个相容分时系统可以说是近代操作系统的始祖呢!他可以让多个使用者在某一段时间内分别使用CPU的资源, 感觉上你会觉得大家是同时使用该主机的资源!事实上,是CPU在每个使用者的工作之间进行切换, 在当时,这可是个划时代的技术喔!

如此一来,无论主机在哪里,只要在终端机前面进行输入输出的作业,就可利用主机提供的功能了。 不过,需要注意的是,此时终端机只具有输入/输出的功能,本身完全不具任何运算或者软件安装的能力。 而且,比较先进的主机大概也只能提供30个不到的终端机而已。

为了更加强化大型主机的功能,以让主机的资源可以提供更多使用者来利用,所以在1965年前后, 由贝尔实验室(Bell)、麻省理工学院(MIT)及奇异公司(GE, 或称为通用电器)共同发起了Multics的计划 [1], Multics计划的目的是想要让大型主机可以达成提供300个以上的终端机连线使用的目标。 不过,到了1969年前后,计划进度落后,资金也短缺,所以该计划虽然继续在研究,但贝尔实验室还是退出了该计划的研究工作。 (Multics有复杂、多数的意思存在。)

Tips 最终Multics还是有成功的发展出他们的系统,完整的历史说明可以参考: http://www.multicians.org/网站内容。 Multics计划虽然后来没有受到很大的重视,但是他培养出来的人材是相当优秀的! ^_^

  • 1969年:Ken Thompson的小型file server system

在认为Multics计划不可能成功之后,贝尔研究室就退出该计划。不过,原本参与Multics计划的人员中,已经从该计划当中获得一些点子, Ken Thompson [2] 就是其中一位!

Thompson因为自己的需要,希望开发一个小小的操作系统以提供自己的需求。 在开发时,有一部DEC (Digital Equipment Corporation)公司推出的PDP-7刚好没人使用, 于是他就准备针对这部主机进行操作系统核心程序的撰写。本来Thompson应该是没时间的(有家有小孩的宿命?), 无巧不巧的是,在1969年八月份左右,刚好Thompson的妻儿去了美西探亲, 于是他有了额外的一个月的时间好好的待在家将一些构想实现出来!

经过四个星期的奋斗,他终于以组合语言(Assembler)写出了一组核心程序,同时包括一些核心工具程序, 以及一个小小的文件系统。那个系统就是Unix的原型! 当时Thompson将Multics庞大的复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为:Unics。(当时尚未有Unix的名称)

Thompson 的这个文件系统有两个重要的概念,分别是:

  • 所有的程序或系统设备都是文件
  • 不管建构编辑器还是附属文件,所写的程序只有一个目的,且要有效的完成目标。

这些概念在后来对于Linux的发展有相当重要的影响喔!

Tips 套一句常听到的广告词:“科技始终来自于人性”,当初Thompson会写这套Unix核心程序, 却是想要移植一套名为“太空旅游”的游戏呢! ^_^

  • 1973年:Unix的正式诞生,Ritchie等人以C语言写出第一个正式Unix核心

由于Thompson写的那个操作系统实在太好用了,所以在贝尔实验室内部广为流传,并且数度经过改版。 但是因为Unics本来是以组合语言写成的,而如第零章计算机概论谈到的, 组合语言具有专一性,加上当时的计算机机器架构都不太相同,所以每次要安装到不同的机器都得要重新编写组合语言,真不方便!

后来Thompson与Ritchie合作想将Unics改以高阶程序语言来撰写。当时现成的高阶程序语言有B语言。 但是由B语言所编译出来的核心性能不是很好。后来Dennis Ritchie [3] 将B语言重新改写成C语言,再以C语言重新改写与编译Unics的核心, 最后正名与发行出Unix的正式版本!

Tips 这群高级骇客实在很厉害!因为自己的需求来开发出这么多好用的工具! C程序语言开发成功后,甚至一直沿用至今呢!你说厉不厉害啊!这个故事也告诉我们,不要小看自己的潜能喔! 你想作的,但是现实生活中没有的,就动手自己搞一个来玩玩吧!

由于贝尔实验室是隶属于美国电信大厂AT&T公司的, 只是AT&T当时忙于其他商业活动,对于Unix并不支持也不排斥。此外,Unix在这个时期的发展者都是贝尔实验室的工程师, 这些工程师对于程序当然相当有研究,所以,Unix在此时当然是不容易被一般人所接受的!不过对于学术界的学者来说, 这个 Unix 真是学者们进行研究的福音!因为程序码可改写并且可作为学术研究之用嘛!

需要特别强调的是,由于Unix是以较高阶的C语言写的,相对于组合语言需要与硬件有密切的配合, 高阶的C语言与硬件的相关性就没有这么大了!所以,这个改变也使得Unix很容易被移植到不同的机器上面喔!

  • 1977年:重要的Unix分支–BSD的诞生

虽然贝尔属于AT&T,但是AT&T此时对于Unix是采取较开放的态度,此外,Unix是以高阶的C语言写成的, 理论上是具有可移植性的!亦即只要取得Unix的源代码,并且针对大型主机的特性加以修订原有的源代码(Source Code), 就可能将Unix移植到另一部不同的主机上头了。所以在1973年以后,Unix便得以与学术界合作开发! 最重要的接触就是与加州柏克莱(Berkeley)大学的合作了。

柏克莱大学的Bill Joy [4]在取得了Unix的核心源代码后,着手修改成适合自己机器的版本, 并且同时增加了很多工具软件与编译程序,最终将它命名为Berkeley Software Distribution (BSD)。这个BSD是Unix很重要的一个分支,Bill Joy也是Unix业者“Sun(升阳)”这家公司的创办者! Sun公司即是以BSD发展的核心进行自己的商业Unix版本的发展的。 (后来可以安装在x86硬件架构上面FreeBSD即是BSD改版而来!)

  • 1979年:重要的 System V 架构与版权宣告

由于Unix的高度可移植性与强大的性能,加上当时并没有版权的纠纷, 所以让很多商业公司开始了Unix操作系统的发展,例如AT&T自家的System V、IBMAIX以及HP与DEC等公司, 都有推出自家的主机搭配自己的Unix操作系统。

但是,如同我们前面提到的,操作系统的核心(Kernel)必须要跟硬件配合, 以提供及控制硬件的资源进行良好的工作!而在早期每一家生产计算机硬件的公司还没有所谓的“协定”的概念, 所以每一个计算机公司出产的硬件自然就不相同啰!因此他们必须要为自己的计算机硬件开发合适的Unix系统。 例如在学术机构相当有名的Sun、Cray与HP就是这一种情况。 他们开发出来的Unix操作系统以及内含的相关软件并没有办法在其他的硬件架构下工作的! 另外,由于没有厂商针对个人计算机设计Unix系统,因此,在早期并没有支持个人计算机的Unix操作系统的出现。

Tips 如同相容分时系统的功能一般,Unix强调的是多用户多任务的环境! 但早期的286个人计算机架构下的CPU是没有能力达到多任务的作业,因此,并没有人对移植Unix到x86的计算机上有兴趣。

每一家公司自己出的Unix虽然在架构上面大同小异,但是却真的仅能支持自身的硬件, 所以啰,早先的Unix只能与服务器(Server)或者是大型工作站(Workstation)划上等号! 但到了 1979 年时,AT&T推出 System V 第七版 Unix 后,这个情况就有点改善了。 这一版最重要的特色是可以支持x86架构的个人计算机系统,也就是说 System V 可以在个人计算机上面安装与运行了。

不过因为AT&T由于商业的考虑,以及在当时现实环境下的思考,于是想将Unix的版权收回去。因此, AT&T在1979年发行的第七版Unix中,特别提到了 “不可对学生提供源代码”的严格限制! 同时,也造成Unix业界之间的紧张气氛,并且也引爆了很多的商业纠纷~

Tips 目前被称为纯种的Unix指的就是System V以及BSD这两套啰!

  • 1984年之一:x86架构的Minix操作系统开始撰写并于两年后诞生

关于1979年的版权声明中,影响最大的当然就是学校教Unix核心源代码相关学问的教授了! 想一想,如果没有核心源代码,那么如何教导学生认识Unix呢?这问题对于 Andrew Tanenbaum (谭宁邦, [5])教授来说,实在是很伤脑筋的!不过,学校的课程还是得继续啊!那怎么办?

既然1979年的Unix第七版可以在Intel的x86架构上面进行移植, 那么是否意味着可以将Unix改写并移植到x86上面了呢?在这个想法上, 谭宁邦教授于是乎自己动手写了Minix这个Unix Like的核心程序! 在撰写的过程中,为了避免版权纠纷,谭宁邦完全不看Unix核心源代码! 并且强调他的Minix必须能够与Unix相容才行!谭宁邦在1984年开始撰写核心程序, 到了1986年终于完成,并于次年出版Minix相关书籍,同时与新闻群组(BBS及News)相结合~

Tips 之所以称为Minix的原因,是因为他是个Mini (微小的) 的Unix系统啰!^_^

这个Minix版本比较有趣的地方是,他并不是完全免费的,无法在网络上提供下载! 必须要通过磁片/磁带购买才行!虽然真的很便宜~不过,毕竟因为没有在网络上流传, 所以Minix的传递速度并没有很快速!此外,购买时,随磁片还会附上Minix的源代码! 这意味着使用者可以学习Minix的核心程序设计概念喔! (这个特色对于Linux的启始开发阶段,可是有很大的关系喔!)

此外,Minix操作系统的开发者仅有谭宁邦教授,因为学者很忙啊 (鸟哥当了老师之后,才发现,真的忙…)!加上谭宁邦始终认为Minix主要用在教育用途上面, 所以对于Minix是点到为止!没错,Minix是很受欢迎,不过,使用者的要求/需求的声音可能就比较没有办法上升到比较高的地方了! 这样说,你明白吧?^_^

  • 1984年之二:GNU计划与FSF基金会的成立

Richard Mathew Stallman(史托曼)在1984年发起的GNU计划,对于现今的自由软件风潮, 真有不可磨灭的地位!目前我们所使用的很多自由软件或开源软件,几乎均直接或间接受益于GNU这个计划呢! 那么史托曼是何许人也?为何他会发起这个GNU计划呢?

  • 一个分享的环境:

Richard Mathew Stallman(生于1953年, 网络上自称的ID为RMS, [6])从小就很聪明!他在1971年的时候,进入骇客圈中相当出名的人工智能实验室(AI Lab.), 这个时候的骇客专指计算机功力很强的人,而非破坏计算机的怪客(cracker)喔!

当时的骇客圈对于软件的着眼点几乎都是在“分享”,骇客们都认为互相学习对方的程序码,这样才是产生更优秀的程序码的最佳方式! 所以 AI 实验室的骇客们通常会将自己的程序码公布出来跟大家讨论喔!这个特色对于史托曼的影响很大!

不过,后来由于管理阶层以及骇客群们自己的生涯规划等问题,导致实验室的优秀骇客离开该实验室, 并且进入其他商业公司继续发展优秀的软件。但史托曼并不服输,仍然持续在原来的实验室开发新的程序与软件。 后来,他发现到,自己一个人并无法完成所有的工作,于是想要成立一个开放的团体来共同努力!

  • 使用Unix开发阶段:

1983年以后,因为实验室硬件的更换,使得史托曼无法继续以原有的硬件与操作系统继续自由程序的撰写~ 而且他进一步发现到,过去他所使用的Lisp操作系统,是麻省理工学院的专利软件, 是无法共享的,这对于想要成立一个开放团体的史托曼是个阻碍。于是他便放弃了Lisp这个系统。 后来,他接触到Unix这个系统,并且发现,Unix在理论与实际上,都可以在不同的机器间进行移植。虽然 Unix 依旧是专利软件, 但至少 Unix 架构上还是比较开放的!于是他开始转而使用Unix系统。

因为Lisp与Unix是不同的系统,所以,他原本已经撰写完毕的软件是无法在Unix上面运行的!为此, 他就开始将软件移植到Unix上面。并且,为了让软件可以在不同的平台上运行, 因此,史托曼将他发展的软件均撰写成可以移植的型态!也就是他都会将程序的源代码公布出来!

  • GNU计划的推展[7]

1984年,史托曼开始GNU计划, 这个计划的目的是:创建一个自由、开放的Unix操作系统(Free Unix)。 但是创建一个操作系统谈何容易啊!而且在当时的GNU是仅有自己一个人单打独斗的史托曼~ 这实在太麻烦,但又不想放弃这个计划,那可怎么办啊?

聪明的史托曼干脆反其道而行~“既然操作系统太复杂,我就先写可以在Unix上面运行的小程序,这总可以了吧?”在这个想法上, 史托曼开始参考Unix上面现有的软件,并依据这些软件的作用开发出功能相同的软件,且开发期间史托曼绝不看其他软件的源代码, 以避免吃上官司。后来一堆人知道免费的GNU软件,并且实际使用后发现与原有的专利软件也差不了太多,于是便转而使用GNU软件, 于是GNU计划逐渐打开知名度。

虽然GNU计划渐渐打开知名度,但是能见度还是不够。这时史托曼又想:不论是什么软件, 都得要进行编译成为二进制文件(binary program)后才能够执行,如果能够写出一个不错的编译器,那不就是大家都需要的软件了吗? 因此他便开始撰写C语言的编译器,那就是现在相当有名的GNU C Compiler(gcc)! 这个点相当的重要!这是因为C语言编译器版本众多,但都是专利软件, 如果他写的C编译器够棒,性能够佳,那么将会大大的让GNU计划出现在众人眼前!如果忘记啥是编译器, 请回到第零章去瞧瞧编译程序吧!

但开始撰写GCC时并不顺利,为此,他先转而将他原先就已经写过的Emacs编辑器写成可以在Unix上面跑的软件,并公布源代码。 Emacs是一种程序编辑器,他可以在使用者撰写程序的过程中就进行程序语法的检验,此一功能可以减少程序设计师除错的时间! 因为Emacs太优秀了,因此,很多人便直接向他购买。

此时网际网络尚未流行,所以,史托曼便借着Emacs以磁带(tape)出售,赚了一点钱 ,进而开始全力撰写其他软件。并且成立自由软件基金会(FSF, Free Software Foundation),请更多工程师与志工撰写软件。终于还是完成了GCC,这比Emacs还更有帮助! 此外,他还撰写了更多可以被调用的C函数库(GNU C library),以及可以被使用来操作操作系统的基本接口BASH shell! 这些都在1990年左右完成了!

Tips 如果纯粹使用文字编辑器来编辑程序的话,那么程序语法如果写错时,只能利用编译时发生的错误讯息来修订了,这样实在很没有效率。 Emacs则是一个很棒的编辑器!注意!是编辑(editor)而非编译(compiler)! 他可以很快的立刻显示出你写入的语法可能有错误的地方,这对于程序设计师来说, 实在是一个好到不能再好的工具了!所以才会这么的受到欢迎啊!

  • GNU的通用公共许可证:

到了1985年,为了避免GNU所开发的自由软件被其他人所利用而成为专利软件, 所以他与律师草拟了有名的通用公共许可证(General Public License, GPL), 并且称呼他为copyleft(相对于专利软件的copyright!)。 关于GPL的相关内容我们在下一个小节继续谈论,在这里,必须要说明的是, 由于有GNU所开发的几个重要软件,如:

  • Emacs
  • GNU C (GCC)
  • GNU C Library (glibc)
  • Bash shell

造成后来很多的软件开发者可以借由这些基础的工具来进行程序开发! 进一步壮大了自由软件团体!这是很重要的!不过,对于GNU的最初构想 “创建一个自由的Unix操作系统”来说,有这些优秀的程序是仍无法满足, 因为,当下并没有“自由的Unix核心”存在…所以这些软件仍只能在那些有专利的 Unix平台上工作~~一直到Linux的出现…更多的FSF开发的软件可以参考如下网页:

Tips 事实上,GNU 自己开发的核心称为 hurd, 是一个架构相当先进的核心。不过由于开发者在开发的过程中对于系统的要求太过于严谨,因此推出的时程一再延后,所以才有后来 Linux 的开发!

  • 1988年:图形接口XFree86计划

有鉴于图形使用者接口(Graphical User Interface, GUI) 的需求日益加重,在1984年由MIT与其他协力厂商首次发表了X Window System ,并且更在1988年成立了非营利性质的XFree86这个组织。所谓的XFree86其实是 X Window System + Free + x86的整合名称呢! 而这个XFree86的GUI接口更在Linux的核心1.0版于1994年释出时,整合于Linux操作系统当中!

Tips 为什么称图形使用者接口为X呢?因为由英文单字来看,Window的W接的就是X啦!意指Window的下一版就是了! 需注意的是,X Window并不是X Windows喔!

  • 1991年:芬兰大学生Linus Torvalds的一则简讯

到了1991年,芬兰的赫尔辛基大学的Linus Torvalds在BBS上面贴了一则消息, 宣称他以bash, gcc等 GNU 的工具写了一个小小的核心程序,该核心程序单纯是个玩具,不像 GNU 那么专业。 不过该核心程序可以在Intel的386机器上面运行就是了。这让很多人很感兴趣!从此开始了Linux不平凡的路程!

关于GNU计划、自由软件与开放源代码

GNU计划对于整个自由软件与开放源代码软件来说是占有非常重要的角色!下面我们就来谈谈这咚咚吧!

  • 自由软件的活动:

1984年创立GNU计划与FSF基金会的Stallman先生认为,写程序最大的快乐就是让自己发展的良好的软件让大家来使用了! 另外,如果使用方撰写程序的能力比自己强,那么当对方修改完自己的程序并且回传修改后的程序码给自己,那自己的程序撰写功力无形中就更往上爬了! 这就是最早之前 AI 实验室的骇客风格!

而既然程序是想要分享给大家使用的,不过,每个人所使用的计算机软硬件并不相同, 既然如此的话,那么该程序的源代码(Source code)就应该要同时释出, 这样才能方便大家修改而适用于每个人的计算机中呢!这个将源代码连同软件程序释出的举动,在 GNU 计划的范畴之内就称为自由软件(Free Software)运动!

此外,史托曼同时认为,如果你将你程序的Source code分享出来时,若该程序是很优秀的,那么将会有很多人使用, 而每个人对于该程序都可以查阅source code,无形之中,就会有一票人帮你除错啰! 你的这支程序将会越来越壮大!越来越优秀呢!

  • 自由软件的版权GNU GPL:

而为了避免自己的开发出来的Open source自由软件被拿去做成专利软件, 于是Stallman同时将GNU与FSF发展出来的软件,都挂上GPL的版权宣告~ 这个FSF的核心观念是“版权制度是促进社会进步的手段, 版权本身不是自然权力。”对于FSF有兴趣或者对于GNU想要更深入的了解时,请参考朝阳科技大学洪朝贵教授的网站 http://people.ofset.org/~ckhung/a/c_83.php,或直接到GNU去: http://www.gnu.org 里面有更为深入的解说!

Tips 为什么要称为GNU呢?其实GNU是GNU’s Not Unix的缩写,意思是说,GNU并不是Unix啊!那么GNU又是什么呢? 就是GNU’s Not Unix嘛!…..如果你写过程序就会知道,这个GNU = GNU’s Not Unix可是无穷循环啊!忙碌~

另外,什么是Open Source呢?所谓的source code是程序发展者写出的原始程序码, Open Source就是,软件在发布时,同时将作者的源代码一起公布的意思!

  • 自由(Free)的真谛:

那么这个GPL(GNU General Public License, GPL)是什么玩意儿? 为什么要将自由软件挂上GPL的“版权宣告”呢?这个版权宣告对于作者有何好处? 首先,Stallman对GPL一直是强调Free的,这个Free的意思是这样的:

“Free software” is a matter of liberty, not price. To understand the concept, you should think of “free speech”, not “free beer”. “Free software” refers to the users’ freedom to run, copy, distribute, study, change, and improve the software

大意是说,Free Software(自由软件)是一种自由的权力,并非是“价格!” 举例来说,你可以拥有自由呼吸的权力、你拥有自由发表言论的权力, 但是,这并不代表你可以到处喝“免费的啤酒!(free beer)”,也就是说, 自由软件的重点并不是指“免费”的,而是指具有“自由度, freedom”的软件, 史托曼进一步说明了自由度的意义是: 使用者可以自由的执行、复制、再发行、学习、修改与强化自由软件。

这无疑是个好消息!因为如此一来,你所拿到的软件可能原先只能在Unix上面跑, 但是经过源代码的修改之后,你将可以拿他在Linux或者是Windows上面来跑!总之, 一个软件挂上了GPL版权宣告之后,他自然就成了自由软件!这个软件就具有下面的特色:

  • 取得软件与源代码:你可以根据自己的需求来执行这个自由软件;
  • 复制:你可以自由的复制该软件;
  • 修改:你可以将取得的源代码进行程序修改工作,使之适合你的工作;
  • 再发行:你可以将你修改过的程序,再度的自由发行,而不会与原先的撰写者冲突;
  • 回馈:你应该将你修改过的程序码回馈于社群!

但请特别留意,你所修改的任何一个自由软件都不应该也不能这样:

  • 修改授权:你不能将一个GPL授权的自由软件,在你修改后而将他取消GPL授权~
  • 单纯贩卖:你不能单纯的贩卖自由软件。

也就是说,既然GPL是站在互助互利的角度上去开发的,你自然不应该将大家的成果占为己有, 对吧!因此你当然不可以将一个GPL软件的授权取消,即使你已经对该软件进行大幅度的修改! 那么自由软件也不能贩卖吗?当然不是!还记得上一个小节里面, 我们提到史托曼借由贩卖Emacs取得一些经费,让自己生活不至于匮乏吧?是的! 自由软件是可以贩售的,不过,不可仅贩售该软件,应同时搭配售后服务与相关手册~ 这些可就需要工本费了呢!

  • 自由软件与商业行为:

很多人还是有疑问,目前不是有很多Linux开发商吗?为何他们可以贩售Linux这个GPL授权的软件? 原因很简单,因为他们大多都是贩售“售后服务!”所以,他们所使用的自由软件, 都可以在他们的网站上面下载!(当然,每个厂商他们自己开发的工具软件就不是GPL的授权软件了!) 但是,你可以购买他们的Linux光盘,如果你购买了光盘,他们会提供相关的手册说明文档, 同时也会提供你数年不等的谘询、售后服务、软件升级与其他协力工作等等的附加价值!

所以说,目前自由软件工作者,他们所赖以维生的,几乎都是在“服务”这个领域呢! 毕竟自由软件并不是每个人都会撰写,有人有需要你的自由软件时,他就会请求你的协助, 此时,你就可以通过服务来收费了!这样来说, 自由软件确实还是具有商业空间的喔!

Tips 很多人对于GPL授权一直很疑惑,对于GPL的商业行为更是无法接受! 关于这一点,鸟哥在这里还是要再次的申明,GPL是可以从事商业行为的! 而很多的作者也是借由这些商业行为来得以取得生活所需,更进一步去发展更优秀的自由软件! 千万不要听到“商业”就排斥!这对于发展优良软件的朋友来说,是不礼貌的!

上面提到的大多是与使用者有关的项目,那么 GPL 对于自由软件的作者有何优点呢?大致的优点有这些:

  • 软件安全性较佳;
  • 软件执行性能较佳;
  • 软件除错时间较短;
  • 贡献的源代码永远都存在。

这是因为既然是提供源代码的自由软件,那么你的程序码将会有很多人帮你查阅, 如此一来,程序的漏洞与程序的优化将会进展的很快!所以,在安全性与性能上面, 自由软件一点都不输给商业软件喔!此外,因为GPL授权当中,修改者并不能修改授权, 因此,你如果曾经贡献过程序码,嘿嘿!你将名留青史呢!不错吧! ^_^

对于程序开发者来说,GPL实在是一个非常好的授权,因为大家可以互相学习对方的程序撰写技巧, 而且自己写的程序也有人可以帮忙除错。那你会问啊,对于我们这些广大的终端用户,GPL有没有什么好处啊?有啊!当然有! 虽然终端用户或许不会自己编译程序码或者是帮人家除错,但是终端用户使用的软件绝大部分就是GPL的软件, 全世界有一大票的工程师在帮你维护你的系统,这难道不是一件非常棒的事吗? ^_^

Tips 就跟人类社会的科技会进步一样,授权也会进步喔!因应源代码分区与重组的问题,与其他开源软件的授权包容性,以及最重要的数码版权管理 (Digital Rights Management, DRM) 等问题,GPL 目前已经出到第三版 GPLv3。但是,目前使用最广泛的,还是 GPLv2 喔!包括 Linux 核心就还是使用 GPLv2 的说!

  • 开放源代码:

由于自由软件使用的英文为 free software,这个 free 在英文是有两种以上不同的意义,除了自由之外,免费也是这个单字! 因为有这些额外的联想,因此许多的商业公司对于投入自由软件方面确实是有些疑虑存在的!许多人对于这个情况总是有些担心~

为了解决这个困扰,1998 年成立的“开放源代码促进会 (Open Source Initiative)”提出了开放源代码 (Open Source,亦可简称开源软件) 这一名词! 另外,并非软件可以被读取源代码就可以被称为开源软件喔!该软件的授权必须要符合下面的基本需求,才可以算是 open source 的软件哩![8]

  • 公布源代码且用户具有修改权:用户可以任意的修改与编译程序码,这点与自由软件差异不大;
  • 任意的再散佈:该程序码全部或部份可以被贩售,且程序码可成为其他软件的元件之一,作者不该宣称具有拥有权或收取其他额外费用。
  • 必须允许修改或衍生的作品,且可让再发布的软件使用相似的授权来发表即可。
  • 承上,用户可使用与原本软件不同的名称或编号来散佈。
  • 不可限制某些个人或团体的使用权
  • 不可限制某些领域的应用:例如不可限制不能用于商业行为或者是学术行为等特殊领域等等
  • 不可限制在某些产品当中,亦即程序码可以应用于多种不同产品中。
  • 不可具有排他条款,例如不可限制本程序码不能用于教育类的研究中,诸如此类。

根据上面的定义,GPL 自由软件也可以算是开源软件的一个,只是对于商业应用的限止稍微多一些而已。 与 GPL 自由软件相比,其他开源软件的授权可能比较轻松喔!比较轻松的部份包括:再发布的授权可以跟原本的软件不同; 另外,开源软件的全部或部份可作为其他软件的一部分,且其他软件无须使用与开源软件相同的授权来发布!这跟GPL自由软件差异就大了! 自由软件的GPL授权规定,任何软件只要用了GPL的全部或部份程序码,那么该软件就得要使用GPL的授权!这对于自由软件的保障相当大! 但对于想要保有商业公司自己的商业机密的专属软件来说,要使用GPL授权还是怕怕的!这也是后来商业公司拥抱其他 open source 开源软件授权的缘故!因为可以用于商业行为啰!更多的差异或许可以参考一下开源促进会的说明。

另外,Open source 这个名词只是一个指引,而实际上并不是先有 open source 才有相关的授权。早在 open source 出来之前就有些开源软件的授权存在了 (例如 GPL 啊!)! 不过有 open source 这个名词之后,大家才更了解到开源软件授权的意义就是了。那常见的开放源代码授权有哪些呢?

  • Apache License 2.0
  • BSD 3-Clause “New” or “Revised” license
  • BSD 2-Clause “Simplified” or “FreeBSD” license
  • GNU General Public License (GPL)
  • GNU Library or “Lesser” General Public License (LGPL)
  • MIT license
  • Mozilla Public License 2.0
  • Common Development and Distribution License

每个授权详细的内容也可以参考 OSI 协会的介绍啦[9]

Tips 如前所述,GPL 也是合乎 Open source 所定义的授权之一,只是它更着重于保护自由软件本身的学习与发展就是了!那如果你想要开发开源软件时, 到底使用哪种授权比较好呢?其实跟你对这个软件的未来走向的定义有关啦!简单的来说,如果你的软件未来你允许它用于商业活动中, 可以考虑 BSD 之类的授权,如果你的软件希望少一些商业色彩,GPLv2 大概是不二选择啰!那如果你的软件允许分支开发, 甚至可以考虑分成两种版本分别授权哩! ^_^

  • 专属软件/专利软件 (close source)

相对于Open Source的软件会释出源代码,Close source的程序则仅推出可执行的二进制程序(binary program)而已。 这种软件的优点是有专人维护,你不需要去更动他;缺点则是灵活度大打折扣,使用者无法变更该程序成为自己想要的样式! 此外,若有木马程序或者安全漏洞,将会花上相当长的一段时间来除错!这也是所谓专利软件(copyright)常见的软件出售方式。

虽然专利软件常常代表就是需要花钱去购买,不过有些专利软件还是可以“免费”提供福斯使用的!免费的专利软件代表的授权模式有:

  • Freeware: http://en.wikipedia.org/wiki/Freeware 不同于Free software,Freeware为“免费软件”而非“自由软件!”虽然它是免费的软件,但是不见得要公布其源代码, 端看释出者的意见啰!这个东西与Open Source毕竟是不太相同的东西喔!此外,目前很多标榜免费软件的程序很多都有小问题! 例如假藉免费软件的名义,实施使用者数据窃取的目的! 所以“来路不明的软件请勿安装!”
  • Shareware: http://en.wikipedia.org/wiki/Shareware 共享软件这个名词就有趣了!与免费软件有点类似的是,Shareware在使用初期,它也是免费的,但是, 到了所谓的“试用期限”之后,你就必须要选择“付费后继续使用”或者“将它移除”的宿命~ 通常,这些共享软件都会自行撰写失效程序,让你在试用期限之后就无法使用该软件。

Torvalds的Linux发展史

与Minix之间的关系

Linus Torvalds(托瓦兹, 1969年出生, [10])的外祖父是赫尔辛基大学的统计学家, 他的外祖父为了让自己的小孙子能够学点东西,所以从小就将托瓦兹带到身边来管理一些微计算机。 在这个时期,托瓦兹接触了组合语言(Assembly Language),那是一种直接与芯片对谈的程序语言,也就是所谓的低阶语言。 必须要很了解硬件的架构,否则很难以组合语言撰写程序的。

在1988年间,托瓦兹顺利的进入了赫尔辛基大学,并选读了计算机科学系。在就学期间,因为学业的需要与自己的兴趣, 托瓦兹接触到了Unix这个操作系统。当时整个赫尔辛基只有一部最新的Unix系统,同时仅提供16个终端机(terminal)。 还记得我们上一节刚刚提过的,早期的计算机仅有主机具有运算功能,terminal仅负责提供Input/Output而已。在这种情况下, 实在很难满足托瓦兹的需求,因为…..光是等待使用Unix的时间,就很耗时~为此,他不禁想到: “我何不自己搞一部Unix来玩?”不过,就如同Stallman当初的GNU计划一样,要写核心程序,谈何容易~

不过,幸运之神并未背离托瓦兹,因为不久之后,他就知道有一个类似Unix的系统, 并且与Unix完全相容,还可以在Intel 386机器上面跑的操作系统, 那就是我们上一节提过的,谭宁邦教授为了教育需要而撰写的Minix系统! 他在购买了最新的Intel 386的个人计算机后,就立即安装了Minix这个操作系统。 另外,上个小节当中也谈到,Minix这个操作系统是有附上源代码的, 所以托瓦兹也经由这个源代码学习到了很多的核心程序设计的设计概念喔!

对386硬件的多任务测试

事实上,托瓦兹对于个人计算机的CPU其实并不满意,因为他之前碰的计算机都是工作站型的计算机, 这类计算机的CPU特色就是可以进行“多任务处理”的能力。什么是多任务呢?理论上, 一个CPU在一个时间内仅能进行一个程序, 那如果有两个以上的程序同时出现到系统中呢?举例来说, 你可以在现今的计算机中同时打开两个以上的办公软件,例如电子试算表与文书处理软件。 这个同时打开的动作代表着这两个程序同时要交给CPU来处理~

啊!CPU一个时间点内仅能处理一个程序,那怎么办?没关系,这个时候如果具有多任务能力的CPU就会在不同的程序间切换~ 还记得前一章谈到的CPU频率吧?假设CPU频率为1GHz的话,那表示CPU一秒钟可以进行109次工作。 假设CPU对每个程序都只进行1000次运行周期,然后就得要切换到下个程序的话,那么CPU一秒钟就能够切换106次呢! (当然啦,切换工作这件事情也会花去一些CPU时间,不过这里暂不讨论)。这么快的处理速度下,你会发现, 两个程序感觉上几乎是同步在进行啦!

 

Tips 为什么有的时候我同时开两个文件(假设为A, B文件)所花的时间, 要比开完A再去开B文件的时间还要多?现在是否稍微可以理解? 因为如果同时打开的话,CPU就必须要在两个工作之间不停的切换~ 而切换的动作还是会耗去一些CPU时间的!所以啰,同时启用两个以上的工作在一个CPU上, 要比一个一个的执行还要耗时一点。这也是为何现在CPU开发商要整合多个CPU于一个芯片中! 也是为何在运行情况比较复杂的服务器上,需要比较多的CPU负责的原因!

早期Intel x86架构计算机不是很受重视的原因,就是因为x86的芯片对于多任务的处理不佳, CPU在不同的工作之间切换不是很顺畅。但是这个情况在386计算机推出后,有很大的改善。 托瓦兹在得知新的386芯片的相关信息后,他认为,以性能价格比的观点来看, Intel的386相当的便宜,所以在性能上也就稍微可以将就将就 ^_^。最终他就贷款去买了一部Intel的386来玩。

早期的计算机性能没有现在这么好,所以压榨计算机性能就成了工程师的一项癖好! 托瓦兹本人早期是玩组合语言的,组合语言对于硬件有很密切的关系,托瓦兹自己也说:“我始终是个性能癖”^^。 为了彻底发挥386的性能,于是托瓦兹花了不少时间在测试386机器上! 他的重要测试就是在测试386的多功性能。首先,他写了三个小程序,一个程序会持续输出A、一个会持续输出B, 最后一个会将两个程序进行切换。他将三个程序同时执行,结果,他看到屏幕上很顺利的一直出现ABABAB…… 他知道,他成功了! ^^

386计算机的多任务测试386计算机的多任务测试

Tips 要达到多工(multitasking)的环境,除了硬件(主要是CPU)需要能够具有多任务的特性外,操作系统也需要支持这个功能喔! 一些不具有多任务特性的操作系统,想要同时执行两个程序是不可能的。除非先被执行的程序执行完毕,否则, 后面的程序不可能被主动执行。

至于多任务的操作系统中,每个程序被执行时,都会有一个最大CPU使用时间,若该工作运行的时间超过这个CPU使用时间时, 该工作就会先被丢出CPU的运行中,而再度的进入核心工作调度中等待下一次被CPU取用来运行。

这有点像在开记者会啦,主持人(CPU)会问“谁要发问”?一群记者(工作程序) 就会举手(看谁的工作重要!),先举手的自然就被允许发问,问完之后, 主持人又会问一次谁要发问,当然,所有人(包括刚刚那个记者)都可以举手! 如此一次一次的将工作给他完成啊! ^_^ 多任务的环境对于复杂的工作情况,帮助很大喔!

初次释出Linux 0.02

探索完386的硬件性能之后,终于拿到Minix并且安装在托瓦兹的386计算机上之后,托瓦兹跟BBS上面一堆工程师一样, 他发现Minix虽然真的很棒,但是谭宁邦教授就是不愿意进行功能的加强,导致一堆工程师在操作系统功能上面的欲求不满! 这个时候年轻的托瓦兹就想:“既然如此,那我何不自己来改写一个我想要的操作系统?” 于是他就开始了核心程序的撰写了。

撰写程序需要什么呢?首先需要的是能够进行工作的环境,再来则是可以将源代码编译成为可可执行文件的编译器。 好在有GNU计划提供的bash工作环境软件以及gcc编译器等自由软件, 让托瓦兹得以顺利的撰写核心程序。他参考Minix的设计理念与书上的程序码,然后仔细研究出386个人计算机的性能最优化, 然后使用GNU的自由软件将核心程序码与386紧紧的结合在一起,最终写出他所需要的核心程序。 而这个小玩意竟然真的可以在386上面顺利的跑起来~还可以读取Minix的文件系统。 真是太好了!不过还不够,他希望这个程序可以获得大家的一些修改建议, 于是他便将这个核心放置在网络上提供大家下载,同时在BBS上面贴了一则消息:

Hello everybody out there using minix-
I'm doing a (free) operation system (just a hobby,
won't be big and professional like gnu) for 386(486) AT clones.

I've currently ported bash (1.08) and gcc (1.40), 
and things seem to work. This implies that i'll get 
something practical within a few months, and I'd like to know 
what features most people want. Any suggestions are welcome, 
but I won't promise I'll implement them :-)

他说,他完成了一个小小的操作系统,这个核心是用在386机器上的, 同时,他真的仅是好玩,并不是想要做一个跟GNU一样大的计划! 另外,他希望能够得到更多人的建议与回馈来发展这个操作系统!这个概念跟Minix刚好背道而驰呢! 这则新闻引起很多人的注意,他们也去托瓦兹提供的网站上下载了这个核心来安装。 有趣的是,因为托瓦兹放置核心的那个FTP网站的目录为:Linux, 从此,大家便称这个核心为Linux了。(请注意,此时的Linux就是那个kernel喔! 另外,托瓦兹所丢到该目录下的第一个核心版本为0.02呢!)

同时,为了让自己的Linux能够相容于Unix系统,于是托瓦兹开始将一些能够在Unix上面运行的软件拿来在Linux上面跑。 不过,他发现到有很多的软件无法在Linux这个核心上运行。这个时候他有两种作法, 一种是修改软件,让该软件可以在Linux上跑, 另一种则是修改Linux,让Linux符合软件能够运行的规范! 由于Linux希望能够相容于Unix,于是托瓦兹选择了第二个作法“修改Linux”! 为了让所有的软件都可以在Linux上执行,于是托瓦兹开始参考标准的POSIX规范。

Tips POSIX是可携式操作系统接口(Portable Operating System Interface)的缩写,重点在规范核心与应用程序之间的接口, 这是由美国电器与电子工程师学会(IEEE)所发布的一项标准喔!

这个正确的决定让Linux在起步的时候体质就比别人优良~因为POSIX标准主要是针对Unix与一些软件运行时候的标准规范, 只要依据这些标准规范来设计的核心与软件,理论上,就可以搭配在一起执行了。 而Linux的发展就是依据这个POSIX的标准规范,Unix上面的软件也是遵循这个规范来设计的, 如此一来,让Linux很容易就与Unix相容共享互有的软件了!同时,因为Linux直接放置在网络下,提供大家下载, 所以在流通的速度上相当的快!导致Linux的使用率大增!这些都是造成Linux大受欢迎的几个重要因素呢!

Tips 其实托瓦兹有意无意之间常常会透露他自己是个只喜欢玩 (Just for Fun) 的怪人!Linux 一开始也只是托瓦兹的一个作业发展出来的玩具而已。 他也说,如果 Minix 或 hurd 这两个中的任何一个系统可以提早开发出他想要的功能与环境,也许他根本不会想要自己开发一个 Linux 哩! 哇!人类智慧真是没有极限!各位啊: 1)要先有基础知识与技能、2)有了第一点后,要勇于挑战权威、3)把你们的玩具发扬光大吧! ^_^

Linux 的发展:虚拟团队的产生

Linux能够成功除了托瓦兹个人的理念与力量之外,其实还有个最重要的团队!

  • 单一个人维护阶段

Linux虽然是托瓦兹发明的,而且内容还绝不会涉及专利软件的版权问题。不过,如果单靠托瓦兹自己一个人的话,那么Linux要茁壮实在很困难~ 因为一个人的力量是很有限的。好在托瓦兹选择Linux的开发方式相当的务实!首先,他将释出的Linux核心放置在FTP上面,并请告知大家新的版本信息, 等到使用者下载了这个核心并且安装之后,如果发生问题,或者是由于特殊需求亟需某些硬件的驱动程序,那么这些使用者就会主动回报给托瓦兹。 在托瓦兹能够解决的问题范围内,他都能很快速的进行Linux核心的更新与除错。

  • 广大骇客志工加入阶段

不过,托瓦兹总是有些硬件无法取得的啊,那么他当然无法帮助进行驱动程序的撰写与相关软件的改良。 这个时候,就会有些志工跳出来说:“这个硬件我有,我来帮忙写相关的驱动程序。” 因为Linux的核心是Open Source的,骇客志工们很容易就能够跟随Linux的原本设计架构, 并且写出相容的驱动程序或者软件。志工们写完的驱动程序与软件托瓦兹是如何看待的呢? 首先,他将该驱动程序/软件带入核心中,并且加以测试。 只要测试可以运行,并且没有什么主要的大问题,那么他就会很乐意的将志工们写的程序码加入核心中!

总之,托瓦兹是个很务实的人,对于Linux核心所欠缺的项目,他总是“先求有且能跑, 再求进一步改良”的心态!这让Linux使用者与志工得到相当大的鼓励! 因为Linux的进步太快了!使用者要求虚拟内存,结果不到一个星期推出的新版Linux就有了! 这不得不让人佩服啊!

另外,为因应这种随时都有程序码加入的状况,于是Linux便逐渐发展成具有模块的功能! 亦即是将某些功能独立出于核心外,在需要的时候才载入到核心中。如此一来, 如果有新的硬件驱动程序或者其他协定的程序码进来时,就可以模块化, 大大的增加了Linux核心的可维护能力!

Tips 核心是一组程序,如果这组程序每次加入新的功能都得要重新编译与改版的话会变成如何? 想像一下,如果你只是换了显卡就得要重新安装新的Windows操作系统,会不会傻眼? 模块化之后,原本的核心程序不需要更动,你可以直接将他想成是“驱动程序”即可! ^_^

  • 核心功能细部分工发展阶段

后来,因为Linux核心加入了太多的功能,光靠托瓦兹一个人进行核心的实际测试并加入核心原始程序实在太费力~ 结果,就有很多的朋友跳出来帮忙这个前置作业!例如考克斯(Alan Cox)、与崔迪(Stephen Tweedie)等等, 这些重要的副手会先将来自志工们的修补程序或者新功能的程序码进行测试, 并且结果上传给托瓦兹看,让托瓦兹作最后核心加入的源代码的选择与整并! 这个分层负责的结果,让Linux的发展更加的容易!

特别值得注意的是,这些托瓦兹的Linux发展副手,以及自愿传送修补程序的骇客志工, 其实都没有见过面,而且彼此在地球的各个角落,大家群策群力的共同发展出现今的Linux, 我们称这群人为虚拟团队!而为了虚拟团队数据的传输,于是Linux便成立的核心网站: http://www.kernel.org

而这群素未谋面的虚拟团队们,在1994年终于完成的Linux的核心正式版!version 1.0。 这一版同时还加入了X Window System的支持呢!且于1996年完成了2.0版、2011 年释出 3.0 版,更于 2015 年 4 月释出了 4.0 版哩! 发展相当迅速喔!此外,托瓦兹指明了企鹅为Linux的吉祥物。

Tips 奇怪的是,托瓦兹是因为小时候去动物园被企鹅咬了一口念念不忘, 而正式的2.0推出时,大家要他想一个吉祥物。他在想也想不到什么动物的情况下, 就将这个念念不忘的企鹅当成了Linux的吉祥物了……

Linux由于托瓦兹是针对386写的,跟386硬件的相关性很强,所以, 早期的Linux确实是不具有移植性的。不过,大家知道Open source的好处就是, 可以修改程序码去适合作业的环境。因此,在1994年以后,Linux便被开发到很多的硬件上面去了! 目前除了x86之外,IBM、HP等等公司出的硬件也都有被Linux所支持呢!甚至于小型单板计算机 (树莓派/香蕉派等) 与手持设备 (智能手机、平板电脑) 的 ARM 架构系统,大多也是使用 Linux 核心喔!

Linux的核心版本

Linux的核心版本编号有点类似如下的样子:

3.10.0-123.el7.x86_64
主版本.次版本.释出版本-修改版本

虽然编号就是如上的方式来编的,不过依据 Linux 核心的发展期程,核心版本的定义有点不太相同喔!

  • 奇数、偶数版本分类

在 2.6.x 版本以前,托瓦兹将核心的发展趋势分为两股,并根据这两股核心的发展分别给予不同的核心编号,那就是:

  • 主、次版本为奇数:发展中版本(development) 如2.5.xx,这种核心版本主要用在测试与发展新功能,所以通常这种版本仅有核心开发工程师会使用。 如果有新增的核心程序码,会加到这种版本当中,等到众多工程师测试没问题后,才加入下一版的稳定核心中;
  • 主、次版本为偶数:稳定版本(stable) 如2.6.xx,等到核心功能发展成熟后会加到这类的版本中,主要用在一般家用计算机以及企业版本中。 重点在于提供使用者一个相对稳定的Linux作业环境平台。

至于释出版本则是在主、次版本架构不变的情况下,新增的功能累积到一定的程度后所新释出的核心版本。 而由于Linux核心是使用GPL的授权,因此大家都能够进行核心程序码的修改。因此,如果你有针对某个版本的核心修改过部分的程序码, 那么那个被修改过的新的核心版本就可以加上所谓的修改版本了。

  • 主线版本、长期维护版本(longterm version)

不过,这种奇数、偶数的编号格式在 3.0 推出之后就失效了。从 3.0 版开始,核心主要依据主线版本 (MainLine) 来开发,开发完毕后会往下一个主线版本进行。 例如 3.10 就是在 3.9 的架构下继续开发出来的新的主线版本。通常新一版的主线版本大约在 2~3 个月会被提出喔! 之所以会有新的主线版本,是因为有加入新功能之故。现在 (2015/04) 最新的主线版本已经来到 4.0 版了喔!好快!

而旧的版本在新的主线版本出现之后,会有两种机制来处理,一种机制为结束开发 (End of Live, EOL),亦即该程序码已经结束,不会有继续维护的状态。 另外一种机制为保持该版本的持续维护,亦即为长期维护版本 (Longterm)!例如 3.10 即为一个长期维护版本,这个版本的程序码会被持续维护,若程序码有 bug 或其他问题, 核心维护者会持续进行程序码的更新维护喔!

所以啰,如果你想要使用 Linux 核心来开发你的系统,那么当然要选择长期支持的版本才行!要判断你的 Linux 核心是否为长期支持的版本, 可以使用“ uname -r ”来查阅核心版本,然后对照下列链接来了解其对应值喔!

Linux核心版本与distribution (下个小节会谈到) 的版本并不相同,很多朋友常常上网问到:“我的Linux是7.x版,请问….”之类的留言, 这是不对的提问方式,因为所谓的Linux版本指的应该是核心版本, 而目前最新的核心版本应该是4.0.0(2015/04) 才对,并不会有7.x的版本出现的。

你常用的Linux系统则应该说明为distribution才对!因此,如果以CentOS这个distribution来说, 你应该说:“我用的Linux是CentOS这个 distribution,版本为7.x 版,请问….”才对喔!

Tips 当你有任何问题想要在Linux论坛发言时,请务必仔细的说明你的distribution版本, 因为虽然各家distributions使用的都是Linux核心,不过每家distributions所选用的软件以及他们自己发展的工具并不相同, 多少还是有点差异,所以留言时得要先声明distribution的版本才行喔! ^_^

 

 

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Leave the field below empty!

Posted in Linux内核

Related Posts