Check out the new USENIX Web site.
;login: The Magazine
of USENIX & SAGEStandards

 

POSIX.1 Revision Overview

by Andrew Josey
<a.josey@opengroup.org>

Andrew Josey is the director, server platforms, for The Open Group in Reading, England, and the chair of the Austin Group.

This article gives an overview of the ongoing POSIX.1 revision, the scope of its contents, and its organization.

Introduction
The POSIX.1 standard is one of a family of standards known as POSIX. The family of standards extends to many topics; the POSIX.1 revision consists of both operating-system interfaces and shell and utilities. (Note that previously shell and utilities were a separate standard.)

The POSIX.1 revision is being developed by a joint working group known as the Austin Common Standards Revision Group, or Austin Group for short. This joint technical working group was convened in late 1998 to consider the matter of a common revision of ISO/IEC 9945-1, ISO/IEC 9945-2, IEEE Std 1003.1, IEEE Std 1003.2, and the appropriate parts of the Single UNIX Specification. The approach to specification development was to write once, adopt everywhere, with the deliverables being a single set of specifications that carry both the IEEE POSIX designation and The Open Group's Technical Standard designation (becoming the core of the Single UNIX Specification Version 3), and if adopted, an ISO/IEC designation.

The base document for the revision was The Open Group's Base volumes of its Single UNIX Specification, Version 2. These were selected since they were a superset of the existing POSIX.1 and POSIX.2 specifications and had some organizational aspects that would benefit the audience for the new revision.

Terms
Within this article, the following terms are used:

base standard — The portions of this standard that are not optional, equivalent to the definitions of classic POSIX.1 and POSIX.2.

XSI extension — The portions of this standard addressing the extension added for support of the Single UNIX Specification.

standard developers — The individuals and companies in the development organizations responsible for this revision: the IEEE P1003.1 working groups; The Open Group Base working group, advised by the hundreds of individual technical experts who balloted the draft standards within the Austin Group; and the member bodies and technical experts of ISO/IEC JTC1/SC22/WG15.

Scope of the Revision
The (paraphrased) goals of this development are to produce a single common revision to the overlapping POSIX.1, POSIX.2 standards, and the Single UNIX Specification, Version 2. As such, the scope of the revision includes the scopes of the original documents merged.

Since the revision includes merging the base volumes of the Single UNIX Specification, many features that were previously not adopted into earlier revisions of POSIX.1 and POSIX.2 are now included in this document. In most cases, these additions are part of the XSI extension; in other cases the standard developers decided that now was the time to migrate these to the base standard.

The Single UNIX Specification programming environment provides a broad-based functional set of interfaces to support the porting of existing UNIX applications and the development of new applications. The environment also supports a rich set of tools for application development.

The majority of the obsolescent material from the existing POSIX.1 and POSIX.2 standards, and material marked Legacy from The Open Group's base specifications, has been removed in this revision.

The following IEEE Standards have been added to the base documents in this revision: IEEE Std 1003.1d-1999, 1003.1j-2000, 1003.1q-2000, 1003.1a-2000, 1003.2d-1994, and 1003.2b-2000. It also includes selected parts of IEEE Std 1003.1g-2000.

Only selected parts of 1003.1g-2000 were included. This was because there is much duplication between the Networking Services Issue 5.2 specification (another base document) and the material from IEEE Std 1003.1g, the former document being aligned with the latest networking specifications for IPv6. Only the following sections of 1003.1g were considered for inclusion:

  • General Terms related to sockets (clause 2.2.2)
  • Socket concepts (clauses 5.1 through 5.3 inclusive)
  • The pselect()() function (clause 6.2.2.1, 6.2.3)
  • The isfdtype() function (clause 5.4.8)
  • The <sys/select.h> header (clause 6.2)

The following were requirements on this standard:

Backward compatibility:
It was agreed that there should be no breakage of functionality in the existing base documents. This requirement was tempered by changes introduced due to interpretations and corrigenda on the base documents, and any changes introduced in the ISO/IEC 9899:1999 C Language standard.

Architecture and n-bit neutral:
The common standard should not make any implicit assumptions about the system architecture or size of data types; for example, previously some 32-bit implicit assumptions had crept into the standards.

Extensibility:
It should be possible to extend the common standard without breaking backward compatibility. For example, the name space should be reserved and structured to avoid duplication of names between the standard and extensions to it.

POSIX.1 and the C Standard
Previous revisions of POSIX.1 built upon ISO C by reference only. This revision takes a different approach.

The standard developers believed it essential for a programmer to have a single complete reference place but recognized that deference to the formal standard had to be addressed for the duplicate interface definitions between ISO C and the Single UNIX Specification.

It was agreed that where an interface has a version in the C standard, the DESCRIPTION section should describe the relationship to the C standard and markings should be added as appropriate to show where C has been extended in the text.

The following block of text was added to each manual page affected:

The functionality described on this manual page is aligned with the C standard. Any conflict between the requirements described here and the C standard are unintentional. This document defers to the C standard.

Each page was parsed for additions beyond the C standard, that is, including both POSIX and UNIX extensions, and these extensions were marked as CX extensions (for C Extensions).

Organization of the Document
The standard is organized into sections. Some of these, such as the scope, are mandated by ISO/IEC, the IEEE, and other standards bodies. Due to the size of the overall document, the standard has been divided logically into three normative volumes, for the convenience of the standards developers and others. The alphabetical ordering of the large sections, including system interfaces and utilities, was to make it easier for the documents to be used as reference documents.

The three volumes are as follows:

BASE DEFINITIONS
This volume is organized in chapters as follows:

  • Introduction (including scope, normative references)
  • Conformance
  • Definitions
  • General Concepts
  • File Format Notation
  • Character Set
  • Locale
  • Environment Variables
  • Regular Expressions
  • Directory Structure and Devices
  • General Terminal Interface
  • Utility Conventions
  • Headers (organized alphabetically)

The presence of this volume reduces duplication in the other volumes and ensures consistency of use of terminology. Where terminology and definitions common to both the System Interfaces and Shell & Utilities volumes occurs, then additions have been made to this volume.

SYSTEM INTERFACES
This volume is organized as follows:

  • Introduction
  • General Information
  • System Interfaces (organized alphabetically)

SHELL AND UTILITIES
This volume is organized as follows:

  • Introduction
  • Shell Command Language
  • Batch Environment Services
  • Utilities (organized alphabetically)

RATIONALE
In addition, there is also an accompanying Rationale volume.

Further information about the Austin Common Standards Revision Group activities can be found on The Open Group Web site at <http://www.opengroup.org/austin/>.

 

?Need help? Use our Contacts page.
Last changed: 26 Dec. 2000 ah
Standards index
issue index
;login: index
USENIX home