Winnyの最初のリリースとバージョンアップ

ここまでWinnyの全体像の仕組みをお話ししました。後半は、Winnyというソフトウェア開発がどういうふうに進められていたかを、バージョンアップの内容からおさらいをしていこうと思います。

Winnyの開発期間は2002年5月から2003年11月の1年半だけだったのですが、その間に283回もバージョンアップしてるんですね。そういったところを、ダイジェストというかたちでササッといこうと思います。

2002年4月1日に、いわゆる最初の書き込みと開発宣言があります。いわゆる47氏と呼ばれてますが、最初の書き込みでFreenetの話をしました。

そこから1ヶ月経って最初のリリースがありました。これはだいぶバギーで、最初の1ブロックしか落ちてこないみたいな。128機能のブロックしか落ちてこないような動作が確かあったような記憶があります。

当初は基本動作のところもけっこうトラブルシュートが大変で、47氏自体もどんなふうにトラブルシュートすればいいのかが手探りなところもあって。

思ったよりポート分けしてない人も多かったり、やはり実際に世の中にデプロイしてみないとわからないことがけっこうあったりして、そういったことをやるために、例えば一時的にWinnyの根幹の1つである転送動作をやめたりとかしながらトラブルシュートをやっていました。

そんなこんなで前回のバージョンアップ、リリースから半月ほどで今の最終的な自動ダウンロードのベースになる自動再試行が入りします。

あと、最初はできませんでしたが、先ほど言ったPort0のノード対応みたいなもの、Port0のノードから検索ネットワークの上流になれるようになったり、他のノードにアップロードできるようになったり、そういったいわゆるフル機能の対応ができるようになったり。序盤はこういった開発をやっていました。

2002年5月 自動ダウンロード機能の追加

Winnyの特徴である自動ダウンロード機能がついたのも5月の内でした。これは当時WinMXが普及していたってところもあって。WinMXって、相手を指定してファイルを貨幣のように交換する、いわゆるファイル共有というよりはファイル交換の文化だったところがあるって。

正直Winnyは検索結果が不安定なところがデメリットというか(Winnyの)苦手なとこだったのでしたが、逆にそれを逆手に取って、Winnyなりの解決案として「そもそもゆっくり気長にダウンロードを待つというユースケース」を提案したようなかたちになっているわけです。

2002年6月 自動ダウンロードの条件を使用したクラスタリング機能の追加

続いて、6月になると自動ダウンロードの条件を使ってクラスタリングをする機能が入りました。47氏は最初、0から1の間の数値を取ってクラスタリング、円柱のかたちみたいにクラスタリングをするような考えたっぽいですが、あまり評判がよくなくて。

その中で出てきたアイデアとして「検索条件をクラスタリングにしたらいいんじゃないか」みたいなところに、クラスタリングの機能がありました。これでWinny1の機能がだいたい揃ってきます。

この間にけっこういろいろなチューニングや調整もやっていて。キーの拡散というものがWinnyの重要な要素の1つですが、キーの拡散方法とかも、このあたりでいろいろな試行錯誤を続けていました。

2002年7月 BBS機能の追加

7月になると遂にBBS機能が入ります。けっこう序盤からBBSの機能があったんですね。このBBSの機能が入ったことで、ファイル共有のネットワークを活用すると言うと語弊がありますが、ネットワークを活用するかたちでBBSにおける試行錯誤が始まったわけです。

この後はいろいろなチューニングや開発環境の変更などいろいろをやっていて。通称“白Winny”みたいな。けっこうWinnyを使っていた記憶がある人は、黒というか青い画面を覚えてる人も多いと思いますが、一瞬ユーザーインターフェイスが白系になったりとか。そういう試行錯誤もやってました。

2002年10月 トリップ機能の追加

10月になるとファイルの公開者を主張できるトリップ機能、トリップは2ch用語ですが、いわゆる「誰がアップロードしたか」を示すための簡易署名機能です。これは暗号学的な署名ではないので、キャッシュ書き換えとかするといくらでも書き換えができちゃうんですが、「匿名のAさんとして継続的にファイルを上げてる誰かだ、というようなことが重要」というユースケースが存在しました。

例えばWinny本体の配布とかもそうですよね。そういうファイルの配布者を特定する、継続して特定するための機能が入ってきました。

2003年4月 Winny1.0最終盤リリース

遂に2002年の年末に正式版ができました。最終βは22.53ということで、バージョンアップを重ねて「ここまできたな」という感じですね。

1.0が出てからもけっこう根本的なところの変更は続いていて、昔のなごりを引っ張ったところとして、ファイルのハッシュ値にMD5をそのまま使うようになったり。

そんなこんなで、4月にはWinny1の最終盤が出ます。

2003年5月 Winny2の登場

5月に入ると、(登場から)ちょうど1年ぐらいですね。そうすると、BBSに力を入れている、いわゆるWinny2というものが出てきました。

Winny専用のファイル共有をしないノードが実装されたのがβの3.2ですね。

このあたりで、開発環境をC++Builderに変更して、GUIの作り直し(したり)とか、微調整をムチャクチャこのあたりで重ねていた記憶があります。

Winnyは1年半のバージョンアップで効率を維持できるようになった

2.0のβ7.1が最終リリースですが、ここに至るまで1年半を駆け抜けてきました。

ここではけっこう大きな変更だけを紹介しましたが、載せきれないチューニングもずっと重ねてきました。これが283回というバージョンアップの(うちの)一番を占めているものですね。アーキテクチャレベルでの試行錯誤もあったし、いろいろなパラメータを上げては試し、下げては試しみたいなことをやってました。

大規模P2Pネットワークを作るのは本当に難しいことで、一時期には数十万ノード、数億ファイルあったとも言われているそうなのですが、PCやネットワーク環境も今以上に多様でした。特に貧弱方向に多様で、最新のものでもPenrium MとかAthlon 64が出た頃で、メモリも512メガとかの頃だったし、回線もISDNも現役だったような時代でした。

そのあたりを調整して、展開しては観測してという繰り返しで効率を上げていったわけです。1年半のバージョンアップの成果として効率が達成されたわけですが、この後の(セッションで)いろいろな方がこの話をたぶんすると思いますが、効率悪かったらプライバシー被害なども含めて防げたかもしれませんが、十分な効率を維持できてしまったわけです。

さて、というわけで15分で駆け抜けてきましたが、Winnyネットワークの仕組みのおさらいと、1年半の開発史を追体験することで、みなさんはWinnyの話を思い出してもらえたでしょうか。

Winnyの技術の何がおもしろかったのか、誤った神格化をするよりは、その道筋と結果をきちんと評価してくれる人が少しでも増えてほしいなと思っています。というわけで、映画を楽しみにしています。

以上です。ありがとうございました。