質問: POSIXとは何なのか・・・と調べると UNIXが広まり派生型がたくさん出現してきたもののまとまりがなくなってきたため互換性がやらを保つため規定されたもの といった感じの説明が出てきます。 いったいどういう状況だったのでしょうか? (以下の文 認識が間違っていたらごめんなさい) 例えば、 ``` #include void main(void){printf("lol");} ``` このプログラムをコンパイルリンクしてあるOS上で動作させるには、 このプログラムは標準Cの範囲なので標準Cに準拠しているそのOS用のライブラリがあればいいわけですよね? 逆にこのプログラムを他のOSに移植したい場合 移植先のOS用に標準Cで規定されたライブラリが必要、、、ですよね? 同じUNIXの派生型でも そのOS上で動くプログラムを作成するときに使うライブラリってのは各OS独自のものを使っていたため 例えば あるunix派生型専用に用意されたライブラリを使ったプログラムを 別のunix派生型osに持って行ってコンパイルしようとしても移植元unix専用のライブラリを使えない(移植先では用意されてない)わけだから ソースコードレベルで互換性がない ・・・だから 移植性を向上させるためPOSIXでAPIをルールの規定しようってなったのですか? あともうひとつ posixで定義されているAPIは標準Cで用意されていないのですか?
回答: 多分質問にある技術的な理由もさることながら、それよりも商業的な理由の方が大きいでしょう。 こちらのWikipedia記事で1980年代の欄の後半に出てきます。 1980年代 Unixの歴史 - Wikipedia 趣旨は、それまで独占禁止法違反の訴訟でコンピュータ分野への参入が禁止されていたAT&Tを、1983年にAT&T解体で決着させたことにより、AT&TはUNIXを用いたライセンスビジネスを開始し、UNIXをライセンス許可なしで使用することを禁止した。その後の経緯を経て、Unixは一時期閉じた世界のものとなり、Unix文化は絶滅寸前となった。というところでしょう。 そしてほぼ同時期に1970年代からの経費程度でのソースコード配布やBSD開発等によって様々に分かれたUnix系システムの標準化活動が活発化しUNIX戦争とまで言われるようになりますが、IEEE working group P1003によるPOSIXもその一つです。 UNIX戦争 - Wikipedia 標準化 UNIX - Wikipedia X/Open - Wikipedia 1. 標準化 - Think GNU 第 11 回 上記記事ではX/Openが一番早く始まったようですが、IEEE working group P1003もそれほど変わらずに立ち上がっていたようです。 IEEE working group P1003 1984 これらはおそらく標準化自身も重要な目的ではあるのですが、同時に標準化の名の下にAT&Tのライセンスビジネスの制約から(多少なりとも)自由になりたい、あわよくば主導権を握りたいというのが大きいと思われます。 一応企業のグループによるものでは無く、標準化団体であるIEEEのものが最終的に優位に立ったようですが。 1980年代 Unixの歴史 - Wikipedia > > Unix関連で最もうまくいった標準化はIEEEのPOSIXであり、BSDとSystem VのAPIを折衷したものである。 > > > **posixで定義されているAPIは標準Cで用意されていないのですか?** については、今までにPOSIX・C言語共に何度も改訂されてきたので、どの版とどの版のことを言っているのかが重要になるでしょう。 現在の最新版なら用意されているのでは? 標準Cの初版で言えば、POSIX初版の1988年ではC言語はまだ標準化作業中でした。 ANSIによるC言語標準化の開始はAT&T解体直前の1983年ですが、制定はPOSIX初版の1年後の1989年です。 後から出したのなら反映出来るのでは?と言う話もありますが、それぞれ独立した分野の仕様を長い間検討しているので、そうそう簡単に対応することは難しいでしょう。 こんな議論のスレッドがあって、C89では一部のPOSIX APIは未サポート(あるいは言語側で代替しているのか)らしいですね。 ANSI C89 and POSIX portability? - Slashdot C言語自身も互換性の無い実装が林立していた訳で、それらの差異を解消する検討は大変だったのでは? K&R - C言語 - Wikipedia > > リッチーとカーニハンの共著である「The C Programming Language」9を出版。その後標準ができるまで実質的なC言語の標準として参照。C言語は発展可能な言語で、この本の記述も発展の可能性のある部分は厳密な記述をしておらず、曖昧な部分が存在していた。C言語が普及するとともに、互換性のない処理系が数多く誕生した。これはプログラミング言語でしばしば起こる現象であり、C言語固有の現象ではない。 > > > 標準C(Standard C) - C言語の歴史(History of C) > > * 1983: ANSIにX3J11委員会が設立される。 > * 1988: プログラミング言語C 第2版 > * 1989: C89、ANSI C標準が刊行される。 > > >