glibc
glibc (GNU C Library — GNU-библиотека) — библиотека Си, которая обеспечивает системные вызовы и основные функции, такие как open, malloc, printf и т. д. Библиотека C используется для всех динамически скомпонованных программ. Она написана Free Software Foundation для операционных систем GNU. glibc выпущена под лицензией GNU LGPL.
Glibc | |
---|---|
Тип | C POSIX library |
Разработчик | Проект GNU |
Написана на | Си |
Операционная система | GNU/Linux[d][2], GNU/Hurd[d][2] и BSD[d][2] |
Первый выпуск | 1987 |
Последняя версия | |
Читаемые форматы файлов | Time Zone Information Format[d][3][4][…] |
Создаваемые форматы файлов | Time Zone Information Format[d][5][4][…] |
Лицензия | LGPLv2.1+[d][6] |
Сайт | gnu.org/software/… (англ.) |
Медиафайлы на Викискладе |
ИсторияПравить
Первоначально 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.33 | февраль 2021 | Ubuntu 20.04 | |
2.32 | август 2020 | ||
2.31 | февраль 2020 | ||
2.30 | август 2019 | ||
2.29 | февраль 2019 | ||
2.28 | август 2018 | ||
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 | ||
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[12].
КритикаПравить
glibc часто критикуют за её «раздутость» и низкую скорость работы по сравнению с другими прошлыми библиотеками[13]. Поэтому были созданы несколько альтернативных стандартных библиотек языка Си (dietlibc, uClibc, Newlib, musl, Klibc). Также под критику попадает мейнтейнер Ульрих Дреппер и его отношение к ошибкам в Glibc[14].
В 2009 году в таких популярных дистрибутивах, как Debian[15], Ubuntu и ArkLinux[16] glibc был заменён на альтернативную библиотеку eglibc, изначально ориентированную на встраиваемые системы. Eglibc — это вариант glibc, более дружелюбно относящийся к приёму сторонних патчей. Однако 18 июня 2014 года один из мэйнтейнеров пакетов дистрибутива Debian объявил об обратной замене библиотеки eglibc на библиотеку glibc[17].
ПримечанияПравить
- ↑ https://sourceware.org/git/?p=glibc.git;a=blob;f=NEWS;h=ad5196a5f1f3991624a9a6ebe7fa03f09fdfe5c5;hb=a704fd9a133bfb10510e18702f48a6a9c88dbbd5
- ↑ 1 2 3 Free Software Directory
- ↑ 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
- ↑ 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 года.
- ↑ MAINTAINERS - glibc wiki (неопр.). sourceware.org. Дата обращения: 16 декабря 2016. Архивировано 18 апреля 2016 года.
- ↑ Torvalds, Linus Re: [libc-alpha] Re: [open-source] Re: Wish for 2002 (неопр.). Список рассылки libc-alpha@sources.redhat.com (9 января 2002). Дата обращения: 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 (англ.)