一、POSIX
全称为“Portable Operating System Interface ”,是一套关于“application programming interface (API,即应用编程接口), command line shells interfaces,utility interfaces”等的标准规范,遵循POSIX开发的软件产品在所有遵循POSIX的操作系统上可通用。
根据遵循POSIX的程度,操作系统可分为“完全不遵循POSIX”,“部分遵循POSIX”和“完全遵循POSIX”(其实现实中并没有完全遵循POSIX的操作系统)。
需要注意的是,POSIX的制定以Unix为基础,但又扩展于Unix。因而,最后我们只能说,Unix操作系统“部分遵循POSIX”。
有些操作系统“完全不遵循POSIX”,但是可以在这些操作系统上安装一层软件层,这层软件层遵循支持POSIX,从而使得这些操作系统具有支持POSIX的能力。比如Windows上的“Cygwin”,“MinGW”等,OS2上的“emx+gcc”等,DOS上的“emx+gcc ”等。
接下来,根据与POSIX的关系,对操作系统进行分类。
1.1、通过POSIX认证
“通过POSIX认证”表示遵循1项或者多项POSIX标准规范,并且通过POSIX自动化测试集。属于该类的操作系统有:HP-UX,OS X,Solaris等。
1.2、事实POSIX兼容
“事实POSIX兼容”:表示虽未通过POSIX认证,但是事实上遵循1项或者多项POSIX标准规范。属于该类的操作系统有:Linux,FreeBSD,NetBSD,MINIX,OpenBSD,SkyOS,Android等。
二、GNU
GNU是Richard Stallman想要开发的一个操作系统,它的全称是“GNU’s Not Unix!”。Richard Stallman对该操作系统的设想是兼容Unix(也就是部分或者完全遵循POSIX),但却是一个完全自由的操作系统。要开发GNU操作系统,需要开发一个操作系统内核和一系列基础软件库。GNU内核的开发属于一波三折,到今日为止还不算成功完成;倒是一系列基础软件库的开发非常顺利,比如GNU编译器套装(GCC),GNU的C库(glibc),GNU核心工具库(coreutils),GNU调试器(GDB)、GNU二进制实用程序包(里面包含有著名的GNU Bash shell) 和GNOME桌面环境等。期间,涌现了很多优秀的操作系统内核,比如“FreeBSD,Linux”等,“FreeBSD,Linux等操作系统内核”加上“GNU系列基础软件库”构成了一个完整的操作系统。正是因为这样,有观点认为,现在的Linux操作系统准确地应该被称为“GNU/Linux操作系统”。
GNU操作系统内核和GNU基础软件库都遵循POSIX。但是不是完全遵循,只是部分遵循。比如在POSIX标准规范中,“df”和“du”命令的块大小定为512字节,而为了更符合常识,“GNU df”和“GNU du”命令的实现中还是将块大小定为1024字节。
参考文献
[1]https://en.wikipedia.org/wiki/POSIX
[2]https://zh.wikipedia.org/wiki/GNU