はじめに
POSIX準拠は米国政府のシステム導入要件になっていたのはよく知られていると思いますが、その要件が20年以上前、2000年に撤回になっていると明確に書いている所は案外少ないようです。POSIX 準拠であることは今でも意味がありますが昔ほど重要なものではありません。
POSIX はアプリケーションを Unix 以外を含むさまざまな OS へ、ソースコードレベルで移植可能にするための OS のインターフェースを定義した標準規格です。POSIX は IEEE によって最初のバージョンが策定され、現在(1998年以降)は POSIX.1 と Single UNIX Specification の開発のために設立されたワーキンググループ Austin Group (Austin Common Standards Revision Group) によって規格が改定されています。POSIX の開発はオープンなので誰でも規格策定に参加することができます。IEEE メンバーになる必要はありませんし参加費も会員費も必要ありません(POSIX Frequently Asked Questions)。
米国政府機関が POSIX を導入要件にしたのは、本当は UNIX を導入要件にしたかったがベンダー依存にはしたくなかったから POSIX しか選択肢がなかったというのは、さてどこで見た話だったか? 忘れましたが、POSIX 準拠は UNIX の認証を受けるときの前提条件となっています。つまりこの記事は POSIX 準拠と UNIX 認証の話です。
関連記事 1993年から Windows は POSIX 準拠だという話
POSIXが導入要件だったのはいつからいつまで?
1989年4月から2000年2月25日までです。
以下は「詳解UNIXプログラミング 第3版」からの引用です。
FIPS は Federal Information Processing Standard の略です。米国政府が公表し、コンピュータシステムの政府調達に使われます。FIPS 151-1 (1989年4月) は、IEEE 規格 1003.1-1988 と ANSI C 規格草案に基づいています。これに IEEE 規格 1003.1-1990 に基づいた FIPS 151-2 (1993年5月) が続きます。FIPS 151-2 では、POSIX.1 でオプションとした機能の一部を必須としています。これらのオプション機能は POSIX.1-2001 では必須機能となっています。
POSIX.1 FIPS の効果は、POSIX.1 準拠のコンピュータシステムを米国政府に販売したいベンダにたいして POSIX.1 の一部オプション機能のサポートを要求することでした。POSIX.1 FIPS は撤回されたので、本書ではこれ以上言及しません。
以下のリストに撤回された FIPS の番号が記載されています。リンク先のドメイン名の NIST とは米国立標準技術研究所のことで FIPS に合格するかののテストを行っている団体です。
Withdrawn FIPS Listed by Number Updated 12/15/16
FIPS NO | TITLE | DATE OF PUBLICATION | DATE WITHDRAWN | FEDERAL REGISTER CITATION VOLUME/PAGE |
---|---|---|---|---|
151-2 | Portable Operating System Interface (POSIX) System Application Program Interface [C Language] (ISO/IEC 9945-1:1990) | 93 May 12 | 00 Feb 25 | 65FR/10050 |
余談ですが Linux には Linux を標準化しようと試みた Linux Standard Base (LSB) というものがあり POSIX.1-2008 の多くのインターフェースが含まれていましたが、2015年6月に LSB 5.0 がリリースされて以降更新は停止しました。公式なアナウンスはないものの LSB の元メンテナは「このプロジェクトは実質的に放棄された」と 2023年2月にメーリングリストにポストしています。Linux ディストリビューションはすでに LSB に関心を持っていません。
WindowsとPOSIX/Unixの関係
Windows NTは 1993 年の最初のバージョンから POSIX 準拠 OS として開発されています。Windows NT はさまざまな API をサブシステムとして実装できるように設計されている拡張性の高い OS で、POSIX 準拠のためのサブシステムが POSIX サブシステムです。サブシステムとして実装したら POSIX 準拠とは言えない? いいえ、POSIX 準拠の条件に「OS ネイティブ(ってなに?)として実装しなければいけない(サブシステムで実装してはいけない)」という決まりはありません。POSIX 部分をカーネルで実装しなければいけないというという決まりはありません。そもそも POSIX にはライブラリ関数が含まれている上に、ライブラリ関数とシステムコールの区別はありません。
No distinction is made between library functions and system calls; both are referred to as functions.
Microsoft は Windows を米国政府に納入できるよう POSIX.1-1990 に準拠させました。POSIX が米国政府のコンピュータシステムの導入要件だった 1989年4月(151-2 は1993年5月)から2000年2月25日を Windows の発売日と照らし合わせると面白いことがわかります。Windows NT 系の開発が始まったのは 1988 年11月です。Windows NT の最初のバージョンである NT 3.1 は 1993年7月に発売されました。FISP 151-2 で要求している POSIX.1-1990 に含まれているものは C 言語インターフェースのみです。シェルやコマンドは POSIX.2-1992 で標準化されてたもので、FISP 151-2 の段階には含まれていません。これが Windows NT の初期の POSIX 準拠が POSIX.1-1990 の範囲(C 言語インターフェース)のみでシェルやコマンドが含まれていない理由です。POSIX のスレッド拡張は POSIX.1c-1995 で規格化されたものなのでこちらも含まれていません。
Year | Windows NT | FIPS: POSIX準拠要件 | POSIX | Mac OSX |
---|---|---|---|---|
1988 | 開発開始 | POSIX.1-1988 | ||
1989 | 151-1: POSIX.1-1988 | |||
1990 | : | POSIX.1-1990 | ||
1992 | : | POSIX.2-1992 | ||
1993 | NT 3.1(初版) | 151-2: POSIX.1.1990 | ||
1994 | NT 3.5 | : | ||
1995 | NT 3.51 | : | ||
1996 | NT 4.0 | : | ||
2000 | Windows 2000 | 151-2 撤回 | ||
2001 | Windows XP | POSIX.1-2001 | 10.0(初版) | |
2006 | Windows Vista | |||
2007 | 10.5(UNIX認定) | |||
2008 | POSIX.1-2008 | |||
2009 | Windows 7 | |||
2012 | Windows 8 | |||
2013 | ← POSIX 環境無し | |||
2015 | Windows 10 | |||
2016 | WSL: Linux対応 | |||
2021 | Windows 11 | |||
2024? | POSIX.1-202x | ← 予定 |
Windows は 1999年12月(ほぼ2000年なので上記では2000年としています)に発売された Windows 2000 まで POSIX サブシステムを搭載していました。2001年8月に発売した Windows XP では POSIX サブシステムを搭載するのをやめましたが、そのときにはもう米国政府の導入要件ではなくなっていました。POSIX が米国政府の導入要件ではないため POSIX サブシステムをやめたのかもしれません。だからといって Windows が POSIX システムとの互換性を諦めたわけではなく、Microsoft Windows Services for UNIX (SFU) という形で POSIX システムというより UNIX との互換性を実現していました。POSIX だけでは足りないからです。後に SFU は Subsystem for UNIX-based Applications (SUA) に変更になりました。Windows は名目上はほぼ Unix でしたが最低限の Unix 機能しか持たない Unix でした。
2012年8月の Windows 8.1 では SUA は削除されましたが、2016年7月の Windows 10 1607 で Windows Subsystem for Linux (WSL) として復活したのは知ってのとおりです。4年間の間 POSIX 準拠システムでなかったと言えるかもしれませんが、Windows にはサポート期間があります。例えば Windows 7 は 2020年まで、Vistaは 2024年までです。前のバージョンを使っていれば良いだけなので、Windows NT シリーズは最初の 1993 年以降、POSIX 準拠システムのサポート期間が途切れたことはありません。
UNIX 認証や POSIX 準拠というブランドは必要ありません。必要なのは誰かが認めるかどうかではなく実際に Unix と互換があるシステムかどうかです。Linux も BSD 系 Unix も UNIX 認証や POSIX 準拠というブランドはありません。Windows の POSIX システム環境への対応は UNIX ベースから Linux ベースへと変更になりました。POSIX だけでは UNIX には足りません。POSIX だけでは Linux には足りません。(Windows が SUA で実現していた)認定 UNIX よりも Linux の方がはるかに高機能です。1993 年の認定 UNIX だった Windows よりも 2001 年の BSD 系 Unix の Mac の方が好まれていましたが、2000 以降から現在に至るまで Unix よりも Linux の方が好まれるようになり、2016 年より Windows は Linux を取り込みました。Windows はほとんど完全な Linux です。仮想マシンで本物の Linux を動かしているのだから当然です。
macOSはUNIX認定だ! 訴訟対策のためにね!
macOS (当時は Mac OS X)が UNIX と認定されたのは 2007 年の Mac OS X 10.5 からです。一応 2001 年にリリースされた Mac OS X のときからほぼ UNIX でした。
以下の技術責任者の話を読む限り、別に UNIX 認証を取ることは目標ではなかったように思えますね。訴えられたりしなければ、macOS は BSD 系 Unix や Linux と同じようにほぼ Unix で十分だったはずです。macOS が未だに一つ前の UNIX 03 (POSIX.1-2001) の認証しか取っていないのは UNIX 認定に興味がないからなのかもしれません。Unix/Linux パッケージのインストールにサードパーティの Homebrew を使わなければいけないのは、おそらくそれらを公式にサポートするつもりがないからです。他の BSD 系 Unix や System V 系 Unix や Linux ディストリビューションとの大きな違いの一つです。Apple にとっては訴訟を回避できれば十分ということです。近々 POSIX が改定するので UNIX の認証も最新の UNIX V7 から UNIX V8 (?) に変更されるはずですが最新の UNIX 認証を取るのでしょうか? 取らないか取るにしてもおそらく何年も後だと思います。現に一つ前の UNIX の認証しか取っていませんし、macOS はその一部に FreeBSD 製のコマンドを使っており、FreeBSD が UNIX/POSIX 認定に興味があるとは思えません。macOS が独自に対応するとも思えません。でも別に macOS が最新の UNIX 認証を取っていようが、20 年も前の 2003 年頃の UNIX 認証を取っていようがどうでもいいことです。macOS の価値は基盤でしかない UNIX ではなく、UNIX に含まれない Apple 独自の拡張機能です。(ほぼ)Unix なんていくつもありますから。
I was the tech lead at Apple for making Mac OS X pass UNIX certification, and it was done to get Apple out of a $200M lawsuit filed by The Open Group, for use of the UNIX™ trademark in advertising.
The lawsuit was filed because the owner of Mac OS X Server kept putting “UNIX” on the web site, and all other marketing collateral for the Server product.
面倒なので DeepL 翻訳
私はアップルでMac OS XをUNIX認証に合格させるための技術責任者でしたが、これは、UNIX™の商標を広告に使用したとしてオープン・グループから提起された2億ドルの訴訟からアップルを逃れるために行われたものでした。
この訴訟が起こされたのは、Mac OS X Server の所有者が Web サイトに「UNIX」と、同 Server 製品のその他すべてのマーケティング資料を掲載し続けたためです。
続きはリンク先へどうぞ
あと、こちらもどうぞ「AppleとOpen Groupの「UNIX」係争、延長戦へ」
2001年から続いているAppleとOpen Groupの「UNIX」訴訟の陪審審理が、書類整備と調査のため、来年2月まで延期されることになった。
Apple ComputerとThe Open Groupの間で長く争われている訴訟が、来年まで継続されることになった。両社から交渉に必要な期間延長の要請を受けたためだ。
The Open Groupは2001年12月、X/Open Companyの名前でサンノゼにある北カリフォルニア連邦地裁に提訴を行った。提訴の内容は、Appleが自社のOS X製品に、同グループの登録商標である「UNIX」を関連付け、侵害したというもの(本日の記事参照)。
Appleは「UNIX」は一般的な言葉となり、登録商標としての意味は失われていると反論。同社によれば、一般にはX/Open Companyや他の企業がUNIXの言葉の源になっているとの認識はされていないという。
謎の UNIX / POSIX 信仰
UNIX 認定だとか POSIX 認定だとかいうのは最低限の OS のインターフェースさえ満たせば認められるので、準拠しているだけでは現実的に十分とは言えません。欲しいのは大きく拡張された Linux の機能であって最低限の UNIX や POSIX の機能は今や使えて当たり前のものでしかないのです。Microsoft もそれを知っているから、Windows 内蔵の最低限の機能しか持たない UNIX を Linux (WSL) に置き換えたわけです。Windows の Linux (Ubuntu) はさまざまな便利なパッケージを公式にサポートしています。WSL は Windows によって公式にサポートされているので、仮想マシン上の Linux を使うよりも Windows との親和性が高いです。WSL は Windows という OS の機能の一部です。
POSIX は 1990 年代初め頃には重要なものでしたが、今や米国政府も POSIX にこだわっていません。そもそも POSIX または UNIX に準拠している OS なんてこれだけしかありませんから。Solaris? UNIX 認証取るのやめましたよ。
- POSIX 1003.1-2003
- INTEGRITY 10.0 / PC / 5.0 / 11.0
- PSE52 Realtime Controller 1003.13-2003 System
- VxWorks 7
- ZTE Automotive OS V3.0
- Apple Inc.
- [UNIX 03] macOS version 13.0 Ventura on Apple silicon-based Mac computers
- [UNIX 03] macOS version 13.0 Ventura on Intel-based Mac computers
- IBM Corporation
- [UNIX 95] z/OS V2R1 or later
- [UNIX 95] z/OS 3.1 or later
- [UNIX 03] AIX 5L for POWER V5.3 dated 7-2006 or later
- [UNIX 03] AIX 6 Operating System V6.1.2 with SP1 or later
- [UNIX 03] AIX version 7, at either 7.1 TL5 (or later) or 7.2 TL2 (or later)
- [UNIX V7] AIX version 7, at 7.2 TL5 (or later)
- Hewlett Packard Enterprise
- [UNIX 03] HP-UX 11i V3 Release B.11.31
- The SCO Group, Inc.
- [UNIX 93] SCO OpenServer Release 5 and OpenServer Release 6
- [UNIX 95] UnixWare ® 7.1.3 and later
参考 過去に Unix の認定を受けていたが認定の更新をやめたもの
- Oracle Corporation(2020年1月まで)
- [UNIX 98] Solaris 9
- [UNIX 03] Solaris 10 Operating System
- [UNIX V7] Oracle Solaris 11.4 and later
- Huawei Technology Co., Ltd (2016年9月から2022年9月まで)
- [UNIX 03] Huawei EulerOS 2.0 (UNIX 認証を取った Linux として話題になった)
POSIX の改定バージョン(以下は大規模なもののみ)と、UNIXの認証(Single Unix Specification)のバージョンの対応は以下のとおりです。ちなみに内部的には Issue N という呼び名で区別されています。
POSIX | SUS | 補足 |
---|---|---|
POSIX.1-1988 | C 言語インターフェース | |
POSIX.1-1990 | POSIX.1-1988 の更新版 | |
POSIX.2-1992 | シェルとコマンド | |
POSIX.1-1996 | SUSv1 (UNIX 95) | Issue 4 POSIX.1-1990 の更新+追加機能 |
SUSv2 (UNIX 98) | Issue 5 | |
POSIX.1-2001 | SUSv3 (UNIX 03) | Issue 6 POSIX.1/POSIX.2 と SUS の統合版 |
POSIX.1-2008 | SUSv4 (UNIX V7) | Issue 7 |
POSIX.1-2024 ? | SUSv5 (UNIX V8) ? | Issue 8 未リリース、規格名は予想 |
Unixはベンダー毎に全部違うUnix
Unix という共通システムがあるわけではありません。ソースコードは共有されていません。
- Apple の Unix
- Solaris の Unix
- AIX の Unix
- HP-UX の Unix
- FreeBSD の Unix
- NetBSD の Unix
- OpenBSD の Unix
全部違う Unix です。例えばシステム管理やユーザー管理などシステムを管理するときに必ず使うような OS の一部と言えるようなコマンドは(全部ではありませんが)バラバラです。共通して使えるコマンドは少ない数しかありません。しかも共通しているコマンドの間でも使える機能や動作に違いがあります。全部違う Unix なのだから当然です。ある Unix システムを使えるからと言って、別の Unix システムを管理できるというわけではありません。
Unix が誕生したのは 1969 年、今から 50 年以上前ですが、その当時から Unix は全く違うものへと変わっています。当然です。POSIX で標準化されたのは 30 年以上前ですが、そこから基盤のインターフェースを除いてそれぞれ違う Unix へと変わっています。Windows NT 3.1 の開発と POSIX で標準化されたのはほぼ同じぐらいです。Windows も Unix も変わり続けながら独自に開発されている OS です。
それぞれの Unix は基盤のインターフェースに互換性があるだけです。基盤の中身(実装)は違います。歴史的な経緯からソースコードの一部が同じ場合がありますが、原則として Unix はそれぞれのOSベンダーが自由に独自に開発している OS です。UNIX の認定に必須なのはそれぞれの Unix の基盤のインターフェースのみです。そもそも UNIX の認定を得るための POSIX が OS の基盤のインターフェースだけを共通化したもので、そこさえ同じであれば Unix です。Unix はカーネルを含めて自分たちの都合で独自にまったく違うものに改良することができます。Windows のカーネルを Linux に変更することはありません。カーネルを自分たちの都合で独自に改良することができなくなるからです。Microsoft 製の Linux 互換カーネルを作ることはあります。というかそれが WSL1 です。Unix ベンダーは UNIX の認証を得るために POSIX 機能を追加しました。後方互換性を保つために POSIX に準拠していない過去の機能も持っています。Windows は POSIX サブシステムや WSL 経由で Windows の元の機能に加えて POSIX 機能を追加しました。Windows がやったことは Unix ベンダーが行ったことと大差ありません。商用 Unix や Windows は後方互換性を重視しています。
どれだけ魔改造しても、一から作り直しても、ソースコードが全く違っていても Unix として必要な共通部分を持っていれば Unix です。どれだけ拡張機能を搭載しても Unix を名乗ることができます。例えば GUI デスクトップ部分や標準アプリやシステム管理ツールなどはこれら便利なソフトウェアの大半は拡張機能です。拡張機能は UNIX の認定を取るためにどこでも同じにする必要がない部分です。最低限の部分さえ Unix であれば、どれだけ違っていても Unix と呼ばれています。最低限の共通部分は変える必要がなくそのまま残してしておけばいいんです。不満があれば拡張機能として追加すればいんです。だからいつまでも Unix と言われていますが、便利な拡張機能はそれぞれの Unix で追加され続けており、Unix は全部違います。
もし基盤部分が同じであれば良いというのなら、なぜ人は Linux、macOS、Windows を選ぶのでしょうか? 基盤部分にしか興味がないとしたら、どの OS でもいいはずですよね? Linux、macOS、Windows を選ぶのは拡張部分が重要だからです。基盤部分でできることは基本的なことだけです。拡張部分を使わないと実現できないことはできません。例えば macOS があるのに Linux を選ぶ理由は Linux の拡張機能が必要だからです。いくら Unix だとしても、やりたいことが出来なければ意味がありません。だからやりたいことが出来る Unix/Linux を選んでいるんです。
POSIX が規定するのは OS のインターフェースのみであり OS の作り方は自由なので Windows にも POSIX インターフェースを追加できます。POSIX システムをカーネルで実装しなければいけないという決まりはありません。POSIX システムを仮想マシンで実装したとしても問題ありません。これは決まりを作り忘れたのではなく、OS を自由に開発できるように不要な制限を取り除いているのです。制限を与えるような標準規格では、新しい OS を作ったりシステムを変えることができなくなってしまいます。
Unix / Linux で同じように動く部分は OS の基盤のみです。OS の基盤だけあったって便利な Unix にはなりません。OS の基盤はどこでも同じなのだから、その部分で差は付きません。OS の基盤が同じであることはメリットです。いろんなアプリケーションが移植しやすくなるからです。OS に依存しないアプリケーションはどの環境でも動きます。しかし逆に言えば、その部分には差が無いということです。OS を選ぶ時に重要なのは差がある部分です。各社独自の拡張機能が便利だから Linux や macOS を使いたいんです。
変化に対応できない多くの Unix/Linux が消えていった
Unix が誕生したのは 1969 年、最初のバージョンが 1971 年、現在から 50 年も前になりますが、その時から何度もバージョンアップを繰り返し Unix は大きく変化しました。当時と OS として必要な要件は違うわけで当然です。Windows と同じように名前が同じなだけで中身は大きく違います。時代に合わせて変化しなければ生き残れません。Unix の一番大きな変化は本家の Unix と BSD Unix との決別でしょう。これは Unix を開発した AT&T が Unix ビジネスを始めた 1980 年代後半から 1990 年代にかけて発生しました。ライセンス上の問題から本家の Unix と BSD Unix のソースコードは完全に違っています。
その頃、BSD Unix だけではなく多くの本家の Unix の亜種が誕生し、それぞれの Unix は互換性がないもの になっていました。その解決を目指すのが Unix の標準化であり、標準化の規格の一つが POSIX です。Unix の標準化によって多数の Unix 系 OS が「基本部分」は同じように動作するようになりました。しかし「拡張部分」は同じように動くわけではありません。というよりも同じように動く部分を「基本部分」として定義したというのが正しいです。この標準化は Unix ではない OS を Unix とみなすようになりました。その大きな例が Linux と Windows です。この二つの OS は元の Unix とも BSD Unix ともソースコードを共有しておらず、それでいながら Unix の条件を満たしました。1990 年の中頃に起きた Unix にとっての重大な出来事は AT&T が Unix の開発から手を引いたことです。Unix の標準化と本家の Unix 開発終了によって、Unix の基本部分は大きく変化しなくなってしまいました。
Windows の誕生は 1985 年、NT 系だけを見ても 1993 年と 30年以上の歴史があります。Linux が開発が始まったのは 1991 年ですがどうにか実用できるレベルという意味では 1995 年ぐらいでしょう。Windows や Linux は元はおもちゃと言われていたような OS なのになぜこんなにも長く使われているのでしょうか? その理由は変化し続けることができたからです。Windows と Linux 猛攻は激しく変化できない多くの Unix が消えていきました。今生き残っている Unix は Unix だらか生き残れたのではなく、時代の変化に耐えることができたものだけが、たまたま生き残っているのです。Linux とて全てが生き残っているわけではありません。さまざまなディストリビューションが生まれましたが、消えていったディストリビューションも多数あります。Unix も Linux も沢山消えていってるのです。今生き残っている Unix、Linux は時代に合わせて変化できたものだけです。変化しているのは Windows だけではなく Unix も Linux も変化し続けています。生き残っているのは Unix や Linux だからではありません。時代に合わせて新しい独自機能を追加し変化し続けた Unix や Linux だけが生き残っています。特色のない Unix や Linux はわざわざ使う意味がありませんよね? 他の Unix や Linux で十分と判断されれば乗り換えられてしまいます。今生き残っている Unix や Linux は、Unix や Linux だったからではなく、優れた機能(拡張機能)を作り続けてきたから生き残っているのです。OS は変わらずとも時代は勝手に変化します。その変化に対応せずにいつまでも古いやり方を続けていれば、遅かれ早かれ消えていくことでしょう。
さいごに
macOS は UNIX だ! そうだね、だからなに? macOS は UNIX だけど、Linux にも Solaris にも Windows にもなれないね。もちろんその逆も同じ。「UNIX である」はもはや付加価値ではなく「現代の OS としての最低限の機能を持っている」という意味でしか無い。どの OS も最低限の UNIX 相当の機能を備えてる。macOS は UNIX だけど UNIX 認定とは無関係な独自の拡張機能が沢山。その独自の拡張機能があるおかげで macOS はいくつもある Unix の中で優れた Unix だよ。でも Linux の拡張機能が使いたいときに macOS は UNIX だと主張したところでなんの役にも立たないね。Windows の WSL は Linux の拡張機能(の一部)が使えるから便利だよ。最低限の UNIX の機能には GUI デスクトップすら含まれない。今どき最低限の UNIX の機能だけで十分な時代じゃないからね。どの Unix / Linux の拡張機能を選ぶかだよ。やりたいことができないなら UNIX だと言われても何の意味もない。今は 1990 年代の最低機能の UNIX 機能ではなく UNIX を超えるベンダー独自の付加価値が求められている。そう、macOS の拡張機能か、Linux の拡張機能か、Windows かだ。POSIX 準拠や UNIX 認定を名乗るだけで認められる時代はとっくに終わってるよ。米国政府が「POSIX準拠がシステムの導入要件」を撤回したのはそういうこと。どの OS でもその気になれば(金を出せば)POSIX 準拠にできちゃう時代。いつまでも UNIX の時代で止まるのはやめましょう。