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 февраль 2022 Unicode 14.0, локаль C.UTF-8, перезапускаемые последовательности. Удалена поддержка Intel MPX. Ubuntu 22.04
2.34 август 2021 libpthread, libdl, libutil, libanl интегрированы в libc.
2.33 февраль 2021 HWCAPS. Ubuntu 20.04
2.32 август 2020 Unicode 13.0, атрибут 'access' для улучшенных предупреждений в GCC 10, т.е. to "help detect buffer overflows and other out-of-bounds accesses"[12]
2.31 февраль 2020 Начальная поддержка стандарта C23.
2.30 август 2019 Unicode 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 август 2018 statx, renameat2, Unicode 11.0.0
2.27 февраль 2018 Оптимизации производительности. Поддержка RISC-V. Ubuntu 18.04
2.26 август 2017 Улучшена производительность (per-thread cache for malloc), поддержка Unicode 10 Ubuntu 17.10
2.25 февраль 2017 Добавлены функции getentropy и getrandom и заголовочный файл <sys/random.h>. Fedora 26
2.24 август 2016 Удалены некоторые устаревшие возможности
2.23 февраль 2016 Unicode 8.0 Fedora 24, Ubuntu 16.04
2.22 август 2015 Добавлена библиотека векторных математических функций libmvec.
2.21 февраль 2015 Поддержка архитектуры Altera Nios II Ubuntu 15.04, Debian experimental, Fedora 22
2.20 сентябрь 2014 Fedora 21
2.19 февраль 2014 Ubuntu 14.04, eglibc 2.19 в Debian 8 (Jessie), openSUSE 13, SLES 12
2.18 август 2013 Улучшена поддержка стандарта ISO C11. Поддержка микроархитектуры Xilinx MicroBlaze и IBM POWER8 Fedora 20
2.17 декабрь 2012 Поддержка 64-битной архитектуры ARM Ubuntu 13.04, RHEL 7
2.16 июнь 2012 Поддержка x32 ABI, стандарт ISO C11, SystemTap
2.15 март 2012 Ubuntu 12.04 и 12.10
2.14 июнь 2011
2.13 январь 2011 eglibc 2.13 в Debian 7 (Wheezy)
2.12 май 2010 RHEL 6
2.11 октябрь 2009 SLES 11, Ubuntu 10.04, eglibc в Debian 6 (Squeeze)
2.10 май 2009 Минимум для LSB 5.0. Начальная поддержка psiginfo.
2.9 ноябрь 2008 Ubuntu 9.04
2.8 апрель 2008 Ubuntu 8.10
2.7 октябрь 2007 Debian 5 (Lenny), Ubuntu 8.04
2.6 май 2007
2.5 сентябрь 2006 Полная поддержка inotify RHEL 5
2.4 март 2006 Стандарт в LSB 4.0, начальная поддержка inotify SLES 10
2.3.6 ноябрь 2005 Debian 4.0 (Etch)
2.3.5 апрель 2005 SLES 9
2.3.4 декабрь 2004 Стандарт в LSB 3.0 RHEL 4 (Update 5)
2.3.2 февраль 2003 Debian 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