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

> 
> 编者按：本文作者是一位初一学生，是我们的“公开投稿计划”的第一位投稿者（calvinlin）的同龄人，这篇文章是他对 Unix/Linux、自由开源软件的一些观点。
> 
> 
> 公平的讲，这篇文章的论证并不算很严谨周密，观点也略有偏激，但是编者作为从业 20 多年的自由及开源爱好者，初读此文，非常惊异。慨曰，“吾道不孤也！”
> 
> 
> 


![](/data/attachment/album/202203/24/100922oiw5eeeqe5wgqvcf.jpg)


### 导读


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


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


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


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


绝大多数普通用户都会认为这几条全都是正确的，甚至一些**有着几年经验**的“高级”程序员也是。他们宁愿买某公司的 **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>


作者：[intirain](https://gitee.com/intirain) 编辑：[wxy](https://github.com/wxy)


本文由贡献者投稿至 [Linux 中国公开投稿计划](https://github.com/LCTT/Articles/)，采用 [CC-BY-SA 协议](https://creativecommons.org/licenses/by-sa/4.0/deed.zh) 发布，[Linux中国](https://linux.cn/) 荣誉推出


OK
-
[Notifications](/login?return_to=%2FLCTT%2FArticles)You must be signed in to change notification settings -
[Fork 12](/login?return_to=%2FLCTT%2FArticles)

# Create 商业 v. s. 自由 ——W*ndows v. s. 现代UNIX #7

## Conversation

[Learn more about bidirectional Unicode characters](https://github.co/hiddenchars)

上次的calvinlin佬是我好友，本人是个初一的小菜。 好久没用github了，平时一般用gitee多一点。 这篇文章可能有点**有意思**，希望通过吧……

好吧，自己的电脑被没收了，现在用的家里的win7，有些地方不太方便。周末我再改一下再pr |


非常棒，期待你的进一步完善。我稍后看看，如有建议，我写出来给你。 |


有几点建议：
最后的最后，整体已经非常出乎我的预料，只能叹息后生可畏啊！期待进一步完善。 |


感谢，但是现在没法改这篇文章了（电脑还得等到晚上）;-(，等到拿到电脑我就马上改一改，内心还是挺激动的呢哈哈 |


…x vs Windows.md 根据要求改的不那么引战了，并且把说明对象改成了Linux而不是Windows，主线也算有点清楚，中心思想还是围绕Linux vs Windows这个焦点，并且引出了开源 vs 商业。老比也改了，确实不雅，同时由于文言文不是那么直接，所以增加了翻译。嗯，更改的大概就是这些，非常感谢。

现在用家里的Windows改了一下，应该差不多了。突然想起来如果要写名字的话，不要写pengruiyang-cpu，而是写intirain吧，谢谢！ |


commitmsg里头写错了，说明对象从unix到了linux |


这里，你大量使用了 ` 符号，不过我们的惯例是，一般只在 Linux 命令、文件名外用这个符号，其它地方大多用中文引号或不用。 |


ok, 我再改一下 |


根据《中文排版指北》改了改，中文与英文之间添加了空格，并且删掉了除代码外几乎所有的'`'。如果还有问题，请一定指出来

根据《中文排版指北》改了改，中文、英文之间加了空格并且去掉了除了代码之外的几乎所有`。有问题请一定指出。 |


请查看我给出的行内审查，如果有不同意见，请给出。 |


![wxy](https://avatars.githubusercontent.com/u/128338?s=60&v=4)


**suggested changes**

[wxy](/wxy)Mar 22, 2022

|
||

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

|
||

这一切的一切，都是因为某些公司…… |


There was a problem hiding this comment.

### Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. [Learn more](https://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment).

此处和下面感觉意思上衔接不起来，可能是我没能理解你这里的转折。

There was a problem hiding this comment.

### Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. [Learn more](https://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment).

或者，此处改成“这一切的一切，都是因为：”

|
||

实际上呢，好像它只支持了为数不多的几个系统调用，剩下的几乎都是标准库函数（`strlen`那样的），就连基本的`POSIX`风格的`open`都没有…… 这样的系统，似乎比不上对各种标准都支持的`Linux`。 | ||

|
||

再看看`Linux`世界怎么样？他支持全套的`POSIX`（`streams`除外），性能测试也不错（当然，窗口系统的裸机测试也不错。注意裸机），更令人骄傲的是优秀的进程创建以及文件系统。写“新文件系统”的那个程序员，大概是从同时代`IBM`的数据库计划挖过来的，一系列变长结构体直接把文件系统弄成了从头到尾的扫描磁盘性能，每次读取都可以称作是一次`fsck`。 |


There was a problem hiding this comment.

### Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. [Learn more](https://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment).

“新文件系统”是什么？NTFS？另外，我没有听说过这个全盘扫描的操作——理论上这会慢的无法忍受。我觉得这里最好有个出处（链接）。另外上面的一些你提到的地方，比如“支持不多的几个系统调用”、“全套的 POSIX ”等，最好可以给出出处。

There was a problem hiding this comment.

### Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. [Learn more](https://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment).

确实有点引战了，我改的友好一点吧

|
||

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

|
||

对`UNIX`来说小菜一碟（弱弱问一句，`grep`有查看统计行数的功能吗） |


There was a problem hiding this comment.

### Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. [Learn more](https://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment).

这里这个括号里面的句子，破坏了整个文章的氛围，哈哈。建议删去。

> 常曰：“仅学可令吾发家之事”，因不学C。遇人问事，常为省流量，仅回“..”二字，包含深意。 | ||

> 吾不与其为友，另有故：其人曰：“C为垃圾”，吾对曰：“尔乃垃圾中上等者也”，因把吾踢出群聊，回看，其信息早已撤回。 | ||

|
||

如果你对文言文不是很熟悉，可以看译文： |


There was a problem hiding this comment.

### Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. [Learn more](https://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment).

这段译文可不要，回头我看看怎么润色一下。

|
||

我想不是的。 | ||

|
||

理查德在演讲中说了的那样。 |


There was a problem hiding this comment.

### Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. [Learn more](https://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment).

出处？

|
||

## 五、自封后路 | ||

|
||

综上所述，那个商业系统就是被各种`daemon`以及糟糕的后台程序搅黄了，而它们总是喜欢位于后台的原因，根本上就是商业原因——看看你右下角那一个个小图标，它们应该比桌面上显眼吧！ |


There was a problem hiding this comment.

### Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. [Learn more](https://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment).

daemon 指的是 UNIX/Linux 系统上的守护进程，在 Windows 上并不这样称呼，而是称之为“服务”。

|
||

同时，计时并且催促你赶紧交钱的软件，也肯定需要放在后台吧。 | ||

|
||

也就是说，可怜的商业窗口系统，自己告别了原来属于自己的——无穷尽的自由软件开发人员。 |


There was a problem hiding this comment.

### Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. [Learn more](https://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment).

我觉得，少个总结段落收束一下。

书内的句子需要待会儿下课我再查一下，结尾的话我在想一想。

添加了具体引用的句子，并且在结尾直接抒情，表达了对未来的憧憬以及向往，点明中心，总结全文（笑），并且加了个作者简介。

[@pengruiyang-cpu]非常好，我对全文做了润色整理，也加了编者按。请你看看是否妥当，如有商榷之处，请指出。最终定稿后，我会发表到 Linux 中国的各个平台。另外，我得琢磨一张题图，你如果有好的题图，也可推荐。

链接实在不知道写啥了，另外我的地址还是写gitee的吧 |


## 事实性问题## posixWindows 上有 ## 权限企业和组织内会用到复杂的用户权限——它们用 Active Directory 集中管理。unix 权限终究不是为了控制一大堆机器的互相访问权限设计的。 ## 个人见解## 设计哲学Windows 有 PowerShell `Get-Content foo |Select-String Windows |Measure-Object -Line` 三个 Commandlet 分别用于获取文件内容（顺便一提 如果你认为 PowerShell 内置了一堆命令就不符合
大可以把内置命令当成大号 coreutils 和 findutils ,我看也没有谁 coreutils 只装一部分。
## 「真幼稚」开源和自由并不是一样的概念。
经过我现场测试，我的 Windows 电脑上启动 Firefox 和 Edge 的时间都不超过 3 秒。 ## 遣词「某公司」、「某窗口系统」等表述大可不必。 PowerPoint not Power Point. ## 最后说了这么多 unix 好，请问作者对 macOS 怎么看？ |


上次的calvinlin佬是我好友，本人是个初一的小菜。

好久没用github了，平时一般用gitee多一点。

这篇文章可能有点

有意思，希望通过吧……