2013-03-24

"カッコウはコンピュータに卵を産む(上/下)" Clifford Stoll 著

さらに一冊、本棚の奥から目線を送ってくるヤツがいる。たまには再読月間なるものがあってもええか。十年前であれば、一度読んだ本を読み返すなんて、専門書でもない限り考えもしなかった。ブログってヤツが、気まぐれの範疇を広げるのか?おまけに、推理小説ばりの展開が一気飲みを誘い、今日も朝日が眩しい。

カッコウといえば、種間托卵で知られる。托卵とは、他の鳥の巣に卵を産みつけ、仮親に育てさせる習性のこと。そこで、仮親が自分の卵だと思い込んで温めてくれるか?これが運命の分かれ目となる。ハッカーは、カッコウの生態とよく似たやり方でスーパーユーザになりすまし、コンピュータに卵を産みつける。システム管理者は、それに気づかず卵の実行を放置し続けるのだった。
かつてハッカーという言葉は、技術者魂を感じさせるものであったが、コンピュータ犯罪の代名詞へ変貌していく時代。この物語は、著者クリフォード・ストール自身が、コンピュータ侵入者を追跡した体験談を綴ったものである。彼はこの事件をきっかけにセキュリティの専門家となるが、あくまでも一介の天文学者であることを強調する。当初コンピュータの素人だったそうだが、システムを監視する辛抱強さは研究者の資質がなくては勤まらない。あらゆる現象や行動を日誌に記す執念。「文章のないところに現象はない」というのが、天文学者たる者の鉄則だという。いまやネットワークノードは天文学的な数字で点在する。しかも、宇宙と同じく、均等化よりもクラスタ化を望むかのように。そこに天文学者が関わるところに因縁めいたものがある。
研究能力は天才的な機転や着想にかかっていると思われがちだが、地道な努力と集中力、そして何よりも継続力が問われる。天才的な発想とは、普段から思考を試みている結果なのであろう。そして、ハッカーの側にも同じことが言えそうか。ここで紹介されるシステムへの侵入方法に、天才的な閃きがあるわけではない。むしろ独創性の欠乏を執念で補っていると言うべきか。その意味で、追跡する側と追跡される側の人間性は似ているのかもしれん。

時代は80年代と古く、コンピュータの脆弱性とユーザの認識は、今とは比べ物にならないだろう。だが、システムの安全性に関する問題は、本質的に変わっていない。それは、仮に完璧なセキュリティシステムが存在したとしても、操作するのは生身の人間だということである。パスワードが絶対に盗聴されないとしても、メモを貼ったり、デフォルトのまま放置したユーザも少なくない。完全な暗号鍵をこしらえたとしても、どこかに鍵を渡す伝言経路が存在する。すべてのユーザが危機管理に認識を高めたとしても、睡眠口座、永眠口座、幽霊口座のようなものが生じる。長期間使われない口座は俺のモノ!としてしまえば、ハッカーも銀行屋と同じ人種か。
だからといって怪しい者を片っ端から締め出しては、コンピュータネットワークの利便性を根本的に否定することになる。利便性とリスクのバランス、この問題は人間社会に永遠に付きまとうであろう。建て前では、軍、国防企業、ネットワーク運営機構など、どこのシステムも機密の厳重さを宣伝する。一旦、審査機関がシステムの安全性にお墨付きを与えれば、欠陥に関する情報は抑えこまれる。そして、ある程度の専門知識を持った一般ユーザの方が、その危険性をよく把握していたりするものだ。安全神話には、官僚化しやすいという特性がある。要するに、人間の思い込みってやつほど厄介なものはない。群衆パニックを恐れるあまりに肝心な情報が隠蔽されるという構図は、人間の政治的特質と言うべきであろう。ただの一人が問題を指摘しても、それを不都合に思う多数派によって揉み消させるのがオチよ。そこで今、オープンソースのような経済モデルがどこまで機能するかが問われている。いわば、民主主義の在り方のようなものが...

1. 侵入経路
物語は、ローレンス・バークレー研究所から始まる。BSD系unixを生んだカリフォルニア大学バークレー校のそば。この研究所は、かつてマンハッタン計画の一翼を担っていたという。だが、1950年代、主要研究はローレンス・リヴァモア研究所に移転し、機密の束縛から解放される。コンピュータの性能はやや劣るものの、ネットワークが自由に利用できる空気に研究者が群がる。
まだメインフレームが主力の時代とはいえ、人気機種はVAX。OSはDECのVMSとバークレー流unixが併用される。計算機室では、VMS信奉者とunix権威者が議論の応酬。著者クリフは、天文学研究のかたわらシステム管理者となる。90年代初頭でも、システム管理を専門技術とする意識が薄く、ちょいとマシンに詳しい者が仕事の合間にやったものだ。彼もその類いであろうか。
さて、ハッカーの侵入経路を眺めるだけでも、なにやら懐かしいものがある。その発端は75セント。コンピュータ使用料が75セントだけ合わない。原因究明は新米管理者にうってつけの仕事と思われた。使用料の請求がなければ、誰も侵入者に気づかないというお粗末さ。
侵入者は、バークレー研究所を足場に、Milnet経由で軍事施設や世界中の基地のコンピュータを物色してまわる。Milnetとは、米国防総省の軍事研究用ネットワークで、当初インターネットの前身だったARPANETから独立していたが、インターネットの一部となった。ちなみに、日本の研究機関に、JUNETというのがあった。ニュースの閲覧などで利用したものだが、これが日本におけるインターネットの前身になろうか。
侵入口は、telnetポート番号23と通信レート1200ボーを確認、すなわち、電話回線。バークレー研究所は、世界中のコンピュータを結ぶ通信サービス会社タイムネット(TYMNET)に加入していたという。この頃、既にパケット通信が主流のようだ。パケット経路を測定すると、到達時間が異常に遅い。侵入者は月の住人か?やがて逆探知によって、DATEX-Pネットワークからのアクセスが確認される。DATEX-Pは、タイムネットのドイツ版で、ブンデスポスト(ドイツ連邦郵便局)が運営管理しているという。なるほど、地球の裏側からの侵入であったか。とはいえ、アメリカからDATEX-Pにアクセスして、逆戻りしているかもしれない。逆探知の精度を高めるために偽の機密ファイルをちらつかせたりと罠を仕掛け、ドイツ当局は侵入者の名前と居所を押さえた。だが、FBIの正式な要請がなければ動けないという。しかも、外部に情報を漏らすことができない。クリフはただ指をくわえて、侵入者のコマンド監視を続けるのだった。

2. セキュリティホールと侵入の手口
侵入の手口は、atrun をまがいのファイルにすり替えて、システムが卵を返すというもの。unixシステムには、atrun を5分おきに実行する仕組みがある。その常駐デーモンは、atd。ちなみに、コマンド at はキューにスタックしたジョブを指定の時間に実行させるが、その仕掛けを利用したもの。当然、atrun は一般ユーザには手の届かないシステム領域に格納される。スーパーユーザの情報が漏れているのか?
GNU emacs には一つ、いかんともしがたい脆弱性があったという。誰でも、どこでもファイル転送ができるという開放的な思想なだけに、保護領域にもファイル転送ができてしまうとか。emacs開発者リチャード・ストールマンは、なによりも情報は万人の財産であると強く主張した人物。研究者たちが、GNUに群がったのは言うまでもない。しかも、多くのシステム管理者は、その穴を知らずに放置していたとか。ちなみに、guestユーザの権限や、ftp の anonymous がデフォルトで許可されていないか?などは最初にチェックするものだが、昔は穴を塞ぐよりも、とりあえず高価なマシンをネットワークにつないで、それから考えていたような気がする。
こういう穴だらけのシステムに対して、VMS信奉者はunixを揶揄する。だが、プログラム固有の穴は、ちょっと知識のある人なら誰でも知っていて、対処法の情報交換も盛んに行われていたという。むしろ問題にするならVMSの欠陥の方だという。バージョン4.5 にはトラック1台くぐれる穴があるとか。DECは穴を塞ぐソフトを配布しているが、外部にはひたすら隠していたという。ちょっと待て!VMSは、国家安全保障局が許可し、安全のお墨付きを与えていたではないか。一年間かけた検査では、DECがちょっと手を入れて、くぐり抜けたんだとか。既に5万台の欠陥コンピュータが出回っていたという。
いまやコンピュータシステムの脆弱性を、製造メーカ1社に委ねるのは危険である。この世に完璧な安全システムが存在しないとしたら、安心を買う方法には2つある。危険性を承知した上で自己防衛に励むか、危険性に目を背けて神に祈るか。尚、前者は情報公開という厄介なものが前提され、後者は知らぬが仏の原理が働く。そりゃ、幸せな方を選ぶかぁ...
ハッカーは、ps -eafg と叩いている。プロセス状態を表示するコマンドだ。unix系を使ったことがある人なら、ps aux を一度は叩いたことがあるだろう。fフラグがバークレー版にないことから、旧世代のunix信者だと分析している。
また、ハッカーはパスワードファイルをコピーしてまわっている。パスワードは暗号化されているが、これをどうするのか?どうやらパスワードを解読している模様。
さらに、ネットワークプログラムに目をつけている。telnet と rlogin のソースをコピーしようとする。いずれもユーザコマンドを送信するプログラムで、トロイの木馬を仕込むのにおあつらえ向き。telnet をちょいと手直しするだけで、パスワード盗用プログラムに変貌するのは言うまでもあるまい。今では、telnetを禁止して、sshにしているが、それで大丈夫なのかは分からん。
また、バークレー研究所で最も無防備なElxsiコンピュータが紹介される。建設設計グループが導入して一ヶ月ほど。ハッカーは、UUCPアカウントに入り込む。なんと、パスワードも聞かれない。おまけに、UUCPアカウントに最初から特権を与えている。思いがけずスーパーユーザになって慌てた模様。ハッカーは、Elxsiの性能を測定するプログラムを実行して、警戒心を煽らないように、そっと入り口を塞いで去っていった。

3. パスワード破り
パスワードファイルを取得したところで、文字列は暗号化されていて、解読はほぼ不可能である。当時の標準暗号は DES でアルゴリズムは公開されいてるが、暗号化方向は一方通行。ハッカーは、暗号解読のアルゴリズムを編み出したのか?その可能性を否定はしない。だが、人間が思いつく文字列は、だいたい何らかの意味をなす。しかも、覚えられるようなキーワードにするだろう。ハッカーは、片っ端から辞書にある単語を入力するという原始的な手法を用いているようだ。そして、辞書に載った単語から、暗号プログラムに通したリストを作るのは難しいことではない。生成された暗号文字列を照合させるだけで、パスワードを解読することができる。こういう指摘は古くからある。だから数字や特殊文字を混在させることが奨励される。
また、暗号解読のアルゴリズムを編み出したとしても、100%の精度を求める必要はない。25%でも、4回のトライで当たる計算。ちょっと根気のある人なら、すべてのユーザに対して10回づつぐらい試すだろう。ロールプレイングゲームなど、アイテムを探し出してパワーアップしていくようなストーリー性は、このような根気を要求する。解読できた時の快感を味わう心理原理は、ゲーム性の確率に支配されている。ユーザ名義がばれるだけで、しかも、ユーザの一人が貧弱なパスワードを設定しているだけで、かなり危険な状況にあるというわけだ。人為的なミスや悪行から完璧にシステムを守ることなどできるのだろうか?今の標準暗号は AES に代わったが、量子暗号が標準化されたとしても、鍵を受け渡す伝言経路は完全に保護できるのだろうか?

4. 官僚組織の重い腰
冷戦時代、東西ドイツは諜報活動の最前線。ハッカーはドイツ駐留米軍基地を物色している。ハッカーの侵入した企業は...

・ユニシス: 機密厳重が表看板のコンピュータメーカ。
・TRW: 軍用ならびに宇宙開発用コンピュータメーカ。
・SRI: 軍からコンピュータの機密保護システム設計を請け負っている。
・マイター: 軍用の機密厳重なコンピュータを設計し、NSAのコンピュータ安全監査を担当。
・BBN: Milnetを構築。

いずれも、政府から多額な補助金を受けとる羽振りのよい超大企業。機密保護システムの設計、製造、構築、監査に携わっていながら、自社コンピュータには出入り自由ときた。だが、銀行ネットワークには見向きもしない。機密情報をKGBにでも売るつもりか?
FBIは、たった75セントの被害?と門前払い。CIAとNSA(国家安全保障局)は興味を示すものの、管轄はFBIだと主張。空軍省OSI(特別捜査課)は、Milnetをいかにして防御すべきか苦悩するものの、具体的に動けない。国家コンピュータ安全センターは、コンピュータの保安基準を定めるのが仕事で、運用上の問題には関与しないと言い切る。んー...どこぞの原子力規制委員会みたいなことを。どこの国でも官僚の動きは鈍い。
しかーし、アメリカの高級官僚のレベルでは、ちと違う。CIAは陰ながらすぐに情報収集に動く。コンピュータ安全センターの科学主任ボブ・モリスは、クリフをNSAの副長官ハリー・ダニエルズと面会させる。モリスは、AT&Tベル研究所でUnixのパスワード保護機構を開発した人物だという。彼は、プログラムやシステム固有の問題があるにせよ、それを把握するのはシステム管理者の責任だと指摘している。
さらに、NSAの副長官という雲の上のような存在が、第二次大戦中、日本の暗号機をいじくっていた人物で、ネットワークの専門用語がすらすらと通じる。しかも、この手の事件で記録の大切さを十分理解している。現場をしっかりと把握し、危機意識を持ったお偉いさんが、官僚組織の中に一人いるだけで国家は救われるのだろう。おそらく、組織の優秀さというものは、こういう一人に支えられるものなのだろう。大概の組織では、こういう人物ほど異端児扱いされ、葬られるものだが...

5. ウィルス騒動
これはハッカー事件とは関係ないが、ウィルスが増殖する被害が発生し、全米のunix達人たちが立ち上がった様子を紹介してくれる。組織化されていない技術集団が、暗黙の組織となるのは壮観!
ウィルスはメールシステムを攻撃。sendmailの穴から侵入し、finger と telnet で、他のコンピュータに乗り移る。通常、sendmailに電子メールを送りつければ、滞りなく宛先に届いて用は足りる。だが、異常があった場合、発信者は誤りを検出して、デバックモードを要求することができる。これが裏口。デバックモードでは、コマンドを受け付ける。ここに、ウィルスが実行されるように仕組まれたという。中には、sendmailの穴を悪用されないように修正している管理者もいたそうな。
もう一つのルートが、finger デーモン。fingerはユーザ情報を表示するコマンド。これは、512文字の容量がある。ウィルスは、536文字を送りつけた。はみ出した24文字はどうなるか?コマンドとして実行されるだけのことよ。
ただ、いずれも繁殖するだけでデータを破壊しないのだから、ウィルスというよりワームか。ネットワーク負荷を増大させるのだから、有害であることに違いはない。犯人の名は、ロバート・T・モリス。ボブ・モリスの息子だ。あのポール・グレアムは息子モリスにメールで聞いている。輝ける大作戦の成り行きは?と。2000台を麻痺させたが、あまり出来のいいワームではなかったらしい。これで、父モリスのNSAでの立場が悪くなる。ワームにせよ、ウィルスにせよ、性質が分かれば治療できる。この場合、sendmail と finger デーモンの穴を塞いで、パスワードを変更し、システムに増殖したウィルスを除去すればいい。とはいえ、そう簡単でもないだろう。ウィルスは2日ほどで撃退したという。結果的に、NSAの息子のおかげでシステムの脆弱性の認識を高めることになった。
いまや、パスワードの盗用被害はますます勢いを増し、インターネットは国際謀略の手段と化した。ネットワークという巨大な怪物を相手取るのは、あくまでも生身の人間であることに変わりはない。利便性とリスクのトレードオフとは、自由と平等の関係と類似したものに映る。

2013-03-17

"超マシン誕生" Tracy Kidder 著

なにやら忘れかけているものを思い出させてくれる...ようなヤツを、本棚の奥からもう一冊。こいつも純米酒と一緒に読み流すつもりでいたが、またもや朝日が眩しい。
本書には、かなり古いイメージがある。だが、PALを採用する話も飛び出すから、大して世代が変わらないのか?ちょっとショック!ちなみに、GALやらPALの話題で盛り上がっていると、夜の社交場の専門用語ですか?と若年どもが近寄ってきた...

原題 "The Soul of a New Machine" は、1982年ピューリッツアー賞を獲得した書。もう古典の部類に入るのだろうか。この物語は、データゼネラル社製 32bitミニコンピュータ、Eclipse MV/8000 の誕生秘話である。それは、「自己実現、達成感、自己充足」のための冒険であったとさ。
かつて技術大国と言われながら、コンピュータサイエンスがあまり評価されない我が国で、20年前から指摘されてきた空洞化が現実のものとなった。売上至上主義が蔓延し、技術者たちを道具の一部として売り飛ばしてきた。一方、金融主義や商業主義の猛烈なアメリカでさえ、設計開発の醍醐味を評価する風潮はいまだ衰えない。
「ヨーロッパの大伽藍を建てた石工たちは、金のためだけに働いたのではない。彼らは神のために寺院をつくったのだ。それは、人生を意義あるものにする仕事だった。ほかでもない、そういう仕事をウエストとその配下の技術者たちは求めていたのだと私は思う。
事実、彼ら自身、ことあるごとに金のために働いているのではないと言った。イーグル誕生の余波の中で、グループのある者は、働きに見合うだけの金も名誉も得ていないと思っていた。また、そのことでいささかむかっ肚を立てているのだと語った者もいる。だがそういう技術者たちでさえ、プロジェクトそのものについて語る時には、かつてと同様の熱っぽさで語り、その顔を紅潮させたものだった。」

プロジェクトが家畜小屋のような場所から始まる様子には、懐かしいものを感じる。地下倉庫のような所から生まれたベンチャー企業も多いことだろう。膝が触れるような人口密度の高い空間から。自由奔放な酸素とは、そんな薄暗い劣悪な環境から光合成されるものかもしれん。
しかし、事業が軌道に乗り、立派なオフィスを構えた途端に、銀行屋が押し寄せる。今まで見向きもしなかったくせに。融資のために奇妙な監査が出入りするようになると、組織は融通性を失う。外部から資金を入れて、優秀な技術者が出ていくのでは、何をやっているのやら?そりゃ、収入が多いに越したことはない。だが、技術屋が何より欲するものは、自由奔放な空気なのだ。
ボスのトム・ウエストは、メンバーたちを退屈させず、大概の自由裁量を認める。だが現実に、メンバーに自由裁量を与えると、無秩序になると恐れるマネージャが多い。縛り付けて、それでうまくいっているのか?などと自問しないのだろうか?技術屋たちの頑なな気持ちは妥協を許さない。それは、サービス残業などとは次元が違う。気違いじみた仕事のやり方で、数日だって徹夜する。魔物にでも憑かれたような集中力は、ある種の麻薬症状とでも言っておこうか。この快感がお偉方には分からない。事なかれ主義で出世してきた連中に分かるはずもないか。管理職にイエスマンたちが陣取れば、技術者も自らの責任範囲を宣言して自衛に走る。
また、日本には、コミュニケーションを図るために忘年会や親睦会といった行事を重視する組織が多い。欧米でもチームでパーティをやったりするが、ちと違って義務化しようとするのだ。不参加を査定対象にすると脅す組織もあると聞く。群れることをチームワークだと勘違いしているのか?哲学的な共通意識があれば、無理やり仲間意識を煽る必要もあるまいに。とはいえ、どうしても人間性で合わない者同士がいる。組織には、上司と部下が互いに選び合えるぐらいの緊張感があっていい。仲良しグループを募ってもうまくいかないであろうから。
ところで、飲みに行く時は断りやすい空気を漂わせておきたい。断る理由に、今日は気分じゃないぐらいでOK、観たい番組があるからぐらいでOK。自然に集う空間だから居心地がいい。しかーし、そろそろ帰ろうかなぁ...と席を立つと、飲みに行くぞ!と勝手に翻訳する奴らがいる。たまには断れよ!と、鏡の向こうで赤い顔をしたプロジェクトリーダが愚痴を漏らしていた。

1.  Eagle vs. Fountainhead
今は、ミニコンピュータなんて死語であろうか。IBMメインフレームが主流の時代、DECはミニコンピュータ市場を開拓する。DEC社はとっくにお亡くなりになったが、80年代末から90年代にかけて、この会社に憧れる電子工学科の学生で溢れていた。本物語には、あの懐かしいVAXも登場する。
データゼネラル社は、DECの退職組を中心に組織され、世界第2位のミニコンピュータメーカにまで成長する。当初16bit戦争であったが、VAXシリーズの登場が32bit戦争の引き金となる。
プロジェクトリーダのウエストは、せっかちを絵に描いたような人物だという。いちいち説明する暇もなければ、波長が合わないとすぐに失望するのだそうな。そんな彼がターゲットとしたのは、VAX 11/780。
1976年、Fountainhead Project(FHP)を開始。ところが、開発部隊が本拠地マサチューセッツからノースカロライナへ移転することになると、士気は低下する。従業員たちは家族ごと大移動しなければならないことに反発。そして、残ったエンジニアたちがエレガントなマシンを作る決意をする。彼らは新しいマシン名をEGOと名付けた。FHPのアルファベットを一文字ずつ遡ると、EGOとなる。FHPよりも先んずるという意味か。ちなみに、「2001年宇宙の旅」中で猛り狂うコンピュータHALの名は、IBMの文字を同じように遡ったところからきているそうな。狂乱を先んずるという意味かは知らん。
会社の本気度はチーム編成に見て取れる。FHPの50人体制に対して、EGOの5人。だが、得てして少数精鋭という自負が士気を高める。もし成功すれば英雄になれるし。
1978年、FHPが成果を上げられずにいる中、Eagle Projectを開始。Eagleという言葉は、略すとEGOに近い。白紙のようで白紙でないようなプロジェクト。そして、非公式的で迅速に事を成す。会社とは無関係にやっているような奴ら、と漏らす古株もいる。チーム固有の空気を醸し出すのは、縄張り意識の顕れであろう。好転したプロジェクトにありがちな現象で、優秀なチームという誇りが、そうさせる。
しかし、大成功を収めたとはいえ、プロジェクト解散前に醜態を見せる場面もある。特許申請のための会合で、誰が何に寄与したか非難の応酬。やはり人の子か。これらのプロジェクトには、最終的に約300人が携わったという。大所帯ともなると、何かと揉めるものらしい。

2. 設計開発の醍醐味
プロジェクトリーダのウエストはアーキテクチャの専門家を必要としていた。コンピュータ構造を知り尽くしたスチーブ・ワラックに白刃の矢を立てる。だが、ワラックは、会社が Eagle Project に本腰なのか疑っていた。そして、社長エドソン・デ・カストロに直接聞きに行く。社長室のドアは、意見のある技術者に常に開放されていたという。社長の答えはただ一つ、32bit Eclipseの実現!それは、Fountainhead でも、Eagle でもいいはず。ワラックにとって、想像しうる最高の仕事とは、完全無欠の夢のコンピュータを作ることだったという。最低の仕事とはガラクタを作らされること、これが技術者の本音であろう。プロジェクトリーダが最も気を使うところである。
アーキテクチャにとって、とりわけ命令セットの設計が要で、適切な命令セットの選択はコンピュータの性能を決定づける。ワラックは、VAXの命令セットをスーパー命令セットと呼んでいる。これは互換性を犠牲にしていた。だが、データゼネラルは、Eclipse の古い技術との完全互換を目指していた。
マイクロコードの利点は融通性にある。とはいえ、今の融通性とはかなり抽象度が違う。これをソフトウェアというかは微妙か。カットアンドトライ宗教は、ハードウェアとマイクロコードの双方を熟知した技術者へと進化させる。今時、マイクロコードを書くプログラマなんて、とんと見かけない。マイクロコードという用語も通じないか。スクラッチパッドという用語は、逆に携帯端末で耳にするようになった。巨大マシンが小型化しただけといえば、そうなんだけど。物理的な構造が大して変わらなければ、用語も受け継がれるところがある。だが、媒体や手段の違いでニュアンスも変化する。社内であってもグループ間で専門用語の使い方が違ったり、通信制御や画像処理といった分野の違いでも用語のニュアンスが違ったりする。自然言語と同様、専門用語も文化の影響を受けやすい。
さて、最先端のマシン設計では、その時代の最高周波数との戦いを余儀なくされる。それは、時間の征服に他ならず、周波数、スケジュール、リリース...すべてがトラブルの根元にある。時間は人々を殺気立たせ、ナノ秒単位で押し寄せてきやがる。周波数との戦いはノイズとの戦いに転化され、極めてアナログ的なところがある。いや、山勘的か。ハードウェアは、今ほどソフトウェアの言いなりになってはくれない。電圧レベルを全体的に下げると、ノイズレベルが相対的に下がり、スレッシュホールドとの比で、特定の電圧範囲だけ正常動作するとか...プローブを当てると正常動作するが、離すとノイズに埋没するとか...実験室ではうまくいっても、展示会場に持っていくと、たちまち誤動作するとか...その原因は、実験机は古びた年季の入った木製だが、展示会場はスチール製の机で反射でノイズが拡散されるとか...むかーしの思い出が蘇る。汚い配線、汚いコード、汚い設計は、すべて誤動作の要因となる。マシンの性能を損なう手段なんて事欠かん!
設計で最も恐ろしいのは、地雷を踏むこと、いや、知らぬうちに自ら地雷を埋めることか。したがって、熟練者の設計は、恐ろしく几帳面で配線や配置が美しく、匠の域を感じる。また、技術の根幹には、スリリングを楽しむことがある。時間に余裕ができれば、面白半分にトラップを作る衝動に駆られる。これを冒険心というかは知らん。

2013-03-10

"ハッカーズ" Steven Levy 著

言語設計者たちのインタビュー(前記事)を聞いていると、なんとなく本棚の古典に目が留まる。もう20年かぁ...600ページもの分厚さ、風呂上がりのビールでちょっくら読み流すつもりが、いつの間にか朝日が眩しい。こういう本は、何か忘れかけているものを思い出させてくれる...ような気がする。
「汝、それに触れるべからず!と決めつける文化を否定すること、自分の創造力でそいつを否定していくことが必要なんだ!」

今日、ハッカーという言葉に悪い印象を与えることが多い。自称ハッカーってのがのさぼり、ネット社会ではいつの間にか一般市民が犯罪者に仕立てられる時代、いずれも本来の意味から酷く逸脱していくように映る。ハッカー倫理とは、けして他人に迷惑をかけるものでもなれば、自己顕示欲を誇示するものでもなかろう。ましてや、権威主義や商業主義といった脂ぎった発想から生じるものでもなければ、特許紛争に躍起になるものでもなかろう。マシンを知り尽くし、能力を限界まで引き出そうとする人で、子供の純真な好奇心を哲学的に高める実験。そう、知的冒険という意味であった。
本書は、かつて電子工学の創造性を純粋に謳歌した人たちが居たことを物語る。ハッカーとは、技術への狂気を生き甲斐へと昇華させた連中!とでも言っておこうか。コンピュータは命令する者の愚かさを忠実に反映しやがる。そこに快感があるのか。ある種の自虐的楽観主義か。彼らはマシンをハックしながら、日常生活をハックし、その究極に人生をハックしようとする。コンピュータ設計とは、ある種の人生ゲームを作っているということかもしれん。

本書は、ハッカーの起源を50年代末から60年代のMIT(マサチューセッツ工科大学)のAIラボに遡る。そこには、テック鉄道模型クラブ(TMRC)という冒険家の集まりがあったとさ。彼らは、スリリングな喜びを感じる作品や計画を「ハック」と呼ぶ。ハッカー主義を奨励した二人の教授も見逃せない。マービン・ミンスキーと Lisp のジョン・マッカーシー。それは、メガマシン IBM704 を取り巻く官僚主義との戦いから始まった。
こういう物語は、昔のTSS(タイムシェアリングシステム)を思い出させる。最悪なのはユーザ使用量に対する課金システム。同じ会社の汎用機でありながら、各部署に使用料を請求しやがる。まさに縦割り官僚組織。ちょっとしたシミュレーションを試すにも、予算にCPU時間、メモリ使用量、ディスクスペースを申請しなければならなかった。コンピュータが計算していなくても、どうせアイドリング状態にあるのに。1人にパソコン1台なんて夢のような時代であった。
ここで紹介される伝説的なソフトウェアハッカーは、リチャード・グリーンブラットとビル・ゴスパー。この頃のハッカーたちは、BASICを能力の発揮できないファシスト言語と見なしている。とはいえ、コンピュータを凡人に近づけてくれたのも事実。やがてゲームなどの多彩な機能が要求されると、抽象化言語の重要性を認めていくことになる。
アナログ錬金術師スチュアート・ネルソンは、PDP-1 を接続して電話システムをハックしたという。70年代になると、Intel 8080チップが登場。Altair 8800(1974年、MITS社)は、これを搭載したコンピュータキット。メモリはわずか 256byte で入出力装置がなく、フロントスィッチでパチパチさせながら直接メモリにデータを入力する仕組み。見えず、聞こえず、口のきけない三重苦の状態にあったという。当初から本体よりも拡張基板に注目され、ハードウェアハッカーを覚醒させる。合言葉は、自家製コンピュータを楽しもうぜ!「ブートストラップ」は、ハードウェアハッカーたちが作った用語の一例。リー・フェルゼンスタインのジャンク屋流と、スティーブ・ドンピアの音楽演奏は技術魂をくすぐる。
しかし、80年代になると、ゲーム業界が急激に成長し、商業主義の波が押し寄せる。この頃、ベンチャーの介入がはじまる。ハッカーたちは著作権や印税の誘惑を知り、ハッカー倫理は終焉を迎えたとされる。しかし、ゲームがコンピュータの大衆化を加速させたのは間違いない。そんな潮流にあっても、ジョン・ハリスは生まれながらのゲームハッカーだったという。彼には異性人が異星人に見えるのかは知らんが、女性にはただ憧れるだけ。ハッカーたちは共通してあまり女っ気がない。それどころか、この物語に女性ハッカーが見当たらないのはなぜ?ハッカーたちには、どこか社会嫌いや人間嫌いなところがある。修行に女は必要ない!ってか?いや、必要だ!せめて体の触れ合いぐらいは仮想化を避けたい。んー...色と欲の酔っ払いには、ハッカー倫理は縁遠きものらしい。
ちなみに、電子工学科のおいらのクラスには、約100人の中に女子生徒が2人いて、アイドルでもないが中心的に振舞っていた。一方、薬学科の友人のクラスに遊びに行くと、約100人の中に男子生徒が20人ぐらい、ひそひそ話をしながら行儀よく座っていた。同じ少数派でありながら堂々とした態度を見せつけられると、社交性では女性の方がはるかにたくましく映ったものである。

そして25年後、MITで最後の真性ハッカーと称すリチャード・ストールマンは、古き善きハッカー文化が死につつあると嘆く。ストールマンといえば、emacs の開発者として知られる。あらゆる文化で最も活気に溢れる時代は、その黎明期にあろうか。奇妙な常識化が進むよりは、馬鹿にされるぐらいでちょうどいい。歴史を振り返れば、あらゆる革命的な市民運動が、その純粋な姿を保ち切れなかった。革命児によってもたらされた組織でさえ、やがて官僚化する運命にある。業界が成熟するということは、マーケットが出来上がるということ。コモディティ化を促進しながら携わる人々が凡庸化する。そして、枯渇し、飽きられ、自滅していくのか?消費主義は、消耗主義へ変貌し、消滅主義へ導かれるのかは知らん。ハッカー倫理も例外ではない。伝道師たちによって庶民に広まると暴走を始める。無法者の割合が変わらなくても絶対数が増えると、そこに奇妙な群衆の波が生じる。やはり、シャングリ・ラのような世間の目に晒してはならない領域があるのだろうか?

1. ハッカーとノンハッカー
ハッカーとノンハッカーを分けるものは、アップル社を創設した二人のスティーブに見てとれる。スティーブ・ジョブズは、いまや伝説的な実業家とされる。だが、スティーブ・ウォズニャックの天才的な設計がなければ、Apple II が歴史的なコンピュータとなることはなかっただろう。技術者には、ウォズの名の方が馴染みがあるかもしれない。会社を作るということは、金儲けに関わるということ。それは、ハッカーとして一線を越える行為でもある。ウォズはアップル社を去った。
なにも商業主義が悪と言うつもりはない。技術を徹底的に探求するには金がかかるし、何事も成長には投資が必要である。書籍も買えない貧乏では学ぶことすら難しい。ただ、成功の証がフェラーリやポルシェを何台も所有するのでは、ちと違う。一流の技術を持ち、優れたビジネスパートナーに恵まれ、巨額を手にすることが可能となれば、人はどうなるのだろうか?どれだけ純真さを守る力があるというのか?歳を重ね、経験を重ねると、理性的になるかと言えば、それも怪しい。商売戦略では、巧みな駆け引きを覚え、出し抜くことに注力する。そして、自虐的楽観主義は、自愛的悲観主義に変貌する。ただし、ここで言う自愛とは、他人のせいにすること。人間ってやつは、肉体も精神も腐っていくのだろうか?どうりで、大人になると、足が臭くなり、口が臭くなり、酒席で醜態を演じるわけよ。
近年、商業的成功者が、ますますもてはやされる傾向にある。その境界は、ビル・ゲイツあたりになろうか。MS-DOS が IBM PC の事実上の標準となれば、Windows が Mac の特長であったGUIの美味しいところを持っていく。今では、アップルの方が革新的イメージを強く与えるが、これらを革新的精神と言うのかは知らん。マスメディアを味方につけると何かと都合がいいのは、いつの時代も同じ。あらゆる業界で、二番煎じ、三番煎じがうまいことやる。コンピュータフェアの発起人やブームに乗るなど、政治的振る舞いや宣伝能力に長けた人が大儲けをする。Lispマシンを福音するにも、ある程度の商業化は必要であろう。だが、ハッカー倫理に照らし合わせれば妥協を許さない。商業的に成功したものが、技術的に優れているとは言えない。そこそこ使えるぐらいでも、何か新しい風をもたらしそうだという空気を与えるだけで、人々は群がる。社会は感情で動くもの。それが現実だ。
しかし、本当の意味で社会を支えているのは、草分け的な活動を地道にしている人たちであろう。人間社会には、一番やっている奴が、あまりお金を貰わないという法則でもあるのだろうか?あるいは、権威や大金は人を惑わせるが、そんな脂ぎった精神と付き合わずに済むということであろうか?

