يوفر البناء القابل لإعادة الإنتاج رابطًا قابلًا للتحقق بين الكود المصدري المنشور والملف الثنائي للإصدار. تنطبق تغطيتنا الحالية للبناء القابل لإعادة الإنتاج على إصدار Android عبر F-Droid. ونعتزم توسيع هذه التغطية لتشمل قنوات توزيع إضافية على Android و iOS.

Android

F-Droid

يستخدم Gem Wallet البنية التحتية المستقلة للبناء لدى F-Droid لإعادة بناء ملف APK الخاص بـ F-Droid والتحقق منه قبل النشر.

نموذج التحقق

ينشر Gem Wallet ملف APK موقّعًا لـ F-Droid مع كل إصدار. وبشكل منفصل، تنفّذ خوادم البناء لدى F-Droid وصفة البناء العامة انطلاقًا من بيئة نظيفة:

  1. تحدد بيانات F-Droid الوصفية التزام (commit) Git دقيقًا وإصدار Android NDK.
  2. يسحب F-Droid ذلك الالتزام من مستودع Gem Wallet العام.
  3. تقوم سكربتات البناء القابل لإعادة الإنتاج العامة بتثبيت سلسلة الأدوات الأصلية المثبّتة الإصدارات وتشغيل :app:assembleFdroidRelease.
  4. ينتج البناء ملف APK غير موقّع. يقوم F-Droid بتنزيل ملف APK المقابل الموقّع من المطوّر، ويتأكد من أنه موقّع بواسطة بصمة الشهادة المعلنة في AllowedAPKSigningKeys.
  5. ينسخ F-Droid توقيع APK إلى الملف المعاد بناؤه ويتحقق منه. تغطي توقيعات Android APK Signature Scheme v2/v3 ملف APK بالكامل خارج كتلة التوقيع، لذا يتطلب نجاح التحقق أن تطابق حمولة APK المعاد بناؤها إصدار Gem Wallet بايتًا ببايت.
  6. ينشر F-Droid ملف APK الموقّع من المطوّر فقط عند نجاح التحقق. أما الإصدار الذي لا يمكن إعادة إنتاجه فلا يُنشر.

ضوابط البناء الحتمية

يتضمن Gem Wallet مكتبات Rust أصلية، ما يجعل المخرجات حساسة للاختلافات في المُصرِّف والرابط و NDK ومنصة المضيف والمُحسِّن. تتحكم عملية البناء لدى F-Droid في هذه المدخلات عبر:

  • تثبيت إصدارات سلسلة أدوات Rust و cargo-ndk في android/reproducible/versions.sh؛
  • تثبيت cargo-ndk باستخدام --locked، بينما تُحل اعتماديات Rust الخاصة بالتطبيق عبر ملف Cargo.lock المضمّن في المستودع؛
  • تثبيت مراجعة Android NDK الدقيقة في كل من مشروع Android وبيانات F-Droid الوصفية؛
  • البناء على مضيف Linux بمعمارية x86_64 مع مسارات صريحة لرابط NDK وأداة الأرشفة الخاصة به؛
  • قصر أهداف APK الأصلية على armeabi-v7a و arm64-v8a، بشكل مستقل عن مضيف البناء x86_64؛
  • استخدام قناة المنتج المخصصة fdroid، دون وحدات Google للإشعارات والمراجعة؛
  • تعطيل تحسين R8 باستخدام -dontoptimize لمنع مخرجات DEX غير الحتمية ومعرّفات الربط (mapping)؛
  • تشغيل Gradle دون الـ daemon أو ذاكرة التخزين المؤقت للتهيئة، ومسح ذاكرات التحويل المؤقتة قبل بناء الإصدار.

إن الالتزام المصدري الدقيق وأوامر البناء ومسار المخرجات ومراجعة NDK ورابط APK الأصلي (upstream) وشهادة التوقيع المسموح بها كلها متاحة للعامة في بيانات F-Droid الوصفية. أما السكربتات التي تهيّئ Rust و Cargo وسلسلة أدوات NDK و Gradle فتُصان مع الكود المصدري للتطبيق ضمن android/reproducible.

