少年黑客对自由软件的自由漫谈

导读

“天下没有免费的午餐。”
这句话只说对了一半。对于软件业,或者更准确一点,对于​自由软件业​,这并不一直是对的。
商业软件公司正在控制着我们 —— 普通计算机用户甚至专业的程序员 —— 的大脑,在我们的潜意识里面,似乎只有大公司的东西才质量好。下面是几个场景:
• 我倾向通过​收费​的网课、系列视频或者文章来学习技术,而不是阅读软件自带的​免费​文档或者是​免费​的外语甚至中文标准,因为前者更容易。
• 免费的东西都是​劣质​的。只有收费的东西才可以保证质量高。
• 才不会有人将优质资源公开免费,除非他们有着特殊目的。
• 大公司的软件比一群只因为兴趣爱好的人写的软件更稳定、更值得信赖。
绝大多数普通用户都会认为这几条全都是正确的,甚至一些​有着几年经验​的“高级”程序员也是。他们宁愿买某公司的 ​IDE​ 来开发,而不是使用轻量级的、​免费​的 Vim,后者毫无疑问是大多数​​ UNIX/Linux​​ 程序员的必备。
这一切的一切,都是因为:

一、奇妙的商业软件

自从 Windows 系统成功,成功商人比尔•盖茨就被各种各样的人放在各种各样的地方“膜拜”。一方面可能是因为他太有钱,一方面可能是因为他做了这么个系统(网络上还有很多人宣称比尔•盖茨设计并实现了 Windows 系统)。
然而,在这个“伟大”的窗口系统死机、蓝屏之时,大多数人骂的却是他们的电脑:“什么破电脑!见鬼!”,而不是系统(顺便说一句,还有人将 “Windows” 称作电脑)。真奇妙。
转观无数的 ​​Linux ​​开发者(哪怕是林纳斯•托瓦兹),都没有受到这样的待遇。
软件是值得付钱的,连自由软件领袖理查德•斯托曼都没有否认这一点。但是,你真的确定那些糟糕的、动不动就“该应用程序无响应”的东西值得这么多钱吗?我反正觉得不是。
“某窗口系统”还有一个十分神奇之处,它好像是支持 POSIX 的,毕竟设计某新 32 位系统的时候这不就是其中一个目标吗?(当然有的人会跟我说那应该是 ISO C)
实际上呢,好像它只支持了为数不多的几个系统调用,剩下的几乎都是标准库函数(​​strlen​​​ 那样的),就连基本的 POSIX 风格的 ​​open​​ 都没有……
与之对比的是对各种标准都支持的 ​​Linux​​。它支持全套的 POSIX (streams 除外),性能测试也不错(当然,“某窗口系统”的裸机测试也不错。注意,是裸机),更令人骄傲的是,优秀的进程创建以及文件系统。与此相比,窗口系统的文件系统以及进程创建就不尽人意。
我知道有些人又要说啥了:我们的安全认证等级(A1 那样的玩意儿)比你们高!
这是无法避免的,传统 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,并支持设置默认以及忽略操作吧!”
自作聪明的用户
你可以看到一系列“某某安全管家”的应用程序。在 XP 时代,这是必不可少的,他可以防止你的系统被人闯入。然而,现在都…… 2202 年了,还是有数不胜数的自作聪明的用户(甚至程序员)尝试安装他们,安装七八个同时烧电脑的情况也很正常。
我曾经在我的 8.1 以及 10 上重装系统并且不安装任何电脑管家,结果性能提升了至少两倍,和​​ Linux​​ 并没有相差太多。
当然,我没有说“某某管家”没有用。实际上它们是非常有用的,无数的安全人员编写了他们,但是现代内核不再需要如此严格的保护了,所以说到底,这还是早期系统太差劲的原因。
然而 “某某安全极速浏览器”的性质就截然不同了,从来没有人需要过这种应用,而实际上它们就是个套壳。编写这种应用的人和诈骗完全一样,将他们闭源并且加上几个广告,就变成了自己的“国产”浏览器。

五、自封后路的窗口系统

综上所述,那个商业系统就是被各种糟糕的后台程序搅黄了,而它们总是喜欢位于后台的原因,根本上就是商业原因 —— 看看你右下角那一个个小图标,它们应该比桌面上显眼吧!
同时,计时并且催促你赶紧交钱的软件,也肯定需要放在后台吧。
也就是说,可怜的商业窗口系统,自己告别了原来属于自己的 —— 无穷尽的自由软件开发人员。

六、未来

随着计算机科学的发展,越来越多的大佬从小学五年级、六年级就开始学习编程(calvinlin 哥甚至三四年级开始玩 shell,那时候我还在玩 cmd.exe)。
随着他们技术的成长,一部分人会毫不犹豫地选择换到 Linux,而另一部分则继续选择使用有着很多 IDE 的“某窗口系统”。但是无论是哪个系统,我都相信,这些少年黑客会毫不犹豫地投入到开源软件之列中,为世界贡献一批又一批的人类高质量开源软件。追求自由,是孩子们的天性,不是吗?
那时,​​GNU 计划、Linux 内核都将会卓越成长​​,向世界展现开源的魅力!

你可能感兴趣的:(linux)