Files
docview/docs/DEPENDENCY-PROVENANCE.md
2026-09-21 13:41:40 +09:00

120 lines
12 KiB
Markdown

# 開発版パッケージの依存由来台帳
URL比較修正前のArch開発版について、[ui-final台帳](../tests/results/ui-final/dependency-provenance/README.md)は、焦点・Web倍率・失敗案内の修正後のArch開発版を対象にする。561ファイル、圧縮6,378,914 bytes、展開内容17,504,986 bytes。tarは2回生成してSHA-256 `83e69c6c6354f99a8666c94cbdd669a7d4e1a86ee87d956f566132a0ea6f1153`が一致し、台帳も2回生成して`be6ed689820ce414ff23831fee2266e08bbdb3e2bf617b2324c4a924b21cad35`が一致した。
146件の同版cache metadata、system告知530件、PDFium告知17件を照合した。追加したQtの7本文は13資源・2 DataPack・固定版/hash/元全文との対応を検証した部分集合であり、`completeChromiumNotices=false`、runtimeはsystem依存である。この保存台帳のsource欄は当時の未収集状態を保持する。後続の[ソース取得](../tests/results/source-archives/README.md)ではQt 6.11.2一式とtoml++を収集・検査し、現在の収集状況は部分完了となった。[抽出の証拠](../tests/results/source-correspondence/qt-embedded-notices/README.md)と[境界試験](../tests/results/ui-final/dependency-provenance/tests.log)を保存した。Qt資源調査の旧「credits文字列の検索結果」と、後から抽出した完全な告知コメント7件は区別する。
[告知補足版](../tests/results/qt-notice-supplement/README.md)では、固定ソースのWebM/WebPメタデータが指定するPatentファイル2件をUbuntu用debへ追加した。本文は同一だが元の2パスを保持する。IDのみのmini_chromium/libdrmは、上流メタデータが非同梱と記すことを保存し、実SDKのリンク構成未確認という制約を分けて記録した。全告知の完全性判定は引き続き未完了。
## Ubuntu専用環境の配置確認
[Ubuntuの別台帳](../tests/results/ui-final/ubuntu/installed-runtime-final/runtime.json)は公式Qt SDK 6.11.2、専用prefixのqpdf/libzip、Ubuntu 24.04の85 packageを対象にし、1,740ファイルの依存解決を確認した。告知104件、SDK SBOM43件、PDFium出典metadata1件を保存した。Qtの選択位置の告知本文とqpdf/libzipのinstall先告知directoryの欠落3件を明示し、後者2件は選択sourceから各告知を別途採取した。完全なChromium告知・対応sourceとはしない。Archの固定告知pinは流用していない。この台帳の採取後に、[Ubuntu用deb](UBUNTU-PACKAGE.md)を生成して配置・起動・削除を検証した。[範囲と実起動の記録](../tests/results/ui-final/ubuntu/README.md)を併読する。
後続の[SDK告知抽出](../tests/results/source-archives/QT-SDK-NOTICES.md)で、保存済みSBOMに含まれていたChromium告知129entry・105本文を採取し、Qt source原文・元SDK archive・Ubuntu実行時inventoryと照合した。元SBOMの外部package参照不整合1件と本文のない2部品、生成器の除外を明示しており、完全性は未判定。旧台帳の採取時点の本文件数は変更していない。
## 日本語UI修正時の前回台帳
Arch Linux 開発版 tar に何が含まれ、どの資料まで照合できたかを記録する。
前回の[台帳](../tests/results/completion-final/dependency-provenance/first/provenance.json)は、
日本語UI・Web操作等の修正後に生成した `completion-final` パッケージを対象にする。
前回tarのSHA-256は`e384c8c21da11343f845a5ca7310ee6ca944e51c9585de4b2b5c7c73ca352e0e`。
553ファイル、圧縮後6,367,967 bytes、展開内容17,460,237 bytesを全照合した。
2回の台帳生成はbyte一致し、台帳SHA-256は
`9d43b6ae79bb8e7d4ced790ef25f399b4c616ad0d02cf286f59ae93d29d3220b`。
146件のcache metadata、PDFium告知17件とsystem告知523件を照合し、限定23試験が成功した。
Qtの日本語QMはsystem依存の `qt6-translations 6.11.2-1` に対応する。
DocView自身の日本語catalogは本体に含むが、QtのQMをtarへコピーしたとは扱わない。
限定試験・再生成の結果は[前回結果 README](../tests/results/completion-final/dependency-provenance/README.md)、
従来版は[履歴 README](../tests/results/dependency-provenance/README.md)、
固定recipe・告知原文と実ファイルの照合は[別の記録](../tests/results/source-correspondence/README.md)にある。
## 追加告知を収録した従来版
[従来の台帳](../tests/results/dependency-provenance/notices-final/provenance.json)は、
固定ソースとの照合で見つかったPDFiumの2告知を補った時点のパッケージを対象とする。
そのtarのSHA-256は`df9c0cc5396d7d952804a4611c85e5e2130fad821311e76f880a17e78be49c06`。
553ファイル、圧縮後6,342,588 bytes、展開内容17,418,141 bytesを照合した。
追加はlibc++/libc++abi告知と出典metadataの3ファイル。変更は説明文・告知一覧・manifestの5ファイルで、
当時の本体・2ワーカー・PDFiumの全バイナリーは、下記550ファイル版と同一だった。
今回の現行バイナリーとの同一性を主張する記録ではない。
追加告知はソースrevision・版・実ライブラリー・本文hashを結び付けて検証する。
2回の独立パッケージ生成はbyte一致し、別展開先から6条件のGUI起動が成功した。
## 元のローカル採取で確認した範囲
対象は `docview-0.1.0-arch-x86_64-development.tar.gz`、SHA-256 は
`fe1cbeb7af6bf53c82dbee3a571b369454115b5c0f1561674cdb09e26c089c4d`。
圧縮後 6,338,459 bytes、展開ファイル合計 17,369,299 bytes、550 ファイルを
tar 内の payload manifest と照合した。manifest 自身は自己ハッシュから除外されるが、
そのハッシュも台帳へ保存する。元の dependency manifest のハッシュも記録する。
| 対象 | 実際の含有・参照 | 追加で採取した証拠 |
|---|---|---|
| DocView と 2 ワーカー | tar 内の実行ファイル 3 本 | 全ファイル SHA-256 と `readelf` の直接 `DT_NEEDED` |
| 独立 PDFium 155.0.8057.0 | `lib/libpdfium.so` を同梱 | ローカルのライブラリ・15 告知文が tar と一致。`VERSION`、全 10 項目の `args.gn`、固定 lock のハッシュと値を照合 |
| Qt 6.11.2 | Qt/WebEngine の runtime 本体はシステムから動的に参照 | tar 内の 3 実行ファイルから Qt の直接リンクを確認。元の依存 inventory の Qt 共有ライブラリ 42 行を保持 |
| toml++ 3.4.0-2 | 共有ライブラリはシステム側。ヘッダー由来コードは DocView 本体に含む | 本体に定義された `toml::` シンボル 27 件、`toml++/toml.h` の include、同梱 MIT 告知文のハッシュ |
| システム依存候補 146 パッケージ | 元 inventory が記録した共有ライブラリ・Qt 資源など。runtime 本体をこの tar へコピーしていない | 全 146 件で同版・同 architecture・同 package base の cache `.PKGINFO` / `.BUILDINFO` を照合。各 raw metadata と `PKGBUILD` の SHA-256 |
システム共有ライブラリの非同梱は、ヘッダー・テンプレート由来コードが実行ファイルに
含まれないという意味ではない。toml++ は両方を実物で確認した。Qt を含むその他全依存の
ヘッダー由来コードの列挙までは実施していない。また、146 件の一覧は元 inventory の
依存候補集合であり、各資料を開くたびに全件を実際にロードしたとの主張ではない。
PDFium の先頭 `LICENSE` は binary provider の MIT 文である。
PDFium upstream の BSD 条件は `licenses/pdfium.txt` にあり、残りのライセンス文も別々に
対応させた。上位の `LICENSE` だけを PDFium 全体の条件として扱っていない。
lock 記載の provider archive SHA-256 は既存の固定値として記録し、今回その取得 archive を
再ダウンロード・再検証したとは扱わない。
## キャッシュ証拠の意味
Qt base/declarative/webengine と toml++ の 4 archive は全体の SHA-256 も記録した。
他の 142 archive は展開を進めず、最大 8 MiB の先頭領域にある metadata のみ採取する。
raw metadata はハッシュだけを保存し、本文からは package 名・版・architecture・license label・
build date・build tool・`PKGBUILD` hash を選択する。氏名、メール、build directory、
builder の全 installed-package 一覧は保存しない。利用者のホーム内データも探索しない。
このcollector単独では、recipe本文やcacheのruntime payloadを検査しない。
後続の[照合](../tests/results/source-correspondence/README.md)では主要4パッケージの
実行時ファイル1,581件と現在のtoml++ヘッダー51件をcache payloadと照合し、全て一致した。
4つの`PKGBUILD`本文もBUILDINFOのhashに一致する公式commitへ対応させ、patchを取得した。
残り142パッケージのpayload比較、cacheの署名認証、過去のコンパイル時点のヘッダー証明、
システム全体のソース回収を行ったという意味ではない。
## 再実行
Python 3.14 以上の zstd 対応 `tarfile`、GNU `nm` / `readelf`、既存の最終 tar、
`.deps/pdfium`、ローカル Arch package cache を使う。既存結果は上書きしないため、
`--output` は新しいディレクトリーにする。
```sh
python3 tools/record_dependency_provenance.py \
--archive tests/results/ui-final/linux-development-package/package/docview-0.1.0-arch-x86_64-development.tar.gz \
--output tests/results/ui-final/dependency-provenance/new-run
python3 tests/test_dependency_provenance_qt.py -v
```
別配置の入力は `--archive`、`--pdfium-root`、`--package-cache` で指定できる。
同じ tar・ローカル PDFium・cache metadata・調査ツール・source include から同じ JSON を生成する。
時刻や作業ディレクトリーを出力に含めない。cache がない項目は明示的に未採取と記録し、
版不一致や壊れた metadata は成功へ変換しない。本体やワーカー、`ldd` は実行しない。
## 原設計に対して残る作業
[設計 09 §4 G-DISTRIBUTION と §5](design/09-decisions-roadmap.md) は、
実配布物と対応ソース・告知・依存一覧の対応、および対象 OS での配布確認を求める。
この台帳だけで合格とはしない。`sourceCollectionStatus: not-collected` は資料収集状況であり、
全 146 システム依存のソースを一律に再配布する法的義務が確定したという判定でもない。
1. **対応ソースと告知の整理**: 主要4つのArch recipe/patch、PDFium providerの固定recipe・
依存pin・既存15告知の原文対応は確認した。見つかったlibc++/libc++abiの告知不足は現行tarへ
反映した。Qt一式とtoml++のsource取得・固定hash照合、Archの4差分の適用確認は[追加記録](../tests/results/source-archives/README.md)で完了した。[PDFiumのGitソース収集](../tests/results/source-archives/PDFIUM.md)では本体と27依存・追加gitlinkを保管し、公開ヘッダー24件と告知15件の一致、Linux/Windows用パッチの適用を確認した。全linked component・compiler runtime/sysroot・完全な対応ソース、
Qt WebEngineの実GN構成に対応する全Chromium告知は未完了。
[追加の資源調査](../tests/results/source-correspondence/qt-embedded-notices/README.md)で7件の完全な告知本文を収集したが、全Chromium告知は取得できておらず、
当該buildの生成物または同じ構成による生成が必要になる。これらを対象OS試験の不在だけで説明しない。
2. **公開方針の決定を伴う整理**: DocView 自身の公開ライセンス、採用する Qt の条件、
製品で実際に同梱する範囲・形式を決め、その具体的な配布に適用する告知・ソース提供等を
確認する。この台帳は条件の選択や法的適合の断定を行わない。
3. **追加環境が必要な確認**: Windows 11 x64 の署名済み配布・削除、対象OSの物理GPU・表示・入力の受入は残る。Ubuntu 24.04については[新しいOSから作成した専用VM](../tests/results/ubuntu-package/clean-vm/README.md)で依存解決・sandbox・X11/Waylandの起動・削除を検証し、[URL修正版](../tests/results/portal/README.md)では更新と実ファイル選択も確認した。これらをWindowsや物理環境の代わりとはしない。