亲爱的 KV,
当我在网上阅读关于开源软件的内容时,我经常看到 Linux 和 GNU/Linux 这两个术语。这些术语似乎经常被混淆或搞糊涂,并引发了很多愤怒的邮件和论坛帖子。当我使用 Linux 发行版时,我是在使用 Linux 还是 GNU 呢?这重要吗?
名字的重要性?
亲爱的名字,
名字到底有什么意义呢?正如你已经看到的,这个准技术性话题继续在软件社区,尤其是在开源世界中引起一些争论。你可以通过点击本文附言中提供的链接找到来自 GNU 方面的说法,但 KV 认为这种说法缺乏说服力,因此,尽管我不太情愿卷入争论(就像猪跳舞一样罕见),我还是会发表一些评论。
如果你想了解关于 GNU 组织和 FSF (自由软件基金会) 的真正背景故事,我建议你读一下 Steven Levy 的《黑客》,这仍然是我最喜欢的关于计算机历史那个时期的书,涵盖了 20 世纪 60 年代小型计算机的兴起,到 70 年代和 80 年代早期微型计算机的兴起。然而,在我们进入现代并回答你的问题之前,我们必须回到过去(糟糕的时间旅行效果),回到 20 世纪 60 年代后期,以及小型计算机的出现,这很奇怪地与迷你裙的出现发生在同一时间。
很久以前,正如所有好的故事开头一样,几乎所有计算机软件都需要花钱购买,并授权给各个实体使用。那是 20 世纪 50 年代和 60 年代,当时实际上很少有人能买得起计算机,事实上,那些制造计算机的公司嘲笑任何人会想要计算机的想法,这对他们后来的发展造成了损害。软件要么由硬件制造商开发,以使其非常昂贵的机器即使是适度可用,要么由政府开发,通常与大学合作。
大约在小型计算机出现的时候——这大约与 KV 出生在同一时间,因为他知道有一天他将不得不修理它们及其同类——发生了两项关键创新。Ken Thompson 和 Dennis Ritchie 发明了 Unix,这是对 Multics 开发的一个众所周知的反应,计算机硬件朝着可负担性迈出了第一步。不再需要整个大学共享和分时一台大型主机;现在,如果一个部门有 3 万美元左右的资金,就可以在一小群人中共享一台功能较弱的机器。
在 Unix 之前,操作系统庞大、复杂且大多不可移植。由于 Unix 简单且是用一种新的、可移植的汇编语言编写的(我们现在称之为 C),因此更小规模的人员可以花费更少的精力编写重要的软件。有很好的工具用于编写可移植的操作系统和系统软件,包括编译器、链接器、汇编器和调试器——这些工具我们现在认为理所当然。所有这些进步都是重大且重要的,但它们有一个因素阻碍了它们被更广泛地接受:许可。
Unix 系统及其工具是由 AT&T 编写和拥有的,当时 AT&T 是美国最大的垄断企业。当然,它不必授权任何东西,因为它是电话公司,而且是唯一的电话公司,这使其处于独特的地位,最好用莉莉·汤姆林在一部旧喜剧小品中的话来概括:“我们不在乎,我们不必在乎。”
事实是,AT&T 内部的许多人确实在乎,他们能够让 AT&T 出售针对大学等机构的“廉价”许可证,这些机构只需支付 1000 美元即可获得所有源代码。公司必须支付更多的费用,但他们能够将成本分摊到整个计算基础设施中。拥有源代码意味着你可以更新和修改操作系统。如果你想看到任何类型软件的创新,拥有源代码非常重要。在 2015 年,在所有这些变革开始 50 年后,现在访问源代码已经很常见,这要归功于开源运动,但这在 Unix 时代初期是不常见的。
在 Unix 时代的过程中,出现了几个开源操作系统。其中之一是 BSD(伯克利软件发行版),由加州大学伯克利分校的 CSRG(计算机软件研究组)构建。伯克利小组最初是 AT&T 源代码的被许可方,并且早期曾为 AT&T 版本的 Unix 编写了新工具。随着时间的推移,CSRG 开始用自己的组件替换系统的一部分,特别是文件系统和虚拟内存,并且是第一个添加 TCP/IP 协议的,这为世界带来了第一个支持互联网(实际上是 DARPA 网)的 Unix 系统。
大约在同一时间,FSF 据说一直在开发自己的操作系统 (Hurd),以及 C 编译器、链接器、汇编器、调试器和编辑器。构建工具的努力对 FSF 来说比构建操作系统的努力更成功,事实上,我从未见过运行中的 Hurd 版本,尽管我怀疑这封信会产生一两封电子邮件,指出一组可悲的被忽视的文件。GNU 工具在某种程度上是一种进步,因为现在软件开发人员可以拥有一套开源工具,用以构建新工具和系统。我说“在某种程度上”,是因为这些工具带有两个明显的缺点。要理解第一个缺点,你应该找一个从事编译器工作的朋友,问他或她是否看过 gcc(GNU C 编译器)的内部结构,在哭声停止并且你用更多的酒精让你朋友振作起来之后,问他或她是否尝试过扩展编译器。如果你在那时仍然是朋友,你最后一个问题应该是关于向上游提交补丁到这个所谓的开源项目。
第二个缺点是宗教性的:GPL(GNU 通用公共许可证)。如果你读过《黑客》,你就会很清楚为什么 FSF 创建了 GPL,以及之前的 copyleft。创建 FSF 的人感到被欺骗了,因为当其他人拿走了他们开发的软件——这些软件是在各种政府资助下开发的——创办公司,并试图用它赚钱时。开源社区在开发成果的纯洁性问题上存在非常明显的分歧。有些人认为,任何人都不应该能够为软件收费或将其封闭起来,而另一些人则希望分享他们的知识,无论知识的接收者是否从中赚钱。
所有这些背景知识将我们带到了 Linux 及其与 GNU 工具的关系。Linux 是一个操作系统内核,最初由 Linus Torvalds 为响应 Andrew Tanenbaum 的 Minix 操作系统而开发。Torvalds 使用 GNU 工具——编译器、链接器、汇编器——将他的 C 代码转换为操作系统内核,然后将其发布到全世界。他以 GPLv2 许可证发布了代码,该许可证一直保持至今,而不是采用 GPLv3,后者甚至比其前身更具限制性。其他人接受了代码,修改它,改进它,并围绕它构建了新的工具和系统。
现在,谈到命名问题。当你建造房屋时,你会使用许多工具:锤子、锯子、钻头等。当房子完工时,你是否将其称为 Craftsman/房屋、Makita/房屋或 Home Depot/房屋?当然不会,因为那太愚蠢了。我们不会以我们用来建造事物的工具来命名事物;我们以有意义的方式命名事物,因为它们清晰而完整地描述了事物的整体。Linux 是一个操作系统内核和一些相关的库,它们在上面呈现了一个主要是,但并非总是,Posix、类 Unix 的系统,人们在上面编写软件。事实上,Linux 发行版不附带 GNU 工具,这些工具必须稍后从软件包中安装。Linux 本身就是一个事物,GNU 工具本身也是事物。一个工具可能被用来处理另一个工具是无关紧要的,就像我现在拿着一把来自 Home Depot 的 Craftsman 锤子一样……必须放下锤子了。
整个 GNU/Linux 命名闹剧可能是一种内核嫉妒症,这与那些认为他们最终的成就是编写进程或线程调度程序的程序员没什么不同,我在 “Bug 和吹牛的权利”(https://queue.org.cn/detail.cfm?id=2542663) 中谈到了这一点,我在那里写道:“我认为程序员倾向于将他们更大的作品标记为操作系统,这源于他们需要确保吹牛的权利。程序员永远不会停止将他们的代码与同行的代码进行比较。”
为什么这很重要?有两个原因。一是知识诚实。KV 更喜欢将功劳归于那些完成工作的人。Linus Torvalds 和他的团队使用许多工具构建了一个重要的成果,许多人每天都在使用它,因此功劳归于他们,而不是工具的生产者。构建像操作系统,甚至操作系统内核这样复杂的东西,需要的不仅仅是编译器、链接器和编辑器,而且许多用于构建 Linux 的工具与 FSF 或 GNU 根本无关。我们现在应该将我们所有的系统重命名为 GNU/APACHE/FOO/BAR 吗?只有律师才会想到这一点,而且到目前为止,你们都知道我对让律师命名项目的看法。第二个重要的原因是指出,虽然 GNU 代表“GNU 不是 Unix”,但这只是对 20 世纪 80 年代 AT&T Unix 的一种反应。现在它不妨是“GNU 不是 Linux”,因为工具不是工具构建的东西。但是,GNL 听起来不太好。
KV
附言:如果你想阅读 GNU 方面的说法,请给自己倒一杯烈性饮料,然后从这里开始:https://gnu.ac.cn/gnu/linux-and-gnu.html。
代码恶棍 (Kode Vicious),凡人称之为 George V. Neville-Neil,从事网络和操作系统代码的开发,既为了乐趣也为了营利。他还教授各种与编程相关的课程。他的兴趣领域是代码探查、操作系统和重写你的糟糕代码(好吧,也许不是最后一个)。他获得了马萨诸塞州波士顿东北大学的计算机科学学士学位,并且是 、Usenix 协会和 IEEE 的成员。Neville-Neil 与 Marshall Kirk McKusick 和 Robert N. M. Watson 合著了《FreeBSD 操作系统设计与实现》(第二版)。他是一位狂热的自行车手和旅行者,目前居住在纽约市。
版权 © 2016 由所有者/作者持有。出版权已授权给 。
最初发表于 Queue 第 14 卷,第 1 期—
在 数字图书馆 中评论本文
Catherine Hayes, David Malone - 质疑非密码散列函数的评估标准
尽管密码散列函数和非密码散列函数无处不在,但在它们的设计方式上似乎存在差距。存在许多由各种安全要求驱动的密码散列标准,但在非密码方面,存在一定程度的民间传说,尽管散列函数历史悠久,但尚未得到充分探索。虽然针对真实世界数据集的均匀分布很有意义,但当面对具有特定模式的数据集时,这可能是一个挑战。
Nicole Forsgren, Eirini Kalliamvakou, Abi Noda, Michaela Greiler, Brian Houck, Margaret-Anne Storey - DevEx 在行动
随着领导者寻求在财政紧缩和人工智能等变革性技术的背景下优化软件交付,DevEx(开发者体验)在许多软件组织中越来越受到关注。技术领导者凭直觉接受良好的开发者体验能够实现更有效的软件交付和开发者幸福感。然而,在许多组织中,旨在改善 DevEx 的拟议举措和投资难以获得支持,因为业务利益相关者质疑改进的价值主张。
João Varajão, António Trigo, Miguel Almeida - 低代码开发效率
本文旨在通过展示使用基于代码、低代码和极端低代码技术进行的实验室实验结果来研究生产力差异,从而为该主题提供新的见解。低代码技术已清楚地显示出更高的生产力水平,为低代码在短期/中期内主导软件开发主流提供了强有力的论据。本文报告了程序和协议、结果、局限性和未来研究的机会。
Ivar Jacobson, Alistair Cockburn - 用例至关重要
虽然软件行业是一个快节奏且令人兴奋的世界,其中不断开发新的工具、技术和技巧来服务于商业和社会,但它也很健忘。在其快速前进的匆忙中,它容易受到时尚潮流的影响,并且可能会忘记或忽略针对其面临的一些永恒问题的行之有效的解决方案。用例,最早于 1986 年引入,并在后来普及,就是这些行之有效的解决方案之一。