为什么linux发行版之间不能有一个统一的二进制软件包标准?

2013-01-11 10:12:43 +08:00
 tioover
发行版之间的差异不是问题 包管理器能解决
我觉得这是限制linux桌面发展的一大要素
11147 次点击
所在节点    Linux
75 条回复
reusFork
2013-01-11 16:21:36 +08:00
@tioover 因为上面很多人一开始就理解错了,就像一楼那样看少了个“包”字。
est
2013-01-11 16:26:16 +08:00
@haohaolee 恩。所以最终结果就是跟 WMI 一样没人用。微软NIH自己造轮子也不是第一天了。

如果码农都觉得这个打包工具学习曲线太陡,那么微软至少应该开除一位 msi 团队的产品经理。大家说是不是?

微软发明的好东西多去了。MMC, DCOM等等,哪个不是被新技术出来替代,自己给自己挖个坑自埋了?微软的东西特性和功能都可以秒杀开源界和水果几万条街,但是你跟着微软混就等死吧。

我还记得一个朋友花了很多时间学习.NET atlas ajax,还翻译了一本书貌似,然后微软一个beta出来。学习的就作废了。
kaifengjin
2013-01-11 17:11:31 +08:00
@Radeon 你这回复相当于群嘲。。。
haohaolee
2013-01-11 17:26:46 +08:00
@est 是的,如果 msi 大家都用不好,那就是 MS 的错。我不是这方面的专家,我也不确定其它 msi 的封装到底如何

确实 MS 发明了不少好东西,但是很多都夭折了。这事儿真没法说,如果好东西都推广不开的话。。。

不过 .Net 相关的东西我觉得大家有点苛责了,因为这十几年来,.net 最基本的理念和底层机制一直没变,runtime 一直在前进,API一直在增加,这些都不算大问题。

然后这一波快速 Web 开发风潮,又诞生了不少 MS 自己的 .Net 的框架和类库,包括 ASP.net MVC 这种,这些框架有吹的很厉害后来又夭折的,也有一直在坚持的。我的意思是,这些框架本身就属于时髦东西,不管是 MS 发明还是开源社区发明,都有可能很快淘汰,只不过开源社区那些个框架或新语言淘汰就淘汰了,也不会有人去苛责发明人抛弃用户,浪费用户时间;换到 MS 身上就成了原罪了。

我自己的浅薄经验,付出和收获还是成比例的,越靠近下层的东西变化越少越稳定,学习时间就越长;想要快速上手的,马上出东西的,难免时效性不长。这不是说学习底层更好,而是说一分钱一分货。

啊呃,完全跑题了。。。。不好意思
jybox
2013-01-11 19:12:07 +08:00
linux的开源软件倾向于利用已有的项目,而不是像windows上面的那些商业软件为了版权,而造轮子.
所以linux上的依赖问题会更为复杂.
wy315700
2013-01-11 19:19:50 +08:00
要是统一了那就不是Linux了
Livid
2013-01-11 19:28:03 +08:00
@marguerite 你见过誰能够扭转大众的人性?

再说,流量或许不是钱,鄙视链在我看来恐怕也没有什么钱。
tioover
2013-01-11 20:16:51 +08:00
添加了一条附言

另外
找到了这个东西
http://en.wikipedia.org/wiki/Autopackage
看起来很久没更新了 主页都没了
clowwindy
2013-01-11 20:55:40 +08:00
在我看来,autotools、dpkg、msi 分别是基于源码、共享对象库、静态链接下最佳的软件包解决方案。这三个方案各有优缺点,但由于他们基于不同的开发方式、商业模式,是不能相互替换的。

比方说,你不能在 Windows 上用 dpkg 去发布软件,因为商业软件为了便于技术支持往往是静态链接或者打包所有依赖的,客户环境的不确定对你来说是个灾难。Windows 开发一般用 win32 API 或者 MFC 之类 Windows 直接提供的东西。其它的功能比方说要解析个 json,要么自己写,要么找个库打包进来。为了尽可能减小最终可执行程序的大小,会尽可能的裁剪掉依赖项里不用的功能。

你也不能把 Linux 上所有开源软件全换成 msi 那种形式。在 Linux 上开发通常会用到很多比较 high-level 的库。每个库功能很专一,但也很全面,比方说 OpenSSL 就提供加密相关的功能,但它支持很多加密算法,所以每个库也可能比较大。如果全用静态链接,出来的每个二进制文件里有很多依赖是重复的,比方说 glibc、libstdc++、zlib 等等。这样每个二进制文件几 M 甚至几十 M。而且在共享对象发明出来之前,内存经常不够加载这些二进制文件。

我们之前在 Hadoop 上跑 C++ 程序,为了方便,构建系统生成的是静态链接的二进制。结果几十 M 甚至上百 M 的二进制都是很常见的,影响了任务的效率。

如果照着 LFS ( http://www.linuxfromscratch.org/ ) 从源码开始把一个可用的 Linux 基本系统搭起来,你对这个问题会有更深的认识。
Radeon
2013-01-11 21:37:10 +08:00
二进制库的大小真不是问题。putty, winscp这些用到openssl的应用都很小巧。除了巨型软件套装(如Adobe CS、Visual Studio、MS Office之类),Win下的常见应用的大小基本都在10MB这个量级

C++程序由于模板,展开后编译出上百MB的目标文件很正常。这是C++的设计缺陷。而且由于模板都是在客户代码(即最终应用)中展开,换用包管理器也无济于事(因为没有别的应用会和你共享实例化以后的模板)

Linux的包管理把整个系统的代码库串联起来,缺少冗余,从结构上来说很脆弱。一个库有bug或者出现regression,所有相关应用都遭殃
raptor
2013-01-11 21:39:41 +08:00
@clowwindy 这个正解。

MSI好个P,完全只是因为商业软件需要,Linux因为基于开源环境才有可能做全局包管理,不开源就只能静态链接以避免客户环境依赖问题。但就是好用上来说,全局包管理甩MSI几百条街。
至于说什么DCOM之类,不过是看上去很美,实际用过的都知道,完全是坑爹货。
开源框架淘汰,那是正常的优胜劣汰自由竞争,因为你有自由选择权。MS下只能是丫给什么你用什么,丫让你换,你就得换,所以丫那是活该挨骂。
clowwindy
2013-01-11 21:43:28 +08:00
@Radeon
比方说跟 webkit link,这就是我们当时的 case,输出大小基本上就是一堆 .a 大小之和。可以想象 Linux 上每个 Qt 或者 GTK 程序都是静态链接的话会是怎么样。
marguerite
2013-01-11 21:44:18 +08:00
@Livid 流量要你拿钱,鄙视链可以不拿钱却爽,按照你说的没人能够扭转大众的人性。那么大众肯定选择的是免费爽而不是拿钱。人民群众啊,都很鸡贼的说。看这帖子里走城门一样进出多少人您就懂了。不过这和主题有什么关系啊。

@tioover 我已经感谢了二楼。我的观点已经表达过了。那就是我觉得火得都是这样无稽的帖子实际上在降低 V2EX 的实用性。当然我的火力不是都倾泻在您的身上,您也没必要觉得我针锋相对。空谈误国,嘴炮伤神,以前我有若干种证据证明这不科学这是违反 Linux 自由精神的,但现在我只会简单地告诉你,做不到。说别的都没有用,一个做不到就结束话题了。你这个想法实际上是个付出过一定实践的老想法,GNOME 前主席,openSUSE 现主席 vuntz 担纲搞过,就是 openSUSE 的新软件中心,但是本质上还是以 RPM 为主,在 DEB 上能用,也就是说未来的发展方向是模糊这种差异而不是彻底取消。技术上的原因放下不谈(RPM VS. DEB),因为两者侧重点不同根本没法比,RPM 的重点在制式分发,DEB 的重点在包上就完了,如果合并,请问比如我现在有一个软件包 fcitx,谁来打包?我用 openSUSE 为什么要包给 Ubuntu,你要知道这不是一个软件包的问题,用 Unity 的和不用 Unity 的那能一样吗?所以你问的问题的前提就是发行版九九归一。但你觉得背后的公司会干吗?社区发行版都不会干的。以前我只收 10 个 bug report,现在我要收 100 个,同样一份钱不拿,我活那么累干嘛?

So just stop and enjoy life, which is full of derivatives and possibilities.

Marguerite
clowwindy
2013-01-11 21:46:52 +08:00
@Radeon
而相对 Windows 上几 MB 的 WinSCP、putty,Linux 上 scp、ssh 通常只有几十 KB。
marguerite
2013-01-11 21:55:30 +08:00
实际上你的问题在什么时候比较合适:1980 年。那个时候大家都还没有圈地搭积木。现在各色自产的积木已经把屋造起来了,来个人过来说,我们都用一样的积木吧,那么,屋子怎么办?这是一个绕不开的话题。我不信没人做过这种尝试,但是财产私有制让得到的好处远低于损失,渐渐的就没人做了。除非天下大同,否则都不要想。
tioover
2013-01-11 22:25:55 +08:00
@marguerite 我自然也没有针对你,跑题已经跑题已经跑题到影响理解帖子的地步了,大部分的帖子都是在说依赖。
我对你的回复意思就是文字上的意思,光抛一句否定的话,既看起来高深又不知所谓。像收到现在的回复也是令人高兴的。
标题里面的话是疑问句而非反问,我并不是想拷问Linux 发行版,而是疑惑这种方式为什么没有得到广泛的应用,就像有一条笔直的道路,但所有人走的是小路,难道这种设想本来有问题还是说别的原因?
唉,只有你的回复基本上解答了这个疑问。
marguerite
2013-01-11 22:30:17 +08:00
@tioover 觉得说的好就给我加钱,还是真金白银最实在,我只有 19 个银币。。。从来没这么穷过啊。
tioover
2013-01-11 22:31:55 +08:00
@marguerite 给了呀

嗯 既然这贴回复那么多我就给每个没跑题的人感谢吧
bhuztez
2013-01-11 22:44:56 +08:00
不同的二进制发行版选择不同的编译选项,打上了不同的patch,即便包格式统一了,包也不能真的通用 ... 光靠二进制包格式标准,我不觉得能有助于改善现状。

现在这一切已经太复杂了,想要统一估计得更复杂 ...

不如想想,为什么要发行版,为什么要二进制包?

为什么发行版要搞包管理,而每个语言还要搞自己的包管理。各搞一套也就算了,用的时候根本就是两套系统,信息都不统一的。

为什么这么多软件都非要发布目标架构的二进制,而不是中间代码,在最终运行的机器上再编译成目标架构的二进制。真的有这么多和指令集有关的代码么。
zaeneas
2013-01-12 01:42:49 +08:00
当然编译是种选择,但是用过gentoo的人也许会记得当初没有注意到python-updater和perl-cleaner的时候安装软件时纠结的查错。

https://bbs.archlinux.org/viewtopic.php?id=42382

我还是没有明白为什么会认为包的格式不同是一个问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/57266

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX