1. 程式人生 > >GNU/Linux與開源文化的那些人和事

GNU/Linux與開源文化的那些人和事

一、計算機的發明

世上本無路,走的人多了,就有了路。世上本無計算機,琢磨的人多了……沒有計算機,一切無從談起。

三個人對計算機的發明功不可沒,居功至偉。阿蘭·圖靈(Alan Mathison Turing)、阿塔那索夫(John Vincent Atanasoff)、和馮·諾依曼(John von Neumann)。

圖靈從理論上證明了計算機的可行性;阿塔那索夫實踐了圖靈的理論;馮·諾依曼奠定了現代計算機的體系結構。

圖靈說這玩意兒應該可以做,已經被證明了;阿塔那索夫二話不說動手就做了一個;馮·諾依曼說應該這麼做才更好。

圖靈功勞很大,死得很慘,只因他是同性戀。他的最後時刻是吃了一個沾有氰化鉀的蘋果。有人說蘋果公司的Logo是為了紀念圖靈,不實。確定紀念圖靈的是“圖靈獎”,計算機研究領域的最高獎項,由美國計算機協會於1966年設立。

阿塔那索夫名氣不大,享年較長。世界上第一臺計算機是阿塔那索夫領導發明的ABC計算機,並非我們很多書上說的ENIAC。

馮·諾依曼長得帥,聰明,研究領域廣,故事很多。今天我們使用的計算機都被打上了一個的深深的烙印,這個烙印就叫馮·諾依曼體系結構。

關於計算機之父有很多說法,版本不一,這三個人都可以稱為計算機之父。曾有人奉馮·諾依曼為計算機之父,馮·諾依曼說不敢當,殊榮當歸圖靈。

早年全世界的計算機中心在美國普林斯頓大學,群星閃耀,璀璨奪目。馮·諾依曼曾在此工作,圖靈曾在此學習,他倆在普林斯頓的花園裡聊過天。馮·諾依曼想讓圖靈給他當助手,被拒絕了。

二、最初的Unix和C語言

早期計算機個頭大,電子元器件多,開動一次電費都不少,使用起來也很不方便。別的不說,一次只能幹一件事就讓人受不了。先煮粥,半小時之後粥煮好了再炒菜。花老多錢僱的廚師,明明煮粥的時候可以炒菜好不好?一次做一件事,就叫單任務,比較笨。

受不了就要想辦法,就有人提出了作業系統的想法。作業系統就是想讓計算機用起來更方便,能發揮更大的作用。

1965年,MIT、貝爾實驗室和美國通用電氣公司合作準備搞個超級作業系統,取了個霸氣的名字:Multics (Multiplexed Information and Computing System),多路複用資訊和計算機系統。能讓多個人可以同時幹很多事,也叫多使用者多工作業系統。

Multics名字挺好,事沒幹成,目標過於龐大,結果壯志未酬。

1969年,Multics專案進展緩慢,被迫停止,參與專案的兩個人Ken Thompson和Dennis Ritchie也閒了下來。他們都是貝爾實驗室的人。沒活幹了,就打遊戲。他們倆找了一臺破電腦準備玩以前開發的一個遊戲。

把遊戲移植到一臺閒置機器(PDP-7)的過程中,實現了一個簡單的作業系統。到了 1970年,這個簡單的系統已經可以使用,但只能同時兩個人使用。有人調侃他們,說你們這個破玩意離Multics差遠了,就叫Unics(UNiplexed Information and Computing Service)吧。Unics是Multics的反義,與其說調侃他倆,不如說在調侃Multics。Ken Thompson稍微把名字修改了一下,Unix。

自此,Unix紀元開始。1970年是為Unix元年,今年已經是Unix45年。Unix時間戳從1970年1月1日開始計算和Unix誕生的時間有莫大關係。

早年的作業系統最早是用匯編語言寫的,組合語言低階落後,寫起來很痛苦。開發Unix過程中,Thompson發明了B語言,Ritchie在B語言基礎做了改進,稱之為C語言。

C語言發明後,Ritchie和貝爾實驗室的同事Brian W. Kernighan合著一本C語言的書,後來被稱為K&R。Kernighan名氣沒Ritchie大,但並非凡人,Unix命令Awk中的K就是Kernighan。

接下來Thompson和Ritchie用C語言重新編寫了Unix系統。結果相當滿意,Unix可以見人了。1974年,Dennis M. Ritchie和Ken Thompson發表了第一篇關於UNIX的論文《The UNIX Time Sharing System》,從此Unix廣為人知。

這幾年世界計算機的中心到了貝爾實驗室,Thompson、Ritchie、Kernighan還有好多。Thompson和Ritchie後來都獲得了圖靈獎。

有心栽花花不活,無心插柳柳成蔭。Multics目標巨集偉,沒幹成,Unix和C語言剛開始並沒想那麼多,而且還是業餘時間的作品,終成偉業!

Unix和C語言是計算機領域的常青樹,歷久彌新。從發明至今一直保持著旺盛的生命力,從發明至今都基本保持原貌,足見偉大!

三、混亂的Unix發展過程

Unix一經出現,引起了眾人的關注,很多人找Thompson和Ritchie要Unix的原始碼。那是個開放的時代,那是個相互學習研究的時代,把程式的原始碼分享給別人是很平常的事。一份份的Unix原始碼被流傳到各個實驗室、學校、公司。

加州大學伯克利分校有一幫熱衷於Unix的人,他們拿到原始碼後不斷研究,不斷改進,大大推進了Unix的發展。

這個階段Unix發展有兩條主線,一條在貝爾實驗室內部,另一條就在伯克利分校。伯克利分校的成果很輝煌,著名的TCP/IP協議在Unix上的實現就是他們搞出來的。後來把他們搞的這套Unix稱為BSD(Berkeley Software Distribution)。

伯克利分校一時風光無兩,最傑出的一位是Bill Joy。Bill Joy,Vi、Csh等等一系列軟體的作者,Sun公司的創始人。沒有Sun公司,就沒有今天的Java語言。

Unix剛誕生的時候,貝爾實驗室受反壟斷法所限,不能從事計算機業務。其實也並沒想到Unix發展勢頭如此之好。

等到1983年,貝爾實驗室的母公司AT&T已經被強制拆分為幾個小公司,不再受反壟斷法的限制。這時,AT&T釋出了Unix最新版System V,宣佈從此Unix只能商業使用,不再開放原始碼。AT&T想用Unix賺大錢。

BSD那邊受到了很大影響,他們不想急著賺錢,他們想開放原始碼。沒辦法,伯克利分校決心把BSD當中受到影響的原始碼重新寫過。從伯克利分校出來的幾位同學成立了一家公司,專門開發BSD專案。直到有一天,他們宣佈BSD當中再沒有最初來自貝爾實驗室的原始碼。AT&T不買賬,告你,起訴,打官司。

這是一場漫長的官司,官司尚未打完,Unix版權就被倒賣了好幾次。買版權的好幾家公司繼續和BSD打官司,幾家公司相互也打官司。

等到硝煙散盡,BSD終究推出了完全屬於自己的Unix,因為版權的問題,不能再叫Unix,只能叫類Unix系統。

BSD的類Unix系統是FreeBSD、MacOS的前身。今天使用的蘋果電腦,iPhone手機上的作業系統都是從BSD這一支上發展而來。

漫長的官司耗盡了人們對BSD的熱情,也讓BSD錯過了最好的發展機會。後來的FreeBSD、NetBSD、OpenBSD都是從BSD分化而來,免費,開源,優秀,但再沒挽回曾經的榮光,因為已經有了Linux。


Unix發展過程圖

四、斯托曼博士的GNU計劃

AT&T想靠Unix賺錢的時候,不止是AT&T,很多商業公司都希望通過軟體賺錢。不再免費,不再開放原始碼,不再相互通過原始碼學習研究。

曾經是多麼好的時代,怎麼現在就變得只認錢了呢?這一切讓一個人很不滿意。他曾經看到一個系統有問題,想要一份原始碼拿來幫修改一下,別人冷笑以對。

世風日下,他要向這個令人沮喪的時代挑戰,他要還一個開源、免費的系統與人世間。請記住這個人的名字,理查德·斯托曼(Richard Matthew Stallman)博士。

斯托曼是老牌黑客,Emacs的作者。Emacs和前面提到的Vi是計算機領域中兩大強悍的編輯工具,Emacs和Vi哪個更強是最容易引起爭議的話題之一。為了少吵架,千萬別和寶馬車主說賓士好。

斯托曼博士長頭髮,大鬍子,不修邊幅,一直單身。他一心投入自由軟體運動,他建立了自由軟體基金會(FSF)。他雄心勃勃地提出了一項偉大的計劃,GNU(GNU's not Unix)計劃。Not Unix,不是Unix,是自由的、免費的、開源的、像Unix一樣好用的系統。


理查德·斯托曼博士

GNU起初進展很順利,GLibc、GCC、GDB,這一系列的作業系統必備軟體都有條不紊地在進展。所有的“G”來自Gnu的首字母。為什麼叫“G”,斯托曼博士說當時他覺得好玩,而且他小時候聽過一首歌,很喜歡,歌名是《The Gnu》。

完全搞個作業系統看來也並非易事,GNU完成了一大堆軟體的時候才意識到遇到了大麻煩。GNU系統的核心專案Hurd遲遲不能令人滿意。核心之於作業系統,就像發動機之於汽車,必不可缺。

五、Linux出世記

1991年,Linus Torvalds尚是芬蘭赫爾辛基大學的一名學生,他在學校學作業系統的課程,他也想搞個作業系統玩玩。他當時已經在使用Gnu專案的Bash、GCC等軟體。受GNU的影響,把他自己開發的一個簡陋的作業系統核心放到了網際網路上。

這個核心系統就是Linux,Linus's Unix,Linus的Unix。名字並非Linux所取,他一貫的風格是取個調侃的名字,但當時管理員說Linux挺好,名字就這麼定了。

Linux放到網上後引起了很多人的興趣,他們陸續通過網際網路加入到Linux開發過程中。1993年,大約有100多名程式設計師參與了Linux核心程式碼。這時已經是網際網路的時代,他們不用相識,不用謀面,通過網路討論,通過網路協作,推進著Linux。

1994年3月,Linux1.0釋出,Linux已經成為一個基本可用的核心。從此Linux就一直沒有踩過剎車,一步步從幼苗長成參天大樹。

Linus小時候被企鵝攻擊過,他給Linux定Logo的時候選中了企鵝,真不知道這是什麼邏輯。長得像企鵝的除了QQ,還有Linux。

Linux開創了一種前所未有的軟體開發模式。多人協作,程式碼隨時提交,有問題及時修改,所有參與人員並非精英,而是一群狂熱的支持者。前前後後無數人蔘與了Linux專案的開發,組織不太嚴謹,有很多的爭吵和討論。Linus經常寫程式碼,偶爾扮演仲裁的角色,而非傳統意義上的領導。

後來開源運動的吹鼓手Eric Raymond寫了一篇文章《大教堂與集市》來分析Linux的開發模式。大教堂要設計好圖紙,動用優秀的工匠,有序的工程計劃才能修築,鬧哄哄無序如菜市場的一撥人能不能修一座大教堂?答案是可以的,因為他們建成了。

Linus後來坦言,他開發Linux時不瞭解還有FreeBSD等專案,如果知道了可能他就不會動手寫Linux了。那時各種BSD系統正在官司的陰影籠罩下,某種程度了也促進了Linux的發展。

他們一開始也沒什麼圖紙,一邊修建,一邊請人蔘觀,出了問題隨時修復,有的地方乾脆推倒重來。他們沒有嚴密的組織,只有大體的分工。隨時有人在使用教堂,給他們提出各種意見。他們建的教堂已經足夠好,他們建的教堂一直沒有竣工,會一直修建下去。

Eric Raymond這個人不得不提,早年和斯托曼博士一起共事,還幫斯托曼博士修改過Emacs的程式碼。他比寫程式更擅長的是演講和寫文章。《大教堂與集市》是開源文化的扛鼎之作。斯托曼博士是開源運動的精神領袖,Raymond是開源運動的佈道師和理論家。

六、Linux各種發行版

一邊GNU專案為核心苦苦掙扎,一邊Linux核心專案橫空出世,這不天作之合麼?不錯,手快的人來不及同情斯托曼博士的痛苦,把GNU一大堆專案和Linux攢在一起搞了個新系統,GNU/Linux。

好了,終於大家可以拿去用了,可以用一個完全免費、原始碼開放的系統了。

今天很多人把使用的系統叫Linux,很不公平,是對GNU工作的漠視。正確的叫法是GNU/Linux。

有了GNU/Linux還不是一切,只能是一個基礎的作業系統,要想用得更好還缺很多軟體。就像有了Windows系統,沒有Word,沒有Excel,沒有瀏覽器,沒有遊戲,可乾的事並不多。

所幸的是GNU/Linux誕生的年代,已經有了很多優秀的開源專案,他們和GNU無關,有的是個人開發,有的是組織開發,都遵循免費開源的理念。這些開源專案有Apache、Perl、Python、Vim、TeX等等。

攢系統的人乾脆一股腦攢了起來,就是所謂的GNU/Linux的發行版。最早攢GNU/Linux系統的公司是Redhat,後來陸續一大堆GNU/Linux的發行版,Slackware、Mandrake、Gentoo、Debian、Ubuntu等等。有的已經死了,有的還活得挺好。

所謂GNU/Linux發行版,就是攢好的一套GNU/Linux。選用GNU專案中的基礎軟體,加上Linux核心,再找一堆開源免費,版權協議許可的軟體,最後做個安裝程式,就齊活了。更好的發行版大體就是考慮的更周全些,軟體包的更新、安裝、解除安裝更方便些。

能不能自己動手攢一個GNU/Linux的發行版?當然可以,Linux From Scratch,網上的一個專案,教你一步一步從頭打造一個屬於自己的GNU/Linux發行版。

2002年,南非商人Mark Shuttleworth花了兩千萬美金,搭乘俄羅斯的宇宙飛船去了一趟太空。次年,他成立了Canonical公司,致力於開源文化的推廣,推出了GNU/Linux發行版Ubuntu。有錢人辦事就是不一樣,Ubuntu做得太好了,GNU/Linux使用者紛紛投靠,Ubuntu基本一統GNU/Linux發行版的江湖。

五、GNU/Linux和開源文化的背後

GNU/Linux來了雖然沒成為大多數人電腦裡的系統,但每個人都離不開它。諸多網際網路公司的伺服器裡都跑著GNU/Linux,名單不完全確認,Google、Facebook、淘寶、百度、騰訊、小說閱讀網等等。

大多人使用的安卓手機的系統也是基於Linux核心。

GNU/Linux的繁榮有巨集偉的規劃,有個人的努力,也有很多無形的力量在起著作用。

沒有Unix就沒有GNU/Linux,是Unix給予了偉大的啟示。

沒有C語言就有沒有GNU/Linux,C語言簡單,優雅,介於高階語言和低階語言之間,開發系統軟體的首選程式語言。

沒有一系列Unix標準的制定就沒有GNU/Linux的繁榮。標準就是“車同軌、書同文、統一度量衡”,秦始皇可算最早的標準制訂者。遵循Posix標準為GNU/Linux發展鋪平了道路。

沒有網際網路就沒有GNU/Linux,GNU/Linux不是一個人在開發,是全球無數人協作的結果。如果沒有網際網路實在不可想象。當然,GNU/Linux也反哺了網際網路,無數網際網路公司採用GNU/Linux搭建伺服器,GNU/Linux也促進了網際網路的繁榮。

沒有斯托曼博士的努力,就沒有GNU/Linux。他的功勞不僅是建立GNU組織,也不僅是編寫Emacs、GCC、GDB,他的精神感召著無數人為開源運動做貢獻。

當然還有Raymond的振臂高呼,搖旗吶喊。

還有GNU/Linux誕生之前就開發開源專案的人和組織。Larry Wall因為懶,整天被報表搞得焦頭爛額,釋出了Perl語言;高德納教授因為對排版工人不滿意,十年時間停止重要工作,發明了偉大的排版軟體TeX;Guido為了打發聖誕節的無聊,編寫了新的指令碼語言Python……

GNU/Linux釋出之後,在前輩們的感召下無數人接受了開源的思想和理念,接受了開源文化的洗禮,興起了開源文化運動。無數為開源專案做出貢獻的人和組織,他們釋出了PHP、MySQL、Ruby、Node.js、X.Org、Gnome、KDE……他們豐富了GNU/Linux,他們進一步推動了開源文化運動,他們繼續感召著別人。

KDE(Kool Desktop Environment)的初衷是想開發一套易用的桌面系統。Windows系統就是一種桌面,使用方便,不是像程式設計師整天對著黑乎乎的螢幕工作。桌面系統要有瀏覽器,他們就分了一個小組KHTML來開發瀏覽器。全世界能開發瀏覽器核心的也沒幾家,KDE做到了。後來蘋果公司和微軟鬧彆扭,想自己開發瀏覽器,就是在KHMTL的基礎之上開發了自己的瀏覽器Safari。KHTML的瀏覽器核心模組叫Webkit。Google推出安卓手機時瀏覽器也是基於Webkit開發的。

今天的iPhone手機和安卓手機的瀏覽器都是Webkit核心。

各種版權許可協議的制訂也為GNU/Linux的發展鋪平了道路,其中就有GNU的GPL、LGPL,還有Apache License、BSD協議。不可能每個人都有一套自己開源協議專案的版權協議,已經制訂好的版權許可協議使得軟體更好地傳播。

其實開源並非自由,有人說GPL是用自由抹殺自由。GPL許可要求任何含有GPL許可的軟體釋出時必須開放原始碼。BSD和Apache License相對比較寬鬆,算是準自由軟體。

版本管理軟體對GNU/Linux的發展和開源文化運動也功不可沒。Linux核心開發起初使用的是商用版本管理軟體,某天Linus Torvalds先生不開心了,就自己動手搞了一個。他好取自嘲調侃的名字,命名為Git,意為沒什麼用的東西。

Git可不是沒什麼用,太好用了,Linux核心原始碼從此都用Git管理。Git免費、開源,Git成就了一家偉大的網站github.com,偉大的原始碼專案託管網站。很多開源專案紛紛把原始碼託管到了Github上。

GNU/Linux不朽,開源運動不朽!

作者劉軍民,主頁http://www.jianshu.com/users/98212189b0d9/latest_articles