Cosmopolitan 2.0 standardne C-raamatukogu väljaanne, mida arendatakse ülekantavate täitmisfailide jaoks

Avaldamiseks on välja antud Cosmopolitan 2.0 projekt, mis arendab välja standardset C-raamatukogu ning universaalse täitmisfaili formaadi, mida saab kasutada programmide levitamiseks erinevatele operatsioonisüsteemidele ilma tõlkijate ja virtuaalmasinate kasutamiseta. GCC ja Clang'i abil kompileeritud tulemus koondatakse staatiliselt siduvasse universaalsesse täitmisfaili, mis sobib käivitamiseks kõikides Linuxi, macOS, Windows, FreeBSD, OpenBSD, NetBSD ja isegi BIOS-ist otse kutsumiseks. Projekti kood levitatakse ISC litsentsi alusel (lihtsustatud MIT/BSD versioon).

Universaalsete täitmisfailide koostamise konteiner põhineb erinevate operatsioonisüsteemide spetsiifiliste segmentide ja pealkirjade (PE, ELF, MACHO, OPENBSD) ühendamisel ühes failis, kombineerides mitmeid erinevaid formaate, mida kasutatakse Unixis, Windowsis ja macOS-is. Ühe täitmisfaili käivitamiseks Windowsis ja Unix-süsteemides kasutatakse trikki, mis seisneb Windows PE failide kodeerimises shellskripti kujul, kasutades ära asjaolu, et Thompson Shell ei kasuta skripti markerit "#!". Mitme faili ühendamiseks (kõigi ressursside koondamine ühte faili) toetatakse täitmisfaili loomist spetsiaalselt vormindatud ZIP-arhiivina. Pakutava formaadi skeem (näiteks rakendus hello.com):

MZqFpD=’ BIOS BOOT SECTOR’ exec 7 $(command -v $0) printf ‘\177ELF…LINKER-ENCODED-FREEBSD-HEADER’ >&7 exec "$0" "$@" exec qemu-x86_64 "$0" "$@" exit 1 REAL MODE… ELF SEGMENTS… OPENBSD NOTE… MACHO HEADERS… CODE AND DATA… ZIP DIRECTORY…

Faili alguses on märgistus „MZqFpD“, mida tõlgendatakse Windows PE formaadi pealkirjana. See jada dekodeeritakse ka juhiseks „pop %r10 ; jno 0x4a ; jo 0x4a“, ning string „\177ELF“ juhiseks „jg 0x47“, mida kasutatakse sissepääsupunkti edastamiseks. Unix-süsteemides täidetakse shell-kood, kus kasutatakse exec käsku, edastades täitmise koodi nimetu kanaliga. Pakutud meetodi piiranguks on võimalus käivitada ainult Unix-taolistes OS-ides kasutades shelle, mis toetavad Thompson Shell ühilduvust.

qemu-x86_64 kutset on ette nähtud täiendava kaasavõimekuse rakendamiseks ja võimaldab x86_64 arhitektuurile koostatud koodi käituda platvormidel, mis erinevad x86-st, näiteks Raspberry Pi plaatidel ja Apple seadmetes, mis on varustatud ARM protsessoritega. Projekti saab kasutada ka iseseisvate rakenduste loomiseks, mis töötavad ilma operatsioonisüsteemita (bare metal). Sellistes rakendustes ühendatakse täidetav fail käivitusprogrammiga ning programm toimib laaditava operatsioonisüsteemina.

Arendatavas projekti standardse C-keskkonna libc raamatukogus on ette nähtud 2024 funktsiooni (esimeses versioonis oli umbes 1400 funktsiooni). Cosmotopolitan töötab jõudluses sama kiiresti nagu glibc ja ületab selgelt Musl ja Newlib, samas kui Cosmopolitan on koodimahtult glibc-st kümneid kordi väiksem ja vastab umbkaudu Musl ja Newlib suurusele. Tihedalt kutsutud funktsioonide, nagu memcpy ja strlen, optimeerimiseks kasutatakse täiendavat "trickle-down performance" tehnikat, kus funktsiooni kutsumiseks rakendatakse makro-töötlust, mis teavitab kompileerijat, millised CPU registrid on koodide täitmisel aktiivsed, mis võimaldab ressursse säästa CPU oleku säilitamise ajal, salvestades ainult muudetud registrid.

