পুনরুৎপাদনযোগ্য বিল্ড প্রকাশিত সোর্স কোড এবং রিলিজ বাইনারির মধ্যে একটি যাচাইযোগ্য সংযোগ প্রদান করে। আমাদের বর্তমান পুনরুৎপাদনযোগ্য-বিল্ড কভারেজ Android F-Droid রিলিজের ক্ষেত্রে প্রযোজ্য। আমরা এই কভারেজ অতিরিক্ত Android ও iOS ডিস্ট্রিবিউশন চ্যানেলে সম্প্রসারিত করতে চাই।
Android
F-Droid
Gem Wallet প্রকাশের আগে F-Droid APK পুনরায় বিল্ড ও যাচাই করতে স্বাধীন F-Droid বিল্ড ইনফ্রাস্ট্রাকচার ব্যবহার করে।
যাচাইকরণ মডেল
Gem Wallet প্রতিটি রিলিজের জন্য একটি স্বাক্ষরিত F-Droid APK প্রকাশ করে। আলাদাভাবে, F-Droid বিল্ড সার্ভারগুলি একটি ক্লিন এনভায়রনমেন্ট থেকে পাবলিক বিল্ড রেসিপি চালায়:
- F-Droid মেটাডেটা একটি সঠিক Git কমিট এবং Android NDK সংস্করণ নির্বাচন করে।
- F-Droid পাবলিক Gem Wallet রিপোজিটরি থেকে সেই কমিট চেকআউট করে।
- পাবলিক পুনরুৎপাদনযোগ্য বিল্ড স্ক্রিপ্ট পিন করা নেটিভ টুলচেইন ইনস্টল করে এবং
:app:assembleFdroidReleaseচালায়। - বিল্ডটি একটি অস্বাক্ষরিত APK তৈরি করে। F-Droid সংশ্লিষ্ট ডেভেলপার-স্বাক্ষরিত APK ডাউনলোড করে এবং নিশ্চিত করে যে এটি
AllowedAPKSigningKeys-এ ঘোষিত সার্টিফিকেট ফিঙ্গারপ্রিন্ট দিয়ে স্বাক্ষরিত। - F-Droid APK স্বাক্ষরটি পুনর্নির্মিত আর্টিফ্যাক্টে কপি করে এবং তা যাচাই করে। Android APK Signature Scheme v2/v3 স্বাক্ষর সাইনিং ব্লকের বাইরের সম্পূর্ণ APK কভার করে, তাই সফল যাচাইয়ের জন্য পুনর্নির্মিত APK পেলোডকে Gem Wallet রিলিজের সঙ্গে বাইট-বাই-বাইট মিলতে হয়।
- 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 বাইনারির স্বাধীন যাচাই ভবিষ্যৎ কাজ হিসেবে পরিকল্পিত।