連載
» 2008年09月04日 10時00分 公開

安藤幸央のランダウン(42):開発者が知っておくべきJavaと仮想マシンの歴史

「Java News.jp(Javaに関する最新ニュース)」の安藤幸央氏が、CoolなプログラミングのためのノウハウやTIPS、筆者の経験などを「Rundown」(駆け足の要点説明)でお届けします(編集部)

[安藤幸央(yukio-andoh@exa-corp.co.jp),@IT]

歴史あるJavaとVM(Virtual Machine)、その生い立ち

 Javaは、1995年5月23日に開催されたデベロッパーカンファレンス「Sun World Expo」で初めて一般に公表されました。

 Java言語はもともと「Oak」というプログラミング言語に由来しています。1990年12月にスタートしたGreen Projectの一環として情報家電を制御するために開発された言語がOakでした。これはオフィスの窓から樫の木(Oak)が見えたことに由来しているようです。その後、Oakの商標がすでに使われていることが分かり、「Java」に改名されました。

 「Java」という言葉になった由来は、どうもはっきりとせず、諸説あります(参考:Java Technology: The Early Years)。

  • 開発チームがよく行くカフェで見掛けたJava(米口語でコーヒー)という文言
  • 開発チームの近所に「Java Street」という道があった
  • 当時マーケティング担当だったKim Polese氏が、響きの良い名前としてJavaを選択した
  • 開発者の頭文字「James gosling氏、Arthur Van hoff氏、Andy bechtolsheim」

 現在、Javaは単なる1つのコンピュータ言語にとどまらず多くのものに影響を与えています。Javaが影響を受けたプログラミング言語である「Smalltalk」の時代以前から、「Virtual Machine」(仮想マシン。以下、VM)という概念(環境)は考えられ、利用されてきました。PascalからPコードへのコンパイラと、Pコードインタプリタからなる、中間言語コンパイラも、いまにして考えると、Javaバイトコード的な扱いであったと振り返ることができます。

 「Javaの父」と呼ばれるJames Gosling氏が考えていたJavaのポリシーの1つに「Architecture Neutral : マシン環境に依存しない」というものがありました。Java VMとJavaバイトコードはそれを具現化する最良の仕組みでもあったのです。

 1995〜1996年のJavaが登場した年は、ほかにも以下のような言語が登場してきました。意外とJavaの登場は古い時代だったとの印象を受けるのではないでしょうか。

  • Perl 4.0
  • Python 1.0
  • Fortran 90
  • Visual Basic 1.0

Javaの栄光とその後

 Java黎明(れいめい)期のスローガンは以下のものでした。

Write once , run anywhere .
(一度書けば、どの環境でも動く)


 プラットフォームに依存しないプログラミング言語として多くのプログラマーに期待を抱かせ、「理想」とも思える環境を夢見させたスローガンでもありました。

 その一方、実際は夢のようなことはいっていられず、「そこら中でデバッグ・テストしなければいけない」(Write once, debug/test everywhere.)と揶揄(やゆ)されることもありました。その原因は、どこでも動くはずのJava VM環境が、その仕組み上OS環境ごとに違い、Java VMの実装もライセンスを受けたさまざまなベンダが手掛けたことに由来しています。

 そのまた一方で、Java/Java VMの思想は、その後のさまざまなプログラミング言語に影響を与えていきました。

JDK(Java Development Kit)の歴史

 Javaの開発環境であるJDK(Java Development Kit)、Javaの実行環境であるJRE(Java Runtime Environment)は数多くのOS向けに用意され、オープンソースのものから、メーカー製のものまで数多く存在します。基本はリファレンス実装の米サン・マイクロシステムズ製のものが広く使われています。

表1 JDK歴史
年月 出来事 コードネーム
1995年 5月 米サン・マイクロシステムズがJavaを正式発表
1996年 2月 JDK 1.0リリース
1997年 2月 JDK 1.1リリース
1998年 2月 JDK 1.2リリース
1998年 4月 JIT(Just In Time)コンパイラリリース
1999年 4月 HotSpotリリース
2000年 5月 JDK 1.3リリース Kestrel
2002年 3月 JDK 1.4リリース Merlin
2004年 9月 JDK 5.0リリース Tiger
2006年11月 Java SEとJava MEをオープンソース化(GPL 2)
2006年12月 JDK 6.0リリース Mustang
2007年 5月 JDK 7.0(OpenJDK)発表 Dolphin

 Javaの黎明(れいめい)期、多くの人々にJavaが知られ、広まった理由の1つは、WebブラウザにJava VMが組み込まれたことにあるでしょう。その当時のWebブラウザ開発のエキサイティングな様子は、雑誌『Wired』の古い記事「The Java Saga」で読むことができます。

 Webブラウザ上で動作するJavaアプレットの勢いも借りて、各OSベンダが米サン・マイクロシステムズからライセンス提供を受け、各OSプラットフォーム用のJava環境が続々とリリースされます。

 その一方、米マイクロソフトのWebブラウザ「Internet Explorer」(以下、IE)にJava VMが組み込まれたことは、歓迎とともに混乱を招きました。米マイクロソフトが提供したWindows 95/NT用のJava VM((MSJVM))が持つ「J/Direct」機能は高性能ながら、Win32 APIを直接呼び出せるという米マイクロソフト独自の実装が加えられていました。このJ/DirectはIE 4.0に含まれてリリースされました。ちょうどそのころ各ベンダから「100% Pure Java」を支持する動きもありました。

 その後、1997年10月にIE 4.0がJavaの互換性テストに劣るとして米サン・マイクロシステムズが米マイクロソフトを提訴しました。1998年11月に、米マイクロソフトがJava訴訟で敗訴の仮決定がされ、これを受けてIE用Java VMの改訂版がリリースされました。2004年4月には和解しましたが、結果として現在、通常の方法でMicrosoft Java VMを入手できません(参考「MSJVM の移行に関するよく寄せられる質問」)。

