文字コードの標準化について日記を書いたのだが、内容がいまいちだったのでボツにして気を取り直してUnicodeについて一言いっておくことにする。先日、といっても昨年(２００８年)の10月なんだけど、その中でちょと文字コードの標準化について話をしている。*1



20年前だったら絶対言えない本音を時効が来たのでばりばり言っている。上の発言は20年前だったらオフレコでも多分言えない。若い人は上記の歴史の証言を生まれていないからスルーしちゃうけど、時代は垂直統合と言って、メインフレーマーがハードウェア（メインフレーム）からOSからコンパイラからRDBMSからミドルウェアからアプリケーションのインテグレーションから運用まで一切合切握っていたというころである。

ユーザーをロックインして、スイッチングコストを高くして、利益を確保するというビジネスモデルである。かつての日本のメインフレーマーは、IBMに追いつけ追い越せでハードウェアやOSをいかにパクって、ユーザーを自社ハードに引き寄せるか、そのような商売をしていた。日立製作所と三菱電機の社員がIBMのOSのソースコードを違法に米国国外へ持ち出そうとして逮捕されたりした時代である。

本音と建前の標準化の世界である。

それで、私はそういう事情を全然知らないから「そうか6,000文字とか7,000文字もみんなと協力して新規に追加するなんて大変だな･･･」なんて素直に思ってるわけです。「今度の 0208は、文字数倍くらいになっちゃうのか･･･どうやって実装するのかな？ソフトウェアとか書き変えなくちゃいけないのかな？」なんてナイーブに思っちゃってて、会社に戻って「みんなと検討しないと、凄い大変なことになってますよ」なんてことを思ってるわけですよ。大きな勘違いなんだけど･･･。

若いって、業界のお作法を知らないから。

最初は2バイトの国際標準にしようというお話だったのだけど、それじゃあ足りないから4バイトにしよう。しかしバイトというのは何ビットか不明なので、Multi-Octet(8ビット)の標準を作るということになった。

例えば大漢和字典なんていう辞典には親字だけでだいたい50,000文字くらいあるから、そうすると16bitだとベターに使っても64,000ぐらいしか入らないんですね。

大漢和でもういっぱいいっぱいだとすると、中国とか韓国とかを持ってくると16bitではちょっと厳しいかなということが研究していくうちにだんだん分かってきて、今から20年前にですね「Apple」と「Xerox」の人たちが16bitで世界中の文字を表現しようということで、 Unicodeっていう仕様を提案するわけですね。

バージョン1.0のUnicodeっていうのは、あまりにも杜撰だったんで、そのまますぐには使い物にならなくて国際標準の世界では1度は否決されたんだけど、とりあえず16bitでガッツリ行こうぜっていうコンセプトのもとでもってきたんですね。

日本のベンダーをはじめ「IBM」も「DEC」もそうなんだけど、今ある文字コードを全部チャラにして丸っきり互換性のないものを導入するにはあまりにもコストがかかるし、「それはいくらなんでも厳しいんじゃない？」みたいな感じだったんですよ。

当時ISOで議論されていたドラフト(DIS 10646という)はデフォルト２オクテットで各国のJIS/GB/KSなどの標準をそのまま94*94の面を4つ用意してそこに埋めるという案だった。1オクテットのコードとの混在は考えていない、２オクテットのみという使い方。混在したい時はエスケープシーケンスでやってね。という今から考えても実にアバウトな設計だった。94*94なのでコントロールコード(0x00〜0x1f)および空白(0x20)、削除(0x7f)などの部分が避けられていた。

一方Unicodeの方は94*94ではなく、べたに0x0000~0xffffまで使うということで、1オクテットでみると０やコントロールコードなどが入っているので、そのままではCの文字列(char *)に使えないなどという問題もあった。

だけどマルチバイトのユニバーサルな文字コードっていうのは絶対に必要だねっていうのが、ベースのベースではありましたね。でも、ベースのベースではあったんだけどJISのX 0208ですら同意しようとしていない日本のベンダーは「そんなもんは絵空事で、20世紀中に出てくるわけねぇ」みたいな感じで、言うのは簡単だけど誰も使いやしないし実装もコスト高くなるし、いったい誰がそんなもん使うんだみたいな感じでしたね。Unicodeを皆で標準化しようなんていうことに関しては、むしろ足引っ張るみたいな感じだったんですよ。本来なら尊敬すべき偉い人だと思うんですけど、会社の事情でエンドユーザに対して迷惑かけてるなと、そういうことを平気でやるんだこの人たちはと、30歳ぐらいの青臭い私は思うわけですよ。

私は思うわけだ。世界のソフトウェアが初めから世界の言葉をサポートする世界がきたら素敵だなと思うわけだ。思うのは自由だ。それを実装するのは大変だけど。

一方で、Unicode作ってる連中の最初の提案はボロボロだったんだけど、この1つのものを皆で作ればソフトウェアの作りも簡単になるし、一発ソフトウェア書けばそれが世界中の人たちに使われるんだっていう極めて分かりやすい理想を掲げてるわけですよ。

そういうのはメインフレーマーじゃなくて「アップル」とか「マイクロソフト」とか「サン･マイクロ」とかいう割と小さい会社だったりして、徐々に私はそっちの方に共感していくわけですよ。

その16bit の文字を使うためにコンパイラはどういう風に変えなくちゃいけないのかとかね、それをするために「OSはどういうような仕組みにしなくちゃいけないのか」とかっていうのを必死になって考えて、例えば「マイクロソフト」ならWindowsNTにUnicodeをはじめから採用しますとか、Cのコンパイラに Unicode用のwchar_tみたいなのを作りますとかいう色んなことをベースからどんどんどんどん作っていくんですね。

それはそのUnicodeならUnicodeっていうことで、「アップル」も「IBM」も「サン･マイクロ」も「HP」も「DEC」のエンジニアも共同で協力してなにがしかを作るという感じでしたね。

もちろん企業間競争はあるんだけど、足の引っ張り合いじゃなくて、いいものを作るっていうことに関しては腹割ってやるっていうエンジニアの非常に真面目な技術に対するロイヤリティの高さっていうのを垣間見て「おぉこいつらすごいなぁ･･･」と、こういう人たちと仕事したら気持ちいいだろうなっていう風に思いましたね。

会社や国の壁を越えてコラボレーションするのは本当に面白い。素晴らしい経験だったと思う。

そこが非常に私にとってはアイロニーの部分なんです。日本の企画（まま）委員会に入ったが故にそういうものを見て、国際標準の世界を見、180度違うパラダイムがあって、垂直統合から水平統合に世の中が変わっていく瞬間を見、「DEC」っていう会社がなくなっちゃって、90年代になって「オラクル」っていう会社に転職をしたんですね。だからある意味で言うとメインフレーム型の垂直統合の典型的な会社から、水平統合の典型的な会社へ転職したんです。その表と裏にはやっぱりJISの委員会とISOの委員会の表と裏があったんですね。ISOも本音部分ではドロドロした部分があったとしても、いかに建前を尊重して理想に近づけていくかっていうことを各社の標準化委員会に出てきている人たちエキスパートは相当真面目にやってましたね。

国際標準の世界ももちろん政治的かけひきや本音と建前はあるけど、だけど、わたしのユメであるいつの日か世界のソフトウェアが初めから世界の言葉をサポートするんだというものに、本音がどうであれ、皆共感してくれたと思う。ユメをみんなで共有していたような気がする。

日本人は英語が不得意だからとか世界標準を作るのが不得意だからと訳知り顔で言う人がいるが、そんなのは嘘である。本当に標準を作りたいのであれば英語は問題ではない。志の問題だと思う。

で、当時の日本のメインフレーマに所属していた人たちは世界標準を心の底から作ることを望んでいなかった。少なくとも作ることに本気ではなかったように思う。

非常に残念である。

もし、Unicodeをよくすることに、彼らが協力していれば、日本のソフトウェア産業もひょっとしたら輸出産業になったかもしれないが、歴史はそうはならなかった。