Winnyの「要求仕様」と「設計」と「実装」

(4/21 追記)

Winnyには、実装上の大きな問題があるという報告があります。Winnyユーザの方は、こちらをすぐ見てください→アンカテ(Uncategorizable Blog) - Winnyに実装上の欠陥あり!

(追記終わり)

私はこの場で何度も書いているが,ソフトウェア品質で大事なことは「バグがない」ことではなく「逸脱(Deviation)がない」ことである。製造上の欠陥(バグを含む)は設計からの逸脱なので比較的発見しやすい。設計上の欠陥は要求からの逸脱と言えるわけだが,この判定はちょっと難しい。

これを補助線にして、「要求仕様」「設計」「実装」の3レベルでWinnyの問題を考えてみた。そうすると、バグ有りWinnyとバグ無しWinnyはやはり区別すべきだと思うで私が高木さんに主張していたことが明確になってくる。若干繰り返しになる部分もあるが、この枠組みで書き直してみたい。

Winnyの実装

現在の所、Winnyにバッファーオーバーフロー等の実装上の大きな問題点が発見されてないことは、もっと強調されていい事実だと思う。

mottonさんや高木さんが言うようにWinnyの設計には問題があるとしても、Winnyの実装が良くできていることは、それと独立のことであり、両者を混同することは良くない。むしろ、「頑強な実装のために、問題のある設計思想のプログラムが当初想定した範囲を越えて広く流通しており、「頑強な実装」はWinnyの問題点の重要な構成要素である」と主張すべきだろう。

暴露ウィルスの猛威が、Winnyの実装上の欠陥から発生しているかのように誤解させることは、事実に反している。マスコミの報道は一般向けの説明なので、技術的な正確性には限界があるが、限界の範囲内で最善を尽くしているとは言えないだろう。技術的な問題で、事実と反する見方が広まることは、副作用をもたらすことが多い。「Winnyは欠陥プログラム」という漠然とした理解が広まることで、Winnyには既に実装上の問題が多く存在しているような認識が広まっているように思われるが、このあいまいな認識によって、Winnyを利用する破壊的なワームが出現した時の対処が遅れることが懸念される。

広く流通している通信プログラムに実装上の欠陥が見つかった場合、その脆弱性から予想できない大きな被害が広がる可能性がある。これは、そのプログラムの種類や設計の善し悪しに関係なく常に言えることであるが、Winnyの場合は、次の理由から、破壊的ワームが発生した時の被害がさらに大きくなるのではないかと私は予想している。

  1. 一般にP2Pアプリケーションは、通信の形態、経路が複雑なため、クライアントサーバ型と比較して被害の把握や外からの対策が難しい
  2. 開発者がプログラムの修正を禁じられている
  3. 破壊的ワームは暴露ウィルスの変種であるという受け取り方をして、多くのユーザが必要な対策をせず使用を続ける可能性がある
  4. 広い分野で多くの論議を呼び起こしているプログラムである為、事実と意見が混同されやすく、適切な情報が行きわたらない

この問題については、高木さんはスルーしているように思えるが、この後に述べる、設計、仕様レベルの問題と切り離して再考していただくようにお願いしたい。

Winnyの設計

Winnyについて議論する場合に、実装と設計を区別するのと同様に、設計レベルでの問題は、次の二つに分けて論じることが必要だと思う。

  1. 要求仕様レベルの問題、つまりWinnyというプログラムの目的から必然的に発生する問題
  2. 辺境から戯れ言の荒川氏が言う所の「逸脱」、すなわち、要求仕様を満たさない設計

要求仕様からの逸脱は、技術的に一意の答えが出やすい問題であるが、要求仕様そのものの是非は、技術的な文脈を越える視点が必要とされるからである。

高木浩光@自宅の日記 - Winnyネットワーク崩壊への最終シナリオの「 Winnyを規制するISPは、Winnyトラフィック中の無駄割合を調査するべき」という部分は、この意味では通信プログラムが当然満たすべき暗黙の要求仕様からの「逸脱」、すなわち純粋に設計上の問題ととらえることができる。

  • ネットワーク回線を有益に使うためのトラフィック調整が考慮されていない点
  • ユーザが使用しない無駄なデータを非常に大量に送信している点

この二つの問題については、Winnyの要求仕様、つまり目的を認めたとしても、Winnyの欠陥と考えるべき問題点であると思う。私としては、このような純粋に設計レベルに属する問題については、高木氏の主張に異論はない。

Winnyの目的

