Библиотека GNU C , широко известная как glibc , представляет собой реализацию стандартной библиотеки C в рамках проекта GNU . Это оболочка системных вызовов ядра Linux для использования приложениями. Несмотря на свое название, теперь он также напрямую поддерживает C++ (и косвенно другие языки программирования ). Он был начат в 1980-х годах Фондом свободного программного обеспечения (FSF) для операционной системы GNU .
glibc — бесплатное программное обеспечение , распространяемое по лицензии GNU Lesser General Public License . [3] Проект GNU C Library предоставляет основные библиотеки для системы GNU, а также для многих систем, использующих Linux в качестве ядра . Эти библиотеки предоставляют критически важные API , включая ISO C11 , POSIX.1-2008 , BSD , API для конкретных ОС и многое другое. Эти API включают в себя такие основополагающие возможности, как open , read , write , malloc , printf , getaddrinfo , dlopen , pthread_create , crypt , Login , Exit и другие.
Первоначально проект glibc был написан в основном Роландом МакГратом, работавшим в Фонде свободного программного обеспечения (FSF) летом 1987 года, будучи подростком. [10] В феврале 1988 года FSF описал glibc как почти завершенную функциональность, требуемую ANSI C. [11] К 1992 году в нем были реализованы функции ANSI C-1989 и POSIX.1-1990, и велась работа над POSIX.2. [12] В сентябре 1995 года Ульрих Дреппер внес свой первый вклад в glibc, и к 1997 году большинство коммитов было сделано именно им. Дреппер занимал должность сопровождающего в течение многих лет и до 2012 года накопил 63% всех обязательств по проекту. [13]
В мае 2009 года glibc был перенесен в репозиторий Git . [13]
В 2010 году была решена проблема с лицензированием, вызванная тем, что реализация Sun RPC в glibc не была совместима с GPL . Это было исправлено путем повторного лицензирования компонентов Sun RPC под лицензию BSD . [14] [15]
В 2014 году в glibc возникла ошибка поломки ABI на s390. [16]
В июле 2017 года, через 30 лет после того, как он основал glibc, Роланд МакГрат объявил о своем уходе, «объявив себя почетным мейнтейнером и отказавшись от прямого участия в проекте. Эти последние несколько месяцев, если не последние несколько лет, доказали, что вы не нужен мне больше». [10]
В 2018 году сопровождающий Рэймонд Николсон удалил шутку об абортах из исходного кода glibc. Позже он был восстановлен Александром Оливой после того, как Ричард Столлман потребовал вернуть его. [17]
В 2021 году из проекта было снято требование о передаче авторских прав Фонду свободного программного обеспечения . [18]
В 1994 году разработчики ядра Linux создали форк glibc. Их ответвление, «Linux libc», поддерживалось отдельно примерно до 1998 года. Поскольку указание авторских прав было недостаточным, изменения не могли быть включены обратно в GNU Libc. [19] Когда FSF выпустила glibc 2.0 в январе 1997 года, разработчики ядра прекратили выпуск Linux libc из-за превосходного соответствия glibc 2.0 стандартам POSIX. [20] glibc 2.0 также имел лучшую интернационализацию и более глубокий перевод, возможность IPv6 , 64-битный доступ к данным, возможности для многопоточных приложений, совместимость с будущими версиями, а код был более переносимым. [21] Последняя использовавшаяся версия Linux libc использовала внутреннее имя ( soname ) libc.so.5 . Вслед за этим glibc 2.x в Linux использует имя libc.so.6 [22] [ нужен лучший исходный код ]
В 2009 году Debian и ряд его производных перешли с glibc на вариант [24] eglibc. [25] Eglibc поддерживался консорциумом, состоящим из Freescale , MIPS , MontaVista и Wind River . [26] Он содержал изменения, которые сделали его более подходящим для встроенного использования , и добавил поддержку архитектур, которые не поддерживались glibc, таких как PowerPC e500 . Код eglibc был снова объединен с glibc версии 2.20. [27] С 2014 года поддержка eglibc прекращена. Проект Yocto и Debian также вернулись на glibc после выпуска Debian Jessie . [28]
Начиная с 2001 года за развитием библиотеки следил комитет, [29] с Ульрихом Дреппером [30] , ведущим автором и сопровождающим. Создание руководящего комитета вызвало общественную полемику, поскольку Ульрих Дреппер открыто назвал его неудачным маневром враждебного поглощения Ричарда Столлмана . [31] [32] [33] [34]
В марте 2012 года руководящий комитет проголосовал за самороспуск и отстранение Дреппера в пользу процесса разработки, управляемого сообществом, при этом Райан Арнольд, Максим Кувырков, Джозеф Майерс, Карлос О'Донелл и Александр Олива взяли на себя ответственность за сопровождение GNU (но никаких дополнительных полномочий по принятию решений). [35] [36] [37]
glibc обеспечивает функциональность, требуемую Единой спецификацией UNIX , POSIX (1c, 1d и 1j), а также некоторые функции, требуемые интерфейсами ISO C11 , ISO C99 , Berkeley Unix (BSD), определением интерфейса System V (SVID) и Руководство по переносимости X/Open (XPG), выпуск 4.2, со всеми расширениями, общими для систем, совместимых с XSI (X/Open System Interface), а также со всеми расширениями X/Open UNIX.
Кроме того, glibc также предоставляет расширения, которые были сочтены полезными или необходимыми при разработке GNU .
glibc используется в системах, которые используют множество разных ядер и разные аппаратные архитектуры. Его наиболее распространенное использование — в системах, использующих ядро Linux на оборудовании x86 , однако официально поддерживаемое оборудование [38] включает: ARM , ARC , C-SKY, DEC Alpha , IA-64 , Motorola m68k , MicroBlaze , MIPS , Nios II , PA-RISC , PowerPC , RISC-V , s390 , SPARC и x86 (старые версии поддерживают TILE ). Он официально поддерживает ядра Hurd и Linux . Кроме того, существуют сильно исправленные версии, работающие на ядрах FreeBSD и NetBSD (на основе которых построены системы Debian GNU/kFreeBSD и Debian GNU/NetBSD соответственно), а также раздвоенная версия OpenSolaris . [39] Он также используется (в отредактированном виде) и называется libroot.so в BeOS и Haiku . [40]
В прошлом glibc критиковалась как « раздутая » и медленная, чем другие библиотеки, например, со стороны Линуса Торвальдса [41] и программистов встроенного Linux . По этой причине было создано несколько альтернативных стандартных библиотек C , которые занимают меньше места. Однако во многих проектах по созданию небольших устройств GNU libc используется вместо более мелких альтернатив из-за поддержки приложений, соответствия стандартам и полноты. Примеры включают Openmoko [42] и Familiar Linux для карманных компьютеров iPaq (при использовании программного обеспечения дисплея GPE ). [43]
glibc не реализует интерфейсы проверки границ, определенные в C11 , и не реализовывал strlcpy и strlcat [44] [45] до 2023 года на том основании, что «на практике эти функции могут вызвать проблемы, поскольку их предполагаемое использование способствует молчаливому усечению данных, добавляет сложности». и неэффективность, и не предотвращает переполнение буфера в пунктах назначения». [46] В FAQ указано, что интерфейсы проверки границ не являются обязательными в стандарте ISO и что snprintf доступен в качестве альтернативы. [46]
Существуют уровни совместимости (« прокладки »), позволяющие программам, написанным для других экосистем, работать на системах, предлагающих интерфейс glibc. К ним относятся libhybris , уровень совместимости для Android Bionic , и Wine , который можно рассматривать как уровень совместимости API Windows с glibc и другими собственными API, доступными в Unix-подобных системах.
LGPL-2.1 или более поздняя версия в заголовках
LGPL-2.1 или более поздняя версия в заголовках
LGPL-2.0 или более поздняя версия в заголовках
Большинство библиотек готовы. Роланд МакГрат [...] имеет почти полный набор функций библиотеки ANSI C. Мы надеемся, что они будут готовы этой весной.
Теперь он содержит все функции ANSI C-1989 и POSIX.1-1990, а также ведется работа над функциями POSIX.2 и Unix (BSD и System V).
Из почти 19 000 коммитов, найденных в git-репозитории проекта (который содержит изменения, начиная с 1995 года), более 12 000 были сделаны Ульрихом.
Раскол между GNU LIBC и Linux LIBC - он продолжался годами, пока Linux стабилизировался, а затем ответвления снова объединились в один проект.
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ){{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка )В 2001 году был сформирован Руководящий комитет библиотеки GNU C..., в который в настоящее время входят Марк Браун, Пол Эггерт, Андреас Йегер, Якуб Елинек, Роланд МакГрат и Андреас Шваб.
Несколько недель назад RMS начала очередную атаку на меня (одно письмо, за которым последовали косвенные попытки оказать влияние, а сегодня последовало еще одно письмо). Суть в том, что он жалуется, что я не следую «политике GNU», и поэтому меня должен заменить руководящий комитет, частью которого я мог бы быть. Некоторые из вас (а именно Роланд и Андреас С.), вероятно, знают об этом, поскольку он предложил обоих в качестве других членов комитета. Кроме того, в списке был Марк Браун (я знаю человека с таким именем в IBM, который также мог бы вписаться в эту группу, но я не уверен, действительно ли это он). В любом случае, я это полностью отвергаю. Это совсем не помогает, наоборот. Во-первых, мне не известно о каких-либо существенных правилах, которые я нарушаю. Единственные из них заключаются в том, что я не выполняю приказы RMS, которые явно имеют политические намерения (что, конечно, является кощунством), и, возможно, меня не волнует Винблоуз (если последнее вообще имеет значение). Ничего из этого никак не изменится.
А теперь о не очень приятных вещах. Недавно Столлман предпринял попытку, я бы сказал, враждебного поглощения разработки glibc. Он пытался сговориться за моей спиной и убедить других основных разработчиков взять на себя управление, чтобы в конце концов он получил контроль и мог диктовать все, что ему заблагорассудится. Эта попытка провалилась, но он продолжал оказывать давление на людей повсюду, и это стало действительно ужасным. В конце концов я согласился на создание так называемого «руководящего комитета» (РК).
libroot.so не является частью проекта GNU и включен в исходный код Haiku.
Мы будем использовать glibc (не uClibC)... Альтернативы могут сэкономить больше места и быть более оптимизированными, но с большей вероятностью доставят нам головную боль при интеграции.
Вопрос: какая версия GLIBC использовалась для сборки Familiar 0.8.4? Ответ: 2.3.3