معياري سي لائبريري جو رليز Cosmopolitan 2.0، ترقي يافته پورٽبل ايگزيڪيوٽو فائلن لاءِ

Cosmopolitan 2.0 پروجيڪٽ جو رليز شايع ڪيو ويو آهي، معياري سي لائبريري کي ترقي ڪري رهيو آهي ۽ هڪ عالمگير ايگزيڪيوٽو فائل فارميٽ جيڪو مختلف آپريٽنگ سسٽم لاءِ پروگرامن کي ورهائڻ لاءِ استعمال ڪري سگهجي ٿو بغير ترجمانن ۽ ورچوئل مشينن جي استعمال جي. GCC ۽ Clang ۾ گڏ ڪرڻ سان حاصل ڪيل نتيجو هڪ مستحڪم طور تي ڳنڍيل يونيورسل ايگزيڪيوٽو فائل ۾ مرتب ڪيو ويو آهي جيڪو ڪنهن به لينڪس ڊسٽريبيوشن، macOS، ونڊوز، FreeBSD، OpenBSD، NetBSD، ۽ BIOS کان به سڏجي ٿو. پروجيڪٽ ڪوڊ ISC لائسنس جي تحت ورهايو ويو آهي (MIT/BSD جو هڪ آسان نسخو).

يونيورسل ايگزيڪيوٽيبل فائلون ٺاهڻ لاءِ ڪنٽينر مختلف آپريٽنگ سسٽم (PE، ELF، MACHO، OPENBSD) لاءِ مخصوص حصن ۽ هيڊرز کي هڪ فائل ۾ گڏ ڪرڻ تي ٻڌل آهي، يونڪس، ونڊوز ۽ ميڪوس ۾ استعمال ٿيندڙ ڪيترن ئي مختلف فارميٽ کي گڏ ڪري. انهي ڳالهه کي يقيني بڻائڻ لاءِ ته هڪ واحد عملدار فائل ونڊوز ۽ يونڪس سسٽم تي هلندي آهي، هڪ چال آهي ونڊوز پي اي فائلن کي شيل اسڪرپٽ طور انڪوڊ ڪرڻ، ان حقيقت جو فائدو وٺندي ته ٿامپسن شيل استعمال نٿو ڪري "#!" اسڪرپٽ مارڪر. پروگرام ٺاهڻ لاءِ جنهن ۾ ڪيتريون ئي فائلون شامل هجن (سڀني وسيلن کي هڪ فائل ۾ ڳنڍڻ)، اهو خاص طور تي ٺهيل زپ آرڪائيو جي صورت ۾ هڪ قابل عمل فائل جي ٺهڻ جي حمايت ڪري ٿو. تجويز ڪيل فارميٽ جي اسڪيم (مثال طور hello.com ايپليڪيشن):

MZqFpD='BIOS بوٽ سيڪٽر' exec 7 $(command -v $0) printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7 exec "$0" "$@" exec qemu-x86_64 "$0" "$ @" نڪرڻ 1 ريئل موڊ… ايلف سيگمينٽس… اوپن بي ايس ڊي نوٽ… ماچو هيڊرز… ڪوڊ ۽ ڊيٽا… زپ ڊاريڪٽري…

فائل جي شروعات ۾، ليبل "MZqFpD" اشارو ڪيو ويو آهي، جيڪو سمجهيو ويندو آهي ونڊوز پي اي فارميٽ هيڊر. هي سلسلو پڻ هدايتون ۾ ڊيڪوڊ ڪيو ويو آهي “pop %r10; jno 0x4a ؛ jo 0x4a، ۽ لڪير "\177ELF" هدايتون "jg 0x47" ڏانهن، جيڪي داخلا پوائنٽ ڏانهن اڳتي وڌڻ لاء استعمال ڪيا ويا آهن. يونڪس سسٽم هلن ٿا شيل ڪوڊ جيڪو استعمال ڪري ٿو exec ڪمانڊ، هڪ نامعلوم پائپ ذريعي قابل عمل ڪوڊ گذري ٿو. تجويز ڪيل طريقي جي هڪ حد يونڪس-جهڙوڪ آپريٽنگ سسٽم تي هلائڻ جي صلاحيت آهي صرف شيل استعمال ڪندي جيڪي ٿامپسن شيل مطابقت واري موڊ کي سپورٽ ڪن ٿا.

qemu-x86_64 ڪال اضافي پورٽيبلٽي مهيا ڪري ٿي ۽ اجازت ڏئي ٿي ڪوڊ مرتب ڪيل x86_64 آرڪيٽيڪچر لاءِ نان-x86 پليٽ فارمن تي هلائڻ لاءِ، جيئن ته راسبري پي بورڊز ۽ ايپل ڊيوائسز جيڪي ARM پروسيسرز سان ليس هوندا آهن. پروجيڪٽ پڻ استعمال ڪري سگھجي ٿو پاڻمرادو ايپليڪيشنون ٺاهڻ لاءِ جيڪي آپريٽنگ سسٽم کان سواءِ هلن ٿيون (ننگي ڌاتو). اهڙين ايپليڪيشنن ۾، هڪ بوٽ لوڊر قابل عمل فائل سان ڳنڍيل آهي، ۽ پروگرام هڪ بوٽبل آپريٽنگ سسٽم طور ڪم ڪري ٿو.

پروجيڪٽ پاران تيار ڪيل معياري سي لائبريري libc 2024 فنڪشن پيش ڪري ٿي (پهرين رليز ۾ اٽڪل 1400 فنڪشن هئا). ڪارڪردگي جي لحاظ کان، Cosmopolitan glibc جيتري تيزيءَ سان ڪم ڪري ٿو ۽ واضح طور تي Musl ۽ Newlib کان اڳتي آهي، ان حقيقت جي باوجود ته Cosmopolitan glibc کان ڪوڊ سائيز ۾ ننڍو ۽ تقريبن Musl ۽ Newlib سان ملندڙ جلندڙ آهي. عام طور تي سڏايل افعال جهڙوڪ memcpy ۽ strlen کي بهتر ڪرڻ لاءِ، ”ٽريڪل-ڊائون پرفارمنس“ ٽيڪنڪ پڻ استعمال ڪئي ويندي آهي، جنهن ۾ فنڪشن کي ڪال ڪرڻ لاءِ ميڪرو بائنڊنگ استعمال ڪئي ويندي آهي، جنهن ۾ ڪمپلر کي سي پي يو رجسٽرز بابت ڄاڻ ڏني ويندي آهي جيڪي ڪوڊ جي عمل ۾ شامل هوندا آهن. پروسيس، جيڪو وسيلن کي بچائڻ جي اجازت ڏئي ٿو جڏهن صرف تبديل ٿيندڙ رجسٽرن کي محفوظ ڪندي CPU اسٽيٽ کي بچايو.

