glibc

Перейти к навигацииПерейти к поиску

Glibc
Логотип программы Glibc
ТипC POSIX library, Библиотека времени исполнения и пакет GNU[вд]
РазработчикПроект GNU
Написана наСи
Операционные системы GNU/Linux[5], GNU/Hurd[вд][5] и BSD[вд][5]
Первый выпуск1987
Последняя версия
Репозиторийsourceware.org/git/glibc…
ЛицензияLGPLv2.1+[вд][6]
Сайтgnu.org/software/… (англ.)
Логотип Викисклада Медиафайлы на Викискладе

glibc (GNU C LibraryGNU-библиотека) — библиотека Си, которая обеспечивает системные вызовы и основные функции, такие как open, malloc, printf и т. д. Библиотека C используется для всех динамически скомпонованных программ. Она написана Free Software Foundation для операционных систем GNU. glibc выпущена под лицензией GNU LGPL.

История

Первоначально glibc была написана Роландом Макгратом, работавшим в FSF в 1980-x годах. В феврале 1988 года FSF представил glibc как библиотеку, имеющую почти полную функциональность, требуемую стандартом ANSI C[7].

Временный форк glibc

В начале 1990-х годов разработчики ядра Linux создали форк glibc. Этот форк, названный «Linux libc», разрабатывался отдельно в течение нескольких лет, были выпущены версии с 2 до 5.

Когда FSF выпустила в 1996 году glibc 2.0, которая поддерживала IPv6, 64-битный доступ к данным, многопотоковые приложения, совместимость с будущими версиями и более переносимый исходный код[8], разработчики Linux прервали разработку Linux libc и начали использовать glibc от FSF.[9]

Файл .so последней версии Linux libc имел имя (soname) libc.so.5. Следующая после неё glibc 2.x использовала имя libc.so.6[10] (на архитектурах Alpha и IA64 вместо этого используется имя libc.so.6.1). Это имя зачастую сокращается до libc6 (например, в имени пакета Debian), следуя обычным соглашениям для библиотек.

По словам Ричарда Столлмана изменения из Linux libc нельзя перенести обратно в glibc, потому что авторство этого кода неясно, а проект GNU очень строго относится к сохранению записей об авторских правах.[11]

История версий

ВерсияДатаПримечанияПринятие
2.39январь 2024Из ISO C2X добавлен заголовочный файл stdbit.h.
2.38август 2023Добавлены функции strlcpy и strlcat. Поддержка libmvec для ARM64.
2.37 февраль 2023
2.36 август 2022
2.35февраль 2022Unicode 14.0, локаль C.UTF-8, перезапускаемые последовательности. Удалена поддержка Intel MPX.Ubuntu 22.04
2.34август 2021libpthread, libdl, libutil, libanl интегрированы в libc.
2.33февраль 2021HWCAPS.Ubuntu 20.04
2.32август 2020Unicode 13.0, атрибут 'access' для улучшенных предупреждений в GCC 10, т.е. to "help detect buffer overflows and other out-of-bounds accesses"[12]
2.31февраль 2020Начальная поддержка стандарта C23.
2.30август 2019Unicode 12.1.0, динамический компоновщик принимает аргумент --preload для предварительной загрузки общих объектов, в Linux добавлена функция gettid, поддержка календаря Minguo (Китайская Республика), в локаль ja_JP добавлена новая японская эра, функции выделения памяти не работают если общий размер объекта превышает PTRDIFF_MAX; исправлены CVE-2019-7309 and CVE-2019-9169[13]
2.29февраль 2019
  • getcpu wrapper
  • build and install all locales as directories with files
  • optimized trigonomical functions
  • Transactional Lock Elision for powercp64le ABI
  • posix_spawn_file_actions_addchdir_np and posix_spawn_file_actions_addfchdir_np
  • popen and system do not run atfork handlers anymore
  • support for the C-SKY ABIV2 running on Linux
  • strftime's default formatting of a locale's alternative year; the '_' and '-' flags can now be applied to its "%EY"[14]
2.28август 2018statx, renameat2, Unicode 11.0.0
2.27февраль 2018Оптимизации производительности. Поддержка RISC-V.Ubuntu 18.04
2.26август 2017Улучшена производительность (per-thread cache for malloc), поддержка Unicode 10Ubuntu 17.10
2.25февраль 2017Добавлены функции getentropy и getrandom и заголовочный файл <sys/random.h>.Fedora 26
2.24август 2016Удалены некоторые устаревшие возможности
2.23февраль 2016Unicode 8.0Fedora 24, Ubuntu 16.04
2.22август 2015Добавлена библиотека векторных математических функций libmvec.
2.21февраль 2015Поддержка архитектуры Altera Nios IIUbuntu 15.04, Debian experimental, Fedora 22
2.20сентябрь 2014Fedora 21
2.19февраль 2014Ubuntu 14.04, eglibc 2.19 в Debian 8 (Jessie), openSUSE 13, SLES 12
2.18август 2013Улучшена поддержка стандарта ISO C11. Поддержка микроархитектуры Xilinx MicroBlaze и IBM POWER8Fedora 20
2.17декабрь 2012Поддержка 64-битной архитектуры ARMUbuntu 13.04, RHEL 7
2.16июнь 2012Поддержка x32 ABI, стандарт ISO C11, SystemTap
2.15март 2012Ubuntu 12.04 и 12.10
2.14июнь 2011
2.13январь 2011eglibc 2.13 в Debian 7 (Wheezy)
2.12май 2010RHEL 6
2.11октябрь 2009SLES 11, Ubuntu 10.04, eglibc в Debian 6 (Squeeze)
2.10май 2009Минимум для LSB 5.0. Начальная поддержка psiginfo.
2.9ноябрь 2008Ubuntu 9.04
2.8апрель 2008Ubuntu 8.10
2.7октябрь 2007Debian 5 (Lenny), Ubuntu 8.04
2.6май 2007
2.5сентябрь 2006Полная поддержка inotifyRHEL 5
2.4март 2006Стандарт в LSB 4.0, начальная поддержка inotifySLES 10
2.3.6ноябрь 2005Debian 4.0 (Etch)
2.3.5апрель 2005SLES 9
2.3.4декабрь 2004Стандарт в LSB 3.0RHEL 4 (Update 5)
2.3.2февраль 2003Debian 3.1 (Sarge)
2.3октябрь 2002
2.2.4июль 2001
2.2ноябрь 2000
2.1.1март 1999
2.1февраль 1999
2.0.95июль 1998
2.0январь 1997
1.90 — 1.102май 1996 — январь 1997
1.01 — 1.09.3март 1992 — декабрь 1994
1.0февраль 1992
0.1 — 0.6октябрь 1991 — февраль 1992

