Ho lokolloa ha laebrari e tloaelehileng ea C Cosmopolitan 2.0, e etselitsoeng lifaele tse nkehang habonolo

Tokollo ea projeke ea Cosmopolitan 2.0 e phatlalalitsoe, ho nts'etsapele laebrari e tloaelehileng ea C le mofuta oa faele o ka sebetsoang ka kakaretso o ka sebelisoang ho aba mananeo a litsamaiso tse fapaneng tsa ts'ebetso ntle le ts'ebeliso ea bafetoleli le metjhini e sebetsang. Sephetho se fumanoeng ka ho bokella ho GCC le Clang se hlophisitsoe hore e be faele e sebetsang ea bokahohleng e hokahantsoeng ka mokhoa o tsitsitseng e ka tsamaisoang kabong efe kapa efe ea Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, esita le ho bitsoa ho tsoa BIOS. Khoutu ea projeke e ajoa tlasa laesense ea ISC (mofuta o nolofalitsoeng oa MIT/BSD).

Sets'oants'o sa ho hlahisa lifaele tse kenngoeng ka ho fetesisa se ipapisitse le ho kopanya likarolo le lihlooho tse ikhethileng lits'ebetsong tse fapaneng tsa ts'ebetso (PE, ELF, MACHO, OPENBSD) faeleng e le 'ngoe, ho kopanya mefuta e mengata e fapaneng e sebelisoang ho Unix, Windows le macOS. Ho etsa bonnete ba hore faele e le 'ngoe e sebetsang e sebetsa lits'ebetsong tsa Windows le Unix, leqheka ke ho kenya lifaele tsa Windows PE joalo ka likhetla, ho nka monyetla ka taba ea hore Thompson Shell ha e sebelise letšoao la "#!". Ho theha mananeo a kenyelletsang lifaele tse 'maloa (ho hokahanya lisebelisoa tsohle faeleng e le' ngoe), e ts'ehetsa ho etsoa ha faele e ka phethisoang ka mokhoa oa polokelo ea khale ea ZIP. Sekema sa sebopeho se reriloeng (mohlala, hello.com application):

MZqFpD='BIOS BOOT SECTOR' etsa 7 $(taelo -v $0) printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7 exec "$0" "$@" exec qemu-x86_64 "$0" "$ @" tsoa ho 1 REAL MODE… ELF SEGMENTS… OPENBSD ELA HLOKO… MACHO HEADERS… KHOUTU LE DATA… ZIP DIRECTORY…

Qalong ea faele, letšoao "MZqFpD" le bontšitsoe, le nkoang e le hlooho ea sebopeho sa Windows PE. Tatelano ena e boetse e hlalositsoe ka taelo ea "pop %r10; jno 0x4a ; jo 0x4a", le mola "\177ELF" ho taelo "jg 0x47", e sebelisetsoang ho fetisetsa sebakeng sa ho kena. Litsamaiso tsa Unix li tsamaisa khoutu ea khetla e sebelisang taelo ea exec, e fetisang khoutu e sebetsang ka phala e sa boleloang ka lebitso. Moeli oa mokhoa o reriloeng ke bokhoni ba ho sebetsa lits'ebetsong tse ts'oanang tsa Unix feela ka likhetla tse tšehetsang mokhoa oa ho lumellana le Thompson Shell.

Mohala oa qemu-x86_64 o fana ka mokhoa o eketsehileng oa ho nkeha 'me o lumella khoutu e hlophisitsoeng bakeng sa meralo ea x86_64 ho sebetsa ho li-platform tseo e seng tsa x86, tse kang liboto tsa Raspberry Pi le lisebelisoa tsa Apple tse nang le li-processor tsa ARM. Morero o ka boela oa sebelisoa ho theha lisebelisoa tse ikemetseng tse tsamaeang ntle le mokhoa oa ho sebetsa (tšepe e se nang letho). Lits'ebetsong tse joalo, bootloader e hokelloa faeleng e ka phethisoang, mme lenaneo le sebetsa joalo ka sistimi e sebetsang ea bootable.

Libc tse tloaelehileng tsa laebrari ea C tse ntlafalitsoeng ke morero li fana ka mesebetsi ea 2024 (tokisetsong ea pele ho ne ho e-na le mesebetsi e ka bang 1400). Mabapi le ts'ebetso, Cosmopolitan e sebetsa kapele joalo ka glibc 'me e ka pele ho Musl le Newlib ka mokhoa o hlokomelehang, ho sa tsotelehe taba ea hore Cosmopolitan ke taelo e nyane ka boholo ba khoutu ho feta glibc mme e batla e tsamaellana le Musl le Newlib. Ho ntlafatsa mesebetsi e atisang ho bitsoa joalo ka memcpy le strlen, mokhoa oa "trickle-down performance" o sebelisoa hape, moo ho tlamahanngoang ha macro ho sebelisoa ho bitsa ts'ebetso, moo moqapi a tsebisoang ka li-regista tsa CPU tse amehang ts'ebetsong ea khoutu. process, e lumellang ho boloka lisebelisoa ha u boloka boemo ba CPU ka ho boloka lirekoto tse fetohang feela.

Har'a liphetoho tse hlahang tokollong e ncha:

  • Morero oa ho fumana lisebelisoa tsa ka hare ka hare ho faele ea zip o fetotsoe (ha o bula lifaele, litsela tse tloaelehileng / zip / ... li se li sebelisoa ho e-na le ho sebelisa zip: ... prefix). Ka mokhoa o ts'oanang, ho fihlella li-disk ho Windows, hoa khoneha ho sebelisa litsela tse kang "/c/..." ho e-na le "C: / ...".
  • Ho hlahisitsoe mochini o mocha oa APE (Actually Portable Executable), o hlalosang sebopeho sa lifaele tse ka sebetsoang lefatšeng ka bophara. Sesebelisoa se secha se sebelisa mmap ho beha lenaneo mohopolong 'me ha se sa fetola litaba kapele. Haeba ho hlokahala, faele e sebetsang ea bokahohleng e ka fetoloa lifaele tse tloaelehileng tse sebetsang tse hokahaneng le sethala ka bomong.
  • Sethaleng sa Linux, hoa khoneha ho sebelisa binfmt_misc kernel module ho tsamaisa mananeo a APE. Hoa hlokomeleha hore ho sebelisa binfmt_misc ke mokhoa o potlakileng oa ho qala.
  • Bakeng sa Linux, ts'ebetsong ea ts'ebetso ea pledge() le unveil() mehala ea sistimi e ntlafalitsoeng ke projeke ea OpenBSD e hlahisitsoe. API e fanoa bakeng sa ho sebelisa li-call tsena mananeong a C, C ++, Python le Redbean, hammoho le thuso ea pledge.com bakeng sa ho arola mekhoa e sa lumellaneng.
  • Mohaho ona o sebelisa Landlock Make utility - khatiso ea GNU Make e nang le tlhahlobo e matla ea ho itšetleha le ts'ebeliso ea mohala oa Landlock ho arola lenaneo ho sistimi eohle le ho ntlafatsa ts'ebetso ea caching. E le khetho, bokhoni ba ho haha ​​​​ka GNU Make kamehla bo bolokiloe.
  • Mesebetsi ea ho bala lintho tse ngata e kentsoe tšebetsong - _spawn() le _join(), e leng tlamo e akaretsang holim'a li-API tse ikhethileng lits'ebetsong tse fapaneng tsa ts'ebetso. Mosebetsi o ntse o tsoela pele ho kenya ts'ehetso ea POSIX Threads.
  • Hoa khoneha ho sebelisa _Thread_local keyword ho sebelisa polokelo e arohaneng bakeng sa khoele ka 'ngoe (TLS, Thread-Local Storage). Ka nako e sa lekanyetsoang, nako ea ho sebetsa ea C e qala TLS bakeng sa khoele e kholo, e entseng hore boholo bo fokolang bo ka phethahalang bo eketsehe ho tloha 12 ho ea ho 16 KB.
  • Ts'ehetso ea "-ftrace" le "--strace" parameters e kenyelelitsoe lifaeleng tse sebetsang ho hlahisa tlhahisoleseding mabapi le mehala eohle ea ts'ebetso le mehala ea sistimi ho stderr.
  • Ts'ehetso e ekelitsoeng bakeng sa mohala oa "closefrom()" oa sistimi, o tšehetsoeng ho Linux 5.9+, FreeBSD 8+ le OpenBSD.
  • Sethaleng sa Linux, ts'ebetso ea mehala ea clock_gettime le gettimeofday e eketsehile ho fihlela makhetlo a 10 ka ho sebelisa mochine oa vDSO (virtual dynamic shared object), o nolofalletsang ho tsamaisa mochine oa mohala sebakeng sa mosebedisi le ho qoba ho fetoha ha moelelo.
  • Mesebetsi ea lipalo bakeng sa ho sebetsa ka linomoro tse rarahaneng e tlositsoe laebraring ea Musl. Mosebetsi oa mesebetsi e mengata ea lipalo o potlakisitsoe.
  • Mosebetsi oa nointernet() o khothalelitsoe ho tima bokhoni ba marang-rang.
  • E kentse mesebetsi e mecha bakeng sa likhoele tse kenyellelitsoeng hantle: append, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf le vappendf.
  • E kentse mofuta o sirelelitsoeng oa lelapa la kprintf() la mesebetsi, e etselitsoeng ho sebetsa ka litokelo tse phahameng.
  • Ts'ebetso e ntlafalitsoeng haholo ea SSL, SHA, curve25519 le ts'ebetsong ea RSA.

Source: opennet.ru

Eketsa ka tlhaloso