الخصائص الأمنية والقيود

يُثبت نجاح تحقق F-Droid أن ملف APK الموقّع الذي ينشره Gem Wallet يمكن إعادة إنتاجه من الالتزام المصدري المعلن ووصفة البناء. تُنفَّذ إعادة البناء خارج البنية التحتية لـ Gem Wallet، ما يقلل الاعتماد على خط الإصدار لدينا كنقطة ثقة وحيدة.

لا تُثبت قابلية إعادة الإنتاج أن الكود المصدري خالٍ من الثغرات، أو أن كل اعتمادية جديرة بالثقة، أو أن سلسلة أدوات المُصرِّف المختارة خالية من الاختراق. فهذه المخاطر تتطلب مراجعة المصدر وضوابط الاعتماديات وأمن سلسلة الأدوات إضافة إلى البناء القابل لإعادة الإنتاج.

تتوفر حالة البناء والإصدارات المتحقق منها على صفحة Gem Wallet على F-Droid.

Universal APK و Google Play

إن ملف Universal APK الخاص بـ Gem Wallet وإصدار Google Play غير مشمولين حاليًا بتحقق F-Droid الموضح أعلاه. ومن المخطط دعم البناء القابل لإعادة الإنتاج لقناتي التوزيع هاتين على Android في عمل مستقبلي.

iOS

إصدار App Store غير قابل لإعادة الإنتاج حاليًا. ومن المخطط في عمل مستقبلي دعم البناء القابل لإعادة الإنتاج لنظام iOS والتحقق المستقل من الملف الثنائي في App Store.

Frequently Asked Questions

يتيح البناء القابل لإعادة الإنتاج لأي شخص بناء Gem Wallet من الكود المصدري العام والتحقق من أن التطبيق الناتج يطابق الإصدار الرسمي. يوفر ذلك شفافية إضافية ويساعد على التأكد من أن التطبيق المنشور قد بُني من نفس الكود المصدري المتاح على GitHub.
المصدر المفتوح يعني أن الكود المصدري لـ Gem Wallet متاح للعامة ويمكن لأي شخص مراجعته. أما البناء القابل لإعادة الإنتاج فيذهب خطوة أبعد، إذ يتيح للمطورين المستقلين والخدمات مثل F-Droid بناء التطبيق من الكود المصدري المعلن والتحقق من أن ملف APK الناتج لنظام Android يطابق إصدار Gem Wallet الرسمي بايتًا ببايت.
نعم. يمكنك بناء تطبيقي Android و iOS من الكود المصدري العام لـ Gem Wallet. يدعم تطبيق Android البناء القابل لإعادة الإنتاج باستخدام سكربتات البناء العامة وإعداد سلسلة الأدوات المثبّتة الإصدارات. كما يمكنك بناء تطبيق iOS وتشغيله محليًا.
إن سكربتات البناء القابل لإعادة الإنتاج وإعداد سلسلة الأدوات المثبّتة الإصدارات متاحة للعامة. تحدد بيانات F-Droid الوصفية الالتزام (commit) المصدري الدقيق ومراجعة Android NDK وأوامر البناء ومخرجات APK المتوقعة لكل إصدار. يعيد F-Droid بناء تطبيق Android بشكل مستقل ولا ينشره إلا عندما تطابق حمولة APK إصدار Gem Wallet بايتًا ببايت.
إذا كان لديك سؤال، أو واجهت مشكلة في البناء، أو وجدت تباينًا، فيرجى تقديم بلاغ (issue) في مستودع Gem Wallet على GitHub. أرفق معلومات عن بيئتك وخطوات البناء وأي رسائل خطأ ذات صلة لمساعدتنا في التحقيق في المشكلة.