# 責任共有モデル {#shared-responsibility}

Takumi Images を安全に使い続けることは、弊社だけでは完結しません。
**責任共有モデル**（shared responsibility model）は、上流プロジェクト、弊社、利用者という3者が、それぞれの立場でどこまでを引き受けるかを整理した枠組みです。
このモデルが対象にする次元は、リリース、パッチ適用、テストの3つです。

## リリース: 何が「サポート対象」かを決めること {#releases}

上流プロジェクトは、リリースを切り、そのサポートポリシーを公表する責任を持ちます。
どのバージョンをいつまで保守するか、どんな基準で互換性やリリース間隔を保つかを決めるのは、上流の役割です。
弊社は、上流がサポートするバージョンのビルドを提供する責任を持ちます。
そして利用者は、上流がサポートするバージョンの範囲に留まる責任を持ちます。

この3者のうち、運用上問題になりやすいのは利用者側の責任です。
上流がサポートを終えた、いわゆる EOL のバージョンを使い続けることは、脆弱性対応が滞る主要な原因になります。
上流の修正が止まった時点で、そのバージョンは公開された脆弱性を蓄積する一方になるためです。
EOL に達したバージョンをどう扱うかは、[上流 EOL への対応](/docs/ja/t/images/limitation/upstream-eol) にまとめています。

## パッチ適用: 誰が何を直すか {#patching}

パッチ適用の責任は、上流、弊社、利用者のあいだで明確に分かれます。
上流プロジェクトは、自らが依存しているソフトウェアを更新する責任を持ちます。
弊社は、パッチ済みの上流ソースからイメージを組み立てる責任を持ちます。
利用者の責任範囲は、パッチ済みイメージの上に自分が足したものに限られますが、その中身はイメージの使い方によって変わります。

| 利用のしかた                                  | 利用者が負うパッチ責任                             |
| --------------------------------------------- | -------------------------------------------------- |
| Dockerfile などでベースイメージとして拡張する | 追加したアプリケーションと、その依存関係のパッチ   |
| イメージをそのまま実行する                    | 自分の設定やシークレットなど、イメージの外側の運用 |

ベースイメージとして拡張する場合、追加したレイヤーの中身は弊社の管理下にはありません。
そのレイヤーに含めたパッケージやライブラリのパッチを利用者自身が追わない限り、弊社がイメージ本体をどれだけ最新に保っても、そのイメージ全体の安全性は保てません。
一方、イメージをそのまま実行するだけであれば、追加するレイヤーがない分、利用者の責任は運用面に絞られます。

## テスト: 検証の役割分担 {#testing}

上流プロジェクトは、互換性基準を定める責任を持ちます。
プロジェクトごとに適合基準やベンチマークがあれば、それに沿って「何をもって互換とするか」を決めるのは上流の役割です。
弊社は、その基準を満たす配布物を提供し、機能を検証する責任を持ちます。
利用者は、自分の環境や用途で検証し、段階的にロールアウトする責任を持ちます。

段階的なロールアウトを支えるには、digest 固定と、Renovate や dependabot のような自動更新ツールを組み合わせ、更新のたびに CI で検証することを推奨します。
固定した digest を長期間更新しないと更新の恩恵を受けられず、一方で `:latest` を無検証で追随すると自分の環境での回帰に気づけません。
自動更新ツールが作成する更新提案を CI に通すことで、この両立ができます。

## 3者×3次元の一覧 {#overview}

| 次元       | 上流プロジェクト                 | 弊社                                   | 利用者                                       |
| ---------- | -------------------------------- | -------------------------------------- | -------------------------------------------- |
| リリース   | リリースとサポートポリシーの公表 | サポート対象バージョンのビルド提供     | サポート対象バージョンへの追従               |
| パッチ適用 | 自らの依存関係の更新             | パッチ済みソースからのイメージ組み立て | 自分が足したものへのパッチ                   |
| テスト     | 互換性基準の策定                 | 基準を満たす配布物の提供と機能検証     | 自分の環境や用途での検証と段階的ロールアウト |
