開源世界的愛恨情仇

2023-02-07 12:01:12

開源系統和工具在我們生活中扮演著越來越重要的角色,作為一個軟體開發人員,不可避免的會與各種開源環境打交道,今天就大體介紹一些開源世界中如雷貫耳的名詞到底是什麼意思,有什麼關係,這些提到的產品,也是開源世界的根基。

Multics ("Multiplexed Information and Computing Service") 1964

由MIT (Project MAC with Fernando Corbató), General Electric, Bell Labs一起開發的一款作業系統。目的是為了研發一種可以更多人在同一個電腦上同時使用的分時系統。不過由於設計過於複雜和超前,導致產品遲遲無法落地。貝爾實驗室在後續的研發中選擇退出。最終Multics還是研發成功了,但是並不是一款流行的產品。

Bell Labs 貝爾實驗室

在技術領域,大家肯定都聽說過,因為它研發了太多奠定了當今科技的產品:radio astronomy, the transistor, the laser, the photovoltaic cell, the charge-coupled device (CCD), information theory, the Unix operating system, and the programming languages B, C, C++, S, SNOBOL, AWK, AMPL。並且獲得了9次諾貝爾獎。

AT&T American Telephone and Telegraph Company 美國電話電報公司

貝爾實驗室屬於AT&T,AT&T大家也很熟悉,很多IEEE的行業規範都是由AT&T參與制定的。

Unix

貝爾實驗室退出Multics後,參與研發的Ken Thompson(業界大佬)為了正常執行自己的一款遊戲著手開發一個新的系統。隨著Ken Thompson的開發,Dennis Ritchie(另一個大佬)等人也加入了其中。他們吸取了Multics的教訓,一開始儘可能簡潔(這也是Unix哲學的一部分),很快做出了第一版。

C programming language

Unix第一版是用組合完成的,開發和移植都很不方便,他們準備找一個新的語言來代替組合。一開始嘗試了Fortran,但是並不能滿足要求,於是在Fortran的基礎上建立了B語言,但是B語言還是不夠完美,最後在B語言的基礎上建立了大名鼎鼎的C語言。由於C語言是Brian Kernighan和Dennis Ritchie創造的,所以也被叫做K&R C。

Unics (Uniplexed Information and Computing Service)

一開始Unix的名稱是Unics,是對Multics一種調侃,但是後來大家覺著沒人會記著這個名字,所以就改為Unix。

發展

Unix很快獲得了成功,AT&T意思到Unix的價值,開始售賣Unix版權,所以市面上出現了一大堆移植的系統:University of California, Berkeley (BSD), Microsoft (Xenix), Sun Microsystems (SunOS/Solaris), HP/HPE (HP-UX), and IBM (AIX)。這也為後來的Unix wars和Linux的出現埋下了伏筆。

Berkeley Software Distribution BSD

這是一個很重要的Unix分支,伯克利(全球頂尖學府,計算機領域也是名列前茅)拿到Unix後,在其基礎上做了各種開發,然後釋出了一個開源的BSD版本。由於其他的很多版本都是付費的,所以BSD的衍生品比較多,比如FreeBSD, OpenBSD, NetBSD, DragonFly BSD, Darwin, and TrueOS。

TCP/IP

1989年,伯克利同意把為BSD開發的TCP/IP相關的程式碼公開,推動了TCP/IP協定的傳播。很多公司這時把TCP/IP相關的功能增加到了自己的系統中,包括IBM,微軟(Windows 95)

FreeBSD

FreeBSD是BSD的一個比較重要的分支,由於其人性化的協定,很多功能或者核心模組被各大公司廣泛利用,其中比較有名的有蘋果的macOS和iOS;Playstation的Orbis OS和Nintendo Switch的Horizon。

Unix wars

隨著Unix的流行,Unix的碎片化也越來越嚴重,大家拿到Unix授權後,在原有的程式碼基礎上分別開發自己的功能,隨著時間的推移,差異越來越大,並且這時候AT&T想收回Unix進行統一,而以BSD為代表的開源組織卻非常痛恨這種行為,就導致了Unix的紛爭。

AT&T依靠自己的強大背景和實力,與IEEE一同推出了用於統一Unix系統的Portable Operating System Interface (POSIX)。POSIX的目的是好的,便於大家統一介面,方便軟體開發移植,但是當時的目的是AT&T為了獨攬Unix的商業價值。

這場版權爭端經歷了好多年,最後Unix版權兜兜轉轉到了Novell手中,Novell選擇結束與BSD的官司,只是要求BSD刪除原始Unix的程式碼,允許BSD繼續發行。由於最開始Unix內容比較少,BSD基本沒做太多修改,只刪除了少部分程式碼,作為一個重要的Unix分支延續下來。

System V

為了統一Unix市場,AT&T推出了System V系統,這也是Unix的一個重要分支。因為其各方面也很優秀,並且由AT&T做背書,很多公司為了避免在Unix wars中被牽扯進來,選擇使用System V作為開發版本,也衍生出多個商用閉源版本HP-UX, IBM AIX, Solaris, Xenix。

Unix-like operating systems 類Unix作業系統

繼承Unix設計,一定程度上遵循POSIX協定,都屬於類Unix系統。目前市面上,除了Windows,常見到的作業系統基本上都是類Unix作業系統,比如BSD、System V、GNU/Linux。目前UNIX商標已經歸屬於The Open Group,The Open Group提出了一個協定Single UNIX Specification,只有完全通過該協定的稽核,The Open Group才會准許該產品中使用UNIX。市面上絕大部分發行版並不能通過Single UNIX Specification,所以都不能在系統名稱中使用UNIX,只能叫做類Unix系統。

GNU GNU's Not Unix! September 27, 1983

從GUN的名字也能看出,當時的出現是為了抵制Unix。Unix的出現極大的推動了計算機領域的發展,但是由於Unix wars導致當時的很多技術大佬對此很不滿,這其中就包括了Richard Stallman。Richard Stallman建立GNU的主旨就是讓人們可以自己完全控制在自己電腦上執行的各種軟體包括作業系統:釋出原始碼,可以下載、編譯、學習、修改。Richard Stallman的提議得到了很多人的響應,很多工具被開發出來,包括大家熟知的:Emacs, bash, GCC, GDB, make等。

Copyleft 反著作權

這個很明顯是針對於Copyright(著作權)。Copyleft意思是任何人可以基於任何目的對著作品進行修改使用釋出等。

GNU General Public License GPL

這是大家在Linux下或者開源界最常見到的一個協定,它就是Copyleft的一個範例,由Richard Stallman編寫。總體思想就是使用該協定釋出的程式碼,允許任何人修改、允許任何方式收費(但是必須讓付費者知道這是一個免費開源的產品)、但是使用GPL協定釋出的程式碼也必須遵循GPL協定開源。

GPL協定是一個非常自由的協定,極大的方便了技術的傳播,也是針對當時Unix wars最大的諷刺。但是由於GPL中比較重要的一點是如果以釋出為目的使用修改了GPL協定的程式碼,你的程式碼也必須遵循GPL協定。如果只是使用了一個GPL協定的功能,其他所有的程式碼都要開源,這對商業公司來說是不可接受的。

GPL是一個非常理想的協定,也是GNU組織的初衷,就是技術無國界,大家靠著對技術的熱愛進行分享和學習。很多技術大佬(真正的Hacker)都是偏執狂,對技術有著絕對的熱愛,任何東西都需要自己瞭解和掌控,不允許私人或者某個組織公司獨自擁有一個好的產品。

除了GPL,還有很多其他協定,我們比較熟悉的LGPL, MIT, BSD, Apache等,有些協定對商業是比較友好的,比如可以使用二進位制(類庫的形式)而不需要開源,或者可以任意使用原始碼用於開源或者商業用途而不受任何限制。

GNU Hurd GNU組織開發的系統核心

GNU最終也是想建立一個類Unix的系統,周邊的工具都完成了,只差一個核心,但是GNU自家的核心Hurd一直不能滿足要求,這時Linux流行了起來。

Linux

實際上應該稱為Linux kernel,而市面上熟知的Linux系統,正確的應該稱為GNU/Linux,這也是GUN組織一直強調的。

