Muranaga's View

読書、美術鑑賞、ときにビジネスの日々

15年前に Kindle を作ろうとしていた

年末にオフィスを掃除していたら面白いものが出てきた。15年前にぼくたちが作ろうとしていた電子文書ビューア、今なら電子ブックリーダ Kindle のプロトタイプとも言うべき試作機である。PDV(Portable Document Viewer)というのがコード名であった。

Kindle と比べると大きくて武骨なプロトタイプであるが、ここにはいろいろな思いが詰まっている。少し思い出話をしてみることにする(一部ぼくの記憶違いがあるかもしれないが、ご容赦願いたい)。

このプロジェクトは1995年に構想され、開発した試作機は1997年に JavaOne をはじめとするいくつかの展示会で発表した。ウェブブラウザ Netscape Navigator が出たのが 1994年、Windows 95Java が 1995年。つまり1995年というのは、アカデミックな利用が中心だったインターネットが商用化に向けて動き出した年である。一般の消費者が家庭からアクセスするようになった頃だが、当時のインターネット接続は電話モデム経由であり、ブロードバンドでも常時接続でもなく、無線 LAN さえなかった。Yahoo! が産声を上げ、高性能検索エンジンとして DEC が開発した AltaVista があったが、GoogleAmazon もまだこの世にはいない。そういう時代に、A4 サイズのグレースケールの高精細反射型液晶で、紙に代わるような機器ができないか、ということで発進したプロジェクトであった。

今から考えると、とんでもないプロジェクトにぼくたちは挑んでいたのだと思う。機器開発はもちろんのこと、この機器に提供するコンテンツを含めたビジネスシステムをゼロから作る必要があった。いずれは一般消費者向けにしたいが、まずは法人向けの垂直市場だろうということで、ニュース配信を構想、PDV 専用ではないが、ニュースのアグリゲーションとフィルタリング・配信を手がける会社ニューズウォッチを1996年にスタートさせている。いや、これは話は逆で、先にニュース配信サービスのビジネスが企画され、その配信チャネルの一つとして PDV の開発が構想されたのかもしれない。

ぼく自身は1995年当時、米国の大学に滞在していたので(「Google Gears: Disconnected Operation の思い出」)、このビジネスモデル構築と機器の開発企画には関わらなかったのだが、1996年5月に帰国するとすぐに、PDV のシステムソフトウェアのリーダを任されることになった。

PDV は MIPS 互換の CPU と高精細グレースケール液晶を駆動する独自のグラフィックス・コントローラを持つ。その上で動く OS は Wind River Systems(ウィンドリバー)のリアルタイム OS、VxWorksWindRiver は Intel が買収してしまったが、当時は Unix と互換性のある組込み OS ベンダとして業界をリードする会社の一つであった。

帰国した時には既に大まかなソフトウェア構成は決まっており、ぼくたちのチームが主に担当したのは以下のシステムソフトウェアの移植・拡張である:

これらのソフトウェアの上で Java で書かれた Web ブラウザ HotJava を動かし、文書を表示するのである。HotJava の移植や、PDV のデバイスドライバの開発は別の技術者たちが担当しており、ぼくたちは X ウィンドウと Java の移植に集中した。

独自ハードウェアの上への移植ということで、さまざまな課題があった。まずはエミュレータ上で動かしたものを FPGA 版ハードに移植、さらにブレッドボード版、Flash ROM 版と動かしていく。その過程においてソフトウェアのバグなのか、ハードウェアのバグなのかをなかなか同定することができない。ハードウェアのバグだった場合、それをソフトウェアで回避できるかという話になるし、ハードウェアのスケジュールが後ろにずれると、ソフトウェアで挽回できるかという話になる。さらにぼくらのチームの移植作業が遅れると、その上の HotJava やアプリケーション層のスケジュールも後ろ倒しになる。ハード、ソフト両方の技術リーダを交えた進捗管理会議は、毎回、厳しいものになった。

ソフトウェア屋だったぼく自身、組込み OS の経験が初めてという問題もあった。つまりハードとソフトの境目で開発の仕事をするのが初めてであり、どこまでがソフト開発側で責任を取れるのか、自信が持てないままに判断を下さなければならない状況もあった。

VxWorks の制限もあった。NFS(Network File System)を動かすために必要なシステムコールが実装されていない、浮動小数点のライブラリが次期版でないとサポートされない、など事前にはわかっていなかった数々の課題を回避していく必要があった。

X ウィンドウの移植では独自のグレースケールに対応させることが焦点であった。しかもそれが 8bit ではなく 4bit のグレースケールであったため、X ウィンドウの基本的なデータ構造を一部作り変える必要があった。

移植で一番苦しんだのは、Java 仮想マシンと TinyAWT であった。もともと Solaris というしっかりした OS 上に作られたプログラムのため、メモリ管理のエラー処理のコードに甘いところがあり、VxWorks 上ではメモリ割り当てに失敗した後、メモリ内容を破壊しながら暴走するような現象に遭遇した。また VxWorksセマフォ実装の制限があり、Java のマルチスレッドの実装も大変であった。ネイティブ・スレッドを使うか、ライブラリ・スレッドを使うかで相当悩んだ。そしてマルチスレッドのタイミングに依存する再現性の低いバグを追い込むのに、デバッグはかなりの労力と時間を必要とした。

以上のようなさまざまな苦労を経て、PDV の試作機を完成させ、1997年4月に開催された国際展示会 JavaOne に出展した。これはある意味、大きな達成点であったと思う。しかし残念ながら、商用化に向けてさらにプロジェクトを進めるという意思決定をすることはできなかった。

機器開発という側面では、性能が思うように出せなかったことがある。また今の Kindle が搭載しているような e-Ink の技術がまだなく、消費電力が小さくて、紙に近いディスプレイを当時は実現することができなかった。技術面で成熟していなかったばかりではない。利用者環境・ビジネス環境の整備という点でも、ニュース・コンテンツを専用のデジタル機器で見るという発想は早過ぎたと思う。インターネットの革新スピードは想像以上に速いと考え、こういう機器の開発を急いだ訳だが、1997年時点では利用者ニーズがそこまで追いついておらず、収益の上がるビジネスとして組み立てることができなかった。

しかしプロジェクトがうまく行かなかった最大の要因は、ぼく自身が未熟だったことにある。達成すべき目標、置かれている状況、残された時間、技術の成熟度を見極めて、それを自分の制御下に置くことができなかった。ハード開発における自分のシステムソフトの経験とスキルが不足していた。そして何よりも大切なこと --- 最後まであきらめずにがんばって、目標とのギャップを埋めるだけの気概が欠けていた。

自分自身の未熟さのために、PDV は開発プロジェクトとしては失敗に終わったものの、ソフトウェア技術者として成長する機会であった。

  • プロジェクトリーダとしての経験
  • 組込みシステムという新しい領域での開発経験
  • 簡単にはあきらめない
  • チーム内はもちろん、チームを超えた綿密な face-to-face のコミュニケーション
  • 自分の責任範囲を超えて、あえて相手の領域に踏み込んでも、全体プロジェクトを前に進めることの大切さ
  • 与えられた資源の中で、最大限・最良の解を求め続けることが求められる中で、自分とチームのモチベーションを保つやり方・気持ちの持ち方

プロジェクトを通じて、こういったことを学んだ気がする。

あれから15年 --- 2010年を迎えた今、組込み機器がどんどんクラウド端末化する中、クラウド側で処理をするのか、機器側のプログラムで処理するのか、そのバランスをとったソフトウェア設計が求められている。今、インターネットビジネスを経営・運営する立場にあるぼくに、15年前のこのプロジェクトでの開発経験は、クラウド側と組込み機器側、両方がわかる視野の広さを与えてくれた。

それにしても当時の上司には「見切るのが早い。」と何度も叱られた。また「ハードウェアの領域まで踏み込んで来い。」とも言われた。当時はぼくも若くて、自分の責任範囲を全うするだけでめいっぱいという感じだったが、無理を承知でぼくにそういうリクエストをした上司の気持ちが、今ならば痛いほどよくわかる。

そうそう、研究所から工場へ単身赴任していたことのは、身重の妻が幼稚園児の面倒を見ている真っ最中であったことを思い出した。「喉元過ぎれば熱さを忘れる」というが、本当にその通りだ。当時は公私ともにタフな毎日が続いた。自分も若かったし、勢いでがんばれたと思う。

あのハードな日々を振り返りながら、今この瞬間にもまさにこういうプロジェクトにどっぷり浸かっている人たちが、たくさんいることを今さらのように思い返している。そして今ぼくたちがやるべきことを何なのかを考えている。

技術であれ営業であれ、どんな仕事でも、タフな経験を若い人にどんどん積ませること。そういう場を用意すること。それがぼくたちの年代のやるべきことだろうと思う。多少無理に思えても、高いハードルを設定して、それに取り組む。もちろんそのハードルを超えて成功してもらうのがいい。それがベストだ。しかし、たとえそのプロジェクトがうまく行かなかったとしても、そこで積んだ経験はその後の人生に大きく生きてくるはずだ。不可能に思えるゴールに向けて、与えられた条件の中で努力する経験。その中で一所懸命もがいてみること。「高いゴールを課さない限り、人間は成長しない」と改めて感じている。