2. 自由奔放と民主主義
ハッカー精神が受け継がれるコミュニティと言えば、オープンソースのような経済モデルは、民主的な草分け運動によって成功した例と言えそうか。しかし、普通の民主主義と、ちと違う。誰でも参加できるとはいえ、議論のレベルが高ければ気後れし、最低限度の知識や規定が暗黙に引かれている。だから、罵ったりするような悪態はあまり見かけず、ほとんどが建設的な発言となるのだろう。ちなみに、気後れせず図々しく自己顕示欲を剥き出しにする人を政治屋と言う。
民主主義にとって、誰でも発言できるというよりも、誰でも傍観できるということの方がはるかに重要なのかもしれない。ここに情報透明性の原理がある。政治では機能しない民主主義が、専門のコミュニティで機能するのは、共通目的による集合体であるということであろうか。特定のエンジニアに後援会もなければ、個人的な支援運動があるわけでもない。無秩序でありながら奇妙な秩序がある。まるで生物組織が形成されるかのように、役割分担が自然に形成される。技術を探求するには、当然ながら自由奔放な雰囲気が欠かせない。
しかしながら、どんな集団であれ能力差が生じるし、相対的に劣等者を生み出す。自己の居場所を自然に確保できれば、自由はすこぶる心地良いが、必死に居場所を探す必要に迫られれば、自由は窮屈になる。実際、優秀なエンジニアと仕事をするとかなり辛い。こっちは、いつも全力疾走しなければならないのだから。ちょっと休んでくれ!とお願いすると、実は互いに見栄っ張りで、余裕を演じていただけというオチも、たまにはあるけど。まったく余裕がなく、個人のペースが極度に乱される場合は、却って思考を硬直させるので注意したい。

3. 「2001年宇宙の旅」の HAL 9000
スティーブ・ドンピアは、自分の Altair を組み立てた。8080チップは、72の機能からなる命令セットを持っている。ドンピアが低周波ラジオで天気予報を聞きながら機械語でプログラミングしていると、ラジオと干渉してけたたましいノイズを発したという。Altair の内部でビット位置を変えていく度に、別のノイズ音が鳴る。そして、Altair の最初の I/O装置を発見したという。メモリアドレス 075 で発するノイズは、ギターのFシャープに相当...てな具合に、音色とメモリアドレスを対応させ、音階のチャートを作り、作曲用のプログラムを完成させた。
ある集会でビートルズの「フール・オン・ザ・ヒル」が流れるように、マシンをセット。普段なら最新チップ情報で賑やかなハッカーたちが、畏敬の念に打たれて静まり返ったという。ハッカーたちが自分を取り戻す前に、すかさず「デイジー」の演奏。尚、1957年にベル研究所でコンピューターで演奏された初めての曲が「デイジー」だったそうな。キューブリックの「2001年宇宙の旅」では、分解され機能を喪失しつつあるコンピュータ HAL 9000 が、デイジー・ベルの一部を歌う場面がある。なるほど、初代コンピュータへの退行という意味であったか。

2013-03-03

"言語設計者たちが考えること" Federico Biancuzzi, Shane Warden 編

おいらは、プログラマでもなければ数学者でもない。なのに、プログラミング言語も数学もちょっとかじる。どちらも便利な道具だから。プログラム用法には、文章用法が少なからず影響を受けているのだろう。どうりで千鳥足の彷徨者は、テーマから酷く逸脱した、冗長したスパゲッティ文章を量産するわけよ。
「設計や実装のシンプルさという価値を過小評価してはいけない。複雑さはいつでも追加することができる。達人はそういったものを取り除くのだ。」
巷では、プログラマに数学の知識は必要か?という議論がある。コンピュータが数学的に設計されている以上、黎明期は数学者やコンピュータ科学者の影響力が強かった。ここに登場する言語設計者たちも、数理論理学、情報工学、計算機科学などを専攻する人が多数派で、数学は必要だとする意見が多い。確かにクラス型は、群、体、環、あるいは線形空間といった代数的構造に対応する。
しかし一方で、プログラムを意味的に捉えれば、極めて言語学に近い。自然言語もプログラミング言語も、人間の思考や行動の表記法として君臨するのだから。少数派ではあるが、文学修士号を取得する者、芸術団体の理事や音楽家の経歴を持つ者、あるいは趣味を開花した者まで登場する。そして、数学が苦手だと公言する人がいれば励まされる。彼らの表記法へのこだわりが、プログラミング言語を人間味ある表現に近づけ、より庶民的にしてきたのは確かだ。現実に、数学と縁遠いとされる社会学や経済学にも便利な道具として重宝され、文系出身のプログラマもわんさといる。高度な数学の知識を隠蔽するという意味では、言語文化にオブジェクト指向が根付いていると言えよう。とはいえ、数学の知識があるに越したことはない。それが学問の幅というものであろうから。
...数学落伍者の嘆きより。

本書は、C++, Python, APL, Forth, BASIC, AWK, Lua, Haskell, ML, SQL, Objective-C, Java, C#, UML, Perl, PostScript, Eiffel, Ruby に携わった27人の言語設計者たちのインタビュー集である。彼らに共通していることは、既存の言語に囚われない柔軟な発想の持つ主であること、そして、なによりも情熱の塊のような連中だということである。
「情熱を持って好奇心を追求する。素晴らしい創造や発見の多くは、適切な答えを導き出す準備が整った状況で、適切な時に、適切な場所に誰かが居合わせた場合にのみ生み出される。」
プログラミング言語は、どれをとっても長所と短所があり、万能なものなど存在しない。そして、極めて文化的で宗教的なところがある。数学者や科学者でさえ愛用言語への思いは強く、互いの短所を罵り合う様相はケインズが揶揄した美人投票にも似たり。プログラミング言語の優位性は、企業の圧力や宣伝力に左右されることが多く、科学的に評価されることは少ないようだ。
人間の思考は、人体という構造体によって支えらえる。その構造体は、細胞、特定の機能を持つ器官、更にある目的を果たすために互いの器官が連携し合う組織系によって構成される。その上に、精神なる得体の知れないものがあるとされるが、どこまでを実体と言うかは知らん。個体が形成されるまでに様々な構成段階があるのは、まさにオブジェクトクラス。プラトン式イデアという純粋なデータ構造に、ダーウィニズムというある種の時間の概念が加わると、エントロピーの原理がごとく複雑系へと進化する。過去の抽象化の流れは、未来の抽象化の姿を見せ続けるであろう。

さて、言語にまつわる泥酔者軍団の仕事環境を、ざっと紹介してみよう。...
だいたい5,6人のチームで、おいらはプロジェクトリーダをすることが多い。歳のせいかは知らん。分野で言えばデジタル回路設計となるのだが、ここ十年は検証環境ばかり面倒を見ている。デバッグ作業は大嫌いだが、検証環境を構築するのは嫌いではない。それに、実装の制約に囚われず、自由におまけ機能が搭載できるし、使用言語もそこそこ自由。回路設計といってもソフトウェアとの境界はますます曖昧になり、回路部をHDL(ハードウェア記述言語)で書き、その周辺を様々な言語で書いて協調させる。回路に実装する機能はプロセッサや信号処理アルゴリズムなどで、その検証用の等価モデルをプログラミングする。モデリングでは、C か C++ で要求されることが多い。数学的な要素が強い部分では、Octave(数値演算言語)を組み合わせることもしばしば。
実験的に使い捨てコードを書くことが多いので動的言語を使いたいが、渋い顔をされる。パフォーマンスを理由にされても、大差ないのだけど。統合的な実行環境では、shellやTcl/Tkなどを用い、awk, sort, sed, grep, diff といったunix系コマンド群をいまだに重宝している。方針としては、なるべくスクリプト言語を使い、assertion機能を駆使するといった感じであろうか。
ちなみに、Anders Hejlsberg は、中心的なデバッグツールは、Console.Writelineメソッドだと言っている。要するに、ちょっとしたステートメントを埋め込むだけで、かなりの問題を探り当てることができるというわけだ。多くのプログラマにとって、それが実態であろう。達人がこういう発言をしてくれるのは救われる。複雑なケースにおいては、スタックトレースや局所変数などの監視が必要になるのだけど。だからというわけでもないが、Ruby がお気に入り。なかなか認めてくれないから、趣味で導入しているけど。
操作性を、GUI環境にしろ!という話もあるが、却下!却下!お偉いさんは見た目がお好きなようで、担当者の誰もそんなことは言わない。画像処理系では絵を直接見たいという要求があり、Gnuplot, LibTIFF, ImageMagick と協調させると喜ばれる。これも趣味だけど。統計情報やログ管理では、Perl で要求されることが多い。趣味で Ruby を使うけど。確かに、Perl は文字列操作が強力だ。そして、正規表現を埋め込むとますます暗号文っぽくなりやがる。ちなみに、Perlファンは、"Pathologically Eclectic Rubbish Lister"(病的折衷主義のガラクタ出力機)と呼ぶそうな。自虐楽観主義とでも言っておこうか。こんな楽しみ方があってもいい。
...てなわけで、おいらのプログラミング言語への思いは趣味ぐらいなものである。ソフトウェア工学なんて学んだこともない。最近、教育の依頼を受けることがあるが、教えられるものなど何もない。使えないと思ったら見捨ててもらって結構だ。技術を学びたければ、気に入った師匠を見つけて弟子入りすればいい。師匠が書籍であってもいいではないか。有名な講義がネット経由で受講できる時代、わざわざこちらから教育方針を打ち出す必要もない思うが、組織となるとそうもいかないらしい。とりあえず、コードレビューが重要だということは言っておこうか。哲学的な意識合わせが目的で、書き方を規定するものではない。メンバーが固定化するとやらなくなるけど。
言語がいくら汎用的に設計されても、すべての機能を喧嘩させずに共存させることは難しい。したがって、特定用途向けの言語を組み合わせることは合理性に適っている。動的言語が流行るおかげで、他言語へのハードルを低くしてくれるのもありがたい。そして、各々の言語システムを組み合わせながら、ユーザ独自の統合環境を構築することになろう。問題を一番理解しているのは、その問題に直面している連中であろうから、そこに独自の表記法が生まれても不思議はない。クラス群の名詞とメソッド群の動詞を特化した言葉で抽象化するだけでも、立派な言語システムに見えるだろう。アプリケーションを作るとは、ある種の言語を作ると言うことができるかもしれない。
あらゆる学問で、専門用語や独自の表記法が編み出される。自然言語においても、日本語や英語などの大きな枠組みがあるにせよ、独自の解釈とニュアンスの下で単語が用いられ、誰一人として同じ言葉を喋っちゃいない。言語が精神と結びつくならば、本質的に多様性を内包することになるだろう。

1. 言語選択
当初目をつけていたのは、Python と Objective-C であるが、本書のおかげで APL や Haskell にも興味がわく。
APL は行列代数をうまく扱うという。まさに画像処理の次元空間を扱うのに良さそう。実は、ハードウェア記述と配列記述は相性がいいのではないかと思っている。ただし、表記法は従来の代数表記とは景色が違う。演算の優先順位が右から左、ただそれだけ。なるほど、小学校から馴染んできた四則演算で、加減算より乗除算が優先されるなんて不自然かもしれない。単純に並べ順を変えれば余計な規定は不要というわけか。宇宙人が地球人に接触しようとしないのは、そこに住む知的生命体が奇妙な優先順位に囚われているからであろうか?真理を無視してまで。
Haskell では副作用の制御が強調される。これが関数型言語の長所で、並列化を容易にするという。回路設計と並列化の概念は直結するだろう。
むかーし、言語を選択する基準の一つにデータ型の明確さがあった。BASICのように自動で型変換されることに違和感があった。性格から来るのかは知らんが、コードの間違えはキャストミスから起こることが多い。ただ、厳格過ぎるのも鬱陶しい。近年の動的言語は数値リテラルが厳格など、その按配が肌に合う。Haskell や ML は型推論の機能を備えているそうな。だが、静的な型付けが悪で、動的な型付けが善とも言い切れない。自動化の弊害は、本質的な思考を疎かにさせるところがある。
尚、Dennis M. Ritchie は「C言語は強い型付けと、弱い型チャックを特徴とした言語である。」と述べたという。Tom Love は、Objective-C よりも C++ が使われる理由は「AT&Tの威光があったから」と言い切る。
また、ポインタから逃れるために Delphi や Java を検討した時代もある。結局、C言語を基準とする見方は変わっていない。なんだかんだ言っても、C世代か。ちなみに、学生時代、ある女生徒が「はじめてのC」がいいよ!という発言に、男性諸君は皆振り返ったものだ。
C が常に選択肢として残るのは、やはり安定性であろう。せっかく使う言語がいつのまにか消滅するのではリスクが大きい。ただ、レガシーコードが亡霊のように付きまとい、仕方がない面もある。
近年、オブジェクト指向言語を選択するという流れがある。この用語が過度な熱狂から生じたという見方があるものの、コードと向かい合う考え方が整理できるのは大きな意味がある。ガベージコレクションが搭載されるかどうかも大きな選択肢となろう。実行速度を犠牲にすることも否めないが、動的なメモリ管理を酔っ払いはできるだけ避けたい。この機能をオブジェクト指向の概念に含むかどうかは、意見の分かれそうなところか。
ところで、入門言語は何がいいか?とお聞かれると、Rubyがいい!と即答していた時期があった。だが、微妙かもしれない。便利なものに慣らされて、面倒な知識を後付けする方がずっと辛いから。この考えはプログラマとはだいぶ違うかもしれない。今日の回路設計者はトランジスタが何であるかなど漠然としか知らなくて済む。だが、CPUの構造ぐらいは知っておくべきだろう。ポインタは嫌われ者だが、実装上のメリットも大きい。アセンブラから学べとまでは言わないにしても、アキュムレータ周りの振る舞いぐらい知っておいて損はない。
ちなみに、真の数学を記述するならアラビア語を学べ!という意見も耳にするが、真理の探求が人間の発明した言語に依存するとも思えない。なんにせよ、あまり手段にこだわることもあるまい。どんな言語を使うにしても、物理的な構造をどこかで意識している方がいい。社会が仮想化へと邁進するからこそ、実体という視点を見失しなわないようにしたい。

