Linux 之前的 Unix 桌面沉浮启示录

It takes more than open source, it takes open standards and consensus
仅仅开源还不足以实现开放,还需开放标准和建立共识

Steven J. Vaughan-Nichols
Sat 27 Jan 2024 // 12:33 UTC

现在,由于有了安卓和 ChromeOS,Linux 已成为重要的终端用户操作系统。但在 Linux 之前,Unix 桌面起着重要的作用,尽管大多数并未留存至今。

追溯至 1993 年,我在 《PC Magazine》上做了一篇 Unix 桌面的特性评测。是的,在我成为 Linux 桌面用户之前,我是 Unix 的使用者。自从 1979 年 2BSD Unix 出现以来,我就是 Unix 的忠实拥趸。到了 1993 年,Unix 桌面繁多,我成功说服我们的杂志让我试用它们。

我和我的团队评测了来自 Consensys、Dell、Interactive Unix、SCO、Univel、昇阳Sun,和 NeXT 的 Unix 版本。我们也注意到了来自 UHC、Microport 和其它公司的 Unix,但没有进行评测。我相信你们中的大多数人都未曾听说过这些。

那 Linux 呢?那时候,Linux 已经问世,而且我也使用过。但当时最先进的 Linux 发行版是 Softlanding Linux System(SLS),我无法说服编辑们 —— 或者说我自己,认为它是值得评测的。我本可以评测的第一个版本是 Slackware,它至今仍在我们身边,但在那时候,它的发布日期还有数月之遥。

现如今,只有 Dell 仍然存在,不过它之所以至今仍在业界,不完全是因为它的 System V Release 4(SVR4)Unix 发行版。然而,那些早期的 Unix 桌面中,仍有一个仍然活跃健康,且运行在大约 四分之一的桌面 上。

那个操作系统,当然,就是 macOS X,它是 NeXT 的 NeXTSTEP 的直接后裔。你可以说基于多线程、多进程微内核操作系统 Mach、BSD Unix,和开源的 Darwin 的 macOS,是所有 Unix 操作系统中最成功的。

但在当时看来,情况并非如此。并不是因为 Windows 比 Unix 更好。在 1993 年,可以称作 Unix 的竞争对手的只是 Windows 3.1 和 NT 3.1。

特别是 NT,在那时,它只能算是个笑料级别的服务器操作系统。直到 Windows NT 3.5 发布后,NT 才开始变得重要。

Windows 击败 Unix 的原因多种多样。其中最重要的一点就是微软确保所有硬件和软件供应商要么与它对齐,要么就无法 使用 Windows 或微软 Office。

那个时候,这是个极其重要的问题。我们如今看待 Mac,通常将其视为等同于或者超过 Windows PC 的竞争对手。但那个时期的情况并非如此。史蒂夫·乔布斯当时已被解雇,并且在苹果公司 1993 年的年度报告中,该公司报告显示其 净收入已下降了97%。

然而,尽管微软的成功在很大程度上得益于其历史上的 不正当商业行为,但它并非靠不正当手段得以胜出。Unix 公司正在自我毁灭。

尽管有许多为 Unix 创立软件开发标准的尝试,但它们或者过于宽泛而无法做出实质性贡献,例如 POSIX;或者它们在开放系统基金会Open Systems Foundation 和 Unix 国际Unix International 之间的商业联盟争端中陷入僵局,这就是著名的 Unix 战争。

在 Unix 公司忙于内斗的同时,微软正乐得财源滚滚。关键问题在于 Unix 公司无法就软件标准达成一致。独立软件开发商(ISV)需要为每一个 Unix 平台编写应用。而这些应用在桌面市场的份额都微乎其微。对开发者来说,为 SCO OpenDesktop(也被称为 OpenDeathtrap)、NeXTStep,以及 SunOS 分别编写一个版本的应用程序,从商业的角度来看,这完全没有意义。

这种情况听起来似曾相识吗?这种问题如今依旧困扰着 Linux 桌面,这也是我对诸如红帽的 Flatpak 和 Canonical 的 Snap 这样的 Linux 容器化桌面应用如此钟情的原因。

等到双方于 1996 年最终在 The Open Group 合力和解时,已经为时已晚。Unix 在传统桌面上的市场被挤压出局,工作站基本上都变成了 昇阳微系统Sun Microsystems 的天下。

那么,Linux 是如何崭露头角的呢?实际上,相比 Unix 发行版,它有两个主要的优点。首先,它是开源的。在开源的优胜劣汰机制下,好的代码能够生存,差的代码将被淘汰。我认为 Linux 使用 GPL,这点非常关键。

毕竟,如果成功只需要开源代码,那么我们现在都应该在运行如 FreeBSD、DragonflyBSD 以及 GhostBSD 这类纯 BSD 操作系统。但是实际情况却是,虽然 BSD Unix 系统至今仍然重要,却远远比不上 Linux 的市场份额。

Linux 基金会的开源供应链安全主任 David Wheeler 解释了这个原因:BSD 许可证存在的问题在于每隔几年就会有人说:“嘿,让我们基于这个 BSD 代码 开一家公司!”他们会利用这些 *BSD 代码,某些最优秀的 BSD 开发者,然后开发出一款专有的派生产品。但作为专有厂商,他们的分支成本高昂,维护不易,因此公司最终走向破产……如此反复。

“而与此同时,GPL 通过法律约束将大型商业公司聚集在一起……他们所有人都在作出贡献,并且感到安心,因为他们知道他人也被法律要求必须同样做。这就创造了一个安全的合作区。”

Linux 的另一大优势便是其领导,Linus Torvalds。有了 Torvalds 这唯一领导,Linux 规避了 Unix 陷入的内斗困境。

然而 Torvalds 的积极力量并不只在于他是一位天才开发者。尽管他的头衔可能笑称为“终生仁慈独裁者 Benevolent Dictator for Life”,多年来,Torvalds 已经学会了如何与他人和谐合作。

有些人说,Torvalds 的人缘不够好,的确,他并不宽容对待愚蠢的行为。然而,我多次参加过 Linux Plumbers 会议,他和顶尖的 Linux 内核开发者们的合作过程中,我并未见到他们之间有过什么明显的矛盾。如今的 Linux 已是一个集体的功劳。

如果 Linux 的未来全都寄托在 Torvalds 一人身上,我也会担心 Linux 的未来。Torvalds 无疑是一位杰出的人才,一个伟大的程序员,但如果这就是 Linux 成功的全部,我们就会陷入一个痛苦的问题:一场公交车事故,就会让我们失去整个 Linux。

幸运的是,Linux 的发行者和开发者们从 Unix 的历史中汲取了教训。

他们清楚,拥有一款成功的桌面操作系统,需要的不仅仅是开源,还需要开放的标准和共识。

我们可能永远都无法迎来那个传说中的 “Linux 桌面年”,但通过安卓和 Chrome OS,Linux 已然成为顶级的终端用户操作系统。经过漫长的等待,Unix 终于通过 Linux 成为了一款顶级的终端用户操作系统。


via: The Land Before Linux: The Unix desktops
https://www.theregister.com/2024/01/27/opinion_column

2024-01-29 10:30 原文作者:Steven J. Vaughan-Nichols

译者:ChatGPT 校对:wxy 本文由 LCTT 原创翻译,Linux中国 荣誉推出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/45111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA实现热部署

什么是热部署? 热部署(Hot Deployment)是指在应用程序运行过程中,无需停止整个应用程序或重新启动服务器,就能够部署新的代码、资源或配置文件,使其立即生效。这种部署方式有助于提高开发效率和系统的可用性…

【系统架构设计】计算机组成与体系结构(三)

计算机组成与体系结构(三) 计算机系统组成存储器系统主存储器辅助存储器Cache存储器Cache 基本原理映射机制直接映射全相联映射组相联映射 替换算法写操作 流水线(计算)流水线周期流水线执行时间流水线的吞吐率流水线的加速比 计算…

Mongodb索引的删除

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第87篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…

卷积是如何计算的

使用代码,看卷积是如何计算的。 torch.nn torch.nn.functional srtide 的用法,代表卷积核的步幅 import torch import torch.nn.functional as F # 这个是输入的一个二维矩阵 input torch.tensor([[1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],…

Javascript[ECMAScript] 新特性—1

背景 JS1.1(1997) 第一版基于Netscape Navigator 3.0中实现的JAVASCRIPT 1.1 JS1.2(1999) 基于Netscape Navigator 4.0中实现的JavaScript 1.2。添加了正则表达式、更好的字符串处理、新的控制语句、Try/Catch异常处理、更严格…

推荐3个提升工作效率的实用电脑工具

PearOCR PearOCR是一款基于网络的光学字符识别(OCR)工具,旨在通过先进的图像处理和机器学习技术,快速、准确地从图片中提取文字。该工具的所有功能完全免费,这主要得益于其所有文件都在本地进行识别,不需要…

Python数据分析~~美食排行榜

目录 1.模块的导入和路径的选择 2.访问前面五行数据 3.按照条件进行筛选 4.获取店铺评分里面的最高分 5.打印对应的店铺的名字 1.模块的导入和路径的选择 # 导入pandas模块,简称为pd import pandas as pd # 使用read_csv()函数 # TODO 读取路径"/Users/fe…

完美解决:MySQL8报错:Public Key Retrieval is not allowed

在配置数据源的时候直接将属性allowPublicKeyRetrieval设置为true即可 &AutoReconnecttrue

使用getopt处理参数

文章目录 使用getopt处理参数1. shift 命令1.1 删除一个参数1.2 删除多个参数1.3 多次执行 shift 参数1.4 参数解析示例1.5 优化处理1.6 问题处理 2. getopt 命令2.1 常用参数及示例2.2 脚本参数优化示例2.3 参数校验 3. 示例展示4. eval 命令4.1 示例示例 1示例 2示例 3示例 4…

数学中的无穷小与物理学中的微元

数学中的无穷小与物理学中的微元 flyfish 数学中的直线和物理中的线比较下就容易理解了 数学中的直线: 数学中的直线是一种理想化的抽象概念,具有无限延伸且没有厚度或宽度。 直线的定义不依赖于物理性质,仅依赖于几何性质。它是一个一维对…

33 IRF配置思路

IRF配置思路网络括谱图 主 Ten-GigabitEthernet 1/0/49 Ten-GigabitEthernet 1/0/50 Ten-GigabitEthernet 1/0/51 备 Ten-GigabitEthernet 2/0/49 Ten-GigabitEthernet 2/0/50 Ten-GigabitEthernet 2/0/51 思路 主 1 利用console线进入设备的命令行页面去更改…

在安卓中使用FFmpeg录制摄像头的视频并保存到本地MP4文件

在移动应用开发中,有时需要利用设备的摄像头录制视频,并且希望在录制过程中能够精确控制视频的质量、格式和时长。FFmpeg作为一个强大的多媒体处理工具,提供了广泛的功能和选项,能够帮助我们实现这样的需求。 添加依赖 在安卓平台…

【C语言】C语言-身份证管理系统(源码+注释)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

关于.NETCORE站点程序部署到nginx上无法访问静态文件和无法正确生成文件的问题解决过程。

我的netcore6项目,部署到IIS的时候,生成报告时,需要获取公司LOGO图片放到PDF报告文件中,这时候访问静态图片没有问题。 然后还有生成邀请二维码图片,这时候动态创建图片路径和图片也没有问题,可以在站点的…

funasr最新更新GPU版本安装避坑

#当前安装过程没有cpu版本顺利 1.个人在自己的电脑上安装ubantu系统,以便使用本身的显卡功能(本人显卡NVIDIA GeForce RTX 4060)(这里需要注意,更新里面有附加驱动安装驱动会导致黑屏,小伙伴不要心急重装系统,可以ctr…

Python爬虫教程第4篇-使用BeautifulSoup解析html

文章目录 Beautiful Soup简介安装Beautiful Soup快速开始如何使用Beautiful Soup中的对象TagNameAttributes多值属性 NavigableStringBeautifulSoupComment 遍历文档树子节点tag名字.contents 和 .children.descendants.strings 和 stripped_strings 父节点.parent.parents 兄弟…

git批量删除本地包含某字符串的特定分支

git批量删除本地包含某字符串的特定分支 git branch -a | grep 分支中包含的字符串 | xargs git branch -D git删除本地分支_git查看删除本地分支-CSDN博客文章浏览阅读989次。git branch -d <分支名>可以通过: git branch 查看所有本地分支及其名字&#xff0c;然后删…

JavaScript(9)——作用域的一些问题

如果在函数内部&#xff0c;变量没有声明直接赋值&#xff0c;也会当做全局变量看。强烈不推荐&#xff01;&#xff01; function op() {num 80}op()console.log(num) 在不同作用域下&#xff0c;可能存在变量命名冲突的情况&#xff1a; let num 10 function fn(){let num…

Spring-Spring、IoC、DI、注解开发

1、Spring是什么 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。 Spring整体架构 Spring优点&#xff1a; Spring属于低侵入设计。IOC将对象之间的依赖关系交给Spring,降低组件之间的耦合&#xff0c;实现各个层之间的解耦&#xff0c;让我们更专注于业务…

代码随想三刷单调栈篇1

代码随想三刷单调栈篇1 739. 每日温度题目代码 496. 下一个更大元素 I题目代码 503. 下一个更大元素 II题目代码 42. 接雨水题目代码 84. 柱状图中最大的矩形题目代码 739. 每日温度 题目 链接 代码 class Solution {public int[] dailyTemperatures(int[] temperatures) {…