オープンソース系Java VMと、企業系Java VMの台頭

 2006年11月にJava SEとJava MEがGPL 2の下、完全にオープンソース化しました。

 それまでは、公式には対応していない特殊なプラットフォーム(CPU)や米サン・マイクロシステムズのJava VMが大きくなり過ぎたことに反発し、数多くのJava環境がリリースされました。中には自由に組み込めるライセンス方式を求めたものや、純粋な研究目的のものもあります。2008年9月現在も開発(メンテナンス)が続いており、安心して利用できるものも数多くあります。

 また、各企業が自社製品と親和性を高く特化した領域で高性能なサーバサイド専用のJava VMや携帯電話や家電製品に特化したJava VM、より高速に動作するJava VM環境などを商品化してきています。以下、アルファベット順でリストにしてみました。

  • AegisVM
    軽量、高速に動作することを目指したオープンソースのJava VM。2004年以降開発は停止している
  • Apache Harmony
    Apache Projectのスクラッチから開発したオープンソースでフリーなJava実装
  • Azul Compute Appliance(Azul Systems)
    Javaバイトコードの実行を専用プロセッサで行う環境。GC(Garbage Collection)にかかる時間が高速化されるなど、Java VMに最適化されたハードウェア環境を提供する
  • BEA JRockit
    動作性能や安定性に注力した米BEAによるJava VM実装。パフォーマンス性能の評判が高い。WebLogicと親和性が高い。OSなしの仮想化環境で動作するLiquid VM環境も販売されている
  • cacaovm
    JITを含む、Java 2実装。商用としても使えるが、主にVM研究のためのプロジェクト
  • C# Java Virtual Machine
    C#で実装されたJava VM。拡張が容易。C#とJavaの両方を知ることができる
  • FreeBSD Java Project
    FreeBSD Foundationによる、米サン・マイクロシステムズから公式にライセンスを受けて活動している移植版
  • IBM Java
    米IBMが実装したJava環境(Windows/Linux/AIX用)。WebSphere環境と親和性が高い
  • IBM J9
    同じく米IBMの開発したJava VM。WebSphere Micro Editionに含まれる
  • IcedTea(Red Hat)
    主にFedora環境で利用するための米Red Hatが提供するJava VM。OpenJDKとGNU Classpathがベースとなっている(Red Hat)
  • IKVM.NET
    .NET(Monoやマイクロソフトの.NET)ベースのJava環境。Javaバイトコードを.NETに変換して利用できる
  • jamaicaVM
    リアルタイムGC機能が搭載されたドイツ製のJava VM
  • JamVM
    商用利用可能なフル仕様ながらも、極めてサイズの小さいJava VM。インタプリタモードでのみ動作する
  • The JanosVM
    1つのVMで複数のプロセスを安定して動作することを目的としたJava VM。主に研究目的
  • Jbed Advanced CDC(エスマティック)
    ネットワーク機器や、情報家電など、組み込み向けのJava 環境。Windows CE/Mobileや各種リアルタイムOSに対応
  • JBlend(アプリックス)
    リアルタイムOS向けのJava VM。主に組み込み機器用として使われる。KDDI(au)のezplusの実行環境
  • Jikes RVM
    IBM Researchの研究に由来するJava VM。主にVM研究や設計のために使われているもの
  • joeq(上級)
    主に研究目的のための Java VM。Java2対応。2003年以降開発停止中
  • Jupiter
    分散コンピューティング専用の特殊なJava VM環境
  • JV-Lite(ACCESS)
    情報家電、携帯電話向けのJava環境。DoCoMoの携帯電話用Java実装「DoJa」の実行環境として使われている
  • Kaffe
    1996年に登場した歴史あるJava VM。50以上のプラットフォームに対応。Linuxのディストリビューションに含まれる場合もあり、既存のJava VMを置き換えることのできるレベルとして広く使われる
  • Open Runtime Platform
    Javaバイトコードに対応した中間言語のコンパイルに対応したランタイム環境
  • sableVM
    小型で高速なJava VM。保守や拡張しやすいクリーンルーム実装のJava VM。C言語による実装。2005年以降開発停止
  • waba
    PalmやZaurus、iPaq、GameBoyといった携帯端末(PDA)/ゲーム機用の極小構成のVM。Java仕様によく似てはいるがJavaそのものではない

 2008年9月現在のJava VM環境を網羅したつもりですが、抜けがあるかもしれません。読者がいま開発を行っている環境ではどのVMが使われているのか、調べてみてはいかがでしょうか。

いまも広がり続けるJava VM

携帯電話環境Google Androidの「Dalvik VM」

 2007年11月に発表された米Google(とAn Open Handset Alliance Project)が提供する携帯電話環境であるGoogle AndroidもJavaの血筋を引いたものです。Androidのアプリケーションは「Dalvik virtual machine」という専用のJava VM上で動作します。

 Javaのコードは、「Dalvik実行形式ファイル(.dex)」というjarファイルよりもコンパクトで展開の速い独自の「バイトコード」にコンパイルされ、Dalvik VM上で動かすことができます。Dalvik VMは携帯電話などの、遅いCPUや、少ないメモリの環境でも動作するようスリム化されたもので、簡素なアーキティクチャを指向している環境です。

 またライセンス形式は、Apache Licenseで提供され、携帯電話各メーカーが商用利用の際、コード改変できるようになっています。

iPhoneとJavaの微妙な関係

 2008年7月に日本でも3GのiPhoneが発売され、大きな騒ぎとなりました。開発者にとってもう1つの話題は、iPhone SDKで開発したアプリケーションがアップルのAppStoreを通じ、安価な手数料で全世界に配布・販売できることでした。

 米サン・マイクロシステムズのJava Marketing VPのEric Klein氏もiPhone向けのJava環境をリリースしたいとコメントしていましたが、実際はそう簡単にコトは進まないようです。

 理由はiPhone SDKやAppStoreのアプリケーション配布に関する仕組みや制限によるものです。iPhone上でJava VMを動作させることは自体は技術的には可能だそうです。ところが、現在のiPhoneアプリケーションの配布体系や制約を考えると、Java VM上で動作するJavaアプリやJavaツールを配布する方法がないのです。このことに関して米サン・マイクロシステムズは2008年9月現在も米アップルと交渉中と伝え聞いています。

 Javaには、Java ME環境から携帯電話に必要な機能に特化した「phoneME」」が整いつつあり、iPhoneがJavaプラットフォームとして利用できれば、既存のアプリケーション資産も含め、より多くのモバイルアプリケーションの登場が期待されます。

環境としてのJava VM、スクリプト言語への広がり

 Java VMは、もともとJavaを動作させるために設計されたため、Java言語以外のプログラミング言語を実行するのにはあまり適していません。ところが、開発者の要求はJava VMにおけるスクリプト言語のサポートまで広がっており、「the Da Vinci Machine Project」を中心として、数々のスクリプト言語がJava VM上で動作するようになってきています。代表的なものをいくつか挙げてみました(アルファベット順)。

 またネイティブコンパイラ自身も、llvm(Low Level Virtual Machine)のような、言語に対してVM環境を用意し、言語やプラットフォームとは独立した最適化を行うコンパイラ基盤も一般化してきています。

Java VMのこれから

 サーバ環境の構築には、台数分だけコンピュータが陣取る形態から、VMwareなどの仮想環境で、効率よくまとめる事例も多くなってきました。また、「many core / multi core」のCPU環境も、VM利用の流れを促進していると思われます。携帯電話などの組み込みデバイス環境も一昔前のパソコン並みの性能を誇っています。

 一風変わった例としては、携帯電話用のフルブラウザ「jig ブラウザ」はWebブラウザ内に独自のJava VMを持ち、Javaアプレット風の小さなアプリケーションが動作するような2重構造を持ったVM環境も実現されてきています。

 Javaはもうすでに「新しい」ものではなくなってきています。数多くの企業や教育機関で利用され、初めて学ぶプログラミング言語がJavaというプログラマーも多くなってきていることでしょう。コンピュータの細かな環境を気にすることなく(それはそれで技術的には大切な事柄ですが)手軽に最大限のパフォーマンスを引き出しつつ、アプリケーションやサービスを提供する日がやって来ているのです。

 Javaが黎明(れいめい)期に目指した「Write once, run anywhere.」の時代がいまこそやって来るのかもしれませんね。

 次回は2008年11月初めごろに公開の予定です。内容は未定ですが、読者の皆さんの興味を引き、役立つ記事にする予定です。何か取り上げてほしい内容などリクエストがありましたら、編集部@ITの掲示板までお知らせください。次回もどうぞよろしく。

プロフィール

安藤幸央(あんどう ゆきお)

安藤幸央

1970年北海道生まれ。現在、株式会社エクサ マルチメディアソリューションセンター所属。フォトリアリスティック3次元コンピュータグラフィックス、リアルタイムグラフィックスやネットワークを利用した各種開発業務に携わる。コンピュータ自動彩色システムや3次元イメージ検索システム大規模データ可視化システム、リアルタイムCG投影システム、建築業界、エンターテインメント向け3次元 CG ソフトの開発、インターネットベースのコンピュータグラフィックスシステムなどを手掛ける。また、Java、Web3D、OpenGL、3DCG の情報源となるWebページをまとめている。

ホームページ
Java News.jp(Javaに関する最新ニュース)

所属団体
OpenGL_Japan (Member)、SIGGRAPH TOKYO (Vice Chairman)

主な著書
「VRML 60分ガイド」(監訳、ソフトバンク)
これがJava だ! インターネットの新たな主役」(共著、日本経済新聞社)
The Java3D API仕様」(監修、アスキー)


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。