POSIX

POSIXは、オペレーティングシステム  の標準的なインタフェースおよび環境を定義するIEEE規格である。ソースコードレベルでの移植性の高いアプリケーションソフトウェアの開発を容易にすることを目的として、主にUNIX系のOSに関して、各OSが共通して持つべきコマンドラインインタプリタ、共通のユーティリティプログラム、およびアプリケーションプログラミングインタフェース  について定めている。POSIX仕様に準拠したソースコードは、POSIX準拠OSであればどれでも動作させることができる。アプリケーション開発者とシステム実装者の両方から利用されることを意図している。

1. 概要
-----

1.1. 規格の内容
----------

POSIXのバージョンごとに、定められている項目が異なる。各バージョンで定められている項目を下に示す。

なおPOSIXにはいくつものバージョンがあるので、古い文書などで単に「POSIX」と書いてある場合は、現在「POSIX.1」 と呼ばれているものを指している可能性がある。

1.1.1. POSIX.1
--------------

POSIX.1 - Core Services  

Process Creation and Control
Signals
Floating Point Exceptions
Segmentation / Memory Violations
Illegal Instructions
Bus Errors
Timers
File and Directory Operations
Pipes
C Library 
I/O Port Interface and Control
Process Triggers

1.1.2. POSIX.1b
---------------

POSIX.1b - Real-time extensions 

Priority Scheduling
Real-Time Signals
Clocks and Timers
Semaphores
Message Passing
Shared Memory
Asynchronous and Synchronous I/O
Memory Locking Interface

1.1.3. POSIX.1c
---------------

POSIX.1c - Threads extensions 

Thread Creation, Control, and Cleanup
Thread Scheduling
Thread Synchronization
Signal Handling

1.1.4. POSIX.2
--------------

POSIX.2 - Shell and Utilities 

Command Interpreter
Utility Programs

1.2. 名称の由来
----------

この規格は起源をさかのぼると、もともとはIEEEの規格番号やISO/IEC標準番号などで呼ばれていたものであるが、それが発展していく途中でPOSIXと改名された。最初、この一群の規格は「IEEE 1003」という名でつくられ、ISO/IEC標準での番号は「ISO/IEC 9945」だった。 1988年に「IEEE Std 1003.1-1988」と呼ばれていたころに、並行して「POSIX」という名称でも呼ばれ始めた。POSIXという名前はリチャード・ストールマンがIEEEに提案したものである。末尾の「X}}」はUNIX互換OSに「X}}」の字がつく名前が多いことからつけられた。IEEE側のほうも、番号で呼ぶよりもPOSIXという名称で呼んだほうが発音しやすく憶えやすいと気づき、これを採用すると決め、正式名称という位置づけとなった。

2. POSIX指向のOS
-------------

POSIXの規則を守っていることを英語でPOSIX-compliantと言うが、各OSは、どれくらいPOSIXに適合しているかという程度によって、POSIX完全適合のものからPOSIX部分適合のものまで、多段階に分類することができる。

IEEEでPOSIX認証を受けたOSは、登録されIEEEの公式ウェブサイト内で公表されている。認証プログラムのガイドラインが公式サイトに記載されている。

2.1. POSIX準拠
------------

以下に挙げるOSのいくつかのバージョンは、POSIXのいずれかのバージョンを満たすとしてIEEEから認証を受けている 。

AIX
HP-UX
IRIX
EulerOS
macOS 
Solaris
Tru64
UnixWare
QNX Neutrino
Inspur K-UX
INTEGRITY

2.2. POSIXにおおむね準拠
-----------------

以下に挙げるものは、IEEEから公式認証を受けてはいないが、おおむねPOSIXに準拠しているものである。

Android
BeOS 
Contiki
Darwin 
DragonFly BSD
FreeBSD
illumos
Linux
LynxOS
MINIX 
MPE/iX
NetBSD
Nucleus RTOS
NuttX
OpenBSD
OpenSolaris
PikeOS
Redox
RTEMS – POSIX API support designed to IEEE Std. 1003.13-2003 PSE52
SkyOS
Syllable Desktop
VSTa
VMware ESXi
Xenix

TRON系のNucleus RTOSのように、Unix系OS以外でも、すべてではないがPOSIX指向のOSは存在する。

3. WindowsマシンとPOSIX
-------------------

Microsoft Windows自体はPOSIX準拠ではない。

MS-DOSおよびWindows 3.xから派生したWindows 9x系に限らず、DECのVMSから派生したWindows NT系も含め、Microsoft Windows自体はPOSIX準拠ではなく、コマンドやAPIにPOSIX互換性はない。

Windowsにサブシステムをインストールすることで、マシンにPOSIX互換環境を追加することができるが、サブシステムだけがPOSIX準拠というだけで、Windows自体はPOSIX準拠にはならない。VMwareやVirtualBoxなどを使って仮想環境のサンドボックスにPOSIX準拠のゲストOSをインストールしても、ホストOSであるWindows自体はPOSIX準拠にならない。

サードパーティ製のCygwinをインストールすることでPOSIX互換のプログラミング環境を構築することができる。ただしこれもWindows上でLinuxアプリケーションを実行できるようにしたり、従来のネイティブWindowsアプリケーションにUNIXの機能をもたらしたりするものではない。他にもCygwinのような手法によってWindows上でPOSIX準拠のソフトウェアを動作させようとするものとして、MinGW、MSYS2、gowなどがあるがこれらも同様である。

Windows NT系は、Windows 7/Windows Server 2008 R2世代まではPOSIX 1.0に準拠しているPOSIX向けのサブシステムを搭載していて、POSIXアプリケーションをそのサブシステム上で実行できた。貿易の技術的障害に関する協定  では、非関税障壁として工業製品は国際規格を尊重して仕様を規定することを提唱しているため、米国政府機関のコンピュータシステム導入要件  としてPOSIX準拠であることが規定されていたためである。Windows 2000までPOSIXサブシステムを搭載していたが、Windows XPからはServices for UNIXに同梱のInterixサブシステムに役割を譲り、Windows Server 2003 R2やWindows Vistaからは「UNIXベースアプリケーション用サブシステム」 となった。

しかしマイクロソフトはWindows 8およびWindows Server 2012よりSUAを非推奨とし、代替手段の一つとしてCygwinのPOSIXエミュレーションモードを紹介するようになった。

Windows 8.1およびWindows Server 2012 R2ではSUAは完全に利用できなくなった。

その後Windows 10では、Windows 10 version 1607以降でWSL  を搭載したことにより、POSIX準拠のサブシステムを利用できるようになった。WSLではLinuxアプリケーションを実行することもできる。

Microsoft Visual C++には、完全ではないがPOSIX互換のAPIがいくつか実装されている[[シグナル 。例えば_open関数のエイリアスとして、POSIX関数の互換マクロシンボル名openが実装されている。

4. POSIXと他の規格の関係
----------------

C言語のシステムコールとライブラリ関数を規定した規格としては、他にANSI C/ISO CとSUSがある。各規格の立場の違いにより、これらが含む関数の種類には差異がある。数学の包含関係記号で表すと、ANSI/ISO C ⊂ POSIX.1 ⊂ SUSとなる。

5. 脚注
-----

5.1. 注釈
-------

5.2. 出典
-------

6. 関連項目
-------

POSIXスレッド
POSIX 1003.1b
:en:C POSIX library
Linux Standard Base
アメリカ国立標準技術研究所
国際化と地域化
共通ロケールデータリポジトリ
The Open Group
Common User Access
TRONプロジェクト

7. 外部リンク
--------

[1]