ИзданиС Π½Π° стандардната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C Cosmopolitan 2.0, Ρ€Π°Π·Π²ΠΈΠ΅Π½Π° Π·Π° прСносливи ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ

ОбјавСно Π΅ ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ 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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€