玩式草子─ソフトウェアとたわむれる日々

第23回 Linux-3.0に寄せて

この記事を読むのに必要な時間:およそ 4.5 分

筆者の実家の回りでもすっかり田植えが終り,新緑の田んぼを吹き抜ける風が気持ちよく感じられる季節になりました。大震災や原発事故など,人間社会は進む先がよく見えない時代ですが,季節の歩みは止まることなく進んでいくようです。

さて,最近のLinux関連の大きなニュースとして,次のカーネルのバージョンが3.0になる,という話題が飛びこんできました。

具体的には,Linus Torvaldsが5/29付けのLKML(Linux Kernel Mailing List)への投稿で,次のカーネルのバージョンを3.0にする旨のアナウンスを行い,カーネルのバージョン表示に関する部分を3.0に更新して,ソースコードのバージョンタグも3.0に更新したそうです。

本稿執筆時点では3.0-rc5が最新なので,正式なLinux-3.0の公開にはもうしばらく時間がかかるでしょう

ソフトウェアは開発を続けていく限りバージョンが上がるのは当たり前で,PC UNIXのもうひとつの雄であるFreeBSDはすでに8.2にまでバージョンが上っていますし,Firefoxもつい先日4.0がリリースされたと思ったのに,すでに最新版は5.0になっています。

Linus自身,バージョンを3.0にするのは,2.6系が長く続きすぎたことと,そろそろLinux誕生20周年になるという,いわば「キリがいいから」という理由だけで,何ら画期的な新機能が追加されるわけでも,今までのバージョンとの互換性が損なわれるわけでもないことを上記の投稿で力説しています。

一方,筆者のように長くLinuxに触れてきた人間にとっては「3.0」というバージョンにある種の感慨を覚えることも事実です。そこで今回は,Linuxのカーネルバージョンの持つ意味について考えてみたいと思います。

図1 仮想マシンで起動してみたLinux-3.0-rc5カーネル

図1 仮想マシンで起動してみたLinux-3.0-rc5カーネル

ちなみに図1が現在開発中のPlamo64環境で起動してみたlinux-3.0-rc5のバージョン表示例です。確かにバージョン番号の表示こそ3.0.0-rc5になっていますが,Tuxペンギンの表示も従来の2.6系と何ら変らず,3.0は2.6.40の別名と言っても差し支えなさそうです。

ソフトウェアのバージョン番号

Linuxのカーネルバージョンについて考える前に,まずソフトウェアのバージョン付けの一般的なルールについて紹介しておきましょう。

ほとんどのソフトウェアプロジェクトでは,日々成長を続けていくソフトウェアに適切なタイミングで番号を振り,その番号によってソフトウェアのバージョンを管理しています。

どのようなタイミングでどういうバージョン番号を振るかについての厳密な決まりはなく,日付やアルファベットを含めたバージョン番号を使っているプロジェクトもありますが,たいていのプロジェクトではピリオド(".")を区切りにしたA.Bという2つ,あるいはA.B.Cという3つの数字でソフトウェアのバージョン番号を表現するようにしています。

この場合,1つめの数字("A")「メジャーバージョン番号」⁠2つめの数字("B")「マイナーバージョン番号」⁠3つめの数字("C")「リビジョン番号」⁠あるいは「パッチ番号」と称しています。プロジェクトによってはさらに数字を追加してA.B.C.Dというスタイルを採用することもあり,Linuxでも2.6系では2.6.39.2のように4つの数字でバージョンを管理しています。

「メジャーバージョン番号」「マイナーバージョン番号」の呼称は広く用いられていますが,3つめ以降の数字をどう呼ぶかはプロジェクトごとにバラつきがあり,⁠リリースバージョン」「fixバージョン」⁠⁠ビルドバージョン」と呼んだりすることもあります。

それぞれの数字を開発過程のどのような段階で更新するかの判断は開発者に任されていますが,一般的には,左側の数字ほど重要な意味が持たされていて,"A"の部分(メジャーバージョン番号)を更新するのは,重要な機能追加や互換性を失うような変更等があって以前のバージョンとは大きく異なる場合,"B"の部分(マイナーバージョン番号)を更新するのは,メジャーバージョン番号を更新するほどではないけれど,重要なバグを修正したり,新しい機能を追加して以前のバージョンとはかなり異なる場合,と考えられています。

"C"以下の部分は,バグの修正ごとに更新したり,ある程度変更箇所がたまった時点で更新したりと,プロジェクトにより千差万別ですが,以前のバージョンと互換性を損なわないレベルの変更を区別するために用いるのが一般的です。

これとは全く異なるルールでバージョン番号を付けているソフトウェアプロジェクトもあります。その代表例がDonald Knuthが開発した電子組版ソフトウェアのTeXで,最新版のTeXのバージョンは3.1415926となっています。TeXのバージョン3では機能拡張はせず,バグの修正のたびにバージョンが3.14, 3.141,3.1415,‥と円周率に近づいていき,Knuthの死とともにバージョンをπとしてバージョンアップも終了するそうです。同様にKnuthがTeXのために開発したフォント生成システムであるMETAFONTも2.71,2.718,2.7182,‥ とネイピア数(自然対数の底)に近づいていくことになっています。これは数学とアルゴリズムの美を追い続けたKnuth先生流のユーモアでしょう。

バージョン番号は,ソフトウェアの更新履歴を管理する以外の目的にも使われることがあります。たとえば,マイナーバージョン番号("B"の部分)に開発版と安定版を区別する意味を持たせて,マイナーバージョン番号が偶数ならば安定版,奇数ならば開発版とする,という流儀があります。これは後述するようにLinuxの開発過程で採用された方法ですが,最近ではGNOMEプロジェクトを始め,さまざまなソフトウェアプロジェクトで採用されています。

一方,Linuxでは2.6系でこのスタイルは放棄されました。

このようなバージョン番号のルールを知っていれば,既存のソフトウェアを更新する際にどのバージョンにするべきかのメドが立てやすくなります。たとえば,foobar-1.2.3というソフトウェアを使っていて,このソフトウェアの新しいバージョンを調べたら,foobar-1.2.5とfoobar-2.0.1の2種類があった,という場合,foobar-1.2.5は機能的にはやや古くなっているものの,現在自分が使っているバージョンとそれほど大差なく,バージョンアップしても問題はまず生じないだろう,一方,foobar-2.0.1はこのソフトウェアの最新版で,新機能もあれこれ増えていそうだけど,設定ファイル等を見直さなければ正しく動作しないといったリスクもありそうだ,と判断することができます。筆者なら,バージョンアップしたfoobarをすぐに使わなければならない場合は1.2.5を,ドキュメントを読んだり設定ファイルを調べたりする余裕がある場合は2.0.1を選ぶことになりそうです。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入