[software development] 请教大家,Linux各发行版的兼容性是怎样的?
Tofloor
poster avatar
致平振华
deepin
2023-07-26 02:21
Author

如题。

我比较疑惑,各发行版的内核来源都是一样的吧,那如果一个应用适配了其中一个发行版,那在其它发行版上也能正常运行么?

如果不能完全兼容,那是只要稍作改变(比如只要重新打包、重新编译),还是要全部重写?

Reply Favorite View the author
All Replies
1 / 2
To page
👀偷偷观察
deepin
2023-07-26 02:26
#1

不能,glib 版本不一样,要去每个平台打包。

Reply View the author
yimisunrise
deepin
2023-07-26 02:28
#2
👀偷偷观察

不能,glib 版本不一样,要去每个平台打包。

前两天升级glib结果把系统搞崩了,结果只有重新安装系统!

Reply View the author
致平振华
deepin
2023-07-26 02:32
#3
👀偷偷观察

不能,glib 版本不一样,要去每个平台打包。

你这是从用户角度说,同一应用在不同发行版底下运行的包是不一样的,是么?

但从编程的角度看,要重写各个应用,还是只要重新打包或重新编译,就能适配新的发行版?

Reply View the author
👀偷偷观察
deepin
2023-07-26 02:56
#4
致平振华

你这是从用户角度说,同一应用在不同发行版底下运行的包是不一样的,是么?

但从编程的角度看,要重写各个应用,还是只要重新打包或重新编译,就能适配新的发行版?

只要重新打包或重新编译,但是没你想得那么简单,维护成本很高

Reply View the author
安洛
deepin
2023-07-26 03:26
#5

先说结论:一般情况下不会涉及到大规模的代码重写。

Linux软件包本质上只是一种压缩包,实际上软件是否兼容某个发行版与其打包方式关系不大。你只需要解压,然后重新压缩成另一种格式,它就能变成别的软件包,很多软件都可以自动完成这个转换。如果说打包的转换有问题,那可能主要是依赖和规范的问题,依赖问题下面讲,规范问题不影响运行只是不太干净。

一个软件不是只靠内核就能运行起来的。它往往需要调用一些别的东西。比如,官方微信会调用一款叫scort的截图软件来进行截图,这样程序员就不需要自己再写一遍截图功能。另外,软件还会需要调用一些库,这些库里面包含一些写好的功能,例如常见的生成随机数。这个功能很常用,但是如果纯靠软件实现会很困难。所以库的开发者将其写好,方便其他人直接使用。

每个发行版所携带的软件和库是不一样的,每个软件所需要调用的库和软件也是不一样的。即使是调用同一个的,也可能需要调用不同的版本。因为不同版本的软件调用方式可能不一样(想一想,软件更新之后是不是经常会界面大变样?)。这是导致软件在发行版之间兼容性不好的主要原因。

所以,同一个应用,要在不同发行版之间运行,需要考虑到应用调用了哪些东西,这些东西在需要适配的发行版之间又情况如何。如果这个应用没有调用太多别的东西,这些东西在不同发行版之间又都存在且版本接近,调用起来没有问题的,那就完全不存在兼容性问题(自动重新打包即可)。如果这些东西在不同发行版之间有差别,那么你就要考虑通过依赖告诉发行版我需要这些东西(需要修改依赖并重新打包),要求发行版设法安装,或者我干脆在我的安装包里面带一份,自给自足(需要修改少量代码,重新编译并重新打包)。比较特殊的是一些系统底层的库,例如楼上提到的glibc。glibc是系统底层的库,不能随便安装或者升级,而软件处于版权或其它原因又不能自带,那就会导致兼容性问题。这种情况下重新编译也没用,重写代码也不现实,需要用户这边通过环境变量或者容器等方案解决。

Reply View the author
致平振华
deepin
2023-07-26 03:54
#6
安洛

先说结论:一般情况下不会涉及到大规模的代码重写。

Linux软件包本质上只是一种压缩包,实际上软件是否兼容某个发行版与其打包方式关系不大。你只需要解压,然后重新压缩成另一种格式,它就能变成别的软件包,很多软件都可以自动完成这个转换。如果说打包的转换有问题,那可能主要是依赖和规范的问题,依赖问题下面讲,规范问题不影响运行只是不太干净。

