ืฉื—ืจื•ืจ ืฉืœ ืกืคืจื™ื™ืช C ื”ืกื˜ื ื“ืจื˜ื™ืช Cosmopolitan 2.0, ืฉืคื•ืชื—ื” ืขื‘ื•ืจ ืงื‘ืฆื™ ื”ืคืขืœื” ื ื™ื™ื“ื™ื

ืคืจืกื•ื ืคืจื•ื™ืงื˜ Cosmopolitan 2.0, ืžืคืชื— ืืช ืกืคืจื™ื™ืช C ื”ืกื˜ื ื“ืจื˜ื™ืช ื•ืคื•ืจืžื˜ ืงื•ื‘ืฅ ื”ืคืขืœื” ืื•ื ื™ื‘ืจืกืœื™ ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ืœื”ืคืฆืช ืชื•ื›ื ื™ื•ืช ืขื‘ื•ืจ ืžืขืจื›ื•ืช ื”ืคืขืœื” ืฉื•ื ื•ืช ืœืœื ืฉื™ืžื•ืฉ ื‘ืžืชื•ืจื’ืžื ื™ื ื•ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช. ื”ืชื•ืฆืื” ื”ืžืชืงื‘ืœืช ืขืœ ื™ื“ื™ ืงื•ืžืคื™ืœืฆื™ื” ื‘-GCC ื•ื‘-Clang ืžื•ืจื›ื‘ืช ืœืงื•ื‘ืฅ ื”ืคืขืœื” ืื•ื ื™ื‘ืจืกืœื™ ืžืงื•ืฉืจ ืกื˜ื˜ื™ืช ืฉื ื™ืชืŸ ืœื”ืจื™ืฅ ื‘ื›ืœ ื”ืคืฆืช ืœื™ื ื•ืงืก, macOS, Windows, FreeBSD, OpenBSD, NetBSD, ื•ืืคื™ืœื• ืœืงืจื•ื ืžื”-BIOS. ืงื•ื“ ื”ืคืจื•ื™ืงื˜ ืžื•ืคืฅ ืชื—ืช ืจื™ืฉื™ื•ืŸ ISC (ื’ืจืกื” ืคืฉื•ื˜ื” ืฉืœ โ€‹โ€‹MIT/BSD).

