ИзданиС Π½Π° стандартната 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 Π² Π²ΠΈΠ΄Π΅ 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 (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π΅Π½ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ сподСлСн ΠΎΠ±Π΅ΠΊΡ‚), ΠΊΠΎΠΉΡ‚ΠΎ позволява Π΄Π° сС прСнСсС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ Π½Π° систСмно ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ Π² пространството Π½Π° потрСбитСля ΠΈ Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π°Ρ‚ контСкстни ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ.
  • ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с комплСксни числа са прСнСсСни ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Musl. УскорСна Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ матСматичСски Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π΅ функция nointernet(), която ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf ΠΈ vappendf.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° сСмСйството ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ kprintf(), ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΈ повишСни ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ.
  • Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΅ повишСна производитСлността Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΡ‚Π΅ SSL, SHA, curve25519 ΠΈ RSA.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster