提出要件
RenMori はオープンコアアーキテクチャを採用しています。本リポジトリのフレームワークとツールのソースコードは公開されており、ビルドごとのポリモーフィズム、鍵の導出と改ざん防止ランタイムは独立したクローズドのバイナリプラグインが提供します。本ページでは、オープンな部分へのコントリビューション、および問題の報告とセキュリティ脆弱性の報告を提出する際に守るべき要件を説明します。ライセンス条項の正本は英語の LICENSE、コントリビューションの要件の正本は英語の CONTRIBUTING.md であり、本ページはそれらの日本語による要約です。
コントリビューターライセンス契約(CLA)
RenMori には、オープンなコードの一部を基に構築されたクローズドのコンポーネントが含まれるため、すべてのコントリビューターは、そのコントリビューションがマージされる前にコントリビューターライセンス契約に同意する必要があります。CLA はプロジェクトに以下の権利を付与します。
- オープンな配布物で当該コントリビューションを使用する権利
- クローズドのビルドで当該コントリビューションを使用する権利
- オープンな部分のライセンス条項が変更された場合に、当該コントリビューションを新しいライセンス条項で公開する権利
CLA がなければ、プロジェクトはクローズドのビルドで該当するコードを適法に使用できないため、そのコードを受け入れることができません。個人および企業向け CLA の署名手続きは、確定後にリポジトリで公表されます。それまでは、完成した作業がすぐに受け入れられない事態を避けるため、コードを書き始める前に Issue を提出して変更案について議論し、CLA に署名する意思があることを確認してください。
提出範囲
提出を受け付ける部分
- CLI、設定の解析、終了コードと CI での動作、GitHub Actions のサンプル
renpy.loaderローダーフックのフレームワークとランタイム SDK- ベースラインのコンテナ形式 v1 とその読み書きの実装
- 標準的な暗号プリミティブの使い方(アルゴリズム自体は公開標準)
- ドキュメント、サンプル、テスト、および Ren'Py 8.x の各バージョンに対する互換性の修正
提出を受け付けない部分
以下はクローズドのコンポーネントに属するため、関連する実装を提出せず、リバースエンジニアリングも行わないでください。
- ビルドごとのポリモーフィズムとミューテーションのエンジン
- 鍵導出の難読化と鍵の復元ロジック
- ネイティブの改ざん防止機能の内部実装
変更にあたってオープンな CLI とクローズドプラグインの間のプロセスインターフェースを調整する必要がある場合は、まず Issue でインターフェースの変更を提案してください。インターフェースは公開されておりバージョン番号が付けられていますが、両側の互換性を保つ必要があります。インターフェースの定義はオープン部分とクローズド部分のインターフェースを参照してください。
セキュリティ原則
すべてのコントリビューションは、以下の原則を守る必要があります。これらは好みではなく、必須の要件です。
- パフォーマンス優先:フレームタイム、シーンの切り替え、CG や動画の再生を含め、ランタイムのパフォーマンスを低下させる施策は一切マージされない。ホットパスにアンチデバッグや自己検査を加えてはならない
- ディスク上に平文を残さない:いかなる場合もディスク上に平文のリソースを残してはならず、フォントも例外ではない
- 復号するのはデータのみで、復号したコードを実行時に生成・実行しない:これにより macOS 版が追加のエンタイトルメントなしで動作できる。アーキテクチャを参照
- データを収集せず、外部へ送信しない:ローダーフレームワークをオープンソースにしている目的の一つは、利用者がこれを検証できるようにすることであり、いかなるネットワーク呼び出しも追加してはならない
- 保護能力を正確に記述する:コードのコメント、ドキュメントおよび出力メッセージに、脅威モデルが認める範囲を超える表現を含めてはならず、「解読不可能」などの表現は使用しない
コードの提出手順
- 変更案を記述した Issue を提出し、CLA に署名する意思があることを確認
mainブランチから新しいブランチを作成- 変更の焦点を絞り、テスト可能なオープンなコードにはテストを添付
- サンプルプロジェクトの保護と実行の流れが引き続き成功し、パフォーマンスに変化がないことを確認
- 対応する Issue を関連付けて Pull Request を提出
ドキュメントの提出
本ドキュメントサイトのソースは MewBaka/renmori.mewbaka.cn にあり、技術ドキュメントの原本は RenMori リポジトリの docs/ ディレクトリにあります。ドキュメントの提出は以下の要件を守る必要があります。
- ビジュアルノベルと Ren'Py 開発の分野で一般的な用語を使用する(例:Ren'Py スクリプト、立ち絵、CG、アーカイブ、セーブデータ、配布用ビルド)
- 専門的で厳密かつ正確な表現を用い、口語的な表現を避ける
- 句点は段落の末尾にのみ使用し、リスト項目、表、見出しには句点を付けない
- 保護能力、性能、互換性に関する記述には検証記録または形式仕様の裏付けが必要であり、測定条件を明記する
問題の報告
GitHub Issues で問題を報告する際は、再現と原因の特定のため、以下の情報を提供してください。
renmori --versionの出力- Ren'Py のバージョン、およびビルドの対象プラットフォーム
renmoriを実行したオペレーティングシステムと Python のバージョン- 使用した保護強度、および完全なコマンドライン
- stdout の最終行の結果 JSON と stderr のエラーメッセージ
- ゲームの実行時に問題が発生した場合は、Ren'Py の
log.txtのうちrenmori:で始まる記録
提出前に、ログから鍵や個人のパスなどの機密情報を削除してください。保護済みゲームのリソースファイルは添付しないでください。
セキュリティ脆弱性の報告
保護方式の脆弱性は、公開の Issue で報告しないでください。専用の非公開の開示窓口は、確定後にリポジトリで公表されます。それまでは、メンテナーに直接ご連絡ください:team@mewbaka.cn。
脅威モデルでは、画面録画、メモリ抽出、単一の作品を対象とした専門家レベルのリバースエンジニアリングなど、保護範囲外の事項をすでに説明しています。これらは既知の制限であり、脆弱性とはみなされません。