POSIX
POSIX(ポジックス[1][2][3][注釈 1]、英: Portable Operating System Interface)は、オペレーティングシステム (OS) の標準的なインタフェースおよび環境を定義するIEEE規格である[5]。ソースコードレベルでの移植性の高いアプリケーションソフトウェアの開発を容易にすることを目的として、主にUNIX系のOSに関して、各OSが共通して持つべきコマンドラインインタプリタ(シェル)、共通のユーティリティプログラム、およびアプリケーションプログラミングインタフェース (API) について定めている。アプリケーション開発者とシステム実装者の両方から利用されることを意図している。
概要
規格の内容
POSIXによって定められていることは、カーネルへのC言語のインタフェースであるシステムコール、プロセス環境、ファイルとディレクトリ、パスワードファイル、アーカイブフォーマットなどOSの機能として必要最小限のものだけである。システム管理機能、グラフィカルインターフェース、データベースサービス、画像ファイルフォーマット等は対象外である。
C言語のシステムコールとライブラリ関数を規定した規格としては、他にANSI C/ISO CとSUS(Single UNIX Specification、XPG4の後継)がある。各規格の立場の違いにより、これらが含む関数の種類には差異がある。数学の包含関係記号で表すと、ANSI/ISO C ⊂ POSIX.1 ⊂ SUSとなる。
なおPOSIXにはいくつものバージョンがあるので、単に「POSIX」と書いてある場合は、システムコールとライブラリ関数を規定したPOSIX.1 (IEEE Std 1003.1) を指している場合もある。
名称の由来
この規格は起源をさかのぼると、もともとはIEEEの規格番号やISO/IEC標準番号などで呼ばれていたものであるが、それが発展していく途中でPOSIXと改名された。最初、この一群の規格は「IEEE 1003」という名でつくられ、ISO/IEC標準での番号は「ISO/IEC 9945」だった。1988年に「IEEE Std 1003.1-1988」と呼ばれていたころに、並行して「POSIX」という名称でも呼ばれ始めた。POSIXという名前はリチャード・ストールマンがIEEEに提案したものである[6]。末尾の「X」はUNIX互換OSに「X」の字がつく名前が多いことからつけられた。IEEE側のほうも、番号で呼ぶよりもPOSIXという名称で呼んだほうが発音しやすく憶えやすいと気づき、これを採用すると決め、正式名称という位置づけとなった。
POSIX指向のOS
各OSは、どれくらいPOSIXに適合しているかという程度によって、POSIX完全適合のものからPOSIX部分適合のものまで、多段階に分類することができる。IEEEでPOSIX認証を受けたOSは、登録されIEEEの公式ウェブサイト内で公表されている[7]。認証プログラムのガイドラインが公式サイトに記載されている[8]。
POSIX準拠
以下に挙げるOSのいくつかのバージョンは、POSIXのいずれかのバージョンを満たすとしてIEEEから認証を受けている (POSIX-certified)。
POSIXにおおむね準拠
以下に挙げるものは、IEEEから公式認証を受けてはいないが、おおむねPOSIXに準拠しているものである。
- Android[注釈 2]
- BeOS (結果としてHaikuも含む)
- Contiki
- Darwin (macOSおよびiOSのコア)
- DragonFly BSD
- FreeBSD[20]
- illumos
- Linux[注釈 3]
- LynxOS
- MINIX (現在[いつ?]ではMINIX3)
- MPE/iX[21]
- NetBSD
- Nucleus RTOS
- NuttX
- OpenBSD
- OpenSolaris[22]
- 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は存在する。
WindowsにおけるPOSIXサポート
Microsoft Windowsでは、サードパーティ製のCygwinをインストールすることでPOSIX互換のプログラミング環境を構築することができる。ただしWindows上でLinuxアプリケーションを実行できるようにしたり、従来のネイティブWindowsアプリケーションにUNIXの機能をもたらしたりするものではない[23]。
Windows NT系は、Windows 7/Windows Server 2008 R2世代まではPOSIX 1.0に準拠しているPOSIXサブシステムを搭載していて、POSIXアプリケーションをそのサブシステム上で実行できた[24]。貿易の技術的障害に関する協定 (WTO/TBT協定) では、非関税障壁として工業製品は国際規格を尊重して仕様を規定することを提唱しているため、米国政府機関のコンピュータシステム導入要件 (連邦情報処理標準、FIPS) としてPOSIX準拠であることが規定されていたためである[25]。Windows 2000までPOSIXサブシステムを搭載していたが、Windows XPからはServices for UNIXに同梱のInterixサブシステムに役割を譲り、Windows Server 2003 R2やWindows Vistaからは「UNIXベースアプリケーション用サブシステム」(Subsystem for UNIX-based Applications, SUA) となった[24]。しかしマイクロソフトはWindows 8およびWindows Server 2012よりSUAを非推奨とし、代替手段の一つとしてCygwinのPOSIXエミュレーションモードを紹介するようになった[26][27]。Windows 8.1およびWindows Server 2012 R2ではSUAは完全に利用できなくなった[24]。
その後、Windows 10では、Windows 10 version 1607以降でWSL (Windows Subsystem for Linux) を搭載したことにより、POSIX準拠のサブシステムを利用できるようになった。WSLではLinuxアプリケーションを実行することもできる。
規格
Linuxの国際標準を制定するにあたり、LinuxとPOSIXの差に関するTR[要説明]を作成している。
最初の規格のテストスイートはアメリカ国立標準技術研究所がPOSIX Test Suite (POSIX 1990 version) としてオープンソースで提供している。