POSIXというものについて質問です。


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,システムコール呼び出しから全く異るのに大丈夫なんですか？




**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をサポートするシステム間では同じ実行ファイルを変更無しで動作させることができる。




**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をサポートするシステム間では同じ実行ファイルを変更無しで動作させることができる。

