12月2日、
いつも訥々とした独特の口調でインタビューに答えるGosling氏ですが、
「クラウド」はバズワード、Javaは昔からやっている
――Pythonや.NETは、
それぞれGoogleとMicrosoftがクラウド対応を進めていますが、 Javaでのクラウドコンピューティングについて、 何か注目する動きがあれば教えてください。 ああクラウドね
(ため息)。クラウドコンピューティングなんてのはおかしなバズワードだよ。Webホスティングをクラスタ的に使うための技術で、 これまでも呼び名が違うだけで、 さまざまな人がJavaにおいても何年も努力してきた技術だ。こうしたインフラの中で最も大規模なものとしてAmazon EC2があるけれど、 これはJavaアプリケーションに対応したシステムだ。 基調講演で言ったように、
Javaの核となるJVM (Java Virtual Machine) にはいろいろな活用形態があるけど、 クラウドコンピューティングもその1つだ。JVMを使ってスクリプト言語を組み合わせることによって、 違う言語を連携して動作させることもできる。一方、 Javaのコードで書かれた機能をマシン間で簡単に移す機能がある。これをJava Spacesと呼んでいるが、 これを利用してコンピュータクラウドを形成できる。Java Spacesによって、 オペレーションとハードウェアを分離し、 ハードウェアによるアーキテクチャの違いをや言語の違いを吸収したクラウド作ることができるんだ。 ――JavaSpacesとはなつかしいですね。Sun内部でまだ使っているんですか?
ええと、
JavaSpacesの技術自体はもうかなり前にコミュニティに引き継がれていて、 我々は別の 「標準化」 の作業にとりかかっている。標準化された技術というのは、 同じ機能をもつ過去の技術に比べてパワーが落ちることもある。たとえばGlassFish v2に 「クラスタリングファシリティ」 というのがあるが、 これはクラウド的な振る舞いを実現するもの。ただし、 これは動作が遅い。なぜなら、 世界的な標準に則って実装を進めたからだ。これに対して、 JavaSpacesはJava世界のフィーチャに依存した実装なので、 他の言語との相性は悪いが、 動作は速い。 今ではJVM上にいろいろなスクリプト言語が乗るようになっている。以前は非常に難しかったことが実現しているんだ。このようなWebサービスの標準化委員会がやってきた方向というのは、
元々我々がJiniやJavaSpacesで達成したものよりも弱い。ただし、 複数の言語をサポートできるという強みを持っている。それが標準となっているので、 我々もそれに準拠するということだ。
Javaはスケールアップにも対応できる
――では逆に、
今後のコンピュータパワーの増大に伴って、 新しく実現していく機能やテクノロジとして考えられるものは何かありますか? うーん。これは幅広い分野をカバーしていて答えるのが難しいな。すでにすごいパワーで動くものがあるということは皆も見ている思うんだけど、
それがとくに現れているのはコンピュータゲームかもしれない。リアルで生きているような表現もできるようになってきた。基調講演のときに見せたデモも、 Java Game Engineを使ってもっとすごいものにできる。映画、 ストーリーテリングがこうした強力なゲームエンジン、 そしてネットワークの組み合わせでどんどん変わってきている。この間の大統領選挙でもインターネットを使った新しいクリエイティブな取り組みがあったし、 もっとバンド幅が広がると、 ダイナミックメディアの使われ方も変わってくると思うし、 一般の人がもっとジャーナリスティックに活動できるようになると思う。 ――マルチコアのシステムに限ると、
たとえば数千コアのシステムが実現した場合、 JVMはいまのモデルでスケールアップできるのか見通しはありますか? 今でも256コアまでは対応できているし、
Javaアプリケーションの中には何千ものスレッドをハンドリングしているものがある。これはまさに 「バーチャルコア」 と呼べるものだ。今後扱うコア数が増えたら、 想像のつかない問題も出てくるだろうけれど、 その問題の大部分はJVMそのものではなく、 その上で動くプログラムモデルに関わるものになると思う。プログラムで行う処理をマルチコアにどのようにマッピングしていくかということだ。さいわい、 エンタープライズのトランザクションについては、 現在でもマルチコアにうまく載せ替えることができている。GlassFishについてもそう。 今後、
数値演算アルゴリズムなどについては、 かなり難しいことになるだろうと思うけど、 それよりも一般的なスクトップモデルで問題になってくるのは、 グラフィックスになるだろう。どのようにビデオメモリを使い、 イメージをレンダリングしていくかというところだ。いまの段階ではこれはうまくいっている。レイトレーシングソフトなどは、 うまくマルチコアを使っている例だ。ただ、 今行っているやり方は、 マルチコアでの問題を全部解決するものではない。マルチコアに処理を分解するには、 それぞれのソフトウェアでの対応法しか見い出せていないんだ。 ――今のコンピュータパワーや状況の下で、
もしあなたが20代、 30代だったらどういう技術にチャレンジしたいですか? グラフィックスだね。3Dのモデリングツールなんかに関わっているだろう。もちろんJavaを使ってね
(笑)。
JDKのバージョンアップを巡る問題
――JDK 7について教えてください。とくにクロージャ導入について。
JDK 7にクロージャが入るかどうかは、
まだ決まっていない。僕は含まれるべきだと思っている。いまインタークラスというのがあって、 これはクロージャへの第一歩と言うべきものだが、 僕ははじめからクロージャを実装すればいいと思う。これは今一番ホットなトピックで、 コミュニティの意見が真っ二つになっている。僕が入っている派はクロージャを使えばアプリケーション開発がシンプルになるし、 開発者の作業も簡単になるという意見。反対派の意見は、 これ以上言語をいろいろいじるといずれ問題が出てくるかもしれない。最小限の変更にとどめるべきだというものだ。 後者の意見にも関係あるが、
コミュニティの問題は、 多くの参加者が、 JDKの新しいリリースが出てきても追いつけないという点だ。JDK6というのが現在の最新だが、 エンタープライズの人たちはいまだにJDK4を使っている人が多い。彼らをアップデートさせるのはとんでもなく大変なんだ。こうした人たちからは 「もっとゆっくりと進んでくれないとついて行けない」 という意見が出てきた。だから、 JDK6よりも7のほうが時間がかかっている。我々はJDKのアップグレードよりも、 JavaFXなどの周辺技術に注力しているんだ。 ――いまだにJDK1.
4などの古いJDKを使っている人がいるのはなぜでしょうか? まったく悲惨なことなのだけど、
一番大きな理由は技術的なことではない。つまりコストの問題なんだ。たとえばJDK1. 4.xで認定されているIBM WebSphereに10万ドルものお金を払っていると、 もしそれがJDK6で動いたとしても、 IBMからサポートを受けるためにはJDK 6で認定されたWebSphereをさらに10万ドルかけてアップデートしなければならない。WebLogicやOracleなどのJava製品もすべてそうだ。どの企業もそういうライセンス体系を取っているので、 今現在ちゃんと機能していれば、 わざわざ大金をかけて最新のJDKにバージョンアップすることはない。そのまま使い続けることになる。
スクリプト言語にもの申す
――JavaFXについて教えてください。プライマリリリースということですが、
MicrosoftやAdobeのRIA環境に比べると遅れを取っている印象があります。特徴はどこにあるのでしょう? ツールとしては遅れている印象があるかもしれない。でも
「何ができるか」 という点では進んでいると思う。JavaFXの下にあるJVMの機能が高度だからだ。JVMとJavaFXを組み合わせたパフォーマンスはすばらしいよ。演算部分などはJavaに任せることができるからね。もう1つの強みは、 すでにJavaが作り上げてきて、 JavaFXで利用できる標準APIがたくさんある点だ。新しくAPIを作る必要はほとんどないよ。弱みと言えばツール部分。まだシンプルなツールしか出ていない。だけど、 Adobe IllustratorやPhotoshopで作ったイメージをUIに統合できる機能がある。これは非常に便利だ。 ――Javaがもはやレガシーな言語としてCOBOLに例えられるような状況がありますが、
Javaの創始者としてはどう思われますか? その見方には大いに不満があるね! Rubyのコミュニティなんかでそういうことを言ってるようだけどね。Rubyが優れているのは素早くWebアプリケーションを構築できる点だ。だがRubyアプリケーションの実行パフォーマンスには改善の余地がある。つまりJavaのアプリケーションと比べてのろいんだ。Rubyは小さいアプリケーションには向いているが、
大きなものになるとどうだろう? 良い例がTwitterだ。あのUIパフォーマンスは悪夢だよ。 RubyはWebプレゼンテーション層だけを対象にしている。他の層も含めて見た場合にJavaに匹敵する言語は見あたらないね。ああいう言語が組込みや携帯プラットフォームに使えるか? 複雑な科学演算に対応できるか? そのあたりに近づいている気配すら見えないよ。JavaがまだまだCOBOLと一緒にされるには早いね。
――ではそういうスクリプト言語の中で一番興味を持っているものは?
うーん、
興味があるのはScalaかな。関数型言語で、 タスクが非常に簡単に書ける。マルチコアにも対応しやすいんだ。Fortressにも興味あるけど、 あれは動的言語とは言えないかも。非常に強力な言語だよ。科学演算でマルチコアで展開する処理ができるんだ。RubyやPythonはそういうレベルでマルチコアに対応しているとは言えない。 ――以前はプログラミングを始める人にまず勧めるのはJavaでしたが、
いまではJavaVM上でもいろいろなスクリプト言語が動くようになり、 非常に敷居も低いものがあります。これからプログラミングを勉強したい人に勧められる言語としては、 今でもやはりJavaですか? それは学ぼうとする人がどういう技術を実現したいか、
という方向性によると思うんだけど、 Javaならいろいろな目的で使うことができる。それに対してスクリプト言語は1つの目的―たとえばWebプレゼンテーション層のプログラミングだけ―にしか向かないことがある。もし大学で物理、 化学を究めようとしたら、 どのスクリプト言語もまったく役に立たない。でもJavaなら使える。そこがJavaの強みだ。複数の技術分野で役に立つ言語は他にはない。
何でも答えます! 個人的質問から会社の財務まで
――基調講演でEmacsを否定するようなことを言っておられましたが、
同じように昔は優れた技術であったものの、 これから使われなくなると思われるものはありますか? No technologies ever been die.-どんな技術も完全に死に絶えることはない
(笑)。奇妙なことにね。僕もかつてはFORTRANでプログラムしていたが、 いまだに使っている人がいるのには驚く。COBOLも残ってる。 ――Sunは財務的に苦しい状態が続いていますが、
実際はどうなのでしょう? またオープンソースモデルでどうやって儲けているのか、 とよく言われていますが、 このモデルは今後も続けていくのですか? Sunというのは今
「不気味」 な状態にあるんだけど、 よく考えてみたら、 全世界が同じような状態になっている。そんな中、 Sunのオープンソースビジネスは極めて健全で大きな利益を上げている。四半期ごとに出ている財務報告を見てもらったらわかると思うけど、 収益上の問題はハイエンドマシンの金融機関向けの売上部門に集中している。大手金融機関は大型ハイエンドシステムを買わなくなってしまったんだ。Sunの売上のうち15~20%がこうした部門から上がっているものだ。もし僕が1日だけ神様になれるとしたら、 オープンソース以外の事業はすべて破棄するね! アナリストの報告なんか信用できないよ。だって彼らはこの間までCDS (Credit default swap) やサブプライムローンを良いものだって言ってたのだから。 それに、
Sunの健全性という点では非常に摩訶不思議な状況になっている。Sunの株価があまりにも低いため、 今や我々の手持ちのキャッシュのほうが株価を上回っているんだ。いま銀行に30億ドルぶんの手持ち現金が眠っている。その点で見たらSunは極めて健全な状況ということになるよね。 ――Javaが出て13年になりますが、
これまであなたが一番苦労したことは? あたりまえかもしれないけど、
一番の問題はいつも技術的なことじゃない。それよりも問題だったのは 「業界政治」 的なことだ。Javaはコミュニティ指向の技術だが、 コミュニティには多くの企業や団体などのプレーヤが参加していて、 皆違った意見を持っている。その外交交渉 (diplomacy) が非常に難しかったよ。それを乗り切る秘訣は何かって? 忍耐 (patience) だよ (笑)。忍耐しかない。仏教徒にならなくちゃ (笑)。 ――外交交渉の中で、
したくなかった妥協はありますか? うーんそれは言えないよ
(笑)。もし言ったらいろいろな人々に迷惑がかかっちゃう。1つ例を挙げると 「Calendarクラス」 というのがある。もともと時間を表現するためだけのものだったのに、 いろんな人たちがいろんな意見を言って、 もちろんディベートもしたんだけど、 結果的にえらく複雑なものになってしまった。Calendarクラスを1度でも見ればわかると思うけど、 誰も気にしちゃいないよ! って機能が入っているんだ。日本の元号が入ってるし、 旧正月、 グレゴリオ歴、 ユリウス歴も入っている。これはプロテスタントが国教かどうかによるものなんだけど、 関係ない人にはどうでもいいことなんだ。ただこれを主張している人は必死になって 「これを入れなきゃダメなんだ!」 と言い張る。その結果こんなことになったという例だ。 ――最後に日本の開発者にメッセージを
Be in on!
(参加してください)。Javaにはたくさんのコミュニティがあります。テクノロジもあります。これまでも日本の開発者は非常に貢献してくれたけど、 まだまだ貢献できる余地はたくさんありますよ!