Hoʻokuʻu ʻia o ka waihona C maʻamau Cosmopolitan 2.0, i hoʻomohala ʻia no nā faila hiki ke hoʻokō

Ua paʻi ʻia ka hoʻokuʻu ʻia ʻana o ka papahana Cosmopolitan 2.0, e hoʻomohala ana i ka waihona C maʻamau a me kahi ʻano faila hoʻokō āpau e hiki ke hoʻohana ʻia no ka hāʻawi ʻana i nā papahana no nā ʻōnaehana hana like ʻole me ka hoʻohana ʻole ʻana i nā unuhi a me nā mīkini virtual. ʻO ka hopena i loaʻa ma ka hōʻuluʻulu ʻana ma GCC a me Clang i hui pū ʻia i loko o kahi faila hoʻokō honua i hoʻopili ʻia e hiki ke holo ma kekahi mahele Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, a kāhea ʻia mai ka BIOS. Hāʻawi ʻia ke code papahana ma lalo o ka laikini ISC (kahi mana maʻalahi o MIT/BSD).

Hoʻokumu ʻia ka pahu no ka hana ʻana i nā faila hoʻokō honua ma ka hui ʻana i nā ʻāpana a me nā poʻo kikoʻī i nā ʻōnaehana hana like ʻole (PE, ELF, MACHO, OPENBSD) i hoʻokahi faila, e hui pū ana i nā ʻano like ʻole i hoʻohana ʻia ma Unix, Windows a me macOS. No ka hōʻoia i ka holo ʻana o kahi faila hoʻokahi ma nā ʻōnaehana Windows a me Unix, ʻo ka hoʻopunipuni ka hoʻopili ʻana i nā faila Windows PE ma ke ʻano he shell scripts, me ka hoʻohana ʻana i ka ʻoiaʻiʻo ʻaʻole hoʻohana ʻo Thompson Shell i ka māka hōʻailona "#!". No ka hana ʻana i nā polokalamu e hoʻokomo i kekahi mau faila (e hoʻopili ana i nā kumuwaiwai āpau i hoʻokahi faila), kākoʻo ia i ke kūkulu ʻana i kahi faila hiki ke hoʻokō ʻia ma ke ʻano o kahi waihona ZIP i hoʻolālā ʻia. Papahana o ke ʻano i manaʻo ʻia (e like me hello.com palapala noi):

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

I ka hoʻomaka ʻana o ka faila, hōʻike ʻia ka lepili "MZqFpD", i ʻike ʻia he poʻomanaʻo Windows PE format. Hoʻokaʻawale ʻia kēia kaʻina ma ka ʻōlelo aʻo "pop %r10; jno 0x4a ; jo 0x4a", a me ka laina "\177ELF" i ke aʻo "jg 0x47", i hoʻohana ʻia e neʻe i ka helu komo. Holo nā ʻōnaehana Unix i ke code shell e hoʻohana ana i ke kauoha exec, e hāʻawi ana i ke code executable ma o kahi paipu inoa ʻole. ʻO kahi palena o ke ʻano i manaʻo ʻia ʻo ia ka hiki ke holo ma nā ʻōnaehana hana like me Unix me ka hoʻohana ʻana i nā pūpū e kākoʻo ana i ke ʻano hoʻohālikelike Thompson Shell.

Hāʻawi ke kelepona qemu-x86_64 i kahi portability hou aʻe a hiki i ka code i hōʻuluʻulu ʻia no ka hale hoʻolālā x86_64 e holo ma nā kahua non-x86, e like me nā papa Raspberry Pi a me nā polokalamu Apple i lako me nā mea hana ARM. Hiki ke hoʻohana ʻia ka papahana no ka hana ʻana i nā noi ponoʻī e holo me ka ʻole o kahi ʻōnaehana hana (metala ʻole). Ma ia mau noi, hoʻopili ʻia kahi bootloader i ka faila hiki ke hoʻokō ʻia, a hana ka papahana ma ke ʻano he ʻōnaehana hana bootable.

Hāʻawi ka libc waihona C maʻamau i hoʻomohala ʻia e ka papahana i nā hana 2024 (ma ka hoʻokuʻu mua ʻana aia ma kahi o 1400 mau hana). Ma ke ʻano o ka hana, hana wikiwiki ʻo Cosmopolitan e like me ka glibc a ʻike ʻia ma mua o Musl a me Newlib, ʻoiai ʻo Cosmopolitan kahi kauoha o ka nui o ka liʻiliʻi ma mua o ka glibc a pili like me Musl a me Newlib. No ka hoʻonui ʻana i nā hana i kapa pinepine ʻia e like me memcpy a me strlen, ua hoʻohana ʻia ke ʻano hana "trickle-down performance", kahi i hoʻohana ʻia ai kahi macro binding e kāhea i ka hana, kahi e ʻike ʻia ai ka mea hoʻopili e pili ana i nā papa inoa CPU i komo i ka hoʻokō code. kaʻina hana, ka mea e hiki ai ke mālama i nā kumuwaiwai i ka wā e mālama ai i ka mokuʻāina CPU ma ka mālama ʻana i nā papa inoa hoʻololi wale.

Ma waena o nā loli i ka hoʻokuʻu hou:

  • Ua hoʻololi ʻia ke kumumanaʻo no ke komo ʻana i nā kumuwaiwai kūloko i loko o kahi faila zip (i ka wā e wehe ai i nā faila, hoʻohana ʻia nā ala maʻamau /zip/... ma mua o ka hoʻohana ʻana i ka zip:.. prefix). Pēlā nō, no ke komo ʻana i nā disks ma Windows, hiki ke hoʻohana i nā ala e like me "/c/..." ma kahi o "C:/...".
  • Ua noi ʻia kahi mea hoʻouka APE (Actually Portable Executable) hou, e wehewehe ana i ke ʻano o nā faila hiki ke hoʻokō. Hoʻohana ka mea hoʻouka hou i ka mmap e waiho i ka papahana i ka hoʻomanaʻo a ʻaʻole e hoʻololi hou i nā mea i ka lele. Inā pono, hiki ke hoʻololi ʻia ka faila hiki ke hoʻokō i nā faila maʻamau i hoʻopaʻa ʻia i nā paepae pākahi.
  • Ma ke kahua Linux, hiki ke hoʻohana i ka module kernel binfmt_misc e holo i nā polokalamu APE. Hoʻomaopopo ʻia ʻo ka hoʻohana ʻana i ka binfmt_misc ke ala wikiwiki loa.
  • No Linux, ua noi ʻia kahi hoʻokō o ka hana o ka hoʻohiki () a me ka wehe ʻana () nā kelepona ʻōnaehana i kūkulu ʻia e ka papahana OpenBSD. Hāʻawi ʻia kahi API no ka hoʻohana ʻana i kēia mau kelepona i nā papahana ma C, C++, Python a me Redbean, a me kahi pono pledge.com no ka hoʻokaʻawale ʻana i nā kaʻina hana ʻole.
  • Hoʻohana ka hale i ka pono Landlock Make - he paʻi o GNU Make me ka nānā ʻana i ka hilinaʻi koʻikoʻi a me ka hoʻohana ʻana i ke kelepona ʻōnaehana Landlock e hoʻokaʻawale i ka papahana mai ke koena o ka ʻōnaehana a hoʻomaikaʻi i ka pono o ka cache. Ma ke ʻano he koho, mālama ʻia ka hiki ke kūkulu me GNU Make maʻamau.
  • Ua hoʻokō ʻia nā hana no ka multithreading - _spawn() a me _join(), ʻo ia nā mea paʻa honua ma luna o nā API kikoʻī i nā ʻōnaehana hana like ʻole. Ke hoʻomaka nei ka hana e hoʻokō i ke kākoʻo POSIX Threads.
  • Hiki ke hoʻohana i ka huaʻōlelo _Thread_local no ka hoʻohana ʻana i kahi waiho ʻokoʻa no kēlā me kēia pae (TLS, Thread-Local Storage). Ma ka paʻamau, hoʻomaka ka C runtime i ka TLS no ke kaula nui, kahi i hoʻonui ai i ka nui liʻiliʻi e hiki ke hoʻokō ʻia mai 12 KB a i 16 KB.
  • Ua hoʻohui ʻia ke kākoʻo no nā ʻāpana "--ftrace" a me "--strace" i nā faila hiki ke hoʻopuka i ka ʻike e pili ana i nā kelepona hana āpau a me nā kelepona ʻōnaehana iā stderr.
  • Hoʻohui ʻia ke kākoʻo no ke kelepona ʻōnaehana closefrom(), kākoʻo ʻia ma Linux 5.9+, FreeBSD 8+ a me OpenBSD.
  • Ma ke kahua Linux, ua hoʻonui ʻia ka hana o nā kelepona clock_gettime a me gettimeofday a hiki i 10 mau manawa ma o ka hoʻohana ʻana i ka mīkini vDSO (virtual dynamic shared object), e hiki ai ke hoʻoneʻe i ka mea hoʻohana kelepona ʻōnaehana i kahi mea hoʻohana a pale i nā hoʻololi pōʻaiapili.
  • Ua hoʻoneʻe ʻia nā hana makemakika no ka hana ʻana me nā helu paʻakikī mai ka waihona Musl. Ua wikiwiki ka hana o na hana makemakika.
  • Ua manaʻo ʻia ka hana nointernet () e hoʻopau i ka hiki o ka pūnaewele.
  • Hoʻohui i nā hana hou no ka hoʻopili pono ʻana i nā kaula: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf a me vappendf.
  • Hoʻohui ʻia kahi mana palekana o ka ʻohana kprintf() hana, i hoʻolālā ʻia e hana me nā pono kiʻekiʻe.
  • Hoʻomaikaʻi nui ʻia ka hana o SSL, SHA, curve25519 a me RSA hoʻokō.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka