معیاری C لائبریری کاسموپولیٹن 2.0 کی ریلیز، پورٹیبل قابل عمل فائلوں کے لیے تیار

Cosmopolitan 2.0 پروجیکٹ کا اجراء شائع کیا گیا ہے، معیاری C لائبریری اور ایک یونیورسل ایگزیکیوٹیبل فائل فارمیٹ تیار کیا جا رہا ہے جسے ترجمانوں اور ورچوئل مشینوں کے استعمال کے بغیر مختلف آپریٹنگ سسٹمز کے پروگراموں کو تقسیم کرنے کے لیے استعمال کیا جا سکتا ہے۔ جی سی سی اور کلینگ میں مرتب کرنے سے حاصل کردہ نتیجہ ایک مستحکم طور پر منسلک یونیورسل ایگزیکیوٹیبل فائل میں مرتب کیا جاتا ہے جسے کسی بھی لینکس ڈسٹری بیوشن، میک او ایس، ونڈوز، فری بی ایس ڈی، اوپن بی ایس ڈی، نیٹ بی ایس ڈی، اور یہاں تک کہ BIOS سے بلایا جاسکتا ہے۔ پروجیکٹ کوڈ ISC لائسنس (MIT/BSD کا ایک آسان ورژن) کے تحت تقسیم کیا گیا ہے۔

یونیورسل ایگزیکیوٹیبل فائلز بنانے کا کنٹینر مختلف آپریٹنگ سسٹمز (PE، ELF، MACHO، OPENBSD) کے لیے مخصوص حصوں اور ہیڈرز کو ایک فائل میں ملا کر، Unix، Windows اور macOS میں استعمال ہونے والے کئی مختلف فارمیٹس کو یکجا کرنے پر مبنی ہے۔ اس بات کو یقینی بنانے کے لیے کہ ایک ہی قابل عمل فائل ونڈوز اور یونکس سسٹم پر چلتی ہے، ایک چال یہ ہے کہ ونڈوز پی ای فائلوں کو شیل اسکرپٹ کے طور پر انکوڈ کیا جائے، اس حقیقت کا فائدہ اٹھاتے ہوئے کہ تھامسن شیل "#!" اسکرپٹ مارکر استعمال نہیں کرتا ہے۔ ایسے پروگرام بنانے کے لیے جن میں کئی فائلیں شامل ہوں (تمام وسائل کو ایک فائل میں جوڑنا)، یہ خاص طور پر ڈیزائن کردہ زپ آرکائیو کی شکل میں ایک قابل عمل فائل کی تشکیل کی حمایت کرتا ہے۔ مجوزہ فارمیٹ کی اسکیم (مثال کے طور پر hello.com درخواست):

MZqFpD='BIOS بوٹ سیکٹر' exec 7 $(command -v $0) printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7 exec "$0" "$@" exec qemu-x86_64 "$0" "$ @" 1 ریئل موڈ سے باہر نکلیں… ELF سیگمنٹس… اوپن بی ایس ڈی نوٹ… ماچو ہیڈرز… کوڈ اور ڈیٹا… زپ ڈائرکٹری…

فائل کے شروع میں، "MZqFpD" کا لیبل اشارہ کیا گیا ہے، جسے Windows PE فارمیٹ ہیڈر کے طور پر سمجھا جاتا ہے۔ اس ترتیب کو "pop %r10; jno 0x4a ; jo 0x4a"، اور لائن "\177ELF" ہدایات "jg 0x47" پر، جو انٹری پوائنٹ پر آگے بھیجنے کے لیے استعمال ہوتی ہے۔ یونکس سسٹم شیل کوڈ چلاتا ہے جو exec کمانڈ استعمال کرتا ہے، ایک بے نام پائپ کے ذریعے قابل عمل کوڈ کو منتقل کرتا ہے۔ مجوزہ طریقہ کی ایک حد یونکس جیسے آپریٹنگ سسٹم پر چلنے کی صلاحیت ہے صرف شیل کا استعمال کرتے ہوئے جو تھامسن شیل مطابقت موڈ کو سپورٹ کرتے ہیں۔

qemu-x86_64 کال اضافی پورٹیبلٹی فراہم کرتی ہے اور x86_64 فن تعمیر کے لیے مرتب کردہ کوڈ کو غیر x86 پلیٹ فارمز، جیسے Raspberry Pi بورڈز اور ARM پروسیسرز سے لیس ایپل ڈیوائسز پر چلنے کی اجازت دیتی ہے۔ اس پروجیکٹ کو خود ساختہ ایپلی کیشنز بنانے کے لیے بھی استعمال کیا جا سکتا ہے جو آپریٹنگ سسٹم (ننگی دھات) کے بغیر چلتی ہیں۔ ایسی ایپلی کیشنز میں، ایک بوٹ لوڈر قابل عمل فائل کے ساتھ منسلک ہوتا ہے، اور پروگرام بوٹ ایبل آپریٹنگ سسٹم کے طور پر کام کرتا ہے۔

پروجیکٹ کے ذریعہ تیار کردہ معیاری C لائبریری libc 2024 فنکشنز پیش کرتی ہے (پہلی ریلیز میں تقریباً 1400 فنکشنز تھے)۔ کارکردگی کے لحاظ سے، Cosmopolitan glibc جتنی تیزی سے کام کرتا ہے اور Musl اور Newlib سے نمایاں طور پر آگے ہے، اس حقیقت کے باوجود کہ Cosmopolitan کوڈ سائز میں glibc سے چھوٹا اور تقریباً Musl اور Newlib سے مساوی ہے۔ memcpy اور strlen جیسے کثرت سے کہے جانے والے فنکشنز کو بہتر بنانے کے لیے، "ٹریکل ڈاؤن پرفارمنس" تکنیک کو اضافی طور پر استعمال کیا جاتا ہے، جس میں فنکشن کو کال کرنے کے لیے میکرو بائنڈنگ کا استعمال کیا جاتا ہے، جس میں کمپائلر کو کوڈ پر عمل درآمد میں شامل CPU رجسٹروں کے بارے میں مطلع کیا جاتا ہے۔ عمل، جو صرف قابل تبدیلی رجسٹروں کو محفوظ کرکے CPU اسٹیٹ کو بچانے کے دوران وسائل کو بچانے کی اجازت دیتا ہے۔