Among the changes in the new release:

  • Zip-faili sisemistele ressurssidele juurdepääsu skeem on muudetud (failide avamisel kasutatakse nüüd tavalisi teid /zip/… asemel zip:.. prefiksiga). Sarnaselt on Windowsi ketastele juurdepääsuks antud võimalus kasutada teid, nagu "\/c\/…" asemel "C:\…".
  • Esitatud on uus APE (Actually Portable Executable) käivitusprogramm, mis määratleb universaalsete täidetavate failide formaadi. Uus käivitusprogramm kasutab programmi mälu paigutamiseks mmap'i ja ei muuda sisu jooksvalt. Vajadusel saab universaalse täidetava faili konverteerida tavalisteks täidetavateks failideks, mis on seotud konkreetselte platvormidega.
  • Linuxi platvormil on rakendatud võimalus kasutada binfmt_misc tuuma moodulit APE-programmide käitamiseks. Märgitakse, et binfmt_misc kasutamine on kõige kiirem meetod käivitamiseks.
  • Linuxile on pakutud süsteemikõnede pledge() ja unveil() funktsionaalsuse teostus, mida arendab OpenBSD projekt. Pakutakse API-d nende kõnede kasutamiseks C, C++, Python ja Redbean keeles, samuti tööriista pledge.com, mis isoleerib suvalisi protsesse.
  • Kogumise jaoks kasutatakse Landlock Make tööriista — GNU Make redaktsiooni, kus on rangem sõltuvuse kontroll ja Landlock süsteemikõne kasutamine, et isolatsioon programmi ja süsteemi vahel oleks tõhusam ning kassi efektiivsem. Tavalise GNU Make kogumise võimalused on säilitatud.
  • Rakendatud on mitme lõime funktsioonid — _spawn() ja _join(), mis on universaalsed pakendid erinevate operatsioonisüsteemide spetsiaalsete API-de kohal. Tööd tehakse ka POSIX lõime toe rakendamise nimel.
  • Pakutud on _Thread_local märksõna kasutamise võimalus, et kasutada iga lõime jaoks eraldi salvestusi (TLS, Thread-Local Storage). Vaikimisi initsialiseerib C runtime TLS põhijoonel, mis tõi kaasa käivitatava faili minimaalse suuruse suurenemise 12KB-lt 16KB-le.
  • Käivitatavates failides on lisatud toetus parameetritele „—ftrace“ ja „—strace“, et stderr-s välja tuua teavet kõigi funktsioonide ja süsteemikõnede kohta.
  • Lisatud on süsteemikõne closefrom(), mida toetatakse Linux 5.9+, FreeBSD 8+ ja OpenBSD-s.
  • Linuxi platvormil on clock_gettime ja gettimeofday süsteemikõnede jõudlust tõhustatud kuni 10 korda, kasutades vDSO (virtual dynamic shared object) mehhanismi, mis võimaldab süsteemikõne töötlejat kasutajaruumi üle kanda ja vältida konteksti vahetamist.
  • Musl raamatukogust on koostatud matemaatilisi funktsioone, mis töötavad kompleksnumberitega. Paljusid matemaatilisi funktsioone on kiirendatud.
  • Pakutud on nointernet() funktsioon, mis keelab võrguvõimalused.
  • Lisatud on uued funktsioonid tõhusaks stringide juurde lisamiseks: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf ja vappendf.
  • Lisatud on kaitstud variant kprintf() funktsioonide perekonnast, mis on mõeldud töötamiseks kõrgendatud privileegide korral.
  • Rakenduste jõudlust on oluliselt parendatud. SSL, SHA, curve25519 ja RSA.

Allikas: opennet.ru

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster