Kutolewa kwa maktaba ya kawaida ya C ya Cosmopolitan 2.0, iliyotengenezwa kwa ajili ya faili zinazoweza kutekelezeka

Utoaji wa mradi wa Cosmopolitan 2.0 umechapishwa, ukitengeneza maktaba ya kawaida ya C na umbizo la faili linaloweza kutekelezeka ambalo linaweza kutumika kusambaza programu za mifumo tofauti ya uendeshaji bila kutumia wakalimani na mashine pepe. Matokeo yaliyopatikana kwa kutunga katika GCC na Clang yanakusanywa katika faili ya kutekelezwa ya kiulimwengu iliyounganishwa kwa takwimu ambayo inaweza kuendeshwa kwenye usambazaji wowote wa Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, na hata kuitwa kutoka kwa BIOS. Msimbo wa mradi unasambazwa chini ya leseni ya ISC (toleo lililorahisishwa la MIT/BSD).

Chombo cha kutengeneza faili zinazoweza kutekelezwa kwa wote kinategemea kuchanganya sehemu na vichwa maalum kwa mifumo tofauti ya uendeshaji (PE, ELF, MACHO, OPENBSD) katika faili moja, ikichanganya umbizo kadhaa tofauti zinazotumiwa katika Unix, Windows na macOS. Ili kuhakikisha kuwa faili moja inayoweza kutekelezwa inaendeshwa kwenye mifumo ya Windows na Unix, hila ni kusimba faili za Windows PE kama hati za ganda, kwa kuchukua fursa ya ukweli kwamba Thompson Shell haitumii alama ya hati ya "#!". Ili kuunda programu zinazojumuisha faili kadhaa (kuunganisha rasilimali zote kwenye faili moja), inasaidia uundaji wa faili inayoweza kutekelezwa kwa namna ya kumbukumbu maalum ya ZIP. Mpango wa umbizo lililopendekezwa (mfano hello.com maombi):

MZqFpD='BIOS BOOT SECTOR' kutekeleza 7 $(command -v $0) printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7 exec "$0" "$@" exec qemu-x86_64 "$0" "$ @" toka 1 HALI HALISI… SEGMENTS ELF… OPENBSD KUMBUKA… VICHWA VYA MACHO… MSIMBO NA DATA… ZIP DIRECTORY…

Mwanzoni mwa faili, lebo ya "MZqFpD" imeonyeshwa, ambayo inachukuliwa kuwa kichwa cha umbizo la Windows PE. Mlolongo huu pia umewekwa katika maagizo "pop %r10; jno 0x4a ; jo 0x4a", na mstari "\177ELF" kwa maagizo "jg 0x47", ambayo hutumiwa kupeleka mahali pa kuingilia. Mifumo ya Unix huendesha msimbo wa ganda ambao hutumia amri ya exec, kupitisha nambari inayoweza kutekelezwa kupitia bomba lisilo na jina. Kizuizi cha njia inayopendekezwa ni uwezo wa kufanya kazi kwenye mifumo endeshi inayofanana na Unix kwa kutumia tu makombora ambayo yanaauni hali ya uoanifu ya Thompson Shell.

Simu ya qemu-x86_64 hutoa uwezo wa kubebeka zaidi na inaruhusu msimbo uliokusanywa kwa usanifu wa x86_64 kufanya kazi kwenye mifumo isiyo ya x86, kama vile bodi za Raspberry Pi na vifaa vya Apple vilivyo na vichakataji vya ARM. Mradi huo pia unaweza kutumika kutengeneza programu za kujitegemea zinazoendesha bila mfumo wa uendeshaji (chuma tupu). Katika programu hizo, bootloader imeunganishwa kwenye faili inayoweza kutekelezwa, na programu hufanya kama mfumo wa uendeshaji wa bootable.

Libc ya kawaida ya maktaba ya C iliyotengenezwa na mradi inatoa kazi za 2024 (katika toleo la kwanza kulikuwa na kazi 1400 hivi). Kwa upande wa utendakazi, Cosmopolitan hufanya kazi haraka kama glibc na iko mbele sana Musl na Newlib, licha ya ukweli kwamba Cosmopolitan ni mpangilio wa ukubwa wa msimbo kuliko glibc na takriban inalingana na Musl na Newlib. Ili kuboresha vitendaji vinavyoitwa mara kwa mara kama vile memcpy na strlen, mbinu ya "utendaji wa chini" hutumiwa pia, ambapo ufungaji wa jumla hutumiwa kuita chaguo hili, ambapo mkusanyaji huarifiwa kuhusu rejista za CPU zinazohusika katika utekelezaji wa nambari. mchakato, ambayo inaruhusu kuokoa rasilimali wakati wa kuhifadhi hali ya CPU kwa kuhifadhi rejista zinazobadilika pekee.

Miongoni mwa mabadiliko katika toleo jipya:

  • Mpango wa kufikia rasilimali za ndani ndani ya faili ya zip umebadilishwa (wakati wa kufungua faili, njia za kawaida /zip/... sasa zinatumika badala ya kutumia zip:.. kiambishi awali). Vile vile, kufikia disks katika Windows, inawezekana kutumia njia kama "/c/..." badala ya "C: / ...".
  • Kipakiaji kipya cha APE (Inaweza Kubebeka Kwa Kweli) kimependekezwa, ambacho kinafafanua umbizo la faili zinazoweza kutekelezwa zima. Kipakiaji kipya hutumia mmap kuweka programu kwenye kumbukumbu na haibadilishi tena yaliyomo kwenye nzi. Ikihitajika, faili inayoweza kutekelezeka ya ulimwengu wote inaweza kubadilishwa kuwa faili za kawaida zinazoweza kutekelezeka zilizounganishwa kwenye mifumo mahususi.
  • Kwenye jukwaa la Linux, inawezekana kutumia moduli ya binfmt_misc kernel kuendesha programu za APE. Imebainika kuwa kutumia binfmt_misc ndio njia ya uzinduzi wa haraka zaidi.
  • Kwa Linux, utekelezaji wa utendakazi wa pledge() na unveil() simu za mfumo zilizoundwa na mradi wa OpenBSD umependekezwa. API imetolewa kwa ajili ya kutumia simu hizi katika programu katika C, C++, Python na Redbean, pamoja na shirika la pledge.com kwa kutenga michakato kiholela.
  • Muundo huu unatumia matumizi ya Landlock Make - toleo la GNU Make lenye ukaguzi mkali zaidi wa utegemezi na matumizi ya simu ya mfumo wa Landlock kutenga programu kutoka kwa mfumo mwingine na kuboresha ufanisi wa akiba. Kama chaguo, uwezo wa kujenga na GNU Make ya kawaida huhifadhiwa.
  • Kazi za usomaji mwingi zimetekelezwa - _spawn() na _join(), ambazo ni vifungo vya jumla juu ya API maalum kwa mifumo tofauti ya uendeshaji. Kazi pia inaendelea kutekeleza usaidizi wa POSIX Threads.
  • Inawezekana kutumia _Thread_local neno muhimu kutumia hifadhi tofauti kwa kila thread (TLS, Thread-Local Storage). Kwa chaguo-msingi, muda wa utekelezaji wa C huanzisha TLS kwa thread kuu, ambayo imesababisha ukubwa wa chini unaoweza kutekelezwa kuongezeka kutoka KB 12 hadi 16.
  • Usaidizi wa vigezo vya "--ftrace" na "--strace" umeongezwa kwa faili zinazoweza kutekelezwa ili kutoa taarifa kuhusu simu zote za utendakazi na simu za mfumo kwa stderr.
  • Usaidizi umeongezwa kwa simu ya mfumo wa closefrom(), inayotumika kwenye Linux 5.9+, FreeBSD 8+ na OpenBSD.
  • Kwenye jukwaa la Linux, utendakazi wa simu za clock_gettime na gettimeofday umeongezwa hadi mara 10 kwa kutumia utaratibu wa vDSO (kipengee chenye nguvu cha pamoja), ambayo inawezesha kusogeza kidhibiti simu kwenye nafasi ya mtumiaji na kuepuka swichi za muktadha.
  • Vitendaji vya hisabati vya kufanya kazi na nambari changamano vimehamishwa kutoka maktaba ya Musl. Kazi ya kazi nyingi za hisabati imeharakishwa.
  • Chaguo za kukokotoa za nointernet() zimependekezwa kuzima uwezo wa mtandao.
  • Imeongeza utendakazi mpya kwa mifuatano ya kuambatisha kwa ufanisi: kiambatisho, kiambatisho, kiambatisho, viambatisho, viambatisho, kiambatisho, kappendf, kvappendf na vappendf.
  • Imeongeza toleo lililolindwa la kprintf() familia ya utendakazi, iliyoundwa kufanya kazi na mapendeleo ya juu.
  • Utendakazi ulioboreshwa kwa kiasi kikubwa wa utekelezaji wa SSL, SHA, curve25519 na RSA.

Chanzo: opennet.ru

Kuongeza maoni