BlinkGTK ポータブルアプリケーション作成ガイド

作成者: BlinkGTK Project
最終更新: 2026-07-03
対象: BlinkGTK バイナリ配布物を使い、単一ディレクトリで動作する自己完結型 (ポータブル) アプリケーションを作成する開発者


1. ポータブル版とは

BlinkGTK のポータブル版とは、アプリケーション実行ファイルと BlinkGTK / Chromium ランタイム一式を単一ディレクトリにまとめ、システムへのインストール (RPM/DEB) なしにコピーするだけで動作する構成です。RPATH に $ORIGIN (実行ファイル自身の位置からの相対参照) を用いるため、ディレクトリごとどこに移動しても動作します。

ただし「自己完結」には明確な範囲があります。同梱されるのは BlinkGTK と Chromium ランタイムのみであり、GTK4・glibc・GPU ドライバ等はホストシステムのものを使用します。この境界を理解しないと「コピーしたのに動かない」事態になります。第 2 章で制限を詳しく解説します。

2. 動作環境と制限 (重要)

ポータブル版は「どこでも動く」わけではありません。以下の制限を必ず確認してください。

2.1 CPU アーキテクチャ

2.2 glibc バージョン (最重要の下限制約)

2.3 GTK4 はシステム依存 (同梱されない)

2.4 Wayland 専用 (X11 では動作しない)

2.5 GPU / 描画経路

2.6 Chromium sandbox とカーネル設定

2.7 ファイルシステム要件

2.8 リソース

2.9 フォント

2.10 制限まとめ (チェックリスト)

項目 要件 確認コマンド
CPU x86_64 uname -m
glibc ビルド環境世代以降 ldd --version / ldd ... | grep "not found"
GTK4 4.6+ (システム) pkg-config --modversion gtk4
セッション Wayland echo $XDG_SESSION_TYPE
GPU (EGL 時) Mesa + dmabuf software 経路で切り分け
user namespaces 有効 sandbox 起動失敗時に確認
展開先 FS ext4 等 + exec 可 mount | grep noexec
日本語フォント ホストに必要 fc-list | grep -i mincho 等

3. ポータブルアプリの構成

推奨レイアウト (単一ディレクトリ自己完結):

myapp-portable/
├── myapp                    # あなたのアプリ実行ファイル (RPATH=$ORIGIN/lib)
├── run.sh                   # 起動スクリプト (任意、環境変数の設定用)
├── lib/
│   ├── libblinkgtk-0.1.so.0.0.0
│   ├── libblinkgtk-0.1.so.0     -> libblinkgtk-0.1.so.0.0.0
│   └── chromium/            # Chromium ランタイム一式 (バイナリ配布物から)
│       ├── *.so             # 共有ライブラリ群
│       ├── icudtl.dat / snapshot_blob.bin / v8_context_snapshot.bin
│       ├── content_shell.pak
│       └── locales/ja.pak, en-US.pak
├── share/
│   └── myapp/               # アプリのリソース
└── THIRD_PARTY_NOTICES.html # 必須 (第 6 章)

ランタイム一式は、バイナリ配布 (runtime tarball) の usr/lib64/blinkgtk-0.1/ 以下をそのまま lib/ にコピーすることで得られます。ファイルの取捨選択はしないでください — Chromium ランタイムの .so、.pak、.dat、.bin、locales/ は全て起動に必要です (欠落は起動時クラッシュの典型原因)。

4. ビルド方法

4.1 リンク時の必須事項

アプリは pkg-config を使ってビルドします。PartitionAlloc allocator shim の直接リンクが必須です (pkg-config を使えば自動で含まれます)。shim を欠くとページの読み込みが失敗し黒画面になります。

gcc -o myapp myapp.c \
  $(pkg-config --cflags --libs blinkgtk-0.1 gtk4)

pkg-config を使わず手動リンクする場合は、-lblinkgtk-0.1 に加えて必ず
-lbase_allocator_partition_allocator_src_partition_alloc_allocator_shim を明示してください。

4.2 RPATH の設定 (ポータブル化の核心)

実行ファイルに $ORIGIN 相対の RPATH を与えます:

gcc -o myapp myapp.c \
  $(pkg-config --cflags blinkgtk-0.1 gtk4) \
  -Wl,-rpath,'$ORIGIN/lib' -Wl,-rpath,'$ORIGIN/lib/chromium' \
  $(pkg-config --libs blinkgtk-0.1 gtk4)

RPATH を使わない代替として、起動スクリプトで LD_LIBRARY_PATH を設定する方法もあります:

#!/bin/sh
# run.sh — myapp-portable/ 直下に配置
HERE="$(cd "$(dirname "$0")" && pwd)"
export LD_LIBRARY_PATH="$HERE/lib:$HERE/lib/chromium${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
exec "$HERE/myapp" "$@"

4.3 検証

作成後、配布前に必ず確認してください:

# 1. 依存の完全性 (not found が 0 件であること)
ldd ./myapp | grep "not found"

# 2. shim が直接 NEEDED に入っていること
readelf -d ./myapp | grep allocator_shim

# 3. V8 スナップショットの整合 (同一配布物由来なら通常一致)
# lib/chromium/ の libv8.so / snapshot_blob.bin / v8_context_snapshot.bin を
# 別バージョンの配布物から混在させないこと (起動時クラッシュの原因)

# 4. 実機 (Wayland セッション) での起動確認
./run.sh

5. 配布

6. ライセンス上の義務 (必須)

BlinkGTK / Chromium ランタイムを同梱して配布する場合、以下が必要です:

  1. THIRD_PARTY_NOTICES.html の同梱 — バイナリ配布物に含まれる集約ライセンス表記です。ポータブルアプリにもそのまま同梱してください (Chromium が内包する数百のサードパーティコンポーネントのライセンス条件により必須です)。
  2. FFmpeg (LGPL) について — 同梱の libffmpeg.so は LGPL v2.1+ です。独立した共有ライブラリとして同梱されているため、利用者が差し替え可能な状態を保ってください (静的リンク化・削除・改名をしないでください)。
  3. BlinkGTK 自体のライセンス表記 (LICENSE) も同梱してください。

7. トラブルシューティング (ポータブル特有)

症状 原因候補 対処
GLIBC_x.xx not found ホスト glibc が古い ホスト更新 or 同世代環境で使用 (§2.2)
起動直後にクラッシュ (SIGTRAP) V8 スナップショット混在 / shim 未リンク §4.3 の 2,3 を確認
ウィンドウが出ない X11 セッション / コンポジタなし $XDG_SESSION_TYPE 確認 (§2.4)
ページが黒いまま shim 未リンク readelf -d で確認 (§4.1)
Permission denied noexec マウント / 実行属性喪失 §2.7 (tar.gz で展開し直す)
起動するが文字化け/豆腐 ホストに日本語フォントなし §2.9
renderer 起動失敗 user namespaces 無効 §2.6

8. 関連ドキュメント