ΠΠ±ΡΠ°Π²Π΅Π½ΠΎ Π΅ ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Cosmopolitan 2.0, ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΠΈ ΡΠ° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° C ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΠ·Π°Π»Π΅Π½ ΡΠΎΡΠΌΠ°Ρ Π½Π° ΠΈΠ·Π²ΡΡΠ½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π±Π΅Π· ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° ΡΠΎΠ»ΠΊΡΠ²Π°ΡΠΈ ΠΈ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ. Π Π΅Π·ΡΠ»ΡΠ°ΡΠΎΡ Π΄ΠΎΠ±ΠΈΠ΅Π½ ΡΠΎ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ΅ Π²ΠΎ GCC ΠΈ Clang ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ° Π²ΠΎ ΡΡΠ°ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ²ΡΠ·Π°Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΠ·Π°Π»Π½Π° ΠΈΠ·Π²ΡΡΠ½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ Π½Π° ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° Π½Π° Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, ΠΏΠ° Π΄ΡΡΠΈ ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ°Π½Π° ΠΎΠ΄ BIOS-ΠΎΡ. ΠΡΠΎΠ΅ΠΊΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄ ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° ISC (ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° MIT/BSD).
ΠΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΠ·Π°Π»Π½ΠΈ ΠΈΠ·Π²ΡΡΠ½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΠ΅ Π·Π°ΡΠ½ΠΎΠ²Π° Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈ ΠΈ Π·Π°Π³Π»Π°Π²ΠΈΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ (PE, ELF, MACHO, OPENBSD) Π²ΠΎ Π΅Π΄Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΡΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ Unix, Windows ΠΈ macOS. ΠΠ° Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠ° Π΄Π΅ΠΊΠ° Π΅Π΄Π½Π° ΠΈΠ·Π²ΡΡΠ½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Windows ΠΈ Unix, ΡΡΠΈΠΊ Π΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ°Π°Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π½Π° Windows PE ΠΊΠ°ΠΊΠΎ ΡΠΊΡΠΈΠΏΡΠΈ Π½Π° ΡΠΊΠΎΠ»ΠΊΠ°, ΠΈΡΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΡΠΈ Π³ΠΎ ΡΠ°ΠΊΡΠΎΡ ΡΡΠΎ Thompson 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 ΠΠΠ‘Π’ΠΠΠ‘ΠΠ Π ΠΠΠΠβ¦ ELF SEGMENTSβ¦ OPENBSD ΠΠΠΠΠΠΠ¨ΠΠβ¦ MACHO HEADERβ¦ ΠΠΠ Π ΠΠΠΠΠ’ΠΠ¦Πβ¦ ZIP ΠΠΠ ΠΠΠ’ΠΠ β¦
ΠΠ° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°, ΠΎΠ·Π½Π°ΡΠ΅Π½Π° Π΅ ΠΎΠ·Π½Π°ΠΊΠ°ΡΠ° βMZqFpDβ, ΠΊΠΎΡΠ° ΡΠ΅ ΠΏΠ΅ΡΡΠ΅ΠΏΠΈΡΠ° ΠΊΠ°ΠΊΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Π½Π° ΡΠΎΡΠΌΠ°ΡΠΎΡ Windows PE. ΠΠ²Π°Π° Π½ΠΈΠ·Π° Π΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π° Π²ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠ°ΡΠ° βpop %r10; jno 0x4a ; jo 0x4aβ, ΠΈ Π»ΠΈΠ½ΠΈΡΠ°ΡΠ° β\177ELFβ Π΄ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠ°ΡΠ° βjg 0x47β, ΠΊΠΎΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°ΡΠ΅ Π΄ΠΎ Π²Π»Π΅Π·Π½Π°ΡΠ° ΡΠΎΡΠΊΠ°. Π‘ΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Unix ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠΊΠΎΠ»ΠΊΠ° ΠΊΠΎΡΠ° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° exec, ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°ΡΡΠΈ Π³ΠΎ ΠΈΠ·Π²ΡΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄ Π½ΠΈΠ· Π½Π΅ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π° ΡΠ΅Π²ΠΊΠ°. ΠΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠ° Π΄Π° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΠ»ΠΈΡΠ½ΠΈ Π½Π° Unix ΡΠ°ΠΌΠΎ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΡΠΊΠΎΠ»ΠΊΠΈ ΠΊΠΎΠΈ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π°Π°Ρ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ Π½Π° Thompson Shell.
ΠΠΎΠ²ΠΈΠΊΠΎΡ qemu-x86_64 ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΏΡΠ΅Π½ΠΎΡΠ»ΠΈΠ²ΠΎΡΡ ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΊΠΎΠ΄ΠΎΡ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°Π½ Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° x86_64 Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ ΠΊΠΎΠΈ Π½Π΅ ΡΠ΅ x86, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΏΠ»ΠΎΡΠΊΠΈΡΠ΅ Raspberry Pi ΠΈ ΡΡΠ΅Π΄ΠΈΡΠ΅ Π½Π° Apple ΠΎΠΏΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΎ ARM ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ. ΠΡΠΎΠ΅ΠΊΡΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΈ Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΠ½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ Π±Π΅Π· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΡΠΈΡΡΠ΅ΠΌ (Π³ΠΎΠ» ΠΌΠ΅ΡΠ°Π»). ΠΠΎ ΡΠ°ΠΊΠ²ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ, ΠΏΠΎΠ΄ΠΈΠ³Π½ΡΠ²Π°ΡΠΎΡ Π΅ ΠΏΡΠΈΠΊΠ°ΡΠ΅Π½ Π½Π° ΠΈΠ·Π²ΡΡΠ½Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π΄Π΅Π»ΡΠ²Π° ΠΊΠ°ΠΊΠΎ Π±ΡΡΠ°Π±ΠΈΠ»Π΅Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΡΠΈΡΡΠ΅ΠΌ.
Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° C libc ΡΠ°Π·Π²ΠΈΠ΅Π½Π° ΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Π½ΡΠ΄ΠΈ 2024 ΡΡΠ½ΠΊΡΠΈΠΈ (Π²ΠΎ ΠΏΡΠ²ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΎΠΊΠΎΠ»Ρ 1400 ΡΡΠ½ΠΊΡΠΈΠΈ). ΠΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅, Cosmopolitan ΡΠ°Π±ΠΎΡΠΈ Π±ΡΠ·ΠΎ ΠΊΠ°ΠΊΠΎ glibc ΠΈ Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠ»ΠΈΠ²ΠΎ ΠΏΡΠ΅Π΄ Musl ΠΈ Newlib, ΠΈ ΠΏΠΎΠΊΡΠ°Ρ ΡΠ°ΠΊΡΠΎΡ ΡΡΠΎ Cosmopolitan Π΅ ΠΏΠΎΠΌΠ°Π» ΠΏΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° ΠΊΠΎΠ΄ ΠΎΠ΄ glibc ΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° Musl ΠΈ Newlib. ΠΠ° Π΄Π° ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π°Ρ ΡΠ΅ΡΡΠΎ ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊΠΎ memcpy ΠΈ strlen, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΡΠ° βtrickle-down performanceβ, Π²ΠΎ ΠΊΠΎΡΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΌΠ°ΠΊΡΠΎ Π²ΡΠ·ΡΠ²Π°ΡΠ΅ Π·Π° ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°ΡΠ΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ°, Π²ΠΎ ΠΊΠΎΡΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ Π΅ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ°Π½ Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΎΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π²ΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄ΠΎΡ. ΠΏΡΠΎΡΠ΅Ρ, ΠΊΠΎΡ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π·Π°ΡΡΠ΅Π΄Π° Π½Π° ΡΠ΅ΡΡΡΡΠΈ ΠΏΡΠΈ Π·Π°ΡΡΠ²ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΎΡ ΡΠΎ Π·Π°ΡΡΠ²ΡΠ²Π°ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈ.
ΠΠ΅ΡΡ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π²ΠΎ Π½ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅:
- Π¨Π΅ΠΌΠ°ΡΠ° Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π²ΠΎ zip-Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠ° (ΠΏΡΠΈ ΠΎΡΠ²ΠΎΡΠ°ΡΠ΅ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ, ΡΠ΅Π³Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ΅ΠΊΠΈ /zip/... Π½Π°ΠΌΠ΅ΡΡΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΡ zip:..). Π‘Π»ΠΈΡΠ½ΠΎ Π½Π° ΡΠΎΠ°, Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ Π΄ΠΈΡΠΊΠΎΠ²ΠΈΡΠ΅ Π²ΠΎ Windows, ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΏΠ°ΡΠ΅ΠΊΠΈ ΠΊΠ°ΠΊΠΎ β/c/...β Π½Π°ΠΌΠ΅ΡΡΠΎ βC:/...β.
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ Π΅ Π½ΠΎΠ² ΠΏΠΎΠ΄ΠΈΠ³Π½ΡΠ²Π°Ρ APE (Actually Portable Executable), ΠΊΠΎΡ Π³ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΡΠΎΡΠΌΠ°ΡΠΎΡ Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΠ·Π°Π»Π½ΠΈΡΠ΅ ΠΈΠ·Π²ΡΡΠ½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ. ΠΠΎΠ²ΠΈΠΎΡ Π½Π°ΡΠΎΠ²Π°ΡΡΠ²Π°Ρ ΠΊΠΎΡΠΈΡΡΠΈ mmap Π·Π° Π΄Π° ΡΠ° ΡΠΌΠ΅ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π΅ ΡΠ° ΠΌΠ΅Π½ΡΠ²Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°ΡΠ° Π²ΠΎ Π»Π΅Ρ. ΠΠΎΠΊΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ, ΡΠ½ΠΈΠ²Π΅ΡΠ·Π°Π»Π½Π°ΡΠ° ΠΈΠ·Π²ΡΡΠ½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ° Π²ΠΎ ΠΎΠ±ΠΈΡΠ½ΠΈ ΠΈΠ·Π²ΡΡΠ½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π²ΡΠ·Π°Π½ΠΈ Π·Π° ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ.
- ΠΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° ΠΠΈΠ½ΡΠΊΡ, ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΎΡ Π·Π° ΡΠ°Π΄ΡΠΎΡΠΎ binfmt_misc Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ APE. ΠΠ°Π±Π΅Π»Π΅ΠΆΠ°Π½ΠΎ Π΅ Π΄Π΅ΠΊΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ binfmt_misc Π΅ Π½Π°ΡΠ±ΡΠ·ΠΈΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° Π»Π°Π½ΡΠΈΡΠ°ΡΠ΅.
- ΠΠ° Linux, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΡΠ΅ ΠΏΠΎΠ²ΠΈΡΠΈ pledge() ΠΈ unveil() ΡΠ°Π·Π²ΠΈΠ΅Π½ΠΈ ΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ OpenBSD. ΠΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΎ Π΅ API Π·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ²ΠΈΡΠΈ Π²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π²ΠΎ C, C++, Python ΠΈ Redbean, ΠΊΠ°ΠΊΠΎ ΠΈ Π°Π»Π°ΡΠΊΠ° pledge.com Π·Π° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ.
- ΠΠ·Π³ΡΠ°Π΄Π±Π°ΡΠ° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ Π°Π»Π°ΡΠΊΠ°ΡΠ° 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.
- ΠΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Linux, ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ²ΠΈΡΠΈΡΠ΅ clock_gettime ΠΈ gettimeofday ΡΠ΅ Π·Π³ΠΎΠ»Π΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎ 10 ΠΏΠ°ΡΠΈ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΡ vDSO (Π²ΠΈΡΡΡΠ΅Π»Π΅Π½ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅Π½ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡ), ΡΡΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ Π²ΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π°Ρ ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°ΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΡ.
- ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠΊΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈ Π±ΡΠΎΠ΅Π²ΠΈ ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ΅Π½ΠΈ ΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Musl. Π Π°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π΅ Π·Π°Π±ΡΠ·Π°Π½Π°.
- Π€ΡΠ½ΠΊΡΠΈΡΠ°ΡΠ° nointernet() Π΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π·Π° ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ.
- ΠΠΎΠ΄Π°Π΄Π΅Π½ΠΈ ΡΠ΅ Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΎ Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π½ΠΈΠ·ΠΈ: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf ΠΈ vappendf.
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ Π·Π°ΡΡΠΈΡΠ΅Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΡΠ΅ΠΌΠ΅ΡΡΡΠ²ΠΎΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ kprintf(), Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ.
- ΠΠ½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ Π½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° SSL, SHA, curve25519 ΠΈ RSA.
ΠΠ·Π²ΠΎΡ: opennet.ru