美高梅官方网站66159

美高梅官方网站66159或将已有的产品移植到 Linux 系统上,Debian是最大的Linux发行版

作者:美高梅官方网站66159    来源:未知    发布时间:2020-04-20 13:24    浏览量:

为了促进发行版之间的兼容性,Linux Standards Base(LSB)定义了一系列服务和应用级ABI标准,让第三方程序能在兼容LSB的发行版上运行。LSB第一个版本在2001年发布,它由Linux基金会的一个工作组维护,最新标准是今年6月发布的LSB 5.0。Debian是最大的Linux发行版,开发者认为维护LSB兼容性耗费精力太多而所得好处又太少,因此宣布放弃兼容LSB,只保留init系统使用的lsb-base包和用于查询发行版身份的 lsb-release包。

前 Linux 的发行版非常繁多,为了促进 Linux 不同发行版间的兼容性,LSB(Linux Standards Base)开发了一系列标准,使各种软件可以很好地在兼容 LSB 标准的系统上运行,从而可以帮助软件供应商更好地在 Linux 系统上开发产品,或将已有的产品移植到 Linux 系统上。

美高梅官方网站66159 1

转载自:solidot.org

在 IBM Bluemix 云平台上开发并部署您的下一个应用。

Linux 标准规范(LSB)是一个意图定义 Linux 发行版为第三方程序所提供的服务和应用层 ABI(Application Binary Interfaces,程序二进制接口) 的规范。但 Debian 项目内的某些人正在质疑是否值得维持兼容 LSB,他们认为,该项工作的工作量巨大,但好处有限。

              

开始您的试用

LSB 于2001年首次公布,其模型建立在 POSIX 和单一 UNIX 规范(Single UNIX Specification)的基础之上。目前,LSB 由 Linux 基金会的一个工作小组维护。最新的版本是于2015年6月发布的 LSB 5.0。它定义了五个 LSB 模块(核芯(core)、桌面、语言、成像(imaging)和试用)。

Unix/Linux 标准化历史

标准化目前已经成为 Linux 系统上的一个热门话题。实际上,在 Linux 诞生之初,这个问题就得到了重视。当 Linus 在开发 0.01 版本的 Linux 内核时,就开始关注 POSIX 标准的发展,他在 /include/unistd.h 文件中定义了几个与 POSIX 有关的宏,以下内容就节选自 0.01 版本内核的 /include/unistd.h 文件:

/* ok, this may be a joke, but I'm working on it */
#define _POSIX_VERSION 198808L

下面我们就从 POSIX入手开始介绍 Unix/Linux 方面的标准化发展历程。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

每个模块都包含了一系列所需的库及其强制性版本,外加对每个库的公共函数和数据定义的描述。这些模块还包括命名和组织规范,如文件系统层次标准(FHS,Filesystem Hierarchy Standard)中的文件系统布局或象 Freedesktop 的XDG 基础目录(XDG Base Directory)规范这样的目录规范。

LSB

在90 年代中期,Linux 也开始了自己的标准化努力。实际上,Linux 一直都试图遵守 POSIX 标准,因此在源代码级上具有很好的兼容性,然而对于 Linux 来说,仅仅保证源码级的兼容性还不能完全满足要求:在 Unix 时代,大部分系统都使用的是专有的硬件,软件开发商必须负责将自己的应用程序从一个平台移植到其他平台上;每个系统的生命周期也很长,软件开发商可以投入 足够的资源为各个平台发布二进制文件。然而 Linux 使用的最广泛的 x86 通用平台,其发行版是如此众多,而发展却如此之快,软件开发商不可能为每个发行版都发布一个二进制文件,因此就为 Linux 上的标准化提出了一个新的要求:二进制兼容性,即二进制程序不需要重新编译,就可以在其他发行版上运行。

实际上,在 Linux 社区中第一个标准化努力是文件系统层次标准(Filesystem Hierarchy Standard,FHS),用来规范系统文件、工具和程序的存放位置和系统中的目录层次结构,例如 ifconfig 命令应该放在 /usr/bin 还是 /usr/sbin 目录中,光驱应该挂载到 /mnt/cdrom 中还是 /media/cdrom 中。这些需求最终共同促进了 Linux Standard Base(LSB)项目的诞生。

LSB目前是 FSG(Free Standards Group)中最为活跃的一个工作组,其使命是开发一系列标准来增强 Linux 发行版的兼容性,使各种软件可以很好地在兼容 LSB 标准的系统上运行,从而可以帮助软件供应商更好地在 Linux 系统上开发产品,或将已有的产品移植到 Linux 系统上。

LSB 以 POSIX 和 SUS 标准为基础,并对其他领域(例如图形)中源代码的一些标准进行了扩充,还增加了对二进制可执行文件格式规范的定义,从而试图确保 Linux 上应用程序源码和二进制文件的兼容性。

回页首

似乎只是一个巧合,就在 LSB 5.0 发布的同一周,Debian 项目内部针对其是否值得保持兼容 LSB 进行了一次讨论。在另一个贴子中,在提及兼容 LSB 后,Didier Raboud 顺势提议将 Debian 的兼容工作维持在最低水平。他说,目前的情况是,Debian 的“lsb-*” 元包( meta-packages)试图规定该标准中提及的库的正确版本,但事实上却没有人去检查所有的符号和数据定义是否满足要求。

LSB 简介

LSB 是 Linux 标准化领域中事实上的标准,它的图标(请参看图 1)非常形象地阐述了自己的使命:对代表自由的企鹅(Linux)制定标准。给定企鹅的体形和三维标准之后,软件开发者就可以设计并裁减出各色花样的衣服 (应用程序),这样不管穿在哪只企鹅身上,都会非常合身。

另外,LSB 还不断在膨胀;他说, LSB 4.1 版(接近 Debian “jessie” 发布时的最新版本)包含“1493个组件、1672个库、38491条命令、30176个类和716202个接口”。似乎没有人有兴趣检查 Debian 包中的这些细节,他解释道,又补充说,“去年在 DebConf 上我举行过一次 LSB BoF,后来又与很多人讨论过 src:lsb,我收回自己的‘几乎没有人在意’的说法”。但,重要的是,Debian 似乎并不仅局限于兴趣的缺乏:

图1. LSB图标

美高梅官方网站66159 2

在现有标准基础上,LSB 制定了应用程序与运行环境之间的二进制接口,这主要是基于以下标准:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

我认为,这个问题的关键在于是否值得去玩这整个游戏:我还没听说有哪个软件通过 LSB 包来发行。LSB 认证的应用清单上只有 6个公司的8个应用,其中仅有一个是针对不低于 LSB 4 的。

实例:lsb_release 的规范定义和实现

我们知道,在 /etc 目录中有一个文件可以查看当前系统的版本信息,在 RHEL4U3(Red Hat Enterprise Linux 4 Update 3)上这个文件是 /etc/redhat-release:

# cat /etc/redhat-release 
Red Hat Enterprise Linux ES release 4 (Nahant Update 3)

在 SLES9SP3(SUSE LINUX Enterprise Server 9 Service Pack 3)上这个文件是 /etc/SuSE-release:

# cat /etc/SuSE-release 
SUSE LINUX Enterprise Server 9 (i586)
VERSION = 9
PATCHLEVEL = 3

我们可以看出,在这两个发行版上,不但使用的文件不同,文件的内容和格式也完全不同。如果开 发人员在自己的程序中使用这些信息,他们就很难使用一个统一的接口来获取发行版本的信息,因此必须为每种平台都定制一个脚本或开发一个程序才能实现这种功 能,这无疑会增加很多工作量,而且所生成的程序的可移植性也会很差。

为了解决这个问题,LSB 规范中增加了对 lsb_release 接口及其输出格式的定义:lsb_release 的功能是打印与发行版本相关的信息,必须实现以下选项(详细规范的定义请参考 /LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/lsbrelease.html):

Raboud 提议 Debian 摈弃除了 lsb-base 包(目前包括一个用于启动系统所需的小的 shell 函数集合)和 lsb-release 包(提供一个简单工具,用户可用它查询发行版的身份以及该发行版宣称的与哪个 LSB 级别兼容)之外的所有内容。

表1. LSB对lsb_release 接口定义

美高梅官方网站66159 3

我 们前面已经介绍过,通过 LSB 认证发行版或软件可以得到 FSG/LSB 的授权,贴上 "LSB Certified"的标签进行销售。实际上,在通过 LSB 认证的系统上,我们可以看到一个与 LSB 有关的包,其中包含了 LSB 规范中对 lsb_release 接口规范的实现。lsb_release 是 LSB-Core-generic 规范中要求的一个接口,各种平台(目前可以支持的 7 种平台: IA32、IA64、X86_64、PPC32、PPC64、S390 和 S390x)上都应该提供这个接口的实现。在 RHEL4U3 上,我们可以找到一个名为 redhat-lsb 的包(RHEL4U3 遵守的是 LSB 3.0 版本的规范,因此这个包的版本是 redhat-lsb-3.0-8.EL),该包的内容如下:

# rpm -ql redhat-lsb
/bin/mailx
/etc/lsb-release.d
/etc/lsb-release.d/core-3.0-ia32
/etc/lsb-release.d/core-3.0-noarch
/etc/lsb-release.d/graphics-3.0-ia32
/etc/lsb-release.d/graphics-3.0-noarch
/etc/redhat-lsb
/etc/redhat-lsb/lsb_killproc
/etc/redhat-lsb/lsb_log_message
/etc/redhat-lsb/lsb_pidofproc
/etc/redhat-lsb/lsb_start_daemon
/lib/ld-lsb.so.3
/lib/lsb
/lib/lsb/init-functions
/usr/bin/lsb_release
/usr/lib/lsb
/usr/lib/lsb/install_initd
/usr/lib/lsb/remove_initd
/usr/sbin/redhat_lsb_trigger.i386
/usr/share/man/man1/lsb_release.1.gz

而在 SLES9SP3 中,这个包的名字是 lsb(lsb-3.0-4.8),它包含的内容如下:

# rpm -ql lsb 
/etc/lsb-release
/etc/lsb-release.d
/etc/lsb-release.d/graphics-2.0-ia32
/etc/lsb-release.d/graphics-2.0-noarch
/etc/lsb-release.d/graphics-3.0-ia32
/etc/lsb-release.d/graphics-3.0-noarch
/lib/ld-lsb.so.2
/lib/ld-lsb.so.3
/usr/bin/lsb_release
/usr/share/man/man1/lsb_release.1.gz

我们可以看出,在这两个发行版上的两个包中存在一些共同的文件:

  • /usr/bin/lsb_release
  • /lib/ld-lsb.so.3

其中 /lib/ld-lsb.so.3 在两个系统上都是一个符号链接:

# ls -l /lib/ld-lsb.so.3 
lrwxrwxrwx  1 root root 13 Apr 20 03:04 /lib/ld-lsb.so.3 -> ld-linux.so.2

系 统中提供的大部分应用程序都是链接到了 ld-linux.so.2 上,但是兼容 LSB 标准的应用程序都可以链接到 ld-lsb.so.3 上(由于 SLES9SP3 还兼容 LSB 2.0 的规范,因此系统中还存在一个 /lib/ld-lsb.so.2 库,也是指向 ld-linux.so.2 的符号链接;而 RHEL4U3 不兼容 LSB 2.0 的规范,因此没有这个库)。

而 /usr/bin/lsb_release 就是对 lsb_release 接口的具体实现,在这两个系统上都是一个 shell 脚本。下面我们分别在这两个系统上执行 lsb_release -a 命令,在 RHEL4U3 上的结果如下:

# /usr/bin/lsb_release -a
LSB Version:   
:core-3.0-ia32:core-3.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch:log
Distributor ID: RedHatEnterpriseES
Description:    Red Hat Enterprise Linux ES release 4 (Nahant Update 3)
Release:        4
Codename:       NahantUpdate3

在 SLES9SP3 上的结果如下:

# /usr/bin/lsb_release -a
LSB Version:   
core-2.0-noarch:core-3.0-noarch:core-2.0-ia32:core-3.0-ia32:graphics-2.0-ia32:
graphics-2.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch
Distributor ID: SUSE LINUX
Description:    SUSE LINUX Enterprise Server 9 (i586)
Release:        9
Codename:       n/a

我们可以看出,在这两个系统上,lsb_release 命令的位置、用法、输出格式都是相同的,因此开发人员可以使用它编写兼容性非常好的程序。

再看一下在这两个系统上与 lsb_release 有关的包,我们会发现二者之间有一些区别,例如在 SLES9SP3 上存在一个 /etc/lsb-release 文件,其中存放的是所遵循的 LSB 标准的版本,内容如下:

# cat /etc/lsb-release
LSB_VERSION="core-2.0-noarch:core-3.0-noarch:core-2.0-ia32:core-3.0-ia32"

而在 RHEL4U3 上并没有这个文件,但是在 /etc/lsb-release.d 目录中的文件却比 SLES9SP3 上多:

  • /etc/lsb-release.d/core-3.0-ia32
  • /etc/lsb-release.d/core-3.0-noarch
  • /etc/lsb-release.d/graphics-3.0-ia32
  • /etc/lsb-release.d/graphics-3.0-noarch

而 在 SLES9SP3 上只有以 graphics 开头的文件。仔细查看一下 /usr/bin/lsb_release的实现我们就会发现,所遵守的 LSB 规范的列表既可以保存在 /etc/lsb-release 文件中,也可以以文件的形式放到 /etc/lsb-release.d 目录中。因此 LSB 只是对接口定义进行了规范,但却没有限定具体的实现,这样既可以为发行版供应商提供充分的自由,又为应用程序开发人员提供了一致的接口,可以得到最大限度 的推广和应用。