2. オブジェクト指向とパラダイム設計
初めてオブジェクト指向に触れたのは20年以上前か。当時、講座や書籍を漁ったが、真新しいものに映らなかった。カプセル化の概念は古くからあるし、現場ではクラスもどきの抽象的方策を用いていた。Thomas E. Kurtz に至っては「コンピュータ業界における最大の詐欺!」とまで言っている。とはいえ、再利用や拡張性は誰もが抱える問題で、オブジェクト指向もこれを念頭に置いている。ただ、再利用性と言っても、立場によって微妙にニュアンスが違うようだ。その違いは、データ構造、ライブラリ、コンポーネントに現われる。配列や連結リスト、スタックやキューなどの構成において。
カプセル化については全般的に異論はないようだ。やはりこの概念は本質であろうか。ただ、C++ では、必ずしもメソッドを経由する必要はなく、データ型に直接アクセスできる柔軟性がオーバーヘッドを抑制するとしている。そして、ジェネリック性を重視する立場から Java を攻撃している。
最も毛嫌いしている概念は、継承だ!多重継承ともなると泥酔者の頭は Kernel Panic!
Objective-C が多重継承を禁止しているのは、Smalltalk の直系の子孫だからだという。再考するのであれば、単一継承すら取り除くかもしれない、とまで言っている。そうだろう!そうだろう!
しかーし、Eiffel では多重継承を主軸に位置づけている。継承にアレルギーがあるのは、すっきりした事例を見たことがないだけのことかもしれない。尚、Eiffel の契約の概念は良く、再利用には欠かせない発想だ。
今、政治的に再利用するように仕向けられたモジュールがある。ドキュメントもない。黒幕の住処?その名はブラックボックスと呼ばれる。お偉いさんが口にする「実績がある!」ってどういう意味だ?再利用性のあるコードを書くにしても熟練が必要で、安易な考えで取り組むと、却って冗長となりバグ要因を増やす。お偉いさんには、再利用の裏に潜む「日程短縮」という言葉がよほど心地よく響くらしい。だが、この手の癒し系の言葉は、ヘタするとたちまち悪魔へ変貌する。おいらは小悪魔にしか興味がないので付き合いは勘弁願いたい。
さて、オブジェクト指向は薬なのか?毒なのか?という議論は絶えない。これはソフトウェア固有の概念とは思わない。ハードにせよソフトにせよ、モジュール設計には哲学や思想が重要である。モジュールの再利用では、全体的な設計方針やシステム思想に沿っているかが鍵となる。したがって、ドキュメントには、コードの説明よりも意図する事やテスト思想の方が重要となるはず。プリミティブな領域を超えて、万能なモジュールを設計するなど不可能であろうから。システム設計とは、パラダイム設計であると言うことができるだろう。

3. OSとCPU、そして言語マシン
近年、OSは必要か?という議論をよく見かける。OSってやつはユーザを圧倒するほど複雑だ。組み込み系ではユーザに意識させないように慎ましく存在するが、パソコンではアプリケーションを脇に追いやってまで主役であろうとする。こいつがいったい何をやってくれるというのか?起動で思いっきり待たせるだけか?まるで政治家のような存在よ。
Forthマシンを設計した Charles H. Moore はこう述べている。
「Bill Gates 氏が、OSという考え方を世界に浸透させたのは素晴らしいことです。しかし、これはおそらく史上初の、そして世界最大の詐欺だと言えるでしょう。」
Javaマシンが公開されたのは、いつ頃だったか。当時、仮想マシンという見方よりは、なぜ、CPUの命令セットが言語のシンタックスを直接搭載しないのか?などと、ぼんやりと考えたものである。言語の柔軟性をハードウェアで束縛するのはアホのすること、と笑われたものだけど。
Forth にはシンタックスがほとんどないという。シンタックスよりもセマンティクスを重視すると。Lisp もそうだが、関数型言語の特徴がそういうものなのかもしれない。
それはさておき、互いに異なる言語を搭載したCPUが、マルチコアと結びつけばどうだろうか?ML のような関数型言語を搭載した自動定理証明マシンなんてものがあってもよさそう。今までハードウェアがソフトウェア化する傾向にあったが、今後は逆の流れがあっても良さそうな気がする。FPGAの大規模化にともない、CPUの物理構造を動的にすることもそう難しくはない。ユーザがOSに囚われる必要がないように、言語システムがCPUの命令セットに囚われる必要もないだろう。

4. プログラミング病理学とコンピュータ科学
Brad Cox が、virtualschool.edu に投稿した一節を紹介してくれる。
「ゆえにコンピュータ科学は死んでいない。そもそも一度も存在したことがないのだから。私が現在執筆中の書籍で扱おうとしている新たなパラダイムの中核は、我々がソフトウェア危機と呼ぶ症状を引き起こしている疾病原因となるウィルスが、原子ではなくビットで構成された物質を取り扱うことにより、自然に発生するのではなく、人間が生み出しているというところにある。
しかし、この物質は質量保存の法則に従わないため、鉛筆や手荷物コンベヤを製造する人々に対する報酬という動機付けを生み出すような商業メカニズムが完全に崩壊するのだ。商業がなければ、高度な社会秩序へと進化することができず、すべてのものを一から作り出す愚かな人たちしかいない原始的な状態の泥沼から抜け出せなくなってしまうのだ。
こうなると、あらゆるものは他の類を見ない固有のものとなり、実証的な研究を保証するための整合性あるものは何一つなくなってしまう。これが、コンピュータ科学というものが存在しない理由である。」

5. ビジュアルモデリングとドキュメント
UML は本書の中でもちょいと異質か。おいらの視点もかなり異質だけど。ソフトウェア工学というより、システム工学に分類すべきだと思っている。アーキテクチャの可視化という意味では、プログラムと密接に関わるのだけど。
ドキュメント管理という観点からすると、これに近い考え方をやっている。ただし、言語ではなく図形ツールを使っているところに問題がある。非常にメンテナンス性が悪い。仕様は日々生き物のようにうごめく。プロジェクトも、モジュールも、日程も、何もかも...ドキュメントは、常に最新版に保たれるからこそ威力を発揮する。メンバーの誰もがより最適な方向へ進もうとし、その歩みを止めるわけにはいかない。そして、プロマネはドキュメントの修正に睡眠時間を削られるのよ。
そして、ドキュメントを一人で管理すべきか?という問題がある。うちのような小規模なプロジェクトでは一人でやるべきであるが、大規模なプロジェクトではそうもいかないだろう。そこで、図面を言語で作成するという発想は素晴らしい。言語記述による統合化と分散化という観点から注目したのだった。
だが、、むかーしちょっとかじって、リファレンスも埃をかぶったまま。UML は難しすぎると、設計者が言ってくれるのは救われる。20%未満の機能で十分であると。特に、UML2.0 はあまりにも多くの方法論を取り込んだために、セマンティクスが明確に定義できなくなったという。もっとも敷居を高くしてしまったのは、UML から実装コードまで生成するというアイデアである。もはやプログラミング言語を求めているのか?James Rumbaugh は醜い!と吐き捨てる。UML にそんな魔法の力はないと。そして、OMGの標準化プロセスを非難している。おかげで、頭をリセットして読み直す気になれる。
ちなみに、 Ivar Jacobson は、ソフトウェア業界の人々は本やマニュアルを読まないと指摘している。忙しいこともあろうが、にわかに信じ難い。周りのソフト屋さんはいつも専門書と睨めっこしていて、刺激を受ける。凝り固まった本ばかり読むという意味もあるかもしれない。