你知道Linux開源軟件的過去嗎
今日,Linux以及開源軟件已經占有了大部分公司的服務器。但是,和我一批差不多剛剛進入軟件職業幾年的程序員來說,咱們現在只能被迫的承受和運用這些東西,如果不認真廣泛的查找一大堆材料,咱們真的很難了解它們的曩昔……
試問,你不了解它的過去,你怎么參與到它的未來呢?
概述
我們真的離美國、離硅谷、離那些不算遙遠“激情燃燒的歲月”太遠了!
今天,我要嘗試去發掘那些過去,認真了解我們眼前的自由軟件是如何走到今天的。
一切就緒,從哪里開始呢?
如果按照時間線顯然會太雜亂了,我想,按照幾個關鍵詞會是比較好的方式。
一. UNIX
接上篇《C語言、編程語言發展史》 所述,在貝爾實驗室 中由于近似好奇或興趣的驅動,UNIX被創建了出來。
- 發展壯大
此后的10年,UNIX在學術機構和大型企業中得到了廣泛的應用,當時的UNIX擁有者at&t公司以低廉甚至免費的許可將UNIX源碼授權給學術機構做研究或教學之用,許多機構在此源碼基礎上加以擴充和改進,形成了所謂的“UNIX變種”,這些變種反過來也促進了UNIX的發展,其中最著名的變種之一是由加州大學伯克利分校開發的伯克利軟件套件(Berkeley Software Distribution,BSD)產品。
- 版權之爭
后來at&t 意識到了UNIX的商業價值,不再將UNIX源碼授權給學術機構,并對之前的UNIX及其變種聲明了版權權利。BSD在UNIX的歷史發展中具有相當大的影響力,被很多商業廠家采用,成為很多商用UNIX的基礎。其不斷增大的影響力終于引起了at&t 的關注,于是開始了一場持久的版權官司,這場官司一直打到at&t 將自己的UNIX系統實驗室賣掉,新接手的Novell采取了一種比較開明的做法,允許柏克萊分校自由發布自己的UNIX變種,但是前提是必須將來自于AT&T的代碼完全刪除,于是誕生了4.4 BSD Lite版,由于這個版本不存在法律問題,4.4 BSD Lite成為了現代柏克萊軟件包的基礎版本。盡管后來,非商業版的UNIX系統又經過了很多演變,但其中有不少最終都是創建在BSD版本上(Linux、Minix等系統除外)。所以從這個角度上,4.4 BSD 又是所有自由版本UNIX的基礎,它們和System V及Linux等共同構成UNIX操作系統這片璀璨的星空。
總結以上,也就是說:現在的UNIX和類UNIX分為3類:
- 正統UNIX
System V,商業、收費的; - 類UNIX - BSD衍生版本
非商業,大部分免費; - 類UNIX - Linux和其它
非商業,大部分免費;UNIX/類UNIX 發展歷史(截止2007年) - Wikipedia
UNIX規范
- POSIX
Portable Operating System Interface of UNIX,POSIX(UNIX的可移植操作系統接口)。見名知意,POSIX是一種統一UNIX操作系統接口的規范。
當前的POSIX主要分為四個部分:Base Definitions、System Interfaces、Shell and Utilities和Rationale。
Linux基本逐步實現了POSIX兼容,但沒有參與正式認證。微軟的Windows NT聲稱部分實現了POSIX標準。
- 單一UNIX規范
單一UNIX規范(Single UNIX Specification): 是一套UNIX系統的統一規格書,它擴充了POSIX,定義了標準UNIX操作系統。
當前,只有符合單一UNIX規范 的UNIX系統才能稱為UNIX系統,否則只能稱為類UNIX(UNIX-like)。
單一UNIX規范 的歷史:
- 1980年代中,開始有人提出計劃,想要統一不同UNIX 操作系統的接口。
- 1988年,這些標準被匯整為IEEE 1003(ISO/IEC 9945),也就是POSIX。
- 1990年代,發布共通應用程序界面規格(Common API Specification),又稱為Spec 1170。
- 1997年,單一UNIX規范第二版(Single UNIX Specification version 2)。
- 2001年: POSIX:2001, 單一UNIX規范第三版。
- 2004年:POSIX:2004。
- 2008年:POSIX:2008。
符合規范的UNIX(可以自稱UNIX系統)有:
- AIX
- HP/UX
- OS X ( 原 Mac OS X )
- Reliant UNIX
- SCO
- Solaris
- Tru64 UNIX
- z/OS
- K-UX
二. Stallman&自由軟件運動
1. 自由軟件運動 - free software
這個運動是什么?為什么會產生這種運行呢?
- 二十世紀六十年代,IBM 等公司所開發的軟件都是自由分發的。那個時候的商業模式都是以硬件為中心,軟件只是被看作使硬件工作的東西。他們提供軟件的同時也提供源代碼,軟件可以被修改并因此得到改進,這便是現在開源軟件的早期情況。
- 但是,隨著硬件價格的不斷下跌,銷售硬件的利潤也逐漸減小,制造商開始期望軟件能夠帶來額外的收入。越來越多的廠商開始單獨銷售軟件,也不再提供軟件的源代碼。
- 1983年春天,Richard Matthew Stallman,這位曾經在 MIT 人工智能實驗室工作的程序員,發起了 GNU 項目,旨在開發一個自由的類 UNIX 的操作系統。他為專有軟件的增長和隨之而來的用戶不再能夠修改他們電腦上的程序而憂心忡忡。軟件開發者被束縛,有悖自由精神的現象隨之普遍發生。GNU 項目的創立,標志了自由軟件運動的開始,隨后的 1985年10月,Stallman 又創立了自由軟件基金會(Free Software Foundation, FSF)。
需要明白的是(以下是Stallman原話的中譯):
“自由軟件”是權利問題,不是價格問題。要理解這個概念,自由應該是“言論自由”中的“自由”,而不是“免費啤酒”中的“免費”。
自由軟件關乎使用者運行、復制、發布、研究、修改和改進該軟件的自由!
2. Stallman
理查德·馬修·斯托曼(Richard Matthew Stallman RMS,1953-今)是自由軟件運動的精神領袖,GNU計劃以及自由軟件基金會(Free Software Foundation)的創立者、著名黑客。他被尊稱為:rms。
他的主要成就包括Emacs及后來的GNU Emacs,GNU C 編譯器及GNU 除錯器。 他所寫作的GNU通用公共許可證(GNUGPL)是世上最廣為采用的自由軟件許可證,為copyleft觀念開拓出一條嶄新的道路。他最大的影響是為自由軟件運動豎立了道德、政治以及法律框架。他被許多人譽為當今自由軟件的斗士、偉大的理想主義者,但同時也有人批評他過于固執、觀點落伍。
Stallman個人履歷:
- 1953年斯托曼出生于美國紐約曼哈頓地區;
- 1971年進入哈佛大學學習,同年受聘于麻省理工學院人工智能實驗室(AI Laboratory),成為一名職業黑客。 在AI實驗室工作期間,斯托曼開發了多種今后影響深遠的軟件,其中最著名的就是Emacs。斯托曼在AI是一名典型的黑客,是整個黑客文化的一份子。
- 1980年后,黑客社群在軟件工業商業化的強大壓力下日漸土崩瓦解,甚至連AI實驗室的許多黑客也組成了Symbolic公司,試圖以專利軟件來取代實驗室中黑客文化的產物 - 免費可自由流通的軟件。斯托曼對此感到氣憤與無奈。
- 1985年,在對Symbolic進行了一段時間的抗爭后,他最終發表了著名的GNU宣言(GNU Manifesto),正式宣布要開始進行一項宏偉的計劃:創造一套完全自由免費,兼容于UNIX的操作系統GNU(GNU’s Not UNIX!)。
- 1985年10月,他又建立了自由軟件基金會(Free Software Foundation)來協助GNU計劃。
- 1989年,他與一群律師起草了廣為使用的GNU通用公共協議證書(GNU General Public License, GNU GPL),創造性地提出了“反版權 - copyleft“的概念。 同時,GNU計劃中除了最關鍵的Hurd操作系統內核之外,其他絕大多數軟件已經完成。
- 1991年,芬蘭大學生Linus Torvalds在GPL條例下發布他自己創作的Linux操作系統內核,至此GNU計劃正式完成,操作系統被命名為GNU/Linux(或簡稱Linux)。
斯托曼是一名堅定的自由軟件運動倡導者!
與其他提倡開放源代碼的人不同,斯托曼并不是從軟件質量的角度而是從道德的角度來看待自由軟件。他認為使用專利軟件是非常不道德的事,只有附帶了源代碼的程序才是符合其道德標準的。對此許多人表示異議,并也因此有了自由軟件運動與開源軟件運動之分。
3. GNU和GPL
- GNU計劃是由Richard Stallman在1983年9月27日公開發起的。它的目標是創建一套完全自由的操作系統。Richard Stallman最早是在net.unix-wizards新聞組上公布該消息,并附帶《GNU宣言》等解釋為何發起該計劃的文章,其中一個理由就是要“重現當年軟件界合作互助的團結精神”。
可以理解GNU計劃是:開發出一個兼容UNIX接口的全新的自由的操作系統。
也就是說:此OS應該是類似UNIX的,但完全不是UNIX。
- GPL
GNU通用公共許可證(GNU General Public License,GPL),即反版權 - Copyleft 概念。
為保證GNU軟件可以自由地“使用、復制、修改和發布”,所有GNU軟件都有一份在禁止其他人添加任何限制的情況下授權所有權利給任何人的協議條款。但是GPL過于自由(嚴格),只要用到了GPL的軟件,那么自身也必須遵守GPL,這讓很多人不能接受。
承接上文所說“對此許多人表示異議,并也因此有了自由軟件運動與開源軟件運動之分”,后文會說開源軟件運動。
- GNU是“GNU is Not UNIX”的遞歸縮寫。Stallman宣布GNU應當發音為Guh-NOO(革奴)以避免與new這個單詞混淆(注:Gnu在英文中原意為非洲牛羚,發音與new相同)。
- UNIX在當時是一種廣泛使用的商業操作系統。由于GNU計劃實現UNIX系統的接口標準,因此GNU打算分別開發不同的操作系統部件。GNU計劃采用了部分當時已經可自由使用的軟件,例如TeX排版系統和X Window視窗系統等。不過GNU計劃也開發了大批其他的自由軟件。這包括了:
- Emacs:一個功能強大的文字編輯器;
- GCC:GNU Compiler Collection,GNU編譯器集合;
- 大部分的UNIX系統程序庫、工具;
- 但是,唯一沒有完成的重要組件就是操作系統的內核(正在開發,GNU稱之為HURD);
三. Linus - Linux
上文書說到:萬事俱備,只欠內核!(正在開發,此事暫時放下不表)
1. Linus - 林納斯
1991年,大洋彼岸的歐洲,芬蘭赫爾辛基,21歲的赫爾辛基大學大學生,林納斯·托瓦茨(Linus Torvalds)開始在一臺386sx兼容微機上學習Minix (也是UNIX-like)操作系統。不久之后,林納斯覺得Minix 并不好用,隨后他開始著手自己開發一個類UNIX系統。
(題外話,Git也是這guy開發的)
Linus開發的Linux履歷:
- 1991年4月13日在comp.os.minix 上發布說自己已經成功地將bash 移植到了minix 上,而且已經愛不釋手、不能離開這個shell 軟件了。
- 1991年7月3日,第一個與Linux有關的消息是在comp.os.minix上發布的(當然此時還不存在Linux這個名稱,當時林納斯·托瓦茲的腦子里想的可能是FREAX,FREAX的英文含義是怪誕的、怪物、異想天開等)。
- 1991年的10月5日,林納斯·托瓦茲在comp.os.minix新聞組上發布消息,正式向外宣布Linux內核的誕生(Freeminix-like kernel sources for 386-AT)。
- 1993年,大約有100余名程序員參與了Linux內核代碼編寫/修改工作,其中核心組由5人組成,此時Linux 0.99的代碼大約有十萬行,用戶大約有10萬左右。
- 1994年3月,Linux1.0發布,代碼量17萬行,當時是按照完全自由免費的協議發布,隨后正式采用GPL協議。
在自由軟件之父斯托曼的某些精神感召下,Linus很快將這個操作系統內核加入到了GUN 計劃中,并通過GPL授權。越來越多的全球范圍的程序員加入到開發和維護Linux的工作中來了。
2. Linux
準確來說,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基于Linux內核,并且使用GNU 工程各種工具和數據庫的操作系統。
在Linux加入GNU伊始,原UNIX內核的開發計劃并沒有改變,但是隨著Linux越來越多流行,在事實上GNU + Linux 已經成為了GNU計劃的最終產物。
- 關于Linux:
- 從技術上說Linux只是一個內核。內核 指的是一個提供硬件抽象層、磁盤及文件系統控制、多任務等功能的系統軟件。
- 一個內核并不是一套完整的操作系統。有一套基于Linux內核的完整操作系統叫作Linux操作系統,或是GNU/Linux(在該系統中包含了很多GNU計劃的系統組件)。
- 命名:
隨后,在90年代中期,斯托曼 要求Linux更名為“GNU/Linux”但鑒于當時Linux已經流行,且Linux朗朗上口簡短好記,Linux社區沒有采納這個名稱。雖然Linux內核只占此系統的3%,而GUN 的代碼占據了28%。當然,也有部分人認為操作系統 一詞就是指的內核(Kernel),而那些其他程序只能稱為應用軟件。
3. Linux distribution - 發行版
上文說到,Linux只是內核,而Linux + GNU 可以組成一個不算完全的操作系統。雖然這些都是自由軟件,但是讓用戶自己去進行所有組合和拼裝以及編譯操作還是有一定難度的。所以,出現了Linux 發行版 。
Linux 發行版(Linux distribution,也被叫做GNU/Linux 發行版),為一般用戶預先集成好的Linux操作系統及各種應用軟件。一般用戶不需要重新編譯,在直接安裝之后,只需要小幅度更改設置就可以使用,通常以軟件包管理系統來進行應用軟件的管理。
Linux發行版通常包含了包括桌面環境、辦公包、媒體播放器、數據庫等應用軟件。這些操作系統通常由Linux內核、以及來自GNU計劃的大量的函數庫,和基于X Window的圖形界面。有些發行版考慮到容量大小而沒有預裝 X Window,而使用更加輕量級的軟件,如:busybox, uclibc 或 dietlibc。現在有超過300個Linux發行版。大部分都正處于活躍的開發中,不斷地改進。
- 1995年1月,Bob Young創辦了RedHat(小紅帽),以GNU/Linux為核心,集成了400多個源代碼開放的程序模塊,搞出了一種冠以品牌的Linux,即RedHat Linux,稱為Linux Distribution - 發行版,在市場上出售。這在經營模式上是一種創舉。
- 發行版可以分為商業、社區、和非商非社版。我們聽說和使用最多的有:Red Hat、Debian、Ubuntu、CentOS等。
四. 開源軟件運動
1998年2月,以Eric Raymond為首的一批年輕的”老牛羚骨干分子”終于認識到GNU/Linux體系的產業化道路的本質,并非是什么自由哲學,而是市場競爭的驅動,創辦了Open Source Intiative(開放源代碼促進會)在互聯網世界里展開了一場歷史性的Linux產業化運動。
隨后,OSI和FSF分道揚鑣。
開源軟件(open source software),是說源代碼可以任意獲取的計算機軟件,這種軟件的版權持有人在軟件協議的規定之下保留一部分權利并允許用戶學習、修改、增進提高這款軟件的質量。
開源協議通常匹配開放源代碼的定義 的要求,如果人為設置一些源碼開放條件限制,則稱之為:公開源代碼的免費軟件(Freeware)。
1. 開放源代碼促進會
開放源代碼促進會(Open Source Initiative,OSI),是一個旨在推動開源軟件發展的非盈利組織。
1998年2月,OSI由布魯斯·裴倫思 和埃里克·斯蒂芬·雷蒙 等人創立。當時,網景公司 為了與微軟的IE競爭,將他們的旗艦產品網景瀏覽器(Navigator) 發布成自由軟件。然而隨后網景公司 還是輸掉了第一次瀏覽器大戰。
————————– 開源軟件”open-source software”一詞出自自由軟件的營銷活動中。
2. Eric Raymond
埃里克·斯蒂芬·雷蒙(Eric Steven Raymond,1957至今),是著名黑客,《大教堂與集市》作者,是開放源代碼運動的主要領導人。被稱為:ESR。
從1998年2月 - 2005年2月,雷蒙擔任OSI的主席。
雷蒙有句名言(又被稱為林納斯定律):“足夠多的眼睛,就可以讓所有問題浮現。Given enough eyeballs, all bugs are shallow”。
3. 與自由軟件區別
許多人將開放源代碼與自由軟件(free Software)視為相同,但若以定義條件而言,自由軟件僅是開放源代碼的一種,也就是自由軟件的定義較開放源代碼更為嚴格。
4. 著名開源軟件
應用軟件:
7-Zip——文件壓縮軟件。
Blender——三維繪圖及渲染軟件。
Eclipse——集成開發環境。
GIMP——GNU圖像處理軟件。
Scribus——桌面出版軟件。
Inkscape——矢量圖形編輯器。
Emacs——純文本編輯器。
Vim——純文本編輯器。
Chromium——網頁瀏覽器。
Mozilla Firefox——網頁瀏覽器。
Mozilla Thunderbird——電子郵件客戶端軟件。
NASA World Wind——虛擬地球軟件。
Open Broadcaster Software——在線直播軟件。
DocFetcher——桌面搜索軟件。
操作系統:
Android——基于Linux的操作系統。
Firefox OS——基于Linux的操作系統。
FreeBSD——類Unix的操作系統。
Linux——類Unix操作系統家族。
OpenIndiana——類Unix操作系統家族。
ReactOS——創建在Windows NT架構的操作系統。
Haiku——與BeOS兼容的操作系統。
編程語言:
Perl——一種通用的編程語言。
PHP——適用于網絡開發的編程語言。
Python——一種通用的編程語言。
Ruby——一種通用的編程語言。
Swift——一種支持多編程范式,編譯式編程語言。
服務器軟件:
Apache HTTP Server——一種網頁服務器。
Drupal——內容管理系統。
Joomla!——內容管理系統。
MediaWiki——運行于維基百科的Wiki引擎。
MongoDB——文件導向數據庫管理系統
Moodle——課程管理系統、虛擬學習環境。
Arduino——單片機微電腦,由藝術家、設計師、業余愛好者所使用。
五. License
今天存在很多的開源/自由協議,這里我們了解下最著名的4個。
- GPL(GNU General Public License)
我們很熟悉的Linux就是采用了GPL。GPL協議和BSD, Apache Licence等鼓勵代碼重用的許可很不一樣。GPL的出發點是代碼的開源/免費使用和引用/修改/衍生代碼的開源/免費使用,但不允許修改后和衍生的代碼做為閉源的商業軟件發布和銷售。這也就是為什么我們能用免費的各種Linux,包括商業公司的Linux和Linux上各種各樣的由個人,組織,以及商業軟件公司開發的免費軟件了。GPL協議的主要內容是只要在一個軟件中使用(“使用”指類庫引用,修改后的代碼或者衍生代碼)GPL 協議的產品,則該軟件產品必須也采用GPL協議,既必須也是開源和免費。這就是所謂的”傳染性”。GPL協議的產品作為一個單獨的產品使用沒有任何問題,還可以享受免費的優勢。
由于GPL嚴格要求使用了GPL類庫的軟件產品必須使用GPL協議,對于使用GPL協議的開源代碼,商業軟件或者對代碼有保密要求的部門就不適合集成/采用作為類庫和二次開發的基礎。
其它細節如再發布的時候需要伴隨GPL協議等和BSD/Apache等類似。嚴格自由:如果使用了GPL軟件那么自身也必須是GPL軟件
- LGPL(GNU Lesser General Public License)
LGPL是GPL的一個為主要為類庫使用設計的開源協議。和GPL要求任何使用/修改/衍生之GPL類庫的的軟件必須采用GPL協議不同。LGPL允許商業軟件通過類庫引用(link)方式使用LGPL類庫而不需要開源商業軟件的代碼。這使得采用LGPL協議的開源代碼可以被商業軟件作為類庫引用并發布和銷售。但是如果修改LGPL協議的代碼或者衍生,則所有修改的代碼,涉及修改部分的額外代碼和衍生的代碼都必須采用LGPL協議。因此LGPL協議的開源代碼很適合作為第三方類庫被商業軟件引用,但不適合希望以LGPL協議代碼為基礎,通過修改和衍生的方式做二次開發的商業軟件采用。
GPL/LGPL都保障原作者的知識產權,避免有人利用開源代碼復制并開發類似的產品。
弱化的GPL:可以引用LGPL軟件而不需要自身GPL/LGPL,但不能修改原LGPL軟件
- BSD License(Original、FressBSD、Original BSD)
BSD license(Berkeley Software Distribution License),是自由軟件中使用最廣泛的許可證之一。BSD軟件就是遵照這個許可證來發布,該許可證也因此而得名。BSD開源協議是一個給于使用者很大自由的協議。基本上使用者可以”為所欲為”,可以自由的使用,修改源代碼,也可以將修改后的代碼作為開源或者專有軟件再發布。
BSD 代碼鼓勵代碼共享,但需要尊重代碼作者的著作權。BSD由于允許使用者修改和重新發布代碼,也允許使用或在BSD代碼上開發商業軟件發布和銷售,因此是對商業集成很友好的協議。而很多的公司企業在選用開源產品的時候都首選BSD協議,因為可以完全控制這些第三方的代碼,在必要的時候可以修改或者二次開發。
可以隨意使用,僅需要包含原軟件BSD License即可
- Apache Licence 2.0(Apache License, Version 2.0、Apache License, Version 1.1、Apache License, Version 1.0)
Apache Licence是著名的非盈利開源組織Apache采用的協議。該協議和BSD類似,同樣鼓勵代碼共享和尊重原作者的著作權,同樣允許代碼修改,再發布(作為開源或商業軟件)。需要滿足的條件也和BSD類似。Apache Licence也是對商業應用友好的許可。使用者也可以在需要的時候修改代碼來滿足需要并作為開源或商業產品發布/銷售。
類似BSD License
六. 總結
如上所述,軟件行業的版權發展思路就是如下三種:
- Copyright - 完全限制
要遵守限制重重的著作權 - Copyright。 - Copyleft - 完全自由
帶有基于政治(是類似言論自由這種)以及哲學思想的理想主義方式。如GPL,必須完全自由,只要跟GPL有關系就必須也是GPL。 - Copycenter - 開放
如BSD License,BSD的后續版本可以選擇要繼續是BSD或其他自由軟件條款或封閉軟件等等。
這三種思路現在都各有各的發展,都有其適用情況。
對商業公司來說Copyright 是商業必須!
對自由軟件運動斗士和生來就有自由基因的軟件來說Copyleft 是一種信仰!
對開源擁護者,但也想獲得商業利益的人來說Copycenter 是最好的選擇!