Unit/Linux歷史及相關概念

歡迎來到Unix的世界

很多人都用了很多年的Unix(其實更熟悉的是叫Linux),也接觸到Unix世界中的各種概念,比如GCC、GNU、BSD、POSIX、GPL等等,也大都知道一些傳奇的如雷貫耳的人物,比如Ken Thompson、Dennis Ritchie、Linus Torvalds、Richard Stallman等。但是這些概念是怎么發(fā)展和相互關聯(lián)的,以及這些人物是怎么書寫歷史傳奇的,相信能說清楚的人并不多。這里就專門匯總一下這些信息,供大家參考。

另外,了解這些歷史本身也是非常有趣的??雌饋砀鞣N雜亂無章、瑣碎紛繁的點點滴滴,最后還是擋不住歷史的潮流,演化出了如今精彩紛呈的現(xiàn)實世界(包括有名的Mac OS、IOS、Android等),而這和人類歷史的發(fā)展竟如此相像~

Unix

下圖是對Unit的歷史的一個簡單匯總,參考了coolshell上的一篇文章UNIX 40年:UNIX年鑒。如果對其詳細歷史有興趣的話,可以去這里看看Unix History(那個白色的橫條是一個很殘暴的PDF文件,作者牛逼到爆)

Unit重大歷史事件

上圖中有幾個重要信息:

  • BSD誕生于1978年,是基于其在1974年收到的Unit的源碼拷貝,后面很多重要的發(fā)布版本都是源于BSD
  • 1988年為了統(tǒng)一Unit的標準亂象,IEEE提出了POSIX標準
  • 1991年,Linux誕生,但其本身只是一個操作系統(tǒng)的內(nèi)核,不包含任何的配套軟件
  • 1992年,Linux內(nèi)核被整合近了GNU,GNU+Linux內(nèi)核,這才是大家常用的Linux系統(tǒng),實際上應該叫GNU/Linux
  • 2001年,Mac OS誕生,其基于Mach操作系統(tǒng),Mach系統(tǒng)又是基于BSD,但是替換了其中的Unix內(nèi)核

Linux

下面的發(fā)展簡史摘自Linux發(fā)展歷史,做了少部分改動

Linux操作系統(tǒng)的誕生、發(fā)展和成長過程始終依賴著五個重要支柱:UNIX 操作系統(tǒng)、MINIX 操作系統(tǒng)、GNU計劃、POSIX 標準和Internet 網(wǎng)絡。。

  • 1981 年IBM公司推出微型計算機IBM PC

  • 1991年,GNU計劃已經(jīng)開發(fā)出了許多工具軟件,最受期盼的GNU C編譯器已經(jīng)出現(xiàn),GNU的操作系統(tǒng)核心HURD一直處于實驗階段,沒有任何可用性,實質(zhì)上也沒能開發(fā)出完整的GNU操作系統(tǒng),但是GNU奠定了Linux用戶基礎和開發(fā)環(huán)境

  • 1991年初,林納斯·托瓦茲開始在一臺386sx兼容微機上學習minix操作系統(tǒng)。1991年4月,林納斯·托瓦茲開始醞釀并著手編制自己的操作系統(tǒng)

  • 1991 年4 月13 日在comp.os.minix 上發(fā)布說自己已經(jīng)成功地將bash 移植到了minix 上,而且已經(jīng)愛不釋手、不能離開這個shell軟件了

  • 1991年7月3日,第一個與Linux有關的消息是在comp.os.minix上發(fā)布的(此時還不存在Linux這個名稱)

  • 1991年的10月5日,林納斯·托瓦茲在comp.os.minix新聞組上發(fā)布消息,正式向外宣布Linux內(nèi)核的誕生

  • 1993年,大約有100余名程序員參與了Linux內(nèi)核代碼編寫/修改工作,其中核心組由5人組成,此時Linux 0.99的代碼大約有十萬行,用戶大約有10萬左右

  • 1994年3月,Linux1.0發(fā)布,代碼量17萬行,當時是按照完全自由免費的協(xié)議發(fā)布,隨后正式采用GPL協(xié)議

  • 1995年1月,Bob Young創(chuàng)辦了RedHat(小紅帽),以GNU/Linux為核心,集成了400多個源代碼開放的程序模塊,搞出了一種冠以品牌的Linux,即RedHat Linux,稱為Linux"發(fā)行版",在市場上出售

  • 1996年6月,Linux 2.0內(nèi)核發(fā)布,此內(nèi)核有大約40萬行代碼,并可以支持多個處理器。此時的Linux 已經(jīng)進入了實用階段,全球大約有350萬人使用

  • 1998年2月,以Eric Raymond為首的一批年輕的"老牛羚骨干分子"終于認識到GNU/Linux體系的產(chǎn)業(yè)化道路的本質(zhì),并非是什么自由哲學,而是市場競爭的驅(qū)動,創(chuàng)辦了"Open Source Intiative"(開放源代碼促進會)"復興"的大旗,在互聯(lián)網(wǎng)世界里展開了一場歷史性的Linux產(chǎn)業(yè)化運動

  • 2001年1月,Linux 2.4發(fā)布,它進一步地提升了SMP系統(tǒng)的擴展性,同時它也集成了很多用于支持桌面系統(tǒng)的特性:USB,PC卡(PCMCIA)的支持,內(nèi)置的即插即用,等等功能

  • 2003年12月,Linux 2.6版內(nèi)核發(fā)布,相對于2.4版內(nèi)核2.6在對系統(tǒng)的支持都有很大的變化

