ポータブルオペレーティングシステムインターフェイス(POSIX ; IPA : /ˈpɒz.ɪks/ [ 1 ] )は、オペレーティングシステム間の互換性を維持するためにIEEEコンピュータソサエティによって規定された一連の標準です。[ 1 ]互換性のレベルを定義するために、POSIXは、アプリケーションプログラミングインターフェイス( API)、コマンドラインシェル、およびシェルコマンドとして分類できる機能の多くの側面を規定しています。元々は、一般的に見られるUnix API、シェル、およびコマンドから派生したもので(Unixがメーカー中立であると考えられていたことが一因)、今日では、ブランド化されたUnixシステム、Unixライクなシステム、および歴史的にUnixとは無関係であった多くのシステムを含む、多くのシステムがこの標準に準拠しています。[ 1 ] [ 2 ]
標準化されたユーザーコマンドラインとスクリプトインターフェースは、 UNIX System V Bourneシェルに基づいていました。[ 3 ]多くのユーザーレベルのプログラム、サービス、ユーティリティ(awk、echo、edなど)も、UNIX System Vバージョンに基づいて標準化されており、必要なプログラムレベルのサービス(基本的な入出力:ファイル、ターミナル、ネットワークなど)も含まれています。POSIXは、ほとんどの最新のオペレーティングシステムでサポートされている標準スレッドライブラリAPIも定義しています。
POSIX規格は、Austin Group ( IEEE、The Open Group、およびISO/IEC JTC 1/SC 22 /WG 15による合同ワーキンググループ)によって開発されました。
POSIXは、アプリケーション開発者とシステム開発者の両方が使用することを想定しています。[ 4 ]システム開発者はPOSIXによって課せられたインターフェースを実装し、アプリケーション開発者はPOSIXインターフェースを使用してPOSIX準拠システム間の互換性を確保します。
これらの規格は、/usr/groupアソシエーションでの関連活動の成果を基に、1984 年に開始されたプロジェクトから生まれました。[ 5 ]リチャード・ストールマンは、以前のIEEE-IXの代わりにPOSIXという名前をIEEE に提案しました。[ 6 ] [ 7 ]委員会は、この名前の方が発音しやすく覚えやすいと考え、採用しました。[ 9 ]
元々POSIXとは、1988年に発行されたIEEE Std 1003.1-1988を指していました。POSIX規格群は正式にはIEEE 1003と呼ばれ、ISO/IEC規格番号はISO / IEC 9945です。
POSIX は当初、コア サービスに関する単一の文書で構成されていましたが、時間の経過とともに仕様を拡張および改訂するための追加の文書が公開されました。1997 年より前は、POSIX は数年にわたって公開された複数の文書で構成されていました。1997 年以降、Austin Group はSingle UNIX Specification (SUS)というタイトルの仕様を作成しています。時間の経過とともに、このグループはこの仕様のバージョンを公開し、その後 POSIX は SUS バージョンの一部または全部に従って修正されます。SUS バージョンは、必要な動作のグループごとにボリュームの集合と、その他の情報 (ボリューム外) で構成されます。[ 10 ]各ボリュームには、バージョンの各ボリュームで同じですが、バージョンと同じ値ではない発行番号が割り当てられます。たとえば、SUS バージョン 3 (SUSv3) には、発行番号 6 のボリュームが含まれます。
2014年現在POSIXのドキュメントは2つの部分に分かれています。
コアサービス(IEEE Std 1003.1-1988)は標準ANSI Cを組み込んでおり、以下が含まれます。
リアルタイム拡張機能(IEEE Std 1003.1b-1993、後にlibrt—リアルタイム拡張機能ライブラリとして登場)には以下が含まれます:[ 12 ]
スレッド拡張機能(IEEE Std 1003.1c-1995)には以下が含まれます。
シェルおよびユーティリティ(IEEE Std 1003.2-1992)には以下が含まれます。
POSIX.1-2001 (IEEE Std 1003.1-2001) は、ボリューム (第 6 号) である「基本定義」、「システム インターフェイスとヘッダー」、「コマンドとユーティリティ」で構成される SUSv3 の大部分で構成されています。POSIX 仕様では、curses API (SUSv3 にはこの明確なグループはありませんが、しばしばX/Open Cursesと呼ばれます) に関する SUSv3 の要件は明示的に除外されています。[ 13 ]
IEEE Std 1003.1-2004 は、技術訂正文書と呼ばれる2 つのマイナー アップデートまたは正誤表によって POSIX.1-2001 を修正します。 [ 14 ] [ 15 ]
前身と同様に、POSIX.1-2008 ( IEEE Std 1003.1-2008、2016年版) は、SUSv4 (基本定義、システムインターフェースとヘッダー、コマンドとユーティリティの各巻の第 7 号) の規範的資料の大部分で構成されています。[ 16 ] SUSv4 には、それ自体には含まれていないものの、POSIX に大きく適用される根拠情報も含まれています。
POSIX.1-2017 ( IEEE Std 1003.1-2017 ) は、2 つの技術的な訂正により以前のバージョン (POSIX.1-2008) を改訂しています。[ 17 ]
POSIX.1-2024 ( IEEE Std 1003.1-2024 ) は 2024 年 6 月 14 日に公開されました。[ 16 ] [ 18 ]
POSIX 2024の時点では、この規格はC17言語規格に準拠しています。
POSIX では、ディスク上のブロックの一般的なサイズを反映して、dfおよびduユーティリティのデフォルトのブロックサイズを512 バイトと規定しています。Richard StallmanとGNUチームがGNU オペレーティングシステムに POSIX を実装していたとき、ほとんどの人が 1024 バイト (または 1 KiB ) のブロックで考えているという理由でこれに反対しました。環境変数POSIX_ME_HARDER が導入され、ユーザーが標準に準拠した動作を強制できるようになりました。[ 19 ]後に変数名はPOSIXLY_CORRECTに変更されました。[ 20 ] 2025 年現在、この変数は他のいくつかの動作の癖にも使用されています。[ 21 ] [ 22 ] [ 23 ] [ 24 ] [ 25 ] [ 26 ] [ 27 ] [ 28 ] [ 29 ]
オペレーティングシステムは、POSIX規格への準拠度合いに応じて分類することができる。
以下のオペレーティングシステムの現行バージョンは、1つ以上の様々なPOSIX規格に準拠していることが認定されています。これは、自動適合性テスト[ 30 ]に合格し、認証が期限切れになっておらず、オペレーティングシステムが廃止されていないことを意味します。[ 31 ] [ 32 ]
以下のオペレーティングシステムのいくつかのバージョンは、さまざまな POSIX 標準の 1 つ以上に準拠していることが認定されていました。これは、自動適合性テストに合格したことを意味します。認定は期限切れとなり、一部のオペレーティングシステムはサポートが終了しています。[ 31 ]
以下のものはPOSIX準拠として認定されていませんが、部分的に準拠しているとみなされており、準拠していると呼ばれることもあります。
以下のオペレーティングシステムはPOSIX準拠として認定されていませんが、互換性機能(通常は変換ライブラリ、またはカーネル上のレイヤー)を介してPOSIXサポートを実装することにより、大部分が標準に準拠しています。
一部の技術では、オペレーティングシステム自体がPOSIX規格にほとんど準拠していない、あるいは全く準拠していない場合でも、オペレーティングシステムがPOSIX規格に一定程度準拠していることを可能にする。
WindowsはPOSIX規格に準拠していませんが、以下の技術によって一定レベルの準拠が実現されています。
OS/2用の POSIX 環境:
DOS用のPOSIX環境には以下が含まれます。
librt、libposix4- POSIX.1b Realtime Extensions ライブラリ [...] librt はこのライブラリの推奨名です。libposix4 という名前は後方互換性のために維持されており、使用を避けるべきです。このライブラリの関数は、POSIX.1b Realtime Extension で指定されているほとんどのインターフェイスを提供します。
、Linux、MacOSで実行できる単一のコードベースのC++コードを構築したい場合は、Windows用にこれが必要です。