The Single UNIX Specification (SUS) is a standard for computer operating systems, [1] [2] compliance with which is required to qualify for using the "UNIX" trademark. The standard specifies programming interfaces for the C language, a command-line shell, and user commands. The core specifications of the SUS known as Base Specifications are developed and maintained by the Austin Group, which is a joint working group of IEEE, ISO/IEC JTC 1/SC 22/WG 15 and The Open Group. If an operating system is submitted to The Open Group for certification, and passes conformance tests, then it is deemed to be compliant with a UNIX standard such as UNIX 98 or UNIX 03.
Very few BSD and Linux-based operating systems are submitted for compliance with the Single UNIX Specification, although system developers generally aim for compliance with POSIX standards, which form the core of the Single UNIX Specification.
The latest SUS consists of two parts: the base specifications technically identical to POSIX, and X/Open Curses specification. [3]
Some parts of the SUS are optional.
The SUS emerged from multiple 1980s efforts to standardize operating system interfaces for software designed for variants of the Unix operating system. The need for standardization arose because enterprises using computers wanted to be able to develop programs that could be used on the computer systems of different manufacturers without reimplementing the programs. Unix was selected as the basis for a standard system interface partly because it was manufacturer-neutral.
In 1984, the UNIX user group called /usr/group published the results of their standardization effort for programming interfaces in their 1984 /usr/group standard, which became basis for what would become the POSIX.1-1988 standard. [4] [5]
In 1985, AT&T published System V Interface Definition (SVID), a specification of UNIX System V programming interfaces. [6]
In 1988, standardization efforts resulted in IEEE 1003 (also registered as ISO/IEC 9945), or POSIX.1-1988, which loosely stands for Portable Operating System Interface.
The X/Open Portability Guide (XPG) was a precursor to the SUS, published by the X/Open Company, a consortium of companies established in 1984. The guides were published in the following years.
XPG4 Base included the following documents:
In the early 1990s, a separate effort known as the Common API Specification or Spec 1170 was initiated by several major vendors, [9] who formed the COSE alliance in the wake of the Unix wars. In 1993, Spec 1170 was assigned by COSE to X/Open for fasttrack. [10] In October 1993, a planned transfer of UNIX trademark from Novell to X/Open was announced; [11] it was finalized in 2nd quarter of 1994. [12] Spec 1170 would eventually become the Single Unix Specification. [9]
In 1994, the X/Open Company released the Single UNIX Specification. [9] The SUS was made up of documents that were part of the X/Open Common Applications Environment (CAE): [9]
This was a repackaging of the X/Open Portability Guide (XPG), Issue 4, Version 2.
Sources differ on whether X/Open Curses, Issue 4, Version 2 was part of this SUS; [9] [17] its copyright date is given as 1996. [18] X/Open Curses, Issue 4 was published in 1995. [19]
In October 1994, X/Open indicated they were going to refer to Spec 1170 as '"Single-Unix" specification'. [20]
The SUS was at the core of the UNIX 95 brand. [21]
This version had 1168 programming interfaces. [22]
This version of SUS was drawn from the following sources: [9]
In 1996, X/Open merged with Open Software Foundation (OSF) to form The Open Group. [23] [24]
In 1997, the Open Group released the Single UNIX Specification, Version 2. [25] [26]
This specification consisted of: [27]
and was at the core of the UNIX 98 brand. [33]
This version had 1434 programming interfaces. [22]
Beginning in 1998, a joint working group of IEEE, ISO JTC 1 SC22 and The Open Group known as the Austin Group began to develop the combined standard that would be known as the core of Single UNIX Specification, Version 3 and as POSIX.1-2001. It was released on January 30, 2002. [34]
This SUS consisted of: [35]
and is at the core of the UNIX 03 brand. [36]
The Base Specifications are technically identical to POSIX.1-2001, which is IEEE Std 1003.1-2001. [35]
This version had 1742 programming interfaces. [22]
An authorized guide is available for the version. [37]
In 2004, a new edition of the POSIX.1-2001 standard was released, incorporating two technical corrigenda. [38] [39] It is called IEEE Std 1003.1, 2004 Edition. [39] Some informally call it POSIX.1-2004, [40] [41] [42] but this is not an official identification.
In December 2008, the Austin Group published a new major revision of SUS and POSIX. [43] [44] [45] This is the Single UNIX Specification, Version 4 (SUSv4). [46]
This SUS consists of: [47]
The Base Specifications are technically identical to POSIX.1-2008, which is IEEE Std 1003.1-2008. [47]
This version had 1833 interfaces, of which 1191 were in the System Interfaces section. [48]
Technical Corrigendum 1 mostly targeted internationalization, and also introduced a role-based access model. A trademark UNIX V7 (not to be confused with V7 UNIX, the version of Research Unix from 1979) was created to mark compliance with SUS Version 4. [49]
Technical Corrigendum 2 was published in September 2016, leading into IEEE Std 1003.1-2008, 2016 Edition and Single UNIX Specification, Version 4, 2016 Edition.
In January 2018, an "administrative rollup" edition was released. It incorporates Single UNIX Specification version 4 TC1 and TC2, and is technically identical to the 2016 edition. [50]
The Base Specifications are technically identical to POSIX.1-2017, which is IEEE Std 1003.1-2017. [51]
SUSv3 totals some 3700 pages, which are divided into four main parts:
The standard user command line and scripting interface is the POSIX shell, an extension of the Bourne Shell based on an early version of the Korn Shell. Other user-level programs, services and utilities include awk, echo, ed, vi, and hundreds of others. Required program-level services include basic I/O (file, terminal, and network) services. A test suite accompanies the standard. It is called PCTS or the POSIX Certification Test Suite.
Additionally, SUS includes CURSES (XCURSES) specification, which specifies 372 functions and 3 header files. All in all, SUSv3 specifies 1742 interfaces.
Note that a system need not include source code derived in any way from AT&T Unix to meet the specification. For instance, IBM OS/390, now z/OS, qualifies as UNIX despite having no code in common. [52]
There are five official marks for conforming systems: [53] [54]
Product | Vendor | Architecture | UNIX V7 [59] | UNIX 03 [58] | UNIX 98 [57] | UNIX 95 [56] | UNIX 93 [55] |
---|---|---|---|---|---|---|---|
AIX | IBM Corporation | POWER processors | Yes | Yes | No | No | No |
HP-UX | Hewlett Packard Enterprise | IA-64, PA-RISC | No | Yes | No | No | No |
macOS | Apple | x86-64, ARM64 | No | Yes | No | No | No |
OpenServer | Xinuos | IA-32 | No | No | No | No | Yes |
UnixWare | Xinuos | IA-32 | No | No | No | Yes | No |
z/OS | IBM Corporation | z/Architecture | No | No | No | Yes | No |
AIX version 7, at either 7.1 TL5 (or later) or 7.2 TL2 (or later) are registered as UNIX 03 compliant. [61] AIX version 7, at 7.2 TL5 (or later) are registered as UNIX V7 compliant. [62] Older versions were previously certified to the UNIX 95 and UNIX 98 marks. [63]
HP-UX 11i V3 Release B.11.31 is registered as UNIX 03 compliant. Previous releases were registered as UNIX 95. [64]
Apple macOS (formerly known as Mac OS X and OS X) is registered as UNIX 03 compliant. [65] The first version registered was Mac OS X 10.5 Leopard, certified on October 26, 2007 (on x86 systems). [66] [67] All versions of macOS from Mac OS X Leopard to macOS 10.15 Catalina, except for OS X Lion, [68] have been registered on Intel-based systems, and all versions from macOS 11 Big Sur, the successor to macOS Catalina, to macOS 14 Sonoma have been registered on both x86-64 and ARM64 systems. [69]
UnixWare 7.1.3 and later is registered as UNIX 95 compliant. OpenServer 5 and 6 are registered as UNIX 93 compliant.
IBM z/OS 1.2 and higher is registered as UNIX 95 compliant. z/OS 1.9, released on September 28, 2007, and subsequent releases "better align" with UNIX 03. [70]
EulerOS 2.0 for the x86-64 architecture was registered as UNIX 03 compliant. [71] [72] The UNIX 03 conformance statement shows that the standard C compiler is from the GNU Compiler Collection (gcc), and that the system is a Linux distribution of the Red Hat Enterprise Linux family. [73] The UNIX 03 certification expired in September 2022 and has not been renewed. [72]
Stratus Technologies DNCP Series servers running FTX Release 3 were registered as UNIX 93 compliant. [74]
Inspur K-UX 2.0 and 3.0 for the x86-64 architecture were certified as UNIX 03 compliant. [75] [76] The UNIX 03 conformance statement for Inspur K-UX 2.0 and 3.0 shows that the standard C compiler is from the GNU Compiler Collection (gcc), and that the system is a Linux distribution of the Red Hat family. [77]
IBM OS/390 was registered as UNIX 95 compliant beginning with the V2R4 release. [79]
The last Reliant UNIX versions were registered as UNIX 95 compliant (XPG4 hard branding).
Solaris 11.4 was previously registered as UNIX v7 compliant in 2018. [80] Solaris 11 and Solaris 10 were registered as UNIX 03 compliant on 32-bit and 64-bit x86 (X86-64) and SPARC systems. Solaris 8 and 9 were registered as UNIX 98 compliant on 32-bit x86 and SPARC systems; 64-bit x86 systems were not supported. Solaris 2.4 and 2.6, on both x86 and SPARC, were certified to the UNIX 93 and UNIX 95 marks respectively. [63]
Solaris 2.5.1 was also registered as UNIX 95 compliant on the PReP PowerPC platform in 1996, but the product was withdrawn before more than a few dozen copies had been sold. [81]
Tru64 UNIX V5.1A and later were registered as UNIX 98 compliant. [82]
Other operating systems previously registered as UNIX 95 or UNIX 93 compliant:
Developers and vendors of Unix-like operating systems such as Linux, FreeBSD, and MINIX typically do not certify their distributions and do not install full POSIX utilities by default.
For Linux, pax command is usually not installed; furthermore, pax command packages available for Linux often lack pax file format support required by POSIX. [83] Sometimes, SUS compliance can be improved by installing additional packages, but very few Linux systems can be configured to be completely conformant. The Linux Standard Base was formed in 2001 as an attempt to standardize the internal structures of Linux-based systems for increased compatibility. It is based on the POSIX specifications, the Single UNIX Specification, and other open standards, and also extends them in several areas; but there are some conflicts between the LSB and the POSIX standards. [84] [85] Few Linux distributions actually go through certification as LSB compliant. [86]
Darwin, the open source subset of macOS, has behavior that can be set to comply with UNIX 03. [87] [88] Darwin uses a 4.4BSD-derived pax command, [89] which lacks multibyte support for filenames.[ citation needed ]
FreeBSD previously had a "C99 and POSIX Conformance Project" which aimed for compliance with a subset of the Single UNIX Specification, and documentation where there were differences. [90] FreeBSD pax command, derived from 4.4BSD, does not fully support pax file format. [91] pax and ustar in-archive format use the same with slightly different defaults (5120 block size vs 10240 block size); [92] however, FreeBSD's pax lacks the extended PAX headers used for extended character set support. FreeBSD man pages sometimes indicate deviations from POSIX and thus SUS in their STANDARDS sections. [93]
OpenBSD man pages sometimes indicate deviations from POSIX and thus SUS in their STANDARDS sections. [94] [95]
MINIX pax command does not support pax file format [96] and thereby fails POSIX.1-2001.
The Portable Operating System Interface is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems. POSIX defines both the system and user-level application programming interfaces (APIs), along with command line shells and utility interfaces, for software compatibility (portability) with variants of Unix and other operating systems. POSIX is also a trademark of the IEEE. POSIX is intended to be used by both application and system developers.
In computing, tar is a computer software utility for collecting many files into one archive file, often referred to as a tarball, for distribution or backup purposes. The name is derived from "tape archive", as it was originally developed to write data to sequential I/O devices with no file system of their own, such as devices that use magnetic tape. The archive data sets created by tar contain various file system parameters, such as name, timestamps, ownership, file-access permissions, and directory organization. POSIX abandoned tar in favor of pax, yet tar sees continued widespread use.
compress is a Unix shell compression program based on the LZW compression algorithm. Compared to gzip's fastest setting, compress is slightly slower at compression, slightly faster at decompression, and has a significantly lower compression ratio. 1.8 MiB of memory is used to compress the Hutter Prize data, slightly more than gzip's slowest setting.
In Unix-like and some other operating systems, the pwd
command writes the full pathname of the current working directory to the standard output.
In computing, particularly in the context of the Unix operating system and its workalikes, fork is an operation whereby a process creates a copy of itself. It is an interface which is required for compliance with the POSIX and Single UNIX Specification standards. It is usually implemented as a C standard library wrapper to the fork, clone, or other system calls of the kernel. Fork is the primary method of process creation on Unix-like operating systems.
The ln
command is a standard Unix command utility used to create a hard link or a symbolic link (symlink) to an existing file or directory. The use of a hard link allows multiple filenames to be associated with the same file since a hard link points to the inode of a given file, the data of which is stored on disk. On the other hand, symbolic links are special files that refer to other files by name.
In computer networking, the Transport Layer Interface (TLI) was the networking API provided by AT&T UNIX System V Release 3 (SVR3) in 1987 and continued into Release 4 (SVR4). TLI was the System V counterpart to the BSD sockets programming interface, which was also provided in UNIX System V Release 4 (SVR4). TLI was later standardized as XTI, the X/Open Transport Interface.
pax is an archiving utility available for various operating systems and defined since 1995. Rather than sort out the incompatible options that have crept up between tar
and cpio
, along with their implementations across various versions of Unix, the IEEE designed a new archive utility pax that could support various archive formats with useful options from both archivers. The pax
command is available on Unix and Unix-like operating systems and on IBM i, and Microsoft Windows NT until Windows 2000.
cksum
is a command in Unix and Unix-like operating systems that generates a checksum value for a file or stream of data. The cksum command reads each file given in its arguments, or standard input if no arguments are provided, and outputs the file's 32-bit cyclic redundancy check (CRC) checksum and byte count. The CRC output by cksum is different from the CRC-32 used in zip, PNG and zlib.
Signals are standardized messages sent to a running program to trigger specific behavior, such as quitting or error handling. They are a limited form of inter-process communication (IPC), typically used in Unix, Unix-like, and other POSIX-compliant operating systems.
Unix-like operating systems identify a user by a value called a user identifier, often abbreviated to user ID or UID. The UID, along with the group identifier (GID) and other access control criteria, is used to determine which system resources a user can access. The password file maps textual user names to UIDs. UIDs are stored in the inodes of the Unix file system, running processes, tar archives, and the now-obsolete Network Information Service. In POSIX-compliant environments, the shell command id
gives the current user's UID, as well as more information such as the user name, primary user group and group identifier (GID).
In computer networking, STREAMS is the native framework in Unix System V for implementing character device drivers, network protocols, and inter-process communication. In this framework, a stream is a chain of coroutines that pass messages between a program and a device driver. STREAMS originated in Version 8 Research Unix, as Streams.
cpio is a general file archiver utility and its associated file format. It is primarily installed on Unix-like computer operating systems. The software utility was originally intended as a tape archiving program as part of the Programmer's Workbench (PWB/UNIX), and has been a component of virtually every Unix operating system released thereafter. Its name is derived from the phrase copy in and out, in close description of the program's use of standard input and standard output in its operation.
TMPDIR
is the canonical environment variable in Unix and POSIX that should be used to specify a temporary directory for scratch space. Most Unix programs will honor this setting and use its value to denote the scratch area for temporary files instead of the common default of /tmp or /var/tmp.
sum is a legacy utility available on some Unix and Unix-like operating systems. This utility outputs a 16-bit checksum of each argument file, as well as the number of blocks they take on disk. Two different checksum algorithms are in use. POSIX abandoned sum
in favor of cksum.
Microsoft POSIX subsystem is one of four subsystems shipped with the first versions of Windows NT, the other three being the Win32 subsystem which provided the primary API for Windows NT, plus the OS/2 and security subsystems.
A Unix-like operating system is one that behaves in a manner similar to a Unix system, although not necessarily conforming to or being certified to any version of the Single UNIX Specification. A Unix-like application is one that behaves like the corresponding Unix command or shell. Although there are general philosophies for Unix design, there is no technical standard defining the term, and opinions can differ about the degree to which a particular operating system or application is Unix-like.
Unix is a family of multitasking, multi-user computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, and others.
Getopt is a C library function used to parse command-line options of the Unix/POSIX style. It is a part of the POSIX specification, and is universal to Unix-like systems. It is also the name of a Unix program for parsing command line arguments in shell scripts.
Leopard is now an Open Brand UNIX 03 Registered Product, conforming to the SUSv3 and POSIX 1003.1 specifications for the C API, Shell Utilities, and Threads.