পুনরুৎপাদনযোগ্য বিল্ড প্রকাশিত সোর্স কোড এবং রিলিজ বাইনারির মধ্যে একটি যাচাইযোগ্য সংযোগ প্রদান করে। আমাদের বর্তমান পুনরুৎপাদনযোগ্য-বিল্ড কভারেজ 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-v7aarm64-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 জমা দিন। সমস্যাটি অনুসন্ধানে আমাদের সাহায্য করতে আপনার এনভায়রনমেন্ট, বিল্ড ধাপ এবং প্রাসঙ্গিক যেকোনো এরর মেসেজের তথ্য অন্তর্ভুক্ত করুন।