開発者が知っておくべきJavaと仮想マシンの歴史:安藤幸央のランダウン(42)
「Java News.jp(Javaに関する最新ニュース)」の安藤幸央氏が、CoolなプログラミングのためのノウハウやTIPS、筆者の経験などを「Rundown」(駆け足の要点説明)でお届けします(編集部)
歴史ある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向けに用意され、オープンソースのものから、メーカー製のものまで数多く存在します。基本はリファレンス実装の米サン・マイクロシステムズ製のものが広く使われています。
年月 | 出来事 | コードネーム | |
---|---|---|---|
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上で動作するようになってきています。代表的なものをいくつか挙げてみました(アルファベット順)。
- Armed Bear Common Lisp(Common Lisp)
- ColdFusionMX
- Groovy
- JavaFX
- JRuby(Ruby)
- JSqueak(Squeak)
- Jython(Python)
- Proccesing
- Rhino(JavaScript)
- Scala
またネイティブコンパイラ自身も、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.
関連記事
- いろいろなJavaを楽しむ
小山博史のJavaを楽しむ(2) Javaの実装には本家のサン以外にもApacheやGNU系などさまざまなものがある。用途に適したJavaを選択して開発に役立ててみよう - 実行速度に挑戦してきたJava VMの歴史
Javaの歴史は実行速度向上の歴史でもあった。今日のJava VMが完成するまでのアーキテクチャの変遷を振り返ることで、Java VMの理解をより深めることができる - 20世紀のJavaの歴史と21世紀への5つの提案
[コラム]米持幸久のJava Issue(2) コンピュータの歴史はまだ56年だ。21世紀のJavaはどうなるのか?大胆予測と5つの提言を行う - キャリアとプロファイルを覚えて「Hello Javaアプリ!」
携帯アプリを作って学ぶJava文法の基礎(2) 携帯電話のキャリアによってJavaアプリ開発用プロファイルが違うことをしっかり理解し、簡単なプログラムを作ってみましょう - Javaでコンパイラの基礎を理解する
コンパイラを意識したコーディングをすると、パフォーマンスが向上し、プログラミング力も向上します。Javaを通してその仕組みを理解しましょう