Linux Kernel Watch

6月版 ソースコード管理システムgitにライバル出現

上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2005/6/21

linux-kernelメーリングリスト(以下LKML)かいわいで起きるイベントを毎月お伝えするLinux Kernel Watch。先月紹介したバージョン管理システムをめぐる混乱は、ひと月が過ぎてもまだドタバタしているようです。

では、5月のLinuxカーネル関連の状況を見てみましょう。

「git vs. Mercurial」がもたらすもの

 4月にLinuxカーネルのソースコード管理システムとして突然デビューを果たしたgitですが、5月になってもgit自体の設計に関する議論が継続しました。

 発端は、Matt Mackallが開発している分散モデルのソースコード管理システム“Mercurial”の出現でした。Mercurialの開発がスタートしたのは、Linusがgitの開発を開始した後だそうです。Mackallは、実際に動作するコードとパフォーマンスを計測した実データをもって、Linusと議論しました。

 Mercurialは、gitよりもストレージ上での効率と処理速度を重視しています。両者の設計の違いとして、gitは各ファイルの各バージョンを圧縮したデータをそのまま持っていますが、Mercurialは容量を節約するためにデータを差分で保持しています。また、ネットワーク経由でデータをやりとりする場合、gitはrsyncで丸ごと同期するため負荷が高く、この点が将来的に問題になりそうです。一方のMercurialは専用のクライアント/サーバ方式を実装し、より効率よく複製するようになっています。

 Mercurialの登場に刺激を受けたのか、gitにも動きがありました。Petr Baudisは、git専用のCGIをWebサーバに導入して、最後のコミットオブジェクトのID()さえあればすべてのデータを配布してくれるようにしたらよいだろう、と提案しました。

注:gitではすべてのオブジェクトを40文字のSHA-1文字列で表現する。

 専用CGIを導入していない状態では、HTTP経由でgitのリポジトリのコピーを取得する際に多くのHTTPリクエストが発生します。各コミットオブジェクト(gitがあるバージョンに関しての情報を保持する形態)の中に親コミットオブジェクトの番号が書いてあるため、少なくともコミットの回数だけHTTPリクエストが発生してしまうのです。

 専用CGIを導入すれば、これを改善することができます。コミットオブジェクトに書いてあるツリーオブジェクト()の番号を調べ、ツリーオブジェクトに書いてあるBLOBオブジェクト(gitの内部で各ファイルを表現)の番号を調べた時点で、あるバージョンのツリーを構成するファイルの一覧が分かるので、HTTPのリクエストを出すことができます。また、一連のコミットオブジェクトや、あるリビジョンから違うリビジョンまでに必要なファイルの一覧を知らせてくれる仕組みがサーバ側にあれば、HTTP経由での配布が効率化するでしょう。

注:gitの内部であるコミットに含まれているファイルの一覧を保持するデータ。

 rsyncは「サーバ側とクライアント側のファイルをすべて調査して、存在しないファイルをコピーする」という動作を行うため、今後カーネルの開発が進んで履歴が蓄積するにつれて、サーバに掛かる負荷が増大すると予想できます。

 問題を明らかにしてくれる競合の存在によって、gitが良い影響を受けるのは歓迎すべきことでしょう。

参考リンク:
  Mercurial http://www.selenic.com/mercurial/

5月の-stableアップデート状況

 5月の-stableはセキュリティホールの発見とその対応に追われ、慌ただしいリリースとなりました。とはいうものの、今回正規の「-stable review」サイクルを通ってリリースされたのは2.6.11.11だけです。

  • 2.6.11.9(5月11日)
    ELFローダのコアファイルを扱う部分にあったセキュリティホールのセキュリティフィックスです。

    また、2.6.11.8には「DOSのパーティションタイプ0を無視する」パッチ()を取り込まないはずなのに、なぜかそれが取り込まれていたため、その部分を戻すパッチも同時に入っています。

    注:このパッチは、ユーザーたちの中で物議を醸していました。

    そのほか、セキュリティ関連の問題があった場合の連絡先がMAINTAINERSファイルに追加されました。

  • 2.6.11.10(5月16日)
    RAWデバイスとpktcdvdにあったセキュリティホールへの対応が行われました。また、このリリースから2.6.11.yカーネルもgit管理になりました。リリースノートも、cat-fileコマンドで見たgitのコミットオブジェクトの内容をそのまま掲載したものになっています。

  • 2.6.11.11(5月27日)
    このバージョンは、通常の2日間のレビューサイクルを通してリリースされました。2.6.11.8以降に蓄積していたさまざまな修正が入っています。

     ・x86_64やPPCアーキテクチャの不具合についての修正
     ・USBドライバの一部の問題に対する修正
     ・IDEドライバのDMAの認識に関する修正
     ・PPCの修正
     ・ext3の競合に関する修正

    など、20近くに上ります。

参考リンク:
  2.6.11.9 ChangeLog http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.11.9
  2.6.11.10 ChangeLog http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.11.10
  2.6.11.11 ChangeLog http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.11.11
  2.6.11.yのgitツリー http://kernel.org/git/gitweb.cgi?p=linux%2Fkernel%2Fgit%2Fgregkh%2Flinux-2.6.11.y.git;a=log

1/2

Index
Linux Kernel Watch 6月版
 ソースコード管理システムgitにライバル出現
Page 1
 「git vs. Mercurial」がもたらすもの
 5月の-stableアップデート状況
  Page 2
 プリエンプトを実現するRTパッチ
 watchdogとシリアルドライバの危険な関係
 アプリをその場で実行するXIPパッチ
 RAWデバイスって消してもいいの?

連載 Linux Kernel Watch


 Linux Squareフォーラム Linuxカーネル関連記事
連載:Linux Kernel Watch(連載中)
Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします
連載:Linuxファイルシステム技術解説
ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する
特集:全貌を現したLinuxカーネル2.6[第1章]
エンタープライズ向けに刷新されたカーネル・コア
ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する
特集:/procによるLinuxチューニング[前編]
/procで理解するOSの状態

Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する
特集:仮想OS「User Mode Linux」活用法
Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説
Linuxのカーネルメンテナは柔軟なシステム
カーネルメンテナが語るコミュニティとIA-64 Linux
IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間