SUSとPOSIX【西田の戯言。】

今回はOSの話。SUSとPOSIXの話をしていきます。今回のエントリは、この先の話の前段みたいなものなので、そんなに面白くないかも。

UNIX

この世のOSは二種類に分けられます。「UNIX」と「UNIX以外」です。実は、この2つの差というのは結構重要で、OS戦争(乱立?)も落ち着いた21世紀においてもある程度の線引があります。

まず、そもそもUNIXとは何者なのかということについてお話しておきます。

UNIXは、1969年に当時ベル研究所に所属していたケン・トンプソン氏によって開発されたOSのことを指します。1969年にリリースされたVersion 7 Unix以降、オリジナルのUNIXの系統はもはやフェードアウトし、カルフォルニア大学バークレイ校で開発されたBSDと、AT&Tを中心に開発がすすんだSystem-Vに分裂しました。この両者はそれぞれのUNIX標準を巡って対立することになりますが(UNIX戦争)、その話はおいておきます。

UNIX戦争はコンピュータ黎明期にUNIX市場に対して深刻な影響を与えたものの、成果として「Single UNIX Specification」(SUS)を策定することができました(成果というか、和解案というか)。

現代のUNIXは、もはや「OSの仕様」でしかなく、「UNIX」という商標を所有しているThe Open GroupがSUSを満たすと認定したOSに対して「UNIX」の商標の使用を認めるという状態になっています。

ちなみに、UNIX認定されているOSの主な例として、Appleの「macOS」、HPの「HP-UX」、IBMの「z/OS」「AIX」があります。開発は終了しましたが富士通とOracleがそれぞれ「Solaris」において認定を受けていました。

SUSとPOSIX

では、SUSについて。

SUSは前述の通り「Single UNIX Specification」であり、日本語訳では「単一のUNIX仕様」となります。いかにもUNIXが乱立してしまったUNIX戦争から「単一の」仕様を定義できたことを名前からアピールしていますね。

最終的にUNIXが果たした成果というのはインターフェイスの標準化であり、「一度コードを書けば、どこでも採用できる」をある程度実現しています。

では、SUSではどのようなことが定められているのかというと、C言語及びシェルから扱う事ができる関数・ヘッダーファイルやコマンドの仕様を定めています。

例えば、ファイル操作に使う、open関数、read関数、write関数、close関数はすべてSUSで規格化されており、SUSに準拠しているOS間で、変更を加えることなく移植する事ができます。

SUSは、SUS準拠のコードを記述することで、SUS準拠のOSでは変更を加えることなく動作させることができるでしょう。

SUSは、The Open Groupが中心となったワーキンググループ「Austin Group」が中心になって策定しています。

他方で、POSIXという規格も存在しています。こちらは、IEEEが策定したインターフェイス標準です。POSIXとSUSは殆どの部分で共通化が図られています。しかし、POSIXでオプションである仕様がSUSで必須であったりするなど、SUSのほうが厳格です。というか、SUSはPOSIXを包括しています。

基本的に、POSIXに準拠していればUNIX的な使い方は大体できます。SUSはより厳格にUNIXとして振る舞うかが重要なのです。

POSIXもOSの標準なので、POSIX準拠のコードは、POSIX準拠のOSで変更を加えることなく動作します。

余談

Unix系OS

The Open Groupに認定されていないものの、SUSやPOSIXに完全にあるいは一部準拠したOSを「Unix系」OSといいます。

Unix系OSの代表格はLinuxです。LinuxをベースとしているUbuntu、Fedora、AndroidもUnix系OSとなります。LinuxはSUSとPOSIXをベースに拡張したLinux Standard Base(LSB)を策定しており、Linux系OS向けに標準化を行われています。

なお、Red Hat Enterprise LinuxをベースとしてHuaweiが開発しているLinuxディストリビューション「EulerOS」がUNIXの認定を受けています。

ここらへん、いい感じにPOSIXに統合されてもいいんじゃないかなぁとか思うんですが。

ちなみに、macOSのベースとなっているDarwinはUNIX認定を受けていないのでUnix系、同様の理由でiOS、iPadOS、watchOS、tvOS、visionOSもUnix系OSとなります。

Windows

Windowsは、UNIXではなくWindows NTという独自カーネルに基づいて設計されています。

歴史の中で、UNIXライクなインターフェイスは用意されているものの、仕様は独自であり、SUSあるいはPOSIXに準拠したソースコードをそのままWindows向けに使用できるかと言われればそれはできません。

そのため、WindowsでPOSIX準拠のソースコードを使用する場合は、仮想マシンを利用するか互換レイヤーを使用する必要があります。

WindowsにはWindows 10以降、Windows Subsystem for Linux(WSL)というサブシステムが用意されており、これが互換レイヤーあるいは仮想マシンの役割を果たします。

それ以外にも、CygwinというPOSIX互換レイヤーが用意されており、これを通じてPOSIX系アプリケーションを利用します。


この記事を書いた人

西田(総合情報学部 情報学科 2021年入学)

通信研究会OB。当ホームページの保守運用を支援しています。組み込み系のソフトウェアエンジニア。応用情報技術者・修習技術者。