20 世紀なかばまで,電子回路は基本的にいつもおなじ仕事しかできませんでした. しかし,コンピュータの出現によって,プログラムをかえることによっておなじ電子回路をつかってさまざまな仕事ができるようになりました. プログラムは最初は機械語やアセンブリ言語で書かれましたが,やがて高級言語がつかわれるようになりました. また,Multics や IBM System 370 などにおいてコンピュータの記憶装置や他の資源が仮想化されることによって,複数のユーザが 1 台のコンピュータを同時に,あたかも自分だけがつかっているかのように,つかうことができるようになりました. いわゆるタイムシェアリング・システムの出現です.
こういうプログラマビリティの実現や仮想化は,その後のコンピュータの歴史のなかで,かたちをかえて何度もくりかえされてきました. そして,いま,またネットワークにおいてくりかえされようとしています.
私にとってコンピュータの出現や記憶の仮想化などは歴史的なできごとであって,私自身はそれを経験したわけではありません. しかし,私はスパコン (ベクトル・プロセッサ) の開発のなかで,ある意味で歴史が逆行するのを経験しました. スパコンにおいては処理が高速であることがまず重要であり,そのために初期のスパコンにおいては仮想記憶が犠牲にされました. しかし,スパコンにおいてもそれが必要なくなったわけではないので,まもなく再度とりいれられることになりました. ただし,スパコンに関しては最初からプログラミングには高級言語すなわち Fortran がつかわれました. そうでなければ売れないとかんがえられたからでしょう.
IP ネットワークにおいては,ネットワークを構成するためにルータがつかわれます. ルータはもともと汎用コンピュータだったのですが,ネットワークのために専用化され,プログラムすることはできなくなってしまいました. ここでもある意味の逆行がおこっています. しかし,10 数年まえからプログラマブルなネットワークつまり 「アクティブ・ネットワーク」 をつくろうといううごきがでてきました.
また,ネットワークをユーザやネットワーク・トラフィックごとの 「ポリシー」 によって制御しようという 「ポリシーベース・ネットワーキング」 はすでにある程度,実用化されています. この世界ではポリシーはプログラムだとはかんがえられていませんが,私はポリシーをプログラムと同様のしくみで部品からくみたてるしくみを提案してきました.
「アクティブ・ネットワーク」 のほうはまだ実用化されているとはいえませんが,最近では PlanetLab, GENI, Akari などのプロジェクトによってそれが加速されるようになってきました. 私自身もいまそういうなかにいます.
コンピュータが登場したときと同様に,アクティブ・ネットワークやポリシーの実現のために,まずプログラマブルなルータがつくられました. このプログラマブルなルータにおいて,スパコン開発におけるベクトル・プロセッサに相当するものがネットワーク・プロセッサです. ネットワーク・プロセッサはネットワーク・トラフィックを高速に処理できる性能とプログラマビリティをあわせて実現しています. しかし,いまのところは機種依存のアセンブリ言語や特殊な C 言語が使用されていて,いわゆる高級言語によってプログラムを記述できるようにはなっていません. また,高速処理のために仮想化機能を犠牲にしています. つまり,仮想化に関してはベクトル・プロセッサのときとおなじみちをたどっています.
そしてつぎには,やはりベクトル・プロセッサのときとおなじように,このプログラマブルなルータを複数のユーザが仮想化してつかえるようにしようということになってきました. いずれネットワーク・プロセッサが仮想化機能をもつようになるかもしれませんが,いまはそれがつかえないので,Multics 以前のやりかたをつかわざるをえません. 当時は仮想化のハードウェアがなくてもソフトウェアでくふうすれば,ユーザ間の干渉をなくせるということが主張されていました. そういう手法をネットワーク・プロセッサにもとづくルータにとりいれることができます. また,当然のことながら,ネットワーク・プロセッサにおいて高級言語がつかえるようにする研究もさかんにおこなわれています. そこではベクトル処理や並列処理のためのコンパイラにおけるのと同様に,最適化が重要な課題になっています. 当時とはいろいろちがうところもありますが,やはり歴史がふたたびくりかえしているという印象です.