Javaは常に最新版で使いましょう

Javaのセキュリティ更新が出た。今回はJava 7u11である。

Java 7 (JRE)
http://java.com

Java Development Kit 7 (JDK)
http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

さてここからが本筋。上記で分かるとおり、Javaは開発キット(JDK)と実行環境(JRE)の二種構成である。これは確かJDK 1.1の頃から分岐したんじゃないかなと思う(確かJDK 1.0の頃は一緒だった)。JDKにはJREが含まれており、JDKのインストール時にJREが一緒にインストールされる、という構成になっている (Mac OS X版はインストールオプションが無いが)。

Javaというとひとくくりに上記ふたつが混在して認識されていると思うが、一般に悪さを引き起こすことが多いのがJRE側である。こいつはJava Appletをブラウザーで動作させるためのJava Plug-Inが入っているので、セキュリティホールが発見された場合、ここ経由で攻撃を食らう可能性が在る。Java Appletは他のプラグインに比較しても高機能であるため、これがデフォルトインストールでONになっているというのもどうよ、と思わなくもない (7u10辺りからOFFにする機能が追加されたが、それ以前だと標準でOFFにする機能すらなかった)。

JDK側は主に開発時およびサーバー側で使われていることが多い。仕様上、Java EE仕様サーバー(WebLogic, WebSphere, GlassFish, JBoss, Interstage, Tomcat等々、順不同)にはJREではなくJDKが必要(各種自動生成のためのコンパイル動作が必要であるため)なのだ。JDKはプラグインを持たないため直接の被害を受けにくいのであるが、当然ながら各種侵入攻撃を食らうような穴がたまに見つかることが多く、定期的な更新は必須である。

で、OracleはJavaのセキュリティホールが見つかるたびに定期的に修正版を出しているのであるが、遂にJava 6は2013年2月(今年2月)にEOL、つまりサポート切れである。恐らく最後に1回更新版が出てお仕舞い、になるだろうけど、とにかく更新されなくなる。つまり只で使いつづけたい場合、7に乗り換えないと行けないのだ。使いつづけたい場合はお金を払って延長サポートを受けることはできるのだが、たぶん高額である。(WebLogic等商用サーバーを買った場合は自動的に更新権が付いてくることが多いので要チェック)

当然ながら新規開発系はもとより、現在6以前で動いているシステムは7に変える必要がある。これは大変なことであるが、それは他の技術でも同じ話なので省略。

問題は新規開発系である。初学者が学習するJavaの本が7対応のものであればいいのだが、6以前のものを馬鹿正直に見て学ぶ場合、JDKがふるいものを自分のマシンにインストールして学習開始、することが多いのではないか。書籍側が「最新版入れてね」とか「そのうちサポート切れるからその場合は新しいのを入れてね」と気を利かせて書いてくれている場合はいいのだが、そんな気の利いたものはほとんど見たことが無い。クレームを恐れて「このバージョンで動作確認したから同じバージョンを当然ながらインストールしてね、察してね」みたいな感じで押しつけてはないだろうか。(全部を見た訳ではないのでアレではあるのだが)

この場合、納品物の完成度を担保するバージョンと、学習者が利用すべきバージョンは明らかに別物である。

Javaの場合、メジャーバージョン内の互換性は基本的に担保されている(そうじゃない場合(JDK 6u10)もたまにあるが)ので、そのバージョンの最新リビジョン「のみ」を原則として使うべきである。これはJDKもJREも同じ。特にJREなんぞは複数バージョン入れていてもいいことは基本的にない。常に最新版を使うべきである。

これが企業内システムの場合、特定バージョンで「寝かせる」事もこれまで恒常的に行われてきたのだが、JREの場合ブラウザーのプラグインにも結びついている関係上、当たり前の話だが更新しない訳にはいかないのである(OFFにできる機能が付いたのはついこないだ)。

これまでこのような当たり前の事実に目をつぶり、危険性を放置してきた文化が日本の暗黙文脈として容認されてきたんじゃないかと思う節が各所に見受けられたのだが、もっと厳密にバージョン管理したほうがいいんじゃないか、と思う次第である。

まあ、私はもはやコンサルでも何でもないので、単なるいち技術者からの提案である。とにかくJavaは常に最新版で使うべし。

※Java商用延長サポートを前提とした特殊な場合を除き、今からJDK 1.6(6), 1.5, 1.4, 1.3, 1.2, 1.1, 1.0の開発を始めるなんてのは以ての外である。JDK 7を使いましょう。

Leave a Reply