見出し画像

リリース番号の秘密

ソフトウェアを使っていると、バージョン番号とかリリース番号というものがある。各製品番号の付け方はまちまちだと思う。今回は、Oracle Solaris と Oracle ZFS Storage のリリース番号のお話。

リリース番号の桁数

リリース番号というのは数字が大きいほど新しいことを意味する。ドットで区切って、メジャー番号、マイナー番号などの様に並べる。例えば、Oracle DatabaseはOracle Databaseのリリース番号の概要にあるように、メジャーリリース、リリースの更新番号、リビジョンのように続く。

リリースやバージョンを表すのにいくつの数字を使うかというのは、製品を作る側の都合でしかないのだが、Oracle Solaris 11.4 は以下のようになっている。

<リリース番号>.<アップデート番号>.<SRU番号>.<ビルド番号>.<respin>

つまり、5つの数字で管理をしている。

なお、マニュアルにあるように、uname -r を実行すると、リリース番号と、アップデート番号(例: 11.4)しか表示されないので、すべて見るには、uname -a か uname -v を実行する必要がある。

jack@solaris:~$ uname -v
11.4.33.92.0

Oracle Solaris のリリース番号の意味

5つの数字を使うことは分かったが、それぞれは何を意味するのだろう?

11.4.33.92.0

11 については説明は不要であろう。Solaris 11 のメジャーリリース番号である。4 はアップデート番号で、11.4 は Solaris 11 Update 4 である。33 はSRU番号と言われるものだ。SRUは Solaris Repository Update の略で、SRU番号が変わることは、pkg update コマンドを実施したときに参照に行く先のレポジトリが更新されたことを意味する。

Solaris 12 がリリースされなくなったことをもって「新しいリリースがでない」という風に受け取られた向きもあると思うが、実際は異なる。11.4 という番号でとどまっていることが良かったかどうかはともかく、機能の追加やバグフィックスはこの SRU のレベルで行われている。

SRU番号の後の92はビルド番号と言われるものだ。開発や修正を行うにあたって、OSのソースコードをコンパイルする作業をビルドという。この番号を理解するには、少しだけ開発のプロセスについて知ってもらう必要がある。

各々開発者は自分が書いたコードに対して単体試験や結合試験を行う。その後、試験結果など必要な情報をとりまとめて、製品版のソースコードの管理をしている開発者に自分のコードを反映させてもらえるよう承認をもらう。はれて承認されると、製品版のコードに自分のコードを反映することができる。

このビルド番号は、めいめいの開発者が行った作業ではなく、製品として出て行くことを認められたコードに対して、定期的にビルドを実行してつけられている番号だ。もちろんこのビルドに対して試験が行われることは言うまでもない。

この例で言うと、11.4 SRU はビルド番号 92 である。
バグを直接読む機会がある方にはこの情報は有効で、st_92 とか st92 と書かれていたら、これはビルド92を指す。したがって、"fixed in st92" と書かれていたら、ビルド92以降の Solaris 11.4 では修正が入っている考えていただいて問題ない。

さて、最後の番号 0 はなんであろうか?

開発している担当者はリリースの予定を知っているので、駆け込みで大きな修正を入れることはしない。大きな修正は普段やっている以上の試験が日必要なこともあるし、それに間違いが紛れやすい。しかしながら、駆け込みで修正しなければいけない理由はいくつかある。

・同時に含めるべきであった修正が漏れた
・重大な欠陥がみつかった

このような場合、適切な対処をした後、おなじビルド番号で再度出荷用のイメージを作り直す。この作業を respin(リスピン) と言っていて、0というのが最初のビルド、やり直しを行うごとに数字が増えていく。0 は何も問題がなくつつがなくリリースに至った証だ。もちろんリスピンが悪いわけではなく、お客様の手元に届く前に見つけられたことは何よりだと思う。

Oracle ZFS Storage のリリース番号の意味

Oracle ZFS Storageのソフトウェアは、現在何らかのサポートをされているものについては2系統ある。一つは、8.7系と言われる番号、もう一つは、8.8 系と言われる番号だ。

// 8.7 系
Appliance Kit: ak/SUNW,ankimo@2013.06.05.7.28,1-1.1
Operating System: SunOS 5.11 ak/generic@2013.06.05.7.28,1-1.1 64-bit

ZFS Storageのソフトウェアの元々のリリース番号はちょっと独特で、メジャーリリース番号は、YYYY.MM.DD.x.y の様な形式になっている。この日付の部分はベースになっているソフトウェアがメジャーリリースとして枝分かれした日付だ。この部分だけを見て「何年も前のソフトウエア」と言われたこともあるが、メンテナンスはずっとしているわけで、何年も前のソフトウェアな訳ではない。

8.7系は古い機材をサポートするために残されている。マザーボードやBIOSなど様々な理由で新しいソフトウェアにアップグレードできない機材があるからだ。2013.06.05.7 は8.7と呼ばれているが、2013.06.05 では長いのでOS 8と呼んでいた名残だ。2013.06.05.7 は8.7、2013.06.05.8 は 8.8 というわけだ。

8.8 系については、Solaris 11.4 SRU 18以降、Solarisのリリース番号との対応が取れるようになっている。ZFS StorageはベースのOSにOracle Solarisを使っている。従って、Solarisに修正があるたびに修正を反映する必要があったわけだが、Solaris 11.4 SRU 18 (2013.06.05.8.18) 以降、おなじソースコードからコンパイルされるようになり、リリース番号の一部にSRU番号を使うようになった。

// 8.8 系
Appliance Kit: ak/SUNW,otoroZ5@2013.06.05.8.29,1-1.3
Operating System: SunOS 5.11 11.4.29.82.3 64-bit

見ていただくと分かるとおり、2013.06.05.8.<SRU番号>となっている。最後の.3はリスピンの番号である。

最後に

ここまで、Oracle Solaris と ZFS Storage のリリース番号について解説してみた。方針はどうあれ、弊社・他社・オープンソースに関係なく、他の製品でも同様なことは行っているであろう。
ソフトウェア製品の切りのいい番号とか、リスピンの番号とおぼしき数字がゼロの製品を見かけたら「ああ、開発の人たち頑張ったんだな」と少しだけ微笑んでいただけたら幸いである。

2022-03-07 追記
Oracle Solaris に "Common Build Environment" (CBE)と言うものが発表され、リリース番号の読み方が書かれていたので、追記しておきます。
通常のサポートに入っている方が受け取る、SRU (Support Repository Update)にたいして、開発者の方が本番に使わない限り自由に使える CBE というものが発表されました。

https://blogs.oracle.com/solaris/post/announcing-the-first-oracle-solaris-114-cbe

リリース番号は以下のような形式になります。

11.4 11.4.<SRU番号>.0.<1ならCBE、0なら SRU>.<ビルド番号>.<respin>
この番号は、今のところ uname -a や uname -v で出力されません。
/etc/os-releaseのファイルに BUILD_ID として書かれています。
BUILD_ID=11.4.45.0.0.115.0

以上何かの参考になれば幸いです。

この記事はここまでです。 最後まで読んでいただいてありがとうございます。 気に入っていただいたなら、スキを押していただいたり、 共有していただけるとうれしいです。 コメントや感想大歓迎です!