一个软件不是只靠内核就能运行起来的。它往往需要调用一些别的东西。比如,官方微信会调用一款叫scort的截图软件来进行截图,这样程序员就不需要自己再写一遍截图功能。另外,软件还会需要调用一些库,这些库里面包含一些写好的功能,例如常见的生成随机数。这个功能很常用,但是如果纯靠软件实现会很困难。所以库的开发者将其写好,方便其他人直接使用。

每个发行版所携带的软件和库是不一样的,每个软件所需要调用的库和软件也是不一样的。即使是调用同一个的,也可能需要调用不同的版本。因为不同版本的软件调用方式可能不一样(想一想,软件更新之后是不是经常会界面大变样?)。这是导致软件在发行版之间兼容性不好的主要原因。

所以,同一个应用,要在不同发行版之间运行,需要考虑到应用调用了哪些东西,这些东西在需要适配的发行版之间又情况如何。如果这个应用没有调用太多别的东西,这些东西在不同发行版之间又都存在且版本接近,调用起来没有问题的,那就完全不存在兼容性问题(自动重新打包即可)。如果这些东西在不同发行版之间有差别,那么你就要考虑通过依赖告诉发行版我需要这些东西(需要修改依赖并重新打包),要求发行版设法安装,或者我干脆在我的安装包里面带一份,自给自足(需要修改少量代码,重新编译并重新打包)。比较特殊的是一些系统底层的库,例如楼上提到的glibc。glibc是系统底层的库,不能随便安装或者升级,而软件处于版权或其它原因又不能自带,那就会导致兼容性问题。这种情况下重新编译也没用,重写代码也不现实,需要用户这边通过环境变量或者容器等方案解决。

非常感谢版主的回复。写了这么长,辛苦了。

现在我对Linux各发行版之间的兼容问题了基本了解了。

再次感谢版主。以后有机会再向版主以及各位大神请教。谢谢了。

Reply View the author
致平振华
deepin
2023-07-26 04:05
#7
安洛

先说结论:一般情况下不会涉及到大规模的代码重写。

Linux软件包本质上只是一种压缩包,实际上软件是否兼容某个发行版与其打包方式关系不大。你只需要解压,然后重新压缩成另一种格式,它就能变成别的软件包,很多软件都可以自动完成这个转换。如果说打包的转换有问题,那可能主要是依赖和规范的问题,依赖问题下面讲,规范问题不影响运行只是不太干净。

一个软件不是只靠内核就能运行起来的。它往往需要调用一些别的东西。比如,官方微信会调用一款叫scort的截图软件来进行截图,这样程序员就不需要自己再写一遍截图功能。另外,软件还会需要调用一些库,这些库里面包含一些写好的功能,例如常见的生成随机数。这个功能很常用,但是如果纯靠软件实现会很困难。所以库的开发者将其写好,方便其他人直接使用。

每个发行版所携带的软件和库是不一样的,每个软件所需要调用的库和软件也是不一样的。即使是调用同一个的,也可能需要调用不同的版本。因为不同版本的软件调用方式可能不一样(想一想,软件更新之后是不是经常会界面大变样?)。这是导致软件在发行版之间兼容性不好的主要原因。

所以,同一个应用,要在不同发行版之间运行,需要考虑到应用调用了哪些东西,这些东西在需要适配的发行版之间又情况如何。如果这个应用没有调用太多别的东西,这些东西在不同发行版之间又都存在且版本接近,调用起来没有问题的,那就完全不存在兼容性问题(自动重新打包即可)。如果这些东西在不同发行版之间有差别,那么你就要考虑通过依赖告诉发行版我需要这些东西(需要修改依赖并重新打包),要求发行版设法安装,或者我干脆在我的安装包里面带一份,自给自足(需要修改少量代码,重新编译并重新打包)。比较特殊的是一些系统底层的库,例如楼上提到的glibc。glibc是系统底层的库,不能随便安装或者升级,而软件处于版权或其它原因又不能自带,那就会导致兼容性问题。这种情况下重新编译也没用,重写代码也不现实,需要用户这边通过环境变量或者容器等方案解决。

统信(深度)系统很快就会爆发,你们将见证历史。祝福你们。

