Ubuntu日和

【第30回】DebianとUbuntu、CentOSとRHELから学ぶ、Upstreamとの関係

最新のDebian 12のデスクトップ画面(GNOME版)

 2023年6月10日に「Ubuntuの母」とも言える、Debianの最新版「Debian 12」がリリースされた。そこで今回はUbuntuを深く使いこなすなら知っておいたほうが良いDebianとの関係、Ubuntuにおける「Upstream」と「Downstream」の位置づけ、さらには最近話題のRHELとCentOS Streamとの違いなどについて紹介しよう。

Debian 12(bookworm)のリリース

 冒頭でも紹介したように6月10日に、Debianの最新版である「Debian 12」がリリースされた。DebianはUbuntuの元になっているLinuxディストリビューションだ。Debianで提供されるほとんどのパッケージはUbuntuでも提供される。よって、Debianの最新版は将来的なUbuntuの最新版に影響を与えることになる。ただし、実際は異なる点も多い。

 最初に「 Debian (でびあん)」の位置づけについて紹介しよう。本連載の初回でも紹介したように、現在続いているLinuxディストリビューションの中でもDebianは最古参の存在だ。その登場は1993年までさかのぼり、フリーソフトウェアで構成された、誰でも自由に使えるOSの継続的な提供を目的としている。Ubuntuのように特定の企業のバックボーンを持たず、純粋にコミュニティのみで運営していることも特徴の1つだろう。余談ではあるが「Debian」の名前は、創設者であるIan Mardockと当時の妻の名前である「Debra」から付けられたらしい

 Debianの歴史はパッケージ管理システムの歴史でもある。その堅牢なシステムとメンテナンスツールの充実により、現在までに多数の「 Debian派生ディストリビューション 」が登場している。もちろんUbuntuもその1つだ。Debianの歴史については、「Debian小史」にまとまっているので、ぜひそちらも参考にして欲しい。

「Debian小史」には初期の情報やそれに関わった人もきちんと記録されている

 Debianはおよそ2年ごとにリリースを行なっている。ちょうどUbuntuの長期サポート(LTS)版と入れ違いになっており、西暦の偶数年にUbuntuのLTSが、奇数年にDebianがリリースされる感じだ。ただしUbuntuが、リリース日を最初から決めるタイムベースのリリースになっているのに対し、Debianはリリースクリティカルな不具合がすべて「解決」するまではリリースしないという、「 品質ベース 」のリリースを採用している。よって必ずしも2年ごとにリリースされるとは限らない。しかしながら2年ごとにリリースできるよう、開発期間中の特定の〆切期日はあらかじめ決められており、それに対するリリースマネージメントがしっかりしているため、20年近くもの間「およそ2年」ごとのリリースを継続できている。

 ちなみにDebianの開発コードネームは伝統的に映画「トイ・ストーリー」のキャラクターから名付けることになっている。Ubuntuと異なりアルファベット順になるわけではないし、結構先のリリースまでコードネームが決まっていたりもする。今回の「bookworm」もトイ・ストーリーの登場キャラクターの1人だ。その名前から類推できるように、特定の人にはセンシティブな見た目なので「ググる」際は注意しよう。

 Ubuntuに対してDebianは「選択の自由」も重要視している。たとえばDebianはインストール時にデスクトップ環境を選択できるし、Ubuntuに比べるとサポートしているCPUアーキテクチャも多い。使用するソフトウェアを決め打ちすることで、Live環境とインストーラーを同一化させ初心者が悩まないようにしているUbuntuとは対照的だろう。

UbuntuとDebianの違い。ちなみに公式・非公式に関係なくフレーバー(派生品)は入れていない)

 本連載の第1回でも紹介しているように2004年に登場したUbuntuは、「Debianの成果物」を元に開発が行なわれている。ともすれば「人の褌で相撲を取る」ようにも見えるわけで、DebianとUbuntuの関係については気になるかもしれないが、実はそこまで険悪な関係ではない。むしろ良好な方だろう。Ubuntuが登場した当初は、Debianの主力を引き抜いてUbuntuの開発に注力させていたこともあって、メーリングリスト等では若干ギスギスしていたそうだが、現在はそのあたりもほとんど自然解消してしまったようだ。

 たとえばUbuntuでデスクトップ環境のパッケージをメンテナンスしている人はDebianのGNOME環境のメンテナンスも積極的に行なっているし、日本語入力関連でもDebianとUbuntuの双方で活発に動いている人がいる。日本の場合、Linuxディストリビューションそのものの「開発者」は、新しい人がそこまで増えないこともあって、ディストリビューションをまたいで情報共有をしながら開発を進めていたりもする。結局のところ、「利用者」はそれなりにいても「開発者」はなかなか見つからないという、ソフトウェアではよくある話ではある。

Debianのインストール

 せっかくなので、Debianのインストール方法についても簡単に紹介しておこう。昨今のLinuxディストリビューションはおおよそ、「インストールイメージをダウンロード」して「イメージをUSBメモリやDVD/CD-Rに書き込み」、それを「インストール対象のマシンで起動してインストールする」の3ステップで完了する。これはDebianも同じだ。

 よってまずはDebianのダウンロードページから、インストールイメージをダウンロードしよう。Debian 12のamd64(つまり最近のPC)向けのイメージなら「debian-12.0.0-amd64-netinst.iso」というファイルとなる。738MiBぐらいのファイルだ。Ubuntuの場合は4GiBぐらいのファイルになるが、これはUbuntuが「インターネットがなくてもインストールできる」ように、必要なパッケージをすべてイメージに取り込んでいることによるものだ。Debianはインストール時にさまざまなインストールオプションを選択できるため、この方法が使えない。よってネットワークインストールが必要なことから「netinst」と名前がついている。ちなみに複数のインストールイメージを駆使して、インターネット不要な環境でもインストールできるオプションもある。

 ダウンロードしたインストールイメージの作成方法や起動方法はUbuntuと同じだ。手順は「人気Linuxディストリビューション、Ubuntuを触ってみよう!」などを参考にしてほしい。イメージから起動できたら、あとは画面の指示に従ってインストールしていくことになる。

インストールイメージの起動画面。基本的に「Graphical install」を選択し、画面の指示に従っていけば良い

 ここで言う「Graphical」はCLIベースの画面であることに注意しよう。「日本語」を選んだあとは「OK」や「続ける」を選んでいけば良い。rootのパスワードは未入力ならUbuntuと同じようにsudoコマンドで管理者権限を取得する形になる。

Debianはインストール時に使用するデスクトップ環境を選べる

 GNOMEを選んでインストールすると、DebianとUbuntuで基本的な使い方の違いはほぼなくなる。見た目(デスクトップシェル)は大きく異なるものの、ほかのUIツールについてはそこまで困らないだろう。

UbuntuにおけるUpstreamとDownstreamとは

 Ubuntuから見るとDebianは「 Upstream 」となる。Linuxディストリビューションにおける「Upstream」は「開発の上流側」という意味だ。

 一般的にLinuxディストリビューションは、別途開発されている多くのソフトウェアをパッケージングして配布する形をとる。よって「Linuxディストリビューションの開発元」と「ソフトウェアの開発元」は別になることが大半だ。あるLinuxディストリビューションで不具合が発生した場合、根本的には「ソフトウェアの開発元」で修正するのが正しい。そうすれば別のLinuxディストリビューションでも同じ問題が解決するからだ。よってどのディストリビューションの開発者も、おおよそ「Upstreamとの協力」に腐心することになる。それに対して、ソフトウェアから見たLinuxディストリビューションを「Downstream」と呼ぶこともある。

基本的にオリジナルのソフトウェアから、必要に応じてパッチを適用しつつディストリビューションを構築する

 Ubuntuの場合、ソフトウェア自体もUpstreamだが、Debian自体もUpstream扱いとなる。Ubuntuで発見/修正した不具合は、もし原因が分かったなら、原則としてDebianにも再現方法や修正内容を報告することが要求される。そうすればDebianとUbuntuの差分が小さくなり、新しいバージョン・リリースへの対応が楽になるからだ。

 前述したようにUbuntuは「Debianの成果物を流用して」作られている。どのように流用しているかというと、半年間のリリースサイクルの間に次のような作業を行なう。

  • Debianの開発版から最新のパッケージを同期・マージする
  • Ubuntuの開発版で発生した不具合を修正する
  • 次のリリースに向けて新機能を作り込む

 Debianとの関係において重要なのが、最初の「同期・マージ」だろう。あるパッケージにおいてDebianとUbuntuで差分に違いがない場合、つまりUbuntu側に独自のパッチが適用されていない場合、そのパッケージは機械的に同期する。それに対して差分がある場合は、開発者がその内容を精査して、差分を取捨選択しながら取り込む。これを「マージ」と呼んでいる。よって差分が少なければ少ないほど、自動化できて手間が少なくなるというわけだ。

 Ubuntuの開発サイクルの前半においてはこの同期・マージ作業が主体となる。後半は不具合を修正していく上でバージョンがころころ変わっては困るので、機械的な同期は止めて、必要に応じて取り込むというスタイルにしている。Debianも含めたリポジトリとパッケージの変遷をまとめたのが次の図だ。

アーカイブ上のパッケージの変遷図。Debianはsidを軸に開発し、Ubuntuはsidの成果を取り込みつつ開発を行なう。実際はほかにもさまざまなコンポーネントが存在する

 Debianには直近のリリースである安定版(stable)とは別に、次期リリース向けの「testing」と、常に最新のパッケージが置かれる「sid」が存在する。Ubuntuの開発中はsidにあるパッケージを定期的に取り込む形を採用していることが分かるだろう。

 ちなみにUbuntuとDebianはいわゆる「バイナリ互換」ではない。UbuntuはDebianのソースパッケージを元にしているが、ビルド自体はUbuntuのビルドシステムを使っている。さらにDebianとUbuntuはリリース時期によってコンパイラなどのビルドツールが異なる。Debian/Ubuntuのバイナリパッケージを相互にインストールできる可能性は高いものの、それを保証しているわけではない点に注意しよう。たとえばインストールして、いざアプリケーションを起動するとすぐに落ちたり、CLIから起動ログを見ると「not found」なんてエラーメッセージが残っているようなら、高確率で必要なライブラリのバージョンが合っていないケースだ。

