互換性は大事です。でも・・・

Eclipse と Java 6u21 の問題

先に教訓から

・一見して無害なものでも,連鎖反応(knock-on effecr)を持つようになる場合がある。
今回のような事態を JVM チームが予見することは,現実的には不可能だった。
また Eclipse チームも,このようなブランド変更が起きるとは知るすべがなかった。
しかしながら,"誰にも危害は加えないだろう" と思った小さな波及効果でさえ,
予期せぬ結果をもたらすことがあるのだ。この件に関する最大のアドバイスは,
マイナーリリースはバグフィックスのみに限定すること,不要な変更は次のバージョンへ
回すこと,の2つだ。


一見関係なさそうなものが影響して障害となった修正は、数多く目にしたし、痛い目にも
あってきた。
レジストリ環境変数、定義ファイルなど外部には非公開のデフォルト値の変更で、
関連製品が動かないとか。
昔の担当者が勝手に使ってたとかで、製品内部でも自爆するとかもある。


それならかわいいものだが、構造体のデフォルト値を変えたら・・・これは言えないや。


まぁともかく、互換性は大事です。
互換性は大事だけれども、うちの場合、過剰すぎやしないか?


Oracleが最近リリースした Java 6 update 21 には、 java.dllを作成する際に、
小さな,しかし無害な変更 があった。不幸にも、この変更は、
Eclipseの起動に影響を及ぼし、かつてSunの元で開発された NetBeansではなく、
Eclipseに問題をもたらした。
変更は、dllの作成の際に、COMPANY_NAME=Sun Microsystems, Inc.を
COMPANY_NAME=Oracle Corporation に置き換えたのである。
不幸にも、 Eclipseは、DLLの名前を使って、非標準の-XX:MaxPermSize を追加する
のが安全かどうかを判定している。そのフラッグが存在して、サポートされていないと、
あるJVMは、Eclipse のスタートアップ ファイル (eclipse.ini)に、

  • XX:MaxPermSizeを書かないで、起動に失敗するので、新しい引数、

--launcher.XXMaxPermSize 256m が許され、そしてもし、
Windowsで実行可能なランチャーがSunのVMを検知したら、-XX:MaxPermSize=256m を
自動的に追加する。

Oracle が Eclipse の Java 問題に対処

先週報告したとおり,OracleJava 6u21 のブランド変更に関する問題に迅速に
対応した。Java インストーラの再設計によって Windows マシン用の最新リリース
ビルドは 1.6.0_21-b07 になった。問題が影響するのは Windows のみであるため,
Solaris 用と Linux 用はバージョン 1.6.0_21-b06 のままだ。

Oracleは素早く元に戻しただけだが、もしこういう問題が自社で発生した場合、
ややこしいことになりそうだ。


まず、話の前提が以下となってしまうからだ。

1) 以前の「COMPANY_NAME=Sun Microsystems, Inc.」を期待してるユーザーがいる
2) 新しい「COMPANY_NAME=Oracle Corporation」を期待してるユーザーがいる(かもしれない)


2.に対しては、「使用していないこと」をユーザーに確認する。
セーフなら元に戻すだけだ。


例え、1ユーザーでもいたらアウトになる。
もしくは、「使用していないこと」が証明できないときもアウト。


アウトとなると、1)、2)のユーザーを救うために、デフォルトは1)で、互換オプションで
2)となるような動作するものを作るようなことになる。
今回の場合は、DLLに埋め込まれる情報だから、おそらく、2つのパッチを出すか、
適用時に選択するようなパッチを提供することになるだろうか。


歪な互換性絶対主義がはびこっているのだ。
ダメだこいつ・・・早く何とかしないと。




関連あるかもしれない記事