ポータビリティについて知る

Linux向けのアプリケーションの開発者の増加に伴い、ポータビリティやアプリケーション検証に関する質問が増えています。Linuxでポータビリティの高いアプリケーションを作成する方法は?自分のアプリケーションはLSB認証を受けるべきか?自分のアプリケーションに最適な方法は?

本章では、より良いLinuxアプリケーション作成のプロセスを説明して、これらの疑問にお答えします。

LSB概論」のセクションでは、LSBとは何か、アプリケーションがLSB認証を受けることの意味等を説明します。認証は当面見合わせたい場合でも、複数のLinuxディストリビューション上で動作するポータブルなアプリケーションの作成方法を理解するのに役立ちます。

ポータブルなアプリケーションの開発方法」のセクションでは、アプリケーションをディストリビューション間共通で動作可能にする方法の概略を説明します。LDN提供の最新ツールを利用すれば、ポータビリティは容易に実現可能です。LSB認証取得の手続きも以前より大幅に容易になっています。

LSB概論

一般に、オペレーティングシステムの成功度は、そのオペレーティングシステム上で動作するアプリケーションの数と質に密接に関係します。ところが、Linux用にアプリケーションを開発する場合、異なるディストリビューションが存在することに起因するLinux特有の問題に対応する必要が生じます。例えば、ディストリビューションごとにライブラリのバージョンが違ったり、重要ファイルの保存先が異なったりすると、アプリケーション開発者は、それらのディストリビューションのLinuxユーザーを照準に入れようとする場合、それらディストリビューション固有の開発をしなくてはなりません。Linuxプラットフォームを対象とする開発は、それらを正しく認識することが必要です。

Linuxを採用したいのに、そうすると事態がややこしくなる ― これはアプリケーション開発者にとっていくぶん皮肉な状況です。しかし、複数のLinuxディストリビューション向けのアプリケーション開発に要するコストとリソースを安易に考えることもできません。

この問題の解決、すなわちLinuxプラットフォームをサポートするのに必要なコストの削減を目的に策定されたのがLSBです。Linuxディストリビューション間の差異を縮小することにより、アプリケーションの移植コストを大幅に低減し、また、商品化後のユーザーサポートの省力化・コスト節減も可能にします。

また、LSBによる標準化は、各ディストリビューションの版数アップ時の互換性維持にも役立ちます。Linuxカーネルは、常に活発な機能追加が行われていますが、それにもかかわらず、LSB3.0対応のディストリビューション以降、アプリケーションインターフェースの後方互換性が維持されています。これは、アプリケーション開発者にとっても、また、Linuxユーザーにとっても、いったん開発した、ないしは、導入したアプリケーションが、ディストリビューションの版数アップ時にも、一定のテストを経て継続利用できることを意味します。

要約すれば、LSBによる標準化は、Linuxプラットフォームで開発に取り組む際の費用効率の向上、すなわち移植、サポート、テストに係わる負担の削減を可能とし、世界市場に向けてのアプリケーション開発を支援しています。

LSBのメリット

LSBが提示するソリューションは、ISVやアプリケーション開発者を楽にするだけでなく、Linuxエコシステム全体に対しても非常に大きなプラス効果をもたらします。

さらに、LinuxがUNIXオペレーティングシステムと同じ運命をたどることも防いでいるということもできます。かつてUNIXで起きたような、商業的利益のために、ひとつのオペレーティングシステムがいくつもの改良型に分裂し、それぞれの間に互換性が成立しないなどということはLinuxの世界では起こりません。

ISVにとって重要な、具体的なメリットを以下に列挙します。

● ディストリビューション間の移植コストが低減でき、移植時の作業としてテストに専念できます

● 各ディストリビューションの版数アップ時の移植コストも低減でき、移植時の作業としてテストに専念できます

● Linuxをサポートするための複雑さが減少し、サポート負荷の削減につながります。

● 特定のディストリビューションが優勢な地域別マーケットが存在する状況において、より多くに地域への参入が可能となり、ユーザー数の増大が見込めます。

● 開発・マーケティングに、Linux Foundationおよび LDNの支援を受けることができます。

LSBソリューションが、Linux環境の開発者の大きな力になることは明白です。では、LSBソリューションとは正確に言うとどんなもので、どのように開発者の役に立つのか?答えはLSBを構成する各コンポーネントを理解することで得られます。

LSBを理解する

LSBは、アプリケーションとプラットフォーム間の相互運用性を定めたLinuxオペレーティングシステムの中核標準です。この標準には、文書化されたバイナリインターフェース仕様、標準に従って開発されたディストリビューションおよびアプリケーションをテストするためのツール一式、およびテスト目的のサンプル実装が含まれています。

 

ディストリビューションベンダーはLSB標準の主役です。彼等の参加なくして、LSBは意味がなかったと言えます。また、標準策定に協力した後もLSBを支持し続け、主要ディストリビューションは全てLSB認証も取得しています。

LSB推進の一環として、Linux Foundationは、ディストリビューションベンダーやサーバーベンダーの協力を得て、LSBワークグループを運営し、ベンダー間の合意形成と多様な要求間のバランスを図りつつ、有益な標準をタイムリーに提供することを目指して活動しています。

Linux開発コミュニティのサポートも重要な要素です。オープンソースコミュニティは、複数のソフト開発プロジェクトを融合させ、単一のコンピューティングソリューションにまとめ上げることをなしとげました。ここで大切なのは、プロジェクトのメンテナー全員が、LSBを始めとするコンピュータ関連の現行標準をきちんと認識しているということです。LSBの拡充には、ディストリビューションベンダー、コミュニティ開発者、アプリケーション開発者が一丸となり協力し合っています。

次にLSBの技術要素の説明をします。

LSB標準

まず、LSBの重要な基盤は、標準的なアプリケーション構築法をLinuxアプリケーション開発者向けに解説したバイナリインターフェース仕様書で、下記が記載されています。

● 共通パッケージとインストールガイドライン

● 共通共有ライブラリとその選択

● コンフィグレーションファイル

● ファイル配置

● システムコマンド

● アプリケーションレベルおよびプラットフォームレベルのシステムインターフェース用ABI(Application Binary Interfaces)

アプリケーションと実行環境間のバイナリインターフェースは、その多くが既存の標準に基づいて記述されています(注)。LSBが利用している主な標準には、Single UNIX Specifications (SUS)、Standard C++ ABI、System V ABIがあります。その他、PAM(Pluggable Authentication Module)、X11、freedesktop.orgが提供するデスクトップ標準等も参考にしています。

(注)IEEE POSIX(Portable Operating System Interface for UNIX) 1003.1とLSBの差異、および、相互のポータビビティについては、POSIX and Linux Application Compatibility Design Rules (by C. Douglass Locke, Ph.D., 2006)に詳細な説明があります。

LSBは、個々のライブラリのインターフェースの装備、および、、各インターフェースに関連したデータ構造・定数を規定しています。ここに含まれるのは、開発者が必要とする共有ライブラリ(C++を含む)、ファイルシステム階層(ファイルの格納場所を定義)、各インターフェースの動作仕様、アプリケーションパッケージの詳細、アプリケーションの動作(インストール前およびインストール後)等です。

LSBは、LSB3.0以降、ソースコードのレベル、および、バイナリのレベルの両方で、後方互換性維持の方針を原則としています。言葉を換えると、あるアプリケーションが、LSBの版数x.y(ただし、x.y>=3.0)を照準として開発すると、そのアプリケーションは、LSBx.yあるいはそれよりも新しい版数のLSB版数で認証された、あるいは、準拠したディストリビューションでも動作することを意味しています。例えば、LSB3.0を照準としたアプリケーションは、LSB3.0で認証された、あるいは、準拠したディストリビューションのみならず、LSB3.1、LSB3.2、LSB4.0のディストリビューションでも動作するのです。

このような後方互換性を達成するため、LSB標準においては、後続のLSB版は仕様の追加のみ、言葉を換えると、インターフェースは追加されるのみで、急に削除されることはないということです。LSBのポリシーに、インターフェース削除のメカニズムを有していますが、本当に削除されるのは、そのインターフェースに「削除予定(deprecated)」と表示される状態を少なくともLSBの版数で3版を経た後、あるいは、およそ6年を経た後としています。 このポリシーのおかげで、アプリケーションベンダーは、アプリケーションをLSBの特定の版数で認証を受けると、それ以後の版数で再認証する必要はなくなりました。もちろん、新しい版数に含まれるLinux機能を積極的に利用するアプリケーションは、新たなLSBに対して認証を受けるのは当然です。

