2012-03-20

GCC 5はモジュール化できるか

[Phoronix] Talk Of GCC 5.0 To Be Modular, More Like LLVM
David Malcolm - GCC 5? (was Re: GCC 4.7.0RC: Mangled names in cc1)

聞説、今のGCCのコードは、やや悲惨な部類に入るらしい。十分な実績があり正しく動くのは確かだが、コードはほとんどCで書かれており、名前空間もなく、グローバルな状態が多く、スレッドもない。これはつまり、GCCは他のソフトウェアに組み込むのが難しい。

一方、LLVMは、設計段階からモジュール化を念頭に置いており、GCCよりはるかに後発なのにもかかわらず、他のソフトウェアに組み込む用途で広く使われている。たとえば、 MesaのGallium3Dとか、OpenCLとか、Monoとかで、JITコンパイルを実現するために、すでに使われている。他にもLLVMを利用して、CやC++をJavascriptに変換するようなプロジェクトも生まれている。

GCCは歴史や実績こそ十分だが、このような組込用途には、現在のコードベースでは圧倒的に向いていない。そこで、GCCをLLVMのようにモジュール化して使いやすくしようという議論がある。

問題は、長年の歴史あるGCCのコードをモジュール化するための変更は相当にでかい。したがって、現実的な方法でモジュール化を進めると、GCCは短期的に、機能が少なくなり、最適化も悪くなり、あらゆる点で現行のGCCより劣ることになる。もしすべての現行機能をそのまま保とうとしたら、作業が莫大すぎて現実的に行えない。多くのGCCのコントリビューターは、すでにGCCを自社で使っている会社に雇われて働いている。そのような会社が、GCCの機能を、短期的に劣化させる作業に金を出したいと思うだろうか。

もうひとつの問題は、ライセンスだ。GCCはGPLv3で提供されているが、LLVMはより柔軟でpermissiveなライセンスで提供されている。たとえモジュール化をやり遂げて、組込用途でLLVMに対抗できるようになったとしても、GPLでは使えない企業も出てくるだろう。現時点で、GCCがいまさらライセンスを変更できるはずもない。一体どうするのか。

なんにせよ、今のLLVMの開発速度は驚異的だ。GCCは今の地位を保てるだろうか。明らかに今のGCCのケツには、やがて発火する煙がくすぶっているように思われる。

1 comment:

齊藤 said...

一次情報が見付けられなかったので本当かどうかわかりませんが GCC は商用コードと混ざらないように意図的にモジュール化されなかったという話があります。
http://tabesugi.net/memo/2008/62.html#192038
フリーであることを護ろうとする RMS の思想がここでも発揮されているわけです。