După șase luni de dezvoltare, a fost lansată versiunea bibliotecii de sistem GNU C Library (glibc) 2.36, care respectă pe deplin cerințele standardelor ISO C11 și POSIX.1-2017. Noua versiune include corecții de la 59 de dezvoltatori.
Îmbunătățirile realizate în Glibc 2.36 includ:
- A fost adăugată suportul pentru noul format de relocare relativă DT_RELR, care permite reducerea dimensiunii relocărilor relative în obiectele partajate și fișierele executabile compilate în mod PIE (executabile independente de poziție). Pentru a utiliza câmpul DT_RELR în fișierele ELF, este necesară suportul pentru opțiunea „-z pack-relative-relocs” în linker, care a apărut în versiunea setului binutils 2.38.
- Pentru platforma Linux, au fost implementate funcțiile pidfd_open, pidfd_getfd și pidfd_send_signal, care oferă acces la funcționalitatea pidfd, ajutând la gestionarea situațiilor de reutilizare a PID pentru o identificare mai precisă a proceselor care accesează fișierele monitorizate (pidfd este legat de un anumit proces și nu se schimbă, în timp ce PID poate fi reasociat cu un alt proces după finalizarea procesului curent asociat cu acest PID).
- Pentru platforma Linux a fost adăugată funcția process_madvise(), care permite unui proces să efectueze apelul de sistem madvise() în numele altui proces, identificând procesul țintă prin intermediul pidfd. Prin madvise(), se poate informa nucleul despre particularitățile gestionării memoriei pentru a optimiza managementul memoriei procesului, de exemplu, pe baza informațiilor transmise, nucleul poate iniția eliberarea suplimentară a memoriei libere. Apelul madvise() din alt proces poate fi necesar în situația în care informațiile necesare optimizării nu sunt cunoscute de procesul curent, fiind coordonate de un proces gestionator în fundal, care poate iniția independent extragerea memoriei neutilizate de la procese.
- Pentru platforma Linux a fost adăugată funcția process_mrelease(), care permite accelerarea eliberării memoriei procesului care își încheie execuția. În condiții normale, eliberarea resurselor și închiderea procesului nu se realizează instantaneu și poate fi întârziată din diverse motive, ceea ce afectează funcționarea sistemelor de răspuns rapid la lipsa de memorie, cum ar fi oomd (furnizat în systemd). Prin apelarea funcției process_mrelease, aceste sisteme pot iniția mai previzibil returnarea memoriei de la procesele terminate forțat.
- Implementarea încorporată a rezolvatorului DNS a fost îmbogățită cu suport pentru opțiunea „no-aaaa”, care permite, pentru simplificarea diagnosticării problemelor, deactivarea trimiterii de interogări DNS pentru înregistrările AAAA (determinarea adresei IPv6 prin numele gazdelor), inclusiv în timpul executării funcțiilor NSS, cum ar fi getaddrinfo(). Opțiunea nu afectează procesarea asocierilor de adrese IPv6 definite în /etc/hosts și apelurile getaddrinfo() cu flagul AI_PASSIVE.
- Pentru platforma Linux au fost adăugate funcțiile fsopen, fsmount, move_mount, fsconfig, fspick, open_tree și mount_setattr, care oferă acces la un nou API al nucleului pentru gestionarea montării sistemelor de fișiere cu respectarea spațiilor numelui punctelor de montare (mount namespaces). Funcțiile propuse permit gestionarea separată a diferitelor etape de montare (prelucrarea superblocului, obținerea de informații despre FS, montarea, atașarea la punctul de montare), care anterior erau executate printr-o funcție comună mount(). Funcțiile separate permit realizarea unor scenarii de montare mai complexe și efectuarea separată a unor operații, cum ar fi reconfigurarea superblocului, activarea opțiunilor, modificarea punctului de montare și mutarea într-un alt spațiu de nume. În plus, prelucrarea separată permite identificarea exactă a motivelor erorilor și stabilirea de mai multe surse pentru FS stratificate, cum ar fi overlayfs.
- În localedef a fost implementat suport pentru procesarea fișierelor cu definiții de locale furnizate în codificarea UTF-8 în loc de ASCII.
- Au fost adăugate funcții pentru conversia codificărilor pe mai multe byte, mbrtoc8 și c8rtomb, conform specificațiilor ISO C2X N2653 și C++20 P0482R6.
- A fost adăugat suport pentru tipul char8_t, definit în schița standardului ISO C2X N2653.
- Funcții noi arc4random, arc4random_buf și arc4random_uniform au fost adăugate, oferind un apel de sistem pentru getrandom și interfața /dev/urandom, returnând numere pseudo-aleatoare de înaltă calitate.
- Pe platforma Linux, a fost implementat suportul pentru arhitectura setului de instrucțiuni LoongArch, utilizată în procesoarele Loongson 3 5000 și care implementează un nou ISA RISC, similar cu MIPS și RISC-V. În versiunea actuală, este disponibil doar suportul pentru varianta pe 64 de biți LoongArch (LA64). Este necesară minim versiunea binutils 2.38, GCC 12 și kernel Linux 5.19.
- Mecanismul prelink a fost declarat învechit și va fi eliminat în următoarea versiune, împreună cu variabilele de mediu asociate LD_TRACE_PRELINKING și LD_USE_LOAD_BIAS și funcționalitățile linker-ului.
- Codul pentru verificarea versiunii kernel-ului Linux și prelucrările variabilei de mediu LD_ASSUME_KERNEL a fost eliminat. Versiunea minim acceptată a kernel-ului la compilarea Glibc este determinată prin câmpul ELF NT_GNU_ABI_TAG.
- Suportul pentru variabila de mediu LD_LIBRARY_VERSION a fost eliminat pe platforma Linux.
Sursa: opennet.ro
