少年黑客對自由軟體的自由漫談
導讀
「天下沒有免費的午餐。」
這句話只說對了一半。對於軟體業,或者更準確一點,對於自由軟體業,這並不一直是對的。
商業軟體公司正在控制著我們 —— 普通計算機用戶甚至專業的程序員 —— 的大腦,在我們的潛意識裡面,似乎只有大公司的東西才質量好。下面是幾個場景:
- 我傾向通過收費的網課、系列視頻或者文章來學習技術,而不是閱讀軟體自帶的免費文檔或者是免費的外語甚至中文標準,因為前者更容易。
- 免費的東西都是劣質的。只有收費的東西才可以保證質量高。
- 才不會有人將優質資源公開免費,除非他們有著特殊目的。
- 大公司的軟體比一群只因為興趣愛好的人寫的軟體更穩定、更值得信賴。
絕大多數普通用戶都會認為這幾條全都是正確的,甚至一些有著幾年經驗的「高級」程序員也是。他們寧願買某公司的 IDE 來開發,而不是使用輕量級的、免費的 Vim,後者毫無疑問是大多數 UNIX/Linux 程序員的必備。
這一切的一切,都是因為:
一、奇妙的商業軟體
自從 Windows 系統成功,成功商人比爾•蓋茨就被各種各樣的人放在各種各樣的地方「膜拜」。一方面可能是因為他太有錢,一方面可能是因為他做了這麼個系統(網路上還有很多人宣稱比爾•蓋茨設計並實現了 Windows 系統)。
然而,在這個「偉大」的窗口系統死機、藍屏之時,大多數人罵的卻是他們的電腦:「什麼破電腦!見鬼!」,而不是系統(順便說一句,還有人將 「Windows」 稱作電腦)。真奇妙。
轉觀無數的 Linux 開發者(哪怕是林納斯•托瓦茲),都沒有受到這樣的待遇。
軟體是值得付錢的,連自由軟體領袖理查德•斯托曼都沒有否認這一點。但是,你真的確定那些糟糕的、動不動就「該應用程序無響應」的東西值得這麼多錢嗎?我反正覺得不是。
「某窗口系統」還有一個十分神奇之處,它好像是支持 POSIX 的,畢竟設計某新 32 位系統的時候這不就是其中一個目標嗎?(當然有的人會跟我說那應該是 ISO C)
實際上呢,好像它只支持了為數不多的幾個系統調用,剩下的幾乎都是標準庫函數(strlen
那樣的),就連基本的 POSIX 風格的 open
都沒有……
與之對比的是對各種標準都支持的 Linux。它支持全套的 POSIX (streams 除外),性能測試也不錯(當然,「某窗口系統」的裸機測試也不錯。注意,是裸機),更令人驕傲的是,優秀的進程創建以及文件系統。與此相比,窗口系統的文件系統以及進程創建就不盡人意。
- 關於對 POSIX 的支持,參見《UNIX 環境高級編程》第二章
- 關於進程創建以及 Windows 系統的相關情況,參見《操作系統概念》 第十六(Linux)以及十七章 (Windows) 以及 《Linux 內核設計與實現》第一章
我知道有些人又要說啥了:我們的安全認證等級(A1 那樣的玩意兒)比你們高!
- 關於安全等級參見《操作系統概念》 第十四章
- 這裡安全認證單單是指對文件的訪問許可權的豐富,某系統可以設置 XXX 沒法訪問之類的
這是無法避免的,傳統 UNIX 的設計就從來沒想過這一點,用戶被抽象成了 同組、擁有者以及其他(當然,root
總是有許可權)。但就我個人的觀點來說,這就足夠了,畢竟我沒見過有多少用戶會創建兩個用戶,他們甚至還在用 Administrator 或者是以一些愚蠢的字元為名字,例如 「abc123」。
再來看看軟體。
二、設計哲學 (當然不是
「某窗口系統」的軟體挺多,包括 IE 這樣的令人頭疼的瀏覽器(哦不,它已經被放棄了)、各種沒人碰過的遊戲以及一大堆更沒人碰過的附件。這些是隨著系統一塊安裝上去的,想卸載必須手動,十分的麻煩。還有類似 Power Point 這樣的有用的「高級軟體」,單個軟體就包含了數不盡的功能,當然,它十分的貴。
了解 Linux 的同學大概已經知道我會說什麼了。沒錯,我要說的就是不同系統下的設計哲學。
這更是一個差距,Linux 下面的每一個軟體都平均不足 10 MB,並且都有著自己獨特的分工。wc
就是統計文本文件的、cat
就是顯示文件內容的(就是這麼簡單)、grep
就是在文件裡頭查找的,類似這樣的軟體數不勝數。利用 UNIX 的設計哲學之一 —— 管道 —— 就可以很方便的統計一個文件中含 Linux 這個詞的行數(bash 不算很精通,見諒):
$ grep "Linux" foo | wc -l
而在那個操作系統呢?你應該需要用記事本先打開那個文件,複製到另一個 .doc
文檔裡頭,然後再找一找「查找」鍵,然後按一下。或許你還需要划到最底下看一看有多少行……
那來個更難一點的呢,看一看當前目錄下所有後綴名為 .txt
的文件裡頭有多少行包含 Linux?
對 UNIX 來說小菜一碟:
$ find ./ -name "*.txt" | xargs grep "Linux" | wc -l
在另一個「偉大的系統」上呢?
我想不需要多舉例,大家就能看出來這兩個系統誰設計的更好了。
還是會有人說,這個系統本來就是給程序員用的,那個系統本來就是給普通用戶用的。的確,那為什麼你這個程序員還在用「某窗口系統」呢?
三、「真幼稚」
曾經在一個復古的群聊中,有這樣一個大佬,引用我對他的評價:
此人身高八(劃掉,七)尺,自詡風度翩翩,常以「京中美男子」而自擬。愛為人師,嘗以「全棧大佬」自號,實則不知彙編、C 為何物者也。 其曰:「僅學可令吾發家之事」。因不習 C。遇人求問,常為省流量,略回 「..」 二字,甚含深意也。 吾不與其為友,另有它故:其人曰:「C 者,垃圾也」,吾對之曰:「爾乃垃圾之中上等者也」,羞怒之下移吾出群,回看,其語已撤回也。
他還有一個口頭禪,「真幼稚」。如同高雅的文言文里寫的一樣,他只是為了發家才學編程。所以對於開源、自由之類的…… 你可以想像到他的反應。
開源幼稚嗎?
我想不是的。
正如理查德•斯托曼在演講中說的:
軟體好像是菜譜。最開始,你從朋友家裡拿到了一份,回到家你就開始琢磨了:是放點糖還是放點辣椒呢?都可以。願意研究的人,可以將菜變得更好吃,更符合一部分人的口味,然後傳給別人。所有人都能吃上美味的飯菜。(非原文,演講的具體內容參見《若為自由故》)
商業軟體做了什麼?
軟體還是菜譜。一個大廚對你說:「菜譜保密」,你就只能吃他做的菜,而不能自己料理。飯店的菜好吃,沒錯。但是沒人知道菜裡頭還有什麼。如果你想要把菜譜給別人,他們就把你扔到監獄裡把你叫做「賊」。這是現實。
更過分的呢?
大廚把菜譜給你了,裡面還塞著一個計時器。你能照著菜譜做 30 遍,滿了限額之後,他們就要求你付錢。不付?那菜譜就會自動銷毀,甚至在上面寫上幾個大字:這人是個窮光蛋。
軟體是值得付錢的,我再三強調,一個優秀好用的軟體是值得我們高興地為它付錢的,甚至更優秀的軟體會讓我們為它的作者塞錢、捐款。然而,我從沒見過有值得五千塊錢的軟體,沒有理由為一個設計落後的微內核,整個系統靠著毫秒級速度的 IPC 來工作的系統付上這麼多錢。如果說 UNIX 值得 5000,我覺得無可厚非,因為 UNIX 是這個星球上設計最好的系統之一。
「最好的系統」不是亂說的。拿 UNIX 其中一個衍生品 —— Linux 來比較,就比較日常用戶的體驗。啟動最慢、內存佔用最大的 Firefox 也只需要幾秒鐘時間,按一下滑鼠就可以。對於那個系統,就應該不需要多說了吧……
四、這到底是系統的原因嗎
前面的所有內容都在說 Linux 和「某窗口系統」。拋開金錢,這兩個都可以算得上地球上十分優秀的操作系統。Linux 以及 UNIX 注重簡潔,而「某窗口系統」注重用戶體驗和美觀,裸機性能測試也十分不錯。但這裡,我們要討論的是,到底是什麼使得窗口系統在日常使用中如此的慢?
設計
首先我要說的就是設計。
微內核設計是十分優雅的,這一點我們無法反駁。然而,它卻好像並沒有為內核減輕多少開銷,毫秒級的 IPC 到處都是。它的內核太小了,就連繫統調用都放在了動態庫里,導致正常應用的啟動要進行多次重鏈接。
它的窗口框架也不盡人意。回調一直是 POSIX 所極力避免的東西,該標準中幾乎沒有關於回調的內容,而是非同步、poll
、select
這樣更符合人類邏輯的東西。
而它呢,窗口框架的所有消息(就是那個 Msg
)都靠回調來處理,正這樣導致了響應速度的不盡人意。一個小小的窗口點擊、移動都成為了事件。
轉過來看 UNIX/Linux,與其窗口框架類似的是信號。傳統信號通過 signal()
設置,而現代的則通過 sigaction()
,無論介面怎麼不一樣,都有著「默認操作」,即 SIG_DFL
。所以如果讓我給窗口系統提一個修改意見,我首先會說:「請加一個 RegisterMsgs
調用,為每一個 msg 都提供一個 handler,並支持設置默認以及忽略操作吧!」
有關 signal 的詳細內容參見《UNIX 環境高級編程》
自作聰明的用戶
你可以看到一系列「某某安全管家」的應用程序。在 XP 時代,這是必不可少的,他可以防止你的系統被人闖入。然而,現在都…… 2202 年了,還是有數不勝數的自作聰明的用戶(甚至程序員)嘗試安裝他們,安裝七八個同時燒電腦的情況也很正常。
我曾經在我的 8.1 以及 10 上重裝系統並且不安裝任何電腦管家,結果性能提升了至少兩倍,和 Linux 並沒有相差太多。
當然,我沒有說「某某管家」沒有用。實際上它們是非常有用的,無數的安全人員編寫了他們,但是現代內核不再需要如此嚴格的保護了,所以說到底,這還是早期系統太差勁的原因。
然而 「某某安全極速瀏覽器」的性質就截然不同了,從來沒有人需要過這種應用,而實際上它們就是個套殼。編寫這種應用的人和詐騙完全一樣,將他們閉源並且加上幾個廣告,就變成了自己的「國產」瀏覽器。
五、自封后路的窗口系統
綜上所述,那個商業系統就是被各種糟糕的後台程序攪黃了,而它們總是喜歡位於後台的原因,根本上就是商業原因 —— 看看你右下角那一個個小圖標,它們應該比桌面上顯眼吧!
同時,計時並且催促你趕緊交錢的軟體,也肯定需要放在後台吧。
也就是說,可憐的商業窗口系統,自己告別了原來屬於自己的 —— 無窮盡的自由軟體開發人員。
六、未來
隨著計算機科學的發展,越來越多的大佬從小學五年級、六年級就開始學習編程(calvinlin 哥甚至三四年級開始玩 shell,那時候我還在玩 cmd.exe)。
隨著他們技術的成長,一部分人會毫不猶豫地選擇換到 Linux,而另一部分則繼續選擇使用有著很多 IDE 的「某窗口系統」。但是無論是哪個系統,我都相信,這些少年黑客會毫不猶豫地投入到開源軟體之列中,為世界貢獻一批又一批的人類高質量開源軟體。追求自由,是孩子們的天性,不是嗎?
那時,GNU 計劃、Linux 內核都將會卓越成長,向世界展現開源的魅力!
世界將屬於開源!
作者簡介:intirain (或者 rain 也行),喜歡 UNIX、x86、RISC-V 上的 C。
via: https://github.com/LCTT/Articles/pull/7
本文由貢獻者投稿至 Linux 中國公開投稿計劃,採用 CC-BY-SA 協議 發布,Linux中國 榮譽推出
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive