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


导读

“天下没有免费的午餐。”

这句话只说对了一半。对于软件业,或者更准确一点,对于自由软件业,这并不一直是对的。

商业软件公司正在控制着我们 —— 普通计算机用户甚至专业的程序员 —— 的大脑,在我们的潜意识里面,似乎只有大公司的东西才质量好。下面是几个场景:

  • 我倾向通过收费的网课、系列视频或者文章来学习技术,而不是阅读软件自带的免费文档或者是免费的外语甚至中文标准,因为前者更容易。
  • 免费的东西都是劣质的。只有收费的东西才可以保证质量高。
  • 才不会有人将优质资源公开免费,除非他们有着特殊目的。
  • 大公司的软件比一群只因为兴趣爱好的人写的软件更稳定、更值得信赖。

绝大多数普通用户都会认为这几条全都是正确的,甚至一些有着几年经验的“高级”程序员也是。他们宁愿买某公司家的 IDE 来开发,而不是使用轻量级的、免费的 vim,后者毫无疑问是大多数 UNIX 程序员的必备。

这一切的一切,都是因为:

一、奇妙的商业软件

自从 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 不算很精通,见谅):

1
$ grep "Linux" foo | wc -l 

而在那个操作系统呢?你应该需要用记事本先打开那个文件,复制到另一个 .doc 文档里头,然后再找一找“查找”键,然后按一下。或许你还需要划到最底下看一看有多少行……

那来个更难一点的呢,看一看当前目录下所有后缀名为 .txt 的文件里头有多少行包含 Linux?

对 UNIX 来说小菜一碟:

1
$ 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。


文章作者: GUORENJUN
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GUORENJUN !
评论
  目录