Linux中國

少年黑客對自由軟體的自由漫談

導讀

「天下沒有免費的午餐。」

這句話只說對了一半。對於軟體業,或者更準確一點,對於自由軟體,這並不一直是對的。

商業軟體公司正在控制著我們 —— 普通計算機用戶甚至專業的程序員 —— 的大腦,在我們的潛意識裡面,似乎只有大公司的東西才質量好。下面是幾個場景:

  • 我傾向通過收費的網課、系列視頻或者文章來學習技術,而不是閱讀軟體自帶的免費文檔或者是免費的外語甚至中文標準,因為前者更容易。
  • 免費的東西都是劣質的。只有收費的東西才可以保證質量高。
  • 才不會有人將優質資源公開免費,除非他們有著特殊目的。
  • 大公司的軟體比一群只因為興趣愛好的人寫的軟體更穩定、更值得信賴。

絕大多數普通用戶都會認為這幾條全都是正確的,甚至一些有著幾年經驗的「高級」程序員也是。他們寧願買某公司的 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 所極力避免的東西,該標準中幾乎沒有關於回調的內容,而是非同步、pollselect 這樣更符合人類邏輯的東西。

而它呢,窗口框架的所有消息(就是那個 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

作者:intirain 編輯:wxy

本文由貢獻者投稿至 Linux 中國公開投稿計劃,採用 CC-BY-SA 協議 發布,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國