रिप्रोड्यूसिबल बिल्ड्स प्रकाशित सोर्स कोड और रिलीज़ बाइनरी के बीच एक सत्यापन-योग्य कड़ी प्रदान करते हैं। हमारा वर्तमान रिप्रोड्यूसिबल-बिल्ड कवरेज Android F-Droid रिलीज़ पर लागू होता है। हम इस कवरेज को अतिरिक्त Android और iOS डिस्ट्रीब्यूशन चैनलों तक विस्तारित करने का इरादा रखते हैं।

Android

F-Droid

Gem Wallet प्रकाशन से पहले F-Droid APK को फिर से बिल्ड करने और सत्यापित करने के लिए स्वतंत्र F-Droid बिल्ड इन्फ्रास्ट्रक्चर का उपयोग करता है।

सत्यापन मॉडल

Gem Wallet प्रत्येक रिलीज़ के लिए एक हस्ताक्षरित F-Droid APK प्रकाशित करता है। इससे अलग, F-Droid बिल्ड सर्वर एक क्लीन एनवायरनमेंट से सार्वजनिक बिल्ड रेसिपी निष्पादित करते हैं:

  1. F-Droid मेटाडेटा एक सटीक 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 बिल्ड इन इनपुट्स को इस प्रकार नियंत्रित करता है:

  • android/reproducible/versions.sh में Rust टूलचेन और cargo-ndk संस्करणों को पिन करके;
  • cargo-ndk को --locked के साथ इंस्टॉल करके, जबकि एप्लिकेशन की Rust डिपेंडेंसीज़ कमिट की गई Cargo.lock से रिज़ॉल्व होती हैं;
  • Android प्रोजेक्ट और F-Droid मेटाडेटा दोनों में सटीक Android NDK रिविज़न को पिन करके;
  • स्पष्ट NDK लिंकर और आर्काइवर पाथ के साथ Linux x86_64 होस्ट पर बिल्ड करके;
  • नेटिव APK टार्गेट्स को armeabi-v7a और arm64-v8a तक सीमित करके, x86_64 बिल्ड होस्ट से स्वतंत्र रूप से;
  • Google पुश और रिव्यू मॉड्यूल के बिना, समर्पित fdroid प्रोडक्ट चैनल का उपयोग करके;
  • नॉन-डिटर्मिनिस्टिक DEX आउटपुट और मैपिंग आइडेंटिफ़ायर को रोकने के लिए -dontoptimize के साथ R8 ऑप्टिमाइज़ेशन को अक्षम करके;
  • Gradle को डेमन या कॉन्फ़िगरेशन कैश के बिना चलाकर और रिलीज़ बिल्ड से पहले ट्रांसफ़ॉर्मेशन कैश साफ़ करके।

सटीक सोर्स कमिट, बिल्ड कमांड, आउटपुट पाथ, NDK रिविज़न, अपस्ट्रीम APK URL और अनुमत साइनिंग सर्टिफिकेट F-Droid मेटाडेटा में सार्वजनिक हैं। Rust, Cargo, NDK टूलचेन और Gradle को कॉन्फ़िगर करने वाली स्क्रिप्ट्स एप्लिकेशन सोर्स के साथ android/reproducible के अंतर्गत मेंटेन की जाती हैं।

सुरक्षा गुण और सीमाएँ

एक सफल F-Droid सत्यापन यह दर्शाता है कि Gem Wallet द्वारा प्रकाशित हस्ताक्षरित APK को घोषित सोर्स कमिट और बिल्ड रेसिपी से रिप्रोड्यूस किया जा सकता है। यह री-बिल्ड Gem Wallet इन्फ्रास्ट्रक्चर के बाहर किया जाता है, जिससे विश्वास के एकल बिंदु के रूप में हमारी रिलीज़ पाइपलाइन पर निर्भरता कम हो जाती है।