Поддерживаемые архитектуры и ядра

Glibc используется в системах, на которых работает много разных ОС, и на разных архитектурах. Наиболее часто glibc используется на x86-машинах с ОС Linux. Также официально поддерживаются следующие архитектуры: SPARC, Motorola 68k, DEC Alpha, PowerPC, ARM, s390[15].

Критика

glibc часто критикуют за её «раздутость» и низкую скорость работы по сравнению с другими прошлыми библиотеками[16]. Поэтому были созданы несколько альтернативных стандартных библиотек языка Си (dietlibc, uClibc, Newlib, musl, Klibc). Также под критику попадает мейнтейнер Ульрих Дреппер и его отношение к ошибкам в Glibc[17].

В 2009 году в таких популярных дистрибутивах, как Debian[18], Ubuntu и ArkLinux[19] glibc был заменён на альтернативную библиотеку eglibc, изначально ориентированную на встраиваемые системы. Eglibc — это вариант glibc, более дружелюбно относящийся к приёму сторонних патчей. Однако 18 июня 2014 года один из мэйнтейнеров пакетов дистрибутива Debian объявил об обратной замене библиотеки eglibc на библиотеку glibc[20].

2024: выявлена критическая уязвимость в GNU C Library (glibc), открывающую возможность для повышения привилегий до уровня root[21].

Примечания

  1. The GNU C Library version 2.40 is now available — 2024.
  2. https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=timezone/tzfile.h;hb=HEAD
  3. 1 2 Olson A., Eggert P., Murchison K. 8.1 // The Time Zone Information Format (TZif) (англ.)IETF, 2019. — P. 18. — 34 p. — doi:10.17487/RFC8536
  4. https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=timezone/zic.c;hb=HEAD
  5. 1 2 3 A Bibliographic Scan of Digital Scholarly Communication Infrastructure (англ.)Educopia Institute, 2020.
  6. https://sourceware.org/git/?p=glibc.git;a=commit;h=41bdb6e20c5d2df34a740cbd70e11c05025dfd12
  7. Free Software Foundation. GNU's Bulletin, vol. 1 no. 4, February, 1988. Дата обращения: 16 декабря 2016. Архивировано 16 апреля 2016 года.
  8. Elliot Lee. A Technical Comparison of glibc 2.x With Legacy System Libraries (англ.) (2001). Архивировано из оригинала 11 апреля 2004 года.
  9. Forking: it could even happen to you (англ.). — «the split between GNU LIBC and the Linux LIBC -- it went on for years while Linux stabilized, and then the forks re-merged into one project». Архивировано из оригинала 21 января 2013 года.
  10. Fear of Forking essay, see "6. glibc --> Linux libc --> glibc" (англ.). Дата обращения: 12 января 2013. Архивировано из оригинала 18 июля 2014 года.
  11. Fear of Forking, footnote on Stallman's merge comments (англ.). Архивировано из оригинала 21 января 2013 года.
  12. The GNU C Library version 2.32 is now available. sourceware.org. Дата обращения: 13 августа 2020.
  13. sourceware.org Git – glibc.git/blob – NEWS.
  14. sourceware.org Git – glibc.git/blob – NEWS.
  15. MAINTAINERS - glibc wiki. sourceware.org. Дата обращения: 16 декабря 2016. Архивировано 18 апреля 2016 года.
  16. Torvalds, Linus (2002-01-09). "Re: [libc-alpha] Re: [open-source] Re: Wish for 2002". libc-alpha@sources.redhat.com (Mailing list). Архивировано 12 октября 2015. Дата обращения: 16 декабря 2016.
  17. Debian Switching From Glibc To Eglibc - Slashdot. linux.slashdot.org. Дата обращения: 16 декабря 2016. Архивировано 20 декабря 2016 года.
  18. Debian is switching to EGLIBC Архивная копия от 7 октября 2011 на Wayback Machine Aurelien’s weblog, May 5th 2009 (англ.)
  19. Ark Linux switches to eglibc Архивная копия от 24 февраля 2012 на Wayback Machine Ark Linux weblog, May 13 2009 (англ.)
  20. Debian is switching (back) to GLIBC Архивная копия от 29 марта 2016 на Wayback Machine Aurelien’s weblog, June 18th 2014 (англ.)
  21. Критическая «дыра» в фундаментальной библиотеке позволяет взломать Ubuntu, Fedora и Debian и другие дистрибутивы Linux // CNews, 2 февраля 2024

Ссылки