本文要說的是一個傳奇人物————Richard Matthew Stallman,就是下圖里這位不愛刮胡子的大叔。
Richard Matthew Stallman,1953年出生在美國紐約曼哈頓地區(qū)。在他生命的前十幾年中,他并沒有表現(xiàn)出什么過人的地方,但那是因為他沒遇到一個叫做電腦的東西。
1 快樂的自由
高中的一個暑假,他去給IBM
打工,花了兩周的時間用Fortran
語言編了一個數(shù)據(jù)處理的程序。這是他第一次接觸計算機,或許就是這次相遇,確定了他未來行走的方向。1971年,他考上了哈佛大學(xué),上學(xué)的同時,他還受聘于麻省理工學(xué)院的人工智能實驗室,成為了一名職業(yè)黑客(黑客這個詞沒有貶義)。在人工智能實驗室期間,他可沒少干活,開發(fā)了很多有用的軟件,其中最著名的就是Emacs
編輯器。Emacs
是一個可與Vi
相抗衡的強大的編輯器。兩者的操作方式完全不同,但同樣強大,各自用自己獨有的方式,提高著人們的編輯效率。直到今天,仍然有人爭論到底Emacs
好還是Vi
好,信奉Emacs
的人和信奉Vi
的人形成了兩個幫派,這兩個幫派經(jīng)常在互聯(lián)網(wǎng)上用鼠標鍵盤相互灌水拍磚,拼個你死我活。哦,扯遠了,咱還回來說Stallman
。
那時候的Stallman
在人工智能實驗室里工作得非常愉快,大家有BUG
同當,有代碼共享。那時候的軟件工程師的世界,是一個“人人為我,我為人人”的理想世界。因為最初的計算機軟件沒有什么開源不開源的概念,那時候的軟件天生就是自由的!賣計算機的同時會附帶軟件,包括軟件的源代碼和文檔。計算機廠商賣的主要是計算機的硬件,軟件只是附屬品而已。用戶可以根據(jù)自己的需要去修改軟件,與別人分享軟件。總之,軟件是用戶花錢買硬件時附帶著買來的,用戶想怎么玩就怎么玩。軟件開發(fā)者的目的,也不是靠軟件賺錢,而是靠軟件支撐起硬件的功能,然后靠賣硬件賺錢。
2 自由逐漸遠去
然而隨著技術(shù)的發(fā)展,軟件逐漸脫離硬件成為一個獨立的產(chǎn)業(yè),很多軟件慢慢地只提供二進制代碼而不提供源代碼了,這就意味著你不能修改它,并且多數(shù)軟件還規(guī)定最終用戶沒有二次分發(fā)的權(quán)利。也就是說,這東西你買了,只能你用,你再給別人就不行!這就好像我買了把菜刀,然后賣菜刀的告訴我“你這把菜刀不許借給你的鄰居用,也不許私自給菜刀換刀把,否則我就告你!”
Stallman
當時就遇到了類似這樣的菜刀問題。那時候,他們實驗室買的第一臺打印機附帶有驅(qū)動程序的源代碼。他們那的黑客們可以隨意修改這個驅(qū)動,根據(jù)自己的需要添加些小功能,改改BUG
之類的,這為他們的工作帶來了很大的方便。后來,實驗室又買了一臺激光打印機,這次廠商只提供了二進制的打印機驅(qū)動程序,它是實驗室里僅有的一個沒有源代碼的軟件。Stallman
很不喜歡這樣的產(chǎn)品,然而他沒有選擇,只能沉默。
后來出于工作的需要,Stallman
想修改一下這個驅(qū)動程序,但是不行,沒源代碼啊。Stallman
聽說卡內(nèi)基·梅隆大學(xué)有這個打印機的驅(qū)動程序源代碼,他就去了那里,跟他們套近乎:“那啥,大家都是道上混的,誰還沒個"馬高蹬短"的時候?是兄弟的拉哥們兒一把,我也沒啥事兒,就是我們那打印機老丟字,老把一些關(guān)鍵的字打成口口,我估計是驅(qū)動的問題,聽說你們這有這驅(qū)動的源代碼,能不能給我拷一份?”對方辦事效率還是挺高的,很干脆地拒絕了他。因為他們和廠商簽署了一份保密協(xié)議,協(xié)議要求他們不能向別人拷貝源代碼。Stallman
頓時感到他們背叛了自由的計算機社團,他非常生氣,但是他沒有辦法改變什么,只好又選擇了沉默。
這只是一件小事,只是一個時代的縮影。那個時代,正處在軟件向私有化轉(zhuǎn)變的過程中,也是軟件逐漸商業(yè)化的過程。越來越多的軟件選擇了不開放源代碼,不允許二次分發(fā)的發(fā)布方式。Stallman
身邊的同事,一個一個地跑到開發(fā)私有軟件的公司去打工了,他們不再相互分享,不再相互交流。Stallman
問:“你們那軟件的查找算法做得不錯啊,怎么實現(xiàn)的?”“對不起,無可奉告?!薄澳銈兊奈臋n工具效率挺高啊?!薄皩Σ黄?,商業(yè)機密?!薄鎸@一切,Stallman
又能說什么呢?他還是只有沉默。
3 不在沉默中爆發(fā),就在沉默中滅亡
Stallman
爆發(fā)了!他不能容忍軟件世界里清新自由的空氣被私有軟件污染;他不能容忍被剝奪按照自己的需求修改軟件的權(quán)利和樂趣;他不能容忍自己買條皮帶尺寸不夠時,自己竟然連在上面多打個洞的權(quán)利都沒有!于是,他就爆發(fā)了。
他要重現(xiàn)當年那“人人為我,我為人人”的合作互助的軟件世界;他要把使用、復(fù)制、研究、修改、分發(fā)軟件的權(quán)利還給軟件世界的每一個人民;他要用自己的行動告訴人們,軟件天生就該是自由的!
他要開辟一個新的世界,哪怕是一個人在戰(zhàn)斗!于是,一個宏偉的計劃——GNU
計劃在他心中產(chǎn)生了。它的目標是創(chuàng)建一套完全自由的操作系統(tǒng)。因為操作系統(tǒng)是電腦中最重要、最基礎(chǔ)的軟件,要創(chuàng)造自由的軟件世界,自然先要有一套自由的操作系統(tǒng),然后再以此系統(tǒng)為中心,開發(fā)各種各樣自由的軟件。1983年,Stallman
在net.unix-wizards
新聞組上公布了GNU
計劃,這個計劃的標志是一頭角馬(也就是非洲牛羚),就是下圖所示的這個。
提示:*GNU
是 “GNU is Not UNIX
”的遞歸縮寫,Stallman
表示這個詞應(yīng)該讀作/'gnu:/
(發(fā)音類似“革奴”),以區(qū)別于表示非洲牛羚的單詞gnu
(發(fā)音與“new”相同)。
這個計劃要創(chuàng)造一套自由的類UNIX
操作系統(tǒng)。系統(tǒng)本身及系統(tǒng)上的軟件都是自由軟件,它們可以被免費獲取,隨意使用、修改和再分發(fā)。并且每個人都可以獲得這個系統(tǒng)全部的源代碼,每個人都可以為完善這個系統(tǒng)作出自己的貢獻。這個系統(tǒng)要使用與UNIX相同的接口標準,這樣,就可以由不同的人,分期分批地創(chuàng)作操作系統(tǒng)的不同部分而不必擔心相互之間協(xié)同工作的問題。
4 實現(xiàn)GNU夢想
為了實施GNU
計劃,1985年,Stallman
又創(chuàng)建了自由軟件基金會?;饡闹饕ぷ骶褪菆?zhí)行GNU
計劃,開發(fā)更多的自由軟件。1989年,Stallman
與基金會的一群律師們起草了廣為使用的《GNU通用公共協(xié)議證書》也就是GPL協(xié)議
,以此協(xié)議來保證GNU
計劃中所有軟件的自由性。到了1990年,GNU
計劃中的這個系統(tǒng)已經(jīng)初具規(guī)模,有了很多優(yōu)秀的軟件。其中有很多是世界各地的黑客們無償提供的,也有一部分是利用自由軟件基金會的基金雇用程序員來開發(fā)的,當然,Stallman
自己也身先士卒,開發(fā)了Emacs
、GCC
、GDB
等重要軟件。當他看著這些豐富的自由軟件的時候,感覺到那清新自由的空氣,終于又回來了,以后,人們就可以擁有一個可以自由使用、自由修改、自由分發(fā)的、自由的操作系統(tǒng)了!不過等一下,好像還差點什么,哦,還……差個內(nèi)核吧。
作為一個系統(tǒng),沒有內(nèi)核是不行的,這么重要的部件Stallman
當然不會忘記,所以才會有Hurd
內(nèi)核。這個內(nèi)核被設(shè)計為一個遵守POSIX
標準的微內(nèi)核。所謂微內(nèi)核,是相對于宏內(nèi)核來說的。宏內(nèi)核就像我們現(xiàn)在的Linux
內(nèi)核,是一個獨立的程序,里面包含了進程管理、內(nèi)存管理、文件管理等功能。而微內(nèi)核則將一個內(nèi)核需要的功能盡量地簡化并且拆分,運行起來是幾個獨立的程序,有的專門負責進程管理,有的專門負責內(nèi)存分配。內(nèi)核是一個系統(tǒng)的核心,所以至關(guān)重要,Stallman
對Hurd
的開發(fā)也是精益求精,非常謹慎,以至于內(nèi)核的進度有些落后于其他的系統(tǒng)軟件,當其他軟件都已經(jīng)有比較優(yōu)秀的版本的時候,Hurd
內(nèi)核依然不能夠走出實驗室投入真正的使用。這種情況一直持續(xù)到1991年,另一位英雄的出現(xiàn)——不過,這里先賣個關(guān)子,暫且不去說他。
無論怎樣,到今天,Stallman
理想中的自由世界,終于拉開了那沉重的幕布,展現(xiàn)出了自由的光彩。而Stallman
并不滿足,也確實沒有滿足的理由,這個自由的世界還需要成長,還需要更加豐富多彩,還需要有更多的人走進這個世界中來。于是Stallman
奔走于世界各地,告訴人們有這么一個自由的世界,號召人們加入這個世界,鼓勵人們?yōu)槭惯@個世界更加自由而付出自己的力量。他是一個執(zhí)著的苦行僧,為了他的夢想,為了他的自由世界,他會一直走下去……
以上就是Linux的發(fā)展史,Stallman和他的GNU計劃。希望能擴展大家的知識面,然后對Linux有興趣的同學(xué)可以看一下教程:
Linux教程:http://hgci.cn/linux/
Linux微課:http://hgci.cn/minicourse/play/linuxcourse
Linux就該這么學(xué):http://hgci.cn/linuxprobe/