Yeniden üretilebilir derlemeler, yayımlanan kaynak kodu ile sürüm ikili dosyası arasında doğrulanabilir bir bağlantı sağlar. Mevcut yeniden üretilebilir derleme kapsamımız, Android F-Droid sürümü için geçerlidir. Bu kapsamı diğer Android ve iOS dağıtım kanallarına da genişletmeyi amaçlıyoruz.

Android

F-Droid

Gem Wallet, F-Droid APK’sını yeniden derlemek ve yayımlanmadan önce doğrulamak için bağımsız F-Droid derleme altyapısını kullanır.

Doğrulama modeli

Gem Wallet, her sürüm için imzalı bir F-Droid APK’sı yayımlar. Bundan ayrı olarak, F-Droid derleme sunucuları herkese açık derleme tarifini temiz bir ortamda çalıştırır:

  1. F-Droid meta verisi, belirli bir Git commit’i ve belirli bir Android NDK sürümü seçer.
  2. F-Droid, söz konusu commit’i herkese açık Gem Wallet deposundan çeker.
  3. Herkese açık yeniden üretilebilir derleme betikleri, sabitlenmiş native araç zincirini kurar ve :app:assembleFdroidRelease komutunu çalıştırır.
  4. Derleme, imzasız bir APK üretir. F-Droid, buna karşılık gelen geliştirici imzalı APK’yı indirir ve bu APK’nın AllowedAPKSigningKeys içinde bildirilen sertifika parmak iziyle imzalandığını doğrular.
  5. F-Droid, APK imzasını yeniden derlenen çıktıya kopyalar ve imzayı doğrular. Android APK Signature Scheme v2/v3 imzaları, imzalama bloğu dışında kalan APK’nın tamamını kapsar; bu nedenle doğrulamanın başarılı olabilmesi için yeniden derlenen APK içeriğinin Gem Wallet sürümüyle baytı baytına eşleşmesi gerekir.
  6. F-Droid, geliştirici imzalı APK’yı yalnızca doğrulama başarılı olduğunda yayımlar. Yeniden üretilemeyen bir sürüm yayımlanmaz.

Deterministik derleme kontrolleri

Gem Wallet, Rust ile yazılmış native kitaplıklar içerir; bu da çıktıyı derleyici, bağlayıcı, NDK, ana makine platformu ve optimize edici farklılıklarına duyarlı hâle getirir. F-Droid derlemesi bu girdileri şu şekilde kontrol eder:

  • Rust araç zinciri ile cargo-ndk sürümlerini android/reproducible/versions.sh içinde sabitler;
  • cargo-ndk‘yı --locked ile kurar; uygulamanın Rust bağımlılıkları ise depoya işlenmiş Cargo.lock üzerinden çözümlenir;
  • Android NDK revizyonunu hem Android projesinde hem de F-Droid meta verisinde tam olarak sabitler;
  • derlemeyi, NDK bağlayıcı ve arşivleyici yolları açıkça belirtilmiş bir Linux x86_64 ana makinesinde gerçekleştirir;
  • native APK hedeflerini, x86_64 derleme ana makinesinden bağımsız olarak armeabi-v7a ve arm64-v8a ile sınırlar;
  • Google push ve inceleme modüllerini içermeyen özel fdroid ürün kanalını kullanır;
  • deterministik olmayan DEX çıktısını ve eşleme tanımlayıcılarını önlemek için R8 optimizasyonunu -dontoptimize ile devre dışı bırakır;
  • Gradle’ı daemon veya yapılandırma önbelleği olmadan çalıştırır ve sürüm derlemesinden önce dönüşüm önbelleklerini temizler.

Tam kaynak commit’i, derleme komutları, çıktı yolu, NDK revizyonu, upstream APK URL’si ve izin verilen imzalama sertifikası, F-Droid meta verisinde herkese açıktır. Rust, Cargo, NDK araç zinciri ve Gradle’ı yapılandıran betikler, uygulama kaynağıyla birlikte android/reproducible altında tutulur.

Güvenlik özellikleri ve sınırlamalar

Başarılı bir F-Droid doğrulaması, Gem Wallet tarafından yayımlanan imzalı APK’nın, beyan edilen kaynak commit’inden ve derleme tarifinden yeniden üretilebildiğini gösterir. Yeniden derleme, Gem Wallet altyapısının dışında gerçekleştirilir; bu da sürüm hattımıza tek güven noktası olarak duyulan bağımlılığı azaltır.

Yeniden üretilebilirlik; kaynak kodun güvenlik açığı içermediğini, her bağımlılığın güvenilir olduğunu veya seçilen derleyici araç zincirinin ele geçirilmediğini kanıtlamaz. Bu riskler, yeniden üretilebilir derlemelere ek olarak kaynak kodu incelemesi, bağımlılık kontrolleri ve araç zinciri güvenliği gerektirir.

Derleme durumu ve doğrulanmış sürümler, Gem Wallet F-Droid sayfasında yer alır.

Universal APK ve Google Play

Gem Wallet universal APK’sı ve Google Play sürümü, şu anda yukarıda açıklanan F-Droid doğrulaması kapsamında değildir. Bu Android dağıtım kanalları için yeniden üretilebilir derleme desteği, gelecekteki çalışmalar kapsamında planlanmaktadır.

iOS

App Store sürümü şu anda yeniden üretilebilir değildir. iOS için yeniden üretilebilir derleme desteği ve App Store ikili dosyasının bağımsız olarak doğrulanması, gelecekteki çalışmalar kapsamında planlanmaktadır.

Frequently Asked Questions

Yeniden üretilebilir derlemeler, herkesin Gem Wallet’ı herkese açık kaynak kodundan derlemesine ve ortaya çıkan uygulamanın resmi sürümle eşleştiğini doğrulamasına olanak tanır. Bu, ek şeffaflık sağlar ve yayımlanan uygulamanın GitHub’da bulunan aynı kaynak kodundan derlendiğini doğrulamaya yardımcı olur.
Açık kaynak, Gem Wallet kaynak kodunun herkese açık olduğu ve herkes tarafından incelenebileceği anlamına gelir. Yeniden üretilebilir derlemeler bir adım daha ileri giderek bağımsız geliştiricilerin ve F-Droid gibi hizmetlerin uygulamayı beyan edilen kaynak kodundan derlemesine ve ortaya çıkan Android APK’nın resmi Gem Wallet sürümüyle baytı baytına eşleştiğini doğrulamasına olanak tanır.
Evet. Hem Android hem de iOS uygulamasını herkese açık Gem Wallet kaynak kodundan derleyebilirsiniz. Android uygulaması, herkese açık derleme betikleri ve sabitlenmiş araç zinciri kurulumu ile yeniden üretilebilir derlemeleri destekler. iOS uygulamasını da yerel ortamınızda derleyip çalıştırabilirsiniz.
Yeniden üretilebilir derleme betikleri ve sabitlenmiş araç zinciri kurulumu herkese açıktır. F-Droid meta verisi, her sürüm için tam kaynak commit’ini, Android NDK revizyonunu, derleme komutlarını ve beklenen APK çıktısını bildirir. F-Droid, Android uygulamasını bağımsız olarak yeniden derler ve yalnızca APK içeriği Gem Wallet sürümüyle baytı baytına eşleştiğinde yayımlar.
Bir sorunuz varsa, bir derleme sorunuyla karşılaşırsanız veya bir tutarsızlık bulursanız lütfen Gem Wallet GitHub deposunda bir issue oluşturun. Sorunu incelememize yardımcı olmak için ortamınız, derleme adımlarınız ve ilgili hata mesajları hakkında bilgi ekleyin.