AppChecker――Linux Foundationからリリースされた新世代の開発支援ツール

 Linux関連の開発作業で最も負担と感じるものは何かという質問を独立系ソフトウェアベンダ(ISV)に対して行った場合、その返答としては、SUSEだのRed HatだのUbuntuだの様々なディストリビューションの対応製品を際限なく準備しなくてはならない点だという不満が返ってくるだろう。この種の不満はISVに限らずLinux関連のプログラマであればおそらく誰でも感じているはずのものだが、そうした負担を大幅に軽減してくれるのが、Linux Foundationから先日ベータ版がリリースされたばかりのLinux Application Checker(AppChecker)という新機軸のプログラムなのだ。

 AppCheckerはオープンソース型Linuxプログラムとして提供されており、現状ではベータ3をダウンロードすることができる。インストール後の本プログラムを実行して表示されるのはWebページ形式のLSB Database Navigatorであるが、ここでユーザが行うべきはApplication Checkというリンクのクリックであり、これによりWebフォームを用いた入力インタフェースが提示されるので、このフォームにてレポートの名称をNameフィールドに、アプリケーションのファイルパスをComponentsフィールドに入力すればいい。次に行うのはアプリケーションを構成する個々のファイル、ディレクトリ、インストールしたRPMパッケージ(pkg:で始まるもの)の指定だが、ここで入力すべき項目にはRPMだけでなく.debパッケージのファイルおよびtar.gzやtar.bz2形式のアーカイブ群も該当する。こうした情報の管理を開始させるにはSelect Application Componentsボタンをクリックし、個々の項目を該当するフィールドに入力しなくてはならない。その後テストの対象とするLSB ProfileおよびLSB Versionを選択する。

 以降の処理は基本的にAppChecker任せにしておけばよく、アーカイブ群の展開も含めて、テストに関係する操作はすべて自動実行してくれる。本プログラムにてチェック対象とされるのは、ELF(Executable and Linking Formatと呼ばれるバイナリファイル)、Perl、Python、シェルスクリプトとなっている。これだけの機能であれば、各種プログラムチェッカの先達であり充実した完成度に達したlintとさして変わらないが、AppCheckerがその本領を発揮するのは次のステップで行われる処理であり、これこそがLinuxソフトウェア開発者が着目すべき機能なのである。

 つまりユーザの開発したプログラムについてAppCheckerが実施するチェックは、Linux Standard Base(LSB)の各種バージョンに関するものだけではなく、LSB Databaseに登録されたすべてのLinuxディストリビューションに対しても実行されるのだ。テストの実行結果はレポートとしてユーザに提示されるが、正にこのレポートこそがAppCheckerの神髄とでも言うべき内容となっているのである。

 このレポート本体はWebベース形式で提示され、そこには各種ディストリビューションに対する互換性および、当該アプリケーションの使用する外部ライブラリおよびインタフェースに関する情報が一覧されるようになっている。またすべてが正常に進行した場合、テストプログラムとしてのLSB認定を取得するためのオプションも提示される。これは当該アプリケーションが特定ディストリビューションで動作するか否かという単純な判定ではない。Linux Foundationにてマーケティング/開発者プログラムの責任者を務めるAmanda McPherson氏によると、「当該プログラムを特定ディストリビューションで動作させるのに必要な詳細までを提示してくれます」ということなのだ。

 McPherson氏の説明では、「現状はベータ版段階なので完全な保証はしかねますが、それでも例えばUbuntu 7.10や8.04で動作するとの判定がAppCheckerから示された場合、当該プログラムはそうしたディストリビューションで使用可能となっているはずです。結果判定も非常に粒度の細かいものとなっており、具体的なディストリビューション名を挙げた上で、どのライブラリやインタフェースが利用できないかという明示的な情報が提示されます。その他にも例えばOpenSSLは問題を起こすケースが多いので他のSSLライブラリに置き換えた方がいいなど、コンポーネント類に関する推奨情報も通知されます」とされている。

 McPherson氏は本プログラムに関するアイデアを最初に提案した1人であり、同じくLinux FoundationのCTOでありLinuxカーネル開発者としても名の知られたTed T’so氏も提案者の1人である。その後AppCheckerの具体的な肉付けを行ったのはT’so氏とロシア科学アカデミーであり、最終的にはGPLv2ライセンスの適用下にて公開されるようになっている。

 AppCheckerのテクニカルドキュメントによると、AppCheckerが解析するのは「検査対象のプログラムにおけるC/C++シンボル群(主として一部のグローバル変数を使用する関数群)および、特定アプリケーションの必要とするライブラリのうちで各ディストリビューションから提供され動的にリンクするライブラリ群」についてである。

 ただしAppCheckerはデバッガとしては機能しない。「アプリケーション側の想定するタイプ情報と、ディストリビューション側のライブラリから提供されるオブジェクトのタイプとが一致するかのチェックは行いません。例えばデータ構造のレイアウトは変更されるものですし、従来は32ビット整数であった関数パラメータが64ビット整数に変更されるというのはよくあることです。同様に異なるバージョン間で関数の挙動が変わっていてもAppCheckerではチェックできません」

 McPherson氏の説明によるとAppCheckerで行われるのは、特定ディストリビューションにて提供されるライブラリとインタフェースに関する確認作業であり、特定バージョンのLinuxで動作させるために置き換えが必要なコンポーネントが存在すればそれが提示され、特定ディストリビューションのLinuxにて動作するかの判定が報告されるのである。つまりこのツールを活用すれば、開発中のアプリケーションを多数のLinuxディストリビューションに対応させる上で今から何を行えばいいかが簡単に確認できるという訳なのだ。

 当然ながらこの種のツールに完璧なものなどは存在しない。本プログラムの場合は未完成なベータ版段階という事情もあるが、それ以前にすべてのライブラリやインタフェースがLSBデータベースに登録されている訳ではないからである。とは言うものの、複数バージョンのLinuxに対応させたアプリケーションを構築する上で何が必要かを開発者に明示的に提示する機能が利用可能となりつつあることは、1つの大きな前進と評していいだろう。

 AppCheckerによるテスト結果はユーザの手元のみに止めておくこともできるが、可能であればLinux Foundationに提供して欲しいというのがMcPherson氏の要望である。「この種のテスト結果を他の開発者と共有することは、LinuxプラットフォームやLSBの今後の発展に貢献することになります。それは例えばLinux開発者の間で使用されているライブラリのうちで何がLSBに属していないかは、こうした情報から特定できるようになるからです。当方が(そうしたものを)LSBに追加していけば、LSBはより改善されていくことになるでしょう」

Steven J. Vaughan-Nicholsは、PC用オペレーティングシステムとしてCP/M-80が選択され、2BSD Unixを使うことがクールとされた時代から、テクノロジおよびそのビジネス利用についての執筆活動を続けている。

Linux.com 原文