Comments
Description
Transcript
HP-UX 11.x
HP-UX 11.x におけるアプリケーションのバイナリ互換性 に関するお知らせ white paper 目次 概要.................................................................................................................................................................. 2 定義.................................................................................................................................................................. 2 例外.................................................................................................................................................................. 3 Itanium ベースのシステムへの移行 .................................................................................................................... 4 詳細情報........................................................................................................................................................... 4 注記.................................................................................................................................................................. 4 付録: 技術的な詳細 .......................................................................................................................................... 5 コーディング・プラクティス ................................................................................................................................ 5 共有ライブラリとアーカイブ・ライブラリの混合リンク ........................................................................................... 6 概要 この報告書(ホワイトペーパ)は、HP-UX ソフトウェアの互換性に関する Hewlett-Packard の方針を、現在サポートされて いる HP-UX バージョンと将来の HP-UX バージョンに関連して説明するものです。この資料は、HP が HP-UX の顧客に 対して提供しているフォワード(forward)バイナリ互換性について詳述します。HP は、これが業界最高レベルの互換性 を提供しているものと確信しています。HP は、今後も引き続いて改善・強化できる領域があるかどうかを検討し、顧客 と ISV のニーズへの対応をいっそう高めていく計画です。 HP は、「行儀の良い(well-behaved)」(正規の仕様に従って作成されている) 32 ビット・アプリケーション、すなわち、ド キュメントに記述されている明確に定義されたプログラミング・プラクティスを使用して構築された 32 ビットの実行可能ア プリケーションが、HP-UX 11.x オペレーティング・システムの異なるリリースにまたがり問題なく動作することをサポート 致します。(明確に定義されたプログラミング・プラクティスについては、「付録:技術的な詳細」の項を参照してください)。 HP は、次の要件に従っている「行儀の良い(well-behaved)」アプリケーションについて、互換性を提供する予定です。 ・ ドキュメントに記述されている API のみを使用していること ・ 特にドキュメントに明記された必須のプラクティスに準拠していること (たとえば、パス名を「ハードコード」するようなプラクティスを避けること) ・ ドキュメントに記載された機能のうち、プラットフォーム、アーキテクチャ、あるいは構成の制限があることが明記され ている機能を使用しないこと ・ HP-UX 製品を分解しないこと、また、それを利用しないこと HP は、HP の最初の 64 ビット HP-UX オペレーティング・システムの実装である HP-UX 11.0 上で、32 ビットの PA-RISC ベース実行プログラムの前方バイナリ互換性を提供いたします。(HP-UX 11i 以降でも提供) HP-UX 11.0 上で正常に動作するアプリケーションは、将来バージョンの HP-UX 11i 上でも引き続き動作します(ここで いう HP-UX 11i には、HP/Intel の共同開発による Itanium アーキテクチャベースの HP Integrity サーバ対応の HP-UX 11i を含みます)。Itanium 対応の HP-UX 11i 上で、アプリケーション性能を追求するには、ディベロッパは、自社の 32 ビット PA-RISC アプリケーションを Itanium 上で再コンパイルすることが勧められます。それにより、この新しいアーキテ クチャによって実現されるパフォーマンス向上に関して最大限のメリットを引き出すことができます。 定義 「互換性」という用語の意味は、以下にその定義を示すような、複数の領域から成り立っています。HP-UX は、次のよう なタイプの互換性を 11.0 でサポートしており、11i でも同様の互換性を提供する計画です。 ・ バイナリ互換性- 10.x リリース上で正常に動作する 32 ビット PA-RISC 実行プログラムは、32 ビット版および 64 ビッ ト版両方の 11.0 もしくは 11i 上で引き続き同じ動作を示します。HP-UX 11.0 上で作成された 64 ビット実行プログ ラムは、HP-UX 11i リリース上でも引き続き実行できます。実行プログラムとは、HP-UX リンカーから出力として作成 されたバイナリ・ファイルのことです。 ・ ソース互換性- 10.x リリース上でコンパイルされた 32 ビット PA-RISC 実行プログラムは、11.0 と 11i リリース上で、 変更なしで再コンパイルできます。11.0 でコンパイルされた 64 ビット実行プログラムは、11i リリース上で、変更な しで再コンパイルできます。「ソース」という用語には、コンパイラ/アセンブラ/インタープリタ、スクリプト、およびメーク ファイルへの入力ソース・コードが含まれます。 ・ データ互換性- 32 ビット PA-RISC 実行可能プログラムは、基盤となっているハードウェア・アーキテクチャとは無関係 に、従来のリリース上と同じ方法で、持続的なデータ・ファイル(システム・ファイル、バックアップおよびリカバリ・フォー マット、HP のドキュメントに記載されたデータ・フォーマット) に、HP-UX API を通じて、引き続きアクセスすることがで きます。64 ビット PA-RISC 実行可能プログラムは、32 ビット PA-RISC 実行可能プログラムの場合と同じデータに、 同様の方法で、アクセスすることができます。 2 ・ アップグレード互換性- HP-UX 10.x 環境上で作成されたカスタマイズ済みの構成とデータは、32/64 ビット 11.0 もし くは 11i へのアップグレード時に、そのまま保全されます。 ・ 再配置可能( リロケータブル) オブジェクトの互換性- (従来は、ミックス・アンド・マッチ・バイナリ・モビリティと呼ばれ ていました)。バージョン 11.0 より前の異なるバージョンの HP-UX 上でコンパイルされた、前方互換性がある再配置 可能オブジェクト(.o オブジェクト・ファイル、共有ライブラリ、アーカイブ・ライブラリ) とリンクして実行プログラムを作 成する事は出来ません。ただし、11.0 上で構築された実行プログラムについては、異なるバージョンの HP-UX 11i ベースの再配置可能オブジェクト・ファイルとのリンクがサポートされる予定です。 (A)「共有ライブラリだけ」または「アーカイブ・ライブラリだけ」を使用し、しかも、(B) サポートされている HP-UX API だけ を使用する、という 2 つの条件を両方とも満たす 32 ビット PA-RISC 実行プログラムはすべて、HP-UX 10.x から 11.00 への前方バイナリ互換性を維持します(詳細については、「付録: 技術的な詳細」の項を参照してください)。任意の単一 のプロセス空間で動作するこれらの実行プログラムは、別のプロセス空間で動作する他の任意の実行プログラムと、標 準メカニズム(IPC、RPC、ソケットなど) を通じて通信し合いながら共存することができます。 次の表は、異なるバージョンの HP-UX にまたがってサポートされる互換性のタイプを要約したものです。 互換性タイプ 9.x から 10.x 10.x から 11.0 11.00 から 11i バイナリ 有 有 有 ソース 有 有 有 データ 有 有 有 アップグレード 有、ただし移行スクリプトとリンクが必要 有 有 再配置可能バイナリ 無 無 有 例外 API (アプリケーション・プログラミング・インタフェース) の構文と動作に対する変更は、可能な限り、避けられています。 しかし、新しい標準に準拠するため、新しい機能を追加するため、あるいは、パフォーマンスを向上させるために、変更 が必要になる場合もあります。ほとんどの場合、このような変更は、互換性が維持されるような方法で実装されていま す。ただし、極端なケースでは、「標準」に準拠するために、互換性を犠牲するような変更が強制されることがあります。 標準に従って実施された変更の一例は、HP-UX 9.x と 10.x の間で、新しい System V ファイル・システム・レイアウトに移 行したことです。この場合、「プログラムの変更が不要」な高速移行リンク(transition links)の使用を通じて、顧客は、 HP-UX 10.x バージョンへのアップグレードを単純かつ容易に実行できました。これにより、顧客と ISV は、HP-UX 10.x へのアップグレード・スケジュールとは独立に、アプリケーションのソース・コードへの変更を独自のスケジュールで実施 することが可能になりました。また、アップグレード・ツールキットに含まれるその他の HP 提供のユーティリティによって、 適切なコード変更を可能な限り効率的に実施することが容易になりました。導入当初からの予定通り、高速移行リンク は、HP-UX 11.0 上ではサポートされていません。このリリース、または将来の HP-UX 11i リリースへの移行を希望する 顧客は、HP-UX 11i リリースへのアップグレードに先立って、アプリケーション内でファイル・システムに依存するすべて の箇所の変更を完了しておかなければなりません。 HP は、共有ライブラリとアーカイブ・ライブラリの混合や、サポートされていない HP-UX API の使用を試みている、アー カイブライブラリのみでリンクされた実行プログラムについては、前方バイナリ互換性の提供を行っていません。この原 則の唯一の例外は、標準への準拠、あるいは、たとえば、2000 年問題への対応を実現するために、HP-UX 内のサ ポートされている API セットに対して、HP がやむを得ず変更を行う場合です。こうした場合、HP は、あらゆる努力を傾 注して、既存の顧客に回避策を提供します。そうした回避策としては、既存アプリケーションのコード修正を要求しない (つまり、「プログラムの変更が不要」) 運用上のソリューションも含まれます。このような回避策は、通常、一時的なもの であり、変更を行うための適切な期間を、オペレーティング・システムのアップグレード・スケジュールとは独立に、ディベ ロッパに提供することを目的としています。さらに、HP のドキュメンテーションで、そのような変更によって影響を受ける 領域が明示されます。 3 再配置可能(relocatable)オブジェクトの互換性は、HP-UX 11.0 より前のバージョンではサポートされていませんが、 HP-UX 11.0 と HP-UX 11i ではサポートされます。これは、ディベロッパが、異なるバージョンの HP-UX 上(たとえば、 10.10 と 10.20) でコンパイルされた 2 つの異なるオブジェクト・ファイルをリンクして、単一のプロセス空間で動作する 単一の実行可能プログラムを作成しようとする場合です。再配置可能オブジェクトの互換性は、過去の一連の HP-UX 10.x リリースでは、サポートされませんでした。 Itanium ベースのシステムへの移行 前述したように、HP-UX 11.0 上で正常に動作するアプリケーションは、HP/Intel の共同開発による Itanium アーキテク チャを HP Integrity サーバ上でサポートする HP-UX 11i バージョン上でも同様に動作します。HP は、64 ビット PA-RISC ベースの再配置可能オブジェクトの Itanium アーキテクチャ上への前方互換性について、サポートする方向で開発作業 を進めております。しかし、ソース・コードの互換性は、Itanium に移行する 64 ビット PA-RISC アプリケーションに対して 保たれています。 詳細情報 HP-UX ソフトウェアの互換性のさまざまな側面について、さらに詳細な情報が、以下の「付録: 技術的な詳細」の項と以 下の URL に記載があります。 HP-UX11.x ソフトウェア移行キット(Software Transition Kit ; STK) http://devrsrc1.external.hp.com/STK/index.html (英語ページ) http://devrsrc1.external.hp.com/STK_ja_JP.SJIS/ (日本語ページ) http://www.hp.com/jp/hpux の開発者向け情報からも STK サイトへリンクされています 注記 本ドキュメントは、技術ホワイトペーパとして提供するものです。契約上の保証内容などについて記載するものではあり ません。 4 付録: 技術的な詳細 以下のコーディング・プラクティスは、アプリケーションの互換性に影響を及ぼす可能性があります。この情報の目的は、 リリース間の互換性を達成できるアプリケーションの開発を促進することです。 HP-UX は、「行儀の良い(well-behaved)」アプリケーションに対して、互換性を提供します。どの「行儀の良い」アプリケー ションも以下のように作られていますが、これはすべてを網羅的するリストではありません。この条件を満たさないアプリ ケーションは、移植性が失われ、将来の互換性が損われる可能性があります。 コーディング・プラクティス ドキュメントに記載されていない機能の使用: ・ アプリケーションは、ドキュメントに記載されていないインタフェースを使用してはなりません。 ・ アプリケーションは、ドキュメントに記載されていない動作に依存してはなりません。 ・ アプリケーションは、/dev/kmem を利用してはなりません。なぜなら、これはドキュメントに記載されていない内部イ ンタフェースであり、その内部処理はリリースによって変わる可能性があるからです。 プラットフォーム固有機能: ・ アプリケーションの設計/コーディングを、プラットフォームのアーキテクチャやシステム構成に関する内部的な知識に 基づいて行ってはなりません。 ・ アプリケーションは、HP-UX システム・ファイルに直接読み書きせず、サポートされている API を介してこの情報にア クセスしなければなりません。たとえば、アプリケーションは、パスワード・ファイルのエントリを読み書きするのに、 getpwent()/setpwent()を使用するべきです。 ・ アプリケーションは、ヘッダ・ファイルや構成情報 API (例: confstr、getconf、[f]pathconf、sysconf など) を介して取り出 せる情報をハードコードしてはなりません。 ヘッダ・ファイル: ・ アプリケーションは、マニュアル(man)・ページでの指示に従って、適切なヘッダ・ファイルをすべてインクルードしなけ ればなりません。 ・ アプリケーションは、ドキュメントに記載されていないヘッダ・ファイルをインクルードしたり、ドキュメントに記載されて いないヘッダ・ファイルの一部を使用してはなりません。 ・ アプリケーションは、システム・ヘッダ・ファイルの内容をソース・コードにコピーしてはなりません。 コンパイル/リンク: ・ リリース"n" 上でコンパイル/リンクされたアプリケーションを、それ以前のリリース"n-m" 上で実行してはなりません。 アプリケーションを、アーカイブ版の HP-UX システム・ライブラリに依存する箇所がある場合には共有ライブラリとリン クすることは避けるべきであり、それらのライブラリの共有ライブラリ版が存在する場合は、それを使用するべきで す。 ・ アプリケーションは、C コンパイル・オプション"-lc" を明示的に使用してはなりません。 ・ アプリケーションは、プラットフォーム固有のコンパイラ機能に基づいたコード(例: インライン・アセンブリ・コード) を含 んではなりません。 API の使用: ・ アプリケーションは、リリース間で移植不可能であるとドキュメントに記載されているインタフェースを使用してはなりま せん。 ・ アプリケーションは、廃止された、あるいは廃止対象として指定された API を使用してはなりません。 ・ アプリケーションは、旧式化した API の使用を避けるべきです。 ・ アプリケーションは、業界標準 API の方を、類似した HP 独自仕様ソリューションよりも優先して使用するべきです。 独自仕様インタフェースは、標準への準拠を目的として変更される可能性があるからです。 5 エラー処理: ・ アプリケーションは、C 言語で、errno の値または戻り値を処理するときに、"default"ラベルの case 文を使用して将 来の機能拡張で新しい errno や戻り値が追加される場合に対応しなければなりません。 ・ アプリケーションは、シグナルを使用するとき、シグナル・ハンドラを使用しなければなりません。 データ型: ・ アプリケーションは、ドキュメンテーションで指定された適切なデータ型を、アプリケーション全体を通じて一貫して使 用しなければなりません。たとえば、difftime() のドキュメンテーションが第 1 パラメータは time_t であると規定してい る場合は、このパラメータと、このパラメータへの操作は、すべてデータ型 time_t であるべきです。 ・ アプリケーションは、データ型について、ドキュメントに記載されていない関係やサイズに関する想定を行ってはなりま せん。ヘッダ・ファイルはドキュメンテーションであるとは見なされません。たとえば、アプリケーションは、long/int、 time_t/int、ssize_t/long などのペアが同じサイズであると想定してはなりません。 ・ アプリケーションは、データ型/サイズが異なるデータ・オブジェクト間で、式の評価、代入、ビット移動、型変換を行っ てはなりません。 ドキュメンテーション: ・ アプリケーションは、マニュアル(man)・ページ、White Paper、リリース・ノート、あるいはその他の製品マニュアルで指 定された情報に違反してはなりません。 共有ライブラリとアーカイブ・ライブラリの混合リンク アプリケーションを共有ライブラリとアーカイブ・ライブラリの両方とリンクする場合は、下記のような十分な注意が必要 です。そうしないと、unresolved symbol、hidden definitions 、および duplicate definitions が発生して、アプリケーション が実行時に異常終了したり、異常な動作を示す恐れがあります。 アプリケーションを、アーカイブ・ライブラリへの依存関係がある共有ライブラリ(もっと具体的には、アーカイブ・ライブラ リによってリゾルブ(resolve)される外部シンボルを含むような共有ライブラリ) とリンクする場合、共有ライブラリのちょっ とした変更でもアプリケーションのリンク時には存在しなかった他のライブラリへの参照が必要となる場合があります。こ のような追加的な外部参照は、上記のような障害を引き起こす可能性があります。 望ましい方法は、すべてのシンボルが共有ライブラリによってリゾルブ(resolve)されることです。しかし、アーカイブ形式 でしか存在しないライブラリをアプリケーションが使用する必要がある場合は、そのアーカイブ・ライブラリに依存する箇 所を含んでいる他のライブラリもアーカイブ・リンクすることが重要です。詳細な説明と例については、"Programming on HP-UX" (HP P/N B2355-90652) の第 2 章などを参照してください。 お問い合わせはカスタマー・インフォメーションセンターへ 03-5304-6660 月~金 9:00~19:00 土 10:00~18:00(日、祝祭日、年末年始および 5/1 を除く) HP-UX 製品に関する情報はhttp://www.hp.com/jp/hpux 記載されている会社名および商品名は、各社の商標または登録商標です。 記載事項は 2003 年 9 月現在のものです。 本書に記載された内容は、予告なく変更されることがあります。 本書中の技術的あるいは校正上の誤り、省略に対して、いかなる責任も 負いかねますのでご了承ください。 © Copyright2003 Hewlett-Packard Development Company,L.P. 日本ヒューレット・パッカード株式会社 〒140-8641 東京都品川区東品川 2-2-24 天王洲セントラルタワー PDFHS03-026-01