不能,glib 版本不一样,要去每个平台打包。
不能,glib 版本不一样,要去每个平台打包。
前两天升级glib结果把系统搞崩了,结果只有重新安装系统!
不能,glib 版本不一样,要去每个平台打包。
你这是从用户角度说,同一应用在不同发行版底下运行的包是不一样的,是么?
但从编程的角度看,要重写各个应用,还是只要重新打包或重新编译,就能适配新的发行版?
你这是从用户角度说,同一应用在不同发行版底下运行的包是不一样的,是么?
但从编程的角度看,要重写各个应用,还是只要重新打包或重新编译,就能适配新的发行版?
只要重新打包或重新编译,但是没你想得那么简单,维护成本很高
先说结论:一般情况下不会涉及到大规模的代码重写。
Linux软件包本质上只是一种压缩包,实际上软件是否兼容某个发行版与其打包方式关系不大。你只需要解压,然后重新压缩成另一种格式,它就能变成别的软件包,很多软件都可以自动完成这个转换。如果说打包的转换有问题,那可能主要是依赖和规范的问题,依赖问题下面讲,规范问题不影响运行只是不太干净。
一个软件不是只靠内核就能运行起来的。它往往需要调用一些别的东西。比如,官方微信会调用一款叫scort的截图软件来进行截图,这样程序员就不需要自己再写一遍截图功能。另外,软件还会需要调用一些库,这些库里面包含一些写好的功能,例如常见的生成随机数。这个功能很常用,但是如果纯靠软件实现会很困难。所以库的开发者将其写好,方便其他人直接使用。
每个发行版所携带的软件和库是不一样的,每个软件所需要调用的库和软件也是不一样的。即使是调用同一个的,也可能需要调用不同的版本。因为不同版本的软件调用方式可能不一样(想一想,软件更新之后是不是经常会界面大变样?)。这是导致软件在发行版之间兼容性不好的主要原因。
所以,同一个应用,要在不同发行版之间运行,需要考虑到应用调用了哪些东西,这些东西在需要适配的发行版之间又情况如何。如果这个应用没有调用太多别的东西,这些东西在不同发行版之间又都存在且版本接近,调用起来没有问题的,那就完全不存在兼容性问题(自动重新打包即可)。如果这些东西在不同发行版之间有差别,那么你就要考虑通过依赖告诉发行版我需要这些东西(需要修改依赖并重新打包),要求发行版设法安装,或者我干脆在我的安装包里面带一份,自给自足(需要修改少量代码,重新编译并重新打包)。比较特殊的是一些系统底层的库,例如楼上提到的glibc。glibc是系统底层的库,不能随便安装或者升级,而软件处于版权或其它原因又不能自带,那就会导致兼容性问题。这种情况下重新编译也没用,重写代码也不现实,需要用户这边通过环境变量或者容器等方案解决。
先说结论:一般情况下不会涉及到大规模的代码重写。
Linux软件包本质上只是一种压缩包,实际上软件是否兼容某个发行版与其打包方式关系不大。你只需要解压,然后重新压缩成另一种格式,它就能变成别的软件包,很多软件都可以自动完成这个转换。如果说打包的转换有问题,那可能主要是依赖和规范的问题,依赖问题下面讲,规范问题不影响运行只是不太干净。
一个软件不是只靠内核就能运行起来的。它往往需要调用一些别的东西。比如,官方微信会调用一款叫scort的截图软件来进行截图,这样程序员就不需要自己再写一遍截图功能。另外,软件还会需要调用一些库,这些库里面包含一些写好的功能,例如常见的生成随机数。这个功能很常用,但是如果纯靠软件实现会很困难。所以库的开发者将其写好,方便其他人直接使用。
每个发行版所携带的软件和库是不一样的,每个软件所需要调用的库和软件也是不一样的。即使是调用同一个的,也可能需要调用不同的版本。因为不同版本的软件调用方式可能不一样(想一想,软件更新之后是不是经常会界面大变样?)。这是导致软件在发行版之间兼容性不好的主要原因。
所以,同一个应用,要在不同发行版之间运行,需要考虑到应用调用了哪些东西,这些东西在需要适配的发行版之间又情况如何。如果这个应用没有调用太多别的东西,这些东西在不同发行版之间又都存在且版本接近,调用起来没有问题的,那就完全不存在兼容性问题(自动重新打包即可)。如果这些东西在不同发行版之间有差别,那么你就要考虑通过依赖告诉发行版我需要这些东西(需要修改依赖并重新打包),要求发行版设法安装,或者我干脆在我的安装包里面带一份,自给自足(需要修改少量代码,重新编译并重新打包)。比较特殊的是一些系统底层的库,例如楼上提到的glibc。glibc是系统底层的库,不能随便安装或者升级,而软件处于版权或其它原因又不能自带,那就会导致兼容性问题。这种情况下重新编译也没用,重写代码也不现实,需要用户这边通过环境变量或者容器等方案解决。
非常感谢版主的回复。写了这么长,辛苦了。
现在我对Linux各发行版之间的兼容问题了基本了解了。
再次感谢版主。以后有机会再向版主以及各位大神请教。谢谢了。
先说结论:一般情况下不会涉及到大规模的代码重写。
Linux软件包本质上只是一种压缩包,实际上软件是否兼容某个发行版与其打包方式关系不大。你只需要解压,然后重新压缩成另一种格式,它就能变成别的软件包,很多软件都可以自动完成这个转换。如果说打包的转换有问题,那可能主要是依赖和规范的问题,依赖问题下面讲,规范问题不影响运行只是不太干净。
一个软件不是只靠内核就能运行起来的。它往往需要调用一些别的东西。比如,官方微信会调用一款叫scort的截图软件来进行截图,这样程序员就不需要自己再写一遍截图功能。另外,软件还会需要调用一些库,这些库里面包含一些写好的功能,例如常见的生成随机数。这个功能很常用,但是如果纯靠软件实现会很困难。所以库的开发者将其写好,方便其他人直接使用。
每个发行版所携带的软件和库是不一样的,每个软件所需要调用的库和软件也是不一样的。即使是调用同一个的,也可能需要调用不同的版本。因为不同版本的软件调用方式可能不一样(想一想,软件更新之后是不是经常会界面大变样?)。这是导致软件在发行版之间兼容性不好的主要原因。
所以,同一个应用,要在不同发行版之间运行,需要考虑到应用调用了哪些东西,这些东西在需要适配的发行版之间又情况如何。如果这个应用没有调用太多别的东西,这些东西在不同发行版之间又都存在且版本接近,调用起来没有问题的,那就完全不存在兼容性问题(自动重新打包即可)。如果这些东西在不同发行版之间有差别,那么你就要考虑通过依赖告诉发行版我需要这些东西(需要修改依赖并重新打包),要求发行版设法安装,或者我干脆在我的安装包里面带一份,自给自足(需要修改少量代码,重新编译并重新打包)。比较特殊的是一些系统底层的库,例如楼上提到的glibc。glibc是系统底层的库,不能随便安装或者升级,而软件处于版权或其它原因又不能自带,那就会导致兼容性问题。这种情况下重新编译也没用,重写代码也不现实,需要用户这边通过环境变量或者容器等方案解决。
统信(深度)系统很快就会爆发,你们将见证历史。祝福你们。
冷知识:glib和glibc是两个不一样的东西,一般来说是glibc不兼容导致的问题
不能,glib 版本不一样,要去每个平台打包。
glib是gobject的标准库,glibc才是c语言的标准库
linux的理念是不重复造轮子,导致系统到处是依赖。。兼容性不会好到哪里去 现在都在搞容器化应用了,磁盘越来越便宜。学习Windows也不是什么坏事
抛开显示层、wayland等差异来谈
可以理解为单纯是某版本打包的时候引用了某个版本的运行库,你放其他版本上运行只要有满足要求的库基本都能跑起来
部分包一般都会标注最低版本要求,放应用商店就是只对兼容的应用显示和提供下载
linux的理念是不重复造轮子,导致系统到处是依赖。。兼容性不会好到哪里去 现在都在搞容器化应用了,磁盘越来越便宜。学习Windows也不是什么坏事
嗯,这么弄看起来好像会更好一点。
统信(深度)系统很快就会爆发,你们将见证历史。祝福你们。
自从宣布搞v23以来,俺就觉得统信要搞大动作,而且越到后面这种迹象明显。感觉统信肯定要放个大威出来!麒麟啥的感觉是忽悠国外的烟物蛋 。
当你说应用的时候,我没有明白你说的是命令行程序,还是界面程序。
我看到的情况:火狐用一个zip包,几乎兼容了主流的linux发行版本,所以应该是有比较通用的解决方案的。
不同开发流程对依赖的选择有不同的解决方案。但是基本上,程序员不会太在意不同发行版之间的依赖问题。如果到了需要适配某个发行版的时候,实际上手试试就知道能不能行了。
不过当然还是会做一些事情来减少兼容性问题的,比如尽量少去调用别人的软件和库,调用的时候也尽量选择那些比较流行的,大多数发行版都有带的,然后就是能自带依赖的就自带依赖。总之就是尽量减少对发行版的要求,兼容性自然就会提高。
不同开发流程对依赖的选择有不同的解决方案。但是基本上,程序员不会太在意不同发行版之间的依赖问题。如果到了需要适配某个发行版的时候,实际上手试试就知道能不能行了。
不过当然还是会做一些事情来减少兼容性问题的,比如尽量少去调用别人的软件和库,调用的时候也尽量选择那些比较流行的,大多数发行版都有带的,然后就是能自带依赖的就自带依赖。总之就是尽量减少对发行版的要求,兼容性自然就会提高。
那各个发行版的编程软件是一样的么?还是说有针对不同库的不同编程软件或插件?
那各个发行版的编程软件是一样的么?还是说有针对不同库的不同编程软件或插件?
编程软件是个挺宽泛的概念。程序员编程要用到很多不同类型的工具。其中像是编辑器这种的就一般不同发行版都有一样的。但是像编译器,调试器,运行时这种的就千差万别了。也确实有针对某些库的专门编程软件,像是qt creator这种,要写用到qt库的东西几乎一定要用到它。但很多库也不太需要专门的编程软件去适配。这东西很难一概而论。
如题。
我比较疑惑,各发行版的内核来源都是一样的吧,那如果一个应用适配了其中一个发行版,那在其它发行版上也能正常运行么?
如果不能完全兼容,那是只要稍作改变(比如只要重新打包、重新编译),还是要全部重写?