- F-Droid build server पुराने CPU के कारण नवीनतम Android ऐप्स को build नहीं कर पा रहा है
- यह ARM, x86-64 आदि आधुनिक mobile apps में आवश्यक advanced instruction sets को support नहीं करता
- server के upgrade और replacement की ज़रूरत है, लेकिन लागत और infrastructure की सीमाएँ मौजूद हैं
- developers ने F-Droid की sustainability और तकनीकी रूप से up-to-date बने रहने को लेकर चिंता जताई है
- विकल्प के रूप में cloud-based build और server resources donation पर चर्चा चल रही है
अवलोकन
- F-Droid Android open source apps के लिए एक अनौपचारिक store है, जो source code को सीधे build करके apps वितरित करता है
- हाल ही में build server नवीनतम Android apps द्वारा आवश्यक CPU instruction sets को support नहीं कर पा रहा, इसलिए अब कुछ apps के builds उपलब्ध कराना संभव नहीं रहा
build server की तकनीकी सीमाएँ
- app build के लिए आवश्यक नए ARM और x86-64 instructions पुराने CPU support नहीं करते
- इस सीमा के कारण performance optimization वाले आधुनिक apps या नवीनतम libraries का उपयोग करने वाले apps के build files उपलब्ध कराने में समस्या हो रही है
- Python, Kotlin जैसी आधुनिक भाषाएँ और Gradle जैसे नवीनतम build tools भी अक्सर नए CPU environment की माँग करते हैं
समुदाय के भीतर चिंताएँ और चर्चा
- developers और users ने F-Droid में लगातार app quality गिरने और build failure reports को लेकर चिंता जताई है
- infrastructure upgrade की ज़रूरत है, लेकिन वित्तीय सीमाएँ और server management staff की कमी जैसे मुद्दे सामने आए हैं
विकल्प और समाधान की तलाश
- cloud environment में build server चलाने या community स्तर पर server resources donation जैसे कई विकल्पों पर चर्चा हो रही है
- F-Droid टीम ने बाहरी समर्थन और नए hardware की मदद से इस समस्या को हल करने की इच्छा जताई है
निष्कर्ष
- F-Droid का महत्व और open source ecosystem support में उसकी भूमिका अब भी बहुत बड़ी है
- लेकिन आधुनिक app trends के अनुरूप infrastructure innovation और maintenance के प्रयास अनिवार्य हैं
1 टिप्पणियां
Hacker News टिप्पणियाँ
इसका मतलब है कि उनके सर्वर सच में बहुत पुराने हैं, इतने कि x86-64-v2 भी सपोर्ट नहीं करते; इससे लगभग Intel Core 2 Duo दौर के सर्वरों की याद आती है
Red Hat Enterprise Linux 9 के x86-64-v2 माइक्रोआर्किटेक्चर लेवल पर एक व्यवस्थित लेख देखा जा सकता है
अगर इन्हें Epyc consumer CPU से बदला जाए तो सर्वर परफॉर्मेंस काफी तेज हो जाएगी
मैंने वास्तव में दान की अपील करने का सोचा था, लेकिन वहाँ पहले से ही $80,000 बचे हुए थे
सालाना बजट $17,000 होने को देखते हुए, $2~3 हज़ार में एक आधुनिक Zen4 या Zen5 matx consumer Epyc सर्वर खरीदा जाए तो भी वह बजट के भीतर रहेगा
अगर सच में कई पुराने सर्वर हैं, तो एक Zen5 सर्वर से उनमें से कई को बदला जा सकता है, और बिजली व जगह दोनों की अच्छी बचत होगी
F-Droid की बजट स्थिति भी देखी जा सकती है
लगता है Librapay दान अभी इसमें शामिल नहीं है
Librapay दान लिंक
न्यूनतम आवश्यकता "Pentium और Celeron" बताई गई थी, इसलिए हमने सोचा कि यह पर्याप्त होगा
लेकिन असल में services में से एक v3 या v4 CPU पर ही उपलब्ध instruction इस्तेमाल कर रही थी, इसलिए वह रुक गई
exposed CPU setting बदलते ही वह सामान्य रूप से चलने लगी
इसलिए संभव है कि सर्वर खुद पर्याप्त सक्षम हों, लेकिन configuration की गलती हो; या binary घोषित स्पेसिफिकेशन से ऊँची requirement मांग रही हो; या कोई और issue हो
cmpxchg16binstruction इतना भी पुराना नहीं है, और अब इसे लगभग अनिवार्य requirement माना जाता हैvolunteers जो समय और मेहनत सिस्टम को बनाए रखने में लगाते हैं, उसके मुकाबले £80,000 सच में बहुत कम रकम है
सुना है कि infrastructure modernization की ज़रूरत है, लेकिन यह बड़े निवेश का मामला है
अगर फंडिंग थोड़ी अधिक आरामदायक होती, तो शायद वे अधिक आत्मविश्वास से निवेश कर पाते
सर्वर upgrade के अलावा भी कई समस्याएँ हैं जिन्हें हल करना है
मौजूदा स्थिति काफी चिंताजनक लगती है
F-Droid अभी Google को छोड़कर सबसे बड़े Android app stores में से एक है, इसलिए यह और भी ज़रूरी लगता है
जानना चाहूँगा कि क्या इस समस्या को हल करने की कोई योजना है, F-Droid सर्वर कब upgrade करेगा, या क्या Google इस अनिवार्य requirement को वापस ले सकता है (आख़िरी संभावना मुझे कम लगती है)
वह issue Gradle Plugin 4.2.0-rc01 / Gradle 7.0.0 alpha 9 में ठीक किया गया था
उसका असली ticket record भी मौजूद है
व्यक्तिगत रूप से मुझे नहीं लगता कि वह top 10 में भी होगा
समझ नहीं आता कि aapt2 को target के मुताबिक फिर से build क्यों नहीं किया जाता
source उपलब्ध है
aapt2 source location
इसमें बहुत बड़ी संख्या में binaries शामिल होती हैं, और मैंने कुछ binaries को source से दोबारा build करने की कोशिश की थी, लेकिन build system इतना बुरी तरह टूटा हुआ था कि मैंने तुरंत छोड़ दिया
आगे आने वाली हर binary के लिए अलग patch नहीं लगाना पड़ेगा, और binary updates अपने-आप संभाली जा सकेंगी
Streaming SIMD Extensions(SSSE3) wiki लेख साझा कर रहा हूँ
मेरा पुराना desktop भी इस instruction को सपोर्ट करता था, और मैंने उसे लगभग 10 साल इस्तेमाल किया था
फिर भी यह हैरानी की बात है कि source code में backup path के रूप में भी assembly नहीं दी गई
अधिक संभावना है कि compiler ने x86_64-v2 target करके compile किया हो
RHEL 9 भी इसी तरह के option के साथ build किया गया था, और RHEL 10 में यह x86_64-v3 तक बढ़ रहा है, जिससे AVX भी सपोर्ट होगा
AMD 10h wiki link
व्यवहारिक रूप से इसे test करने लायक hardware उपलब्ध नहीं है; जो है वह सब बहुत पुराना और धीमा है
मैं इसे पूरी तरह नहीं समझ पा रहा
gradle और aapt2 open source हैं, और buildroot या openwrt की तरह अगर toolchain खुद compile किया जाए तो नतीजे ज़्यादा predictable होंगे
f-droid भी अगर पूरा toolchain source से खुद build करे, तो unsupported instructions वाली binary gradle या aapt2 पर निर्भर रहने की ज़रूरत नहीं पड़ेगी
इनमें कुछ native binaries भी होती हैं, और buildroot या Linux distributions की तरह यह metadata नहीं होता कि हर library कैसे build की गई
इसके अलावा gradle ecosystem की हर library का build process अलग-अलग होता है (यानी standardized नहीं), इसलिए पूरे stack को source से दोबारा बनाना काफी झंझटभरा और कठिन काम है
कुछ लोग कह रहे हैं कि Google ने upstream में यह समस्या पहले ही ठीक कर दी है
issue link देखें
यह कितनी जल्दी हल होगा, कहना मुश्किल है, लेकिन issue thread कुछ हद तक भरोसा देता है, भले ही प्रत्यक्ष प्रमाण न हो कि यह सचमुच fix हो चुका है
ऊपर लिंक किए गए thread में टाइपो सुधार ("mas fixed"→"was fixed") को गलती से इस issue के समाधान के रूप में समझ लिया गया
जो fix हुआ था, वह कई साल पहले का मिलता-जुलता पुराना issue था
Google issue tracker देखें
अगर sse4.1 को 2011 में आई instruction मानें, तो यह हैरानी की बात है कि ऐसे पुराने सर्वर अब भी चल रहे हैं
आधुनिक CPU वही काम बहुत कम बिजली में कर सकते हैं, इसलिए आर्थिक रूप से भी इतना पुराना hardware चलाते रहना समझ से परे है
क्या किसी को build servers की संख्या या specs के बारे में जानकारी है
उसे आधा कर देने पर भी वह नई मशीन की कीमत का सिर्फ 10% होगा, यानी लागत वसूलने में 10 साल लगेंगे
upgrade एक capital expenditure है, जबकि बिजली का बिल operating cost है
अमेरिकी बिजली दरों का संदर्भ
Bulldozer में AVX, FMA जैसी कई नई instructions थीं, लेकिन कई मामलों में पुराने Opteron वास्तव में Bulldozer से तेज़ थे; इसलिए Epyc (2017 के मध्य) आने तक upgrade का आकर्षण कम था
कई packages में sse4.1 या उससे ऊपर की ज़रूरत पड़ने का एक कारण यह भी है कि बहुत पुराने CPU पर conditional branching आदि के साथ SIMD parallelism का overhead काफ़ी अधिक होता है
2000 के दशक के पुराने PC सामान्य कामों (जैसे web browsing) के लिए लंबे समय तक पर्याप्त थे, लेकिन समय के साथ programs ने नई instructions माँगनी शुरू कर दीं, और वे धीरे-धीरे बेकार होते गए
यहाँ तक कि Firefox ने भी नया instruction set माँगना शुरू कर दिया, और अंत में मुझे ठीक-ठाक चल रहे desktop को छोड़ना पड़ा
लेकिन KGPE-D16 board में SSE4.2 सपोर्ट करने वाले CPU भी लगाए जा सकते हैं, इसलिए असली वजह क्या है, यह स्पष्ट नहीं है
Google के नए aapt2 binary (AGP 8.12.0) की बात करते हुए, यह थोड़ा अजीब लगता है कि F-Droid build environment की सुरक्षा और isolation पर इतना ध्यान देता है, लेकिन फिर भी upstream binaries उठा कर इस्तेमाल करता है, source से build नहीं करता
Android apps बनाने के लिए मूल रूप से Google के non-free binaries पर निर्भर रहना पड़ता है
संबंधित forum post देखें
संदर्भ के लिए links की सूची
F-Droid admin issue
Catima app issue
MBCompass issue
एक member ने कहा: "F-Droid में हमेशा की तरह, हमारी आवाज़ें हमेशा नज़रअंदाज़ की जाती हैं। अगर उम्मीद होती कि समाधान पर चर्चा करके F-Droid को बेहतर बनाया जा सकता है, तो हम इतना समय और ऊर्जा लगाने के बाद निराश होकर छोड़कर नहीं जाते।"
राय यह है कि F-Droid सर्वर सच में बहुत पुराने हैं
यहाँ तक कि किसी पूरी तरह अलग architecture पर x86_64 emulate करने पर भी शायद performance बेहतर मिल जाए
इस पर open source तर्क लाने की भी ज़रूरत नहीं है
अगर closed firmware की चिंता न हो, तो इससे सस्ते और आधुनिक x86 server options भी बहुत हैं
pop culture की वजह से "सर्वर इतने पुराने हैं कि वे Benjamin Franklin के kindergarten benchmate थे" जैसा चुटकुला याद आता है