ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΎΠ΄ Google ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ˜Π° Π΄Π° Ρ€Π°Π·Π²ΠΈΡ˜Π°Ρ‚ сопствСн libc Π·Π° LLVM

Π•Π΄Π΅Π½ ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΎΠ΄ Google ΠΏΠΎΠ΄ΠΈΠ³Π½Π°Ρ‚ Π½Π° LLVM мСјлинг листата Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° мултиплатформска стандардна C Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (Libc) ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ LLVM. Од повСќС ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ, Google Π½Π΅ Π΅ Π·Π°Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ ΠΎΠ΄ Π°ΠΊΡ‚ΡƒΠ΅Π»Π½ΠΈΠΎΡ‚ libc (glibc, musl) ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ˜Π°Ρ‚Π° Π΅ Π½Π° ΠΏΠ°Ρ‚ Π΄Π° Ρ€Π°Π·Π²ΠΈΠ΅ Π½ΠΎΠ²Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°, која сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΄Π° сС Ρ€Π°Π·Π²ΠΈΠ²Π° ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ LLVM.

Π Π°Π·Π²ΠΎΡ˜ΠΎΡ‚ Π½Π° LLVM Π½Π΅ΠΎΠ΄Π°ΠΌΠ½Π° сС користи ΠΊΠ°ΠΊΠΎ основа Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅ Π½Π° Google. Π“Π»Π°Π²Π½Π°Ρ‚Π° идСја Π΅ Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ Google вСќС ΠΏΠΎΡ‡Π½Π° Π΄Π° Π³ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π° ΡΠ²ΠΎΡ˜ΠΎΡ‚ libc, Ρ‚ΠΎΠ³Π°Ρˆ Π·ΠΎΡˆΡ‚ΠΎ вСднаш Π΄Π° Π½Π΅ Π³ΠΎ Ρ€Π°Π·Π²ΠΈΠ΅ ΡΠ²ΠΎΡ˜ΠΎΡ‚ систСм ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ LLVM, кој вСќС Π½ΡƒΠ΄ΠΈ своја стандардна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° C++ (Libc++), Π½ΠΎ Π½Π΅ΠΌΠ° слична стандардна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° C (libc).

Π Π°Π·Π²ΠΎΡ˜ΠΎΡ‚ сС ΠΏΠ»Π°Π½ΠΈΡ€Π° Π΄Π° сС Π²Ρ€ΡˆΠΈ Π²ΠΎ Ρ„Π°Π·ΠΈ, постСпСно Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°Ρ˜ΡœΠΈ ја функционалноста. ΠŸΡ€Π²ΠΈΡ‚Π΅ ΠΎΠΏΡ†ΠΈΠΈ сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π°Ρ‚ Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Π½ΠΈ ΠΊΠ°ΠΊΠΎ слој ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ систСмот Libc, ΠΎΠ΄ кој ќС Π±ΠΈΠ΄Π°Ρ‚ позајмСни карактСристики ΠΊΠΎΠΈ сè ΡƒΡˆΡ‚Π΅ Π½Π΅ сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈ. По ΠΏΠΎΡΡ‚ΠΈΠ³Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° функционалност, Π½ΠΎΠ²ΠΈΠΎΡ‚ Libc ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи ΠΊΠ°ΠΊΠΎ цСлосна Π·Π°ΠΌΠ΅Π½Π° Π·Π° систСмот Libc. ΠŸΠ»Π°Π½ΠΈΡ€Π°ΠΌΠ΅ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌΠ΅ со ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° x86-64 Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, Linux ΠΈ статичко ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ (Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅, ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ ќС сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π°Ρ‚ сСкундарно).

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ сС ΡƒΡˆΡ‚Π΅ Π΅ Π²ΠΎ ΠΏΠΎΡ‡Π΅Ρ‚Π½Π° Ρ„Π°Π·Π° Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜, Π½ΠΎ вСќС сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ основнитС Ρ†Π΅Π»ΠΈ:

  • ΠœΠΎΠ΄ΡƒΠ»Π°Ρ€Π½ΠΎΡΡ‚ ΠΈ Ρ€Π°Π·Π²ΠΎΡ˜ Π²ΠΎ согласност со Ρ„ΠΈΠ»ΠΎΠ·ΠΎΡ„ΠΈΡ˜Π°Ρ‚Π° Π½Π° испорака Π½Π° зрнСсти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° намСсто ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π΅Π½ сСт;
  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° статичко ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠΈ со ΠŸΠΈΡ‚Π° (ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΎ-нСзависни ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ) ΠΈ Π±Π΅Π· PIE. ΠžΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ CRT (C runtime) ΠΈ PIE ΠΏΠΎΠ΄ΠΈΠ³Π½ΡƒΠ²Π°Ρ‡ Π·Π° статички ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ;
  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ ΠΎΠ΄ стандарднитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° C, со Π΄ΠΎΠΏΠΎΠ»Π½ΡƒΠ²Π°ΡšΠ° Π½Π° POSIX ΠΈ Π½Π΅ΠΊΠΎΠΈ ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΠ²Π°ΡšΠ° спСцифични Π·Π° систСмот ΡˆΡ‚ΠΎ Π³ΠΈ Π±Π°Ρ€Π°Π°Ρ‚ постоСчкитС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ;
  • Π‘ΠΈΠ΄Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΈ со СкстСнзии спСцифични Π·Π° ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‡ΠΎΡ‚ ΠΈ Π΄ΠΎΠ΄Π°Π²Π°Ρ˜Ρ‚Π΅ Π³ΠΈ само ΠΊΠΎΠ³Π° Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ. Π’ΠΎ однос Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ°Ρ‚Π° Π·Π° СкстСнзии ΠΎΠ΄ Ρ‚Ρ€Π΅Ρ‚ΠΈ страни, сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΄Π° сС користи пристапот Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ Clang ΠΈ libc++;
  • ΠšΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Π½Π°Ρ˜Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π²ΠΎ Ρ€Π°Π·Π²ΠΎΡ˜ΠΎΡ‚ со помош Π½Π° ΠΏΡ€ΠΈΡ€Π°Ρ‡Π½ΠΈΠΊΠΎΡ‚ Π·Π° Π°Π»Π°Ρ‚ΠΊΠΈ LLVM, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° срСдства Π·Π° Π΄Π΅Π·ΠΈΠ½Ρ„Π΅ΠΊΡ†ΠΈΡ˜Π° ΠΈ fuzz Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ ΠΎΠ΄ самиот ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊ.

