Библиотека GNU C , обычно известная как glibc , является реализацией стандартной библиотеки C в проекте GNU . Она предоставляет оболочку вокруг системных вызовов ядра Linux и других ядер для использования приложениями. Несмотря на свое название, теперь она также напрямую поддерживает C++ (и, косвенно, другие языки программирования ). Она была начата в 1980-х годах Фондом свободного программного обеспечения (FSF) для операционной системы GNU .
glibc — это свободное программное обеспечение , выпущенное под лицензией GNU Lesser General Public License . [3] Проект библиотеки GNU C предоставляет основные библиотеки для системы GNU, а также для многих систем, использующих Linux в качестве ядра . Эти библиотеки предоставляют критически важные API, включая ISO C11 , POSIX.1-2008 , BSD , API, специфичные для ОС, и многое другое. Эти API включают такие основополагающие возможности, как open , read , write , malloc , printf , getaddrinfo , dlopen , pthread_create , crypt , login , exit и многое другое.
Проект glibc изначально был написан в основном Роландом Макгратом, работавшим в Free Software Foundation (FSF) летом 1987 года, будучи подростком. [10] [11] В феврале 1988 года FSF описал glibc как почти полностью завершивший функциональность, требуемую ANSI C. [ 12] К 1992 году он реализовал функции ANSI C-1989 и POSIX.1-1990, и работа над POSIX.2 велась полным ходом. [13] В сентябре 1995 года Ульрих Дреппер внес свой первый вклад в glibc, и к 1997 году большинство коммитов были сделаны им. Дреппер занимал должность сопровождающего в течение многих лет и до 2012 года накопил 63% всех коммитов в проект. [14]
В мае 2009 года glibc был перенесен в репозиторий Git . [14]
В 2010 году была решена проблема лицензирования, вызванная реализацией Sun RPC в glibc, которая не была совместима с GPL . Она была исправлена путем повторного лицензирования компонентов Sun RPC под лицензией BSD . [15] [16]
В 2014 году glibc пострадал от ошибки поломки ABI на s390. [17]
В июле 2017 года, спустя 30 лет после того, как он начал glibc, Роланд Макграт объявил о своем уходе, «объявив себя почетным сопровождающим и отказавшись от прямого участия в проекте. Эти последние несколько месяцев, если не последние несколько лет, доказали, что я вам больше не нужен». [10]
В 2018 году разработчик Рэймонд Николсон удалил шутку об абортах из исходного кода glibc. Позже ее восстановил Александр Олива после того, как Ричард Столлман потребовал вернуть ее. [18]
В 2021 году требование о передаче авторских прав Фонду свободного программного обеспечения было исключено из проекта. [19]
В 1994 году разработчики ядра Linux ответвили glibc. Их ответвление, «Linux libc», поддерживалось отдельно примерно до 1998 года. Поскольку авторские права были недостаточны, изменения не могли быть объединены обратно в GNU Libc. [20] Когда FSF выпустил glibc 2.0 в январе 1997 года, разработчики ядра прекратили поддержку Linux libc из-за превосходного соответствия glibc 2.0 стандартам POSIX. [21] glibc 2.0 также имела лучшую интернационализацию и более глубокий перевод, поддержку IPv6 , 64-битный доступ к данным, возможности для многопоточных приложений, совместимость с будущими версиями, а код был более переносимым. [22] Последняя использованная версия Linux libc использовала внутреннее имя ( soname ) libc.so.5 . Исходя из этого, glibc 2.x в Linux использует soname libc.so.6 [23] [ нужен лучший источник ]
В 2009 году Debian и ряд производных перешли с glibc на вариант [25] eglibc. [26] Eglibc поддерживался консорциумом, состоящим из Freescale , MIPS , MontaVista и Wind River . [27] Он содержал изменения, которые сделали его более подходящим для встроенного использования , и добавил поддержку архитектур, которые не поддерживались glibc, таких как PowerPC e500 . Код eglibc был объединен обратно в glibc в версии 2.20. [28] С 2014 года eglibc прекращена. Yocto Project и Debian также вернулись к glibc после выпуска Debian Jessie . [29]
Начиная с 2001 года, развитие библиотеки курировалось комитетом, [30] с Ульрихом Дреппером [31], который оставался ведущим спонсором и сопровождающим. Создание руководящего комитета было окружено общественными спорами, поскольку Ульрих Дреппер открыто описал его как провалившийся враждебный захват Ричарда Столлмана . [32] [33] [34] [35]
В марте 2012 года руководящий комитет проголосовал за самороспуск и отстранение Drepper в пользу процесса разработки, инициированного сообществом, при этом Райан Арнольд, Максим Кувырков, Джозеф Майерс, Карлос О'Донелл и Александр Олива взяли на себя ответственность за поддержку GNU (но без дополнительных полномочий по принятию решений). [36] [37] [38]
glibc предоставляет функциональные возможности, требуемые Единой спецификацией UNIX , POSIX (1c, 1d и 1j), а также некоторые функциональные возможности, требуемые интерфейсами ISO C11 , ISO C99 , Berkeley Unix (BSD), System V Interface Definition (SVID) и X/Open Portability Guide (XPG), выпуск 4.2, со всеми расширениями, общими для систем, совместимых с XSI (X/Open System Interface), вместе со всеми расширениями X/Open UNIX.
Кроме того, glibc также предоставляет расширения, которые были признаны полезными или необходимыми при разработке GNU .
glibc используется в системах, которые работают на многих различных ядрах и различных аппаратных архитектурах. Чаще всего он используется в системах, использующих ядро Linux на оборудовании x86 , однако официально поддерживаемое оборудование [39] включает: 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 . [40] Он также используется (в отредактированной форме) и называется libroot.so в BeOS и Haiku . [41]
glibc критиковали как « раздутую » и более медленную, чем другие библиотеки в прошлом, например, Линусом Торвальдсом [42] и программистами встроенного Linux . По этой причине было создано несколько альтернативных стандартных библиотек C , которые подчеркивают меньший размер. Однако многие проекты для небольших устройств используют GNU libc вместо меньших альтернатив из-за ее поддержки приложений, соответствия стандартам и полноты. Примерами являются Openmoko [43] и Familiar Linux для карманных компьютеров iPaq (при использовании программного обеспечения дисплея GPE ). [44]
glibc не реализует интерфейсы проверки границ, определенные в C11 , и не реализовывал strlcpy и strlcat [45] [46] до 2023 года на том основании, что «на практике эти функции могут вызывать проблемы, поскольку их предполагаемое использование поощряет скрытое усечение данных, добавляет сложности и неэффективности и не предотвращает все переполнения буфера в местах назначения». [47] В FAQ указано, что интерфейсы проверки границ являются необязательными в стандарте ISO и что snprintf доступен в качестве альтернативы. [47]
Существуют слои совместимости (« shims »), позволяющие программам, написанным для других экосистем, работать на системах, предлагающих интерфейс glibc. К ним относятся libhybris , слой совместимости для Bionic от Android , и Wine , который можно рассматривать как слой совместимости API Windows с glibc и другими собственными API, доступными в Unix-подобных системах.
LGPL-2.1-or-later в заголовках
-2.1-or-later в заголовках
LGPL-2.0-or-later в заголовках
библиотек готовы. У Роланда Макграта [...] есть почти полный набор функций библиотеки 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, которые явно имеют политические цели (что, конечно, святотатство) и, возможно, что мне плевать на Winblowz (если последнее вообще имеет значение). Ничего из этого не изменится никоим образом.
теперь о не очень приятных вещах. Недавно Столлман попытался осуществить то, что я бы назвал враждебным поглощением разработки glibc. Он пытался сговориться за моей спиной и убедить других основных разработчиков взять управление в свои руки, чтобы в итоге он оказался у руля и мог диктовать все, что ему заблагорассудится. Эта попытка провалилась, но он продолжал оказывать давление на людей повсюду, и это стало действительно отвратительно. В конце концов я согласился на создание так называемого "руководящего комитета" (SC).
libroot.so не является частью проекта GNU и включен в исходный код Haiku.
будем использовать glibc (не uClibC) ... Альтернативы могут сэкономить больше места и быть более оптимизированными, но с большей вероятностью создадут нам головную боль при интеграции
Вопрос: какая версия GLIBC использовалась для сборки Familiar 0.8.4 ? Ответ: 2.3.3