有朋友知道为什么Linux系统一旦更新就可能导致必源软件无法运行,而windows却不会?
Tofloor
poster avatar
leonardo520
deepin
2018-01-09 20:16
Author
有朋友知道为什么Linux系统一旦更新就可能导致必源软件无法运行,而windows却不会?
Reply Favorite View the author
All Replies
avatar
a946488029
deepin
2018-01-09 21:41
#1
Windows可能叫蓝屏
Reply View the author
avatar
duanyao
deepin
2018-01-09 21:42
#2
本帖最后由 duanyao 于 2018-1-9 13:47 编辑

先问是不是,再问为什么。
Windows 程序当然有可能无法在新版操作系统上运行,不论是否开源。例如以下伪代码可以确保程序只能在XP上运行:

if (系统版本 != "Windows XP") {
  alert("对不起,本程序只能在 Windows XP 上运行");
  exit(1);
}

你可能质疑这样写程序是不是太笨了?很遗憾,这不乏其例,这也仅仅是导致不兼容的一个很小的例子。这也是为什么“兼容模式”会存在的原因( https://baike.baidu.com/item/Win ... A1%E5%BC%8F/5667880 )。

你如果不记得遇到过这种事,是因为 Windows 的生产商、应用程序、驱动程序的生产商都付出了很大的努力来确保程序可以在新版的操作系统上运行。甚至,Windows 需要对一些不兼容的程序专门打补丁:
https://blogs.msdn.microsoft.com ... 031224-00/?p=41363/

至于说值不值得花这么大的代价去确保向后兼容,那就要看修改哪一方面(操作系统还是应用程序)的代价比较小了。开源界的理念稍有些不同,认为长期无人维护的软件就可以放弃了,新的项目自然会去顶替它,所以没必要让操作系统去支持十几年前的兼容性不好的东西。

不过,这也根据系统的不同的部分而有所不同,Linux 内核的向后兼容性是很好的,glibc 就要差一些,其它的库则参差不齐。所以如果一个Linux应用(不论是否开源)要追求更好的向前兼容性,就应该自带大部分或所有的库。
Reply View the author
avatar
牧野
deepin
2018-01-09 21:56
#3
linux没有完善的runtime支持吧,系统升级,把很多应用的依赖库升级了,当然会不兼容。我是这样认为的。
Reply View the author
avatar
duanyao
deepin
2018-01-09 22:09
#4
https://bbs.deepin.org/post/151448
linux没有完善的runtime支持吧,系统升级,把很多应用的依赖库升级了,当然会不兼容。我是这样认为的。 ...

这是应用开发者/打包者需要做出的选择:要最大化兼容性还是要减小程序体积?要兼容性可以自带所有的依赖库。Windows 程序这样做的更多,例如 Windows 上的 Qt 程序一般自带 Qt 库,而 Linux 的一般不带。
Reply View the author
avatar
187******69
deepin
2018-01-09 22:23
#5
不会只影响闭源软件,操作系统更新对一些软件肯定是有影响的啊,比如说一些在 win98,xp下运行良好的软件就未必能运行在 win7下,linux 也是一样的啊。
Reply View the author
avatar
justforlxz
deepin
2018-01-09 22:48
#6
我觉得楼主可能没经历过 windows update 死循环。

正在准备windows update,请勿关机。
无法更新,正在回退,请勿关机。
正在准备windows update,请勿关机。
无法更新,正在回退,请勿关机。
正在准备windows update,请勿关机。
无法更新,正在回退,请勿关机。

差不多就是这么个感觉,除了重装,我是不知道怎么处理了。
Reply View the author
avatar
窄口牛
deepin
2018-01-09 22:54
#7
安全模式更新试试,还不行就真的需要重装了。
Reply View the author
avatar
窄口牛
deepin
2018-01-09 22:56
#8
win基本上不存在碎片化问题。linux的内核跟着硬件跑,系统架构在内核上都跟着跑。win的内核基本稳定,系统升级,内核一般不升,驱动也就不升。
Reply View the author
avatar
duanyao
deepin
2018-01-09 23:10
#9
https://bbs.deepin.org/post/151448
win基本上不存在碎片化问题。linux的内核跟着硬件跑,系统架构在内核上都跟着跑。win的内核基本稳定,系统 ...

不是的,Windows 的内核也一直在升级,但是它与驱动程序的 ABI 是向后兼容的,所以新内核也可以用旧驱动。

Linux 内核认为驱动程序就是内核的一部分,所以不保证驱动程序 API/ABI 的向后兼容,不保证新内核可以用旧驱动。但是 Linux 内核仍然保证系统调用的 ABI 的向后兼容,所以升级内核一般不影响应用程序。
Reply View the author
avatar
窄口牛
deepin
2018-01-09 23:28
#10
哦,涨姿势。
Reply View the author