Unix流行其間,大家都在使用這個系統,也包括Linus Torvalds。但是Linus Torvalds使用的Unix版權過期了,這時Linus Torvalds想能否重新編寫一個類Unix系統,完全從頭開始,按照Unix的設計思路開發功能,程式碼與Unix沒有任何關係,所以就在網路上釋出了自己的想法,需求其他人的幫助。

Linus Torvalds的提議得到了很多人的響應,所以在Linus Torvalds的帶領下一個成熟的系統核心很快就完成了迭代,可能它功能並沒有當時的Unix那麼完善,但是它已經可以用了。

Linux僅僅是一個核心,並不能是一款真正的系統,而這時的GNU組織看上了這一點(因為GNU現在只差一個核心),由於Linux又是GPL協定釋出的,所以兩邊一拍即合,在很多人的努力下,把GNU和Linux kernel整合到一起,一個完整的GNU/Linux系統就誕生了。從這裡可以理解為什麼市面上的Linux釋出版本要叫GNU/Linux了吧,這也是為什麼GNU強調必須叫GNU/Linux,而不能因為一個核心把自己的功勞全佔了單單叫做Linux。如果你仔細觀察,會發現常見的Linux發行版本官方介紹的時候都會說是GNU/Linux。

由於Linux kernel是開源的,所以任何人和公司都可以拿來使用,這也湧現了大量的Linux發行版本:Debian, Ubuntu, CentOS, Red Hat Enterprise Linux。雖然Linux kernel是GPL協定,但是基於Linux kernel開發的其他元件,比如桌面系統KDE, GNOME確可以以其他協定釋出,因為他們並沒有修改使用Linux kernel,僅僅是遵循了Linux kernel的介面協定,這也是很多商業公司可以存活的原因。同樣由於這個原因,也導致了Ubuntu可以基於Debian開發,CentOS可以基於商業軟體Red Hat Enterprise Linux,因為上游基於GNU/Linux,有些東西必須是開源的,而大公司或者一個成熟的社群的核心版本肯定是穩定的,其他社群或者組織就可以拿來在其基礎上繼續開發。而像Red Hat Enterprise Linux或者Ubuntu賣的是他們的服務,首先系統越來越複雜,各種安裝的軟體漏洞等需要人維護,系統出現問題需要人調查,一個公司是沒有這個精力和能力做這些事情的,如果有,它就可以經營一家類似於Red Hat的公司而不需要繼續現在業務了。

KDE GNOME

KDE(K(ool) Desktop Environment)是第一個Linux上的高階的桌面環境,但是是基於當時的商業軟體Qt(雖然後來也開源了)開發的。GNU組織不能接受商業軟體的使用,於是就研發了GNOME(GNU Network Object Model Environment)。這也是當前Linux桌面環境最流行的兩個,還有一些其他的比如Xfce, MATE等。

Android

基於Linux kernel修改的作業系統。現在智慧手機的兩大陣營基於Linux kernel的Android和當時基於Unix的iOS。

總結

隨著Linux的流行,Unix的市場被迅速擠壓,如果沒有Unix wars或者Unix選擇開源,Linux也有可能不會出現(這也是Linus Torvalds表達過意思),GNU組織也有可能不會創立。Unix一直是一個優秀的系統,其上面的很多設計到現在都不過時,有些功能可能比Linux還要先進,比如Kqueue和Linux的epoll。

GUN/Linux的釋出與Windows和Unix是有區別的,Windows是整個系統釋出,核心和GUI是配套的,Unix也是(比如macOS),從來沒有過Windows釋出一個核心,然後介面可以有很多選擇(類似於GNOME和KDE)。所以Linux的系統理論上比Unix更加碎片化(同樣也更加繁榮)。

https://en.wikipedia.org/wiki/Multics
https://en.wikipedia.org/wiki/Bell_Labs
https://en.wikipedia.org/wiki/AT%26T_Corporation
https://en.wikipedia.org/wiki/Unix
https://en.wikipedia.org/wiki/C_(programming_language)
https://en.wikipedia.org/wiki/Berkeley_Software_Distribution
https://en.wikipedia.org/wiki/Internet_protocol_suite
https://en.wikipedia.org/wiki/GNU_Project
https://en.wikipedia.org/wiki/GNU_General_Public_License
https://en.wikipedia.org/wiki/Linux
https://www.gnu.org/
https://www.kernel.org/