不少人都用了不少年的Unix(其實更熟悉的是叫Linux),也接觸到Unix世界中的各類概念,好比GCC、GNU、BSD、POSIX、GPL等等,也大都知道一些傳奇的如雷貫耳的人物,好比Ken Thompson、Dennis Ritchie、Linus Torvalds、Richard Stallman等。可是這些概念是怎麼發展和相互關聯的,以及這些人物是怎麼書寫歷史傳奇的,相信能說清楚的人並很少。這裏就專門彙總一下這些信息,供你們參考。html
另外,瞭解這些歷史自己也是很是有趣的。看起來各類雜亂無章、瑣碎紛繁的點點滴滴,最後仍是擋不住歷史的潮流,演化出了現在精彩紛呈的現實世界(包括有名的Mac OS、IOS、Android等),而這和人類歷史的發展竟如此相像~java
下圖是對Unit的歷史的一個簡單彙總,參考了coolshell上的一篇文章UNIX 40年:UNIX年鑑。若是對其詳細歷史有興趣的話,能夠去這裏看看Unix History(那個白色的橫條是一個很殘暴的PDF文件,做者牛逼到爆)jquery
上圖中有幾個重要信息:linux
下面的發展簡史摘自Linux發展歷史,作了少部分改動android
Linux操做系統的誕生、發展和成長過程始終依賴着五個重要支柱:UNIX 操做系統、MINIX 操做系統、GNU計劃、POSIX 標準和Internet 網絡。。nginx
- 1981 年IBM公司推出微型計算機IBM PC
- 1991年,GNU計劃已經開發出了許多工具軟件,最受期盼的GNU C編譯器已經出現,GNU的操做系統核心HURD一直處於實驗階段,沒有任何可用性,實質上也沒能開發出完整的GNU操做系統,可是GNU奠基了Linux用戶基礎和開發環境
- 1991年初,林納斯·託瓦茲開始在一臺386sx兼容微機上學習minix操做系統。1991年4月,林納斯·託瓦茲開始醞釀並着手編制本身的操做系統
- 1991 年4 月13 日在comp.os.minix 上發佈說本身已經成功地將bash 移植到了minix 上,並且已經愛不釋手、不能離開這個shell軟件了
- 1991年7月3日,第一個與Linux有關的消息是在comp.os.minix上發佈的(此時還不存在Linux這個名稱)
- 1991年的10月5日,林納斯·託瓦茲在comp.os.minix新聞組上發佈消息,正式向外宣佈Linux內核的誕生
- 1993年,大約有100餘名程序員參與了Linux內核代碼編寫/修改工做,其中核心組由5人組成,此時Linux 0.99的代碼大約有十萬行,用戶大約有10萬左右
- 1994年3月,Linux1.0發佈,代碼量17萬行,當時是按照徹底自由免費的協議發佈,隨後正式採用GPL協議
- 1995年1月,Bob Young創辦了RedHat(小紅帽),以GNU/Linux爲核心,集成了400多個源代碼開放的程序模塊,搞出了一種冠以品牌的Linux,即RedHat Linux,稱爲Linux"發行版",在市場上出售
- 1996年6月,Linux 2.0內核發佈,此內核有大約40萬行代碼,並能夠支持多個處理器。此時的Linux 已經進入了實用階段,全球大約有350萬人使用
- 1998年2月,以Eric Raymond爲首的一批年輕的"老牛羚骨幹分子"終於認識到GNU/Linux體系的產業化道路的本質,並不是是什麼自由哲學,而是市場競爭的驅動,創辦了"Open Source Intiative"(開放源代碼促進會)"復興"的大旗,在互聯網世界裏展開了一場歷史性的Linux產業化運動
- 2001年1月,Linux 2.4發佈,它進一步地提高了SMP系統的擴展性,同時它也集成了不少用於支持桌面系統的特性:USB,PC卡(PCMCIA)的支持,內置的即插即用,等等功能
- 2003年12月,Linux 2.6版內核發佈,相對於2.4版內核2.6在對系統的支持都有很大的變化
其系統的進化是這樣的:程序員
GNU(GNU's Not Unix)項目是1984年由Richard Stallman發起的一個開源項目,該項目的目標是開發出一個完整的類Unix系統,其源代碼可以不受限制地被修改和傳播。GNU項目開發出了一個包含Unix操做系統全部的主要部件的環境,除了內核(內核是由Linux項目獨立發展而來的)。GNU環境包括EMACS編輯器、GCC編譯器、GDB調試器、彙編器、連接器、處理二進制文件的工具以及其餘一些部件。shell
GNU爲何沒有包含Unix內核,是由於GNU的開發策略。GNU計劃是開發一個與Unix兼容的操做系統,在Unix系統內核已經很是完善的狀況下,優先開發周邊的應用程序,等本身的內核開發出來以後,直接替換掉內核便可。待大部分應用程序已經開發完畢的時候,GNU開始開發本身的內核,即GNU Hurd。可是GNU Hurd一直處於試驗階段,沒有任何可用性,而這時恰好遇到了Linux的橫空出世(1991.8.1 Linux發佈0.0.1版,GNU Hurd1991.5月發佈)。Linux做爲內核,配合GNU豐富的應用程序,很天然的就結合在了一塊兒,成爲了風靡全球的GNU/Linux系統。macos
實際上市面上全部的Linux發行版其實都應該叫作GNU/Linux發行版,關於GNU的詳細信息能夠參考官網GNU Operating System安全
Portable Operating System Interface of Unix的縮寫,定義了一套標準接口 - 操做系統爲應用程序提供的接口。因爲Unix系統的開放性,到了1988年,各類Unix系統滿天飛,在一個系統上正常工做的應用程序不能移植到另外一個系統上,這種不可移植性還每每還被大Unix廠商做爲本身的賣點,極大地分裂和違背了Unix的初衷。爲了統一這種亂象,出現了幾種標準:AT&T成立了Unix international標準組織,幾大廠商(DEC、HP、IBM等)成立了開放軟件基金會(OSF, Open Software Foundation),而IEEE則發佈了POSIX標準,這些標準的目的都是爲了統一Unix的接口標準(但實際上,POSIX標準並不侷限於Unix系統)。
POSIX標準意在指望得到源碼級別的軟件可移植性,即爲一個POSIX兼容的操做系統編寫的程序,能夠在任何其它POSIX兼容的操做系統上編譯執行。
Berkeley Software Distribution,伯克利軟件套件。
AT&A的貝爾實驗室在1971年發佈了初版的Unix Time Sharing System,到了1975年已經發布到第6版。1974年,加州大學伯克利分校(Berkeley)獲取到一份Unix的源碼拷貝,在此基礎上作一些學術上的研究。1978年,Berkeley的Bill Joy,基於AT&T的Unix V6,增長了一些本身的附件軟件,打包在一塊兒發佈了一個版本,這個版本就是初版的BSD。
1984年,Berkeley發佈了第四版的BSD,該版本是世界上第一個支持TCP/IP的Unix發行版(同年,Bill Joy成立了SUN公司)
BSD有幾個比較有名的「分支」系統:
在今天,提到BSD,並不是指任何一個BSD的衍生版本,而是指類Unix操做系統的一個分支的總稱。
Unix操做系統在操做風格上主要分爲System V和BSD。System V由AT&T發佈,1983年發佈了第一個版本,直到1998年發佈了第四個版本,也是最經典的一個版本,簡稱SVR4。1985年,AT&A發佈了SVID(SystemV Interface Definition),但願統一Unix的接口標準(目標和POSIX相似)。
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大學創造了Mach操做系統的第一個版本,用於取代BSD的Unix內核。
2001年,Apple 發佈 Mac OS X,這是一個基於Mach內核和BSD開發的桌面操做系統。
Android系統是基於Linux系統發展而來的。在Linux的內核上運行了一個Java虛擬機(最開始叫Dalvik虛擬機,後面改成Android Run Time,ART虛擬機),由虛擬機來解釋執行用java代碼編寫的應用程序。
從Unix誕生開始,就伴隨着開源的概念。開源全稱是Open Source,是開放源代碼的意思,也就意味着開放,任何人均可以獲得程序的源代碼。可是開源並不意味着免費(雖然大部分都是免費),也是受限於版權限制的,只是這些版權相對閉源來講要開放寬鬆了不少。在版權限制範圍內,能夠基於源代碼作修改並從新發行,甚至收費。開源的本質是在開放,是接納、包容和發展,求同存異,互利雙贏。
開源並不是是無限制的開放,也是有版權的,這些版權的聲明就是開源許可證。比較常見的許可證有:GPL、BSD、Apache、MIT、LGPL、Mozilla等。下圖根據網上搜索的信息簡單整理了一下各許可證的主要許可範圍,從圖中能夠看到MIT許可證是最寬鬆的,而GPL是相對比較嚴格的。
下面分別簡單介紹上面幾種許可證的特色:
GPL,GNU General Public License,其主要特色在於其「傳染性」,只要軟件中有使用了GPL協議的產品,包括直接引用源代碼或者引用修改後的衍生代碼,則該軟件也必須採用GPL協議,開源和免費,不容許衍生代碼做爲商業軟件發佈和銷售。Linux和大部分GNU產品都是採用的GPL協議。
LGPL,GNU Library or 「Lesser」 General Public License,容許商業軟件經過引用類庫的方式使用LGPL產品,而不須要公開軟件的源代碼。新增的代碼不須要採用LGPL協議,可是修改的代碼則必須採用LGPL協議。LGPL協議的開源代碼很適合做爲第三方類庫被商業軟件引用,但不適合但願以LGPL協議代碼爲基礎,經過修改和衍生的方式作二次開發的商業軟件採用。使用LGPL協議的比較有名的產品有JBoss、Hibernate、FCKeditor等
BSD,Berkeley Software Distribution,BSD開源協議是一個給於使用者很大自由的協議。基本上使用者能夠自由的使用,修改源代碼,也能夠將修改後的代碼做爲開源或者專有軟件再發布。
當使用了BSD協議的代碼,或者以BSD協議代碼爲基礎作二次開發本身的產品時,須要知足三個條件:
不少公司企業在選擇開源軟件的時候都首選BSD協議,由於能夠徹底控制這些第三方的代碼,並且在必要的時候能夠進行修改或者二次開發。使用BSD協議的比較有名的產品有nginx、CruiseControl、Redis等
MIT,MIT License,是最爲寬鬆的協議,這個協議惟一的條件就是在修改後的代碼或者發行包包含原做者的許可信息,比較適用商業軟件。使用MIT協議的產品如jquery、Node.js等
Apache License,是著名的非盈利開源組織Apache採用的協議。該協議和BSD相似,一樣鼓勵代碼共享和尊重原做者的著做權,一樣容許代碼修改,再發布(做爲開源或商業軟件)。須要知足的條件也和BSD相似:
MPL,Mozilla Public License,容許免費重發布、免費修改,但要求修改後的代碼版權歸軟件的發起者。這種受權維護了商業軟件的利益,它要求基於這種軟件的修改無償貢獻版權給該軟件。這樣,圍繞該軟件的全部代碼的版權都集中在發起開發人的手中。但MPL容許修改和免費使用,對連接沒有要求。
還有其它形形色色的開源協議,詳情能夠參考Various Licenses and Comments about Them