POSIX
POSIX(ポジックス[1][2][3][注釈 1]、英: Portable Operating System Interface)は、オペレーティングシステム (OS) の標準的なインタフェースおよび環境を定義するIEEE規格である[4]。ソースコードレベルでの移植性の高いアプリケーションソフトウェアの開発を容易にすることを目的として、主にUNIX系のOSに関して、各OSが共通して持つべきコマンドラインインタプリタ(シェル)、共通のユーティリティプログラム、およびアプリケーションプログラミングインタフェース (API) について定めている。POSIX仕様に準拠したプログラムは、POSIX準拠OSであればどれでも動作させることができる[注釈 2]。アプリケーション開発者とシステム実装者の両方から利用されることを意図している。
概要[編集]
規格の内容[編集]
POSIXのバージョンごとに、定められている項目が異なる。各バージョンで定められている項目を下に示す。
なおPOSIXにはいくつものバージョンがあるので、古い文書などで単に「POSIX」と書いてある場合は、現在「POSIX.1」(IEEE Std 1003.1) と呼ばれているもの(だけ)を指している可能性がある。
POSIX.1[編集]
POSIX.1 - Core Services (Standard ANSI Cと統合) (IEEE Std 1003.1-1988)
- Process Creation and Control
- Signals
- Floating Point Exceptions(浮動小数点例外)
- Segmentation / Memory Violations
- Illegal Instructions
- Bus Errors
- Timers
- File and Directory Operations
- Pipes
- C Library (Standard C)
- I/O Port Interface and Control
- Process Triggers
POSIX.1b[編集]
POSIX.1b - Real-time extensions (IEEE Std 1003.1b-1993)[注釈 3]
- Priority Scheduling
- Real-Time Signals
- Clocks and Timers
- Semaphores
- Message Passing
- Shared Memory
- Asynchronous and Synchronous I/O
- Memory Locking Interface
POSIX.1c[編集]
POSIX.1c - Threads extensions (IEEE Std 1003.1c-1995)
- Thread Creation, Control, and Cleanup
- Thread Scheduling
- Thread Synchronization
- Signal Handling
POSIX.2[編集]
POSIX.2 - Shell and Utilities (IEEE Std 1003.2-1992)
- Command Interpreter
- Utility Programs
名称の由来[編集]
この規格は起源をさかのぼると、もともとはIEEEの規格番号やISO/IEC標準番号などで呼ばれていたものであるが、それが発展していく途中でPOSIXと改名された。最初、この一群の規格は「IEEE 1003」という名でつくられ、ISO/IEC標準での番号は「ISO/IEC 9945」だった。 1988年に「IEEE Std 1003.1-1988」と呼ばれていたころに、並行して「POSIX」という名称でも呼ばれ始めた。POSIXという名前はリチャード・ストールマンがIEEEに提案したものである[5]。末尾の「X」はUNIX互換OSに「X」の字がつく名前が多いことからつけられた。IEEE側のほうも、番号で呼ぶよりもPOSIXという名称で呼んだほうが発音しやすく憶えやすいと気づき、これを採用すると決め、正式名称という位置づけとなった。
POSIX指向のOS[編集]
POSIXの規則を守っていることを英語でPOSIX-compliant(ポジックス・コンプライアント)と言うが、各OSは、どれくらいPOSIXに適合しているかという程度によって、POSIX完全適合のものからPOSIX部分適合のものまで、多段階に分類することができる。
(IEEEはOS開発元から申請があればそのOSがPOSIXに適合しているか審査しており)IEEEでPOSIX認証を受けたOSは、登録されIEEEの公式ウェブサイト内で公表されている[6]。認証プログラムのガイドラインが公式サイトに記載されている[7]。[注釈 4]
POSIX準拠[編集]
以下に挙げるOSのいくつかのバージョンは、POSIXのいずれかのバージョンを満たすとしてIEEEから認証を受けている (POSIX-certified)。
POSIXにおおむね準拠[編集]
以下に挙げるものは、IEEEから公式認証を受けてはいないが、おおむねPOSIXに準拠しているものである。
- Android[注釈 5]
- BeOS (結果としてHaikuも含む)
- Contiki
- Darwin (macOSおよびiOSのコア)
- DragonFly BSD
- FreeBSD[19]
- illumos
- Linux[注釈 6]
- LynxOS
- MINIX (現在[いつ?]ではMINIX3)
- MPE/iX[20]
- NetBSD
- Nucleus RTOS
- NuttX
- OpenBSD
- OpenSolaris[21]
- 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[編集]
MS-DOSおよびWindows 3.xから派生したWindows 9x系に限らず、DECのVMSから派生したWindows NT系も含め、Microsoft Windows自体はPOSIX準拠ではなく、コマンドやAPIにPOSIX互換性はない。しかし、Windowsにサブシステムをインストールすることで、POSIX互換環境を追加することができる[注釈 7]。
例えばサードパーティ製のCygwinをインストールすることでPOSIX互換のプログラミング環境を構築することができる。ただしWindows上でLinuxアプリケーションを実行できるようにしたり、従来のネイティブWindowsアプリケーションにUNIXの機能をもたらしたりするものではない[22]。
他にも、Cygwinのような手法によってWindows上でPOSIX準拠のソフトウェアを動作させようとするものとして、MinGW、MSYS2、gowなどがある。
Windows NT系は、Windows 7/Windows Server 2008 R2世代まではPOSIX 1.0に準拠しているPOSIXサブシステムを搭載していて、POSIXアプリケーションをそのサブシステム上で実行できた[23]。貿易の技術的障害に関する協定 (WTO/TBT協定) では、非関税障壁として工業製品は国際規格を尊重して仕様を規定することを提唱しているため、米国政府機関のコンピュータシステム導入要件 (連邦情報処理標準、FIPS) としてPOSIX準拠であることが規定されていたためである[24]。Windows 2000までPOSIXサブシステムを搭載していたが、Windows XPからはServices for UNIXに同梱のInterixサブシステムに役割を譲り、Windows Server 2003 R2やWindows Vistaからは「UNIXベースアプリケーション用サブシステム」(Subsystem for UNIX-based Applications, SUA) となった[23]。
しかしマイクロソフトはWindows 8およびWindows Server 2012よりSUAを非推奨とし、代替手段の一つとしてCygwinのPOSIXエミュレーションモードを紹介するようになった[25][26]。
Windows 8.1およびWindows Server 2012 R2ではSUAは完全に利用できなくなった[23]。
その後Windows 10では、Windows 10 version 1607以降でWSL (Windows Subsystem for Linux) を搭載したことにより、POSIX準拠のサブシステムを利用できるようになった。WSLではLinuxアプリケーションを実行することもできる。
Microsoft Visual C++には、完全ではないがPOSIX互換のAPIがいくつか実装されている[注釈 8]。例えば_open
関数のエイリアス(別名)として、POSIX関数の互換マクロシンボル名open
が実装されている[28]。しかし、POSIX関数は標準C規格(ISO/IEC 9899)で標準化された関数ではなく、本来実装固有シンボルが従うべき命名規則[注釈 9]に準拠していないため、Visual C++では非推奨となっている。
POSIXと他の規格の関係[編集]
C言語のシステムコールとライブラリ関数を規定した規格としては、他にANSI C/ISO CとSUS(Single UNIX Specification、XPG4の後継)がある。各規格の立場の違いにより、これらが含む関数の種類には差異がある。数学の包含関係記号で表すと、ANSI/ISO C ⊂ POSIX.1 ⊂ SUSとなる。
脚注[編集]
注釈[編集]
- ^ 公式のFAQでは「ポジックス」に近い発音を想定していることが明確に記載されている。
- ^ 厳密には「移植」ができるというだけであり、実行バイナリおよびABIレベルの互換性までは保証されず、通常は環境に合わせて再コンパイル・再ビルドが必要となる。
- ^ 後にlibrt (Realtime Extensions library) となっていった。
- ^ ただし審査は有料制で、その審査料金や認定料や認証後の「POSIX」名の使用料が高額なので[1]、ボランティアらで開発されているオープンなソフトウェアなどは通常そうした余計な費用負担はできず審査を申し込まないので、結果としてPOSIXにほぼ適合していても審査を受けようともしないということが起きている。そのような理由で、実は認証が無いOSでもPOSIXにほぼ適合しているものもある。
- ^ ただし、Android NDKを利用する場合に限る。
- ^ ほとんどのディストリビューションが該当するが、全てではない。Linux Standard Baseを参照。
- ^ Windows上で動作するサブシステムがPOSIX準拠というだけで、Windows自体はPOSIX準拠にはならない。VMwareやVirtualBoxなどを使って仮想環境のサンドボックスにPOSIX準拠のゲストOSをインストールしても、ホストOSであるWindowsがPOSIX準拠になるわけではないのと同じである。
- ^ シグナルのように、限定的にしかサポートされない機能もある[27]。
- ^ 例えばグローバルスコープを持ち、アンダースコア
_
で始まる名前。
出典[編集]
- ^ POSIX(Portable Operating System Interface)とは - IT用語辞典 e-Words
- ^ Linux用語事典 [POSIX(Portable Operating System Interface for UNIX)]
- ^ “POSIX™ 1003.1 Frequently Asked Questions (FAQ Version 1.18)” (2020年6月13日). 2021年5月6日閲覧。 “It is expected to be pronounced pahz-icks, as in positive, not poh-six, or other variations.”
- ^ P1003.1 - Standard for Information Technology--Portable Operating System Interface (POSIX(TM)) Base Specifications, Issue 8
- ^ “POSIX 1003.1 FAQ Version 1.12” (2006年2月2日). 2010年12月29日閲覧。
- ^ POSIX Certification Register
- ^ POSIX Certification Guide
- ^ “IBM”. The Open Group. 2014年1月26日閲覧。
- ^ a b “Hewlett-Packard”. The Open Group. 2014年1月26日閲覧。
- ^ “Silicon Graphics, Inc.”. The Open Group. 2014年1月26日閲覧。
- ^ “Huawei Technology Co., Ltd”. The Open Group. 2017年5月26日閲覧。
- ^ “The Open Brand - Register of Certified Products”. Register of Open Branded Products. The Open Group. 2015年5月20日閲覧。
- ^ “Apple Inc”. Register of Open Branded Products. The Open Group. 2015年5月20日閲覧。
- ^ “Oracle Corporation”. The Open Group. 2014年1月26日閲覧。
- ^ “UnixWare ® 7.1.3 and later”. The Open Group (2003年5月16日). 2013年6月10日閲覧。
- ^ “QNX Achieves New POSIX Certification”. QNX (2008年4月8日). 2016年1月16日閲覧。
- ^ “Inspur Co., Ltd”. The Open Group. 2017年5月26日閲覧。
- ^ “POSIX Certification Register”. get.posixcertified.ieee.org. 2018年3月9日閲覧。
- ^ Schweikhardt, Jens. “POSIX utilities”. FreeBSD. 2019年4月12日閲覧。
- ^ Mark Halper (7 November 1994). “HP 3000 sales catch market by surprise”. Computerworld (IDG Enterprise) 28 (4) .
- ^ Solter, Nicholas A.; Jelinek, Jerry; Miner, David (21 March 2011) (英語). OpenSolaris Bible. John Wiley & Sons. ISBN 9781118080313
- ^ Cygwin
- ^ a b c “POSIX and UNIX Support in Windows”. 2018年8月10日閲覧。
- ^ Federal Information Processing Standard (FIPS) 151-2 - ウェイバックマシン(2014年2月20日アーカイブ分)
- ^ “Features Removed or Deprecated in Windows Server 2012”. Microsoft Docs. 2022年2月17日閲覧。
- ^ 第1回 Windows 8製品版の概要:Windows 8レボリューション(1/3 ページ) - @IT
- ^ signal | Microsoft Learn
- ^ open | Microsoft Learn
関連項目[編集]
- POSIXスレッド
- POSIX 1003.1b
- en:C POSIX library
- Linux Standard Base
- アメリカ国立標準技術研究所
- 国際化と地域化
- 共通ロケールデータリポジトリ
- The Open Group
- Common User Access
- TRONプロジェクト