نئی ریلیز میں تبدیلیوں میں سے:

  • زپ فائل کے اندر داخلی وسائل تک رسائی کی اسکیم کو تبدیل کر دیا گیا ہے (فائلوں کو کھولتے وقت، زپ:.. سابقہ ​​استعمال کرنے کے بجائے معمول کے /zip/... راستے استعمال کیے جاتے ہیں)۔ اسی طرح، ونڈوز میں ڈسک تک رسائی کے لیے، "C:/..." کے بجائے "/c/..." جیسے راستے استعمال کرنا ممکن ہے۔
  • ایک نیا APE (دراصل پورٹ ایبل ایگزیکیوٹیبل) لوڈر تجویز کیا گیا ہے، جو یونیورسل ایگزیکیوٹیبل فائلوں کی شکل کی وضاحت کرتا ہے۔ نیا لوڈر پروگرام کو میموری میں رکھنے کے لیے mmap کا استعمال کرتا ہے اور اب اس کے مواد میں تبدیلی نہیں کرتا ہے۔ اگر ضروری ہو تو، یونیورسل ایگزیکیوٹیبل فائل کو انفرادی پلیٹ فارمز سے منسلک باقاعدہ ایگزیکیوٹیبل فائلوں میں تبدیل کیا جاسکتا ہے۔
  • لینکس پلیٹ فارم پر، APE پروگرام چلانے کے لیے binfmt_misc کرنل ماڈیول استعمال کرنا ممکن ہے۔ واضح رہے کہ binfmt_misc کا استعمال تیز ترین لانچ کا طریقہ ہے۔
  • لینکس کے لیے، اوپن بی ایس ڈی پروجیکٹ کے ذریعے تیار کردہ عہد () اور کھولنے () سسٹم کالز کی فعالیت کا نفاذ تجویز کیا گیا ہے۔ ان کالز کو C, C++، Python اور Redbean میں پروگراموں میں استعمال کرنے کے لیے ایک API فراہم کیا جاتا ہے، ساتھ ہی صوابدیدی عمل کو الگ کرنے کے لیے pledge.com یوٹیلیٹی بھی فراہم کی جاتی ہے۔
  • یہ تعمیر Landlock Make یوٹیلیٹی کا استعمال کرتی ہے - GNU Make کا ایک ایڈیشن جس میں زیادہ سخت انحصار کی جانچ پڑتال اور Landlock سسٹم کال کا استعمال پروگرام کو باقی سسٹم سے الگ کرنے اور کیشنگ کی کارکردگی کو بہتر بنانے کے لیے ہے۔ ایک آپشن کے طور پر، باقاعدہ GNU Make کے ساتھ تعمیر کرنے کی صلاحیت کو برقرار رکھا جاتا ہے۔
  • ملٹی تھریڈنگ کے لیے فنکشنز کو لاگو کیا گیا ہے - _spawn() اور _join()، جو مختلف آپریٹنگ سسٹمز کے لیے مخصوص APIs پر عالمگیر پابندیاں ہیں۔ پوسکس تھریڈز سپورٹ کو نافذ کرنے کے لیے بھی کام جاری ہے۔
  • ہر تھریڈ (TLS، Thread-Local Storage) کے لیے الگ اسٹوریج استعمال کرنے کے لیے _Thread_local کلیدی لفظ استعمال کرنا ممکن ہے۔ پہلے سے طے شدہ طور پر، C رن ٹائم مین تھریڈ کے لیے TLS کو شروع کرتا ہے، جس کی وجہ سے کم از کم قابل عمل سائز 12 KB سے 16 KB تک بڑھ گیا ہے۔
  • "--ftrace" اور "--strace" پیرامیٹرز کے لیے سپورٹ کو ایگزیکیوٹیبل فائلوں میں شامل کیا گیا ہے تاکہ تمام فنکشن کالز اور سسٹم کالز کے بارے میں معلومات حاصل کی جا سکیں۔
  • لینکس 5.9+، فری بی ایس ڈی 8+ اور اوپن بی ایس ڈی پر تعاون یافتہ کلوز فرام() سسٹم کال کے لیے سپورٹ شامل کیا گیا۔
  • لینکس پلیٹ فارم پر، vDSO (ورچوئل ڈائنامک شیئرڈ آبجیکٹ) میکانزم کا استعمال کرتے ہوئے clock_gettime اور gettimeofday کالز کی کارکردگی کو 10 گنا تک بڑھا دیا گیا ہے، جس سے سسٹم کال ہینڈلر کو صارف کی جگہ پر منتقل کرنا اور سیاق و سباق کے سوئچز سے بچنا ممکن ہوتا ہے۔
  • پیچیدہ اعداد کے ساتھ کام کرنے کے لیے ریاضی کے افعال کو Musl لائبریری سے منتقل کر دیا گیا ہے۔ بہت سے ریاضی کے افعال کے کام کو تیز کر دیا گیا ہے۔
  • nointernet() فنکشن کو نیٹ ورک کی صلاحیتوں کو غیر فعال کرنے کے لیے تجویز کیا گیا ہے۔
  • سٹرنگز کو مؤثر طریقے سے منسلک کرنے کے لیے نئے فنکشنز شامل کیے گئے: appendd، appendf، appendr، appends، appendw، appendz، kappendf، kvappendf اور vappendf۔
  • kprintf() فنکشنز کے خاندان کا ایک محفوظ ورژن شامل کیا گیا، جو اعلیٰ مراعات کے ساتھ کام کرنے کے لیے ڈیزائن کیا گیا ہے۔
  • SSL، SHA، curve25519 اور RSA کے نفاذ کی نمایاں طور پر بہتر کارکردگی۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں