Обновление, которое не заметят миллионы пользователей Linux. Почему выход glibc 2.43 важнее большинства громких релизов

Обновление, которое не заметят миллионы пользователей Linux. Почему выход glibc 2.43 важнее большинства громких релизов

Базовая библиотека GNU/Linux получила C23-нововведения, openat2 и исправления уязвимостей.

image

Если вы пользуетесь Linux, то одна из самых важных частей системы только что получила крупное обновление, и вы, скорее всего, даже не заметите этого сразу. Вышла GNU C Library (glibc) версии 2.43, та самая базовая библиотека, через которую работают почти все программы на GNU/Linux, от оболочки и менеджера пакетов до браузера и серверных сервисов. Обновление традиционно выглядит как «что-то для разработчиков», но на практике оно влияет на безопасность, совместимость и производительность всего стека.

Главный вектор релиза это движение к свежим стандартам языка и платформы. В glibc 2.43 добавили новые функции и уточнения, связанные с ISO C23 и POSIX.1-2024: появились, например, free_sized и free_aligned_sized, memset_explicit и набор функций для выравнивания памяти, а assert теперь допускает вариативные аргументы, чтобы корректно переживать выражения с запятой внутри составных литералов. Для ряда классических строковых и поисковых функций, которые возвращают указатели внутрь входных массивов, появились макроопределения с «сохранением const»: если вы передаете const-указатель, то и результат будет const. Это правильное поведение по C23, но оно может неожиданно всплыть при сборке старого кода, особенно там, где используются не самые свежие снимки gnulib.

Есть и заметные изменения, которые напрямую касаются безопасности и «гигиены» выполнения. На Linux добавили поддержку mseal: это системный вызов, который позволяет «запечатывать» отображения памяти и запрещать дальнейшие изменения во время работы процесса, например смену прав доступа, размонтирование, перенос в другое место или уменьшение размера. Для атак класса «поменяли защиту страницы и выполнили код» или для сценариев, где важно стабилизировать раскладку памяти, такой инструмент выглядит очень практично. В том же ряду появился openat2, расширение openat с более богатой семантикой, но с оговорками: он доступен только в режиме LFS и является отменяемой точкой входа.

Производительность тоже подтянули, особенно там, где она чувствуется в численных задачах. В библиотеку импортировали дополнительные оптимизированные и корректно округляемые математические функции из проекта CORE-MATH, включая acosh, asinh, atanh, erf/erfc, lgamma и tgamma, а также добавили улучшенные реализации fma, remainder, frexp и ряда вариантов frexpl для разных форматов. В некоторых случаях разработчики аккуратно переложили «старые» режимы обработки ошибок (SVID) в символы совместимости, чтобы основной путь стал быстрее. Из архитектурных новостей: на AArch64 по умолчанию включили поддержку 2 МБ transparent huge pages в malloc, добавили настройки для усиления защит вроде BTI и предупреждения загрузчика через LD_DEBUG=security, на RISC-V появился вариант memset с оптимизациями под RVV, а на x86 обновили распознавание новых поколений процессоров Intel, включая Nova Lake и Wildcat Lake.

Отдельно стоит отметить «инструментальные» изменения. В glibc 2.43 добавили экспериментальную поддержку сборки clang, но только при достаточно свежей версии (не ниже clang 18), для целей aarch64-linux-gnu или x86_64-linux-gnu и при наличии рантайма, совместимого с libgcc. Параллельно разработчики подчистили и модернизировали документацию, заметно улучшили тестовый набор, особенно вокруг scanf, strerror, strsignal и многопоточных сценариев, а поддержку Unicode обновили до версии 17.0.0.

Как обычно, у релиза есть и «ломающие» моменты. Убрали поддержку dumped heaps, из-за чего malloc_set_state() теперь всегда возвращает -1. Переименовали uimaxabs в umaxabs в русле изменений будущего стандарта (старое имя оставили как символ совместимости для уже собранных бинарников). Из pthread убрали поддержку TX lock elision на всех архитектурах, где она еще жила. LD_PROFILE больше не пишет профили в каталог «по умолчанию», теперь нужно явно задавать LD_PROFILE_OUTPUT, иначе данные просто некуда будет сохранить. Еще один важный сигнал для экосистемы: 31-битная конфигурация s390-linux-gnu объявлена устаревшей в 2.43 и планируется к удалению в 2.44 на фоне того, что в Linux 6.19 ожидается удаление compat syscalls на s390x, при этом 64-битная s390x-linux-gnu остается поддерживаемой.

В части безопасности разработчики закрыли несколько уязвимостей. Среди них переполнение целого в memalign, которое могло приводить к повреждению кучи (CVE-2026-0861), утечка данных со стека в DNS-резолвер через getnetbyaddr/getnetbyaddr_r (CVE-2026-0915), а также ситуация, когда wordexp с флагами WRDE_REUSE и WRDE_APPEND мог возвращать неинициализированную память (CVE-2025-15281). Для дистрибутивов это означает очередной пакетный апдейт, который чаще всего прилетит незаметно, но закроет неприятные края.

Релиз glibc 2.43 объявлен 23–24 января 2026 года, исходники и пакеты доступны на зеркалах GNU, а сопровождающим дистрибутивов рекомендуют отслеживать ветки release/*, куда будут попадать консервативные исправления и новые возможности при сохранении обратной совместимости. Для обычного пользователя это обновление из категории «тихо улучшили фундамент», а для разработчиков хороший повод проверить сборки на C23-изменения и обновить зависимости, если где-то всплывут новые требования к const или к поведению макросов.