これらのエントリーで、高木さんは、Winnyの動作からその要求仕様、開発目的を逆算して、その仕様そのものを批判されている。

これにより、「これは他の人には見せるべきでない」と良心の働くような真に悪質な映像であっても、「これ以上拡散することは避けられるべきだ」という倫理観を持つ人でさえ、自分だけは見ておきたい(見てみたい、自分だけは見てもよいだろう、見てみないと本当に悪質かどうかわからない、見ておく必要がある)と行動することによって、当人の倫理観とは無関係に侵害規模を拡大させていく。

Winnyネットワークに放流されたファイルは、チェーンメールと異なり、人手を介さず自動で広がる。転送するかしないかの判断を人が行わないため、チェーンメールなら人々の良心によってかかるはずのブレーキが、Winnyではかからない。そのような性質のWinnyネットワークは存在自体が危険である。

これは、設計レベルの問題とは別のレベルの問題であり、私への批判もこの文脈の延長線上にあるように思える。

この種の「識者」達にとっては、Winny礼賛に導く新しい「理論」をどれだけ唱えられるかが思想エリートとしてのテーゼなのだろう。

現在の作者のスタンスは、Winnyは技術的な試験のために作り配布したもので、その技術は発展途上のものだった(「そのため意図せず著作権侵害の蔓延を許してしまった」ということか?)ということになっている。だからその意味でもむしろ、現在のWinnyには欠陥があるということに「しなくてはならない」のだ。いまさら「Winnyはすばらしい」などと言い続けようとしている連中は、頭のネジが緩んでいることに気づくべきである。

Winnyネットワークは、FreenetTorと同じような「追跡可能性を切る」システムである。つまり、通信における発信者の特定をできなくさせるシステムである。それが第一の開発目的であるとは言えないが、Winnyの要求仕様の中に「追跡可能性を切る」という要素は含まれていると思う。

「追跡可能性を切る」システムには高木さんが言うように多くの副作用がある。しかし、それ以上に守るべき価値があると私は考えている。

「追跡可能性を切る」ということは、技術的に保証された匿名性を確保することで、人の悪意を解放することでもある。だから、それを危険な思想とみなす人がいることも理解できる。しかし、それをなし崩し的に否定することは、将来に大きな禍根を残すと思う。特に、Winny問題に現れている問題点は大きい。

「追跡可能性を切る」社会システムの構想を発表することは違法ではない。これは言論の自由として万人に保証された権利である。コンピュータネットワークを基盤として、そのような社会システムの構想を発表することも問題ないはずだ。では、そのネットワークの実現可能性を詳細に検討して、それを「仕様」として発表することはどうなのか。その「仕様」に基づきすぐにプログラムコードに置き換えられる「詳細仕様」を発表したら?それをソースコードとして書下したら?それをコンパイルしたら。それを閉じたLANの中で実行したら?それをインターネットで公開したら?ネットで公開してテストユーザを募集したら?一般公開したら?ユーザの要望を受けてシステムを改良したら?あるいは、開発プロセスそのものを「アジャイル」つまり試験的な実装を先行させる形で実施したら?

このようなプロセスの中で、「著作権侵害」が発生したとしたら、どこからが「著作権侵害幇助」に該当する行為になるのだろうか?

Winnyでは、技術的にはネットワークの効率的で安定した運用に力点があったので、「言論の自由」より「コンテンツの自由で豊かな流通」に重点があったと思う。しかし、デジタル証券を含めて、全く違う形のコンテンツ流通方式を模索していたことは間違いない。また、具体的な問題が発生した時に対応する準備も能力もあったのに、逮捕されてしまったのである。

だから、私としては次のことを強く主張したいと思っている。

  • 「追跡可能性を切る」システムの価値
  • 言論の自由と技術的な問題における慎重な法運用の必要性
  • 法的な意味で現行法規に対して順法であることと、政治的な行為の正統性を分けて考えることの重要性

Winnyの「要求仕様」は、これにからむ問題がたくさん含まれている。だから、設計レベルの問題とは分離して論ずるべきだと思うし、それは多くの場合、Winnyネットワークをできる限り残すべきだという主張になるだろう。

高木さんは、「追跡可能性を切る」ことが人の悪意を解放することを重く見て、社会の治安維持を重視しておられるのだと思う。それは一つの見識であり、それを主張されることを私はもちろん否定しない。ただ、その立場は私と逆であって、当然、私と高木さんの「要求仕様」レベルの見解は一致しないだろう。そうなるのは、私が、何らかの不当な目的で設計レベルの問題を故意に無視しているからではない。