Lëshimi i bibliotekës standarde C Cosmopolitan 2.0, e zhvilluar për skedarë ekzekutivë portativë.

Ël mallkuar i projektit Cosmopolitan 2.0 Ă«shtĂ« publikuar, i cili po zhvillon bibliotekĂ«n standarde C dhe formatin universitar tĂ« skedarĂ«ve ekzekutivĂ«, i cili mund tĂ« pĂ«rdoret pĂ«r shpĂ«rndarjen e programeve pĂ«r sisteme tĂ« ndryshme operative pa pĂ«rdorur interpreterĂ« dhe makina virtuale. Rezultati i marrĂ« pĂ«rmes kompilimit nĂ« GCC dhe Clang komponohet nĂ« njĂ« skedar ekzekutiv universitar qĂ« mund tĂ« startohet nĂ« çdo distribucion tĂ« Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD dhe madje edhe tĂ« thirret nga BIOS. Kodi i projektit shpĂ«rndahet nĂ«n licencĂ«n ISC (version i thjeshtuar i MIT/BSD).

Kontejneri për formimin e skedarëve ekzekutivë universitarë është i bazuar në kombinimin e segmenteve të specifikës për sisteme të ndryshme operative dhe titujve (PE, ELF, MACHO, OPENBSD) në një skedar, duke kombinuar në të disa formate të ndryshme të përdorura në Unix, Windows dhe macOS. Për të siguruar startimin e një skedari ekzekutiv në Windows dhe sistemet Unix, përdoret një truk i lidhur me kodimin e skedarëve Windows PE në formën e një skedari shell, duke përfituar nga fakti se Thompson Shell nuk përdor shenjën e skedareve "#!". Për krijimin e programeve që përfshijnë disa skedare (kombinimi i të gjitha burimeve në një skedar), mbështetet formimi i skedarit ekzekutiv në formën e një arkivi ZIP të formatuar në mënyrë speciale. Skema e formatit të propozuar (shembulli i aplikacionit 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


Fillimisht në skedar jepet një etiketë «MZqFpD», e cila përceptohet si një titull format Windows PE. Kjo sekuencë gjithashtu dekodohet në udhëzimin «pop %r10 ; jno 0x4a ; jo 0x4a», ndërsa vargu «\177ELF» në udhëzimin «jg 0x47», të cilat përdoren për kalimin në pikën e hyrjes. Në sistemet Unix ekzekutohet kodi shell, në të cilin përdoret komanda exec me transmetimin e kodit ekzekutiv përmes një kanali të paemëruar. Kufizimi i metodës së propozuar është mundësia e ekzekutimit në OS të ngjashëm me Unix vetëm duke përdorur shell-e që mbështesin përputhjen me Thompson Shell.

Thirrja e qemu-x86_64 parashikohet për realizimin e portabilitetit shtesë dhe lejon ekzekutimin e kodit të kompiluar për arkitekturën x86_64 në platformat që nuk janë x86, për shembull, në pllakëza Raspberry Pi dhe pajisje Apple që janë të përfshira me procesorë ARM. Projekti gjithashtu mund të përdoret për krijimin e aplikacioneve të vetë-mjaftueshme, të cilat funksionojnë pa sistem operativ (bare metal). Në këto aplikacione, një ngarkues i bashkëngjitet skedarit ekzekutiv, dhe programi shërben si një sistem operativ i ngarkueshëm.

Në bibliotekën standarde C libc që po zhvillohet nga projekti janë propozuar 2024 funksione (në lëshimin e parë ishin rreth 1400 funksione). Për nga performanca, Cosmopolitan punon po aq shpejt sa glibc dhe përshpejton dukshëm Musl dhe Newlib, ndërsa Cosmopolitan është me një rend kodimi më të vogël se glibc dhe përafërsisht përputhet me Musl dhe Newlib. Për optimizimin e funksioneve që thirren shpesh si memcpy dhe strlen, përdoret gjithashtu teknika e "trickle-down performance", ku për thirrjen e funksionit përdoret një makro-mbështetje, në të cilin kompileri informohet për regjistrat e CPU të angazhuar në procesin e ekzekutimit të kodit, që lejon kursimin e burimeve duke ruajtur gjendjen e CPU përmes ruajtjes vetëm të regjistrave të ndryshueshëm.

Ndryshimet në publikimin e ri përfshijnë:

  • Ka ndryshuar skema e qasjes nĂ« burimet e brendshme brenda skedarit zip (kur hapen skedarĂ«t tani pĂ«rdoren rrugĂ« tĂ« zakonshme \/zip\
 nĂ« vend tĂ« qasjes sipas prefiksit zip:..). Po ashtu, pĂ«r aksesin nĂ« disqet nĂ« Windows Ă«shtĂ« ofruar mundĂ«sia e pĂ«rdorimit tĂ« rrugĂ«ve tĂ« tipit «\/c\/ » nĂ« vend tĂ« «C:\ ».
  • ËshtĂ« propozuar njĂ« ngarkues i ri APE (Actually Portable Executable), i cili pĂ«rcakton formatin e skedarĂ«ve universitarĂ« ekzekutivĂ«. Ngarkuesi i ri pĂ«rdor mmap pĂ«r vendosjen e programit nĂ« kujtesĂ« dhe nuk ndryshon mĂ« pĂ«rmbajtjen nĂ« kohĂ« reale. NĂ«se Ă«shtĂ« e nevojshme, skedari ekzekutiv universitar mund tĂ« konvertohet nĂ« skedarĂ« ekzekutivĂ« tĂ« zakonshĂ«m tĂ« lidhur me platforma tĂ« veçanta.
  • NĂ« platformĂ«n Linux Ă«shtĂ« zbatuar mundĂ«sia e pĂ«rdorimit tĂ« modulit tĂ« bĂ«rthamĂ«s binfmt_misc pĂ«r ekzekutimin e programeve APE. Vihet nĂ« dukje se pĂ«rdorimi i binfmt_misc Ă«shtĂ« metoda mĂ« e shpejtĂ« pĂ«r ekzekutim.
  • PĂ«r Linux Ă«shtĂ« propozuar implementimi i funksionalitetit tĂ« thirrjeve sistemike pledge() dhe unveil(), qĂ« janĂ« duke u zhvilluar nga projekti OpenBSD. Ofrohet njĂ« API pĂ«r pĂ«rdorimin e kĂ«tyre thirrjeve nĂ« programe nĂ« gjuhĂ«t C, C++, Python dhe Redbean, si dhe njĂ« utilitet pledge.com pĂ«r izolimin e proceseve tĂ« rastit.
  • PĂ«r ndĂ«rtimin pĂ«rdoret utilita Landlock Make — njĂ« version i GNU Make me kontroll mĂ« tĂ« fortĂ« tĂ« varĂ«sive dhe pĂ«rdorimin e thirrjes sistemore Landlock pĂ«r tĂ« izoluar programin nga pjesa tjetĂ«r e sistemit dhe pĂ«r tĂ« rritur efikasitetin e caching. Siopsion, Ă«shtĂ« ruajtur mundĂ«sia e ndĂ«rtimit me GNU Make tĂ« zakonshĂ«m.
  • JanĂ« implementuar funksione pĂ«r shumĂ«thirrje — _spawn() dhe _join(), qĂ« pĂ«rfaqĂ«sojnĂ« mbĂ«shtetje universale pĂ«r API tĂ« ndryshme specifike pĂ«r sistemet operative. Po ashtu, po punohet pĂ«r implementimin e mbĂ«shtetjes pĂ«r POSIX Threads.
  • ËshtĂ« ofruar mundĂ«sia e pĂ«rdorimit tĂ« fjalĂ«s kyçe _Thread_local pĂ«r tĂ« pĂ«rdorur depo tĂ« veçanta pĂ«r çdo fije (TLS, Thread-Local Storage). Nga e para, runtime C inicializon TLS pĂ«r fijen kryesore, e cila ka çuar nĂ« rritjen e madhĂ«sisĂ« minimale tĂ« skedarit tĂ« ekzekutueshĂ«m nga 12 nĂ« 16 KB.
  • NĂ« skedarĂ«t e ekzekutueshĂ«m Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r parametrat ‘—ftrace’ dhe ‘—strace’ pĂ«r tĂ« prodhuar nĂ« stderr informacion mbi tĂ« gjitha thirrjet e funksioneve dhe thirrjet sistemore.
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r thirrjen sistemore closefrom(), e mbĂ«shtetur nĂ« Linux 5.9+, FreeBSD 8+ dhe OpenBSD.
  • NĂ« platformĂ«n Linux Ă«shtĂ« rritur deri nĂ« 10 herĂ« performanca e thirrjeve clock_gettime dhe gettimeofday pĂ«r shkak tĂ« pĂ«rdorimit tĂ« mekanizmit vDSO (virtual dynamic shared object), i cili lejon qĂ« menaxheri i thirrjes sistemore tĂ« transferohet nĂ« hapĂ«sirĂ«n e pĂ«rdoruesit dhe tĂ« shmangĂ« ndryshimet e kontekstit.
  • JanĂ« transferuar funksionet matematikore nga biblioteka Musl pĂ«r punĂ«n me numra kompleksĂ«. Performanca e shumĂ« funksioneve matematikore Ă«shtĂ« pĂ«rmirĂ«suar.
  • ËshtĂ« propozuar funksioni nointernet(), qĂ« çjerr mundĂ«sitĂ« rrjetore.
  • JanĂ« shtuar funksione tĂ« reja pĂ«r bashkimin efikas tĂ« vargjeve: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf dhe vappendf.
  • ËshtĂ« shtuar njĂ« variant i mbrojtur i familjes sĂ« funksioneve kprintf(), i destinuar pĂ«r t'u pĂ«rdorur nĂ«n privilegje tĂ« rritura.
  • Performanca e implementimeve Ă«shtĂ« rritur ndjeshĂ«m SSL, SHA, curve25519 dhe RSA.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster