ブルーな日々

私の目の前に一台のパソコンがある。Linuxというフリーソフトウェ アが動いている。自分で設定したものだ。このコンピュータはインターネッ トに接続されていて、その気になれば、誰でもアクセスすることができる ようになっている。「その気になれば」と言ったが、これには二つ意味が ある。まず、私がその気になることで、もう一つは実際にアクセスしよう とする相手もその気になることだ。単にアクセス、と言っても、実はいろ いろな方法がある。いくつかの方法については、私は誰でもアクセスして 良いように設定してある。たとえばいくつかの Web ページは誰でも見る ことができる。それを使って私は情報を外部に発信しているから、見るこ とのできない人がいると都合が悪いからだ。だから、この件では私はすで にその気になっている。あとは相手がその気になるだけだ。つまり私のペー ジに興味を持ってくれて、URL をブラウザに打ち込めばいい。これは一番 よく知られたアクセス方法だが、実は他にもいろいろある。たとえば telnet と呼ばれている方法があって、このアクセスを許すと、私のコン ピュータに対して、非常にたくさんのことができるようになる。コンピュー タには私にとって大切なものも含まれているので、私は telnet でアクセ スできないように設定してある。つまり私はこの件では「その気に」なっ ていない。だから外部の人間がいくら「その気」になっても私のマシンに telnet することはできない。まずは私が「その気」にならなければなら ないのだ。

図 1.15. コンピュータといろいろなサービス

コンピュータといろいろなサービス

今は、私と、それ以外の人との間で線引きしたが、実はもっと細か くアクセス制御することができる。たとえば、Hally と Sally にだけ telnetを許して、それ以外の人、たとえば例の天才君には許さないように もできる。会員制のホームページを見たことはないだろうか? ある画面ま で行くと、ログインiDとパスワードを入力してくれ、という画面に飛ばさ れるだろう。そう、私はあのことを言っている。あれは Web サービスに 対するアクセス制御の一種だ。そのサービスが動いているコンピュータの 管理者が、決まった人しかアクセスできないような設定をそのコンピュー タにしたから、君はおいそれとはアクセスできない。そうか。最初からこっ ちの例で説明すればよかった。

図 1.16. コンピュータとアクセス制限

コンピュータとアクセス制限

CVS も、Web アクセスや、telnet と同じようにできる。つまりCVS をうまく設定して、CVS のリポジトリのあるサーバをインターネットにつ なげてやると、どこからでも CVS を使えるようにすることができる。つ まり、いままで説明してきたスイッチポンを、出先のコンピュータからも できるようになる。この場合、get コマンドで作成される作業コピーは出 先のコンピュータにできる。修正点を commit すると、今度はインターネッ トの上をデータが逆向きに流れて、作業コピーからリポジトリに向かって データが流れて、結果がリポジトリに追加される。だから君は世界中のど こにいても作業ができる。たとえば Sally がタンザニアに出張になった とする。Sally は例のソフトウェアのプログラムを管理している CVS リ ポジトリの入ったマシンに、タンザニアのインターネットカフェからアク セスできる。もちろん CVS リポジトリには適切なアクセス制御が必要だ。 これは会社の重要な資産が入ったサーバだから、外部の人間に勝手に get やcommit されては困る。だから君とHallyとSallyだけがアクセスできる ように設定されているのが普通だろう。

図 1.17. CVS サービス専用機とアクセス制限

CVS サービス専用機とアクセス制限

「設定されている」などと不用意に書いてしまったが、別にコン ピュータ自身が場の空気を読んで、君や Hally や Sally を自動的にそっ と設定してくれるわけではない。コンピュータはそんなことはしてくれな い。実際には誰か生身の人間が「設定する」のだ。じゃあ誰がやるのだろ う。君の今までの話を総合すると、君もHallyもSallyにも、ちょっと荷が 重そうだ。こういう時には会社の中にシステム管理者と呼ばれる人がいて、 その人に設定を頼むことになる。「こんど、これこれの仕事にかかわるこ とになったから、例のリポジトリに get/commit をする必要があるんだ。 悪いけど設定してもらえないかなあ」君は100万ドルのスマイルで誰かに に頼む。もしかすると頼む相手は、君がこないだ言ってた天才君なのかも 知れない。もしそうなら君の笑顔に私は同情する。いずれにしても君は誰 かに頼む。機嫌がよければ、あるいは Sally が一緒ならコンマ2秒で設定 してくれるだろう。でもあいにくその日は朝から雨で、彼は奥さんと新発 売のポテトチップスの空袋が不燃ゴミか否かをめぐって大喧嘩をしてきた ばかりで、通勤電車の中ではハイヒールを履いた若い女性に踏まれ、駅の 売店では 150円少なくお釣りを渡され、工事中のマンホールにあやうく落 ちそうになり、よけたはずみで、ガムを踏んでしまい、あげくのはてに会 社に来てみると、メールボックスが新型ウィルスのまきちらしたスパムで 一杯になっていたとしたらどうだろう。私ならこう考える。「今日はやめ ておこう」。そしてそのまま Sally のデスクに言って、明日は丈の短い スカートで来てはくれまいかと頼む。

