歡迎來到Unix的世界
很多人都用了很多年的Unix(其實更熟悉的是叫Linux)烂琴,也接觸到Unix世界中的各種概念滚澜,比如GCC粗仓、GNU、BSD设捐、POSIX借浊、GPL等等,也大都知道一些傳奇的如雷貫耳的人物萝招,比如Ken Thompson蚂斤、Dennis Ritchie、Linus Torvalds槐沼、Richard Stallman等曙蒸。但是這些概念是怎么發(fā)展和相互關(guān)聯(lián)的,以及這些人物是怎么書寫歷史傳奇的岗钩,相信能說清楚的人并不多纽窟。這里就專門匯總一下這些信息,供大家參考兼吓。
另外臂港,了解這些歷史本身也是非常有趣的。看起來各種雜亂無章审孽、瑣碎紛繁的點點滴滴县袱,最后還是擋不住歷史的潮流,演化出了如今精彩紛呈的現(xiàn)實世界(包括有名的Mac OS瓷胧、IOS显拳、Android等),而這和人類歷史的發(fā)展竟如此相像~
Unix
下圖是對Unit的歷史的一個簡單匯總搓萧,參考了coolshell上的一篇文章UNIX 40年:UNIX年鑒。如果對其詳細歷史有興趣的話宛畦,可以去這里看看Unix History(那個白色的橫條是一個很殘暴的PDF文件瘸洛,作者牛逼到爆)
上圖中有幾個重要信息:
- 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),實際上應(yī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)絡(luò)憎亚。员寇。
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用戶基礎(chǔ)和開發(fā)環(huán)境
1991年初,林納斯·托瓦茲開始在一臺386sx兼容微機上學(xué)習(xí)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有關(guān)的消息是在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ì),并非是什么自由哲學(xué)宪哩,而是市場競爭的驅(qū)動娩贷,創(chuàng)辦了"Open Source Intiative"(開放源代碼促進會)"復(fù)興"的大旗,在互聯(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ā)周邊的應(yīng)用程序贩汉,等自己的內(nèi)核開發(fā)出來之后,直接替換掉內(nèi)核即可锚赤。待大部分應(yīng)用程序已經(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豐富的應(yīng)用程序寓落,很自然的就結(jié)合在了一起括丁,成為了風(fēng)靡全球的GNU/Linux系統(tǒng)。
實際上市面上所有的Linux發(fā)行版其實都應(yīng)該叫做GNU/Linux發(fā)行版伶选,關(guān)于GNU的詳細信息可以參考官網(wǎng)GNU Operating System
POSIX
Portable Operating System Interface of Unix的縮寫史飞,定義了一套標準接口 - 操作系統(tǒng)為應(yīng)用程序提供的接口。由于Unix系統(tǒng)的開放性仰税,到了1988年构资,各種Unix系統(tǒng)滿天飛,在一個系統(tǒng)上正常工作的應(yī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年,加州大學(xué)伯克利分校(Berkeley)獲取到一份Unix的源碼拷貝厦滤,在此基礎(chǔ)上做一些學(xué)術(shù)上的研究援岩。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)和重要機構(gòu)的系統(tǒng)都是基于OpenBSD
- NetBSD,被設(shè)計為幾乎可用在任何架構(gòu)上凿滤,支持非常多的體系結(jié)構(gòu)
- DragonFly BSD妈橄,適用于多線程環(huán)境的操作系統(tǒng),如計算機集群
- Darwin/Mac OS X翁脆,Mac OS X基于Darwin操作系統(tǒng)眷蚓,而Darwin基于BSD。蘋果在BSD的基礎(chǔ)上開發(fā)了MAC OS X和IOS(內(nèi)核使用開源的BSD代碼反番,其它大部分是閉源的Mac OS代碼)沙热,類似于谷歌在Linux基礎(chǔ)上開發(fā)Android
在今天叉钥,提到BSD,并非指任何一個BSD的衍生版本篙贸,而是指類Unix操作系統(tǒng)的一個分支的總稱投队。
System V
Unix操作系統(tǒng)在操作風(fē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大學(xué)創(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代碼編寫的應(yīng)用程序。
開源
從Unix誕生開始兵迅,就伴隨著開源的概念抢韭。開源全稱是Open Source,是開放源代碼的意思恍箭,也就意味著開放刻恭,任何人都可以得到程序的源代碼。但是開源并不意味著免費(雖然大部分都是免費)扯夭,也是受限于版權(quán)限制的鳍贾,只是這些版權(quán)相對閉源來說要開放寬松了很多。在版權(quán)限制范圍內(nèi)交洗,可以基于源代碼做修改并重新發(fā)行骑科,甚至收費。開源的本質(zhì)是在開放构拳,是接納咆爽、包容和發(fā)展梁棠,求同存異,互利共贏斗埂。
許可證
開源并非是無限制的開放符糊,也是有版權(quán)的,這些版權(quán)的聲明就是開源許可證呛凶。比較常見的許可證有:GPL男娄、BSD、Apache把兔、MIT沪伙、LGPL、Mozilla等县好。下圖根據(jù)網(wǎng)上搜索的信息簡單整理了一下各許可證的主要許可范圍围橡,從圖中可以看到MIT許可證是最寬松的,而GPL是相對比較嚴格的缕贡。
下面分別簡單介紹上面幾種許可證的特點:
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é)議代碼為基礎(chǔ),通過修改和衍生的方式做二次開發(fā)的商業(yè)軟件采用详民。使用LGPL協(xié)議的比較有名的產(chǎn)品有JBoss延欠、Hibernate、FCKeditor等
-
BSD阐斜,Berkeley Software Distribution衫冻,BSD開源協(xié)議是一個給于使用者很大自由的協(xié)議≮顺觯基本上使用者可以自由的使用隅俘,修改源代碼邻奠,也可以將修改后的代碼作為開源或者專有軟件再發(fā)布。
當使用了BSD協(xié)議的代碼为居,或者以BSD協(xié)議代碼為基礎(chǔ)做二次開發(fā)自己的產(chǎn)品時碌宴,需要滿足三個條件:
- 如果再發(fā)布的產(chǎn)品中包含源代碼,則在源代碼中必須帶有原來代碼中的BSD協(xié)議
- 如果再發(fā)布的只是二進制類庫/軟件蒙畴,則需要在類庫/軟件的文檔和版權(quán)聲明中包含原來代碼中的BSD協(xié)議
- 不可以用開源代碼的作者/機構(gòu)名字和原來產(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類似,同樣鼓勵代碼共享和尊重原作者的著作權(quán)苔埋,同樣允許代碼修改懦砂,再發(fā)布(作為開源或商業(yè)軟件)。需要滿足的條件也和BSD類似:
- 需要給代碼的用戶一份Apache Licence
- 如果你修改了代碼组橄,需要在被修改的文件中說明
- 在延伸的代碼中(修改和有源代碼衍生的代碼中)需要帶有原來代碼中的協(xié)議孕惜,商標,專利聲明和其他原來作者規(guī)定需要包含的說明
- 如果再發(fā)布的產(chǎn)品中包含一個Notice文件晨炕,則在Notice文件中需要帶有Apache Licence。你可以在Notice中增加自己的許可毫炉,但不可以表現(xiàn)為對Apache Licence構(gòu)成更改
MPL瓮栗,Mozilla Public License,允許免費重發(fā)布瞄勾、免費修改费奸,但要求修改后的代碼版權(quán)歸軟件的發(fā)起者。這種授權(quán)維護了商業(yè)軟件的利益进陡,它要求基于這種軟件的修改無償貢獻版權(quán)給該軟件愿阐。這樣,圍繞該軟件的所有代碼的版權(quán)都集中在發(fā)起開發(fā)人的手中趾疚。但MPL允許修改和無償使用缨历,對鏈接沒有要求以蕴。
還有其它形形色色的開源協(xié)議,詳情可以參考Various Licenses and Comments about Them