GNU Compiler CollectionによるDebian内のエラー探し

Debian開発者Martin Michlmayrは、GNU Compiler Collection 4.1を用いてDebianアーカイブ内のコードの問題探しに取り組んできた。Michlmayrの調査は、興味深い成果を生んでおり、GCC 4.1の品質とDebianアーカイブ内のMIPSコードについて多くの知見を与えてくれる。

Michlmayrの調査は、Googleの後援のもと、フリーソフトウェア・プロジェクトの品質管理という研究の一環としてケンブリッジ大学で実施された。

彼によれば、GCC 4.1でDebianアーカイブ全体をビルドするのに約2.5週間かかったという。使用したマシンは4コアのMIPSマシン(Broadcomより寄贈)とEMT64マシン(Intel)である。先の結果を見ると、GCC 4.1はMIPSとAMD64で「極めて安定」している一方、Debianアーカイブ内には「GCC 4.1がエラーと見なすコード(特にC++)を用いたパッケージが多数存在する」という。

パッケージ数6,192に対して一連のテストで新たに発見されたバグは500件以上にのぼり、そのうちの280件はGCCのチェックが厳格になったことに起因する。Ben Hutchingsの作成したページに、GCC 4.1以前はエラーとされなかった一般的なC++構文エラーが掲載されている。

Debianパッケージに多数の構文エラーが見つかったが、GCC 4.1自体のエラーはわずかだった。Michlmayrが発見したGCC 4.1のバグは4件で、そのうち2件は既に修正されている。

なぜMIPSなのか?

たいていのユーザーはLinuxをx86かAMD64マシンで動かすわけだから、何も時間をかけてMIPS固有の問題に気をもむこともないと思われるかもしれない。しかし、Michlmayrによれば、MIPSのようなアーキテクチャでの調査は、「主流のアーキテクチャ以外は一般にあまりテストされない」が故、現実により重要な意味を持つという。

では、なぜMIPSを採用し、ARMなどの別の非標準アーキテクチャを選ばなかったのか。MIPSを選んだのは、ひとつにはテスト用の高速ハードウェアが入手可能だったこと。もうひとつの理由はDebianがMIPSを完全にサポートしているからだとMichlmayrは言う。

「他の非主流アーキテクチャでも同様のテストを実施できればよいのだけれど、その多くは高速ハードウェアの入手がかなり難しい。たとえば、ARMプラットフォームには開発用の1.2GHzデュアル・コア・ボードがあるが、非常に高価だ。BroadcomはDebianをMIPSに移植する意義を認めてハードウェアを寄贈してくれたが、IntelなどのARMライセンシーとの間で我々は同様の関係をまだ築いていない」

バグの重大度

Michlmayrの調査でかなり多くのバグが見つかったが、ほとんどの問題は「まったく無害で、取るに足らないもの」という。「280件のバグのうち、現実に問題を引き起こす可能性があるのは数件にすぎない。それも特定され、報告されたので、後は修正するだけだ」

Debianのアーカイブで見つかっている大部分のバグは、GCC 4.1の「標準適合チェックがより厳格になった」ことに起因するという。

「たとえば、GCC 4.1では、クラス内の宣言で当該宣言の前にクラス名を明示的に付すとextra qualificationの警告が出る。クラス名が既知なら、extra qualification(余計な修飾)だが、C++標準では修飾なしの名前が求められる。187件のバグがextra qualificationということは、よほど当たり前のエラーということだ」

GCC 4.1はEtchで使われるか?

DebianはEtchでGCC 4.1を使うかどうかまだ決めていない。Michlmayrによれば、GCC 4.1固有のバグがいくつかあるため、Steve Langasek(Debianのリリース・マネージャのひとり)がためらっているという。

「彼は、これらのバグがすぐ解決されなければ、現段階で4.1をデフォルトのコンパイラに移行することは選択肢とならないと表明した。私が報告したバグの多くは既にクローズしているが、その数をさらに減らすために集中的な努力が可能かどうか調査する予定だ」

これがMichlmayrの最後の品質レポートとは多分ならないだろう。Michlmayrは、GCCプロジェクトのQA担当、Andrew Pinksiとよい関係を築いたという。「彼は私が現在の調査を続けることを切望している」

要するに、高速ハードウェアが手に入れば、Michlmayrは非主流アーキテクチャでGCC 4.1による調査を続け、GCCチームにもっと多くの調査結果を提供したいのである。「その規模を考えれば、Debianが巨大なテストケースであることは間違いない」

原文