回页首

后来,他又称,将 LSB 基本上改变为“Debian 和 FLOSS 世界中的所有的其它人所实际做的任何事”可能会使得该标准(以及在 Debian 为支持它所做的工作)更有价值。但此时他再次质疑是否有人会对推动这个目标有兴趣。

结束语

标 准化的 Linux 操作系统可以为应用程序开发者提供一个开发应用程序的良好平台,使他们开发的应用程序可以非常平滑地移植到其他发行版本上。LSB 通过定义一系列规范,并提供标准测试套件和开发环境,可以帮助开发人员更容易地开发遵守规范的应用程序,辅助供应商构建更标准的系统。在本系列的下一篇文 章中,我们将介绍如何使用 LSB 标准提供的测试工具来验证系统和应用程序是否遵守 LSB 规范。

如果说他最初称 LSB 中缺乏兴趣没有足够的证据,随后整整三个月之内没有任何人对维持 LSB 兼容的包提供支持,并进行了两次拋弃它们的投票。最后,9月17日,Raboud 宣布他已经抽掉 src:lsb 包(如前所述,保留了lsb-baselsb-release),将将其上载到 “unstable” 归档中。这个最小的工具集可以让感兴趣的用户在启动了下一个 Debian 版本后查询它是否兼容 LSB:结果将为“否”。

参考资料

  • 有关 Open Group 以及相关标准的介绍,请参看 Open Group 的网站 。
  • 有关 Free Standards Group(FSG)及其主持的项目的信息,请参看 FSG 的网站: 。
  • 有关 Austin Group 的更多信息,请参看 Austin Group 的官方网站 。
  • 有关 Unix 的发展历史和标准化努力,请参考Eric S. Raymond 撰写的"The Art of Unix Programming"一书(),重要的历史事件可以参看History and Timeline ()。
  • 在 Distrowatch 的 Web 站点上()可以看到大部分 Linux 发行版的信息。
  • 由 LSB 项目团队共同编写的 "Building Applications with the Linux Standard Base" 一书,介绍了如何创建 LSB 兼容的软件,并进行测试和认证()。
  • 有关 Linux Standard Base(LSB)的更多内容,请参看 LSB 的主页()。
  • 要了解通过 LSB 认证的产品列表,请参看 。
  • LSB 的详细规范,请参看 。
  • LSB 提供的测试套件,可以从 上下载。
  • 要对自己的产品进行 LSB 规范兼容性认证,提交或查询问题报告,请访问 。

Raboud 补充说,即便摈弃了兼容 LSB,Debian 仍计划继续兼容 FHS:

但 Debian 并没有放弃所有的 LSB:我们仍将严格遵守 FHS(直到 Debian Policy 版本 2.3;虽然今年8月已经发布了3.0),而且我们的 SysV 启动脚本几乎全部遵循 VIII.22.{2-8}。但请不要误解,此次 src:lsb 上载明确说明我们将离开 LSB。

在该宣告之后,Nikolaus Rath 回应称某些私有应用依赖/lib/lib64中的符号链接ld-lsb.so*,而这些符号链接由lsb-*包提供。Raboud 则建议应改由libc6包提供;该包维护人员Aurelien Jarno 称,如果提供这样一个补丁,他将会接受它。

似乎唯一的遗留问题只是某些打印机驱动包会依赖 LSB 兼容。Raboud 称,在其首个贴子中已经说明,据他所知,实际发布的唯一一个依赖 LSB 兼容的包为 OpenPrinting 驱动程序。Michael Biebl 称,主归档中有这样一个驱动包;Raboud 则回应说,他认为这个有问题的包应该被移到非自由仓库,因其包括了一个二进制驱动。

于是,这个问题看上去已经尘埃落定,至少对于目前的 Debian 开发周期来说是如此的状况。很自然的是,未来让人更感兴趣的是,如果该决定存在一些影响的话,那么人们将会看到它对更广泛的 LSB 接受度有何影响。正如 Raboud 所说的那样,被认证为 LSB 兼容的发行版数量很少。人们很难不会注意到这些发行版很大程度上是“企业”的变种。

也许,对某些商业领域来说,LSB 仍很重要,但很难知道有多少那些企业发行版的客户真正关心 LSB 认证标签。然而,如果 Debian 的经验靠得住的话,对这种认证的一般兴趣可能会急剧下降。


via:https://lwn.net/Articles/658809/

作者:Nathan Willis
译者:Yuking
校对:wxy

本文由 LCTT 原创编译,
Linux中国 荣誉推出

上一篇:没有了

更多新闻推荐

Copyright © 2015-2019 http://www.77zhth.net. 美高梅官方网站66159有限公司 版权所有