linux各个版本不兼容

linux有各种发行版,都是基于linux内核的,可是为什么各个版本之间的2进制包都不兼容呢?就连ubuntu和debian都是。这是怎么回事呢?

打包的方式不一样,没办法,deb包不是二进制包,所有的二进制文件都是兼容的,是可以直接运行的,你确定你说的不兼容是二进制包,还是deb包?

二进制文件都是兼容的,甚至和同样基于linux的android也是兼容的。但软件包的格式是不一样的,主要有debian和红帽两个体系。

找这么说deb解压打成rpm一样可以在fedora上运行了

虽然同是linux内核但还是很大不同的,就像是windows都是(windows)NT内核,但每款操作系统还是很多的不同啊,就像XP,win7,win8这三款的差别

deb在debian体系是通用的吧,只是各个桌面版依赖不同。

理论上是可以的,但实践起来会有各种问题,比如依赖库版本的匹配,相关文件的路径规范等等,各种细节问题都会影响各种包之间的相互转换,所以,即使有rpm和deb之间转换的工具,它们其实也不完美,不过需要包格式转换的场景也不多吧,各种体系目前都提供了海量的软件/库供选择

我没理解兼容这个词的意思,如果按照我理解的兼容,linux不但各个发行版之间,而且还在各个版本号之间兼容,而且还能在各种框架之间兼容。

我一个一个的说:
1、各个发行版之间兼容:
先举个例子,chrome 浏览器给了deb包,rpm包,在archlinux上用的时候,就是把rpm包解开,然后把文件位置放好就可以了。可以参考chrome 的AUR 中的安装脚本。
再举个例子,你在fedora下面,先安装一个apt-get 这个是有rpm包的,去骨头源就能找到,然后你apt-get 更新索引,然后再安装一些必要包,然后重启,发现fedora已经变成debian了。
包管理器打的包,一般分为三部分,1、程序本身2、安装卸载等脚本3、依赖等软件信息。 然后压缩在一起。你解压开然后取出你想要的部分就可以了。关于“手工解压(压制)deb(rpm)包”的方法,网上有很多,随便搜搜就能了解到。
所以,软件包在各个发行版之间的兼容性是非常强的。
2、各个版本号之间的兼容:
一个linux系统里面一个库可以有很多版本的。在实验室,我推荐使用fedora的一个原因就是,骨头源非常好用。因为科研用的代码经常失去维护,有的非常古老,需要很老的库才能运行起来,这个事情,可以去骨头源,找到相关的rpm包,然后用rpm命令安装上,这个时候,很多库就并存着很多版本,然后程序就能运行起来了。有种穿越时空的感觉。
如果库的版本号还没差那么多,那么ln -S 软链接是在linux里面比较常用的一个方法,只要是so文件里面的api还能兼容,其实可以用创建软链接的方法,来满足程序对库的版本号的要求。
还有就是最典型的kernel了,kernel的跨版本号的能力也是非常强大的,如果你是滚动升级版,你就会发现,其实kernel差几个版本号,根本就是很正常的事情。比如最近,3.8~3.14 那个kernel扔进去都能把系统带起来。
3、各种cpu框架之间的兼容
这个是体现linux兼容性最牛的地方。通过file 命令可以看到一个文件的文件类型,如果是可执行体,那么就有运行的指令集,如果运行这个文件的指令集刚好和你计算机的指令集不一样。那么在linux下也是可以解决的。
使用qemu-static-user,根据gentoo wiki配置好这个东西。然后选好你执行文件的指令集,然后注册到内核中,然后就可以运行这个异构的执行体了。其执行效率和本地程序相当。

linux的兼容性之强大,所以才有了如此灵活的特性。最后再举个例子。
skype只发32位二进制包,那么可以通过multilib让其在64位系统中运行。当然也可以通过我刚才提到的qemu-static-user在arm上运行。
matlab基于java,随matlab光盘中给的java是32/64位java,但是由于我们伟大的openjdk项目,将其中附赠的java替换掉,就可以在arm或是mips等其他cpu结构中运行了。

就是只要不存在依赖问题,各个版本的安装包解压后都可以正常运行了,就是不同cpu架构不同也可以。

大神,可以讲解或推荐个书籍说一下软件运行兼容性是怎么回事?

不知道,linux里面好像就没有兼容这个概念,这都是用windows用出后遗症的说法。维护发行版的那些package monkey 就从源代码上解决了所谓的“兼容性”问题。

其实依赖问题也不是什么大问题,反正可以多版本共存。而且实际情况来看,绝大部分库都能做到跨着几个版本号,还能用情况。而依赖带来的好处是显而易见的,就是功能的去耦合,从而在很多方面提高了linux系统的效率。

这里回复的是一个简单的版本,我又写了一个更加详细的,带有引文和图片的一个完整版本, 在这里,http://blog.renren.com/blog/bp/Q7TUns380F 如果有兴趣可以去看看。