रिप्रोड्यूसिबिलिटी यह सिद्ध नहीं करती कि सोर्स कोड कमज़ोरियों से मुक्त है, कि हर डिपेंडेंसी भरोसेमंद है, या कि चुना गया कंपाइलर टूलचेन किसी समझौते से मुक्त है। इन जोखिमों के लिए रिप्रोड्यूसिबल बिल्ड्स के अतिरिक्त सोर्स समीक्षा, डिपेंडेंसी नियंत्रण और टूलचेन सुरक्षा आवश्यक हैं।

बिल्ड स्थिति और सत्यापित रिलीज़ Gem Wallet F-Droid पेज पर उपलब्ध हैं।

Universal APK और Google Play

Gem Wallet का यूनिवर्सल APK और Google Play रिलीज़ वर्तमान में ऊपर वर्णित F-Droid सत्यापन के अंतर्गत नहीं आते। इन Android डिस्ट्रीब्यूशन चैनलों के लिए रिप्रोड्यूसिबल-बिल्ड समर्थन भविष्य के कार्य के रूप में नियोजित है।

iOS

App Store रिलीज़ वर्तमान में रिप्रोड्यूसिबल नहीं है। iOS के लिए रिप्रोड्यूसिबल-बिल्ड समर्थन और App Store बाइनरी का स्वतंत्र सत्यापन भविष्य के कार्य के रूप में नियोजित है।

Frequently Asked Questions

रिप्रोड्यूसिबल बिल्ड्स किसी को भी सार्वजनिक सोर्स कोड से Gem Wallet बिल्ड करने और यह सत्यापित करने की सुविधा देते हैं कि परिणामी ऐप आधिकारिक रिलीज़ से मेल खाता है। यह अतिरिक्त पारदर्शिता प्रदान करता है और यह पुष्टि करने में मदद करता है कि प्रकाशित ऐप उसी सोर्स कोड से बिल्ड किया गया था जो GitHub पर उपलब्ध है।
ओपन सोर्स का अर्थ है कि Gem Wallet का सोर्स कोड सार्वजनिक रूप से उपलब्ध है और कोई भी इसकी समीक्षा कर सकता है। रिप्रोड्यूसिबल बिल्ड्स एक कदम आगे जाते हैं: वे स्वतंत्र डेवलपर्स और F-Droid जैसी सेवाओं को घोषित सोर्स कोड से ऐप बिल्ड करने और यह सत्यापित करने की सुविधा देते हैं कि परिणामी Android APK आधिकारिक Gem Wallet रिलीज़ से बाइट-दर-बाइट मेल खाता है।
हाँ। आप सार्वजनिक Gem Wallet सोर्स कोड से Android और iOS दोनों ऐप बिल्ड कर सकते हैं। Android ऐप सार्वजनिक बिल्ड स्क्रिप्ट्स और पिन किए गए टूलचेन सेटअप का उपयोग करके रिप्रोड्यूसिबल बिल्ड्स का समर्थन करता है। आप iOS ऐप को भी लोकल रूप से बिल्ड और रन कर सकते हैं।
रिप्रोड्यूसिबल बिल्ड स्क्रिप्ट्स और पिन किया गया टूलचेन सेटअप सार्वजनिक हैं। F-Droid मेटाडेटा प्रत्येक रिलीज़ के लिए सटीक सोर्स कमिट, Android NDK रिविज़न, बिल्ड कमांड और अपेक्षित APK आउटपुट घोषित करता है। F-Droid स्वतंत्र रूप से Android ऐप को फिर से बिल्ड करता है और उसे केवल तभी प्रकाशित करता है जब APK पेलोड Gem Wallet रिलीज़ से बाइट-दर-बाइट मेल खाता है।
यदि आपके पास कोई प्रश्न है, आपको बिल्ड से जुड़ी कोई समस्या आती है, या आपको कोई विसंगति मिलती है, तो कृपया Gem Wallet GitHub रिपॉज़िटरी में एक issue सबमिट करें। समस्या की जाँच में हमारी मदद के लिए अपने एनवायरनमेंट, बिल्ड चरणों और किसी भी प्रासंगिक एरर संदेश की जानकारी शामिल करें।