mold 2.0.0 - हाई-स्पीड linker
(github.com/rui314)- लाइसेंस AGPL से MIT में बदला गया, जो mold 2.0.0 का प्रमुख बदलाव है
--relocatableइस्तेमाल करने पर 65520 से ज़्यादा sections वाली object file नहीं बना पाने वाले bug को ठीक किया गया-undefinedको-u ndefinedकी बजाय--undefinedके synonym के रूप में interpret किया जाता है, ताकि यह GNU linkers और LLVM lld के व्यवहार के अनुरूप हो-nopieको--no-pieके synonym के रूप में handle किया जाता है- RISC-V पर
R_RISCV_SET_ULEB128औरR_RISCV_SUB_ULEB128relocation types का समर्थन - PPC64 पर
R_PPC64_REL32relocation type का समर्थन
1 टिप्पणियां
Hacker News की राय
mold आधुनिक सिस्टम्स पर सचमुच बेहतरीन काम है
हाल में एक प्रोजेक्ट का build तेज़ करने की कोशिश करते हुए पता चला कि link step बहुत बड़ा bottleneck है। 24 core * 2 thread इस्तेमाल करने के बावजूद linker की वजह से कुल performance का करीब 30% idle पड़ा रहता है
पहले mold से build करने की कोशिश की थी, लेकिन तब ठीक से नहीं हुआ था; फिर से कोशिश करने वाला हूं
सटीक आंकड़े याद नहीं हैं, लेकिन gold और lld में जो चीज़ कुछ सेकंड लेती थी, mold में 1 सेकंड से कम में आ गई—काफी बड़ा फर्क था
यह जटिल C++/Qt code था
mold -run ninjaमेरे environment में बहुत अच्छे से काम करता हैlicense change की खबर देखकर बहुत खुशी हुई। उम्मीद है कि वे project से पैसा भी कमा पाएं, लेकिन MIT license होने पर इसे work projects में integrate करने की संभावना कहीं ज्यादा बढ़ जाती है
अगर सच में इस्तेमाल करने लगे, तो मैं कंपनी को इस project को sponsor करने के लिए मनाने की कोशिश करूंगा
AGPL भी शायद सिर्फ तब रोक लगाएगा जब privately modified linker को network service के रूप में distribute किया जाए, जो basic development tools के लिए कोई realistic scenario नहीं है
license change को लेकर उत्सुकता है। क्या यह executable नहीं है? अलग process के रूप में call करने से call करने वाले software को GPL बनाना जरूरी नहीं होता, इसलिए आम तौर पर MIT transition का असर नहीं होना चाहिए
अगर authors सच में ज्यादा permissive license चाहते थे, तो AGPL से MIT में relicense करने के बजाय link exception वाले AGPL पर जाना चाहिए था। link exception वाले GPL project का उदाहरण libgit2 है https://github.com/libgit2/libgit2#license
ऐसा license ज्यादा permissive भी होता, और private-source changes बनाने वालों को commercial license बेचने की गुंजाइश भी रहने देता
macOS version
soldअपवाद लगता हैयह linker SeaORM और axum/tokio इस्तेमाल करने वाले, बड़े web monolith बनने की ओर जा रहे मेरे exploratory Rust repository में developer satisfaction को साफ तौर पर बढ़ाता है
आप मेरी
targetdirectory का size जानना नहीं चाहेंगे, लेकिन incremental builds कहीं ज्यादा हल्के-फुल्के हो गए हैं15:55 $ du -Hs --si target/11G target/Mold शानदार है, और इसके कुछ पसंदीदा use cases हैं
[target.x86_64-unknown-linux-gnu]linker = "clang"rustflags = ["-C", "link-arg=-fuse-ld=mold","-C", "target-cpu=native"]"-fuse-ld=mold"जोड़ने सेmakepkgभी तेज़ हो जाता हैबहुत समझदारी भरा फैसला है। मेरे product या code में भी कभी-कभी यह मानने के कठिन पल आते हैं कि कुछ चीज़ें monetization के लिए fit नहीं हैं
market बता देता है, और दुर्भाग्य से उससे लड़ने के बजाय market जिन दूसरी चीज़ों को reward करता है, उन्हें ढूंढना जरूरी है
क्या किसी को पता है कि यह license/business strategy change sold पर भी लागू होने वाला है? sold macOS के लिए mold है
https://github.com/bluewhalesystems/sold
https://twitter.com/davidecci/status/1665835119331135488
“इस repository में mold linker का free version है। अगर आप macOS support करने वाला commercial version ढूंढ रहे हैं, तो sold linker repository देखें।”
काम के बदले अच्छा-खासा पैसा दे और दुनिया को बेहतर बना दे
Apple के लिए तो यह बहुत आसान काम होना चाहिए
license AGPL से MIT में बदल गया
लेकिन ऐसे बेहतरीन कारीगर को compensation कैसे मिलना चाहिए, और अभी तक ऐसा क्यों नहीं हो रहा? लगता है companies को size की परवाह किए बिना core dependencies या tools के लिए कुछ budget allocate करना चाहिए और इसे official website पर public करना चाहिए। एक तरह के cultural norm की और जरूरत दिखती है
मैं भूल गया था कि यह एक तेज़ linker था
“Mold 2.0.0 हमारे तेज़ linker का नया major release है. इस release में user base बढ़ाने के लक्ष्य से हमने license को AGPL से MIT में बदल दिया है. जिन्होंने हमारी प्रगति देखी है, वे जानते होंगे कि यह आसान फैसला नहीं था, क्योंकि हम AGPL/commercial license के dual-license तरीके से product को monetize करने की कोशिश करते रहे थे. दुर्भाग्य से यह approach उम्मीदों पर खरी नहीं उतरी. license बदलना इसी वास्तविकता को स्वीकार करने का परिणाम है. हम ऐसी strategy पर अड़े नहीं रहना चाहते जो ठीक से काम नहीं कर रही थी.”
वह भयानक था, और अपने OS के लिए software लिखने वाले developers के साथ व्यवहार करने का भी बेहद खराब तरीका था
हम बहुत लंबे समय से low-level development tools के लिए पैसे न देने, और इसके बजाय support cost देने के आदी रहे हैं. इस तरह license आज़माया गया, यह अपने आप में हैरानी की बात है
लंबे समय से तेज़ linkers पर चर्चाएँ और यह कहानियाँ कई बार देखीं कि एक linker को तेज़ वाले से बदलने पर compile time काफी घट गया, लेकिन आम तौर पर यह ठीक से नहीं पता था कि linker धीमा क्यों होता है
अच्छा होगा अगर कोई समझा सके
performance gain का बड़ा हिस्सा काम को parallel में process करने से आता है, और आधुनिक powerful multicore CPUs पर इससे बड़ा improvement मिलता है
अगर और जानना हो तो Rui की Mold पर एक अच्छी talk है: https://www.youtube.com/watch?v=hAt3kCalE0Y
catजितना तेज़ होना चाहिए. binaries को जोड़ना है और काम खत्म. rotating disk के दौर में disk I/O समस्या था, लेकिन अब कम हैसमय उस हिस्से में लगता है जहाँ चलते-चलते contents को rewrite किया जाता है. relocation table से गुजरकर code में addresses डालना सस्ता है, और section-level dead stripping भी काफी सस्ती है, लेकिन function के अंदर अलग-अलग basic blocks को dead-strip करने के लिए कहीं ज़्यादा analysis चाहिए, इसलिए समय लगता है
constant string deduplication अच्छा idea है, लेकिन सब कुछ किसी न किसी रूप की hash table में डालना पड़ता है. अगर common suffixes भी share करवाना चाहते हैं, तो काम और बढ़ जाता है
deduplication, dead stripping, और debug info rewriting में भी समय लगता है. debug builds में कई GB DWARF हो सकता है जिसे rewrite करना पड़े
दिलचस्प बात यह है कि linker का scriptable होना, यानी interpret करने के लिए program पास कर पाना, बड़ा cost नहीं लगता. शायद इसलिए कि वे scripts काफी छोटे होते हैं और उनकी functionality भी कुछ हद तक सीमित होती है
ऐतिहासिक रूप से lld बहुत तेज़ इसलिए था क्योंकि वह debug info processing या दूसरी deduplication ज्यादा नहीं करता था. lld तेज़ चलता था, लेकिन output binary बड़ी होती थी
link performance पर काम छोड़े मुझे कई साल हो गए, इसलिए मौजूदा स्थिति अच्छी तरह नहीं पता. खासकर यह नहीं पता कि mold या lld output quality और अपनी performance के बीच कहाँ खड़े हैं
https://www.airs.com/blog/archives/38
“फिर से कहूँ तो लक्ष्य speed है. इस मामले में, मेरे दूसरे linker से भी तेज़ होना. वह linker ELF और shared library support जुड़ने के बाद वर्षों में काफी धीमा हो गया था. यह support शुरू से design नहीं किया गया था, बल्कि बाद में जोड़ा गया था. नए linker की future plans में incremental linking support भी शामिल है, जो speed बढ़ाने का एक और तरीका है.”
शुरुआती Unix दौर के apps को याद करें. सरल single-purpose app, शायद एक source file, एक object, सिर्फ libc से link करना होता था, और shared libraries जैसी कोई चीज़ नहीं थी
बाद में “ज़रूरी” features जुड़ते गए और linker code organically बढ़ता गया. खासकर उस दौर में जब rotating disks bottleneck थे, speed से ज़्यादा feature correctness महत्वपूर्ण थी