此前,Linus Torvalds 在 DebConf 14 会议上谈论了桌面版 Linux 存在的一些问题。Linus 的言论一向以激进和直白而闻名,这次分享也直指各大发行版 Linux 桌面的程序兼容性问题,以及这个问题会给开发者和普通用户带来多糟糕的体验。

在会议上,Linus Torvalds 指出 Linux 分裂的一个重要原因:他一向要求各版本的 Linux 尽量不要更改核心,不能破坏用户空间,但基本没人遵守 —— 每个发行版都在随意地修改 glibc 库,改变底层 API。这些 API 的差别导致应用开发者无法为 “Linux” 平台创建一个通用的包,一个应用的二进制文件通常只能适用于某个发行版,比如 Debian 10 或 ubuntu 20 。除此之外,API 的变动让应用程序的向后兼容性也变得更差了。
这些都是非常严重的兼容性问题,适配分裂的 Linux 发行版常常让开发者感到疲惫。Linus 坦言自己参与了一个聊天软件的新项目,他为 Windows 和 OSX 都创建了二进制文件包,唯独没有创建 Linux 的二进制文件。不仅是在这个新项目,Linus 的原话是:“我一般不为 Linux 桌面制作二进制文件,不同的 Linux 发行版有不同的规则,为不同版本的 Linux 做适配是真他*的痛苦。”
除了程序兼容性对开发者的困扰,Linus 还指出 Linux 桌面对非开发者的普通用户太不友好。普通用户需要的是开箱即用,他们买了一台设备,然后使用设备的操作系统进行娱乐/工作,对他们而言,最重要的是清晰的界面、稳定的应用程序。假设有一个不懂技术的用户在使用 ubuntu 20,然后某个软件在更新到 ubuntu 21 版本后出现兼容性问题,那么这个用户要为这个不兼容应用程序付出大量的时间和精力去搜索新的程序安装包,查询兼容性问题,重新调整/调试/编译系统上的应用 ,而在 Windows 中,这个用户只需要点一下软件升级或者重新下载安装—— 设想一下你是这个用户,你会选择 Linux 还是Windows ?
无奈的是, Linus 7 年前指出的程序兼容性问题时至今日仍无法解决,新的 Linux 版本还在进一步分裂 Linux 的软件生态。当然,好的方面是我们有 Flatpak 这种跨 Linux 版本统一包管理程序,但即便是这类包管理程序也存在 Flatpak、Snap 和 Appimage 等好几种。
有趣的是,当时 Linus 还在会上指出:Valve 将拯救 linux 桌面版。从目前的情况来看 Linus 的眼光确实挺准。从 2013 年推出 Linux 架构的游戏操作系统 SteamOS 之后,Valve 在不断地改进普通游戏用户在 Linux 平台的体验,包括推出基于 Wine 的 Proton 软件,让普通用户能轻松地在 Linux 平台上玩 Windows 的游戏;还联合 Nvidia 把 DLSS (深度学习超级采样)引入 Linux。但 Valve 面向的用户群只是游戏玩家,何时 Linux 能形成良好的应用程序和普通用户生态?恐怕前提是要所有 Linux 发行版像 Windows 那种使用统一的 API/ABI ,不过这似乎有些渺茫。
什么?你跟我说祖师爷的话?就当他放了个P吧
, 某个桌面环境战胜了其他桌面, 就可以割韭菜, 圈钱上市
但是对于开发者来说, 太痛苦了, 各种适配, 这就是linux桌面无法流行起来的原因, 还是应该有个统一标准好
现在又换回windows, 感觉头发都少掉了
如果以上各层级,都有多个版本,各有差异,我们这类应用软件开发者,想要开发一个软件,用于 redhat/debian/ubuntu 的新旧多个版本,就需要很多时间去折腾。有时候在一个Linux 发行版可编译、可运行,在另一个Linux 发行版不可编译,或可编译、不能正常运行。
这不像 windows, 你用多年以前发布的 .net 3.5 sp1 开发一个软件,可以运行在很多新旧 windows 电脑上。
总之,各 Linux 发行版既要保证各版本向前兼容性、又要保证彼此之间的一致性,以方便应用软件开发者,这就难了。如果追求彼此之间一致性,那还有搞那么多不同的Linux 发行版做什么?
win也有多个版本的API,也有点乱糟糟的 ---- Windows 的操作系统级别 API 版本向前兼容性做得很好。哪里乱糟糟的?能举个例子么?
就好比,你写一个 C 程序,某个 Linux 发行版说,我这边对标准 C 改了一下若干函数,其实改的不多,只是函数名改了。然后 Linux 发行版总数量超过 100个,你怎么办?
你只能说,如果你是大的 Linux 发行商,没办法了,我软件里做一下特别判断、或条件编译吧。
Linux 当前的困境,在于打包后的可执行文件所对应的安装包,没有统一规格。放源代码到用户电脑上临时编译(用 perl 脚本)、之后用 perl 脚本安装(复制文件、更改配置文件),也很难适应众多的 Linux 发行版。
其实,Linus 个人的责任更多。现在那么多 Linux 发行版,都以他的 Linux core 为上游,只要 Linus 提出一个二进制标准,并把它做出了,放在 Linux core 中,下游的多个Linux 发行版,自然会跟进,迟早的事情。
你所说的"可行的方案",完全不可行。
标准委员会是官僚?少用更好? 你把 javascript、SQL 的流行,完全视而不见?它们都是标准委员会作出的高质量产物。
MS Visual C++ Redistributable 的习惯是,2-5年发一个大版本,每个大版本有多个小版本,每个大版本的最后一个小版本兼容之前所有小版本,应用程序编译时,vc 编译期写明这个 exe/dll 运行需要那个版本的 Redistributable,应用程序运行的时候,自动查找 x 版本的 Redistributable ,找不到报错。多个应用程序,可以共用一个版本的 Redistributable。
Linux 没有对应的"应用程序运行时候查找对应版本的 glibc 动态链接库" 这种机制。
委员会的官僚问题----别那么悲观。现在流行的 html5, css3, sql, javascript,tcp/udp/ip 全都是标准委员会弄出来的。如果不用各类标准委员会出产的技术,那也别写软件代码了。
同一台电脑上,同时安装多版本 vc_redist,单个占据磁盘空间 14M(解压缩前), 仅在运行用到时才加载占据一点内存。绝大多数 Linux 发行版都能接受的。
标准委员会----不提了。不标准的,很多新鲜玩意儿技术,我还不乐意用呢。
有可能我这里的回复比较零碎,有空我写篇博客,介绍 vc_redist 方面的内容,再配几个图,就容易明了。
我只知道,从我工作开始,陆续看到 windows 在以下行业替换其他操作系统: 银行、电信、ATM机、广告循环播放、邮政窗口....
而非 windows 的操作系统,能替换 windows 的,只有德国的gov在尝试。当然了,国内gov, army买一大堆国产自主 linux 后扔一边吃灰的也不少。
某度是第一种,所以有些奇葩行为是正常的----对你来说是正常的,对我来说是不可救药的差劲。
老外的套路,是以新替旧----套路大家都要,你以为中国人没有套路?这话说了等于没说。
时间积累出的成本太高了,没人愿意买单---这个“没人”,说的是xxx?对于普通买家用户来说,你推出一个新产品,我觉得价钱、功能综合起来我可以接受,就买了,没有什么时间积累成本。对于微软来说,如果从长期来看,商业上必须做什么,那就花钱去做,只是一个商业决策问题。
中国人的套路是锦上添花----你让空调厂商怎么活?
懂得自然知道指向----话说不清楚的,我建议你重修小学语文。
用户希望有统一的ABI。
碎片化生态可以繁荣,
但是生态自己也碎片化了。
还真没注意这个。之前下载过 mysql-8.0.x-linux-glibc2.12-x86_64.tar.xz 似乎在各个发行版上(glibc2.12+)也都能运行
但是文化这种东西本来就是自上而下的。
时代局限而已,不同角度,不同扬抑。
我论述文化只发生在中上层,这是受限生产力发展造成的时代局限性。
然后你臆断我说满清底层很快乐,然后再喷这个观点?
研究性质的,那是折腾
自己不学无术,还有脸歪曲自由的含义、抹黑RMS前辈的智慧成果,这大概是个巨婴。
buntu kernel网站上提供的deb格式linux内核包...往debian上安装-----非计算机专业用户都不会往这方面想。
兼容性方面,debian 还是很不错的,可以向前兼容比较多年以前的应用软件,ubuntu 相对而言没那么好。
当然,Linux 仍然需要有一个技术,可以将十年前、二十年前下载的安装包,在最新版上安装并运行,无需考虑编译问题、gcc 版本问题。如同 Windows 最新版仍可运行相当多的很久以前 DOS 程序一样,那才是对普通用户来说的"兼容性好"。