POSIX
定义
POSIX是一套规定操作系统对外提供何种接口的技术规范,并不规定操作系统内部如何实现。它由电气电子工程师协会下属计算机学会制定,正式编号为IEEE 1003,对应的国际标准为ISO/IEC 9945[1][2]。早期文献中POSIX常特指1988年出版的IEEE 1003.1-1988,后来为了区分整个标准族,把该文档称作POSIX.1[1]。
POSIX的核心目的是源码级可移植性:程序只要调用标准规定的函数、使用标准工具和命令解释器(shell),理论上无需改写就能在符合标准的系统上重新编译运行[1][2]。它描述的是应用程序开发者关心的外部特性和设施,而非达到这些能力所用的内部构造技术[4]。
原理
POSIX的工作方式是在应用程序与操作系统内核之间约定一层统一的调用界面。标准以C语言定义系统服务函数与头文件,例如文件读写、进程创建、信号处理等,各系统各自实现这些函数,把调用转换为本平台的内核操作[1][5]。这样同一份源代码在不同系统上编译时,面对的是同一组函数名与语义。
现行标准在结构上分为若干卷:基本定义卷列出通用术语、概念、接口以及C语言头文件定义;系统接口卷规定系统服务函数与子程序;shell与实用程序卷规定命令解释服务和常用工具;原理卷则记录历史沿革与取舍理由[2][4]。标准还以最小限度接口和最小限度定义为原则,尽量避免要求既有实现做大量改动[6]。
标准族中的实时扩展和线程扩展曾以单独文档出现,后来被合并进主标准。POSIX.1b规定实时编程接口,POSIX.1c规定线程接口,两者分别于1993年和1995年由IEEE通过,并归入ISO/IEC 9945-1[5]。2001年的修订把系统接口、shell与工具以及开放组织的规范合并为单一版本,此后多数内容集中在一份文档中[2]。
发展历程
标准工作起于20世纪80年代,在/usr/group协会相关工作的基础上推进,最早的可对外成果是1986年3月发布的试用标准[7][8]。1988年8月22日,IEEE标准委员会通过IEEE 1003.1-1988,同年9月30日出版,这是第一份正式的POSIX标准,内容取自当时几种主流Unix系统的共同部分,限定于进程、文件和输入输出等基础服务[9][10]。
名称POSIX由理查德·斯托曼向IEEE建议,用来替代原先的IEEE-IX,委员会认为它更易读易记而采纳,标准文本还给出按“positive”前半读音的读法说明[7][1]。该标准随后被美国联邦政府采纳为FIPS 151-1[10]。
1990年IEEE通过修订版1003.1-1990,1992年通过面向shell与工具的1003.2标准,同年还通过了Ada语言和Fortran语言的对应接口标准[5][9]。1998年起,IEEE、ISO/IEC JTC 1 SC22与开放组织(The Open Group)组成联合工作组,即Austin Group,共同编制统一版本,其成果POSIX.1-2001于2002年1月30日发布,同时构成Single UNIX Specification第3版的核心[11]。
此后标准大致每数年修订一次:2008年版同时作为ISO/IEC 9945与Single Unix Specification第3版核心;2017年版为第7版;2024年6月14日出版的第8版为现行有效版本[2]。中国也制定了对应国家标准GB/T 14246.1-1993,等同采用POSIX.1的系统应用程序界面部分[12]。
应用
POSIX最主要的用途是支撑跨平台的软件开发。应用程序若只使用标准规定的函数与工具,就可减少针对不同类Unix系统的改写工作;很多开源软件的构建脚本、配置脚本也以POSIX shell语法和工具作为最低要求[1][7]。
在多用户与实时领域,POSIX的线程接口被多数现代操作系统支持,实时扩展则被用于嵌入式与实时操作系统,要求系统在规定时限内给出确定性响应[7][13]。此外,网络协议无关接口、事务处理、Ada与Fortran语言绑定等分标准,把标准族扩展到更专门的应用场景[5]。
不同系统对POSIX的接纳程度并不一致。Linux被普遍认为基本遵循POSIX接口,但并未参加正式的POSIX认证;Windows NT系列曾内置POSIX子系统,微软称其只实现了标准的一部分,该组件后来被移除,2016年起以面向Linux的子系统提供类POSIX环境[5][14]。认证通常由标准组织依据一致性测试完成,通过后可获得相应品牌使用权[15]。
在超级计算与专用应用环境方面,POSIX还衍生出应用环境框架类标准,用以描述实时或高性能应用对接口的具体要求[5]。
局限
POSIX只保证源码级可移植,并不保证目标代码或二进制程序可在不同系统间直接运行,这一点被标准明确排除在范围之外[2][4]。图形界面、数据库管理系统接口、带记录的输入输出、系统配置与资源可用性同样不在标准覆盖范围内[2][12]。
接口一致也不等于行为一致。标准留出大量可选特性和未规定行为,各系统的扩展差异明显,程序若依赖标准之外的特性,移植时仍需针对平台修改[2]。有研究指出,POSIX的输入输出模型以同步调用为基础,难以适配加速器、高性能异步输入输出等新硬件与新场景,标准本身也没有针对协处理器或加速器的机制,这些设备只能被当作输入输出设备处理。
随着高层语言、托管运行时和分布式服务成为主流,开发者更多面对框架提供的接口而非底层系统调用,POSIX抽象与单机绑定的特点使其在现代服务开发中的直接作用有所下降。因此,符合标准往往只是可移植的必要条件,而不是充分条件。
参见
参考资料
- POSIX.1 Backgrounder [引用日期2026-10-29]
- IEEE SA - IEEE 1003.1-2024 - Active Standard [引用日期2026-10-29]
- xbdindex(PDF) [引用日期2026-10-29]
- cssn.net.cn 上的网页 [引用日期2026-10-29]
- [科普中国]-可移植操作系统接口 [引用日期2026-10-29]
- POSIX 标准简介 · Issue #701 · cisen/blog - Skip to content [引用日期2026-10-29]
- epfl.ch 上的网页 [引用日期2026-10-29]
- oracle.com 上的 PDF 文件 [引用日期2026-10-29]
- IEEE SA - IEEE 1003.1-1988 [引用日期2026-10-29]
- POSIX [引用日期2026-10-29]
- POSIX [引用日期2026-10-29]
- cssn.net.cn 上的网页 [引用日期2026-10-29]
- pdf [引用日期2026-10-29]
- 6C-01 [引用日期2026-10-29]
- Unix-like [引用日期2026-10-29]