22 向后移植源代码 #
SUSE 广泛使用了向后移植,例如当前的软件修复和功能迁移到过去发布的 SUSE Linux Enterprise 包中。本章中的信息解释通过比较版本号来判断 SUSE Linux Enterprise 软件包的功能和安全性为何有误导性。此外,本章还会说明 SUSE 如何在确保系统软件安全且最新的同时,保持 SUSE Linux Enterprise 产品上所运行应用程序软件的兼容性。您还将了解如何检查在 SUSE Linux Enterprise 系统软件中实际解决了哪些公共安全问题,以及您的软件的当前状态。
22.1 向后移植的原因 #
上游开发者主要关心所开发软件的进度。他们往往会在修复 bug 的同时引入尚未经过广泛测试并可能会造成新 bug 的新功能。
对于分发包开发者而言,必须区分两种情况:
在对功能造成有限中断的情况下执行的 bug 修复;以及
可能会中断现有功能的更改。
通常情况下,当某个包已属于所发布的发行套件时,发行套件开发者不会遵照所有的上游更改。通常,他们会继续使用最初发布的上游版本,并根据上游更改来创建增补程序以修复 bug。这种做法称为向后移植。
通常,分发包开发者只会在两种情况下引入软件的更新版本:
当他们的包与上游版本之间的差异过大,以致向后移植的做法不再可行,或者
软件(例如防恶意软件的软件)由于固有的性质而变得不合时宜。
由于我们致力于在几个企业软件考虑因素之间实现合理的平衡,SUSE 广泛使用了向后移植。其中,最重要的考虑因素包括:
提供稳定的接口 (API),软件供应商在构建可用于 SUSE 企业产品的产品时可以依赖这些接口。
确保 SUSE 企业产品版本中使用的包具有最好的质量,这些包本身以及在成为整个企业产品的一部分后已经过充分的测试。
由其他供应商对 SUSE 的企业产品维持各种认证,就像对 Oracle 或 SAP 产品的认证一样。
使 SUSE 开发者能够专注于竭尽所能开发出产品的下一个优质版本,而不是狭隘地将注意力分散于如何推出更多的版本。
清楚明了特定企业版本中包含的功能和特性,以便我们的支持可以提供有关该版本的准确及时的信息。
22.2 反对向后移植的原因 #
不要将新的上游包版本引入我们的企业产品,这是常见的策略规则,但不是硬性规则。对于特定的包类型,尤其是防病毒软件,安全方面是我们考虑更多的因素,而不是优先考虑质量保证方面的保守做法。对于这个种类的包,偶尔会将更新的版本引入企业产品系列的发布版本。
有时,对于其他类型的包,我们也会选择引入新版本,而不是向后移植。当生成向后移植在经济效益上不可行,或者由于极其相关的技术原因而需要引入更新版本时,我们会采取这种做法。
22.3 使用向后移植时解释版本号所产生的效果 #
由于采用向后移植的做法,用户不能简单地通过比较版本号来确定 SUSE 包是否包含针对特定问题的修复,或者其中是否添加了特定的功能。在使用向后移植时,SUSE 包版本号的上游部分只是表示 SUSE 包基于的上游版本。它可能包含相应上游版本中没有但已向后移植到 SUSE 包中的 bug 修复和功能。
在涉及到向后移植时,版本号的这种有限价值可能会造成在特定情况下产生问题,也就是在使用安全扫描工具的时候。某些安全漏洞扫描工具(或者在此类工具中进行特定的测试)只能基于版本号运行。因此,在涉及到向后移植时,这些工具和测试很容易生成“误报”(将某个软件错误地识别为有漏洞)。在评估安全扫描工具生成的报告时,请始终检查其中的条目是基于版本号,还是基于实际的漏洞测试。
22.4 如何检查修复了哪些 Bug 以及哪些功能已向后移植且可用 #
有关向后移植的 bug 修复和功能等的信息储存在几个位置:
包的更改日志:
rpm -q --changelog name-of-installed-package rpm -qp --changelog packagefile.rpm
其输出简要记录了包的更改历史记录。
包的更改日志可能包含类似于引用 SUSE Bugzilla 跟踪系统中的
bsc#1234
(“Bugzilla Suse.Com”) 之类的项,或者包含指向其他 Bug 跟踪系统的链接。出于保密政策的缘故,您不一定能够访问所有此类信息。包中可能包含
/usr/share/doc/PACKAGENAME/README.SUSE
文件,该文件包含特定于 SUSE 包的一般概要信息。RPM 源包包含构建普通二进制 RPM 期间应用的增补程序,这些增补程序以独立文件的形式存在,如果您熟知如何阅读源代码,可以对这些文件进行解释。对于 SUSE Linux Enterprise 软件的安装源,请参见第 6.1.2.5 节 “安装或下载源包”,对于 SUSE Linux Enterprise 上的构建包,请参见第 6.2.5 节 “安装和编译源包”,对于 SUSE Linux Enterprise 软件包构建的内部工作,请参见《Maximum RPM》(最大 RPM)一书。
有关安全 Bug 修复,请查阅 SUSE 安全声明。这些声明往往通过公共漏洞和披露 (CVE) 项目所维护的标准化名称(例如
CAN-2005-2495
)来称呼 Bug。