[目次へ][1章へ][1.2へ] 最終更新:$Date: 2002/09/12 01:25:33 $

★編注:/usr/doc/cvs-1.11.0/READMEのCredits:という箇所により詳しい記述がある。参考にしてください。

ということで、cvs-1.11.1p1のREADMEより抜粋…して和訳。疲れました。邪魔なので末尾に置いています。

※参考文献に載せようと思ったけれど、訳にかなり問題があるので断念
「ソースコードの反逆―Linux開発の軌跡とオープンソース革命」 (グリン ムーディ 著、 小山 裕司 訳、アスキー 、ISBN: 4756141005)


■■ [1.1] CVSって何?
■■■ [1.1.1] CVSのお仕事
■■■ [1.1.2] CVSの歴史


■■ [1.1] CVSって何?

CVSはバージョン管理を行うためのオープンソースソフトウェアです。バージョン管理についての細かい話は1.1.1節ですることにして、オープンソースソフトウェアとは何でしょうか。オープンソースソフトウェアとは、ソースコードを広く公開し、ユーザ自身がバグ修正や改良をおこなえるようにしているソフトウェアのことです。FreeBSDに代表されるBSDライセンスのソフトウェアやこのCVS自身が属するGPLというライセンスのソフトウェアなど様々なものがあります。

オープンソースソフトウェアの歴史やその形態といったものは本書の範疇ではありませんから、ポインタを示すにとどめます。詳しく知りたい方はまずは、エリック・レイモンド氏の「伽藍とバザール」などオープンソースの解剖学四部作他、訳文を公開されておられる山形浩生氏のホームページを見られてください。

▼山形浩生氏のページ
[http://cruel.org/jindex.html]

ここでは、CVSがオープンソースソフトウェアということで、気をつけておいて欲しいことだけ書いておきます。それは、このソフトウェアは企業がサポートするのではなくユーザが互助組織でサポートしているということです。CVS自体の配布や変更は自由ですが、変更した場合には変更した部分も含めて、コミュニティにソースコードを還元する必要があります。言い換えれば、コミュニティはあなたの貢献を待っています。もし、このソフトウェアを使用してよかったと思われたら、ぜひ何かの形で貢献されてください。それは、使ってみて困った点の報告やバグ報告でも構いません。CVSに関する日本のメーリングリストなどについては、2.1節で紹介します。

では、機能と歴史について見ていきましょう。

■■■1.1.1 CVSのお仕事

「CVSという言葉は、Concurrent Versions Systemの略です」といわれても、よくわからないですね。日本語に直訳すると、並列版管理機構でしょうか。複数の人と共同でファイルを編集する場合に、ファイルの版を管理するシステムという意味です。順を追って説明しましょう。

CVSはもともとプログラム開発のためのツールとして開発されました。みなさんはプログラムを書かれたことはありますか?

プログラムというのは徐々に成長していきます。ちょっとコードを書いて動かして、動いたら次へという形で作業が進んでいきます。そして、動かしてみてうまくいかなかったら、ある程度動いていた以前の状態へ戻ってまた別の方法を試すということもちょくちょくあります。このとき、今までのプログラム作成の履歴が残っていなかったら不便ですよね。かといって、途中のファイルを別々に名前を変えて残しておいたら、それだけですごい量になってしまいますし、混乱してしまいます。このような途中のファイルの状態をバージョン(version=版)と呼びます。しかし、これはソフトウェアのリリースのバージョンと紛らわしいので、リビジョン(revision=改訂版)と呼ぶこともあります。

RCS(Revision Control System)やSCCS(Source Code Control System)と呼ばれるツールは、このようなバージョンの間の「違い(差分といいます)」だけを取り出し、1つのファイルの形で管理するツールとして開発されました。差分のイメージを【図1.1.1】に示しましょう。

【図1.1.1】差分を管理する(RCS) ※旧図と入れ替え
[RCSの説明図改訂版(EPS)]

第1版から第2版、第2版から第3版へと変化したとき(【図1.1.1】の左)、それぞれの違いが差分として出てきます(【図1.1.1】の真ん中)。RCSでは、この差分をどんどん1つのファイルに追加していきます(【図1.1.1】の右側)。RCSは利用者からあるファイルのある版を求められるとこのファイルから必要な分の差分を取り出し、その版を構成する作業をおこないます。

CVSは、RCSをもっと使いやすくするために開発されました。どう使いにくかったかというと、プログラムが大きくなりいくつかのディレクトリに分かれたたくさんのファイルから構成されるようになると、バージョンを管理するファイルがばらばらになってしまいややこしくなったのです。また、そうした大きなプログラムは一人だけで開発するのではなく複数の人間が協力して開発することが多く、RCSの機能であるファイルの排他制御(ある人が編集中は他の人は編集できない)では、排他をおこなった人が解除を忘れると編集できなくなるといった問題が発生するようになったからです。

CVSではリポジトリ(repository=貯蔵庫)という場所にバージョン情報を保管しておいて、開発者は各自そこからコピーをとりだしてそのコピーに対して作業を行い、気が済んだら新しいバージョンとして登録(commitといいます)することができます。これで、ファイルをまとめて他の人とは独立に取り出すことができるようになりました。これで、他の人の作業とぶつかることがかなり避けられます。また、排他機能を使用するのではなく、たまたま同じ場所を編集してしまった場合には、それを競合(コンフリクト)として取り扱い、その解消は話し合いに任せるというアプローチを取ることで、さらに独立性を高めています。

【図1.1.2】にその作業の様子の概念図を示します。なんとなく分かって頂けたでしょうか。

【図1.1.2】CVSのイメージ図
※ 前の図を使ってください

■■■1.1.2 CVSの歴史

CVSの原型を開発したのは、アムステルダムのVrije大学にいたDick Grune氏です。

インターネットは今でこそWWWの別名のようになってしまいましたが、WWWが普及するずっと前からNetNewsという巨大な掲示板機構がありました(もちろん今でもあります)。そのNetNews上にプログラムを投稿するためのcomp.sources.unixという場所があります。Grune氏はこの場所に現在のCVSの元となるシェルスクリプト群を投稿しました。1986年12月のことです。彼の書いたシェルスクリプト群は今のCVSの内部にはまったく残っていませんが、衝突回避などのアルゴリズムは継承されています。このGrune氏の投稿をもとに、開発がずっと続いてきました。

1989年4月、Prisma社(今はSun Microsystems社)のBrain Berliner氏がCVSをCを設計・コーディングし、その後、Jeff Polk氏がCVSのベンダー枝とモジュールというCVSの機能の設計を助けました。1990年代初期には当時Cygnus Solutions社にいたJim Kingdonさん(のち、Cyclic Solusion社に所属)がCVSをネットワークに対応させました。それまでにも多くのCygnus Solutions社の人々や世界中の有志の人々が開発に貢献してくれました。それらの貢献者については、CVSの配布ファイルに含まれるREADMEファイルのCreditsの部分、およびもっと詳しくは各ディレクトリに含まれるChangeLog(更新履歴)から知ることができます。

現在でも、CVSHome.orgという組織を中心に世界中の有志開発者により、このプログラムの保守・管理がなされています。

ちなみに、UNIXの世界にはRCSが開発される前にdiffというファイルの差分を抽出するツールが出回っていました。RCSはこのdiffを利用しています。CVSはRCSを利用し、CVSはさらにcvswebやCVSupなどというツールから利用されています。このようにオープンソースの世界では、積み重ねが着実に大きな成果になっていきます。とても興味深いですね。


※以下はcvs-1.11.1p1付属READMEのCredits部分の対訳。本文には入れない。入れたほうがいいのか?

-------------------------------------------------------------------------------

Credits:

The conflict-resolution algorithms and much of the administrative file definitions of CVS were based on the original package written by Dick Grune at Vrije Universiteit in Amsterdam <dick@cs.vu.nl>, and posted to comp.sources.unix in the volume 6 release sometime in 1986.
CVSの競合解決のアルゴリズムと管理ファイルの定義の多くはアムステルダムのVrije大学にいたDick Grune <dick@cs.vu.nl>によって書かれ、comp.sources.unixのvolume6リリースに1986年のいつかに投稿されたオリジナルのパッケージに基づいていました(す?)。
This original version was a collection of shell scripts.
このオリジナルのバージョンはシェルスクリプトの集まりでした。
I am thankful that Dick made his work available.
Dickが彼の作業を 利用できるようにしてくれたことに感謝します。

Brian Berliner from Prisma, Inc. (now at Sun Microsystems, Inc.) <berliner@sun.com> converted the original CVS shell scripts into reasonably fast C and added many, many features to support software release control functions.
Prisma社のBrain Berliner(今はSun Microsystems社にいます) <berliner@sun.com>がオリジナルのシェルスクリプト群をなかなか速いCに変換し、ソフトウェアのリリース制御機能のサポートに対して多くのとても多くの機能を追加しました。
See the manual page in the "man" directory.
manディレクトリにあるマニュアルページを見てください。
A copy of the USENIX article presented at the Winter 1990 USENIX Conference, Washington D.C., is included in the "doc" directory.
1990冬のUSENIXカンファレンスで発表されたUSENIXの文献のコピーは、"doc"ディレクトリに入っています。

Jeff Polk from BSDI <polk@bsdi.com> converted the CVS 1.2 sources into much more readable and maintainable C code.
BSDI社のJeff Polk <polk@bsdi.com>はCVS 1.2のソースコードをより読みやすい保守しやすいCコードに書き直しました。
He also added a whole lot of functionality and modularity to the code in the process.
彼はまた、その過程で膨大な機能性とモジュール性をコードの中に加えました。
See the bottom of the NEWS file (from about 1992).
(1992年あたりからの)NEWSファイルの底を見てみてください。

david d `zoo' zuhn <zoo@armadillo.com> contributed the working base code for CVS 1.4 Alpha.
david d `zoo' zuhn <zoo@armadillo.com>はCVS 1.4 Alphaのための作業の基盤コードに貢献してくれました。
His work carries on from work done by K. Richard Pixley and others at Cygnus Support.
彼の仕事はK. Richard PixleyおよびCygnus Supportの幾人かによって成された仕事から引き継がれました。
The CVS 1.4 upgrade is due in large part to Zoo's efforts.
CVS 1.4のアップグレードは多くの部分をZooの努力に負っています。

David G. Grubbs <dgg@odi.com> contributed the CVS "history" and "release" commands.
David G. Grubbs <dgg@odi.com>はCVSの"history"コマンドと"release"コマンドに貢献してくれました。
As well as the ever-so-useful "-n" option of CVS which tells CVS to show what it would do, without actually doing it.
実際には何もしないけれど、CVSが何をしようとしているかを教えてくれるようにするためのCVSのオプションも彼のおかげです。
He also contributed support for the .cvsignore file.
彼はまた、.cvsignoreファイルのサポートについても貢献してくれました。

The Free Software Foundation (GNU) contributed most of the portability framework that CVS now uses.
The Free Software Foundation (GNU)はCVSが現在使っている移植のための枠組みの多くに貢献してくれました。
This can be found in the "configure" script, the Makefile's, and basically most of the "lib" directory.
このことは、.configureスクリプト、Makefileたちおよび基本的にlibディレクトリの中の多くファイルの中に見出すことができます。

K. Richard Pixley, Cygnus Support <rich@cygnus.com> contributed many bug fixes/enhancement as well as completing early reviews of the CVS 1.3 manual pages.
K. Richard Pixley, Cygnus Support <rich@cygnus.com>はCVS 1.3のマニュアルページの早期レビューを完璧にしてくれると共に、バグフィックスと拡張に関して貢献してくれました。

Roland Pesch, then of Cygnus Support <roland@wrs.com> contributed brand new cvs(1) and cvs(5) manual pages.
その頃はCygnus SupportにいたRoland Pesch <roland@wrs.com>は新しいcvs(1)およびcvs(5)のマニュアルページに貢献してくれました。
Thanks to him for saving us from poor use of our language!
貧しい言葉の使い方から我々を救ってくれてありがとう!

Paul Sander, HaL Computer Systems, Inc. <paul@hal.com> wrote and contributed the code in lib/sighandle.c.
HaL Computer Systems社のPaul Sander <paul@hal.com>は、lib/sighandle.cにあるコードを書いて貢献してくれました。
I added support for POSIX, BSD, and non-POSIX/non-BSD systems.
私(って誰?)はPOSIXとBSD、および非POSIX/非BSDシステムのサポートを追加しました。

Jim Kingdon and others at Cygnus Support <info@cygnus.com> wrote the remote repository access code.
Jim KingdonとCygnus Supportの幾人か<info@cygnus.com>が遠隔リポジトリアクセスのためのコードを書きました。

There have been many, many contributions not listed here.
他にもここに挙げられなかった多くの貢献者たちがいます。
Consult the ChangeLog files in each directory for a more complete idea.
より完全に知るためには、それぞれのディレクトリ内のChangeLogファイルを調べてください。

In addition to the above contributors, the following Beta testers deserve special mention for their support.
上記の貢献者に加えて以下のベータテスターたちは彼らの貢献により特記に値します。
This is only a partial list;
これは部分的なリストに過ぎません。
if you have helped in this way and would like to be listed, let bug-cvs know (as described in the Cederqvist manual).
もしあなたがこれまで(?in this way)貢献して、リストに加えられたいと思っているならば、(Cederqvistに記述されているように)bug-cvsに知らせてください。

Mark D. Baushke <mdb@cisco.com>
Per Cederqvist <ceder@signum.se>
J.T. Conklin <jtc@cygnus.com>
Vince DeMarco <vdemarco@fdcsrvr.cs.mci.com>
Paul Eggert <eggert@twinsun.com>
Lal George <george@research.att.com>
Dean E. Hardi <Dean.E.Hardi@ccmail.jpl.nasa.gov>
Mike Heath <mike@pencom.com>
Jim Kingdon <kingdon@cygnus.com>
Bernd Leibing <bernd.leibing@rz.uni-ulm.de>
Benedict Lofstedt <benedict@tusc.com.au>
Dave Love <d.love@dl.ac.uk>
Robert Lupton the Good <rhl@astro.princeton.edu>
Tom McAliney <tom@hilco.com>
Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de>
Jim Meyering <meyering@comco.com>
Thomas Mohr <mohr@lts.sel.alcatel.de>
Thomas Nilsson <thoni@softlab.se>
Raye Raskin <raye.raskin@lia.com>
Harlan Stenn <harlan@landmark.com>
Gunnar Tornblom <gunnar.tornblom@senet.abb.se>
Greg A. Woods <woods@planix.com>

Many contributors have added code to the "contrib" directory. See the README file there for a list of what is available. There is also a contributed GNU Emacs CVS-mode in tools/pcl-cvs.