72606


POSIX準拠しているOSとはどういうものを指すんですか？

POSIXってのはライブラリなどAPIレベルで互換性を保つための決まり事みたいですね。

  1. POSIX準拠OSとはなんですか？

そのPOSIXが規定しているAPI(ライブラリ)を実装するのに求められる機能が  
OSに備わっているかいないかですか？

  2. POSIXアプリケーションとはなんのことを指すのでしょう？

  3. Windows7 POSIXサブシステムについて

<https://en.wikipedia.org/wiki/POSIX#POSIX-oriented_operating_systems>

Windows7ではPOSIXサブシステムというものが備わっており、POSIXアプリケーションをそのまま動かすことができるとありますが、これは例えばCentOS上で動くことを想定してPOSIX準拠のソースコードをコンパイルリンクして生成した実行コードをWindowsでそのまま動かすことができるってこと？

CentOSとwindowsではABI,システムコール呼び出しから全く異るのに大丈夫なんですか？


CC BY-SA 4.0
2020-12-11T19:11:38.587
72596
2022-03-16T14:57:59.253
2020-12-12T04:14:44.167
3060
37492
question
linux posix
POSIXというものについて質問です。


部分的な回答です。

> windows7ではposixサブシステムというものが備わっており posixアプリケーションをそのまま動かすことができるとありますが
>
> これって例えば CentOS上で動くことを想定してPOSIX準拠のソースコードをコンパイルリンクして生成した実行コードを  
>  windowsでそのまま動かすことができるってこと？
>
> CentOSとwindowsではABI,システムコール呼び出しから全く異るのに大丈夫なんですか？

windows7のposixサブシステムの話ではありませんが、後継ともいえるWSL(Windows Subsystem for
Linux)では「CentOS上で動くことを想定してPOSIX準拠のソースコードをコンパイルリンクして生成した実行コード」を動かすことができます。CPUアーキテクチャが同じことが前提です。  
※実際にやったことがありますが動きました。  
しかしこの実行モジュールはwindows上で動いているわけではありません。Linuxカーネル上で動いています。windowsのシステムコールではなくLinuxのシステムコールを使用します。


CC BY-SA 4.0
2020-12-11T23:37:19.417
72597
2020-12-11T23:37:19.417
35558
72596
answer


[POSIX標準](http://get.posixcertified.ieee.org/docs/base-2016.html)とは

> This supports applications portability at the source code level and includes
> the provision of a standard operating system interface and environment,
> including a command interpreter (or "shell"), and common utility programs.

とされていて

  * 1003.1™-2016 System Interfaces
  * 1003.1™-2016 Shell and Utilities

に分かれています。[POSIX and UNIX Support in
Windows](https://social.technet.microsoft.com/wiki/contents/articles/10224.posix-
and-unix-support-in-windows.aspx)でも

> POSIX.1 is a source-level standard: it does not provide any binary
> compatibility.

と書かれていたので、System Interfaceについてソースコードレベルでの互換が提供されるということでしょう。


CC BY-SA 4.0
2020-12-11T23:49:47.333
72598
2020-12-11T23:49:47.333
4236
72596
answer


**1：POSIX準拠OSとはなんですか？**

質問で参照している記事にあるように、いくつかの場合分けがあります。

>   * POSIX-certified
>   * Mostly POSIX-compliant
>   * POSIX for Microsoft Windows
>   * POSIX for OS/2
>   * POSIX for DOS
>   * Compliant via compatibility layer
>

`POSIX-certified`だけが認定機関による適合テストを受けて認証されているものです。  
それ以外は「自称」ですね。

ただし、商業製品なら市場の競争にさらされる(商談上のライバルからの突っ込みとか)のと、アメリカの政府機関のコンピュータシステム導入要件の規定に含まれているので、それなりの対応はされているでしょう。

この辺の記事を参考にされると良いでしょう。  
[What does it mean to have a POSIX-compliant operating
system?](https://superuser.com/q/322601)  
承認された回答には、こんな趣旨の内容が書かれています。

>
> POSIX準拠とは、UNIXプログラムをネイティブに実行できるか、少なくともUNIXからターゲットOSへのアプリケーションの移植が簡単/POSIXをサポートしていない場合よりも簡単であることを意味します。
>
>
> 準拠のレベルは必ずしも100％である必要はなく、変動する可能性があります（たとえば、すべての機能がサポートされているわけではなく、異なる方法で実装される場合もあります）。

そして詭弁に聞こえるかもしれませんが、「準拠」という言葉にも色々な意味付けが考えられます。  
[「準拠」の意味と使い方は？類語との違いも徹底解説！](https://biz.trans-suite.jp/14961)  
記事内に「完全準拠」という言葉があるように、「準拠」にも程度の差があります。  
そしてこちらの「適合」との対比にあるように、ゆるい基準では「大きく外れていない」程度でしょう。

> 「適合」は「ぴったり」というニュアンスが加わる
>
>
> 「適合」は、「うまく当てはまる」という意味の言葉であり、簡単にいうと「ぴったり合う」「ぴったり同じ」という意味があります。「準拠」は「大きく外れていない」というニュアンスで使用する点が異なります。

* * *

**2: POSIXアプリケーションとはなんのことを指すのでしょう？**

根拠となるような記事はありませんが、POSIXに規定されたAPIのみを使用していて、何かのOSに固有の機能やAPIには依存しないように作成されたアプリケーションのことでしょう。

* * *

**3: windows7 POSIXサブシステムについて**

貴方自身が疑問に思っているように、これは出来ません。

> POSIXってのはライブラリなどAPIレベルで互換性を保つための決まり事みたいですね。

> これって例えば  
>
> CentOS上で動くことを想定してPOSIX準拠のソースコードをコンパイルリンクして生成した実行コードをwindowsでそのまま動かすことができるってこと？

> CentOSとwindowsではABI,システムコール呼び出しから全く異るのに大丈夫なんですか？

こちらのWikipediaの記述が参考になるでしょう。  
[アプリケーションプログラミングインタフェース -
Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9)

> APIはアプリケーションバイナリインタフェース (ABI)
> とは異なる。APIはソースコードベースだが、ABIはバイナリインタフェースである。例えば、POSIXはAPIだが、Linux Standard Base
> (LSB) はABIである

[アプリケーションバイナリインタフェース -
Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9)

> ABIはアプリケーションプログラミングインタフェース (API)
> とは異なる。APIはソースコードとライブラリ間のインタフェースを定義したものであり、同じAPIをサポートしたシステム間では同じソースコードをコンパイルして利用できる。一方、ABIはオブジェクトコードレベルのインタフェースであり、互換ABIをサポートするシステム間では同じ実行ファイルを変更無しで動作させることができる。


CC BY-SA 4.0
2020-12-12T03:14:50.520
72606
2020-12-12T04:15:48.453
2020-12-12T04:15:48.453
3060
26370
72596
answer


POSIX 準拠の意味は POSIX 文書自体で定義されています。  
<https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap02.html>

>   1. POSIX準拠OSとはなんですか？
>

POSIX で定義されている OS のインターフェースを実装している OS のことです。以下の二つの基準があります。XSI とは UNIX
認証を受けるために必要な追加のオプション機能です。

  * POSIX Conformance
  * XSI Conformance

POSIX で定義されていない OS のインターフェースは「拡張機能」と定義されており、OS の実装者は POSIX と矛盾しない限り POSIX
非標準の拡張機能（OS 固有の APIやコマンド等）を自由に実装することが出来ます。というよりシステム管理機能などは POSIX
に含まれてないので、すべての OS は拡張機能を持っています。

>   2. POSIXアプリケーションとはなんのことを指すのでしょう？
>

POSIX（準拠）アプリケーションの定義も同 URL で定義されています。

  * 厳密な POSIX 準拠アプリケーション
  * POSIX 準拠アプリケーション
  * 拡張機能を使用する POSIX 準拠アプリケーション
  * 厳密な XSI 準拠アプリケーション
  * 拡張機能を使用する XSI 準拠アプリケーション

POSIX は完全な互換性を実現するものではなく OS
毎の動作の違いを許容しています。これは後方互換性を実現のために既存の動作を変更できないためです。POSIX 準拠アプリケーションとは、この各 OS
の動作の違いに対応したアプリケーションのことです。

「厳密な POSIX 準拠アプリケーション」は POSIX に規定されたインターフェースのみを使用するアプリケーションです。「拡張機能を使用する POSIX
準拠アプリケーション」は 拡張機能を利用する POSIX 準拠アプリケーションです。

OS 固有の拡張機能を使用していたとしても POSIX
準拠アプリケーションと言えるので注意してください。というよりシステム管理機能は拡張機能となるので、拡張機能の使用を禁止されたら POSIX
準拠のシステム管理ツールさえ作れなくなってしまいます。

>   3. Windows7 POSIXサブシステムについて
>

POSIX
はソースコードレベルの移植性についての標準規格なのでソースコードにをコンパイルして動くということを意味しています。バイナリが直接動くわけでは有りません。また当然ですが移植性があるのは
POSIX で規定された API の範囲のみです。GUI 等は POSIX に含まれないので CentOS で動くアプリケーションの全てが Windows
でコンパイルして動作するわけでは有りません。

手前味噌ですが「[POSIX準拠とは本当はどういうことなのか？「POSIXで規定されたものだけを使う」ではありません](https://qiita.com/ko1nksm/items/08228276ce9335592989)」に詳しくまとめました。


CC BY-SA 4.0
2022-03-16T14:57:59.253
86862
2022-03-16T14:57:59.253
47538
72596
answer