2008/06/08

旧居

主筆」のエンコードの自動認識機能・MRUリスト表示機能・プラグインへ提供するAPIの強化などが終わり、そろそろ第20版として公開しようかどうか考えている。もうちょっといくつか細かい機能を実装したい気もするが、そんなことを言っていたら、いつになってもキリがつかないから、そろそろ潮時ではないかと思う。

しかし、公開するとなると一つ問題がある。それは、Solarisの互換性の問題だ。Solarisの場合、新しいバージョンのOS上でコンパイルされたバイナリは、古いバージョンのOSの上では動作しない。たとえば、Solaris 10でコンパイルしたバイナリはSolaris 8では動かない。だから、実行バイナリを公開するのであれば、動作対象とするOSの内でもっとも古いものの上でコンパイルして、公開するバイナリを生成しなければならないということになる。

「主筆」は、以前からSolaris 8以上をターゲットとしてきた。そして、それはこれからも変えるつもりはない。たとえSunがどのような意思を持とうとも、俺はSolaris 8を見捨てるつもりはない。そのために俺は、今でもわざわざSolaris 8の環境を整えて維持し続けている(まぁ、要はSolaris 8を入れたマシンを転がしてあるだけなのだが)。

また、現在「主筆」はSun Studio 12で開発を行っている。強いてそれでなければならない理由はないのだが、とりあえずSun Studio 12に移行してしまったのだから仕方がない。Sun Studioは、特にX-Designerは、一度新しいバージョンのもので編集してしまったら、二度と古いバージョンには戻れないと言う、嫌がらせのような機能が実装されている。そのため、たとえ俺がどれほど心から後悔し、懺悔し、神に祈り許しを請うても、二度とsun Studio 11などの古いバージョンに戻ることは許されない。

ここで素直にSun Studio 12がSolaris 8の上で動作するならば、世は事も無しなのだが、しかしそうはいかない。Sun Studio 12はSolaris 9以上のOSで動作すると言うことになっている。Sun Studio 11はSolaris 8以上で動作するようになっていたのだが、ここにきてSunはとうとうSolaris 8を切り捨ててしまったようなのだ。

そうすると、俺はかなり困ったことになる。すなわち、「主筆」がsolaris 8をサポートし続けるのであれば、なんとしてもSolaris 8上でコンパイルしなくてはならない。しかし、肝心のコンパイラはSolaris 8では動作しない。

どうすればいいのか。

大きく分けて対応策は二つある。まず第一に、Solaris 8のサポートをやめてしまえばいいという方法が考えられる。要は、古いOSにいつまでの拘泥しているのがすべての原因なのだから、ここは世の流れに身を任して、思い切ってサポート対象をSolaris 10だけに限定してしまえばいいという発想。だが、これは俺が許さない。俺の個人的感情から、なにが何でも、当面はSolaris 8をサポート対象に含めたいと考えている。

そうすると、もう一つの方法としては、Sun Studio 11以前の古いコンパイラを用いて、Solaris 8上でバイナリを生成する方法がある。というか、ほとんどこれしかない。

だが、どうやってそれをやるのか。神に祈ろうが悪魔と契約しようが、Sun Studio 11には戻れないのではなかったのか。

実を言うと、いくつかの要点を押さえれば、C++のコード自体にバージョン依存の記述がない限りコンパイラのバージョンを落とすことは不可能ではない。その要点とは、X-Designerである。

結局、古いバージョンに戻れないのはX-Designerだけであり、かつ、それはX-Designerにより生成されたファイルを入力して、Cのソースコードを出力するまでの問題なのである。逆に言えば、C/C++のソースコードをコンパイルし終わってリンクする時点では、X-Designerに互換性がない問題は関係無いのである。

つまりこういうことだ。一旦Solaris 10上のSun Studio 12に含まれるX-Designerを用いてCのソースコードまでは出力しておく。そして、得られたソースコードをSolaris 8に持ってきて、sun Studio 11でコンパイルしてやればいい。そうすれば、目的のSolaris 8用バイナリを得ることが可能となる。

だが、ここで一点気をつけなければならないことがある。それは、Solaris 10とSolaris 8とで環境を同じようにしておくということだ。少なくとも、Sun Studio 12とSun Studio 11をインストールするパスは同一でなければならない。なぜならば、コンパイル時にX-Designerが生成するソース中には、Sun Studio 12のインストール先パスを含むパス名を固定的に保持しているのだ。そのため、ソースを生成するときと、それ以降のコンパイルの段階とで、参照先のパスが変わっていたりしたら、まともにコンパイルが通らなくなってしまうのだ。

とりあえず、その一点に気をつければ、Solaris 10で、かつ、X-Designerの新しいバージョンを用いてソースコードを生成を行わせた後も、Solaris 8に持ってきて古いコンパイラでコンパイルすることが可能となるはずだ。

一応、今もまさにSolaris 8/Sun Studio 11の環境で「主筆」をコンパイルしている最中である。もしこれでうまくいかなかったら、なんか別の手を考えよう。

0 件のコメント: