IR 情報

お問い合わせ

BLOG

IoT 技術コラム

2021 年 09 月 10 日

Linux カーネルの長期サポートをコミュニティで実現!

~ CIP カーネルチームのご紹介 ~

サイバートラストは、産業グレードの組込み機器に向けた活動を行う Civil Infrastructure Platform※1( 以下、CIP と記載します ) に参加し、長期保守が可能な Linux カーネルの開発を推進しています。本稿では、その開発母体である CIP カーネルチームの活動についてご紹介します。

CIP とは

長期サポートを含む産業グレードの組込み機器への取り組みは、これまで機器ごと、システムごとにサイロのように個々別々に行われてきました。しかし、その内容は共通化できる部分が多く、それをまとめることで大きなコスト改善につながります。そこに着目し、コミュニティとして力をあわせて取り組むために Linux Foundation 傘下のプロジェクトとして発足したのが CIP です。

CIP は、産業分野で使用される機器が満たすべき要件として「産業グレード性」、「サステナビリティ」、「セキュリティ」を掲げ、このような要件を満たすために共通的に使用される Linux カーネルや数十のユーザランドパッケージを OSS として提供することを目的としています。

CIP の開発モデル「アップストリームファースト」

CIP では現在、SLTS (Super Long Term Support) Linux カーネルとリアルタイム Linux カーネルの開発・保守を進める CIP カーネルチームをはじめとしていくつかの作業部会が活動しています。ここでは、これらすべての作業部会が開発原則としているアップストリームファーストの概要をご説明します。

図1には、2 つの開発モデルが描かれています。左側のモデルは「独自コミュニティ」モデルです。 このモデルを使用したプロジェクトは、そのベースとなるブランチをアップストリームから分岐させ、自プロジェクトの中で独自に進化していきます。 このモデルでは、一旦分岐したブランチに対し、必要なパッチを次々と適用することによって自プロジェクトを素早く立ち上げることができます。しかし、独自に適用したパッチとアップストリームのパッチの競合リスクが高まり、中長期的には、アップストリームに適用されているパッチを自プロジェクトのブランチに組み込むことが困難になります。

右側のモデルは「アップストリームファースト」モデルです。これは、オープンソースへの修正コードや独自で開発したコードを、源流となるオープンソースツリーに戻すことを原則とする開発モデルです。アップストリームのオープンソースツリーに適用するプロセスが必要になりますが、自プロジェクトによる修正コードや独自コードとオープンソースツリーとの競合のリスクを抑制できるので長期にわたってアップストリームとの共存が可能となり、長期サポートが容易になります。 また、このプロジェクトはその活動での成果や知見をアップストリームと共有することにより、アップストリームに貢献することもできます。

開発モデル

図1.開発モデル

CIP カーネルチームの活動

CIP カーネルチームにとってのアップストリームは通称 Linus メインラインと longterm リリースカーネル ※2(以下 LTS と記載します)です。CIP カーネルチームはアップストリームファーストの開発原則のもと、以下のステップで開発を行っています。

  • LTS のパッチ内容をレビュー
  • セキュリティパッチの適用状況を監視
  • 必要なパッチを LTS に貢献
  • 最新の LTS に基づき CIP カーネルをリリース

CIP カーネルチームの活動概要

図2.CIP カーネルチームの活動概要

CIP カーネルを安全で健全な状態に維持するために、まず、CIP カーネルチームはパッチレビューと CVE チェックによりアップストリームである LTS を監視します。

パッチレビューでは最新の LTS に適用されたパッチについて一つ一つレビューを行い、LTS での適用に問題がないか確認し、必要に応じて LTS にフィードバックをかけます。

また、CVE チェックでは、独自に開発した cip-kernel-sec※3 というオープンソースツールを使用してセキュリティパッチの状況を監視します。一般的に、Linux カーネルに対するセキュリティパッチは最初にメインラインにコミットされ、次に、各 LTS にバックポートされます。しかし、何らかの理由で、特定の LTS に対してはバックポートが実行されない、あるいは遅れる場合があります。CIP カーネルチームは、そういったセキュリティパッチの適用状況を確認し、CIP 開発メーリングリスト※4 で結果を共有します。LTS にバックポートすべきパッチを特定した場合には、LTSにそれらパッチをバックポートすることで、LTS を CIP にとって好ましい状態に維持します。この活動は CIP にとってだけではなく CIP 以外のコミュニティメンバーにとっても有益なものです。

このような活動により、必要なパッチを組み込んだ最新の LTS に基づいて定期的に CIP カーネルをリリースします。最新の LTS に基づくので、この CIP カーネルには LTS に取り込まれているバグフィックスやセキュリティフィックスがそのまま取り込まれていることになります。

CIP カーネルがベースとしていた LTS がメンテナンスを終了した後は、その CIP カーネルは独自メンテナンスを行っていきます。メンテナンスを終了した LTS は更新されなくなるので、メンテナンス中の最も古い LTS に対してパッチレビューを行い、また、CVE チェックの結果も参照して CIP カーネルにマージすべきパッチを特定します。実装の違いにより異なる LTS のパッチをそのまま適用できない場合もありますが、このようなステップを踏むことによって、セルフメンテナンス期間中であってもパッチを見過ごさずに CIP カーネルに取り込めるよう、細心の注意を払って活動を行います。

まとめ

CIP の開発原則であるアップストリームファーストはアップストリームプロジェクトとの連携なしには成立しません。CIP カーネルチームも、Linus メインラインや LTS に対する貢献を行いながら、その成果物を活用することで、長期にわたる安定的なメンテナンスの実現を可能としています。

※1
https://www.cip-project.org/
※2
https://www.kernel.org/category/releases.html
※3
https://gitlab.com/cip-project/cip-kernel/cip-kernel-sec
※4
cip-dev@lists.cip-project.org

本記事に関連するリンク