Po šesti měsících vývoje publikováno vydání systémové knihovny Knihovna GNU C (glibc) 2.31, který plně vyhovuje požadavkům norem ISO C11 a POSIX.1-2008. Nová verze obsahuje opravy od 58 vývojářů.
Z těch implementovaných v Glibc 2.31 vylepšení můžete si všimnout:
Přidáno makro _ISOC2X_SOURCE umožňující funkce definované v návrhu budoucí normy ISO C2X. Tyto funkce jsou také povoleny při použití makra _GNU_SOURCE nebo při sestavování gcc s příznakem „-std=gnu2x“;
Pro funkce definované v záhlaví souboru "math.h", které zaokrouhlují své výsledky na menší typ, jsou v souboru "tgmath.h" navržena odpovídající makra obecného typu, jak to vyžadují specifikace TS 18661-1:2014 a TS 18661-3: 2015;
Přidána funkce pthread_clockjoin_np(), která čeká na dokončení vlákna s ohledem na časový limit (pokud časový limit nastane před dokončením, funkce vrátí chybu). Na rozdíl od pthread_timedjoin_np(), v pthread_clockjoin_np() je možné definovat typ časovače pro výpočet timeoutu - CLOCK_MONOTONIC (zohledňuje čas strávený systémem v režimu spánku) nebo CLOCK_REALTIME;
Překladač DNS nyní podporuje volbu trust-ad v /etc/resolv.conf a příznak RES_TRUSTAD v _res.options, pokud je nastaven, příznak DNSSEC se přenáší v požadavcích DNS AD (ověřená data). V tomto režimu je příznak AD nastavený serverem dostupný pro aplikace, které volají funkce jako res_search(). Ve výchozím nastavení, pokud navrhované možnosti nejsou nastaveny, glibc neurčuje příznak AD v požadavcích a automaticky jej vymaže v odpovědích, což znamená, že chybí kontroly DNSSEC;
Vytváření funkčních vazeb systémových volání pro Glibc již nevyžaduje instalaci hlaviček linuxového jádra. Výjimkou je 64bitová architektura RISC-V;
Vyřazeno zranitelnostCVE-2019-19126, která umožňuje obejít ochranu
ASLR v programech s příznakem setuid a určit rozložení adres v načtených knihovnách pomocí manipulace s proměnnou prostředí LD_PREFER_MAP_32BIT_EXEC.
Změny, které narušují kompatibilitu:
totalorder(), totalordermag() a podobné funkce pro další typy s plovoucí desetinnou čárkou nyní akceptují ukazatele jako argumenty pro odstranění varování o převodu hodnot ve stavu NaN, v souladu s doporučeními TS 18661-1 navrženými pro budoucí standard C2X.
Stávající spustitelné soubory, které přímo předávají argumenty s plovoucí desetinnou čárkou, budou nadále běžet bez úprav;
Dlouho zastaralá funkce stime již není dostupná pro binární soubory propojené s glibc a její definice byla odstraněna z time.h. Chcete-li nastavit systémový čas, použijte funkci clock_settime. V budoucnu plánujeme odstranit zastaralou funkci ftime a také hlavičkový soubor sys/timeb.h (místo ftime by měl být použit gettimeofday nebo clock_gettime);
Funkce gettimeofday již nepředává informace o systémovém časovém pásmu (tato funkce byla relevantní ve dnech 4.2-BSD a byla již mnoho let zastaralá). Argumentu 'tzp' by nyní měl být předán nulový ukazatel a k získání informací o časovém pásmu na základě aktuálního času by měla být použita funkce localtime(). Volání gettimeofday s nenulovým argumentem 'tzp' vrátí prázdná pole tz_minuteswest a tz_dsttime ve struktuře časového pásma. Samotná funkce gettimeofday je v POSIX zastaralá (doporučuje se clock_gettime místo gettimeofday), ale neplánuje se její odstranění z glibc;
settimeofday již nepodporuje současné předávání parametrů pro nastavení času a offsetu pro korekci času. Při volání settimeofday musí být nyní jeden z argumentů (čas nebo offset) nastaven na hodnotu null, jinak volání funkce selže s chybou EINVAL. Stejně jako gettimeofday je funkce settimeofday v POSIX zastaralá a doporučuje se ji nahradit funkcí clock_settime nebo rodinou funkcí adjtime;
Podpora architektury SPARC ISA v7 byla ukončena (podpora v8 je prozatím zachována, ale pouze pro procesory, které podporují instrukce CAS, jako jsou procesory LEON, nikoli procesory SuperSPARC).
Pokud se párování nezdaří v "líný", ve kterém linker nehledá symboly funkce až do prvního volání této funkce, funkce dlopen nyní vynutí ukončení procesu (dříve vracela NULL při selhání);
Pro MIPS hard-float ABI se nyní používá spustitelný zásobník, pokud sestavení výslovně neomezuje použití linuxového jádra 4.8+ pomocí parametru „-enable-kernel=4.8.0“ (u jader do 4.8 dochází k pádům pozorované u některých konfigurací MIPS);
Vazby kolem systémových volání souvisejících s manipulací s časem byly přesunuty tak, aby používaly systémové volání time64, pokud existuje (na 32bitových systémech glibc nejprve zkouší nová systémová volání, která manipulují s 64bitovým typem času, a pokud žádná neexistují, spadne zpět ke starým 32bitovým voláním).