概要
UnixやLinuxの違いについて話がされていることがあります。さらに、その過程でPOSIXのお話などがでてきます。
ここでは、これらUnixやLinux、POSIXについてのお話を整理してみました。
UnixとLinux
最初に、UnixとLinuxの言葉の整理を行います。
UnixとLinuxともに、狭義の意味でのOSを指している言葉のため、混乱をしてしまいますが、基本的なところは単純です。
Unixは、Unixが満たすべき仕様を満たし、さらにUnixの認証をうけたものが名乗れるOSです。
Linuxは、当時は高価なUnixを使わなくてすむように、Unixの仕様を参考にしつつ作られたOSです。あくまでもUnixを参考にしただけで、独立したOSとなっていますが、Unixと似た部分もあるため、UnixライクなOSと呼ばれています。
同梱されているソフトウェアによって、名前は異なることが普通です。これは、LinuxはあくまでもOSの中核を担うカーネルでしかなく、普段私たちが使うようなソフトウェアは付属していないため、それらのソフトウェアを付属して配布しているものがディストリビューション(日本語で配布)などと呼ばれます。Linuxと一言で言ってもDebianやUbuntu、CentOSなどがありますが、全てLinuxカーネルを採用しているのと言うのが分かりやすいです。
UnixとしてFreeBSDやmacOSがありますが、これらはちゃんとUnixの仕様を満たし、Unixの認証をうけて、UnixのOSであると名乗っています。Linuxについては、認証などは存在せず、Linuxカーネルを利用したOS全般を広義の意味でLinuxと呼ぶため、DebianやUbuntu、CentOSやArch Linuxなど様々なLinuxカーネルを採用したOSが存在しています。
POSIXについて
よくUnixやLinuxのお話をすると、POSIXのお話が出てきます。これは、元々Unixの仕様に関するもので、あまりUnixの仕様が確立されていない頃に、それぞれのUnixOSが満たすべき仕様を策定したものです。つまりUnixはPOSIXに準拠していると言うことになります。
ちなみに、UnixにはPOSIX以外にも仕様が定められており、Single UNIX Specificationなども有名なようです。
LinuxはなるべくPOSIXに準拠するように作られています。あくまでも、なるべく準拠するように作られていると言うことなので、完全に準拠しているわけではありません。Linuxの方でも、Linuxディストリビューションが満たすべき仕様を策定しており、こちらはLinux Standard Baseという名前になっています。
POSIX準拠であれば何が嬉しいのかというと、実行ファイルの互換性が高まるということです。POSIXに準拠したOS間であれば、そのままバイナリを動かせたり、動かなかった場合にソースコードの変更したとしても少しだけですんだりと言うことがほとんどのようです。
私は詳しくありませんが、UnixやLinuxではそれほどソースコードの変更なく、バイナリを生成して、実行することが可能ですが、POSIXに準拠していないWindowsでは、ソースコードを大きく変更することが多いようです。
POSIXの複雑さ
POSIXとして定められているものは、かなり多岐にわたるようです。また、POSIXに準拠しているからといっても、環境依存など、そんなに単純な話ではないようです。こちらの記事が詳しいので、リンクを紹介します。
なぜシェルスクリプトはPOSIX準拠でも環境依存が激しいのか? 〜POSIXの問題点とその解決策の案〜 - Qiita
さいごに
今回様々調べてみて思ったのですが、LinuxはUnixライクなOSと言われるだけあって、似ている部分がそれなりにあります。
注意点としては、歴史が入り組んでいるので、もしかすると間違いがあるかもしれませんが、基本的にUnixとLinuxの違いは何であるのかと聞かれた場合は、「UnixはUnixが満たすべき仕様を満たしてさらにUnixと名乗ることができる認定を受けている」、「LinuxはUnixと仕様は似ているが、Unixを目指しているわけではないので全くの別物」と答えておけば良さそうです。