Chinaunix

标题: linux 标准 [打印本页]

作者: fredwoor    时间: 2007-12-18 16:15
标题: linux 标准


POSIX
最初的设计目标是为 Unix System V 和 BSD Unix 等 Unix
系统上的特性制定规范,使其可以实现更好的可移植性。但是很多其他系统都也兼容POSIX 标准。例如,微软的 Windows NT 就兼容
POSIX 标准的实时部分(POSIX.1b),而 RTOS(LynxOS real-time operating system)也与
POSIX 标准兼容。Windows 上可以通过安装 Windows 的 Services for UNIX 或 Cygwin 来增强对
POSIX 标准的兼容度。
Open Group

Open Group 是现在
Unix 商标的拥有者,其前身是 X/Open。X/Open 是 Unix 厂商在 1984 年成立的一个联盟,它试图为众多 Unix
变种定义一个安全公共子集,因此即使在 Unix 混战的年代,也得到了比较好的发展。在 1993 年,包括主要 Unix 公司在内的75
家系统和软件供应商委托 X/Open 为 Unix 制定一个统一的规范。X/Open在现有标准基础上,增加了对终端进行处理的 API 和
X11 API,并全面兼容 1989 ANSI C 标准,最终诞生了第一版本的单一 Unix规范(Single Unix
Specification,简称 SUS)。

X/Open在 1996 年与 OSF(开放软件基金会)进行合并,成立了
Open Group 组织,专门从事开放标准的制定和推广工作,并对很多领域提供了认证,包括 Unix 操作系统、Motif 和
CDE(Common Desktop Environment)用户界面。
Austin Group

Austin
Group 是在 1998 年成立的一个合作技术工作组,其使命是开发并维护 POSIX.1 和 SUS 规范。Austin Group
开发规范的方法是"write once, adopt everywhere",即由 Austin Group 制定的规范既会成为 IEEE
POSIX 规范,又会成为 Open Group 的 技术标准规范,以后又会被采纳为 ISO/IEC 的标准。新开发的规范后来就被标准化为
ISO/IEC 9945 和IEEE Std 1003.1,并成为 SUSV3 的核心部分。

这种独特的开发模式最大限度地利用了业界领先的工作成果,将正式的标准化工作转化成了一个唯一的行为,并且吸引了广泛的参与者。Austin Group 目前有 500 多个参与者,工作组的主席是 Open Group 的 Andrew Josey。
LSB

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

工作组

LSB 项目包含几个子项目(也称为工作组),分别负责不同的职责范围,简介如下:



LSB 的标准化流程

LSB 对于标准的制定和推广遵循务实的原则,它自己不会自行制定标准然后强行要求业界接受,而是把业界中已经成熟的技术和规范采用标准化的形式固定下来,然后大力加以推广,这样可以更广泛地为软件供应商和用户接受。

一个新领域要想纳入 LSB 标准的范畴,必须经过以下 3 个步骤:

1. 鉴定:确认这个领域是否已经足够成熟,是否具有稳定的 ABI/API,是否需要进行标准化,以及是否依赖于尚未标准化的领域。
2. 调研:调查上游软件维护者是否还在积极维护,软件是否稳定,是否具有很好的向后兼容性。
3. 实现:将该领域加入 LSB 数据库、编写规范、编写测试套件、并将其加入开发环境、SI 和 APPBAT。
经过这 3 个步骤之后,LSB Future SubGroup 就会将其提交给 LSB 工作组,将其包含到 LSB 的下一个版本中进行发布,并对外提供认证服务。

但是有时可能并非是测试环境的问题,而是测试套件本身的问题,或者是由于系统中存在一个公认但却暂时无法修复的问题,此时并不影响 LSB
的认证的结果。如果出现这种问题,测试人员可以将这个问题反馈给
LSB(http://www.freestandards.org/cert/prsubmit.php),经过确认之后,LSB 会在一个
waiver 文件中列出这种情况,并将对应的测试套件暂时剔除,并尝试在下一个版本中进行修复。我们也可以从
http://www.freestandards.org/cert/pr.php 上查看已经发现的问题。

  

   

  
回页首
   LSB 的历史、现状和将来

LSB
项目最初发起于 1998 年 5 月,其项目启动宣言得到了 Linus Torvalds、Bruce Perens、Eric Raymond
等人的签名支持,当时的目标是建立一系列构建 Linux 发行版所采用的源代码应该遵循的标准,并提供一个参考平台。2000 年 5 月,LSB
成为 Free Standards Group(FSG) 的一个工作组。FSG
是一个独立的非盈利组织,专注于通过开发和促进标准来加速开源软件的发展。

从 2001 年 6
月发布第一个正式版本的规范以后,LSB 规范几乎每 6 个月都会进行一次更新。截止到 2005 年 7 月发布的 3.0 版本为止,LSB
重点关注的是服务器端的使用,这与 Linux 在服务器端得到了广泛的应用是一致的。这个规范已经被 ISO 采纳为国际标准 23360。

目前最新的版本规范是 2005 年 10 月发布的 LSB 3.1,目前它可以支持 7 种体系结构:




由于平台的差异,所有的规范除了有一个通用的版本之外,还都存在一个适用于特定平台的版本,其中的内容是完全适用于这个平台的。


上一个版本相比,LSB 3.1 版本的规范主要是增强了对桌面系统的标准化支持,增加了对 GTK 和 QT GUI 工具包的标准化。另外,LSB
还调整了自己的路线图,以便可以与主流的 Linux 发行商(Redhat、Novell、Asianux、Debian
等)的发行计划更好地吻合,并吸引了更多 Linux
发行商的参与,对开发工具和文档进行了改进,还与各个国家的组织(例如中国电子技术标准化研究所,CESI)进行认证方面的合作。

下一个版本 LSB 3.2 将在 2007 年第二季度发布,将主要增加 freedesktop.org 的标准和跨桌面的交互操作性。

LSB 4.0 将在 2008 年发布,它将实现更好的二进制兼容性,并增加对 Perl、Python、LAMP、Java 等语言的标准化支持。详细路线图及各个主要版本的特性如图 3 所示:
图3. LSB 主要版本的路线图
回页首
   实例: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
的功能是打印与发行版本相关的信息,必须实现以下选项(详细规范的定义请参考http:
//refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/lsbrelease.html):
表1. LSB对lsb_release 接口定义


们前面已经介绍过,通过 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   

我们可以看出,在这两个系统上,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 上多:





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

  

   

  
回页首
   结束语

准化的 Linux 操作系统可以为应用程序开发者提供一个开发应用程序的良好平台,使他们开发的应用程序可以非常平滑地移植到其他发行版本上。LSB
通过定义一系列规范,并提供标准测试套件和开发环境,可以帮助开发人员更容易地开发遵守规范的应用程序,辅助供应商构建更标准的系统。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/11982/showart_445033.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2