其系統(tǒng)的進化是這樣的:

  • 1969.9 UNICS(Unix)
  • 1971.11 Unix Time Sharing System Edition Version V1
  • 1972.6 V2 -> 1973.2 V3 ->1973.11 V4 -> 1974.6 V5 -> 1975 V6 -> 1979 V7
  • 1987 Minix V1.0發(fā)布,基于Unit Time Sharing System V7
  • 1991.8.1 Linux 0.0.1發(fā)布,基于Minix系統(tǒng)

GNU

GNU(GNU's Not Unix)項目是1984年由Richard Stallman發(fā)起的一個開源項目,該項目的目標是開發(fā)出一個完整的類Unix系統(tǒng),其源代碼能夠不受限制地被修改和傳播。GNU項目開發(fā)出了一個包含Unix操作系統(tǒng)所有的主要部件的環(huán)境,除了內(nèi)核(內(nèi)核是由Linux項目獨立發(fā)展而來的)。GNU環(huán)境包括EMACS編輯器、GCC編譯器、GDB調(diào)試器、匯編器、鏈接器、處理二進制文件的工具以及其他一些部件。

GNU為什么沒有包含Unix內(nèi)核,是因為GNU的開發(fā)策略。GNU計劃是開發(fā)一個與Unix兼容的操作系統(tǒng),在Unix系統(tǒng)內(nèi)核已經(jīng)非常完善的情況下,優(yōu)先開發(fā)周邊的應用程序,等自己的內(nèi)核開發(fā)出來之后,直接替換掉內(nèi)核即可。待大部分應用程序已經(jīng)開發(fā)完畢的時候,GNU開始開發(fā)自己的內(nèi)核,即GNU Hurd。但是GNU Hurd一直處于試驗階段,沒有任何可用性,而這時剛好遇到了Linux的橫空出世(1991.8.1 Linux發(fā)布0.0.1版,GNU Hurd1991.5月發(fā)布)。Linux作為內(nèi)核,配合GNU豐富的應用程序,很自然的就結(jié)合在了一起,成為了風靡全球的GNU/Linux系統(tǒng)。

實際上市面上所有的Linux發(fā)行版其實都應該叫做GNU/Linux發(fā)行版,關于GNU的詳細信息可以參考官網(wǎng)GNU Operating System

POSIX

Portable Operating System Interface of Unix的縮寫,定義了一套標準接口 - 操作系統(tǒng)為應用程序提供的接口。由于Unix系統(tǒng)的開放性,到了1988年,各種Unix系統(tǒng)滿天飛,在一個系統(tǒng)上正常工作的應用程序不能移植到另一個系統(tǒng)上,這種不可移植性還往往還被大Unix廠商作為自己的賣點,極大地分裂和違背了Unix的初衷。為了統(tǒng)一這種亂象,出現(xiàn)了幾種標準:AT&T成立了Unix international標準組織,幾大廠商(DEC、HP、IBM等)成立了開放軟件基金會(OSF, Open Software Foundation),而IEEE則發(fā)布了POSIX標準,這些標準的目的都是為了統(tǒng)一Unix的接口標準(但實際上,POSIX標準并不局限于Unix系統(tǒng))。

POSIX標準意在期望獲得源碼級別的軟件可移植性,即為一個POSIX兼容的操作系統(tǒng)編寫的程序,可以在任何其它POSIX兼容的操作系統(tǒng)上編譯執(zhí)行。

BSD

Berkeley Software Distribution,伯克利軟件套件。

AT&A的貝爾實驗室在1971年發(fā)布了第一版的Unix Time Sharing System,到了1975年已經(jīng)發(fā)布到第6版。1974年,加州大學伯克利分校(Berkeley)獲取到一份Unix的源碼拷貝,在此基礎上做一些學術上的研究。1978年,Berkeley的Bill Joy,基于AT&T的Unix V6,增加了一些自己的附件軟件,打包在一起發(fā)布了一個版本,這個版本就是第一版的BSD。

1984年,Berkeley發(fā)布了第四版的BSD,該版本是世界上第一個支持TCP/IP的Unix發(fā)行版(同年,Bill Joy成立了SUN公司)

BSD有幾個比較有名的“分支”系統(tǒng):

  • FreeBSD,主打高性能和易用性
  • OpenBSD,主打安全性,很多銀行系統(tǒng)和重要機構的系統(tǒng)都是基于OpenBSD
  • NetBSD,被設計為幾乎可用在任何架構上,支持非常多的體系結(jié)構
  • DragonFly BSD,適用于多線程環(huán)境的操作系統(tǒng),如計算機集群
  • Darwin/Mac OS X,Mac OS X基于Darwin操作系統(tǒng),而Darwin基于BSD。蘋果在BSD的基礎上開發(fā)了MAC OS X和IOS(內(nèi)核使用開源的BSD代碼,其它大部分是閉源的Mac OS代碼),類似于谷歌在Linux基礎上開發(fā)Android

在今天,提到BSD,并非指任何一個BSD的衍生版本,而是指類Unix操作系統(tǒng)的一個分支的總稱。

System V

Unix操作系統(tǒng)在操作風格上主要分為System V和BSD。System V由AT&T發(fā)布,1983年發(fā)布了第一個版本,直到1998年發(fā)布了第四個版本,也是最經(jīng)典的一個版本,簡稱SVR4。1985年,AT&A發(fā)布了SVID(SystemV Interface Definition),希望統(tǒng)一Unix的接口標準(目標和POSIX類似)。

MacOS

MacOS最終可以追溯到BSD分支,其大致演化過程為:

BSD4.2(1983.9) -> Mach(1986) -> NeXTSTEP 1.0(1989.9) -> Mac OS X 10.0(2001.3)

1986年,Rick Rashid及其同事在Carnegie Mellon大學創(chuàng)造了Mach操作系統(tǒng)的第一個版本,用于取代BSD的Unix內(nèi)核。

2001年,Apple 發(fā)布 Mac OS X,這是一個基于Mach內(nèi)核和BSD開發(fā)的桌面操作系統(tǒng)。

Android

Android系統(tǒng)是基于Linux系統(tǒng)發(fā)展而來的。在Linux的內(nèi)核上運行了一個Java虛擬機(最開始叫Dalvik虛擬機,后面改為Android Run Time,ART虛擬機),由虛擬機來解釋執(zhí)行用java代碼編寫的應用程序。

開源

從Unix誕生開始,就伴隨著開源的概念。開源全稱是Open Source,是開放源代碼的意思,也就意味著開放,任何人都可以得到程序的源代碼。但是開源并不意味著免費(雖然大部分都是免費),也是受限于版權限制的,只是這些版權相對閉源來說要開放寬松了很多。在版權限制范圍內(nèi),可以基于源代碼做修改并重新發(fā)行,甚至收費。開源的本質(zhì)是在開放,是接納、包容和發(fā)展,求同存異,互利共贏。

許可證

開源并非是無限制的開放,也是有版權的,這些版權的聲明就是開源許可證。比較常見的許可證有:GPL、BSD、Apache、MIT、LGPL、Mozilla等。下圖根據(jù)網(wǎng)上搜索的信息簡單整理了一下各許可證的主要許可范圍,從圖中可以看到MIT許可證是最寬松的,而GPL是相對比較嚴格的。

許可證協(xié)議

下面分別簡單介紹上面幾種許可證的特點:

  • GPL,GNU General Public License,其主要特點在于其“傳染性”,只要軟件中有使用了GPL協(xié)議的產(chǎn)品,包括直接引用源代碼或者引用修改后的衍生代碼,則該軟件也必須采用GPL協(xié)議,開源和免費,不允許衍生代碼作為商業(yè)軟件發(fā)布和銷售。Linux和大部分GNU產(chǎn)品都是采用的GPL協(xié)議。

  • LGPL,GNU Library or “Lesser” General Public License,允許商業(yè)軟件通過引用類庫的方式使用LGPL產(chǎn)品,而不需要公開軟件的源代碼。新增的代碼不需要采用LGPL協(xié)議,但是修改的代碼則必須采用LGPL協(xié)議。LGPL協(xié)議的開源代碼很適合作為第三方類庫被商業(yè)軟件引用,但不適合希望以LGPL協(xié)議代碼為基礎,通過修改和衍生的方式做二次開發(fā)的商業(yè)軟件采用。使用LGPL協(xié)議的比較有名的產(chǎn)品有JBoss、Hibernate、FCKeditor等

  • BSD,Berkeley Software Distribution,BSD開源協(xié)議是一個給于使用者很大自由的協(xié)議?;旧鲜褂谜呖梢宰杂傻氖褂?,修改源代碼,也可以將修改后的代碼作為開源或者專有軟件再發(fā)布。

    當使用了BSD協(xié)議的代碼,或者以BSD協(xié)議代碼為基礎做二次開發(fā)自己的產(chǎn)品時,需要滿足三個條件:

    • 如果再發(fā)布的產(chǎn)品中包含源代碼,則在源代碼中必須帶有原來代碼中的BSD協(xié)議
    • 如果再發(fā)布的只是二進制類庫/軟件,則需要在類庫/軟件的文檔和版權聲明中包含原來代碼中的BSD協(xié)議
    • 不可以用開源代碼的作者/機構名字和原來產(chǎn)品的名字做市場推廣

    很多公司企業(yè)在選擇開源軟件的時候都首選BSD協(xié)議,因為可以完全控制這些第三方的代碼,而且在必要的時候可以進行修改或者二次開發(fā)。使用BSD協(xié)議的比較有名的產(chǎn)品有nginx、CruiseControl、Redis等

  • MIT,MIT License,是最為寬松的協(xié)議,這個協(xié)議唯一的條件就是在修改后的代碼或者發(fā)行包包含原作者的許可信息,比較適用商業(yè)軟件。使用MIT協(xié)議的產(chǎn)品如jquery、Node.js等

  • Apache License,是著名的非盈利開源組織Apache采用的協(xié)議。該協(xié)議和BSD類似,同樣鼓勵代碼共享和尊重原作者的著作權,同樣允許代碼修改,再發(fā)布(作為開源或商業(yè)軟件)。需要滿足的條件也和BSD類似:

    • 需要給代碼的用戶一份Apache Licence
    • 如果你修改了代碼,需要在被修改的文件中說明
    • 在延伸的代碼中(修改和有源代碼衍生的代碼中)需要帶有原來代碼中的協(xié)議,商標,專利聲明和其他原來作者規(guī)定需要包含的說明
    • 如果再發(fā)布的產(chǎn)品中包含一個Notice文件,則在Notice文件中需要帶有Apache Licence。你可以在Notice中增加自己的許可,但不可以表現(xiàn)為對Apache Licence構成更改
  • MPL,Mozilla Public License,允許免費重發(fā)布、免費修改,但要求修改后的代碼版權歸軟件的發(fā)起者。這種授權維護了商業(yè)軟件的利益,它要求基于這種軟件的修改無償貢獻版權給該軟件。這樣,圍繞該軟件的所有代碼的版權都集中在發(fā)起開發(fā)人的手中。但MPL允許修改和無償使用,對鏈接沒有要求。

還有其它形形色色的開源協(xié)議,詳情可以參考Various Licenses and Comments about Them

參考

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容