Reply View the author
fuuko
deepin
2023-07-26 04:17
#8

冷知识:glib和glibc是两个不一样的东西,一般来说是glibc不兼容导致的问题

Reply View the author
enforcee
deepin
2023-07-26 04:35
#9
👀偷偷观察

不能,glib 版本不一样,要去每个平台打包。

glib是gobject的标准库,glibc才是c语言的标准库

Reply View the author
蔡EEPIN
deepin
2023-07-26 05:42
#10

linux的理念是不重复造轮子,导致系统到处是依赖。。兼容性不会好到哪里去 现在都在搞容器化应用了,磁盘越来越便宜。学习Windows也不是什么坏事

Reply View the author
Ziggy
deepin
2023-07-26 06:10
#11

抛开显示层、wayland等差异来谈

可以理解为单纯是某版本打包的时候引用了某个版本的运行库,你放其他版本上运行只要有满足要求的库基本都能跑起来

部分包一般都会标注最低版本要求,放应用商店就是只对兼容的应用显示和提供下载

Reply View the author
致平振华
deepin
2023-07-26 06:10
#12
蔡EEPIN

linux的理念是不重复造轮子,导致系统到处是依赖。。兼容性不会好到哪里去 现在都在搞容器化应用了,磁盘越来越便宜。学习Windows也不是什么坏事

嗯,这么弄看起来好像会更好一点。

Reply View the author
熊爷不是好惹的
deepin
2023-07-26 06:40
#13
致平振华

统信(深度)系统很快就会爆发,你们将见证历史。祝福你们。

自从宣布搞v23以来,俺就觉得统信要搞大动作,而且越到后面这种迹象明显。感觉统信肯定要放个大威出来!麒麟啥的感觉是忽悠国外的烟物蛋like

Reply View the author
Vimvi2233
deepin
2023-07-26 16:35
#14
It has been deleted!
致平振华
deepin
2023-07-26 19:27
#15
It has been deleted!
Barry-okx
Junior Packager
2023-07-26 19:35
#16

当你说应用的时候,我没有明白你说的是命令行程序,还是界面程序。

我看到的情况:火狐用一个zip包,几乎兼容了主流的linux发行版本,所以应该是有比较通用的解决方案的。

Reply View the author
绍贝格尔
deepin
2023-07-26 19:37
#17
It has been deleted!
安洛
deepin
2023-07-26 20:07
#18
致平振华 It has been deleted!

不同开发流程对依赖的选择有不同的解决方案。但是基本上,程序员不会太在意不同发行版之间的依赖问题。如果到了需要适配某个发行版的时候,实际上手试试就知道能不能行了。

不过当然还是会做一些事情来减少兼容性问题的,比如尽量少去调用别人的软件和库,调用的时候也尽量选择那些比较流行的,大多数发行版都有带的,然后就是能自带依赖的就自带依赖。总之就是尽量减少对发行版的要求,兼容性自然就会提高。

Reply View the author
致平振华
deepin
2023-07-26 20:14
#19
安洛

不同开发流程对依赖的选择有不同的解决方案。但是基本上,程序员不会太在意不同发行版之间的依赖问题。如果到了需要适配某个发行版的时候,实际上手试试就知道能不能行了。

不过当然还是会做一些事情来减少兼容性问题的,比如尽量少去调用别人的软件和库,调用的时候也尽量选择那些比较流行的,大多数发行版都有带的,然后就是能自带依赖的就自带依赖。总之就是尽量减少对发行版的要求,兼容性自然就会提高。

那各个发行版的编程软件是一样的么?还是说有针对不同库的不同编程软件或插件?

Reply View the author
安洛
deepin
2023-07-26 20:32
#20
致平振华

那各个发行版的编程软件是一样的么?还是说有针对不同库的不同编程软件或插件?

编程软件是个挺宽泛的概念。程序员编程要用到很多不同类型的工具。其中像是编辑器这种的就一般不同发行版都有一样的。但是像编译器,调试器,运行时这种的就千差万别了。也确实有针对某些库的专门编程软件,像是qt creator这种,要写用到qt库的东西几乎一定要用到它。但很多库也不太需要专门的编程软件去适配。这东西很难一概而论。

Reply View the author
1 / 2
To page