نئين رليز ۾ تبديلين جي وچ ۾:

  • زپ فائل اندر اندروني وسيلن تائين رسائي جي اسڪيم کي تبديل ڪيو ويو آهي (جڏهن فائلون کولڻ، عام /zip/... رستا هاڻي استعمال ڪيا ويندا آهن zip:.. prefix استعمال ڪرڻ بدران). ساڳئي طرح، ونڊوز ۾ ڊسڪ تائين رسائي حاصل ڪرڻ لاء، "C:/..." جي بدران "/c/..." وانگر رستا استعمال ڪرڻ ممڪن آهي.
  • ھڪڙو نئون APE (اصل ۾ پورٽبل قابل عمل) لوڊر تجويز ڪيو ويو آھي، جيڪو عالمگير عمل ڪندڙ فائلن جي شڪل کي بيان ڪري ٿو. نئون لوڊر پروگرام کي ميموري ۾ رکڻ لاءِ mmap استعمال ڪري ٿو ۽ فلائي تي مواد کي تبديل نٿو ڪري. جيڪڏهن ضروري هجي ته، يونيورسل ايگزيڪيوٽو فائل کي انفرادي پليٽ فارمن سان ڳنڍيل باقاعده عملدار فائلن ۾ تبديل ڪري سگهجي ٿو.
  • لينڪس پليٽ فارم تي، APE پروگرامن کي هلائڻ لاءِ binfmt_misc ڪنيل ماڊل استعمال ڪرڻ ممڪن آهي. اهو نوٽ ڪيو ويو آهي ته binfmt_misc استعمال ڪندي تيز ترين لانچ طريقو آهي.
  • لينڪس لاءِ، OpenBSD پروجيڪٽ پاران تيار ڪيل عهد() ۽ unveil() سسٽم ڪالن جي ڪارڪردگيءَ تي عمل ڪرڻ جي تجويز پيش ڪئي وئي آهي. هڪ API مهيا ڪئي وئي آهي انهن ڪالن کي C, C++، Python ۽ Redbean ۾ پروگرامن ۾ استعمال ڪرڻ لاءِ، انهي سان گڏ هڪ pledge.com يوٽيليٽي کي الڳ ڪرڻ لاءِ صوابديدي عملن کي.
  • بلڊ استعمال ڪري ٿو لينڊ لاڪ ميڪ يوٽيليٽي - GNU Make جو هڪ ايڊيشن وڌيڪ سخت انحصار جي چڪاس سان ۽ لينڊ لاڪ سسٽم ڪال جو استعمال پروگرام کي باقي سسٽم کان الڳ ڪرڻ ۽ ڪيشنگ ڪارڪردگي کي بهتر ڪرڻ لاءِ. باقاعده GNU Make سان ٺاھڻ جي صلاحيت ھڪڙي اختيار جي طور تي رکيل آھي.
  • ملٽي ٿريڊنگ لاءِ افعال لاڳو ڪيا ويا آهن - _spawn() ۽ _join()، جيڪي مختلف آپريٽنگ سسٽم لاءِ مخصوص APIs تي عالمگير پابند آهن. POSIX Threads جي سپورٽ کي لاڳو ڪرڻ لاءِ ڪم پڻ جاري آهي.
  • اهو ممڪن آهي _Thread_local لفظ استعمال ڪرڻ لاءِ هر ٿريڊ لاءِ الڳ اسٽوريج استعمال ڪرڻ لاءِ (TLS، Thread-Local Storage). ڊفالٽ طور، سي رن ٽائم بنيادي سلسلي لاءِ TLS کي شروع ڪري ٿو، جنهن جي ڪري گھٽ ۾ گھٽ قابل عمل سائيز 12 KB کان 16 KB تائين وڌي وئي آهي.
  • "--ftrace" ۽ "--strace" پيرا ميٽرز لاءِ سپورٽ ايگزيڪيوٽيبل فائلن ۾ شامل ڪئي وئي آھي انفارميشن کي ٻاھر ڪڍڻ لاءِ سڀني فنڪشن ڪالن ۽ سسٽم ڪالن کي stderr.
  • Closefrom() سسٽم ڪال لاءِ سپورٽ شامل ڪئي وئي، لينڪس 5.9+، FreeBSD 8+ ۽ OpenBSD تي سپورٽ ڪئي وئي.
  • لينڪس پليٽ فارم تي، clock_gettime ۽ gettimeofday ڪالن جي ڪارڪردگي کي 10 ڀيرا وڌايو ويو آهي vDSO (ورچوئل ڊائنامڪ شيئر ٿيل اعتراض) ميکانيزم کي استعمال ڪندي، جيڪو سسٽم ڪال هينڊلر کي يوزر اسپيس ۾ منتقل ڪرڻ ۽ ڪنٽينڪس سوئچز کان پاسو ڪرڻ ممڪن بڻائي ٿو.
  • پيچيده انگن سان ڪم ڪرڻ لاء رياضياتي افعال Musl لائبريري مان منتقل ڪيا ويا آهن. ڪيترن ئي رياضياتي ڪمن جي ڪم کي تيز ڪيو ويو آهي.
  • نيٽ ورڪ صلاحيتن کي غير فعال ڪرڻ لاءِ nointernet() فنڪشن تجويز ڪيو ويو آهي.
  • شامل ڪيا ويا نوان ڪارناما موثر طريقي سان شامل ڪرڻ لاءِ: appendd، appendf، appendr، appends، appendw، appendz، kappendf، kvappendf ۽ vappendf.
  • kprintf() خاندان جي افعال جو هڪ محفوظ نسخو شامل ڪيو ويو آهي، جيڪو اعليٰ امتياز سان ڪم ڪرڻ لاءِ ٺهيل آهي.
  • SSL، SHA، curve25519 ۽ RSA جي عملن جي خاص طور تي بهتر ڪارڪردگي.

جو ذريعو: opennet.ru

تبصرو شامل ڪريو