FreeBSDは、現在システムコンパイラとツールチェーンの入れ替えを進めている。
FreeBSDはこれまでGCCをシステムのデフォルトコンパイラとして採用してきた。FreeBSDにとってGCCは必要十分なコンパイラだったが、GCCがライセンスをGPL2からGPL3に変更して状況が変わったのだ。
FreeBSDはシステム内でのGCCのアップグレードを、GPL2でリリースされた最後のバージョンGCC 4.2.1で停止。
FreeBSDを利用する企業やユーザからGPL3になったGCCをベースシステムに使用して欲しくないとの要望が多く、GCCのみならず、GPL3のコードはFreeBSDのベースシステムには採用しない方針になっている。
そのため、
アクティブなメンテができず、古いバグが残ったままになっている
C++0Xのサポートがない
新しいCPUのサポートがない
などの問題が発生することになるわけだ。
そこで新たに注目されたのがLLVM Clangだ。
2年前のBSDCan2008で多くの開発者の関心を惹いたLLVM Clangは、近いうちに9-CURRENTへ採用されそうな勢いだ。
LLVM Clangの利点は以下の通り。
BSDライセンス
i386、amd64、powerpc、mips、arm、sparcなど必要になるすべてのアーキテクチャに対応
GCCよりもコンパイル時間が短い
GCCからのリプレースができる
コンパイルエラーメッセージがGCCよりも理解しやすい
アクティブに開発されメンテナンスされている
FreeBSDデベロッパにもアクティブなメンテナがいる
LLVMの開発チームと良好な関係
などとされるが、未だ問題点も多い。
i386版のboot2ビルド成果物が必要とされるサイズに収まらない
x86におけるインラインアセンブラの対応が100%ではない
GCC 4.2.1よりも厳密でワーニングが多く出力される
現段階で、アーキテクチャへの対応が全て良好というわけではない。
(amd64は良好、i386には若干の問題あり、mipsとpowerpcは対応中、sparcも対応中で、armは進展なし)
ツールチェーンもBSDライセンスへ置き換え
LLVM Clangへの移行に合わせて、ツールチェーンを従来のGPLベースのものからBSDライセンスベースのものに置き換える作業も進められている。BSDライセンスで開発されるELFツールチェーンとデバッガ。nm(1)、size(1)、string(1)、c++filt(1)、addr2line(1)、readelf(1)、elfdump(1)、objcopy(1)、strip(1)などのシンプルなツールはすでに変更済み。後はas(1)やld(1)など複雑なツールの実装、libelfの改善、libdwarfの改善、libmcの導入、LLVMとの連携などが残っている。
現在まだ課題が多いため、FreeBSDのビルドがLLVM Clangベースになり、ビルドの大半をLLVM Clangにするにはまだまだ時間がかかるが、amd64版とi386版のカーネルとシステムのLLVM Clang対応はすぐそこまで迫ってきており、9.0での実験的な導入、10.0での正式な対応ということになりそうだ。
FreeBSDでは主にライセンスが理由になったが、コンパイル時間やコンパイルした成果物のパフォーマンスの高さなどからLLVMへ移行するOSSプロジェクトもある。
また、今後この動きはLinuxに波及しないとも限らない。

コメントする