/note/tech

第913回 Ubuntu 26.04 LTSで本格的に進むRust版coreutilsへの移行

要約:

■ 1. Ubuntu 26.04 LTSにおけるRust版ツールへの移行概要

  • Ubuntu 26.04 LTSでは、coreutilsとsudoがGNU版からRust版に置き換わった
  • 厳密にはUbuntu 25.10(2025年10月リリース)の時点から置き換わっており、26.04 LTSで正式採用となった
  • sudoはupdate-alternativesの仕組みによりRust版が優先的に選択される
    • 従来のsudoはsudo.wsという名前で残存している
    • sudo update-alternatives --set sudo /usr/bin/sudo.wsで元に戻せる
  • coreutilsはほぼすべてのコマンドがRust版(uutils)に置き換わった

■ 2. coreutilsの変更内容

  • パッケージ構成と配置の変更点:
    • GNU版のコマンドにはすべて「gnu」プレフィックスが付く(例: cpgnucp
    • Rust版のコマンドは/usr/lib/cargo/bin/coreutils/以下にインストールされる
    • /usr/bin/cpなどのパスはシンボリックリンクになった(24.04ではバイナリ直置き)
  • 未移行のコマンド:
    • cpdfmvrmtrueの5コマンドは事情によりGNU版のまま
    • 26.10(2026年10月リリース予定)までに完全移行予定
  • update-alternativesを使わない理由:
    • パッケージのメンテナースクリプト(シェルスクリプト)が内部でcoreutilsを利用しているため、移行中にcoreutilsが使えなくなると困る
    • そのため、別名で両版を共存させシンボリックリンクで実体を参照する構成を採用した

■ 3. 互換性の問題とテストの経緯

  • Rust版とGNU版の間には挙動の差異が存在し、既存のスクリプトやソフトウェアに影響が出る可能性がある
  • Ubuntuはフェーズを分けてテストを実施した:
    • 2025年4月: Ubuntu 24.04・25.04でRust版coreutilsを任意利用可能にし、テストを募集
    • 2025年10月(Ubuntu 25.10): 標準採用し、26.04に向けて各自の環境での試用を依頼
  • 残存する懸念点:
    • 移行開始から1年で網羅的な動作確認には至っていない
    • 英語以外の環境で発生する問題が発見されづらい傾向がある
    • ファイルサイズが大きく、25.10時点ではパフォーマンス問題も指摘された
  • 26.04.1(2025年7〜8月予定)のポイントリリースまでに正しいチャンネルで報告・修正すれば、改善が反映される可能性がある

■ 4. 移行時の対応策

  • Ubuntuが推奨する対応:
    • Rust版の挙動に合わせてスクリプトを修正する
    • 不具合として報告し、積極的に修正作業に参加する
  • その他の選択肢:
    • gnuFOO形式のコマンドを明示的に使い、GNU版を利用するよう作り込む
    • Ubuntu 24.04 LTSを使い続ける(サポートは2029年まで、Ubuntu Proで2034年、Ubuntu Pro Legacyで2039年まで延長可能)
    • すべてのcoreutilsコマンドをGNU版に一括切り替えする
  • サーバー・クラウド・コンテナ用途ではアップグレードに慎重な判断が求められる

■ 5. GNU版coreutilsへの切り替え手順

  • 26.04のcoreutils関連パッケージ構成:
    • coreutils: どちらかに依存するメタパッケージ
    • coreutils-from-uutils: Rust版へのシンボリックリンクを提供(デフォルト)
    • coreutils-from-gnu: GNU版へのシンボリックリンクを提供(coreutils-from-uutilsと排他)
    • rust-coreutils: Rust版の実体(/usr/lib/cargo/bin/coreutils/以下)
    • gnu-coreutils: GNU版の実体(/usr/{bin,sbin}/以下)
  • 切り替えコマンド: sudo apt install coreutils-from-gnu coreutils-from-uutils- --allow-remove-essential
    • coreutils-from-uutilsは必須パッケージ扱いのため--allow-remove-essentialオプションが必須
  • 切り替えできない環境:
    • build-essentialをインストールしている環境ではcoreutils-from-uutilsを削除できない
    • cuda-toolkitなど多くの開発系ツールが依存関係としてbuild-essentialを必要とするため、該当環境ではRust版を使い続ける必要がある
  • その他の選択肢としてcoreutils-from-busyboxcoreutils-from-toyboxも存在し、小規模コンテナ用途に利用できる

■ 6. Rust版採用の背景と理由

  • Ubuntuのきっかけ:
    • LTSが20周年を迎えたことを契機に「今後20年も採用され続けるUbuntu」を目標として掲げた
    • FOSDEM 2025でのSylvestre Ledru(Debian Developer)の発表が契機のひとつ
  • uutilsプロジェクトの経緯:
    • Sylvestre Ledruがコロナ禍のロックダウン中にRust版coreutilsの開発を開始
    • 2021年1月にはDebianパッケージ化(0.0.2)、2022年6月にはDebian unstableへ投入
  • Rust移行の主な理由:
    • セキュリティが主目的ではなく、現代的な言語・エコシステムによって若い開発者を呼び込むため
    • GNU版coreutilsのCVEはそれほど多くない
  • CanonicalのJon Seagerによる方針(2025年3月):
    • 「Carefully But Purposefully Oxidising Ubuntu」と題した記事で方針を発表
    • 堅牢性と安全性の向上を理由に掲げた
    • 新しいコントリビューターがRustを使うことで危険なコードのコミット可能性を低減できる
  • Zellicによるセキュリティ監査(26.04開発中):
    • 100件以上の問題が発見されたが、ほぼすべてが26.04リリースまでに修正された
  • Microsoft Visual Studio CodeでもRust版coreutilsが採用されており、プロダクション実績がある

■ 7. 今後のRust化の展望

  • Ubuntu 26.10(2026年10月)でcoreutilsの完全移行を予定
  • ntpd-rsによるChrony置き換えの計画:
    • 26.10でntpd-rsを利用可能化し、27.04でChronyを置き換える予定
    • NTP・NTS(Network Time Security)・PTP(Precision Time Protocol)をまとめて対応することを目的とする
    • ntpd-rsはLet's Encryptなどで採用実績がある
  • uutilsプロジェクトがprocpsやutil-linuxなどのRust版も提供予定
  • 数年内に「ベースシステムの多くがRust製」という状況になる可能性がある