Google ishlab chiquvchilari LLVM uchun o'zlarining libclarini ishlab chiqishni taklif qilishdi

Google ishlab chiqaruvchilardan biri ko'tarildi LLVM loyihasining bir qismi sifatida ko'p platformali standart C kutubxonasini (Libc) ishlab chiqish haqida LLVM pochta ro'yxatida. Bir qator sabablarga ko'ra, Google hozirgi libc (glibc, musl) dan qoniqmayapti va kompaniya LLVMning bir qismi sifatida ishlab chiqilishi taklif qilingan yangi dasturni ishlab chiqish yo'lida.

LLVM ishlanmalari yaqinda Google yig'ish vositalarini yaratish uchun asos sifatida ishlatilgan. Asosiy g'oya shundan iboratki, agar Google allaqachon o'z libc-ni ishlab chiqishni boshlagan bo'lsa, nega darhol o'z tizimini C++ (Libc++) uchun o'zining standart kutubxonasini taklif qiladigan LLVMning bir qismi sifatida ishlab chiqmaslik kerak, lekin C uchun shunga o'xshash standart kutubxonaga ega emas. (libc).

Rivojlanish funksionallikni bosqichma-bosqich oshirib, bosqichma-bosqich amalga oshirilishi rejalashtirilgan. Birinchi variantlar dastur va Libc tizimi o'rtasidagi qatlam sifatida ishlab chiqilgan bo'lib, undan hali amalga oshirilmagan xususiyatlar qarzga olinadi. Muayyan funksionallik darajasiga erishgandan so'ng, yangi Libc Libc tizimini to'liq almashtirish sifatida ishlatilishi mumkin. Biz x86-64 arxitekturasini, Linuxni va statik ulanishni qo'llab-quvvatlashdan boshlashni rejalashtirmoqdamiz (dinamik yuklash, ulanish va qo'shimcha arxitekturalar ikkinchidan amalga oshiriladi).

Loyiha hali rivojlanishning dastlabki bosqichida, ammo asosiy maqsadlar allaqachon aniqlangan:

  • Monolit to'plamdan ko'ra donador kutubxonani taqdim etish falsafasiga muvofiq modullik va rivojlanish;
  • Rejimlarda statik ulanishni qo'llab-quvvatlash Oyoq (Pozitsiyadan mustaqil bajariladigan fayllar) va PIEsiz. Statik bog'langan bajariladigan fayllar uchun CRT (C ish vaqti) va PIE yuklagichini ta'minlash;
  • POSIX qo'shimchalari va mavjud ilovalar tomonidan talab qilinadigan ba'zi tizimga xos kengaytmalar bilan standart C kutubxonasi funktsiyalarining ko'pchiligini qo'llab-quvvatlash;
  • Sotuvchiga xos kengaytmalar bilan ehtiyot bo'ling va ularni faqat kerak bo'lganda qo'shing. Uchinchi tomon kengaytmalarini qo'llab-quvvatlashga kelsak, Clang va libc++ loyihalari yondashuvidan foydalanish taklif etiladi;
  • LLVM asboblar to'plamidan foydalangan holda ishlab chiqishda eng yaxshi amaliyotlardan foydalanish, masalan, boshidanoq dezinfektsiyalash va fuzz testidan foydalanish.

Faol LLVM ishlab chiquvchilardan biri ishora qildiLibc-ni LLVM asboblar to'plamining bir qismi sifatida jo'natish mantiqiy ekanligi aniq, lekin odatda, bunday ehtiyoj paydo bo'lganda, ular yaxshi yozilgan, turli arxitekturalarni qo'llab-quvvatlaydigan va kerakli funksionallikni ta'minlaydigan musl kutubxonasidan foydalanadilar, shu jumladan dinamikni qo'llab-quvvatlash. bog'lash. Musulni LLVM-ga joylashtirish va uni asosiy loyiha bilan sinxronlashtirilgan vilka sifatida ishlab chiqish oqlanishi mumkin.

Sizning fikringiz ham ifoda etdi Google taklifi va Libc-ning LLVM tarqatilishiga kiritilishi nima uchun juda yomon g'oyalar ekanligi haqida bahslashmoqchi bo'lgan Musl loyihasi muallifi:

  • To'g'ri, mos va yuqori sifatli Libc-ni ishlab chiqish va saqlash juda qiyin vazifadir. Muammo kod miqdorida emas, balki C/C++-da yozilgan dasturlarning ulkan qatlamini, shuningdek, ish vaqti ishlatiladigan boshqa tillardagi ilovalarni hisobga olgan holda, to‘g‘ri xatti-harakatlar va interfeyslarni amalga oshirishdagi qiyinchiliklarni ta’minlashda. Libc tomonidan. Nuanslarni hisobga olmagan holda yondashish faqat ko'plab mavjud dasturlarning Libc bilan ishlay olmasligiga olib keladi, ammo keyin bunday loyiha iste'molchilarni qiziqtirmaydi.
  • Korporativ rivojlanish Libc-ni buzishi mumkin, lekin uni keng qo'llashga undaydi, natijada ilovalarda muvofiqlikni ta'minlash uchun xakerlarni qo'shish zarurati tug'iladi. Korporativ ochiq manba loyihasi homiyligida ishlab chiqish jamiyat manfaatlariga zarar etkazadigan kompaniya ehtiyojlari va yechimlari tomon yo'naltiriladi. Misol uchun, agar siz boshqa dasturdagi xatolik tufayli yuzaga kelgan muammoni aniqlasangiz, boshqariladigan ishlab chiqishda xatoning o'zini tuzatishdan ko'ra Libc ushbu xato bilan mos kelishiga ishonch hosil qilish osonroq bo'ladi. Apple bu maqsadlar uchun BSD libc vilkasidan foydalanadi va Google Fuchsiadagi musl vilkasidan foydalanadi. Musul ishlab chiqaruvchisining tajribasi shundan iboratki, u litsenziyalash masalalariga oydinlik kiritish uchun asosan advokatlar bilan bog'langan, lekin uning filiallarida foydasiz va buzuvchi o'zgarishlar qilishdan oldin texnik tafsilotlarni aniqlashtirish uchun hech qachon bog'lanmagan.
  • libcni ishlab chiqishda monokulturaning yo'qligi va individual nazoratdan ko'ra konsensusga asoslangan standartlarga e'tibor qaratish, bu dastur ishlab chiquvchilarni muayyan ilovalar bilan bog'lanish o'rniga standartlardan foydalanishga undaydi. Shuning uchun musl muallifi o'z kutubxonasining LLVM tarkibiga kiritilishiga qarshi, shuningdek, LLVM ichida libc rivojlanishiga qarshi, chunki bu holda libc ning mustaqil tabiati yo'qoladi va ma'lum bir amalga oshirish birinchi darajali yechimga aylanadi. LLVM va boshqalar ikkinchi darajali yechimga aylanadi.

Manba: opennet.ru

a Izoh qo'shish