ITmedia NEWS > セキュリティ >
セキュリティ・ホットトピックス

元・Java専門記者がLog4j 2脆弱性に見た「複雑性と魔神のかけら」 Javaの歴史とバザールの矛盾(4/6 ページ)

» 2022年01月31日 11時00分 公開
[星暁雄ITmedia]

 ジョイは、当時登場したばかりのPython言語など新しい世代のプログラミング言語と比べると、Java言語はモダンな言語仕様を取り入れていないと非難した。ゴスリンは怒ってオフィスから出ていき、通りを隔てた映画館まで映画を観にいってしまった。この時、新言語はゴスリンの手を離れてジョイのプロジェクトになるか、ゴスリンの言い分が通るか、二つに一つの状況だった。翌日、ジョイは折れ、言語はゴスリンのものになった。

 このときの「ジョイの指摘は全て正しかった」とその場に居合わせたノートンは書き記している。Java言語はその後長い年月をかけ、ジョイが指摘した「Javaに欠けていたもの」──例えばラムダ式などを取り入れることになる。

 1996年に開催されたJava開発者向けの会議である第1回JavaOneカンファレンスで、筆者はジェームズ・ゴスリンがStar 7の実機デモを見せる様子を目撃した。ゴスリンはこう語った。「Java開発チームのマントラ(合言葉)は“Keep it Simple”(単純さを保て)だった」。

 Javaの初期段階から多くの開発者らが関心を示した背景には、このようなゴスリンの哲学──というより「ノリ」に共感した人々が多かったからだと筆者は考えている。

 ゴスリンはビル・ジョイの圧力には屈しなかったわけだが、残念ながら“Keep it Simple”の理念を押し通すことはできなかった。Javaはエンタープライズ用途に向けた機能拡張で急速に成長し、当初の単純さは失われてしまったのである。

ビル・ジョイが一貫して目指したのは分散コンピューティング環境

 記者としての取材で入手した情報を突き合わせると、ビル・ジョイが本当に欲しかったものは単なるプログラミング言語ではなく分散コンピューティング環境だった──そのように筆者は考えている。ビル・ジョイが作り上げようとしていたのは、世界中のコンピュータをネットワークでつなぎ、あたかも一つの巨大なコンピュータであるかのように扱えるテクノロジーだった。

 ジョイはコンピュータサイエンスやインターネットの歴史上の偉人の一人だ。カリフォルニア大学バークレー校の大学院生として、最先端のUNIXのバージョンであるBSD(Berkeley Software Distribution)の開発に関わった。ジョイはBSDにページング仮想記憶を導入した。さらにviエディタとcsh(Cシェル)の作者としても知られている。

 それだけではない。ジョイらが開発したBSDがUNIXに付け加えた重要な機能として、TCP/IPスタックと、それをプログラム内で扱うAPIであるSocketインタフェースがある。ジョイがいなければ、インターネットのためのソフトウェア開発でUNIXが主役級のプラットフォームとなる歴史はなかったかもしれない。

 SocketインタフェースはTCP/IPのネットワーク機能を使うための最も低レベルのAPIである。その上に、ジョイらのチームは上位層のソフトウェア・スタックを構築していった。SunのUNIXマシンが搭載していたSunOSはSun RPCと呼ぶRPC(リモートプロシジャコール、遠隔手続き呼び出し)機能を搭載しており、これはネットワーク経由でファイルへのアクセスが可能なNFS(ネットワーク・ファイル・システム)の基盤となっていた。

Java誕生の背景にはC++の複雑さも?

 1980年代後半、Sunは、分散コンピューティングの機能を基本機能として備えた新世代のUNIXを構築するプロジェクトに取りかかっていた。これは「UNIX System V Release 5.0」と呼ばれるはずのものだった(なぜSunOSやSolarisではなく「UNIX」という名称なのか? それはUNIX戦争の……いや、話せば長くなるのでやめておこう。参考までに筆者のBlog記事のリンクを貼っておく。なお、ずっと後に米SCOが同じ名前のUNIXを開発することになるが、内容はまったくの別者である)。

 この新世代UNIXはネットワーク・ワイドな共有メモリを分散コンピューティングの基本機能として備え、そこにユーザープロセスのメモリ領域をmmapシステムコールでマップできると説明されていた(これは当時のビル・ジョイ本人が講演で語った内容である。筆者はこの情報を『日経エレクトロニクス』の記事で書いたが、他の筆者による記事ではこの情報を見たことはない)。

 また、従来のUNIXはC言語で構築されていたが、この新世代UNIXはC++で再構築するとされていた。この構想はSun内部では「メンロパーク・プロジェクト」と呼ばれていた。

 この構想はやがて挫折するのだが、このとき開発メンバーがC++の複雑さに直面したことが、後にC++よりシンプルさを狙ったJava言語が誕生した背景の一つになったものと筆者は考えている。

「アプレット」で衝撃デビュー インターネットネイティブな言語としてのJava

 Javaテクノロジーが1995年にデビューしたとき、人々を驚かせたのは「アプレット」(Applet)だった。当時のWebは文字と静止画が中心だったのだが、そこにWebブラウザの中でJavaアプレットが動き、Javaのマスコット「Duke」が手を振ったり宙返りをしたりするアニメーションを見て「Webが進化した!」と感じた人は多かったのである。

 JavaのマスコットDukeは、前述した端末「Star 7」のカトゥーンUI(マンガ風UI)で使われていたキャラクターを流用したものである。Dukeのキャラクターは今も使われている。

Dukeのイラスト(OpenJDK Wikiより)

Copyright © ITmedia, Inc. All Rights Reserved.