下面现学现卖
如果单说现代的类nix系统中是否“向下”兼容UNIX标准,可以说基本都兼容。但是要说所有现代类nix系统之间兼容程度如何,就要问哪个(Linux)发行版本与哪个 (Unix)版本的哪些部分兼容,毕竟每个Linux发行版本之间也有兼容问题。本人还真的说不好,没有特别的深入所以没有实际体会。大家叫做它们*nix的,都一定程度 可以彼此兼容,同时都有各自不同程度的扩展。
刚才看了看SUS的标准部分,它的测试程序不免费需购买,所以没法像Linux系统那样随手拈来地使用。而且它的注册保有这个这个许可也是老贵了(Note 0).
从Unix角度说,原教旨的Unix几乎绝迹了,参考下Wikipedia上的Unix的解释(Note 2),特别是那个关系图最直观。举一个例子,UNIX的Base Specifications, Issue 7, 2018 Edition中的12.2 Utility Syntax Guidelines的前面三条说明来说(Note 3):
Guideline 1: Utility names should be between two and nine characters, inclusive.
Guideline 2: Utility names should include lowercase letters (the lower character classification) and digits only from the portable character set.
Guideline 3: Each option name should be a single alphanumeric character (the alnum character classification) from the portable character set. The -W (capital-W) option shall be reserved for vendor options. Multi-digit options should not be allowed.
随着各个操作系统的扩展,它们很多都不符合这些规则(也没必要完全符合)。可以举出很多的Linux/OS X系统中的命令的例子不符合这三个规则,就如apt-get命令的"-"就不符合规则2,再如OS X中的networksetup命令也不符合第一条;更别说现在流行使用的“--”参数格式了。
同样是grep命令,Linux中的-T选项在Solaris和Mac中没有,在Mac上也没有-u参数(Note 4),那-T和-u两个参数都是各自版本的扩展,在标准中没有这两个参数,更没有--version这类的。如果一个程序使用-T参数,那么它在Solaris和Mac 上的运行结果就可能不正确,但是各个版本都支持--version/--color/--null的参数,那么一个程序虽然不符合UNIX标准,但是却可以在多个系统中使 用。
现代操作系统,仅仅满足UNIX标准是没有生命力的,对于非开源的软件来说和各自基于的硬件平台的不同,必定造成各自的发展会相去很多。UNIX标准在现代操作系统中的作 用是较局限的。UNIX标准对于现今的系统来说,它涵盖的内容很有限,拿UNIX 03标准来说,它主要是包括4个方面(Note 1):
The UNIX 03 Product Standard is built out of the following subsidiary Product Standards:
- Internationalized System Calls and Libraries Extended V3
- Commands and Utilities V4
- C Language V2
- Internationalized Terminal Interfaces
尤其是当涉及到操作系统特性的编程时,可移植性就会有很多的疑问。从原来的Unix的纯文本界面,到现在的内核+GUI的系统,有了很大的改进。具体到某一个软件本身,就 要具体问题具体分析了。
要说为什么现在好多Linux软件都可以比较容易的跨平台安装使用,个人认为,主要是它们都使用了现成通用的轮子/齿轮和底盘(服务/程序/库/语言等),只要这些轮子全 被成功移植到一个平台就可以了。
这些文章说的可能更清楚些:Linux vs Unix和Linux Vs Unix: The Crucial Differences That Matter To Linux Professionals
Note 0: The Open Brand Fee Schedule
Note 1: 2.1.2 The UNIX 03 Product Standard
Note 2: Unix
Note 3: https://publications.opengroup.org/c181
Note 4:https://blogs.warwick.ac.uk/peggleton/entry/grep_on_solaris;https://linux.die.net/man/1/grep;https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPag es/man1/grep.1.html