Ăks Google'i arendajatest LLVM-i meililistis teema, mis puudutab mitme platvormi standardse C-raamatukogu (Libc) arendamist LLVM-i projekti raames. Mitmel pĂ”hjusel ei rahulda Google'i praegused libc (glibc, musl) ning ettevĂ”te on teel uue teostuse vĂ€ljatöötamise suunas, mida pakutakse arendada osana LLVM-ist.
Viimastel aegadel kasutatakse LLVM-i arengut Google'i koostamisriistade aluseks. Peamine idee on see, et kui Google on juba hakanud oma libc-d arendama, siis miks mitte kohe arendada oma sĂŒsteemi LLVM-is, mis pakub juba oma standardraamatukogu C++ jaoks (Libc++), kuid ei oma sarnast standardset raamatukogu C jaoks (Libc).
Arendust kavandatakse jĂ€rk-jĂ€rgult, funktsionaalsuse jĂ€rkjĂ€rgulise suurendamisega. Esimesed variandid soovitatakse vormistada vahekihtina rakenduse ja sĂŒsteemi Libc vahel, millest saab laenata veel rakendamata vĂ”imalusi. PĂ€rast teatud funktsionaalsuse taseme saavutamist saab uus Libc olla sĂŒsteemi Libc tĂ€ielik asendaja. Alustatakse x86-64, Linuxi ja staatilise linkimise toega (dĂŒnaamiline laadimine, kompositsioon ja tĂ€iendavad arhitektuurid viiakse ellu teises etapis).
Projekt on praegu algstaadiumis, kuid pÔhieesmÀrgid on juba mÀÀratletud:
- Modulaarsus ja areng vastavalt graanuliseeritud raamatukogu tarnimise filosoofiale, mitte monoliitsete komplektide kogumile;
- Toe pakkumine staatilisele linkimisele reĆŸiimides (Position-independent executables) ja ilma PIE-ta. CRT (C jooksutegur) ja PIE laadija pakkumine staatiliselt lingitud tĂ€idetavatele failidele;
- Enamiku standardse C-raamatukogu funktsioonide toetamine koos POSIX-i tĂ€iendustega ja mĂ”ningate sĂŒsteemispetsiifiliste laiendustega, mis on nĂ”udlikud olemasolevates rakendustes;
- Ettevaatlik lÀhenemine tootjate spetsiifilistele laiendustele ning nende lisamine ainult vajadusel. Kolmandate osapoolte laienduste toetamises soovitatakse rakendada Clangi ja libc+ lÀhenemist;
- Parimate praktikate kasutamine arenduses, kasutades LLVM-i tööriistu, nagu sanitiseerijate ja fuzzing-testimise rakendamine alates algusest.
Ăks LLVM aktiivsetest arendajatest , et libc pakkumine LLVM tööriistakogus ei ole mĂ”ttetu, kuid tavaliselt kasutatakse sellise vajaduse korral musl raamatukogu, mis on kvaliteetselt kirjutatud, toetab erinevaid arhitektuure ja pakub vajalikku funktsionaalsust, sealhulgas dĂŒnaamilist sidumist. Musli integreerimine LLVM-i ja selle arendamine kooskĂ”las peamise projektiga vĂ”ib olla pĂ”hjendatud.
Oma arvamuse Musl projekti autor, kes pĂŒĂŒdis pĂ”hjendada, miks Google'i ettepanek ja libc kaasamine LLVM-i on vĂ€ga halvad ideed:
- Ăige, ĂŒhilduva ja kvaliteetse Libc arendamine ja hooldamine on vĂ€ga keeruline ĂŒlesanne. Probleem ei ole koodimahtudes, vaid Ă”ige toimimise tagamises ning liidestega seotud raskustes, arvestades tohutut hulka kunagi kirjutatud rakendusi C/C++-s ja rakendusi teistes keeltes, mille runtime kasutab Libc-d. Ăksikud lĂ€henemised, ilma nĂŒansse arvesse vĂ”tmata, toovad kaasa selle, et paljud olemasolevad programmid ei suuda Libc-d kasutada, kuid siis ei oleks selline projekt tarbijatele huvitav.
- EttevĂ”tte arendus vĂ”ib Libc-d rikku, kuid sundida seda laialdasemaks kasutamiseks, mille tulemuseks on vajadus lisada hacke rakenduste ĂŒhilduvuse tagamiseks. EttevĂ”tte avatud projekti all arendamine tĂ”mbab tekkide tĂ”mbamise vajadusi ja lahendusi ettevĂ”tte poole, kahjustades kogukonna huve. NĂ€iteks, kui ilmneb probleem, mis on pĂ”hjustatud veast muus oma programmis, on kontrollitud arenduses lihtsam tagada Libc ĂŒhilduvust selle vea suhtes, kui vea ennast parandada. Apple kasutab selleks BSD libc forki, Google aga rakendab Fuchsia-s musl forki. Musli arendaja kogemus nĂ€itab, et temaga on peamiselt suhelnud juristid, et selgitada litsentsikĂŒsimusi, kuid tehniliste detailide tĂ€psustamiseks ei ole kunagi pöördutud enne, kui nad on oma harudesse teinud kasutuid ja töökorraldust rikkuvaid muudatusi.
- Monokultuuri puudumine libc arendamisel ja suunatus konsensusele pÔhinevatele standarditele, mitte ainuisikuliselt juhtimisele, motiveerib rakenduste arendajaid kasutama standardeid ega siduma end konkreetsete rakendustega. Just seetÔttu on autori musl vastu selle teegi lisamisele LLVM-i koosseisu ja libc arendamisele LLVM-i raames, kuna sellisel juhul kaob libc sÔltumatu iseloom ja konkreetne rakendus muutub LLVM-i jaoks esmaklassiliseks lahenduseks, samas kui kÔik teised jÀÀvad teise klassi.
Allikas: opennet.ru
