What is POSIX?
The Portable Operating System Interface (POSIX) is an IEEE standard that helps compatibility and portability between operating systems. Theoretically, POSIX-compliant source code should be seamlessly portable. In the real world, application transition often runs into system-specific issues. But POSIX compliance makes it simpler to port applications which can result in time savings.
Early in the Information Age, programmers would write software for operating systems with different system interfaces and environments. Therefore, porting the software to other operating systems would require a lot of heavy tweaks and costs. To overcome this problem, POSIX was born. POSIX is the standardization of the original UNIX, which came back in 1988 to resolve issues not only between different UNIX variants but also between Non-UNIX operating systems as well.
The work on POSIX began in the early 1980s to standardize the rapidly developing UNIX system interface. It covers a variety of systems in concise terms. The important POSIX.1 standard became the internationally accepted standard ISO/IEC 9945-1:1990 while the POSIX.2 standard was internationally accepted as IEEE Std 1003.2-1992.
What is the POSIX standard?
Over the years, the POSIX specifications have continued to be revised and reorganized. At one time, each standard was informally named POSIX, followed by a decimal and then the standard's number. For example, POSIX.1 was the standard for an application programming interface in the C language, and POSIX.2 was the standard shell and utility interface for the OS. These standards were officially named IEEE Std 1003.1 and IEEE Std 1003.2, respectively.
There were also amendments to the base standard, such as IEEE Std 1003.1b-1993, which dealt with real-time extensions. However, all the various specifications have been rolled into one standard -- IEEE Std 1003.1 -- which was last updated in 2017 and published in 2018. Officially, it is called IEEE Std 1003.1-2017. However, it is also referred to as POSIX.1-2017 or, more informally, POSIX.1.
The POSIX standard goes by other names as well. The Open Group calls it The Open Group Base Specifications Issue 7, 2018 edition, and ISO/IEC refers to it as ISO/IEC 9945:2009. ISO/IEC adopted the standard in 2009 and added Technical Corrigendum 1 in late 2012 and Technical Corrigendum 2 in March 2017, putting it on par with IEEE Std 1003.1-2017.
The POSIX.1-2017 specifications define the fundamental services needed to build POSIX-compliant applications. They establish standard semantics and syntax to help developers write portable applications. POSIX.1 is made up of the following four volumes:
- Base definitions. Provides common definitions for the specifications, including information about terms, concepts, syntax, service functions, and command-line
- System interfaces. Provides details about interface-related terms and concepts, and defines the functional interfaces available to applications accessing POSIX-conformant systems.
- Shell and utilities. Describes the commands and utilities available to applications accessing POSIX-conformant systems, including the command language used in those systems.
- Rationale. Includes historical information about the standard's contents and why certain features were added or removed.
POSIX.1 takes a "write once, adopt everywhere" approach to the specifications by providing a set of fundamental services needed to efficiently build applications. The standard emphasizes the facilities and characteristics that are important to application development, rather than focusing on the techniques needed to achieve these capabilities. The POSIX standard is intended to be used by both system implementors and application developers.
Parts before 1997
Before 1997, POSIX comprised several standards:
- POSIX.1: Core Services (incorporates Standard ANSI C) (IEEE Std 1003.1-1988)
- Process Creation and Control
- Floating Point Exceptions
- Segmentation / Memory Violations
- Illegal Instructions
- Bus Errors
- File and Directory Operations
- C Library (Standard C)
- I/O Port Interface and Control
- Process Triggers
- POSIX.1b: Real-time extensions (IEEE Std 1003.1b-1993, later appearing as librt—the Realtime Extensions library)
- Priority Scheduling
- Real-Time Signals
- Clocks and Timers
- Message Passing
- Shared Memory
- Asynchronous and Synchronous I/O
- Memory Locking Interface
- POSIX.1c: Threads extensions (IEEE Std 1003.1c-1995)
- Thread Creation, Control, and Cleanup
- Thread Scheduling
- Thread Synchronization
- Signal Handling
- POSIX.2: Shell and Utilities (IEEE Std 1003.2-1992)
- Command Interpreter
- Utility Programs
Versions after 1997
After 1997, the Austin Group developed the POSIX revisions. The specifications are known under the name Single UNIX Specification before they become a POSIX standard when formally approved by the ISO.
- POSIX.1-2001 (with two TCs): POSIX.1-2001 (or IEEE Std 1003.1-2001) equates to the Single UNIX Specification, version 3 minus X/Open Curses. This standard consisted of:
- the Base Definitions, Issue 6,
- the System Interfaces and Headers, Issue 6,
- the Commands and Utilities, Issue 6.
IEEE Std 1003.1-2004 involved a minor update of POSIX.1-2001. It incorporated two minor updates or errata referred to as Technical Corrigenda (TCs). Its contents are available on the web.
- POSIX.1-2008 (with two TCs): Base Specifications, Issue 7 (or IEEE Std 1003.1-2008, 2016 Edition) is similar to the current 2017 version (as of 22 July 2018). This standard consists of:
- the Base Definitions, Issue 7,
- the System Interfaces and Headers, Issue 7,
- the Commands and Utilities, Issue 7,
- the Rationale volume.
- POSIX.1-2017: IEEE Std 1003.1-2017 (Revision of IEEE Std 1003.1-2008) - IEEE Standard for Information Technology—Portable Operating System Interface (POSIX(R)) Base Specifications, Issue 7 is available from either The Open Group or IEEE and is, as of 22 July 2018, the current standard. It is technically identical to POSIX.1-2008 with Technical Corrigenda 1 and 2 applied. A free online copy may still be available.