F-Droid derleme sunucusu, eski CPU nedeniyle modern Android uygulamalarını derleyemiyor
(news.ycombinator.com)- F-Droid derleme sunucusu, eski CPU nedeniyle modern Android uygulamalarını derleyemiyor
- ARM, x86-64 gibi modern mobil uygulamaların gerektirdiği gelişmiş komut setlerini desteklemiyor
- Sunucunun yükseltilmesi ve değiştirilmesi gerekiyor, ancak maliyet ve altyapı sınırlamaları var
- Geliştiriciler, F-Droid'in sürdürülebilirliği ve teknik olarak güncel kalması konusunda endişelerini dile getiriyor
- Alternatif olarak bulut tabanlı derleme ve sunucu kaynaklarının bağışlanması tartışılıyor
Genel Bakış
- F-Droid, Android açık kaynak uygulamaları için gayriresmî bir mağaza ve uygulamaları doğrudan kaynak kodundan derleyerek dağıtıyor
- Son dönemde derleme sunucusu, modern Android uygulamalarının gerektirdiği CPU komut setlerini desteklemediği için bazı uygulamalar artık derlenemiyor
Derleme Sunucusunun Teknik Sınırları
- Uygulama derlemek için gereken yeni ARM ve x86-64 komutları eski CPU tarafından desteklenmiyor
- Bu sınırlama nedeniyle performans optimizasyonu yapılmış modern uygulamalar ya da güncel kütüphaneleri kullanan uygulamalar derleme dosyası olarak sunulamıyor
- Python, Kotlin gibi modern diller ile Gradle gibi güncel derleme araçları da sık sık daha yeni CPU ortamları gerektiriyor
Topluluk İçindeki Endişeler ve Tartışmalar
- Geliştiriciler ve kullanıcılar, F-Droid'de uygulama kalitesinin sürekli düşmesi ve derleme hatası raporları konusunda endişelerini dile getiriyor
- Altyapının yükseltilmesi gerekiyor, ancak mali kısıtlar ve sunucu yönetimi için personel eksikliği öne çıkıyor
Alternatifler ve Çözüm Arayışları
- Bulut ortamında derleme sunucusu çalıştırılması ya da topluluk tarafından sunucu kaynağı bağışlanması gibi çeşitli seçenekler tartışılıyor
- F-Droid ekibi, dış destek ve yeni donanım sağlayarak sorunu çözme niyetini ortaya koyuyor
Sonuç
- F-Droid'in değeri ve açık kaynak ekosistemini destekleme önemi hâlâ yüksek
- Ancak modern uygulama eğilimlerine uygun altyapısal yenilik ve bakım çabaları zorunlu
1 yorum
Hacker News görüşü
Bu, sunucularının gerçekten çok eski olduğu anlamına geliyor; x86-64-v2'yi desteklemeyecek kadar eski, neredeyse Intel Core 2 Duo döneminden kalma sunucuları düşündürüyor.
Red Hat Enterprise Linux 9'un x86-64-v2 mikro mimari seviyesi hakkında derli toplu yazı incelenebilir.
Tüketici sınıfı bir Epyc CPU'ya geçilirse sunucu performansının çok daha hızlı olacağını düşünüyorum.
Aslında bağış yapmayı düşünmüştüm ama kasada zaten $80,000 kalmıştı.
Yıllık bütçenin $17,000 olduğu düşünülürse, 2-3 bin dolara güncel bir Zen4 veya Zen5 matx tüketici Epyc sunucusu almak yine bütçe içinde kalır.
Eğer gerçekten birkaç tane yaşlı sunucu varsa, tek bir Zen5 sunucu birkaçını birden değiştirebilir; elektrik ve alan tasarrufu da çok daha iyi olur.
F-Droid bütçe durumu da görülebilir.
Görünüşe göre Librapay bağışları buna henüz dahil değil.
Librapay bağış bağlantısı
Asgari gereksinim "Pentium ve Celeron" olarak görünüyordu, bu yüzden yeterli olduğunu sanmıştık.
Ama gerçekte servislerden biri yalnızca v3 veya v4 CPU'larda desteklenen komutları kullanıyordu ve bu yüzden çalışmayı bıraktı.
Görünen CPU ayarını değiştirince normale döndü.
Yani sunucunun kendisi aslında yeterli olabilir; sorun bir yapılandırma hatası, ikili dosyanın belirtilenden daha yüksek özellik istemesi ya da başka bir mesele de olabilir.
cmpxchg16bo kadar da eski olmayan bir komut ve artık zorunlu özellik gibi görülüyor.Gönüllülerin sistemi ayakta tutmak için harcadığı zaman ve emeğe kıyasla £80,000 gerçekten çok az bir para.
Altyapının modernizasyon gerektirdiğini duydum ama bu ciddi yatırım isteyen bir alan.
Fonlar daha rahat olsaydı muhtemelen yatırım yaparken daha özgüvenli davranabilirlerdi.
Sadece sunucu yükseltmesi dışında da çözülmesi gereken çok iş var.
Mevcut durum bence epey endişe verici.
F-Droid şu anda Google hariç en büyük Android uygulama mağazası olduğu için buna daha da ihtiyaç olduğunu düşünüyorum.
Bu sorunu çözmek için bir plan olup olmadığını, F-Droid'in sunucuları ne zaman yükselteceğini ya da Google'ın bu zorunlu gereksinimi geri çekme ihtimali olup olmadığını merak ediyorum (sonuncusunun pek olası olmadığını düşünüyorum).
Bu sorun Gradle Plugin 4.2.0-rc01 / Gradle 7.0.0 alpha 9 sürümünde düzeltilmişti.
İlgili kayıt da hâlâ duruyor.
Bence ilk 10'a bile giremez.
Neden
aapt2hedefe uygun şekilde yeniden derlenmiyor diye merak ediyorum.Kaynak kodu mevcut.
aapt2 kaynak konumu
İçinde inanılmaz fazla ikili dosya var; bazılarını kaynaktan yeniden derlemeye çalıştım ama build sistemi o kadar bozuktu ki hemen vazgeçtim.
aapt2yi tek tek yeniden derlemekten bakım açısından çok daha kolay.Böylece ileride çıkan her ikili dosya için yeniden yama yapmak gerekmeden, ikili güncellemeler otomatik olarak karşılanabilir.
Streaming SIMD Extensions(SSSE3) wiki sayfası paylaşılmış.
Benim eski masaüstüm bile bu komutu destekliyordu ve onu yaklaşık 10 yıl kullandım.
Buna rağmen kaynak kodunda assembly seviyesinde bile bir geri dönüş yolu olmaması şaşırtıcı.
Büyük ihtimalle derleyici x86_64-v2 hedefiyle derleme yaptı.
RHEL 9 da böyle derlendi; RHEL 10 ise x86_64-v3'e çıkıp AVX desteği de ekliyor.
AMD 10h wiki bağlantısı
Pratikte bunu test edecek donanım yok; elde olanlar sadece eski ve yavaş makineler.
Tam olarak anlayabilmiş değilim.
gradleveaapt2açık kaynaksa,buildrootveyaopenwrtbenzeri şekilde bunları doğrudan derleyip araç zinciri oluşturmak daha öngörülebilir sonuç vermez mi?F-Droid de tüm araç zincirini kaynaktan derlese, desteklenmeyen komutlar içeren ikili
gradleveyaaapt2kullanmak zorunda kalmazdı.gradlekendi içinde önceden derlenmiş Java kütüphaneleri gibi bağımlılıkları indirip kullanıyor.Bunların bir kısmı yerel ikili dosyalar içeriyor ve
buildrootya da Linux dağıtımları gibi her kütüphanenin nasıl derlendiğine dair bir meta veri yok.Ayrıca
gradleekosistemindeki her kütüphanenin build süreci farklı olduğu için (standart değil), her şeyi doğrudan kaynaktan yeniden kurmak oldukça zahmetli ve zorlu bir iş.Google'ın upstream tarafta bu sorunu zaten düzelttiğini söyleyenler de var.
İlgili issue bağlantısı
Ne kadar hızlı çözüleceğinden emin değilim ama issue dizisinde doğrudan bir düzeltme kanıtı olmasa da biraz iç rahatlatıyor.
Yukarıdaki bağlantılı dizide bir yazım düzeltmesi (
mas fixed→was fixed) sanki bu sorunun çözüldüğü anlamına geliyormuş gibi yanlış anlaşılmış.Çözülen şey, birkaç yıl önceki benzer eski bir sorundu.
Google issue tracker buna işaret ediyor.
sse4.1'in 2011'de gelen bir komut olduğunu düşününce, böyle eski sunucuların hâlâ çalışıyor olması tuhaf geliyor.Modern CPU'lar aynı işi çok daha az güç tüketerek yapabilir; ekonomik açıdan da bu kadar eski donanımı kullanmaya devam etmek mantıklı görünmüyor.
Build sunucularının sayısı veya özellikleri hakkında bilgisi olan biri var mı diye merak ediyorum.
Bunu yarıya indirmek, yeni bir bilgisayarın fiyatının ancak %10'u kadar eder; yani maliyeti çıkarması 10 yıl sürer.
Ayrıca yükseltme sermaye gideridir, elektrik ise işletme gideri.
ABD elektrik fiyatı verisi
sse4.1, Intel Penryn ile ilk kez Kasım 2007'de geldi; AMD ise Bulldozer'a kadar (2011 ortası) bunu desteklemedi.Bulldozer ile gelen çeşitli komutlar (AVX, FMA vb.) vardı ama eski Opteron'lar pratikte çoğu zaman Bulldozer'dan daha hızlıydı; bu yüzden Epyc çıkana kadar (2017 ortası) yükseltme teşviki zayıftı.
Çeşitli paketlerde
sse4.1ve üstüne geçilmesinin nedeni, daha eski CPU'larda koşullu dallanma gibi işlemlerde SIMD paralelliğinin ek yükünün yüksek olması.2000'lerden kalma PC'ler sıradan işler için (web gezintisi gibi) uzun süre yeterliydi, ancak zamanla programlar yeni komut setleri istemeye başladı ve giderek işe yaramaz hâle geldiler.
Hatta Firefox bile yeni komut seti istemeye başlayınca, sonunda aslında gayet çalışan bir masaüstünü bırakmak zorunda kaldım.
Ama KGPE-D16 kartına SSE4.2 destekli CPU da takılabiliyor; dolayısıyla tam nedenin bu olup olmadığından emin değilim.
Google'ın yeni
aapt2ikili dosyasından (AGP 8.12.0) söz edilirken, F-Droid'in build ortamını koruma ve yalıtma konusunda aşırı titiz bir proje olmasına rağmen neden hâlâ upstream ikili dosyalarını indirip kullandığı, bunları kaynaktan üretmediği şaşırtıcı bulunmuş.Android uygulaması üretmek için temelde Google'ın özgür olmayan ikili dosyalarına bağımlı kalıyorsunuz.
İlgili forum yazısı buna değiniyor.
Referans bağlantılarının özeti
F-Droid admin issue
Catima uygulama issue'su
MBCompass issue'su
Bir üye şöyle diyor: "F-Droid'de hep olduğu gibi sesimiz yine duyulmadı. Çözüm yollarını tartışıp F-Droid'i geliştirebileceğimize dair bir umut olsaydı, bu kadar zaman ve enerji harcadıktan sonra hayal kırıklığıyla çekip gitmezdik."
F-Droid sunucularının gerçekten antika olduğu görüşü var.
Hatta tamamen farklı bir mimaride x86_64 emülasyonu yaparak bile performans artışı görülebilecek seviyede olduğu söyleniyor.
Yani bunu savunmak için açık kaynak ilkelerine dayalı ek bir gerekçe bile gerekmiyor.
Kapalı firmware konusunda takıntınız yoksa, daha ucuz ve daha güncel x86 sunucu seçenekleri de çok.
Popüler kültür yüzünden akla "sunucular o kadar eski ki Benjamin Franklin'le anaokulunda sıra arkadaşıydı" tarzı şakalar geliyor.