Wasanidi programu kutoka Google walipendekeza kuunda libc zao za LLVM

Mmoja wa wasanidi programu kutoka Google iliyoinuliwa kwenye orodha ya utumaji barua ya LLVM kuhusu uundaji wa maktaba ya kiwango cha majukwaa mengi (Libc) kama sehemu ya mradi wa LLVM. Kwa sababu kadhaa, Google haijaridhishwa na libc ya sasa (glibc, musl) na kampuni iko njiani kutengeneza utekelezaji mpya, ambao unapendekezwa kuendelezwa kama sehemu ya LLVM.

Maendeleo ya LLVM yametumika hivi majuzi kama msingi wa kuunda zana za kusanyiko za Google. Wazo kuu ni kwamba ikiwa Google tayari imeanza kuunda libc yake, basi kwa nini isitengeneze mara moja mfumo wake kama sehemu ya LLVM, ambayo tayari inatoa maktaba yake ya kawaida ya C++ (Libc++), lakini haina maktaba ya kawaida ya C. (libc).

Maendeleo yamepangwa kufanywa kwa hatua, hatua kwa hatua kuongeza utendaji. Chaguzi za kwanza zinapendekezwa kutengenezwa kama safu kati ya programu na mfumo wa Libc, ambapo vipengele ambavyo bado havijatekelezwa vitakopwa. Baada ya kufikia kiwango fulani cha utendakazi, Libc mpya inaweza kutumika kama mbadala kamili wa mfumo wa Libc. Tunapanga kuanza na usaidizi wa usanifu wa x86-64, Linux na kuunganisha tuli (upakiaji wa nguvu, kuunganisha na usanifu wa ziada utatekelezwa pili).

Mradi bado uko katika hatua ya awali ya maendeleo, lakini malengo ya msingi tayari yamefafanuliwa:

  • Modularity na maendeleo kwa mujibu wa falsafa ya kutoa maktaba ya punjepunje badala ya seti ya monolithic;
  • Usaidizi wa kuunganisha tuli katika hali na MIGUU (Vitekelezo visivyo na nafasi) na bila PIE. Kutoa CRT (C wakati wa kutekeleza) na kipakiaji cha PIE kwa utekelezo uliounganishwa kwa takwimu;
  • Usaidizi kwa vipengele vingi vya kawaida vya maktaba ya C, pamoja na nyongeza za POSIX na viendelezi vingine vya mfumo mahususi vinavyohitajika na programu zilizopo;
  • Kuwa mwangalifu na viendelezi maalum vya muuzaji na uwaongeze tu inapohitajika. Kuhusu usaidizi wa upanuzi wa wahusika wengine, inapendekezwa kutumia mbinu ya miradi ya Clang na libc++;
  • Kutumia mbinu bora katika uundaji kwa kutumia zana ya zana ya LLVM, kama vile kutumia sanitizer na majaribio ya fuzz tangu mwanzo.

Mmoja wa wasanidi wa LLVM wanaofanya kazi alisemaNi wazi kuwa inaeleweka kusafirisha libc kama sehemu ya zana ya zana ya LLVM, lakini kwa kawaida, hitaji kama hilo linapotokea, hutumia maktaba ya musl, ambayo imeandikwa vizuri, inasaidia usanifu anuwai, na hutoa utendakazi unaohitajika, pamoja na usaidizi wa nguvu. kuunganisha. Inaweza kuhesabiwa haki kupachika musl kwenye LLVM na kuitengeneza kama uma iliyosawazishwa na mradi mkuu.

Maoni yako pia iliyoonyeshwa Mwandishi wa mradi wa Musl, ambaye alijaribu kubishana kwa nini pendekezo la Google na kujumuishwa kwa Libc katika usambazaji wa LLVM ni mawazo mabaya sana:

  • Kutengeneza na kudumisha Libc sahihi, inayooana, na yenye ubora wa juu ni kazi ngumu sana. Shida sio kwa idadi ya nambari, lakini katika kuhakikisha tabia sahihi na ugumu katika kutekeleza miingiliano, kwa kuzingatia safu kubwa ya programu iliyowahi kuandikwa katika C/C++, na vile vile programu katika lugha zingine, wakati wa kutumika. na Libc. Njia ya kichwa bila kuzingatia nuances itasababisha tu ukweli kwamba programu nyingi zilizopo hazitaweza kufanya kazi na Libc, lakini basi mradi huo hautakuwa na riba kwa watumiaji.
  • Maendeleo ya shirika yanaweza kuharibu Libc, lakini isukume kwa matumizi mengi, na kusababisha hitaji la kuongeza udukuzi ili kuhakikisha upatanifu katika programu. Maendeleo chini ya ufadhili wa mradi wa chanzo huria wa shirika yatavuta blanketi kuelekea mahitaji na suluhisho la kampuni, kwa madhara ya masilahi ya jamii. Kwa mfano, ukitambua tatizo ambalo linasababishwa na hitilafu katika programu nyingine, katika usanidi unaodhibitiwa ni rahisi kuhakikisha kuwa Libc inaendana na hitilafu hii kuliko kurekebisha hitilafu yenyewe. Apple hutumia uma wa libc wa BSD kwa madhumuni haya, na Google hutumia uma wa musl huko Fuchsia. Uzoefu wa msanidi programu wa musl ni kwamba aliwasiliana hasa na wanasheria ili kufafanua masuala ya leseni, lakini hakuwahi kuwasiliana naye ili kufafanua maelezo ya kiufundi kabla ya kufanya mabadiliko yasiyofaa na ya kutatiza kwa matawi yake.
  • Kutokuwepo kwa kilimo kimoja katika ukuzaji wa libc na kuangazia viwango vinavyoendeshwa na makubaliano badala ya udhibiti pekee, jambo ambalo huhamasisha wasanidi programu kutumia viwango badala ya kuhusishwa na utekelezaji mahususi. Ndio maana mwandishi wa musl anapinga kuingizwa kwa maktaba yake katika LLVM, na vile vile dhidi ya ukuzaji wa libc ndani ya LLVM, kwani katika kesi hii asili huru ya libc inapotea na utekelezaji fulani unakuwa suluhisho la daraja la kwanza kwa. LLVM, na wengine wote huwa suluhisho la daraja la pili.

Chanzo: opennet.ru

Kuongeza maoni