Выпуск стандартной Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Cosmopolitan 2.0, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ для пСрСносимых исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ выпуск ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Cosmopolitan 2.0, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для распространСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Π±Π΅Π· использования ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ компиляции Π² 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 Π΄ΠΎ 10 Ρ€Π°Π· ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² clock_gettime ΠΈ gettimeofday Π·Π° счёт использования ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° vDSO (virtual dynamic shared object), Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пСрСнСсти ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ систСмного Π²Ρ‹Π·ΠΎΠ²Π° Π² пространство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ контСкста.
  • Из Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Musl пСрСнСсСны матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с комплСксными числами. УскорСна Ρ€Π°Π±ΠΎΡ‚Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… матСматичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° функция nointernet(), ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ сСтСвыС возмоТности.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для эффСктивного прикрСплСния строк: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf ΠΈ vappendf.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ сСмСйства Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ kprintf(), ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹Ρ… привилСгиях.
  • Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ SSL, SHA, curve25519 ΠΈ RSA.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