RHELとその仲間たち

 Debian/Ubuntuと同様に広く使われているLinuxディストリビューションが、Red Hatによる「 Red Hat Enterprise Linux(RHEL) 」とそれに関連するディストリビューションだ。RHELに関しては、最近パッケージのソースコード公開ポリシーを変更したことで話題になっていたので、そちらについても軽く紹介しておこう。

 RHEL系のディストリビューションの中でもUbuntuとDebianの関係に近いのが、RHELとFedora/CentOS Streamだろう。汎用的なLinuxシステムに限定すると次のような関係になる。

  • Fedora:Red HatがサポートするFedora Projectで開発されているディストリビューション。およそ半年ごとにリリースし、最新の機能を取り込む実験場としても使われている。また「Rawhide」と呼ばれるローリングリリース版も存在する。
  • CentOS Stream:Red HatがサポートするCentOS Projectで開発されているディストリビューション。Fedoraの成果物を取り込みながら、RHELの次のリリースに向けて各種フィードバックを得るための場として使われている。
  • Red Hat Enterprise Linux(RHEL):最も有名で最も成功した商用Linuxディストリビューション。

 UbuntuのUpstreamがDebianであるのと同じように、RHELの直接的なUpstreamはCentOS Streamとなる。さらにCentOS StreamのUpstreamとしてFedoraが存在する。CentOS StreamはRHELの次期リリースに向けた開発版という位置づけで、Fedoraはさらに最新の技術やソフトウェアを積極的に取り込むディストリビューションになっている。

 ちなみにFedoraの「ローリングリリース」とは、短い期間で積極的にソフトウェアを更新していくモデルだ。Ubuntuで言うと日々のパッケージの更新(「apt upgrade」による更新)によって、常に最新のリリースに追随できるようなものだとイメージすれば良いだろう。代表的なディストリビューションとしてArch LinuxやGentoo Linux、openSUSE Tumblewheedなどがローリングリリースを採用している。

 このように、Red HatはFedoraからRHELに至るまで深く関わり、Linuxに関連するさまざまなレイヤーのソフトウェア開発に携わっている。Ubuntuを含む現在のLinuxディストリビューションは、Red Hatが擁する多くの開発者なしには成り立たないと言っても過言ではないだろう。

 ところで「CentOS Stream」とは別に「 CentOS 」というディストリビューションも存在する。そろそろ「存在した」と言うべきかもしれない。CentOSは簡単に言うと「RHELのソースパッケージを再ビルドして提供する無償のLinuxディストリビューション」だった。つまり登場当時は第三者が作った「無償版のRHELクローン」みたいな存在だったのだ。

 なぜこれができるのかと言うと、まずRHELはFLOSS(Free/Libre Open Source Software)を採用しており、その中にはGPLのようにバイナリの頒布者に対してソースコードの開示義務を持つライセンスも存在する。よってRed Hatは頒布者かどうかに関係なく、ソースコードを取得できるようにしていた。CentOSを含む「 RHELクローン 」と呼ばれるディストリビューションは、この情報を元に構築されている。つまりCentOSはもともと「RHELのDownstream」だったのだ。

 そのCentOSだが2014年にRed Hatがスポンサーとなった。さらに2020年にはCentOS ProjectとしてCentOS Streamに一本化することがアナウンスされる。つまり「RHELのUpstream」になったのだ。そこで「RHELのDownstreamとしてのCentOS」を求める人たちがCentOSライクなRHELクローンを作るようになる。有名どころだとRocky LinuxやAlmaLinuxだろう。

 さて、最近話題の「RHELがソースコードの一般公開をやめる」話を理解するためのパーツがようやく揃った。来年の2024年6月30日に「DownstreamとしてのCentOS」として最後まで残っていた「CentOS 7」のサポート期間が終了する。それに関連してかどうかは不明だが、Red Hatから「RHELのソースコードの一般公開をやめる」旨の報告がなされる。つまり一般公開されるのはUpstreamであるCentOS Streamのソースコードリポジトリのみで、RHEL本体で採用されているソースコードはRHELの契約者のみに限定するというわけだ。

【17:30訂正】記事初出時、CentOS 7のサポートが終了したと記載しておりましたが、正しくは2024年6月30日にサポート終了です。お詫びして訂正します。

 これにより純粋な「RHELクローン」の作成が難しくなる。また、Red Hatは上記報告に続けて単に成果物をリビルドするだけのDownstreamに対して強い言葉で非難している。Rocky LinuxのサイトでもAlmaLinuxのサイトでも「検討する課題はあるものの、(短期的には)問題ない」との告知を出しているため、すぐにどうこうということはないと思われるが、今後もプロジェクトを継続するためにはそれなりの対応が必要になるだろう。それが今回の話の経過だ。

 当初UbuntuとDebianの話をするはずが、いつの間にかRHELの話ばかりになってしまった。ただ、DebianにしろRHELにしろ、せっかくLinuxを使うならほかのディストリビューションのことを知っておいて損はない。たとえUbuntuが性に合わなかったとしても、ほかのLinuxディストリビューションなら気が合うということはよくある話だ。ぜひ、いろんなLinuxに手を出して、「自分にとってはやっぱりWindowsが一番だ」という思いを強くして欲しい。……いや、筆者はUbuntuが一番だと思っていますよ?