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 Library — GNU-библиотека) — библиотека Си, которая обеспечивает системные вызовы и основные функции, такие как 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 |
| |
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].
Примечания
[править | править код]- ↑ The GNU C Library version 2.40 is now available — 2024.
- ↑ https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=timezone/tzfile.h;hb=HEAD
- ↑ 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
- ↑ https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=timezone/zic.c;hb=HEAD
- ↑ 1 2 3 A Bibliographic Scan of Digital Scholarly Communication Infrastructure (англ.) — Educopia Institute, 2020.
- ↑ https://sourceware.org/git/?p=glibc.git;a=commit;h=41bdb6e20c5d2df34a740cbd70e11c05025dfd12
- ↑ Free Software Foundation. GNU's Bulletin, vol. 1 no. 4, February, 1988 . Дата обращения: 16 декабря 2016. Архивировано 16 апреля 2016 года.
- ↑ Elliot Lee. A Technical Comparison of glibc 2.x With Legacy System Libraries (англ.) (2001). Архивировано из оригинала 11 апреля 2004 года.
- ↑ 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 года.
- ↑ Fear of Forking essay, see "6. glibc --> Linux libc --> glibc" (англ.). Дата обращения: 12 января 2013. Архивировано из оригинала 18 июля 2014 года.
- ↑ Fear of Forking, footnote on Stallman's merge comments (англ.). Архивировано из оригинала 21 января 2013 года.
- ↑ The GNU C Library version 2.32 is now available . sourceware.org. Дата обращения: 13 августа 2020.
- ↑ sourceware.org Git – glibc.git/blob – NEWS .
- ↑ sourceware.org Git – glibc.git/blob – NEWS .
- ↑ MAINTAINERS - glibc wiki . sourceware.org. Дата обращения: 16 декабря 2016. Архивировано 18 апреля 2016 года.
- ↑ 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.
- ↑ Debian Switching From Glibc To Eglibc - Slashdot . linux.slashdot.org. Дата обращения: 16 декабря 2016. Архивировано 20 декабря 2016 года.
- ↑ Debian is switching to EGLIBC Архивная копия от 7 октября 2011 на Wayback Machine Aurelien’s weblog, May 5th 2009 (англ.)
- ↑ Ark Linux switches to eglibc Архивная копия от 24 февраля 2012 на Wayback Machine Ark Linux weblog, May 13 2009 (англ.)
- ↑ Debian is switching (back) to GLIBC Архивная копия от 29 марта 2016 на Wayback Machine Aurelien’s weblog, June 18th 2014 (англ.)
- ↑ Критическая «дыра» в фундаментальной библиотеке позволяет взломать Ubuntu, Fedora и Debian и другие дистрибутивы Linux // CNews, 2 февраля 2024