POSIXとUnix関連の標準規格と歴史年表 (IEEE, SVID, XPG, SUS)

## はじめに

POSIX とは Portable Operating System Interface の略で 主に Unix 系 OS でソフトウェアの高い互換性（移植性）を実現するために、OS との C 言語用アプリケーションプログラミングインターフェース（API）と共に、シェルとコマンド（ユーティリティ）の仕様を定めた標準規格です。現在一番支持されている標準規格ですが、いきなり POSIX が生まれたわけではなく、さまざまな紆余曲折があって現在の形に落ち着きました。この記事では POSIX をメインに関連する標準規格とその歴史をまとめています。

**補足** 表記の揺れに注意。IEEE (Std) 1003 は POSIX のことです。1003 が POSIX を意味する番号ですが、省略されたりされなかったりします。

**注意 標準規格がいくつもあり標準化団体が変わったりと複雑すぎるのでいろいろと間違いが含まれている可能性が高いです。少しずつ正確な内容に修正していっています。**

**更新履歴**

- 2021-10-14 コマンド一覧を「[POSIX コマンド一覧 + SUS コマンド一覧 完全版](https://qiita.com/ko1nksm/items/ad88974b48e91d0289a2)」に移動
- 2021-10-15 見出しを再構成し、より正確に修正

**関連** [POSIX C言語API一覧とコマンド一覧の調べ方](https://qiita.com/ko1nksm/items/18787925a7821e1d5d74)

## 予備知識 POSIX 以外の主要な標準規格

### 1984: /usr/group Standard　

- のちに POSIX の基礎として仕様される

### 1985: [System V Interface Definition (SVID)] (https://ja.wikipedia.org/wiki/System_V_Interface_Definition)

- AT&T Unix System Laboratories
- POSIX と争っていた UNIX の標準規格
- POSIX では対象としてないシステム管理ツールも含まれている
- [SVID コマンド一覧](https://qiita.com/ko1nksm/items/7d75a700ef1be2722372)

### 1985: X/Open Portability Guide (XPG)

- System V Interface Definition をベースとして開発された
- POSIX より広い範囲を扱っていたが、POSIX 収束に向けて仕様が縮小された（？）
- Issue 1 から始まり X/Open としてリリースしたのは、おそらく Issue 5 まで
  - Open Group Technical Standard として Issue 6 から引き継いでいる
  - XPG6 以降は公式な名前ものじゃないと思うが一部で使われている

### 1995: Single UNIX Specification (SUS)

- Open Group による UNIX 認証のための仕様
- SUSv1 と SUSv2 は XPG ベース
- SUSv3 より内容は POSIX と同じだが XSI / UP オプションが必須

## 標準規格と歴史年表

### Unix 誕生と標準化時代の幕開け

- 1969-1971 年 Unix 誕生（Thompson シェル） [Unix First Edition Manuals](http://man.cat-v.org/unix-1st/)
- 1975 年 Version 6 Unix （これが後の BSD のベースとなる） [Manuals](http://man.cat-v.org/unix-6th/)
- 1977 年 PWB/UNIX 1.0（Version 6 Unix ベース、PWB シェル）
- 1978 年 BSD 誕生、PWB/UNIX 2.0（Version 7 Unix ベース）
- 1979 年 Version 7 Unix（Bourne シェル誕生） [Manuals](http://man.cat-v.org/unix_7th)、2BSD（csh 誕生）
- 1981 年 「/usr/group」標準化委員会（現 UniForum）で標準化作業が始まる
- 1983 年 UNIX System V Release 1 (SVR1)
- 1984 年 **/usr/group Standard** （貢献団体に IEEE や ISO が含まれる）
- 1984 年 GNU プロジェクト開始
- 1985 年 **SVID1: System V Interface Definition 1** （SVR2 対応）
- 1985 年 **XPG1: X/Open Portability Guide, Issue 1**
- 1986 年 **SVID2: System V Interface Definition 2** （SVR3 対応）
- 1987 年 **XPG2: X/Open Portability Guide, Issue 2**

### POSIX.1-1988 (IEEE Std 1003.1-1988)

- **C 言語インターフェースのみが標準化された**
- POSIX にシェルとコマンドはまだ収録されてない

**更新や追加された細かいサブ仕様**

- **POSIX.1-1990** (POSIX 1003.1-1990): POSIX.1-1988 更新 = ISO/IEC 9945-1:1990
- POSIX.1b (POSIX 1003.1b, IEEE Std 1003.1b-1993): リアルタイム拡張
- POSIX.1c (POSIX 1003.1c, IEEE Std 1003.1c-1995): スレッドイ拡張
- 他にも色々とよくわからないものがある（廃案？）
  - 「[POSIX.4 Programmers Guide: Programming for the Real World ](https://www.amazon.co.jp/POSIX-4-Programmers-Guide-Programming-World/dp/1565920740)」にいろいろ載ってるようだ。

シェルとコマンドが標準化されたのは 1992 年、当時からコマンドは殆ど変わってないんだから、その後に標準化された「リアルタイム拡張」「POSIX スレッド」「ネットワーク API」に対応するコマンドがないのも仕方ないね。

**参考** 昔 [Windows NT POSIX サブシステム](https://en.wikipedia.org/wiki/Microsoft_POSIX_subsystem) が準拠していたのは POSIX.1-1990。つまり POSIX スレッドなし、ソケットなし、シェル・コマンドなし。後に SFU に代わってシェルやコマンドが追加されたり Interix サブシステムに代わったりしたが、それが POSIX に準拠しているかは調べてない（WSL 登場よりもずっと前の話だし使ってないので興味ない）。「[MicrosoftとUnixのお話](https://qiita.com/sutton/items/5b2b7e2e57b674abe4f5)」で詳しくまとめている方がいるのでそちらを参照してください。

### Linux 誕生

- 1989 年 **SVID3: System V Interface Definition 3** （SVR4 対応）
- 1989-1994 年 BSD が AT&T のコードを排除していく
- 1990 年 **XPG3: X/Open Specification, Issue 3**
    - POSIX.1 + SVID ベース？ 
- 1991 年 Linux 誕生

### POSIX.2-1992 (IEEE Std 1003.2-1992)

- **これがシェルとコマンドの POSIX 標準化の最初の歴史！**
- SVID をベースに Unix 系 OS で移植性が高いと認められるコマンドを収録
- Korn Shell (ksh88) のサブセットが POSIX シェルとなった（Bourne シェルではない！）
- 1993 年に ISO でも承認された (ISO/IEC 9945-2:1993)

### Single UNIX Specification 誕生

- 1992 年 **XPG4: CAE Specification, Issue 4**
    - POSIX.1 + SVID ベース？
    - 以下の内容で構成されている
        - System Interface Definitions, Issue 4
        - Commands and Utilities, Issue 4
        - System Interfaces and Headers, Issue 4
- 1994 年 **XPG4v2: CAE Specification, Issue 4, Version 2**
    - Spec 1170 （[参考資料]
(https://unix.org/what_is_unix/single_unix_specification.html)）
    - 以下の内容で構成されている (Open Group になってから提供されたのだと思う）
        - [System Interface Definitions, Issue 4, Version 2](https://pubs.opengroup.org/onlinepubs/009656599/toc.pdf) [PDF]
        - [Commands and Utilities Issue 4, Version 2](https://pubs.opengroup.org/onlinepubs/009656399/toc.pdf) [PDF]
        - [System Interfaces and Headers Issue 4, Version 2](https://pubs.opengroup.org/onlinepubs/9695969499/toc.pdf) [PDF]
- 1995 年 **SUSv1 (UNIX 95)**・・・XPG4v2 などを再構成
- 1995 年 **SVID4: System V Interface Definition 4** 
    - XPG4 と POSIX 1003.1-1990 に準拠するように更新
    - [SVID Fourth Edition](http://www.sco.com/developers/devspecs/)（コマンド一覧 は Volume 2 とVolume 3）

### POSIX.1-1996 (IEEE Std 1003.1-1996)

- **リアルタイム拡張 (POSIX.1b) と スレッド拡張 (POSIX.1c) を取り込む**

**更新や追加された細かいサブ仕様**

- POSIX.1d (POSIX 1003.1d, IEEE Std 1003.1c-1999): 追加のリアルタイム拡張
- POSIX.1g (POSIX 1003.1g, IEEE Std 1003.1g-2000): ネットワーク API
- POSIX.1j (POSIX 1003.1j, IEEE Std 1003.1j-2000): 高度なリアルタイム拡張

### The Open Group 誕生

- 1996 年 The Open Group 誕生 （[The Open Group による歴史年表](https://unix.org/what_is_unix/history_timeline.html) もおすすめ）
- 1997 年 **[SUSv2](https://pubs.opengroup.org/onlinepubs/7908799/) ([UNIX 98](https://unix.org/unix98.html))** = XPG5(?)
  - 以下の内容で構成されている
     - Base Definitions, Issue 5
     - System Interfaces and Headers, Issue 5
     - Commands and Utilities, Issue 5
     - Networking Services, Issue 5
     - X/Open Curses, Issue 4, Version 2

### [Austin Group](https://en.wikipedia.org/wiki/Austin_Group) 誕生

- 1998年 [Austin Group](https://en.wikipedia.org/wiki/Austin_Group) （オースティン・グループ）誕生

複数の標準化団体による統一団体。複数の標準仕様を同期し、現在は POSIX の維持管理（修正・更新）を行っている。

- **IEEE PASC**
  - **みんなが POSIX、POSIX って言ってるのはこれ**
  - POSIX という名前はここで生まれた（元々の名前は IEEEIX）
     - 命名者は GNU プロジェクトのリチャード・ストールマン
- **The Open Group** (1996)
  - **みんなが POSIX の ドキュメントって言って見てるのはこれ**
  - X/Open (1984) と OSF - Open Software Foundation (1988) が合併して生まれた
     - OSF: AT&T と SUN の同盟に対抗（参考 [UNIX戦争](https://ja.wikipedia.org/wiki/UNIX%E6%88%A6%E4%BA%89)）
  - Issue {N} は The Open Group Base Specifications Issue {N} のこと
  - Issue {N} の N は XPG{N} (XPG Issue {N}) の N を（たぶん）引き継いてる
  - POSIX を元に Single UNIX Specification (SUS) の維持管理を行っている
  - 現在の UNIX 商標の権利保有者（以前は X/Open、その前は AT&T が権利保有者）
- **ISO/IEC JTC 1/SC 22**
  - ~~影が薄い~~

### POSIX.1-2001 (IEEE Std 1003.1-2001)

- **POSIX と SUS の統合**
- **POSIX.1 に シェルとコマンド の標準がマージ** （POSIX.2 はもうない）
- POSIX.1-2001 = [SUSv3](https://unix.org/version3/) ([UNIX 03](https://unix.org/unix03.html)) = XPG6(?) = Open Group Technical Standard, Issue 6
  - Issue 6, 2003 edition (POSIX.1-2003, POSIX 1003.1-2003) TC1 バグ修正版
  - [Issue 6, 2004 edition](https://pubs.opengroup.org/onlinepubs/009695399/) (POSIX.1-2004, POSIX 1003.1-2004) TC2 バグ修正版
- 2007 年 [Mac OS X 10.5 が UNIX 03 の認証を受ける](https://www.opengroup.org/openbrand/register/apple.htm)（macOS 11.0 Big Sur も UNIX 03）

### POSIX.1-2008 (IEEE Std 1003.1-2008)

- **リアルタイム拡張とスレッド拡張が必須機能になる**
- [POSIX.1-2008](https://pubs.opengroup.org/onlinepubs/9699919799.2008edition/) = [SUSv4](https://unix.org/version4/) ([UNIX V7](https://unix.org/unixv7.html)) = XPG7(?) = Open Group Technical Standard, Issue 7
  - [Issue 7, 2013 edition](https://pubs.opengroup.org/onlinepubs/9699919799.2013edition/) (POSIX.1-2013, POSIX 1003.1-2013) TC1 バグ修正版
  - [Issue 7, 2016 edition](https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/) (POSIX.1-2016, POSIX 1003.1-2016) TC2 バグ修正版
  - [Issue 7, 2018 edition](https://pubs.opengroup.org/onlinepubs/9699919799/) (POSIX.1-2017, POSIX 1003.1-2017) POSIX.1-2008 + TC1 + TC2
     - **★ 2021-10 現在の最新**

### POSIX.1-202x 

- **次世代の POSIX**
- 2022 年後期 予定

## 参考資料

- https://en.wikipedia.org/wiki/POSIX
- https://linuxjm.osdn.jp/html/LDP_man-pages/man7/standards.7.html
- https://docs.oracle.com/cd/E56342_01/html/E54082/xpg4-5.html
- https://www.in-ulm.de/~mascheck/various/portability/
- https://austin-group-l.opengroup.narkive.com/4uDQU6nj/usr-group-standard
  - /usr/group Standard の資料を誰か持ってませんか？というスレッド
  - http://www.nic.funet.fi/pub/doc/posix/ に POSIX.2 draft 11.2 が有るとのこと

まだ内容を確認してないが何かしら情報が得られそうなもの

- The Single UNIX® Specification: The Authorized Guide to Version 3, 2nd Edition
    - https://pubs.opengroup.org/onlinepubs/9299959899/toc.pdf
- The Single UNIX® Specification: Authorized Guide to Version 4
    - https://publications.opengroup.org/g101