Sun の目標の 1 つに、Solaris オペレーティング環境のアーキテクチャインタフェースを明確にするということがあります。これには次の 2 つの理由があります。
システムインタフェースは、顧客との有効な「約定」です。Solaris 8 Reference Manual Collection に、それらがすべて記されています。
製品の特定のバージョンで提供するインタフェースは、将来のバージョンでも維持されます。したがって、Solaris の今後のリリースでも上方互換性が保たれます。
Solaris は、プログラミングインタフェース、ユーザインタフェースの各要素、プロトコル、ファイルシステム内のオブジェクトの命名規則や位置など、さまざまな「インタフェース」を提供しています。システムにとって最も重要なインタフェースの 1 つが、開発者に提供するプログラミングインタフェースです。プログラミングインタフェースは、次の 2 つの部分に分かれています。1 つは、アプリケーション開発者に関係する部分で、API (アプリケーションプログラミングインタフェース) です。もう 1 つは、デバイスドライバやプラットフォームサポートモジュールのようにシステムコンポーネントの開発者に関係するもので、SPI (システムプログラミングインタフェース) です。
開発者は Solaris の各プログラミングインタフェースを、ソースレベルとバイナリレベルという 2 つのレベルで「見る」ことができます。API や SPI という頭字語を使用する場合は、システムのソースレベルのプログラミングインタフェースを示します。アプリケーションバイナリインタフェース (ABI)、システムバイナリインタフェース (SBI) という用語は、それぞれのソースレベルのプログラミングインタフェースに対応するバイナリインタフェースを示します (「ABI」という用語は他のバイナリインタフェースと混同しがちなので、「Solaris ABI」という用語のみを使用します)。
このマニュアルで説明する SunOS 5.0 から 5.8 の関数は、カーネルとアプリケーションプログラムから提供されるサービス間のインタフェースです。Solaris 8 Reference Manual Collection の 『man pages section 2: System Calls』 および 『man pages section 3』 に掲載されている関数は、SunOS 5.0 から 5.8 のオペレーティングシステムとのアプリケーションのインタフェースです。これらの関数により、アプリケーションでファイルシステム、プロセス間通信のプリミティブ、マルチタスク機構などの機能を使用できます。このマニュアルは、API の重要部分を説明するマニュアルセットの中の 1 つです。その他に、このセットには『STREAMS Programming Guide』、『マルチスレッドのプログラミング』、『Transport Interfaces Programming Guide』などのマニュアルが含まれています。
Solaris 8 Reference Manual Collection の 『man pages section 2: System Calls』と 『man pages section 3』 に掲載されているライブラリルーチンを使用すると、プログラム作成時はその実装の詳細を意識する必要がなくなります。たとえば、標準 C ライブラリ内の fread 関数は read をベースに実装されています。
C プログラムは、プログラムのコンパイル時に呼び出す関数に自動的にリンクされます。この手順は、他の言語で作成されたプログラムで異なることがあります。詳細は、『リンカーとライブラリ』を参照してください。
Solaris は、静的バージョンと動的バージョンのライブラリを提供しています。静的ライブラリはインタフェースを提供せず、関数の実装だけを提供します。開発者は、共用ライブラリ (共用オブジェクトともいいます) を通じて、Solaris のアプリケーションプログラミングインタフェースを利用できます。実行環境では、動的にリンクされた実行可能オブジェクトと共用オブジェクトが実行時リンカによって処理され、実行可能プロセスが生成されます。システムとの公開 API は、アプリケーションと動的共用ライブラリ間のインタフェースです。
ライブラリ (.a ファイルまたはアーカイブ) の従来の静的実装では、アプリケーションプログラミングインタフェースはその実装 (ライブラリの内容) に依存しています。アプリケーションを静的ライブラリにリンクすると、そのライブラリを実装するオブジェクトコードは構築された実行可能オブジェクトに組み込まれます。ライブラリとのソースレベルのプログラミングインタフェースを保持することもできますが、将来リリースされるオペレーティングシステムの新バージョンで動作する実行可能オブジェクトを生成するには、アプリケーションをリンクし直さなければなりません。将来のバイナリ互換性は、共用ライブラリを使用する場合にのみ保証されます。
静的ライブラリは歴史的な経緯があって残されているため、その実装から独立した形でインタフェースを定義するメカニズムはありません。このため、新しいアプリケーションでは静的ライブラリを使用しないようにしてください。
静的ライブラリと違って、共用ライブラリではアプリケーションプログラミングインタフェースが実装に依存しません。インタフェースは、実行時にのみライブラリの実装にバインドされます。このため、SMI は API を管理し、それに対して構築されたアプリケーションとのバイナリ互換性を保ちつつ、内部インタフェースの変更など、ライブラリの実装を進めることができます。
インタフェースは、そのインタフェースの使用者や使用方法によって次のように分類されて定義されます。
公開仕様 |
顧客が自由に使用できるインタフェース仕様 (インタフェースのこの実装を使用する構築製品)。顧客以外は、ライセンスの取得や法的規制なく、自由に代替の実装を提供することができる。 |
非公開仕様 |
非公開のインタフェース仕様。 |
互換性のある変更 |
インタフェースやその実装に対して、それまでの有効なプログラムに影響を与えない変更。 |
互換性のない変更 |
インタフェースやその実装に対して、それまでの有効なプログラムが無効になる変更。これには、バグの修正や性能の低下が含まれる。定義されていない「実装の成果」に依存するプログラムは含まない。 |
仕様 |
公開 |
互換性のない変更 |
メジャーリリース (X.0) |
例 |
POSIX、ANSI-C、Solaris ABI、SCD、SVID、XPG、X11、DKI、VMEbus、Ethernet |
標準インタフェースとは、Sun 以外のグループによって仕様が管理されているインタフェースのことです。これには、POSIX、ANSI C などの規格や、X/Open、MIT X コンソーシアム、OMG などのグループによる業界仕様が含まれます。
仕様 |
公開 |
互換性のない変更 |
メジャーリリース (X.0) |
例 |
Sun DDI、XViewTM、ToolTalkTM、NFSTM プロトコル、Sbus、OBP |
上記のインタフェースの仕様は、Sun Microsystems が全面的に管理しています。これらのインタフェースの仕様は、公表した仕様と互換性を保ちます。
仕様 |
なし |
互換性のない変更 |
マイナーリリース (.X.0) |
例 |
RFS |
一般にもう使用されなくなったインタフェースです。顧客との約定により変更を反映する標準プログラムによって、既存のインタフェースが他の状態 (公開クラスや標準クラスなど) から「古く」なることがあります。
インタフェースが「古くなる」旨の通知は、約定により、顧客ベースおよび Sun の製品開発機関に、1 年前には通知する必要があります。現状のインタフェースと互換性のない変更を含む製品を配布するまでに、1 年の期間がなければなりません。
適正な顧客への通知方法には、サポート契約に関しての顧客へのレター、「ご使用にあたって」、製品のマニュアル、該当するインタフェースに対応する顧客のフォーラムへの通知、などがあります。
「古くなった」ことの通知は「公」の情報と見なされ、顧客は自由に入手することができます。プレス発表やその他の類似した媒体によって情報を発表するといった、特定の処置が必要なものではありません。