私が言いたいことはこうだ。システム管理者の許可なしには誰も CVS リポジトリにアクセスすることはできない。国立博物館の特設会場に 展示してあるガラス張りのミイラと一緒で、君はリポジトリに指一本触れ ることができない。作業できるもできないもシステム管理者の腹一つなの だ。一つの企業内の話なのだからこれでもいいのかも知れない。いや、む しろ好ましい場合さえある。しかし、現実のデータ管理にはもっといろい ろな形態があるのだ。たとえば、先のソフトウェアで、有償版は自社で作っ たが、ここで社内の担当者は燃え尽きてしまい、タイマーの部分について は子会社に発注するようなこともありうる。いま言ったように CVS はネッ トワーク越しに利用できるので、子会社からもget/commitができる。しか しそのためには、あなたの企業のシステム管理者は子会社の人たちにも許 可を設定しなければならない。CVS はもちろんセキュリティーのことを十 分に考えた設計になってはいる。しかし子会社にはどんなモラルの人間な のかはっきりしないし、身元があまりはっきりしない外部の人間にいろい ろなアクセスを許すのは管理上問題がおきやすい。リポジトリに書き込み を許す場合はなおさらだ。commit はリポジトリに対する書き込み処理な のだ。

図 1.18. CVS サービス専用機と子会社からのアクセス

CVS サービス専用機と子会社からのアクセス

でも、CVS には分岐の機能があった。タイマー機能の枝を分岐して、 そちらの部分にだけ子会社の人にアクセスさせれば良いではないか、と。 そういう機能は CVS にはない。それに同じマシンの上に二つの枝がある から、このコンピュータがディスク障害を起こすと、両方の枝のデータが 消えてしまう。もし分岐がネットワーク上にある別のマシンの別のリポジ トリの中に作ることができれば問題は解決する。つまり、子会社の中にも CVS リポジトリを持つサーバを用意して、インターネットにつないだあと、 元のリポジトリにある有償版の分岐を、このもう一つのマシンのリポジト リの中に作れば問題は解決する。しかし、CVS の分岐は、同一マシンの同 一リポジトリ内にしか作成することができないのだ。もうお分かりだろう。 私が CVS の分岐の根本的な欠陥というのはこの事実を指しているのだ。

図 1.19. CVS の分岐の限界

CVS の分岐の限界

こんな風に書くと、私は何かことさら特殊なケースを持ち出して CVS の欠点をあげつらっているかのように見える。しかし、これは一般的 な状況なのだ。特にフリーソフトウェアを開発するときにこういう事態に よく出くわす。ちょうどいい例がある。私は GNU arch のリポジトリを Webブラウザで閲覧するための ViewARCH というフリーソフトを作ってい る。こんな場合、読み込みアクセスを世界中に許して、そのソフトウェア を公開するのが普通だ。もちろん私もそうしている。フリーソフトウェア は誰にも自由に使ってもらうことを意図して作られるし、こうしておけば、 悪い部分を誰にでもすぐに指摘してもらえるからだ。しかし普通書き込み アクセスは許さない。私も許していない。さて地球の裏側の誰かが私のソ フトに興味を持ったとしよう。そしてどこかにバグを見つけたか、新しい 機能を追加しようと思ったとする。私が CVS でこのプログラムを管理し ていたとすれば、この地球の裏側の人間に対して、私のマシンに対するア クセス許可を与えなくてはならない。しかし、このような人間とは通常電 子メールのようなもので知り合うだけで、面識はないことが多い。実際に 会うことは一生ないような人たちも多い。こんな状況でその人間に簡単に アクセス権を与えるわけにはいかない。もちろん信頼できる良識のある人 間だとわかれば、アクセスを許すことができて、分岐の仕組み自体はもっ ているのだから、CVS を使って自分のバージョンと彼のバージョンとを一 つのリポジトリ内にうまく共存させることができる。時々の彼の枝の内容 を見て気に入ればマージすることもできる。彼も自分オリジナルの変更を 自分の枝に加えながら、私のアイディアを取り込むこともできる。しかし これらはどれも彼にアクセス権を与えて初めてできることなのだ。

もし分岐を、ネットワークの他のマシン上に作ることができて、そ の枝同士でマージができれば、問題は解決する。このような機能 をもったバージョン管理システムは、ネットワーク上にさまざまなリポジ トリが分散して存在するので、分散型のバージョン管理システム、と呼ば れる。これに対して CVS のように、ひとつのマシン上のひとつのリポジ トリだけで世界が閉じているバージョン管理システムを集中型のシステム と言う。GNU arch 分散型バージョン管理システムとして設計された。い ま述べてきたことは GNU arch では簡単にやることができる。分岐を作る ときには分岐元のマシンの管理者は、自分のマシンに特別な設定をする必 要は何もない。通信ログを見なければ、地球上の誰かが自分のリポジトリ の分岐を作ったことに気づきさえしないだろう。

図 1.20. GNU arch の分岐はリポジトリの境界を越えることができる

GNU arch の分岐はリポジトリの境界を越えることができる