ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π° Π΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° 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 $(ΠΊΠΎΠΌΠ°Π½Π΄Π° -v $0) printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7 exec "$0" "$@" exec qemu-x86_64 "$0" "$ @" ΠΈΠ·Ρ ΠΎΠ΄ 1 Π ΠΠΠΠΠ Π ΠΠΠΠβ¦ ΠΠΠ€ Π‘ΠΠΠΠΠΠ’Πβ¦ OPENBSD ΠΠΠΠΠΠΠΠΠβ¦ MACHO ΠΠΠΠΠΠΠΠβ¦ ΠΠΠ Π ΠΠΠΠΠβ¦ ZIP ΠΠΠ ΠΠΠ’ΠΠ ΠΠ―β¦
Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠ°ΠΉΠ»Π° Π΅ ΠΏΠΎΡΠΎΡΠ΅Π½ Π΅ΡΠΈΠΊΠ΅ΡΡΡ βMZqFpDβ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π²ΡΠ·ΠΏΡΠΈΠ΅ΠΌΠ° ΠΊΠ°ΡΠΎ Π·Π°Π³Π»Π°Π²ΠΊΠ° Π½Π° Windows PE ΡΠΎΡΠΌΠ°Ρ. Π’Π°Π·ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ ΡΡΡΠΎ Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π° Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° βpop %r10; jno 0x4a; jo 0x4a", ΠΈ ΡΠ΅Π΄Π° "\177ELF" ΠΊΡΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° "jg 0x47", ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°Π½Π΅ ΠΊΡΠΌ Π²Ρ ΠΎΠ΄Π½Π°ΡΠ° ΡΠΎΡΠΊΠ°. Unix ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ shell ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° 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 Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΡΠ° βΠΏΡΠΎΠΏΡΡΠΊΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡβ, ΠΏΡΠΈ ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ°ΠΊΡΠΎ ΠΎΠ±Π²ΡΡΠ·Π²Π°Π½Π΅ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°, ΠΏΡΠΈ ΠΊΠΎΠ΅ΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ° Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°, Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° ΠΏΡΠΎΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠΏΠ΅ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ ΠΏΡΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° ΡΡΠ΅Π· Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈ.
Π‘ΡΠ΅Π΄ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ:
- Π‘Ρ Π΅ΠΌΠ°ΡΠ° Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²ΡΡΡΠ΅ΡΠ½ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π² zip ΡΠ°ΠΉΠ» Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½Π° (ΠΏΡΠΈ ΠΎΡΠ²Π°ΡΡΠ½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈΡΠ΅ ΠΏΡΡΠΈΡΠ° /zip/... Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° zip:..). ΠΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½, Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π΄ΠΈΡΠΊΠΎΠ²Π΅ Π² Windows Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΡΡΠΈΡΠ° ΠΊΠ°ΡΠΎ β/c/...β Π²ΠΌΠ΅ΡΡΠΎ βC:/...β.
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ Π΅ Π½ΠΎΠ² APE (Actually Portable Executable) ΡΠΎΠ²Π°ΡΠ°Ρ, ΠΊΠΎΠΉΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π½ΠΈΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΠΎΠ²ΠΈΡΡ ΡΠΎΠ²Π°ΡΠ°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° mmap, Π·Π° Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ Π²Π΅ΡΠ΅ Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅. ΠΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π½ΠΈΡΡ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ Π² ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ.
- ΠΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Linux Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠΎΠ΄ΡΠ»ΡΡ Π½Π° ΡΠ΄ΡΠΎΡΠΎ 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