Таҳиягарон аз 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

Илова Эзоҳ