Single UNIX Specification
View on WikipediaThe 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 the X/Open Curses specification.[3]
Some parts of the SUS are optional.
History
[edit]1980s: Motivation
[edit]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]
1988: POSIX
[edit]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.
1980s and 1990s: X/Open Portability Guide
[edit]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.
- XPG1: X/Open Portability Guide Issue 1: 1985[7]
- XPG2: X/Open Portability Guide Issue 2: 1987[7]
- XPG3: X/Open Portability Guide Issue 3: 1989[8]
- XPG4: X/Open Portability Guide Issue 4: 1992[7]
XPG4 Base included the following documents:
- System Interface Definitions, Issue 4, ISBN 1-872630-46-4
- System Interfaces and Headers, Issue 4, ISBN 1-872630-47-2
- Commands and Utilities, Issue 4, ISBN 1-872630-48-0
1990s: Spec 1170
[edit]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]
1994: Single UNIX Specification
[edit]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]
- System Interface Definitions, Issue 4, Version 2[13]
- System Interfaces and Headers, Issue 4, Version 2[14]
- Commands and Utilities, Issue 4, Version 2[15]
- Networking Services, Issue 4[16]
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]
- XPG4 Base by X/Open
- System V Interface Definition, (SVID) Edition 3, Level 1 calls by AT&T
- Application Environment Specification (AES) by the Open Software Foundation (OSF)
- Interfaces found in common use and not yet covered by a formal specification, drawn from a survey of major applications.
1997: Single UNIX Specification, version 2
[edit]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]
- System Interface Definitions, Issue 5,[28]
- System Interfaces and Headers, Issue 5,[29]
- Commands and Utilities, Issue 5,[30]
- Networking Services, Issue 5,[31]
- X/Open Curses, Issue 4, Version 2,[32]
and was at the core of the UNIX 98 brand.[33]
This version had 1434 programming interfaces.[22]
2001: Single UNIX Specification, version 3, POSIX.1-2001
[edit]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]
- Base Specifications, Issue 6
- Base Definitions, Issue 6
- System Interfaces, Issue 6
- Shell and Utilities, Issue 6
- Rationale (Informative)
- X/Open Curses, Issue 4, Version 2
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]
2004 Edition
[edit]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.
2008: Single UNIX Specification, version 4, POSIX.1-2008
[edit]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]
- Base Specifications, Issue 7
- Base Definitions, Issue 7
- System Interfaces, Issue 7
- Shell and Utilities, Issue 7
- Rationale, Issue 7, (Informative)
- X/Open Curses, Issue 7
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]
2013 Edition
[edit]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]
2016 Edition
[edit]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.
2018 Edition, POSIX.1-2017
[edit]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]
Specification
[edit]SUSv3 totals some 3700 pages, which are divided into four main parts:
- Base Definitions (XBD) - a list of definitions and conventions used in the specifications and a list of C header files which must be provided by compliant systems. 84 header files in total are provided.
- Shell and Utilities (XCU) - a list of utilities and a description of the shell, sh. 160 utilities in total are specified.
- System Interfaces (XSH) - contains the specification of various functions which are implemented as system calls or library functions. 1123 system interfaces in total are specified.
- Rationale (XRAT) - the explanation behind the standard.
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]
Marks for compliant systems
[edit]There are five official marks for conforming systems:[53][54]
- UNIX 93[55]
- UNIX 95 - the mark for systems conforming to version 1 of the SUS[56]
- UNIX 98 - the mark for systems conforming to version 2 of the SUS[57]
- UNIX 03 - the mark for systems conforming to version 3 of the SUS[58]
- UNIX V7 - the mark for systems conforming to version 4 of the SUS (including Corrigenda)[59][60]
Compliance
[edit]| 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 |
Currently registered UNIX systems
[edit]AIX
[edit]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
[edit]HP-UX 11i V3 Release B.11.31 is registered as UNIX 03 compliant. Previous releases were registered as UNIX 95.[64]
macOS
[edit]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, up to macOS 26 Tahoe have been registered on both x86-64 and ARM64 systems.[69]
Xinuos
[edit]UnixWare 7.1.3 and later is registered as UNIX 95 compliant. OpenServer 5 and 6 are registered as UNIX 93 compliant.
z/OS
[edit]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]
Previously registered UNIX systems
[edit]EulerOS
[edit]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]
FTX
[edit]Stratus Technologies DNCP Series servers running FTX Release 3 were registered as UNIX 93 compliant.[74]
Inspur K-UX
[edit]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]
IRIX
[edit]SGI IRIX 6.5 was registered as UNIX 95 compliant.[78]
OS/390
[edit]IBM OS/390 was registered as UNIX 95 compliant beginning with the V2R4 release.[79]
Reliant UNIX
[edit]The last Reliant UNIX versions were registered as UNIX 95 compliant (XPG4 hard branding).
Solaris
[edit]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
[edit]Tru64 UNIX V5.1A and later were registered as UNIX 98 compliant.[82]
Other
[edit]Other operating systems previously registered as UNIX 95 or UNIX 93 compliant:
Non-registered Unix-like systems
[edit]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, the pax command is usually not installed; furthermore, the pax command packages available for Linux often lack the 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] The FreeBSD pax command, derived from 4.4BSD, does not fully support the 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 the pax file format[96] and thereby fails POSIX.1-2001.
External links
[edit]See also
[edit]References
[edit]- ^ "Questions & Answers". unix.org.
- ^ "The UNIX Standard". The Open Group. August 27, 2018.
- ^ "Single UNIX Specification, Version 4, 2018 Edition". The Open Group.
- ^ Kelty, Christopher M. "Conceiving Open Systems" (PDF). kelty.org.
- ^ Standards Conformance Guide (PDF). SunSoft. November 1995.
- ^ System V Interface Definition. 1985. ASIN B000KF6SCE.
- ^ a b c Raymond, Eric S. (September 19, 2003). "Standards and the Unix Wars". The Art of UNIX Programming.
- ^ Stevens, W. Richard; Fenner, Bill; Rudoff, Andrew M. (2003). Unix Network Programming, Volume 1: The Sockets Networking API (3rd ed.). Addison-Wesley Professional. ISBN 978-0131411555. OCLC 53867239.
- ^ a b c d e f "The Single UNIX Specification". unix.org.
- ^ "The UNIX System -- History and Timeline -- UNIX History". unix.org.
- ^ Fennessy, Quentin (October 12, 1993). "The name "UNIX" is now the property of X/Open". Newsgroup: comp.std.unix.
- ^ "Frequently Asked Questions". unix.org.
- ^ X/Open CAE Specification System Interface Definitions, Issue 4, Version 2 (PDF). X/Open Company. 1994.
- ^ X/Open CAE Specification System Interfaces and Headers, Issue 4, Version 2 (PDF). X/Open Company. 1994.
- ^ X/Open CAE Specification Commands and Utilities, Issue 4, Version 2 (PDF). X/Open Company. 1994.
- ^ X/Open CAE Specification Networking Services, Issue 4 (PDF). X/Open Company. 1994.
- ^ "Single UNIX® Specification, Version 1 Document Set (UNIX 95)". opengroup.org. Retrieved May 25, 2021.
- ^ X/Open Curses, Issue 4, Version 2 (PDF). X/Open Company. 1996. ISBN 1-85912-171-3.
- ^ X/Open Curses, Issue 4. X/Open Company. 1995. ISBN 9781859120774.
- ^ Bozman, Jean S. (October 24, 1994). "X/Open test suites advance". Computerworld. Vol. 28, no. 43. p. 49.
- ^ "Open Brand - UNIX 95". The Open Group.
- ^ a b c "How many APIS are there?". unix.org.
- ^ McCrea, Phil (April 1996). "Formation of 'The Open Group'". AUGGN: The Journal of AUUG Inc. 17 (2): 17–18.
- ^ Gaudin, Sharon (May 27, 1996). "WebCrusader may blaze wider trail for DCE users". Computerworld. Vol. 30, no. 22. p. 64.
- ^ "The Single UNIX Specification, Version 2". www.opengroup.org.
- ^ "The Open Group Announces Enhanced Single UNIX Specification" (Press release). The Open Group. March 12, 1997. Retrieved July 26, 2009.
- ^ "What's New in the Single UNIX Specification, Version 2". unix.org.
- ^ System Interface Definitions Issue 5 (PDF). The Open Group.
- ^ System Interfaces and Headers Issue 5 (PDF). The Open Group.
- ^ Commands and Utilities Issue 5 (PDF). The Open Group.
- ^ Networking Services (XNS) Issue 5 (PDF). The Open Group. May 14, 1997. ISBN 1-85912-165-9.
- ^ X/Open Curses, Issue 4, Version 2 (PDF). The Open Group. 1996. ISBN 1-85912-171-3.
- ^ "Open Brand - UNIX 98". X/Open Company.
- ^ "The Open Group announces completion of the joint revision to POSIX and the Single UNIX Specification" (Press release). The Open Group. January 30, 2002. Retrieved July 26, 2009.
- ^ a b "The Single UNIX Specification Version 3 - Overview". unix.org.
- ^ "Open Brand - UNIX 03". The Open Group.
- ^ The Single UNIX Specification: The Authorized Guide to Version 3, 2nd Edition (PDF). The Open Group.
- ^ "The Open Group Base Specifications Issue 6". The Open Group.
- ^ a b "IEEE Std 1003.1, 2004 Edition". Retrieved July 26, 2009.
- ^ "POSIX.1(5)". Oracle Solaris 11.2 Information Library.
- ^ "1.3.4 Feature Test Macros". The GNU C Library manual. The GNU Project.
- ^ POSIX Abstractions in Modern Operating Systems: The Old, the New, and the Missing. Eleventh European Conference on Computer Systems. doi:10.1145/2901318.2901350.
- ^ "The Open Group Base Specifications Issue 7, 2018 edition". www.opengroup.org.
- ^ "Base Specifications, Issue 7". The Open Group. Retrieved July 26, 2009.
- ^ "The Austin Common Standards Revision Group". The Open Group. Retrieved July 26, 2009.
- ^ "Single UNIX Specification Version 4". The Open Group.
- ^ a b "The Single UNIX Specification Version 4 - Introduction". unix.org.
- ^ "Version 4 Interface Counts". unix.org.
- ^ "UNIX V7 Certification". unix.org.
- ^ "Base Specifications, Issue 7, 2018 Edition". The Open Group. Retrieved July 6, 2018.
- ^ "IEEE SA - IEEE/Open Group 1003.1-2017". IEEE.
- ^ Matzan, Jem (July 30, 2004). "Can GNU ever be Unix?". linux.com.
- ^ "UNIX(R) Certified Products - The Open Group official register of UNIX Certified Products". The Open Group.
- ^ "The Open Brand - The full register of certified products". The Open Group.
- ^ a b "The Open Brand Register, UNIX 93". The Open Group.
- ^ a b "The Open Brand Register, UNIX 95". The Open Group.
- ^ a b "The Open Brand Register, UNIX 98". The Open Group.
- ^ a b "The Open Brand Register, UNIX 03". The Open Group.
- ^ a b "The Open Brand Register, UNIX V7". The Open Group.
- ^ "The UNIX System -- UNIX V7 Certification". unix.org.
- ^ The Open Group. "UNIX 03, AIX".
- ^ The Open Group. "UNIX V7, AIX".
- ^ a b "The Open Brand - Register of Certified Products". Open Group. July 23, 2003. Archived from the original on August 2, 2003. Retrieved January 23, 2022.
- ^ "UNIX 2003 Standard Profile conformance". Hewlett-Packard. Archived from the original on July 27, 2014. Retrieved July 22, 2014.
- ^ "OS X for UNIX Users" (PDF). July 2011.
- ^ "Mac OS X Leopard - Technology - UNIX". Leopard Technology Overview. Apple Inc. Archived from the original on August 23, 2007. Retrieved June 11, 2007.
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.
- ^ The Open Group. "Mac OS X Version 10.5 Leopard on Intel-based Macintosh computers certification". Retrieved June 12, 2007.
- ^ "Re: was OS X version 10.7 Lion UNIX 03 certified?". www.mail-archive.com. Archived from the original on April 29, 2020. Retrieved July 22, 2021.
- ^ "Open Brand". www.opengroup.org. Retrieved September 14, 2025.
- ^ z/OS Version 1 Release 9 Implementation (PDF) (First ed.). IBM. December 2007. pp. 4–5, 156–162. SG24-7427-00. Retrieved June 9, 2024.
- ^ "Huawei KunLun EulerOS 2.0 Operating System Passes UNIX Certification" (Press release). Huawei. September 9, 2016. Retrieved October 29, 2016.
- ^ a b The Open Group. "UNIX 03, EulerOS".
- ^ Peng Shen. "Huawei Conformance Statement: Commands and Utilities V4". The Open Group. Retrieved October 29, 2016.
- ^ The Open Group. "The Open Brand - Register of Certified Products - UNIX 93". Archived from the original on October 5, 2016.
- ^ "The Open Brand Register of Certified Products". The Open Group. May 29, 2014. Retrieved May 29, 2014.
- ^ Xie Ruohong. "Inspur Conformance Statement". The Open Group. Retrieved December 8, 2015.
- ^ Xie Ruohong. "Inspur Conformance Statement: Commands and Utilities V4". The Open Group. Retrieved December 8, 2015.
- ^ "Silicon Graphics Inc - UNIX 95". Open Group. Archived from the original on August 2, 2003.
- ^ "Register of Open Branded Products (OS/390)". Open Group. June 19, 2003. Archived from the original on June 29, 2003.
- ^ "UNIX V7 - The Open Brand Register, Oracle Corporation". The Open Group. Archived from the original on January 14, 2020. Retrieved January 16, 2021.
- ^ "Solaris 2.5.1". Archived from the original on September 12, 2005.
- ^ "Compaq Computer Corporation - UNIX 95". Open Group. Archived from the original on June 29, 2003.
- ^ "Bug #1329914 "No UNIX compatible pax implementation" : Bugs : RPM". Ubuntu bug tracker. June 13, 2014.
- ^ ISO/IEC TR 24715:2006 - Information technology -- Programming languages, their environments and system software interfaces -- Technical Report on the Conflicts between the ISO/IEC 9945 (POSIX) and the Linux Standard Base (ISO/IEC 23360). Retrieved October 15, 2011.
- ^ Josey, Andrew (August 29, 2005). "Conflicts between ISO/IEC 9945 (POSIX) and the Linux Standard Base". personal.opengroup.org (Unapproved Draft).
- ^ "Certified Products Product Directory". The Linux Foundation. Archived from the original on December 20, 2012. Retrieved December 9, 2015.
- ^ "Mac OS X Manual Page for compat(5) - Mac OS X 10.3". developer.apple.com. October 23, 2005. Archived from the original on March 10, 2009. Retrieved May 24, 2018.
- ^ "compat(5) Manual Page - macOS 10.9". developer.apple.com. June 30, 2010. Retrieved May 24, 2018.
- ^ "Mac OS X Manual Page for pax(1) - Mac OS X 10.3". developer.apple.com. October 23, 2005. Archived from the original on March 10, 2009. Retrieved November 25, 2023.
- ^ "FreeBSD C99 and POSIX conformance project". FreeBSD Project. Archived from the original on December 23, 2013.
- ^ – FreeBSD General Commands Manual
- ^ "pax - portable archive interchange". The Open Group.
- ^ – FreeBSD General Commands Manual
- ^ – OpenBSD General Commands Manual
- ^ – OpenBSD General Commands Manual
- ^ "pax(1)". man.minix3.org.
External links
[edit]- Andrew Josey (June 8, 2020). "Single UNIX Specification Frequently Asked Questions". opengroup.org. 1.12.
- The Single UNIX Specification, unix.org
- Single UNIX Specification, Version 1
- X/Open CAE Specification System Interface Definitions, Issue 4, Version 2, 1994, opengroup.org
- X/Open CAE Specification System Interfaces and Headers, Issue 4, Version 2, 1994, opengroup.org
- X/Open CAE Specification Commands and Utilities, Issue 4, Version 2, 1994, opengroup.org
- X/Open CAE Specification Networking Services, Issue 4, 1994, opengroup.org
- Single UNIX® Specification, Version 1 Document Set (UNIX 95), opengroup.org – requires login to download
- The Single UNIX Specification, Version 2, 1997, opengroup.org
- The Open Group Base Specifications Issue 6, 2004, opengroup.org
- The Open Group Base Specifications Issue 7, 2008 edition, opengroup.org
- The Open Group Base Specifications Issue 7, 2013 edition, opengroup.org
- The Open Group Base Specifications Issue 7, 2016 edition, opengroup.org
- The Open Group Base Specifications Issue 7, 2018 edition, opengroup.org
- The Open Group Base Specifications Issue 7, opengroup.org – latest edition
- Single UNIX Specification, Version 4, 2018 Edition, opengroup.org
- X/Open Curses, Issue 4, Version 2, 1996, opengroup.org
- X/Open Curses, Issue 7, 2009, opengroup.org
- POSIX Technical Corrigendum 1, 1003.1-2001/Cor 1-2001, opengroup.org
- Single UNIX Specification, Version 4 Technical Corrigendum No. 1, IEEE Std 1003.1-2008/Cor 1-2013, opengroup.org
- Single UNIX Specification, Version 4 Technical Corrigendum No. 2, IEEE Std 1003.1-2008/Cor 2-2016, opengroup.org
Single UNIX Specification
View on GrokipediaIntroduction
Definition and Purpose
The Single UNIX Specification (SUS) is a family of standards developed and maintained by The Open Group, defining the application programming interfaces (APIs), command-line shell, common utilities, and expected system behaviors required for a conformant UNIX system.[3] It establishes a comprehensive, vendor-neutral blueprint for operating systems to achieve UNIX certification, ensuring consistency across diverse implementations.[1] The primary purpose of the SUS is to promote portability of applications and interoperability between systems by providing a single, unified specification that minimizes variations among UNIX variants, thereby facilitating easier development and deployment of software.[3] This addresses the fragmentation that arose in the 1980s from competing proprietary UNIX extensions by major vendors, fostering a stable environment for both legacy and new application development without tying compliance to any specific vendor's codebase.[1] In scope, the SUS focuses on base system interfaces, including core libraries, file systems, process management, and networking primitives, while deliberately excluding hardware-specific or platform-dependent details to maintain broad applicability.[3] It builds upon the POSIX standards as its technical foundation, incorporating and extending elements like POSIX.1 for system interfaces and POSIX.2 for shell and utilities to form a more complete UNIX definition.[1]Relation to POSIX and X/Open Standards
The POSIX standard, formally known as IEEE Std 1003.1 and first published in 1988, serves as the foundational specification for portable operating system interfaces, defining a core set of application programming interfaces (APIs), utilities, and environment variables to promote portability across Unix-like systems.[6] This standard emerged from efforts to standardize Unix behaviors amid diverse implementations, focusing primarily on system calls, shell commands, and basic utilities without encompassing all vendor-specific extensions.[7] The X/Open Portability Guides (XPG), developed by the X/Open Company starting in the late 1980s, extended beyond POSIX by addressing application portability in Unix environments, including higher-level interfaces and guidelines for software development. Early versions, such as XPG3 (1989) and XPG4 (1992), incorporated POSIX as a baseline while adding specifications for graphical interfaces, database access, and other common Unix extensions to facilitate multi-vendor compatibility.[8] The Single UNIX Specification (SUS) represents an evolutionary unification of these efforts, fully incorporating the POSIX base specifications while integrating X/Open extensions to form a comprehensive standard for conformant Unix systems.[8] Specifically, SUS adopts IEEE Std 1003.1 as its core, adding X/Open System Interfaces (XSI) options—such as curses for terminal handling and real-time extensions—that are optional in base POSIX but required for full SUS compliance.[9] This inclusion ensures broader portability for applications relying on vendor-common features not covered in POSIX alone.[7] Key differences distinguish SUS from its predecessors: while POSIX is maintained by the IEEE as an open technical standard emphasizing core OS interfaces, SUS is branded and certified by The Open Group, which controls the UNIX trademark and enforces conformance through rigorous testing for the XSI extensions.[8] Unlike the XPG's focus on portability guides without mandatory certification, SUS provides a single, trademarked benchmark that builds POSIX into a branded ecosystem, enabling vendors to market systems as UNIX-certified.[3]Historical Development
Origins and Early Standards (1970s-1990s)
The development of Unix originated in the late 1960s at Bell Labs, where Ken Thompson and Dennis Ritchie began working on an operating system inspired by the Multics project, initially using a PDP-7 minicomputer for a space travel simulation game that evolved into a full system.[10] By 1971, Unix supported word processing for Bell Labs' patent department, leading to the acquisition of a PDP-11, and in 1973, it was rewritten in the C programming language to improve portability.[10] The Sixth Edition in 1975 marked the first widespread distribution outside Bell Labs, while the Seventh Edition in 1979 introduced key components like the C compiler, UUCP for networking, and the Bourne shell.[11] Early divergences emerged as Unix spread: the Berkeley Software Distribution (BSD), starting in 1977 at the University of California, Berkeley under Bill Joy, added academic innovations such as the vi editor and TCP/IP networking in its 4.2 release of 1984, contrasting with AT&T's commercial focus.[10] Meanwhile, AT&T's System III in 1982 and System V in 1983 emphasized business applications, creating fragmented variants that hindered software portability across vendor implementations.[11] In the 1980s, the growing commercialization of Unix by multiple vendors exacerbated fragmentation, motivating efforts to standardize interfaces for better application portability amid diverse systems like BSD and System V.[12] This need prompted the formation of the X/Open consortium in 1984 by major Unix vendors to promote open systems and interoperability.[11] Concurrently, in 1985, the IEEE Standards Board sponsored the POSIX (Portable Operating System Interface) project, establishing the first POSIX committee to define a common Unix-like interface based on existing practices.[12] The POSIX.1 standard, ratified in 1988 as IEEE Std 1003.1, specified core services including C language APIs for processes, files, and devices, along with the shell and common utilities, aiming to enable source-code portability without requiring binary compatibility.[12] Amended in 1990 to align with ANSI/ISO C, it became a foundational reference for Unix standardization.[12] X/Open advanced portability through its successive Portability Guides, with XPG3 released in 1989 to consolidate Unix commands, libraries, and headers into a profile beyond basic POSIX compliance.[11] Building on this, XPG4 in October 1992 mandated full ANSI C compliance and integrated POSIX elements with extensions for internationalization and networking, further unifying vendor implementations.[13] These guides addressed fragmentation by specifying over 1,000 interfaces, but inconsistencies persisted, leading to the 1993 COSE (Common Open Software Environment) initiative where vendors collaborated on Spec 1170—a comprehensive set of more than 1,170 APIs drawing from System V Release 4, BSD, and POSIX.[13] Delivered to X/Open in December 1993 after Novell's acquisition of Unix rights, Spec 1170 transitioned into the branded Single UNIX Specification by mid-1994, separating the Unix trademark from specific codebases to foster a unified, certifiable standard.[11] This effort culminated in the publication of the Single UNIX Specification Version 1 in 1994, with the introduction of the UNIX 95 brand in 1995 for conforming systems.[13]Initial SUS Versions (1990s)
The Single UNIX Specification Version 1, published in October 1994 by The Open Group, represented the formal unification of Unix standards under a single branded framework. It was based on the X/Open Portability Guide Issue 4 (XPG4), incorporating the POSIX.1-1990 standard (IEEE Std 1003.1-1990) as its core, along with extensions from X/Open specifications such as networking services and curses. This version defined 1,170 interfaces, including 926 system calls and library functions, 70 header files, and 174 commands and utilities, enabling portable application development across compliant systems. A key innovation was the introduction of the official UNIX trademark, which could be used only by operating systems certified to conform to the specification, thereby distinguishing branded Unix from other Unix-like systems.[3] SUS Version 1 built upon POSIX by adding essential extensions for broader functionality. It included the internationalized X/Open Curses library (Issue 4 Version 2), providing enhanced terminal control interfaces for screen-based applications. Real-time extensions were incorporated through the POSIX.1 foundation, supporting priority-based scheduling and interprocess communication suitable for time-sensitive applications. Internationalization support was strengthened with multibyte character handling and locale definitions, facilitating global software portability beyond ASCII limitations. These additions addressed gaps in earlier standards, promoting a more comprehensive environment for developers. In 1997, The Open Group released Single UNIX Specification Version 2, also known as UNIX 98, which aligned closely with the updated POSIX.1-1996 standard (IEEE Std 1003.1-1996). This version expanded the specification to support emerging hardware and software needs, introducing 64-bit cleanliness to ensure data size neutrality across 32-bit and 64-bit architectures, thereby facilitating large-scale data processing and memory addressing. It added POSIX threads (IEEE Std 1003.1c-1995) for concurrent programming, enabling efficient multiprocessing in multi-core environments. Additionally, Y2K compliance was explicitly defined, with interfaces updated to handle four-digit year representations and avoid millennium-related disruptions in date processing. These enhancements positioned SUS Version 2 as a forward-looking standard for the late 1990s computing landscape.[14] Initial adoption of the early SUS versions faced significant hurdles, primarily due to vendor transitions from competing proprietary standards during the "Unix wars" of the early 1990s. Major players like AT&T, Sun Microsystems, and OSF had invested in divergent implementations (e.g., System V and BSD derivatives), requiring substantial reengineering to achieve compliance. Limited certifications occurred in the mid-1990s; for instance, only a handful of systems, such as certain releases of HP-UX and AIX, initially qualified for the UNIX 95 brand, as vendors prioritized compatibility testing amid economic pressures and the rising competition from Microsoft Windows NT. This slow uptake delayed widespread industry convergence until the late 1990s.[15]SUS Version 3 and POSIX Alignment (2000s)
The Single UNIX Specification Version 3 (SUSv3), released in 2001, represented a major synchronization effort with the revised POSIX.1-2001 standard (IEEE Std 1003.1-2001), incorporating updates developed by the Austin Group—a joint working group formed in 1998 by The Open Group, IEEE, and ISO/IEC JTC1/SC22/WG15.[16] This alignment unified overlapping standards from POSIX.1, POSIX.2, and prior SUS versions into a cohesive base specification, also published as ISO/IEC 9945:2002 and The Open Group Base Specifications Issue 6. Key revisions included support for large files (beyond 2 GB) through extensions like the Large File Summit (LFS) interfaces, enabling applications to handle filesystems with 64-bit addressing without recompilation. Additionally, advanced real-time features were enhanced, such as improved scheduling policies (e.g., SCHED_FIFO and SCHED_RR) and timer support for precise timing in embedded and high-performance systems. In 2004, an updated edition of SUSv3 was issued as IEEE Std 1003.1-2004, focusing on minor corrections and clarifications rather than substantive changes.[17] This edition incorporated Technical Corrigenda 1 and 2, addressing ambiguities in areas like signal handling and pathname resolution, while maintaining full backward compatibility with the 2001 base. These refinements ensured greater implementer clarity without altering the core interfaces. SUSv3 introduced several key enhancements that broadened its applicability across diverse systems. Improved IPv6 support standardized socket interfaces (e.g., via <sys/socket.h>) for next-generation networking, facilitating transition from IPv4. POSIX threads (pthreads) were fully specified with extensions for robust multithreading, including mutexes, condition variables, and thread-specific data, enhancing concurrency in server and desktop applications. Symbolic links received consistent handling across filesystems, with functions like symlink() and readlink() ensuring portable path resolution. By 2008, SUSv3 had achieved widespread adoption as the de facto standard for Unix-like systems, with numerous commercial and open-source implementations certified under the UNIX 03 brand, solidifying its role in promoting portability and interoperability.[11]SUS Version 4 and Modern Updates (2008-Present)
The Single UNIX Specification Version 4 (SUSv4) was released in 2008 by The Open Group, serving as the current iteration of the standard and aligning technically with IEEE Std 1003.1-2008, also known as POSIX.1-2008.[9] This version builds on the POSIX alignment established in SUS Version 3 by integrating the Base Specifications Issue 7, which encompasses core definitions, system interfaces, shell and utilities, and rationales for application portability.[18] Key additions in SUSv4 include enhanced support for high-resolution timers to facilitate real-time applications, process-shared memory objects for inter-process communication under the Realtime Option Group, and hybrid thread models that enable process-shared synchronization primitives such as mutexes and condition variables.[9] These features expand the specification's scope to better support concurrent and real-time programming paradigms essential for modern software development. SUSv4 has seen iterative updates through subsequent editions to address errata and alignments. The 2013 edition incorporated Technical Corrigendum 1 (IEEE Std 1003.1-2008/Cor 1-2013), focusing on minor technical corrections without introducing major new functionality. This was followed by the 2016 edition with Technical Corrigendum 2 (IEEE Std 1003.1-2008/Cor 2-2016), which provided further refinements to interface definitions and portability requirements. The 2018 edition, technically identical to IEEE Std 1003.1-2017 and ISO/IEC 9945:2009 (including amendments), represents a significant update, incorporating security enhancements such as improved robust mutex attributes for priority inheritance and protections against deadlock in multithreaded environments.[18] In 2024, The Open Group published the Single UNIX Specification Version 5 (2024 Edition), aligning with IEEE Std 1003.1-2024 and The Open Group Base Specifications Issue 8. This major revision, the first since 2008, includes refinements to shell commands, utilities, and system interfaces to support contemporary programming needs while preserving backward compatibility.[19] As of November 2025, the UNIX V7 Product Standard certification continues to verify systems against SUS Version 4 requirements, with Version 5 providing the latest specification for ongoing implementations.[20] Its influence extends to cloud computing platforms and embedded systems, where certified UNIX implementations provide a reliable foundation for scalable, portable applications in virtualized and resource-constrained settings.[21][22]Technical Specifications
Core Components and Structure
The Single UNIX Specification (SUS) is structured as a set of base specifications divided into four primary volumes, each addressing distinct aspects of the UNIX operating system interface and environment.[3] The Base Definitions (XBD) volume provides foundational concepts, including general terms, character sets, environment variables, regular expressions, and file formats, serving as the common reference for the other volumes. The System Interfaces and Headers (XSH) volume details the programming interfaces, encompassing over 1,100 C language APIs for system calls, library functions, and header file definitions that enable portable application development.[9] The Commands and Utilities (XCU) volume specifies the POSIX shell command language—based on the Bourne shell—and approximately 174 standard utilities, such as common tools for file manipulation, process control, and text processing, ensuring a consistent user environment.[9] The Rationale (XRAT) volume offers informative content, explaining design decisions, historical context, and implementation considerations for the specifications in XBD, XSH, and XCU. In addition to these base volumes, the SUS incorporates the X/Open Curses specification (Issue 7 in Version 4), which defines interfaces for terminal-independent screen handling and updates, comprising around 386 functions for cursor control, window management, and output formatting. The documents are developed through a consensus process involving industry stakeholders under The Open Group, resulting in comprehensive, multi-thousand-page specifications—such as the approximately 4,000 pages in Version 3—that cover the core UNIX programming environment, including basic networking interfaces but without specifying system administration internals.[23] These specifications are maintained through periodic technical corrigenda to address errata and clarifications, ensuring ongoing accuracy and relevance.[17] The full SUS documents are freely available online from The Open Group website.[24] This structure aligns closely with the POSIX.1 standard, forming the technical core of SUS compliance.[25]Key Interfaces and Features
The Single UNIX Specification (SUS) defines a comprehensive set of core C language application programming interfaces (APIs) that form the foundation for portable system programming. These APIs, detailed in the System Interfaces volume (XSH), include system calls for file input/output (I/O), such asopen() for opening files or devices, read() for retrieving data, and write() for outputting data, ensuring consistent behavior across conforming systems regardless of underlying hardware. Process management is handled by functions like fork() to create child processes and the exec() family (e.g., execl(), execvp()) to replace a process image with a new one, providing reliable mechanisms for program execution and resource allocation. Signal handling is standardized through interfaces such as kill() for sending signals to processes or process groups and sigaction() for installing signal handlers, enabling asynchronous event notification and response. Networking capabilities are supported via the socket interfaces, including socket() for creating endpoints, bind() for associating addresses, and connect() for establishing connections, facilitating inter-process communication over networks in a vendor-neutral way.
SUS also specifies the shell and utilities in the Commands and Utilities volume (XCU), promoting scriptable and command-line portability. The POSIX shell (sh) provides a command language for scripting, with defined syntax for control structures, variables, and I/O redirection, allowing developers to write portable shell scripts that execute consistently on compliant systems. Key utilities include ls, which lists directory contents with options for formatting and sorting to display file attributes like permissions and sizes; grep, a pattern-matching tool that searches input streams for regular expressions and outputs matching lines; and awk, a programming language for text manipulation that scans patterns and performs actions on fields, supporting complex data processing tasks. These utilities ensure predictable output and error handling, reducing implementation variances in everyday system administration and development.
Advanced features in SUS extend beyond basic operations to support specialized applications. Real-time extensions include POSIX timers, implemented through functions like timer_create() to allocate timers, timer_settime() to arm them with expiration times or intervals, and timer_delete() to remove them, enabling high-resolution timing essential for embedded and real-time systems. Internationalization is facilitated by locale support, where categories such as LC_CTYPE for character classification, LC_COLLATE for string collation, and LC_TIME for date formatting allow applications to adapt to different cultural and linguistic environments via environment variables like LC_ALL. Security enhancements encompass privilege models, defining user and group identifiers (e.g., real, effective, and saved IDs) to control access and elevate privileges securely, as seen in functions like setuid() and setgid().
To ensure broad portability, SUS mandates several guarantees for application compatibility. It requires n-bit cleanliness, treating data as sequences of bytes without assuming specific byte sizes or signedness in interfaces, though characters are defined as 8-bit in practice for text handling.[26] Large file support is provided through extensions like the Large File Summit (LFS) interfaces, such as open64() and fseeko(), allowing files larger than 2 GB on 32-bit systems by using 64-bit offsets. Thread-safe interfaces are emphasized, with many functions (e.g., getpwnam_r()) designed for concurrent access using POSIX threads, and requirements for reentrancy in multi-threaded environments to prevent race conditions.
Evolution of Specifications Across Versions
The evolution of the Single UNIX Specification (SUS) across its versions reflects a progressive refinement of Unix-like operating system interfaces, emphasizing enhanced portability, performance, and adaptability to emerging computing needs while maintaining backward compatibility. From Version 1 (1990) to Version 2 (1997), the specification introduced foundational support for modern hardware and concurrent programming models. Key additions included n-bit cleanliness and data size neutrality to enable 64-bit programming, allowing applications to operate seamlessly across 32-bit and 64-bit architectures without implicit assumptions about data lengths, such as treating integers as 32 bits.[27] This version also incorporated the POSIX Threads (Pthreads) extension from IEEE Std 1003.1c-1995, mandating interfaces likepthread_create and pthread_mutex_lock for multi-threaded applications, alongside optional real-time threads features such as pthread_attr_getschedpolicy.[27] Furthermore, real-time I/O capabilities from the POSIX Realtime Extension (IEEE Std 1003.1b-1993) were added, including mandatory memory-mapped I/O functions like mmap and msync, and optional asynchronous I/O operations such as aio_read and timer_create, enabling predictable, low-latency processing for time-sensitive tasks.[27]
Transitioning to Version 3 (2001), the SUS aligned more closely with international standards like ISO/IEC 9945:2001, expanding networking and synchronization features to support distributed and high-performance environments. A major enhancement was the addition of IPv6 support to address IPv4 address exhaustion, introducing socket interfaces like if_indextoname and if_nametoindex for interface management, as well as address resolution functions such as inet_ntop and inet_pton for improved security via IPsec and quality-of-service mechanisms.[28] Synchronization primitives advanced with extensions to threads, including barriers and spin locks for better concurrency control, and real-time features from IEEE Std 1003.1j, such as monotonic and synchronized clocks to ensure consistent timing in multi-threaded scenarios.[28] File system extensions were bolstered through alignments with POSIX updates, incorporating support for access control lists (ACLs) as part of optional XSI extensions for granular permissions beyond traditional UNIX modes, alongside large file handling refinements from prior versions.
Version 4 (2008, with 2018 Edition updates aligning to POSIX.1-2017) further integrated contemporary requirements for scalability and security, promoting many optional features to the base specification. Hybrid I/O scheduling saw asynchronous I/O functions like aio_read, aio_write, and aio_suspend elevated from the Realtime option to the core base, complemented by new "at" family functions such as openat, faccessat, and linkat for directory-relative operations that mitigate race conditions in file handling. Monotonic clock support was strengthened by mandating clock_gettime, clock_settime, and clock_nanosleep in the base, with extensions like pthread_condattr_setclock for clock-aware condition variables, enabling precise, non-adjusting time measurements essential for real-time systems. Security enhancements included robust mutex attributes via pthread_mutexattr_setrobust and functions like fexecve for descriptor-based execution, while the 2018 updates incorporated POSIX.1-2017 cryptography interfaces, such as clarifications and retention of encryption utilities like crypt in the Encryption option group, alongside new secure random number generation support.
Version 5 (2024 Edition), aligned with IEEE Std 1003.1-2024 and The Open Group Base Specifications Issue 8, builds on Version 4 with further clarifications, enhancements to existing features, and minor new functionality to support evolving computing environments. Key updates include refinements to utility behaviors (e.g., adjustments to true and false commands), additional APIs for improved portability in modern systems, and continued emphasis on security and internationalization, all while preserving backward compatibility for existing applications.[29][19]
Across these versions, the SUS has trended toward greater scalability through multi-architecture neutrality and 64-bit readiness, enhanced security via refined synchronization and permission models, and broader multi-architecture support, all while preserving backward compatibility to ensure existing applications remain portable without modification.[30] This iterative approach, guided by alignments with POSIX and ISO standards, has solidified the SUS as a stable foundation for open systems development.[9]