リーナストーバルス氏がGitで本当に目指した大事なものの勘所(2/6)


その1から続き

ソフトウェア開発では何の目的のためにどうするか

対応する人それぞれが管理できるリポジトリを持って、環境を含め把握できているという点が大事です。

 

経緯:なぜそれが大事となったか(ユースケース・使用例から)

「影響や不具合を正しくコントロールすること。」

「環境がどうなったか把握できること。」

git だろうが CVSだろうが、ソフトウェア開発はこの点が重要になります。

 

CVSの発生経緯は、ディレクトリ管理による大変さから発生しました。プロジェクトがあると、どこかに正式版を置くことになります。

中央となる正式版を作るとやりやすくなり、みんながどんどんコミットしだした。そうするとバグなど影響が出た時に、影響調査するとそれは関係ない・知らないという人が出てきます。環境の状況がよくわからないため、結局苦労して直したり戻したりする経験を積みます。正しく管理するためには、こうして中央管理者が必要になります。一箇所に集めても、自由にコミットできてしまうと、こういうふうに問題が発生したからそういう対策になりました。

環境を把握しようとすると、中央者に権利がつき、すると同時に大変な事にもなります。いくら中央の管理者が優秀でも、一人でなんでも完璧にこなせるわけではありません。

そこでサブ管理者やサブ機能ごとの管理者が立つことになるのです。

そこには信頼できそうな人を立てることと同時に、チェックと言う動作は省けません。

ここで言うチェックとは、何をどういう目的で修正するか、正しく既存のプログラムと整合できるかという点です。また整合するというのは、データや状態を正しく管理できている必要があるため、影響範囲を適度に切り分けられるプログラム上のつくりが重要で、その境目でI/Fもはっきりしています。その影響ない中では自由にプログラムを変えられますが、影響範囲はI/Fも含めてしっかりと認識しつつ作る必要があります。

リーナス・トーバルズ本人曰く、人は馬鹿ばっかりで、利口な奴は少ししか無い。といっている通り、マージを無関係に取り入れることはできません。

ソーシャル化するOSS開発者たち - @IT
http://www.atmarkit.co.jp/news/analysis/200904/14/git.html
「非常に多くのブランチがありますが、99.9%は無視していいんです。マージというのは、セキュリティのようにやるものです。信頼の輪。それこそがセキュリティへの唯一のアプローチであり、ソフトウェア開発への唯一のアプローチです」  「ぼくは誰でも信用するわけじゃない。ほんとのところ、シニカルで疑り深い人間で、ほとんどの人はまったく無能だと思ってるわけです(笑)。分散ソースコード管理のポイントというのは、(自分が管理するレポジトリに対する)コミット権を与えないことにあります」  「ただ、大勢の平均的な群衆の中にも、際だっている人、信頼できる人がいる。5人、10人、15人ほどもいればいい。彼らは傑出しています。ぼくは彼らからpullできるのです」

どういう状態か知ることが、ソフトウェア開発には重要だというコンテキスト(既知の前提)があります。

そういう管理体制によりどういうことが起きたか、

相応しくないプログラムは、弾かれます。OSSの場合人の役割が柔軟であるため、拒否されたり採用して欲しいなどと感情的・政治的な問題が生まれることもあります。gitの分散方式で解決できているところです。ここが既存と違う部分です。

ソーシャル化するOSS開発者たち - @IT
http://www.atmarkit.co.jp/news/analysis/200904/14/git.html
リーナスは、svnやその前身といえるCVSのような集中型ソースコード管理システムには、根本的な問題があったという。  「Subversionほど的外れなプロジェクトはない。スローガンは、正しく作られたCVSというものだけど、CVSを正しくやるなんてできないんだから」。

 

ソーシャル化するOSS開発者たち - @IT
http://www.atmarkit.co.jp/news/analysis/200904/14/git.html
「ブランチを作ることなんて問題じゃない。マージこそが重要なんだ。マージしようとしたある日、巨大で解決の難しいコンフリクトが発生する。Subversion設計者たちは、真性のバカだよ。」

 