Π•Π΄Π΅Π½ ΠΎΠ΄ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ΠΈ Π½Π° LLVM ΠΈΡΡ‚Π°ΠΊΠ½Π°ΠˆΠ°ΡΠ½ΠΎ Π΅ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ° смисла Π΄Π° сС испорача libc ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ Π°Π»Π°Ρ‚ΠΊΠΈ LLVM, Π½ΠΎ ΠΎΠ±ΠΈΡ‡Π½ΠΎ, ΠΊΠΎΠ³Π° ќС сС појави Ρ‚Π°ΠΊΠ²Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π°, Ρ‚ΠΈΠ΅ ја користат Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° musl, која Π΅ Π΄ΠΎΠ±Ρ€ΠΎ напишана, ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ ΠΈ ја ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π°Ρ‚Π° функционалност, Π²ΠΊΠ»ΡƒΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΠΈ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅. МоТСби Π΅ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ Π΄Π° сС Π²Π³Ρ€Π°Π΄ΠΈ musl Π²ΠΎ LLVM ΠΈ Π΄Π° сС Ρ€Π°Π·Π²ΠΈΠ΅ ΠΊΠ°ΠΊΠΎ Π²ΠΈΠ»ΡƒΡˆΠΊΠ° синхронизирана со Π³Π»Π°Π²Π½ΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Π’Π°ΡˆΠ΅ мислСњС исто Ρ‚Π°ΠΊΠ° ΠΈΠ·Ρ€Π°Π·Π΅Π½ΠΈ Авторот Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ Musl, кој сС ΠΎΠ±ΠΈΠ΄Π΅ Π΄Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° Π·ΠΎΡˆΡ‚ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠ³ΠΎΡ‚ Π½Π° Google ΠΈ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Libc Π²ΠΎ Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π°Ρ‚Π° LLVM сС ΠΌΠ½ΠΎΠ³Ρƒ лоши ΠΈΠ΄Π΅ΠΈ:

  • Π Π°Π·Π²ΠΈΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΈ ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½, ΠΊΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π΅Π½ ΠΈ висококвалитСтСн Libc Π΅ ΠΌΠ½ΠΎΠ³Ρƒ Ρ‚Π΅ΡˆΠΊΠ° Π·Π°Π΄Π°Ρ‡Π°. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ Π½Π΅ Π΅ Π²ΠΎ ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚, Ρ‚ΡƒΠΊΡƒ Π²ΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΎΠ΄Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ ΠΈ Ρ‚Π΅ΡˆΠΊΠΎΡ‚ΠΈΠΈ Π²ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΈ, зСмајќи Π³ΠΎ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΈΠΎΡ‚ слој Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ напишани Π²ΠΎ C/C++, ΠΊΠ°ΠΊΠΎ ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ Ρ˜Π°Π·ΠΈΡ†ΠΈ, Ρ‡ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° сС користи ΠΎΠ΄ Libc. Π”ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ пристап Π±Π΅Π· Π΄Π° сС Π·Π΅ΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π½ΠΈΡ˜Π°Π½ΡΠΈΡ‚Π΅ само ќС Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Ρ„Π°ΠΊΡ‚ΠΎΡ‚ Π΄Π΅ΠΊΠ° ΠΌΠ½ΠΎΠ³Ρƒ постоСчки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π½Π΅ΠΌΠ° Π΄Π° ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ со Libc, Π½ΠΎ Ρ‚ΠΎΠ³Π°Ρˆ Ρ‚Π°ΠΊΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ΠΌΠ° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΎΠ΄ интСрСс Π·Π° ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΈΡ‚Π΅.
  • ΠšΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ Ρ€Π°Π·Π²ΠΎΡ˜ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΡƒΠ½ΠΈΡˆΡ‚ΠΈ Libc, Π½ΠΎ Π³ΠΎ Ρ‚ΡƒΡ€ΠΊΠ° Π²ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠ° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°, ΡˆΡ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚ΠΈΡ€Π° со ΠΏΠΎΡ‚Ρ€Π΅Π±Π° ΠΎΠ΄ додавањС Ρ…Π°ΠΊΠΎΠ²ΠΈ Π·Π° Π΄Π° сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ компатибилност Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅. Π Π°Π·Π²ΠΎΡ˜ΠΎΡ‚ ΠΏΠΎΠ΄ покровитСлство Π½Π° ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ ќС Π³ΠΎ ΠΏΠΎΠ²Π»Π΅Ρ‡Π΅ ΡœΠ΅Π±Π΅Ρ‚ΠΎ ΠΊΠΎΠ½ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ˜Π°Ρ‚Π°, Π½Π° ΡˆΡ‚Π΅Ρ‚Π° Π½Π° интСрСситС Π½Π° Π·Π°Π΅Π΄Π½ΠΈΡ†Π°Ρ‚Π°. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΡˆΡ‚ΠΎ Π΅ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π½ ΠΎΠ΄ Π³Ρ€Π΅ΡˆΠΊΠ° Π²ΠΎ Π΄Ρ€ΡƒΠ³Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, Π²ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½ΠΈΠΎΡ‚ Ρ€Π°Π·Π²ΠΎΡ˜ полСсно Π΅ Π΄Π° сС осигуратС Π΄Π΅ΠΊΠ° Libc Π΅ ΠΊΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π΅Π½ со ΠΎΠ²Π°Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΎΡ‚ΠΊΠΎΠ»ΠΊΡƒ Π΄Π° сС ΠΏΠΎΠΏΡ€Π°Π²ΠΈ самата Π³Ρ€Π΅ΡˆΠΊΠ°. Apple ја користи Π²ΠΈΠ»ΡƒΡˆΠΊΠ°Ρ‚Π° BSD libc Π·Π° ΠΎΠ²ΠΈΠ΅ Ρ†Π΅Π»ΠΈ, Π° Google ја користи Π²ΠΈΠ»ΡƒΡˆΠΊΠ°Ρ‚Π° musl Π²ΠΎ ΠΎΠ±ΠΈΡ‡ΠΊΠ°. Π˜ΡΠΊΡƒΡΡ‚Π²ΠΎΡ‚ΠΎ Π½Π° Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ΠΎΡ‚ Π½Π° musl Π΅ Π΄Π΅ΠΊΠ° Ρ‚ΠΎΡ˜ Π±ΠΈΠ» ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π°Π½ Π³Π»Π°Π²Π½ΠΎ ΠΎΠ΄ Π°Π΄Π²ΠΎΠΊΠ°Ρ‚ΠΈ Π·Π° Π΄Π° сС Ρ€Π°Π·Ρ˜Π°ΡΠ½Π°Ρ‚ ΠΏΡ€Π°ΡˆΠ°ΡšΠ°Ρ‚Π° Π·Π° Π»ΠΈΡ†Π΅Π½Ρ†ΠΈΡ€Π°ΡšΠ΅, Π½ΠΎ никогаш Π½Π΅ Π±ΠΈΠ» ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π°Π½ Π·Π° Π΄Π° сС Ρ€Π°Π·Ρ˜Π°ΡΠ½Π°Ρ‚ Ρ‚Π΅Ρ…Π½ΠΈΡ‡ΠΊΠΈΡ‚Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΏΡ€Π΅Π΄ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²Π°Ρ‚ бСскорисни ΠΈ Π²ΠΎΠ·Π½Π΅ΠΌΠΈΡ€ΡƒΠ²Π°Ρ‡ΠΊΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΠΈΠ»ΠΈΡ˜Π°Π»ΠΈ.
  • ΠžΡ‚ΡΡƒΡΡ‚Π²ΠΎΡ‚ΠΎ Π½Π° ΠΌΠΎΠ½ΠΎΠΊΡƒΠ»Ρ‚ΡƒΡ€Π° Π²ΠΎ Ρ€Π°Π·Π²ΠΎΡ˜ΠΎΡ‚ Π½Π° libc ΠΈ Ρ„ΠΎΠΊΡƒΡΠΈΡ€Π°ΡšΠ΅ Π½Π° стандарди Π²ΠΎΠ΄Π΅Π½ΠΈ ΠΎΠ΄ консСнзус намСсто ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π°, ΡˆΡ‚ΠΎ Π³ΠΈ ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€Π° Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ΠΈΡ‚Π΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π° користат стандарди намСсто Π΄Π° сС Π²Ρ€Π·ΡƒΠ²Π°Π°Ρ‚ Π·Π° спСцифични ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π—Π°Ρ‚ΠΎΠ° Π°Π²Ρ‚ΠΎΡ€ΠΎΡ‚ Π½Π° musl Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²ΠΎ LLVM, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Ρ€Π°Π·Π²ΠΎΡ˜ΠΎΡ‚ Π½Π° libc Π²ΠΎ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° LLVM, бидСјќи Π²ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜ сС Π³ΡƒΠ±ΠΈ нСзависната ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π° Π½Π° libc ΠΈ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° станува првокласно Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° LLVM, ΠΈ ситС Π΄Ρ€ΡƒΠ³ΠΈ стануваат Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ΄ Π²Ρ‚ΠΎΡ€Π° класа.

Π˜Π·Π²ΠΎΡ€: opennet.ru

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