ื”ืžื™ื›ืœ ืœื”ืคืงืช ืงื‘ืฆื™ ื”ืคืขืœื” ืื•ื ื™ื‘ืจืกืœื™ื™ื ืžื‘ื•ืกืก ืขืœ ืฉื™ืœื•ื‘ ืฉืœ ืกื’ืžื ื˜ื™ื ื•ื›ื•ืชืจื•ืช ืกืคืฆื™ืคื™ื•ืช ืœืžืขืจื›ื•ืช ื”ืคืขืœื” ืฉื•ื ื•ืช (PE, ELF, MACHO, OPENBSD) ื‘ืงื•ื‘ืฅ ืื—ื“, ืฉื™ืœื•ื‘ ืฉืœ ืžืกืคืจ ืคื•ืจืžื˜ื™ื ืฉื•ื ื™ื ื”ืžืฉืžืฉื™ื ื‘-Unix, Windows ื•-macOS. ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืฉืงื•ื‘ืฅ ื”ืคืขืœื” ื™ื—ื™ื“ ื™ืจื•ืฅ ื‘ืžืขืจื›ื•ืช Windows ื•-Unix, ื˜ืจื™ืง ื”ื•ื ืœืงื•ื“ื“ ืงื‘ืฆื™ Windows PE ื›ืกืงืจื™ืคื˜ื™ื ืฉืœ ืžืขื˜ืคืช, ืชื•ืš ื ื™ืฆื•ืœ ื”ืขื•ื‘ื“ื” ืฉ-Tompson Shell ืื™ื ื• ืžืฉืชืžืฉ ื‘ืกืžืŸ ื”ืกืงืจื™ืคื˜ "#!". ื›ื“ื™ ืœื™ืฆื•ืจ ืชื•ื›ื ื™ื•ืช ื”ื›ื•ืœืœื•ืช ืžืกืคืจ ืงื‘ืฆื™ื (ืžืงืฉืจ ืืช ื›ืœ ื”ืžืฉืื‘ื™ื ืœืงื•ื‘ืฅ ืื—ื“), ื”ื•ื ืชื•ืžืš ื‘ื™ืฆื™ืจืช ืงื•ื‘ืฅ ื”ืคืขืœื” ื‘ืฆื•ืจื” ืฉืœ ืืจื›ื™ื•ืŸ ZIP ืฉืชื•ื›ื ืŸ ื‘ืžื™ื•ื—ื“. ืชื•ื›ื ื™ืช ื”ืคื•ืจืžื˜ ื”ืžื•ืฆืข (ื“ื•ื’ืžื” ืœื™ื™ืฉื•ื 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" "$ @" ืฆื ืžืžืฆื‘ ืืžื™ืชื™ 1... ืงื˜ืขื™ ืฉื“ื•ืŸ... ื”ืขืจื” OPENBSD... ื›ื•ืชืจื•ืช ืžืืฆ'ื•... ืงื•ื“ ื•ื ืชื•ื ื™ื... ืกืคืจื™ื™ืช ืžื™ืงื•ื“...

ื‘ืชื—ื™ืœืช ื”ืงื•ื‘ืฅ, ืžืฆื•ื™ื ืช ื”ืชื•ื•ื™ืช "MZqFpD", ื”ื ืชืคืกืช ื›ื›ื•ืชืจืช ื‘ืคื•ืจืžื˜ Windows PE. ืจืฆืฃ ื–ื” ืžืคื•ืขื ื— ื’ื ื‘ื”ื•ืจืื” "pop %r10; jno 0x4a ; jo 0x4a", ื•ื”ืฉื•ืจื” "\177ELF" ืœื”ื•ืจืื” "jg 0x47", ื”ืžืฉืžืฉื•ืช ืœื”ืขื‘ืจื” ืœื ืงื•ื“ืช ื”ื›ื ื™ืกื”. ืžืขืจื›ื•ืช ื™ื•ื ื™ืงืก ืžืจืฆื•ืช ืงื•ื“ ืžืขื˜ืคืช ื”ืžืฉืชืžืฉ ื‘ืคืงื•ื“ื” exec, ื•ืžืขื‘ื™ืจ ืืช ืงื•ื“ ื”ื”ืคืขืœื” ื“ืจืš ืฆื™ื ื•ืจ ืœืœื ืฉื. ืžื’ื‘ืœื” ืฉืœ ื”ืฉื™ื˜ื” ื”ืžื•ืฆืขืช ื”ื™ื ื”ื™ื›ื•ืœืช ืœืจื•ืฅ ืขืœ ืžืขืจื›ื•ืช ื”ืคืขืœื” ื“ืžื•ื™ื•ืช Unix ืจืง ื‘ืืžืฆืขื•ืช ืงื•ื ื›ื™ื•ืช ื”ืชื•ืžื›ื•ืช ื‘ืžืฆื‘ ืชืื™ืžื•ืช Thompson Shell.

ื”ืงืจื™ืื” qemu-x86_64 ืžืกืคืงืช ื ื™ื™ื“ื•ืช ื ื•ืกืคืช ื•ืžืืคืฉืจืช ืœืจื•ืฅ ืงื•ื“ ื”ื™ื“ื•ืจ ืขื‘ื•ืจ ืืจื›ื™ื˜ืงื˜ื•ืจืช x86_64 ืขืœ ืคืœื˜ืคื•ืจืžื•ืช ืฉืื™ื ืŸ x86, ื›ื’ื•ืŸ ืœื•ื—ื•ืช Raspberry Pi ื•ืžื›ืฉื™ืจื™ ืืคืœ ื”ืžืฆื•ื™ื“ื™ื ื‘ืžืขื‘ื“ื™ ARM. ื”ืคืจื•ื™ืงื˜ ื™ื›ื•ืœ ืœืฉืžืฉ ื’ื ืœื™ืฆื™ืจืช ืืคืœื™ืงืฆื™ื•ืช ืขืฆืžืื™ื•ืช ื”ืคื•ืขืœื•ืช ืœืœื ืžืขืจื›ืช ื”ืคืขืœื” (bare metal). ื‘ื™ื™ืฉื•ืžื™ื ื›ืืœื” ืžืฆื•ืจืฃ ื˜ื•ืขืŸ ืืชื—ื•ืœ ืœืงื•ื‘ืฅ ื”ื”ืคืขืœื”, ื•ื”ืชื•ื›ื ื™ืช ืคื•ืขืœืช ื›ืžืขืจื›ืช ื”ืคืขืœื” ื”ื ื™ืชื ืช ืœืืชื—ื•ืœ.

ืกืคืจื™ื™ืช C ื”ืกื˜ื ื“ืจื˜ื™ืช libc ืฉืคื•ืชื—ื” ืขืœ ื™ื“ื™ ื”ืคืจื•ื™ืงื˜ ืžืฆื™ืขื” 2024 ืคื•ื ืงืฆื™ื•ืช (ื‘ืžื”ื“ื•ืจื” ื”ืจืืฉื•ื ื” ื”ื™ื• ื›-1400 ืคื•ื ืงืฆื™ื•ืช). ืžื‘ื—ื™ื ืช ื‘ื™ืฆื•ืขื™ื, Cosmopolitan ืขื•ื‘ื“ ืžื”ืจ ื›ืžื• glibc ื•ื”ื•ื ืžืงื“ื™ื ื‘ืื•ืคืŸ ื ื™ื›ืจ ืืช Musl ื•-Newlib, ืœืžืจื•ืช ื”ืขื•ื‘ื“ื” ืฉ-Cosmopolitan ื”ื•ื ื‘ืกื“ืจ ื’ื•ื“ืœ ืงื˜ืŸ ื™ื•ืชืจ ื‘ื’ื•ื“ืœ ื”ืงื•ื“ ืž-glibc ื•ืžืชืื™ื ื‘ืขืจืš ืœ-Musl ื•-Newlib. ื›ื“ื™ ืœื‘ืฆืข ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืคื•ื ืงืฆื™ื•ืช ื”ื ืงืจืื•ืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื›ืžื• memcpy ื•-strlen, ื ืขืฉื” ืฉื™ืžื•ืฉ ื ื•ืกืฃ ื‘ื˜ื›ื ื™ืงืช "ื‘ื™ืฆื•ืขื™ ื”ื˜ืคื˜ื•ืฃ", ืฉื‘ื” ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืงืฉื™ืจืช ืžืืงืจื• ืœืงืจื™ืื” ืœืคื•ื ืงืฆื™ื”, ืฉื‘ื” ื”ืžื”ื“ืจ ืžืงื‘ืœ ืžื™ื“ืข ืขืœ ืื•ื’ืจื™ ื”-CPU ื”ืžืขื•ืจื‘ื™ื ื‘ื‘ื™ืฆื•ืข ื”ืงื•ื“ ืชื”ืœื™ืš, ื”ืžืืคืฉืจ ื—ื™ืกื›ื•ืŸ ื‘ืžืฉืื‘ื™ื ื‘ืขืช ืฉืžื™ืจืช ืžืฆื‘ ื”-CPU ืขืœ ื™ื“ื™ ืฉืžื™ืจืช ืื•ื’ืจื™ื ื”ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™ ื‘ืœื‘ื“.

ื‘ื™ืŸ ื”ืฉื™ื ื•ื™ื™ื ื‘ืžื”ื“ื•ืจื” ื”ื—ื“ืฉื”:

  • ืกื›ื™ืžืช ื”ื’ื™ืฉื” ืœืžืฉืื‘ื™ื ืคื ื™ืžื™ื™ื ื‘ืชื•ืš ืงื•ื‘ืฅ zip ืฉื•ื ืชื” (ื‘ืขืช ืคืชื™ื—ืช ืงื‘ืฆื™ื, ื›ืขืช ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ื ืชื™ื‘ื™ /zip/... ื”ืจื’ื™ืœื™ื ื‘ืžืงื•ื ืœื”ืฉืชืžืฉ ื‘ืงื™ื“ื•ืžืช zip:..). ื‘ืื•ืคืŸ ื“ื•ืžื”, ื›ื“ื™ ืœื’ืฉืช ืœื“ื™ืกืงื™ื ื‘-Windows, ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ื ืชื™ื‘ื™ื ื›ืžื• "/c/..." ื‘ืžืงื•ื "C:/...".
  • ื”ื•ืฆืข ืžื˜ืขื™ืŸ APE (Actually Portable Executable) ื—ื“ืฉ, ื”ืžื’ื“ื™ืจ ืืช ื”ืคื•ืจืžื˜ ืฉืœ ืงื‘ืฆื™ ื”ืคืขืœื” ืื•ื ื™ื‘ืจืกืœื™ื™ื. ื”ืžื˜ืขืŸ ื”ื—ื“ืฉ ืžืฉืชืžืฉ ื‘-mmap ื›ื“ื™ ืœืžืงื ืืช ื”ืชื•ื›ื ื™ืช ื‘ื–ื™ื›ืจื•ืŸ ื•ืื™ื ื• ืžืฉื ื” ืขื•ื“ ืืช ื”ืชื•ื›ืŸ ืชื•ืš ื›ื“ื™ ืชื ื•ืขื”. ื‘ืžื™ื“ืช ื”ืฆื•ืจืš, ื ื™ืชืŸ ืœื”ืžื™ืจ ืืช ืงื•ื‘ืฅ ื”ื”ืคืขืœื” ื”ืื•ื ื™ื‘ืจืกืœื™ ืœืงื‘ืฆื™ ื”ืคืขืœื” ืจื’ื™ืœื™ื ื”ืงืฉื•ืจื™ื ืœืคืœื˜ืคื•ืจืžื•ืช ื‘ื•ื“ื“ื•ืช.
  • ื‘ืคืœื˜ืคื•ืจืžืช ืœื™ื ื•ืงืก, ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ืžื•ื“ื•ืœ ืœื™ื‘ืช binfmt_misc ื›ื“ื™ ืœื”ืคืขื™ืœ ืชื•ื›ื ื™ื•ืช APE. ื™ืฆื•ื™ืŸ ื›ื™ ื”ืฉื™ืžื•ืฉ ื‘-binfmt_misc ื”ื•ื ืฉื™ื˜ืช ื”ื”ืฉืงื” ื”ืžื”ื™ืจื” ื‘ื™ื•ืชืจ.
  • ืขื‘ื•ืจ ืœื™ื ื•ืงืก, ื”ื•ืฆืข ื™ื™ืฉื•ื ืฉืœ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ืงืจื™ืื•ืช ื”ืžืขืจื›ืช ()pledge() ื•- unveil() ืฉืคื•ืชื—ื• ืขืœ ื™ื“ื™ ืคืจื•ื™ืงื˜ OpenBSD. API ืžืกื•ืคืง ืœืฉื™ืžื•ืฉ ื‘ืงืจื™ืื•ืช ืืœื” ื‘ืชื•ื›ื ื™ื•ืช ื‘-C, C++, Python ื•-Redbean, ื›ืžื• ื’ื ื›ืœื™ ืขื–ืจ pledge.com ืœื‘ื™ื“ื•ื“ ืชื”ืœื™ื›ื™ื ืฉืจื™ืจื•ืชื™ื™ื.
  • ื”-build ืžืฉืชืžืฉ ื‘ื›ืœื™ ื”ืฉื™ืจื•ืช Landlock Make - ืžื”ื“ื•ืจื” ืฉืœ GNU Make ืขื ื‘ื“ื™ืงืช ืชืœื•ืช ืžื—ืžื™ืจื” ื™ื•ืชืจ ื•ืฉื™ืžื•ืฉ ื‘ืงืจื™ืื” ืœืžืขืจื›ืช Landlock ื›ื“ื™ ืœื‘ื•ื“ื“ ืืช ื”ืชื•ื›ื ื™ืช ืžืฉืืจ ื”ืžืขืจื›ืช ื•ืœืฉืคืจ ืืช ื™ืขื™ืœื•ืช ื”ืื—ืกื•ืŸ ื‘ืžื˜ืžื•ืŸ. ื›ืื•ืคืฆื™ื”, ื ืฉืžืจืช ื”ื™ื›ื•ืœืช ืœื‘ื ื•ืช ืขื GNU Make ืจื’ื™ืœ.
  • ืคื•ื ืงืฆื™ื•ืช ืœืจื™ื‘ื•ื™ ืฉืจืฉื•ืจื™ื ื™ื•ืฉืžื• - _spawn() ื•-_join(), ืฉื”ืŸ ื›ืจื™ื›ื•ืช ืื•ื ื™ื‘ืจืกืœื™ื•ืช ืขืœ ืžืžืฉืงื™ API ืกืคืฆื™ืคื™ื™ื ืœืžืขืจื›ื•ืช ื”ืคืขืœื” ืฉื•ื ื•ืช. ื›ืžื• ื›ืŸ, ืžืชื‘ืฆืขืช ืขื‘ื•ื“ื” ืœื”ื˜ืžืขืช ืชืžื™ื›ื” ื‘- POSIX Threads.
  • ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ืžื™ืœืช ื”ืžืคืชื— _Thread_local ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ืื—ืกื•ืŸ ื ืคืจื“ ืขื‘ื•ืจ ื›ืœ ืฉืจืฉื•ืจ (TLS, Thread-Local Storage). ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื–ืžืŸ ื”ืจื™ืฆื” C ืžืืชื—ืœ ืืช TLS ืขื‘ื•ืจ ื”ืฉืจืฉื•ืจ ื”ืจืืฉื™, ืžื” ืฉื’ืจื ืœื’ื•ื“ืœ ื”ื”ืคืขืœื” ื”ืžื™ื ื™ืžืœื™ ืœื”ื’ื“ื™ืœ ืž-12 KB ืœ-16 KB.
  • ืชืžื™ื›ื” ื‘ืคืจืžื˜ืจื™ื "--ftrace" ื•-"--strace" ื ื•ืกืคื” ืœืงื‘ืฆื™ ื”ืคืขืœื” ื›ื“ื™ ืœื”ื•ืฆื™ื ืžื™ื“ืข ืขืœ ื›ืœ ืงืจื™ืื•ืช ื”ืคื•ื ืงืฆื™ื•ืช ื•ืงืจื™ืื•ืช ื”ืžืขืจื›ืช ืœ-stderr.
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืงืจื™ืื” ืœืžืขืจื›ืช closefrom(), ื ืชืžื›ืช ื‘-Linux 5.9+, FreeBSD 8+ ื•-OpenBSD.
  • ื‘ืคืœื˜ืคื•ืจืžืช ืœื™ื ื•ืงืก, ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืงืจื™ืื•ืช clock_gettime ื•-gettimeofday ื”ื•ื’ื“ืœื• ืขื“ ืคื™ 10 ืขืœ ื™ื“ื™ ืฉื™ืžื•ืฉ ื‘ืžื ื’ื ื•ืŸ vDSO (Virtual dynamic shared object), ื”ืžืืคืฉืจ ืœื”ืขื‘ื™ืจ ืืช ื”ืžื˜ืคืœ ื‘ืฉื™ื—ื•ืช ื”ืžืขืจื›ืช ืœืžืจื—ื‘ ื”ืžืฉืชืžืฉ ื•ืœื”ื™ืžื ืข ืžืžืขื‘ืจื™ ื”ืงืฉืจ.
  • ืคื•ื ืงืฆื™ื•ืช ืžืชืžื˜ื™ื•ืช ืœืขื‘ื•ื“ื” ืขื ืžืกืคืจื™ื ืžืจื•ื›ื‘ื™ื ื”ื•ืขื‘ืจื• ืžืกืคืจื™ื™ืช Musl. ื”ืขื‘ื•ื“ื” ืฉืœ ืคื•ื ืงืฆื™ื•ืช ืžืชืžื˜ื™ื•ืช ืจื‘ื•ืช ื”ื•ืืฆื”.
  • ื”ืคื•ื ืงืฆื™ื” nointernet() ื”ื•ืฆืขื” ื›ื“ื™ ืœื”ืฉื‘ื™ืช ืืช ื™ื›ื•ืœื•ืช ื”ืจืฉืช.
  • ื ื•ืกืคื• ืคื•ื ืงืฆื™ื•ืช ื—ื“ืฉื•ืช ืœื”ื•ืกืคื” ื™ืขื™ืœื” ืฉืœ ืžื—ืจื•ื–ื•ืช: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf ื•-vappendf.
  • ื ื•ืกืคื” ื’ืจืกื” ืžื•ื’ื ืช ืฉืœ ืžืฉืคื—ืช ื”ืคื•ื ืงืฆื™ื•ืช kprintf() ืฉื ื•ืขื“ื” ืœืขื‘ื•ื“ ืขื ื”ืจืฉืื•ืช ื’ื‘ื•ื”ื•ืช.
  • ื‘ื™ืฆื•ืขื™ื ืžืฉื•ืคืจื™ื ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™ ืฉืœ ื™ื™ืฉื•ืžื™ SSL, SHA, curve25519 ื•-RSA.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”