ΠΠ·Π΄Π°Π΄Π΅Π½ Π΅ Π²ΡΠΏΡΡΠΊ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° 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 Π²ΡΠ² Π²ΠΈΠ΄ Π½Π° shell ΡΠΊΡΠΈΠΏΡ, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΊΡΡΡ, ΡΠ΅ 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Β» Β«$@Β» exit 1 REAL MODEβ¦ ELF SEGMENTSβ¦ OPENBSD NOTEβ¦ MACHO HEADERSβ¦ CODE AND DATAβ¦ ZIP DIRECTORYβ¦
Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠ°ΠΉΠ»Π° Π΅ ΠΏΠΎΡΠΎΡΠ΅Π½Π° Π΅ΡΠΈΠΊΠ΅ΡΠ° Β«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. ΠΡΠΎΠ΅ΠΊΡ ΡΠ°ΠΊΠΎΠΆ ΠΌΠΎΠΆΠ΅ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈΡΡ Π΄Π»Ρ ΡΡΠ²ΠΎΡΠ΅Π½Π½Ρ ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΠ½ΡΡ Π΄ΠΎΠ΄Π°ΡΠΊΡΠ², ΡΠΊΡ ΠΏΡΠ°ΡΡΡΡΡ Π±Π΅Π· ΠΎΠΏΠ΅ΡΠ°ΡΡΠΉΠ½ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠΈ (bare metal). Π£ ΡΠ°ΠΊΠΈΡ Π΄ΠΎΠ΄Π°ΡΠΊΠ°Ρ Π΄ΠΎ Π²ΠΈΠΊΠΎΠ½Π°Π²ΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΈΠΊΡΡΠΏΠ»ΡΡΡΡΡΡ Π·Π°Π²Π°Π½ΡΠ°ΠΆΡΠ²Π°Ρ, Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π²ΠΈΠΊΠΎΠ½ΡΡ ΡΠΎΠ»Ρ Π·Π°Π²Π°Π½ΡΠ°ΠΆΡΠ²Π°Π½ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΡΠΉΠ½ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠΈ.
Π£ ΡΠΎΠ·ΡΠΎΠ±Π»Π΅Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π‘Ρ-Π±ΡΠ±Π»ΡΠΎΡΠ΅ΡΡ libc Π·Π°ΠΏΡΠΎΠΏΠΎΠ½ΠΎΠ²Π°Π½ΠΎ 2024 ΡΡΠ½ΠΊΡΡΡ (Π² ΠΏΠ΅ΡΡΠΎΠΌΡ Π²ΠΈΠΏΡΡΠΊΡ Π±ΡΠ»ΠΎ Π±Π»ΠΈΠ·ΡΠΊΠΎ 1400 ΡΡΠ½ΠΊΡΡΠΉ). ΠΠ° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΡΡΡΡ Cosmopolitan ΠΏΡΠ°ΡΡΡ ΡΠ°ΠΊ ΡΠ°ΠΌΠΎ ΡΠ²ΠΈΠ΄ΠΊΠΎ, ΡΠΊ Ρ glibc, Ρ ΠΏΠΎΠΌΡΡΠ½ΠΎ ΠΎΠ±Π³Π°Π½ΡΡ Musl Ρ Newlib, ΠΏΡΠΈ ΡΡΠΎΠΌΡ Cosmopolitan Π·Π° ΡΠΎΠ·ΠΌΡΡΠΎΠΌ ΠΊΠΎΠ΄Ρ Π² Π΄Π΅ΡΡΡΡ ΡΠ°Π·ΡΠ² ΠΌΠ΅Π½ΡΠΈΠΉ Π·Π° glibc Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·Π½ΠΎ Π²ΡΠ΄ΠΏΠΎΠ²ΡΠ΄Π°Ρ Musl Ρ Newlib. ΠΠ»Ρ ΠΎΠΏΡΠΈΠΌΡΠ·Π°ΡΡΡ ΡΠ°ΡΡΠΎ Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Π½ΠΈΡ ΡΡΠ½ΠΊΡΡΠΉ, ΡΠ°ΠΊΠΈΡ ΡΠΊ memcpy Ρ strlen, Π΄ΠΎΠ΄Π°ΡΠΊΠΎΠ²ΠΎ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΡΡΡ ΡΠ΅Ρ Π½ΡΠΊΠ° Β«trickle-down performanceΒ», ΠΏΡΠΈ ΡΠΊΡΠΉ Π΄Π»Ρ Π²ΠΈΠΊΠ»ΠΈΠΊΡ ΡΡΠ½ΠΊΡΡΡ Π·Π°ΡΡΠΎΡΠΎΠ²ΡΡΡΡΡΡ ΠΌΠ°ΠΊΡΠΎΡ-ΠΎΠ±Π²'ΡΠ·ΠΊΠ°, Ρ ΡΠΊΡΠΉ ΠΊΠΎΠΌΠΏΡΠ»ΡΡΠΎΡ ΡΠ½ΡΠΎΡΠΌΡΡΡΡΡΡ ΠΏΡΠΎ Π·Π°ΡΠ΅ΡΡΡΡΠΎΠ²Π°Π½Ρ Ρ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΠΈΠΊΠΎΠ½Π°Π½Π½Ρ ΠΊΠΎΠ΄Ρ ΡΠ΅Π³ΡΡΡΡΠΈ CPU, ΡΠΎ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡ Π΅ΠΊΠΎΠ½ΠΎΠΌΠΈΡΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΏΡΠΈ Π·Π±Π΅ΡΠ΅ΠΆΠ΅Π½Π½Ρ ΡΡΠ°Π½Ρ CPU Π·Π° ΡΠ°Ρ ΡΠ½ΠΎΠΊ Π·Π±Π΅ΡΠ΅ΠΆΠ΅Π½Π½Ρ Π»ΠΈΡΠ΅ Π·ΠΌΡΠ½Π½ΠΈΡ ΡΠ΅Π³ΡΡΡΡΡΠ².
Π‘ΡΠ΅Π΄ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² Π½ΠΎΠ²ΠΈΡ ΡΠ΅Π»ΠΈΠΉΠ·:
- ΠΠΌΡΠ½Π΅Π½ΠΎ ΡΡ Π΅ΠΌΡ Π·Π²Π΅ΡΠ½Π΅Π½Π½Ρ Π΄ΠΎ Π²Π½ΡΡΡΡΡΠ½ΡΡ ΡΠ΅ΡΡΡΡΡΠ² Π²ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ 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 runtime ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ° TLS Π·Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΠ΅ΡΠΎ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈΡ ΡΠ°ΠΉΠ» ΠΎΡ 12 Π΄ΠΎ 16 ΠΠ.
- Π ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ ββftraceβ ΠΈ ββstraceβ Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π² stderr ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ ΠΏΠΎΠ²ΠΈΠΊ closefrom(), ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ Π² Linux 5.9+, FreeBSD 8+ ΠΈ OpenBSD.
- ΠΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Linux ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΠΎΠ²ΠΈΡΠΈΡΠ΅ 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
