distcc
ソフトウェア開発においてdistccとは、コンピュータネットワーク上での分散コンピューティングを利用し、ソースコードのコンパイル速度を改善するツールである。適切な設定を行えば、distccはプロジェクトのコンパイル時間を劇的に低減することが可能となる。
このツールはC言語(また、C++、Objective-Cなどの派生言語)と連携するように、そしてGCCをそのバックエンドとして使用するよう設計されている。Intel C++ Compilerやサン・マイクロシステムズのSun Studio Compiler Suiteでの動作報告も上がっているが互換性があるとまでは言えない。distccは自由ソフトウェアであり、GNU General Public Licenseのもと配布される。
設計
distccは、他のコンピュータの未使用プロセスを利用し、コンパイル速度の向上を図るよう設計されている。distccがインストールされたマシンはネットワーク経由でdistccdデーモンと、互換性のあるコンパイラをインストールしたコンピュータにソースコードを送信する。
distccはコンパイラエージェントとして機能する。distccdデーモンはネットワークに接続している各マシン上で稼働させなければならない。もともと最初にdistccを走らせたマシンは、ヘッダファイルを取り扱うため、プリプロセッサを起動する。そして、(#ifdef
のような)指令文ならびにソースファイルをプリプロセスし、プリプロセスをかけたソースファイルを暗号化処理なしで、もしくはSSHを使用しTCPネットワーク経由で他のマシンに送信する。リモートマシンは受信したソースファイルを(ライブラリ、ヘッダファイル、そしてマクロなど、リンクや展開が必要なデータ等)一切のローカル環境における依存性を排除した上でオブジェクトファイルにコンパイルする。そして次々とオブジェクトファイルを送信元に送り返す。
distccのバージョン3では、pump modeと呼ばれるモードをサポートしており、これは、リモートマシンへのヘッダファイルの送信をサポートしており、これにより、プリプロセス処理も分散化されている。
distccにはGTK+で作成されたフロントエンドも付いており、これを利用することで、どのノードで何のソースコードがどのような処理を行っているか分かる。
関連ソフトウェア
ccacheは、同一のソースコードを読み込んだ際にキャッシュされた出力結果を再利用することにより、コンパイル時間を低減することを狙ったもう一つのツールである。環境変数CCACHE_PREFIX
を使用して既にキャッシュされていない場合、 ccacheはまた分散コンパイルを実行するために、distccのバックエンドとしても利用可能である。
distccはアップルのXcode開発スイートの分散ビルド用のオプションである。
IncrediBuildはMSVC/C++コンパイラを利用する開発者向けの代替ソフトウェアである。