このアプリケーション互換性のポリシーはLSB3.0で提供されたことにはご注意ください。LSB1.x、2.xにおいては、バイナリ互換性はメジャー版数内に留まっていました。

LSBは、ISO/IEC 23360として、国際標準化機構(ISO)と国際電気標準会議(IEC)で正式に認められた国際基準です。従って、LSBは常に最上級の標準として維持されるだけでなく、その内容は常にオープンな性格のものです。

アプリケーション開発者にとって必要なあるインターフェースがLSBに収録されていないとしたら、その理由は様々です。例えば、ライブラリの作者またはメンテナーが、そのライブラリが未だ開発途上で、その動作が不安定であったり、今後の機能向上により、時とともにそのインターフェースが変化する可能性が高いと考えているとか、インターフェースの文書化が完了していない、あるいは、LSBワークグループのLSBへの定義追加作業が遅れている等です。

LSBは以下のアーキテクチャーに対応しています。

● Intel IA32

● Intel IA64

● x86-64/EM64T

● IBM PPC 32

● IBM PPC 64

● IBM 31-bit S/390

● IBM 64-bit zSeries

LSBディストリビューションの認証

Linux Foundationは、LSB標準に準拠しているディストリビューションについて認証を提供しています。認証された製品のみが LSB認証のトレードマークを使用することが許可されます。この認証マークは、開発者とエンドユーザに、「LSB認証」されたアプリケーションが LSB認証されたディストリビューション上で正常に動作することを示します。図1に示すように、ディストリビューション固有のインタフェースを使用するアプリケーションCは、他のディストリビューション上で動作できませんが、認証アプリケーションDは、全ての認証ディストリビューションで動作します。Linux Foundationは、LSB認証されたディストリビューション製品の一覧表を公開しています。

図1.認証ディストリビューションと認証アプリケーション

ディストリビューションがLSBに準拠している事を確認するために、ディストリビュータは、LSB Distribution Testkit を使ってディストリビューションのテストを実施し、テストに合格したディストリビューションのみがLinux Foundationによって認証されます。この際、LSB標準の個々のコンポーネントがどのようにテストされるかについては、LSB Database NavigatorによってアクセスされるLSB Databaseにて公開されています。

LSBアプリケーションの認証

これらのLSB仕様に合わせて開発されたアプリケーションは、LSB認証に近い位置にあると言えます。認証取得には、この段階でテストを開始し、どの程度LSBに準拠しているかを正確に把握することをお勧めします。テストは各ディストリビューションのネイティブビルドでも行えますが、コンパイラやリンカーとしてLSBソフト開発キット(SDK)を使用した方が不要なエラーを無くすことができるので、開発・テストの早い段階からLSB SDKの使用することを推奨します。

LSB認証に際しては、Linux Application Checkerを適用したアプリケーション単独のテストの他に、LSBサンプル実装および認証済みディストリビューション上で実際にアプリケーションを走らせてのテストも必要です。Linux Application Checkerが、どのようにアプリケーションのテストしているかについては、「Linux Application Checkerの技術的特長」にて説明しています。

正式認証を受けるためにLinux Application Checkerのテスト結果を提出する用意ができた時点で、LSBの認証システムに製品を登録してください。製品の登録が完了してから、テスト結果をアップロードしてください。その後、LSB商標ライセンス契約(Trademark License Agreement = TMLA)を結び、所定の申請費用をお支払い頂きます。テスト結果の審査は、TMLA締結と費用の支払い確認後に行い、合格の場合は正式にLSB認証されます。

LSBを利用する

LSBと、それがLinuxおよびLinuxアプリケーション開発にもたらす多大なメリットについては既にご理解頂けたと思いますので、LSBの適切な利用法に話を進めます。LDNの主要任務のひとつは、この方法を周知させることにあります。

 

アプリケーションのLSB認証を求めるのか、今回は見送るのか、目標を定めてください。LSBは非常に重要な標準ですが、誰もが認証取得を目指す標準と言うわけではありません。例えば、小規模のISVや個人の開発者の場合、認証に費やす時間が捻出できないことがあるかも知れません。アプリケーションによっては(特にカーネルを修正している場合には)、現時点で準拠させるのが難しい場合もありえます。

しかし、そのようなアプリケーションでも、LSBから得るものが無いという訳ではありません。ちなみに、ISVが抱える複雑な問題の多くが、LSBのガイドラインに従うことで解消可能です。LSBワークグループが作成・維持しているLSBソフト開発キット(SDK)には、ビルド環境に加え、LSB SDKに適合する形でソフトを効率良く移植するためのツールも含まれています。

LDNから入手可能なリソースは以下の通りです。

Linux Application Checker

アプリケーションのポータビリティレベルのチェック、ポータビリティ向上に向けたアドバイスが得られます。

LSB Database Navigator

ポータブルにすることを阻害する要因を識別し、その対策または代案を立てるのに利用。CまたはC++を使ってLinux上でプログラミングしようと考えているプログラマーにとっては、LSB Database Navigatorは情報の宝庫とも言えます。

LSBビルドツール

LSB SDKを用いて、開発者は、バイナリとRPMパッケージがLSBに準拠しているかどうかを検証し、また、ビルド実行中にアプリケーションによるAPIの使用状況をモニターして、LSB適合性を保証することができます。

LSBサンプル実装(LSB SI)

LSBに準拠した最小限の実行環境で、テスト目的に使用。ディストリビューション固有の動作の影響を受けていないことを保証するために、LSB準拠のアプリケーションは必ずLSB SI内でテストする必要があります。LSB認証プログラムでもLSB SIの使用が義務づけられています。

チュートリアルおよびブログ

ポータビリティ向上、LSB適合性検証、一般的なLinuxアプリケーション開発等に関し、ハウツーを含む最新情報を掲載。

フォーラムおよびメーリングリスト

開発に関する問題の解決法、その他ヒントや助言をリアルタイムで入手可能。

LSB認証およびマーケティングの支援

LSB認証、ポータビリティ向上のいずれを選択した場合でも、開発したアプリケーションをLinuxエコシステムで効果的に世界に露出する方法を決めるための情報を提供。なお、認証されたアプリケーションは、認証製品リストとして掲載されます。

LSBがアプリケーション開発者に提供するのは、世界に広がるLinuxの優位性を生かすためのツール群と標準化基盤です。LDNは、LSBのポテンシャルを最大限に活用して、アプリケーションのポータビリティ向上を目指すアプリケーションベンダーや開発技術者を支援することを目的としています。

ポータブルなアプリケーションの開発方法

ディストリビューション間のポータビリティを達成するのが面倒だからと、Linuxアプリケーションの開発や既存アプリケーションの改良をためらってはいませんか?LSBには、ポータビリティ実現に役立つツールや開発技法が多く存在しています。

 

図2.はLSBを活用したポータブルアプリケーションの開発手順です。青色で表したものがLSBの用意するツールです。

LSBツールの一つ目は、LSBに完全準拠したアプリケーション作成を可能とする開発環境、LSBビルドツール(LSB SDK)です。普通Linuxディストリビューションが用意した開発環境には、そのディストリビューション固有のインターフェースが混在しますが、LSBビルドツールを使用して開発を行えば、使用できるインターフェースは、LSB準拠ディストリビューション全てに認められているものだけになります。この方法により開発したアプリケーションは、全てのLSB準拠ディストリビューション上で動作できるようになります。

二つ目は、Linux Application Checkerです。本ツールを利用してアプリケーションをテストすれば、ポータビリティ改善のための技術的なテクニックやヒントをLDNから入手できます。ポータビリティの観点から使用を推奨するインターフェースの情報もLinux Application Checkerに盛り込まれています。

なお、Linux Application Checkerは、特定のディストリビューション上で開発された既存のアプリケーションパッケージに対して適用することもできますので、Linux上の既存アプリケーションがあれば、先ずは本ツールを適用してポータビリティの状況を確認できます。その上で、アプリケーションが使用する非LSBライブラリの数を減らす方策を採れば、特定の少数アプリケーションだけを戦略的にポータブルにすることができます。

Linux Application Checkerのテストで非LSBインターフェースの使用を排除できたら、三つ目のツール、LSBサンプル実装(LSB SI)上でそのアプリケーションの動作テストを行います。LSB SIは、LSB準拠インターフェースだけが実装されていますので、そのアプリケーションが全てのLSB準拠ディストリビューションで動作することの有効なテストとなります。

LSB SI上での動作が確認できれば、そのアプリケーションをLSB アプリケーション認証に提出することができます。

 

図2. ポータブルなアプリケーションの開発手順