ソーシャル化するOSS開発者たち - @IT
http://www.atmarkit.co.jp/news/analysis/200904/14/git.html
中央レポジトリのモデルでは、レポジトリにアクセスできる“コミッター”を厳密に管理することになる。これが諸悪の根源となる、というのがリーナスの論理だ。  「誰もかれもがレポジトリに書いてしまっては困りますよね、ほとんどの人はバカだから。それで表面上バカっぽくなさそうな人たちのグループを作って、そのグループを小さく保つことになるわけです。誰が優秀かなんて簡単に分かりませんからね」  こうして誰にコミット権限を与えるか、誰が何をコミットできるのかということを巡って、心理的なバリアが生まれたり、不毛で終わることのない政治的駆け引きが延々と行われることになるのが、中央レポジトリを使った多くのOSSプロジェクトの姿なのだという。  「分散ソースコード管理では、この問題はなくなるんです。みんな自分のブランチを持つ。なんでも好きなプロジェクトをやればいい。いい仕事だろうと、くだらない仕事だろうと、誰も気にしません。もし優れた仕事だということであれば、後から、“ねえ、これぼくのブランチ、ほかの人のブランチより10倍速いよ。ここからpullするってどう?”と言えばいい。それで実際、他の人はpullするんです」  「こうして、われわれは政治問題を完全に回避……、いや完全にとはいかなくてまた別の政治が出てくるわけですが……、少なくともコミットアクセスに関する諸問題はなくなります。これは非常に大きな問題なので、たとえこの1点だけであっても、あらゆるOSSプロジェクトは下手な分散モデルを利用するべきじゃないんですよ」

中央で管理する→ いい加減に取り込む →不具合が起こる。  →厳密に管理する → 複数人で行うと失敗する→管理者は一人になる。 → 沢山の人から要求を受け入れられない→信頼できる頭のいいやつを中心にサブプロジェクトを作る。→馬鹿なやつや失敗したものは拒否・無視される。→感情的な問題が起こる。

 

おそらく、ここに各プロジェクトの大変さがあったと思われます。仕事でもここの管理は大変ですし。

本の虫: gitの10周年を記念したLinus Torvalsへのインタビューの翻訳
http://cpplover.blogspot.jp/2015/04/git10linus-torvals.html
BitKeeperがやってきてからというもの、ソース管理に対する見方が変わったね。BitKeeperは大抵のことを正しく行っていた。レポジトリのローカルコピーがあること

 

Git誕生10周年を記念した開発者のリーナス・トーバルズ氏のインタビュー - GIGAZINE
http://gigazine.net/news/20150407-10-years-git-linus-torvalds/
トーバルズ氏はBitKeeperが世の中に登場するまではSCMの開発に全く乗り気ではなく、むしろ「毛嫌いしていた」ほどだと語っています。しかしそんなトーバルズ氏がBitKeeperを目にした時には「SCMを見る目が変わった」とのこと。その理由についてトーバルズ氏は「BitKeeperは問題をうまく解決しており、リポジトリをローカルに保存し、マージする仕組みは大きな意味がありました。分散型バージョン管理の大きなメリットは、全員のローカル環境にリポジトリを置くことで、『誰に変更を許可するのか』という政治的対立が生じていたSCMの問題が解消できることです」と語っています。

大事なことは、自分のところには、自分が認めたものだけを入れる(自分のものを良い物なら参考にして改善する)というスタンスです。push /pull ではなく、pull requestを投げると言っているところにも、その意図が現れていると思います。

リモートだけがレポジトリではなく、ローカルも独立した主役・メインのレポジトリです。

 

このように

分散やマージが目的なのではありません。スムースに自由に好きなタイミングでかつしっかりと開発していくことが主目的です。

概念的なものは以上の話ですが、実現するために、機能的な実運用の面でも大事にしていることがあります。

次はそれを説明していきます。

 その3へ続く

Delicious にシェア
Digg にシェア
reddit にシェア
LinkedIn にシェア
LINEで送る
email this
Pocket

343 views.



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です