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
