Scala 路线图:跳过 2.14,明年上 Scala 3

Scala 官方揭橥了 Scala 2 接下去的升高布置,开垦团队表示专门的学业将转向 Scala
3,实际不是开拓 Scala 2.14。

询问二进制包容性以致它与运作在 Linux® on POWE途乐™
上的例外操作意况之间的涉及。调查 IBM 辅助的三个 Linux on POWEEnclave发行版,即 Red Hat Enterprise Linux (HighlanderHEL卡塔尔(قطر‎ 和 SUSE LINUX Enterprise
Server
(SLES卡塔尔,驾驭它们分别的各样版本之间的二进制包容性。总体来讲,通过在本子之间维护的安定Application Binary Interface (ABIState of Qatar 能够兑现从基于 2.6.9 内核的 奥迪Q5HEL4
顺遂迁移到基于 2.6.18 内核的 HighlanderHEL5。该措施生龙活虎致适用于从基于 2.6.5
内核的 SLES9 迁移到基于 2.6.16 内核的 SLES10。领会可以看到修正 Linux on
POWE牧马人应用程序的属性的新本领,并依据一些步骤确认保障今后的八个发行版之间的二进制宽容性。[“参谋资料”
部分提供额外的参照剧情 —— 编辑。]

图片 1

现行有无数可用的 Linux 发行版。固然 Red Hat 和 SUSE LINUX 是 IBM 帮忙的
Linux on POWEKoleos 应用方案中间商,但别的发行版(比方 Gentoo、Debian 和
Ubuntu)也稳步变为流行的 Linux on POWETucson解决方案。应用程序日常向往确认保证他们的应用程序能够运维在多少个发行版上,以至运转在同二个发行版的两样版本上。精通与二进制包容性相关的标题以往,就能够达成那几个目的。本文定义二进制宽容性、切磋维护宽容性的杜撰事项并钻探分化版本之间的迁徙,包罗Red Hat Enterprise Linux 的本子 4 和 5,SUSE LINUX Enterprise Server
的版本 9 和
10。其余,还提供保障应用程序能够跨多个发行版实现宽容性的实行。

重在即使改动来 Scala 3,但将一而再维护 Scala
2.13,以保证社区有丰硕的时间谨严地联网到 Scala 3。

表 1 来得了软件等级,甚至本文将在详细座谈的 HighlanderHEL4、保时捷718HEL5、SLES9 和
SLES10 中受帮忙的表征:

一如既往,开拓组织感到必需有 2.14 版本才具承保顺遂接入到
3,可是透过多量的商量和谈论,将来确信完全没有必要2.14。那样能够带给两地方的益处:

表 1. 受扶持的风味以至 MuranoHEL 和 SLES 发行版的代码等级

  • Scala 3
    将能够越来越快地投入坐褥条件。在宏观编写翻译器和提高相关工具方面,有成都百货上千办事要做,同不经常候将帮助生态系统晋级。

  • 没有必要为 2.14 重新建构 Scala
    库和工具生态系统,从而节省了敬服人士的小时以备选 Scala 3。

SLES8 SP4 RHEL3 U4 SLES9 SP3 RHEL4 U8 SLES10 SP2 RHEL5 U3
kernel 2.4.21 2.4.21 2.6.5 2.6.9 2.6.16 2.6.18
glibc 2.2.5 2.3.2 2.3.3 2.3.4 2.4 2.5
SMT No No Yes Yes Yes Yes
NPTL No No Yes Yes Yes Yes
NUMA No No Yes Yes Yes Yes
JDK IBM 1.3.1 IBM 1.4.2¹ IBM 1.4.2 IBM 1.4.2 IBM 1.4.2, 5.0 IBM 1.4.2, 5.0
Apache 1.3.26 2.0.46 2.0.49 2.0.52 2.2.0 2.2.3
GCC 3.2 3.2.3 3.3.3 3.4.6 4.1.2 4.1.2

根本目的是提供从 Scala 2 到 3
的平整且增量的搬迁路径,要兑现此目标,Scala 2.13 和 3.0
将接受同生龙活虎的规范库,並且它们的编写翻译器后端将以同等的艺术出口字节码。

¹您可以从 IBM 站点下载 IBM Developer Kit for Linux, Java™ Technology
Edition。(参照他事他说加以考察资料 部分提供相关链接)。

分享标准库

接收图 1 中显得的流程图分明应用程序在 KugaHEL 或 SLES
上是还是不是贯彻二进制宽容。

分享规范库毁灭了 Scala 2.13 和 3 之间的显要潜在差别,并推动员搬迁移。

图 1. 规定应用程序的二进制包容性
图片 2

而是,那也象征对规范库的二进制不相称纠正将不能不等到 Scala 3.x
体系中的稍后版本,届期将全部补救二进制不包容的工具。更具体地说,由于
Scala 2.13
在其一而再串之内保持向前和向后二进制包容,因而不能增添或删除任何类或艺术。


要是在从 2 到 3
的迁移时期,急切须求在这里些节制之外发展规范库,开垦组织恐怕最后仍会选用发表Scala 2.14 版本。

二进制包容性概述

共享的 ABI

Linux on POWE锐界 的二进制包容性通过遵守 Application Binary Interface (ABI卡塔尔(قطر‎来兑现。ABI
是二个接口,编写翻译后的二进制文件通过它访问操作系统及其服务。当八个操作境况协助相似的
ABI 时,就可以在此些操作意况中运营相像的二进制文件。能够在 “64-bit
PowerPC ELF Application Binary Interface Supplement 1.7” 中找到有关
PowerPC® Executable 和 Linking Format (ELFState of Qatar ABI 的 64人补充的越来越多消息(参照他事他说加以考查资料 部分提供有关链接)。

除去规范库,通过分享 ABI,Scala 3.0 和 2.13
工件可以同步存于类路线上同一时候能够无缝地互操作,这样能够慢慢搬迁并简化测量试验。

二进制包容性是指能够在一定微处理器类别的七个情状中运行二进制文件的本领。这个条件可能是千篇少年老成律
Linux 发行版的两样版本,只怕是全然不一致的本子。举个例子,在依靠 POWEENCORE6™
微处理机并运转 SLES10 的系统上运营能够在依照 POWEHaval5™ 微电脑并运营 SLES10
的体系上编写翻译和平运动作的二进制文件。另二个例证是,在凭仗 POWESportage6™
微电脑并运维 SLES10 的连串上运转能够在依据 POWELAND5™ 微处理机并运营 GL450HEL4
的系列上编写翻译和平运动行的二进制文件。

当下 Scala 3 业已向后十一分,它尚可由 Scala 2.13
创设的库。为了贯彻向前宽容,Scala 3
编译器将提供风流倜傥种体制来保险国有接口坐落于公共语言子聚集,以便能够在 Scala
2.13 中利用它。这表示作为库小编的开垦者能够一向利用一些 Scala 3
内容,而无需从 Scala 2.13 进级。


除了技术互操作性之外,开垦组织还将关爱于测量检验和改善工具,以保证顺遂迁移。比方,原定于
2.14 版本中张开的迁徙警报将要 2.13 中推行。

计算机包容性

除此而外,Scala 官方还罗列了部分有关主题素材,包蕴争取在 2020
年岁末事情发生早前公布第叁个候选版本、怎样运用类型化抽象语法树 TASTy
管理二进制宽容性难题、宏不能从 2.x 直接迁移到 3.0、以至质量、测量试验工具与
IDE 支持等,实际情况查看官方证实:

微处理器宽容性是与 Linux on POWE梅赛德斯-EQ 8二进制宽容性紧凑相关的大旨。那么些小节钻探在区别的 64 位 POWELAND微电脑之间的宽容性,以致 32 位 PowerPC 微处理机和 64 位 POWELAND微型机之间的包容性。

POWEQashqai 微处理器包容性

(文/开源中夏族民共和国卡塔尔(قطر‎    

“二进制包容性概述”
小节斟酌的最后四个例子涉及到在七个不等的Computer类型上运营相似的二进制文件:POWELAND5
微处理器和 POWELacrosse6 微型机。POWELX5706 结构是 POWE奥迪Q35 结构的修正,同有的时候候又保持与
POWE牧马人5 包容,这就同意你在这里多个平台上运营相通的应用程序。

PowerPC 和 POWELX570 微处理器包容性

运维在本机 32 位 PowerPC 情状和 64 位 POWEKuga 意况上的 叁十人应用程序也能够兑现二进制包容性。能够在本机 Linux PowerPC 遭受上进行在
64 位 Linux on POWERAV4 系统上生成的 叁十一位二进制文件。能够贯彻这种宽容性是因为:

  • 64 位 Power Architecture 帮助完全的 32 位 PowerPC 构造。
  • 64 位 Linux 内核可以管理 32 位系统调用。
  • 32 位运营时遭逢饱含需要的 32 位库。
  • 64 位运营时景况富含必要的 32 位和 64 位库。

能够经过不相同的法子生成 32 位和 64 位 Linux
二进制文件,那决议于开采平台:

  • 在 32 位 PowerPC 平台(譬如运维 Linux 的 Apple Powerbook)上的本机
    GNU Compiler Collection (GCC卡塔尔国 C 编辑器能够生成能够在本机 三11个人平台上,或在蕴含适当 32 位客户空间库的 64 位 Linux on POWE奥迪Q7平台上实行的 32 位二进制文件。
  • IBM XL C/C++, Version 8.0 和针对性 64 位 Linux on POWE库罗德 的 GCC C
    编写翻译器能够生成 32 位和 64 为二进制可实践文件,这么些文件能够在 32 位或
    64 位运转时境遇中推行。
  • 还 存在能够何况在 32 位 PowerPC Linux 系统和 64 位 Linux on POWEOdyssey系统上运转的跨系统一编写译器。这一个跨系统编写翻译器能够生成 32 位和 陆九个人二进制文件。不管在如哪个地方方营造二进制文件,三15个人的二进制文件都足以在 32 位 Linux 平台或 64 位 Linux
    平台上运维,而生成的 64 位二进制文件仅能在 64 位 Linux on POWETiguan系统上运转。跨系统编写翻译器的八个例证是 Crosstool(参照他事他说加以考查资料
    部分提供相关链接)。

表 2 突显了如何为分化的支付平台生成 32 位和 64 位 Linux 二进制文件:

表 2. 生成 32 位和 64 位 Linux 二进制文件

开发平台 编译器 生成的 Linux 二进制文件
32 位 Linux on PowerPC 本机 GCC C 编译器 32 位
64 位 Linux on POWER 本机 XL C/C++ 或 GCC C 编译器 32 位或 64 位
32 位 Linux on PowerPC 或
64 位 Linux on POWER
跨系统编译器,比如 crosstool 32 位或 64 位

就算已经演示了 32 位和 陆拾伍人意况之间的宽容性,但那并不表示官方发行版扶持这种包容性。Red Hat 在
汉兰达HEL3 和 MuranoHEL4 之间向前或向后支持 32 位和 64 位宽容性,而当从 SLES8
迁移到 SLES9 时,SLES8 仅扶植 32 位向前宽容性。

表 3 展现了 32 位和 64 位应用程序在区别的 传祺HEL 和 SLES
版本上的向后和前行宽容性:

表 3. 在 EscortHEL 和 SLES 发行版中的 32 位和 64 位宽容性

发行版 32 位 64 位
RHEL3 > RHEL4 向前兼容 向前兼容
RHEL4 < RHEL3 向后兼容 向后兼容
SLES9 > SLES8 向前兼容 NA
SLES8 < SLES9 NA NA

优化品质

2.6 内核和 POWEENVISION6
构造包罗能够改革应用程序的性质的特色。质量的精雕细刻得益于差别的库、微处理器性子和编写翻译器更新。有风华正茂部分性质匡正无需改善应用程序,而另黄金时代部分天性修改需求重
新编写翻译源代码。记住,重新编译以得到属性改正恐怕会损伤二进制文件在有些条件中的包容性。那一个小节提供部分事例,它们体现能够改正应用程序品质的
2.6 内核新特点和 POWEHighlander6 结构。

NUMA

Non-uniform Memory Access (NUMA卡塔尔(قطر‎ 是本着 Linux on POWE奥德赛 在 2.6
内核中引进的,那几个特点在 HavalHEL5 和 SLES10
的最新版本中获得更为优化。NUMA
消除了系统中的有些微处理机因为总线地点区别到达一定内部存款和储蓄器区域的时日要比其他微处理器长的标题。NUMA
通过在各类总线使用越多内部存款和储蓄器总线和越来越少微电脑来减弱系统分享内部存款和储蓄器总线的争用。固然这在满含少许Computer的类别中效果不明明,但它可以在系统包蕴大批量微型机时
修正质量。

在 Linux 2.6.15 内核中,NUMA
优化通过点名仅本地Computer能够访谈内部存款和储蓄器,进而校勘了跨大型系统(微机核在
4-8 个以上)运营的办事负荷的品质。要是微型机正在搜寻存款和储蓄在相近的 cell
board 上的内部存款和储蓄器中的数据,Linux 2.6.16
内核能够获得该消息并将其移动到地点内部存储器中(运营速度更加快),然后在地点内部存款和储蓄器中执行所需的操作,而不需另行启航该操作。

鉴于 POWE锐界5 和 POWE奥迪Q76 结构能够强盛到 64 位微型机,超越二分之一应用程序都得益于
2.6 内核品级的 NUMA 扶持。设法进步质量的应用程序能够使用 user-land NUMA
API。牧马人HEL4 附带了 user-land NUMA API,甚至愈来愈多关于什么在 NUMA Group
主页使用这么些 API 的音信(参照他事他说加以考查资料 部分提供相关链接)。

利用 Linux 2.6.16
内核时,必需依照分享内部存款和储蓄器的分配格局张开一些改成。假诺微电脑正在搜索存款和储蓄在周围的
cell board 上的内部存款和储蓄器中的数据,Linux 2.6.16
内核能够拿到该音讯并将其活动到地面内部存款和储蓄器中(运维速度越来越快),然后在本地内部存款和储蓄器中推行所需的操作,而不需重新起动该操作。

编译器改正

您能够酌量重新编写翻译以利用 Linux on POWEGTC4Lusso的新式编辑器的新特色带给的习性优势。现在,高质量编写翻译器 IBM XL C/C++
Version 8 可以在底子级其他 安德拉HEL4、SLES9 和 SLES10 上利用。IBM XL C/C++
Version 9 能够在 LX570HEL5 及其更新、SLES10 SP1 和 SP2 上运用。Version 9
增多了指向性基于 POWE帕杰罗6 微处理器的系统的习性校正。

-qarch 和 -qtune 选项用于为独家的结构优化品质。譬如,要优化 POWELX5706
的习性,使用 -qarch=pwr6 和 -qtune=pwr6。此外,还引进了 -qtune=balanced
选项。那一个选项与 -qarch=pwr5(或 pwr5x)一齐行使时,将转换能够在 POWEHighlander5
和 POWE奥迪Q56 系统上运维的二进制文件,但含有能够校勘 POWE中华V6
品质的调解改革。Version 9 还饱含对 AltiVec Vector Multimedia Extensions
(VMX卡塔尔(قطر‎ 的扶植,VMX 最先是在 IBM PowerPC 970 微型机上提供的,现在经过
-qaltivec 选项组成到 POWEEvoque6 产物三种。

GNU Compiler Collection 包蕴针对多样分裂语言的编写翻译器。版本 3.3 到 4.1
获得了修改,富含对其 C 编写翻译器 gcc 的一定于 POWE大切诺基6 的优化。-mcpu=power6
和 -mtune=power6 标记现在到手帮忙,进而招致现身针对 POWEHaval6
布局的注册表使用和下令调解参数。别的,还含有针对 IBM PowerPC 970 和 IBM
POWE奥迪Q76 微处理器的 VMX
向量扩充,它们能够升高向量化代码的性质。就算这几个优化增选在个其余布局上更上大器晚成层楼了品质,但它们或许妨害应用程序在别的平台上的二进制包容性。

能够在 developerWorks 小说 “How to use IBM XL C/C++ Advanced Edition
V8.0 for Linux on POWE路虎极光: A guide for GCC users” 上找到越来越多关于在 Linux
on POWELacrosse 上应用 XL C/C++ 编辑器的消息。

SMT

当迁移到基于 2.6 的 Linux 内核时,Simultaneous Multi-threading (SMT卡塔尔国还足以提供另大器晚成项性能受益。SMT 在 POWE凯雷德6
上得到扶植,何况大大改良了三十二线程应用程序的习性。POWE奥迪Q76
微电脑有多个能够在每一种微机周期发生多条指令的硬件指令线程,进而修改了质量。然而,SMT
大概损伤线程不是比较多的应用程序的品质。能够在 Linux 内核运转时向其传递
smt-enabled=off 禁用 SMT。

其余 2.6 内核修正

2.6 内核在 KoleosHEL4 和 SLES9 中引进了以下性能修改,而且在 LX570HEL5 和 SLES10
版本中获取越发校正:

  • 可以扩张到 64 位 SMP POWEENCORE6 微处理机的可伸缩性。
  • 对内存密集型应用程序的大页援助,允许 16MB 的页大小,同期也提供古板的
    4KB 页大小。
  • 在 Red Hat Enterprise Linux 5 中引进 64KB 的页大小。
  • 设想内存子系统改善,包括在内部存款和储蓄器压力非常的大的系统中提供的反向映射算法。
  • 块 I/O 和异步 I/O 改进。

从 RHEL4 迁移到 RHEL5

Red Hat 在 奥迪Q7HEL4 和 奥迪TTSHEL5 之间维护了二个安居的
ABI,由此能够在这里七个本子之间顺遂地搬迁应用程序。可是,为了保证二进制包容性,Red
Hat 建议你将你的应用程序接口链接到它们所定义的大旨库。大旨库列表满含:

  • libc、libgcc、libstdc++、libdl、libm、libutil、libcrypt、libz、libpthread
    和 libncurses
  • libX11、libXext、libXt、libICE、libSM 和 libGL
  • libgtk、libgdk、libgdk_pixmap、libpango、libatk、libglib、libgmodule、libgthread、libgnomeprint、libgnomeprintui、libgconf
    和 libglade

在篇章 “Red Hat Enterprise Linux 4 Application Compatibility”
中研讨了大旨库和其余宽容性难点(参照他事他说加以考察资料
部分提供有关链接)。就算那一个文书档案解说的是 MuranoHEL4
中的宽容性,但里边的定义和见解适用于 奔驰M级HEL5中的应用程序包容性难点。使用基本库之外的别的库的应用程序照旧能够完结宽容性,但须求特别履行回归测量试验。应用程序不保留二进制包容性的动静包蕴,应用
程序静态地链接到任何库、信任内核品级接口,或与 POSIX 标准或 64 位 POWER
ABI 定义冲突。

不但 ABI 在 卡宴HEL4 和 EscortHEL5 之间保持安澜,何况 MuranoHEL5 中的大多任何 2.6
内核个性也与 智跑HEL4 包容。那就允许 牧马人HEL4 应用程序现有地运用 LANDHEL第55中学隐含的 Simultaneous Multi-threading (SMT卡塔尔(قطر‎ 和 Native Posix Thread
Library (NPTL卡塔尔(قطر‎等本性拿到属性改善,而不需求再一次编写翻译它们的源代码。那些应用程序还足以使用
2.6 内核中的品质改正,如本文前面所述。

而是,在 TiguanHEL5 中的以下两地方扩充双重编写翻译可以修改应用程序的特性:

  • 对于蕴涵大量Computer的连串,在 GL450HEL5 中另行编写翻译 NUMA user-land API
    会提升品质(若是还未有在 凯雷德HEL4
    中伸开编写翻译的话)。就算从说来讲去应用程序都能够从底蕴等级 NUMA
    支持拿到属性改正,然而再次编写翻译那些 user-land API
    还足以博得进一层的性能改进。微处理器密集型和内部存款和储蓄器访问频仍的应用程序将得到最大收益,因为
    NUMA 减少了微计算机访谈内部存款和储蓄器区域的年月。
  • 行使 翼虎HEL5中的最新编辑器进行重复编写翻译时,其余应用程序也或者获取属性改革。那几个编写翻译器增多了采纳POWE奥迪Q56 优化的申明,如本文前边所述。

当再度编写翻译应用程序以精雕细琢性能时,必需考虑恐怕加害二进制宽容性的风险。可是,在大部情况下,将应用程序从
HavalHEL4 迁移到 PAJEROHEL5 时没有需求额外的办事。


从 SLES9 迁移到 SLES10

从 SLES9 迁移到 SLES10 也是比较顺遂的。固然在 SLES9 中引进了 NPTL
线程模型(不再选取旧的 LinuxThreads 模型),但 NPTL 是 SLES10中唯黄金时代帮助的线程模型,因为 Glibc 库不再协理 LinuxThreads。在 “线程模型”
小节描述了改过线程格局导致的难点,消除了从一个线程情势改用另多少个线程形式现身的标题。尽管选取越来越少通用库的非线程应用程序能够越来越好地维护
SLES 版本之间的二进制宽容性,但必需进行回归测量试验以保险质量。

对于 中华VHEL,在少数情形下再也编写翻译源代码可能有援救将在在 SLES10
上运维的应用程序。比方,通过利用 SLES10中的改良编辑器能够荣升应用程序的习性。SMT 也是 SLES10中的三个新特征,它可以进步包括多量线程的应用程序的属性。

诚如来讲,超越十分之五非线程应用程序都不会越过 SLES9 和 SLES10
之间的二进制宽容性难题。可是,在对库和根本版本实行了根本改正之后,最佳重新编写翻译源代码,以让应用程序获得最棒的天性。


保障跨发行版之间的包容性

编辑能够在八个 Linux
发行版之间移植的应用程序看起来是多个辛劳的职分,但假如遵从一些简易的施行就足以兑现该指标。一大半发行版的时髦版本平日满含相近等第的库和水源版本。超过八分之四发行版还采用相像格式的布署和数据文件。

涉足 Linux Foundation 的 Linux Standard Base(LSB)项目标 Red Hat 和
Novell 皆有一个合伙的对象,即开垦和放大学一年级组开放标准,以压实 Linux
发行版之间的宽容性,以至帮衬应用程序以二进制文件的花样在遵守这几个标准的系统中运维。其余,LSB
将协理采摘为 Linux 操作系统移植和编排付加物的软件供应商。LSB
的主要零器件是二进制接口标准,它报告 Linux
应用程序开辟职员构建和配备应用程序的专门的工作方法。该规范极度列出了:

  • 通用的包裹和装置指南
  • 通用的共享库及其选拔
  • 计划文件
  • 文本地方
  • 系统命令
  • 本着系统接口的 Application Binary Interfaces(应用程序和平台等第)

以下小节详细介绍一些 LSB
标准,并且为编写能够跨差别发行版移植的应用程序提供部分指引标准。

数不清 Linux 发行版都包蕴雷同的 ABI
和通用的主旨库。不过,各样发行版对基本库的概念都不怎么分化,因而在宣称你的应用程序受特定发行版扶助从前,平时需求实行回归测量试验。

举个例子说,就算您精心翻看 瑞鹰HEL 和 SLES 发行版中含有的 glibc 库,就能够发觉
TiggoHEL4 包蕴的是本子 2.3.4 而 SLES9 富含的是
2.3.3。小的改正经常是增多了修复包,实际不是加多新的天性。XC90HEL4、奥迪Q5HEL5、SLES9
和 SLES10
都包涵雷同的线程模型,因而链接到通用库的任何应用程序应该都能够在这里 3
个操作遇到中运转。您还是能够在别的发行版(举例 Gentoo 和
Debian)中找到通用库。

File Hierarchy Standard (FHS卡塔尔国 定义文件和目录在通用类 UNIX®
系统上的构造。如若您的应用程序注重于任何布署和文件,那么也许须求利用
FHS。FHS
的重大目标是为应用程序提供八个通用的岗位,以寻觅标准配置文件。能够在
Filesystem Hierarchy 斯坦dard 的主页上找到有关 FHS
的越多音讯。(参考资料 部分提供相关链接)。

二进制宽容性构思事项

即便依据 ABI
和微处理机种类概念了二进制包容性,但是在分明应用程序是还是不是可以跨八个情形运转时,还应该有一点点别的宽容性事项必要思忖。当中的例证满含线程模型、低端内核信任项、中间件和宗旨库。这几个小节研商那么些思忖事项并描述 Linux on POWE凯雷德如哪个位置理它们。

线程形式

从 glibc 2.3 发表带头,Linux 中的线程情势就改造了,何况 Linux 内核也从
2.4 版本进级到 2.6 版本。在 glibc 2.2 和内核 2.4 中运用的观念意识
LinuxThreads 模型已被 Native Posix Thread Library (NPTL卡塔尔 代替。NPTL
是初阶构建的,为含有大量线程的应用程序提供出色的属性。能够在 Red Hat
小说 “The Native POSIX Thread Library for Linux” 找到越多关于 NPTL
规范的详细消息(参照他事他说加以考察资料 部分提供有关链接)。

SLES8 基于 2.4 内核并维护 LinuxThreads 模型,当尝试运维包蕴 NPTL
线程模型的 SLES9
上的饱含多量线程的应用程序时,它将面世难题。可以透过三种门路化解那几个难点:

  • 对源代码进行一点点退换并基于基于 NPTL 的库开展重新编写翻译,以拿到 NPTL
    带给的个性更改。能够在 LinuxDevices.com 的篇章 “Migrating
    applications to the 2.6 kernel and NPTL” 找到更加多关于从 LinuxThreads
    模型迁移到基于 NPTL 模型的音信(参谋资料 部分提供有关链接)。
  • 设 置 LD_ASSUME_KEKoleosNEL 遭受变量,它为 SLES9 中的 LinuxThreads
    模型提供向后宽容性。通过设置那几个景况变量,连接器将感到 2.4
    内核运营旧的 LinuxThreads 模型。Red Hat 开荒职员 Ulrich Drepper
    详细表明了 LD_ASSUME_KEEvoqueNEL(参照他事他说加以考查资料
    部分提供有关链接)。不过,由于 SLES10 中的 glibc
    产生了扭转,基于旧的 LinuxThreads
    模型的语义的应用程序将无法健康办事,因为在 SLES 10 中旧的
    LinuxThreads 模型已经被新的 NPTL 取代。那还表示 LD_ASSUME_KELANDNEL
    情形变量的值仅能被设置为超越 2.6.4 的值。最棒依照更新的 NPTL —— SLES
    9 中的默许 NPTL —— 实行测验。

最少内核注重项

当在分歧的操作意况中运营应用程序时,另多少个思虑事项是初级内核正视项。应用程序不相配的一个例证正是将消息从
/proc 文件系统移动到 sysfs
文件系统,如果应用程序在这里些文件系统之一中用硬编码值编写的话。/proc
文件系统最先是三个常驻文件系统,它同意顾客空间访谈包括音信的基石数据构造,比方系统和设备状态信息。这么些音信将从
/proc 文件系统移动到 sysfs 文件系统。/proc
文件系统仍旧存在,但它仅满含进程消息。

累积 Universal Serial Bus (USBState of Qatar 设备列表是将系统信息从 /proc
文件系统移动到 sysfs 文件系统的多个例证。在系统中早先时期基于内核 2.4
编写的应用程序就要 /proc/bus/usb/devices
目录下找到该设施列表。在搬迁到应用 2.6 内核的 sysfs
文件系统之后,该消息被活动到 /sys/bus/usb/devices
目录。那生龙活虎音信移动将大概招致应用程序不能够健康办事。固然这种景色并不广泛,但你应该专心内核等级的那类潜在难点。

中间件和应用程序宽容性

现今的不胜枚举应用程序都不是自含的,而是依据于中间件。中间件是放在多个应用程序之间或身处应用程序和操作系统之间的软件。中间件的例证包罗IBM DB2® Universal Database for Linux、Java™ Development Kit (JDK卡塔尔 和
IBM WebSphere®
应用程序。开荒人士能够调节他们的应用程序帮助的中间件版本,
不过中间件提供商决定他们的产物将运营在哪些 Linux 发行版上。能够在 IBM 的
Linux 软件 Web 站点上找到 IBM 的 Linux 中间件列表。(参照他事他说加以考察资料
部分提供有关链接)。除了中间件之外,应用程序还只怕依据于发行版附带的别的应用程序。此中的例子包括Apache web 服务器、数据库系统(举例 mysql 和
postgresql)和表明语言(比如 perl 和 python)。

作为三个例证,大家将精心翻看 Java 的运用什么影响应用程序开荒人士。Java
中间件包十分受关切,因为 Java 的阳台独立性使得 Java
应用程序在多少上有增无减。不仅仅设有差别版本的 JDK 和不相同的 JDK
提供商,还留存针对 Linux on POWE宝马7系 的 32 位和 64 位 JDK。汉兰达HEL4 附带了 IBM
32-bit SDK for Linux V1.4.2。奥德赛HEL5 附带了 IBM 32-bit SDK for Linux
V1.4.2 和 IBM 32-bit SDK for Linux V1.5。SLES9 SP3 附带了 IBM 32-bit SDK
for Linux V1.4.2,而 SLES10 SP2 附带了 32-bit IBM SDK V1.4.2 以至 IBM
32-bit 和 64-bit SDK for Linux
V1.5。应用程序开荒职员必需当心这个出入,制止应用程序仅依赖于在 5.0
版本中可用的表征。

另一个例子是,即使 Apache web
服务器是非中间件应用程序,但是洋洋应用程序都凭仗它。Apache 的新颖版本是
2.2,它附带了 君越HEL5 和 SLES10,而 Apache 2.0 附带的是 凯雷德HEL4 和
SLES9。如若应用程序包蕴的风味仅在 Apache 2.2 中可用,那么它们恐怕与附带
PRADOHEL4 和 SLES9 的 Apache 2.0 不合作。

核心库

着力库的第少年老成更正也会有可能变成二进制包容性难点。向后宽容性是在库之间的要害校勘中有限支撑的。那允许应用程序依照特定库的旧版本拓宽编写翻译,以运转该库的新本子。若是库的多个本子之间现身首要改进,那么依照特定库的新星版本举办编写翻译的应用程序将不能在该库的旧版本上运转。

例如,在蕴藏 glibc 2.3.3 的 SLES9 系统上编写翻译的二进制文件能够在包涵 glibc
2.4 的 SLES10 系统上运维,因为 2.4 版本是向后非常的。但是,在 SLES10
上编写翻译的雷同源代码将不可能在 SLES9 系统上运营,因为它富含旧的
glibc。仅当你在当前的发行版上付出应用程序,并且想在不提供旧版本包容库的旧发行版上运维该应用程序时,才会现出这种主题材料。


相关文章