glibc
Оригинальный автор(ы) | Роланд МакГрат |
---|---|
Разработчик(и) | Проект GNU , большая часть вклада Ульриха Дреппера |
Первоначальный выпуск | 1987 год [1] |
Стабильная версия | 2.40 [2] / 22 июля 2024 г. |
Репозиторий | |
Написано в | С |
Операционная система | Unix-подобный |
Тип | Библиотека времени выполнения |
Лицензия | 2001: LGPL-2.1 или новее [а] 1992: LGPL-2.0 или более поздняя версия [б] |
Веб-сайт | www |
Библиотека GNU C , широко известная как glibc , представляет собой в рамках проекта GNU реализацию стандартной библиотеки C . Это оболочка системных вызовов ядра 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] [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 года, разработчики ядра прекратили выпуск libc Linux из-за превосходного соответствия 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 и Debian также вернулись на glibc после выпуска Debian Jessie . [29]
Руководящий комитет
[ редактировать ]Начиная с 2001 года за развитием библиотеки следил комитет. [30] с Ульрихом Дреппером [31] остался в качестве ведущего участника и сопровождающего. Создание руководящего комитета вызвало общественную полемику, поскольку Ульрих Дреппер открыто назвал его неудачным враждебного поглощения маневром Ричарда Столлмана . [32] [33] [34] [35]
В марте 2012 года руководящий комитет проголосовал за самороспуск и отстранение Дреппера в пользу процесса разработки, управляемого сообществом, при этом Райан Арнольд, Максим Кувырков, Джозеф Майерс, Карлос О'Донелл и Александр Олива взяли на себя ответственность за поддержку GNU (но никаких дополнительных полномочий по принятию решений). [36] [37] [38]
Функциональность
[ редактировать ]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 , однако официально поддерживаемое оборудование [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]
Слои совместимости
[ редактировать ]Существуют уровни совместимости (« прокладки »), позволяющие программам, написанным для других экосистем, работать на системах, предлагающих интерфейс glibc. К ним относятся libhybris , уровень совместимости для Android Bionic , и Wine , который можно рассматривать как уровень совместимости API Windows с glibc и другими собственными API, доступными в Unix-подобных системах.
См. также
[ редактировать ]Примечания
[ редактировать ]Ссылки
[ редактировать ]- ^ Корбет, Джонатан (28 марта 2012 г.). «Поворотный момент для GNU libc» . LWN.net. Архивировано из оригинала 23 апреля 2016 года . Проверено 5 апреля 2012 г.
- ^ «Библиотека GNU C версии 2.40 теперь доступна» . 22 июля 2024 г. Проверено 23 июля 2024 г.
- ^ Jump up to: а б «sourceware.org Git – glibc.git/blob – Makefile» . sourceware.org . Архивировано из оригинала 10 июня 2021 года . Проверено 10 июня 2021 г.
LGPL-2.1 или более поздняя версия в заголовках
- ^ «sourceware.org Git – glibc.git/commit – обновление до LGPL v.2.1» . исходное программное обеспечение.org . 6 июля 2001 г. Архивировано из оригинала 10 июня 2021 г. Проверено 10 июня 2021 г.
LGPL-2.1 или более поздняя версия в заголовках
- ^ "glibc-1.04.tar.Z" . 4 сентября 1992 года. Архивировано из оригинала 22 декабря 2021 года . Проверено 22 декабря 2021 г.
- ^ «sourceware.org Git – glibc.git/commit – Первоначальный импорт: Makefile» . исходное программное обеспечение.org . 18 февраля 1995 года. Архивировано из оригинала 10 июня 2021 года . Проверено 10 июня 2021 г.
LGPL-2.0 или более поздняя версия в заголовках
- ^ «sourceware.org Git – glibc.git/blob – НОВОСТИ» . Архивировано из оригинала 21 марта 2022 года . Проверено 26 апреля 2019 г.
- ^ «sourceware.org Git – glibc.git/blob – НОВОСТИ» . Архивировано из оригинала 26 сентября 2019 года . Проверено 26 апреля 2019 г.
- ^ «Библиотека GNU C версии 2.32 теперь доступна» . исходное программное обеспечение.org . Архивировано из оригинала 28 сентября 2020 года . Проверено 13 августа 2020 г. .
- ^ Jump up to: а б «Роланд МакГрат уходит с поста сопровождающего glibc [LWN.net]» . lwn.net . 7 июля 2017 года. Архивировано из оригинала 1 августа 2020 года . Проверено 8 июля 2017 г.
- ^ Чиргвин, Ричард (10 июля 2017 г.). «Роланд МакГрат уходит с поста сопровождающего glibc после 30 лет работы» . Регистр . Ситуация Издательство. Архивировано из оригинала 7 марта 2024 года . Проверено 1 июня 2024 г.
- ^ «Бюллетень GNU, том 1, № 4, февраль 1988 г.» . Архивировано из оригинала 16 апреля 2016 года . Проверено 16 апреля 2014 г.
Большинство библиотек готовы. Роланд МакГрат [...] имеет почти полный набор функций библиотеки ANSI C. Мы надеемся, что они будут готовы этой весной.
- ^ «Бюллетень GNU, том 1, № 12» . Архивировано из оригинала 11 марта 2016 года . Проверено 16 апреля 2014 г.
Теперь он содержит все функции ANSI C-1989 и POSIX.1-1990, а также ведется работа над функциями POSIX.2 и Unix (BSD и System V).
- ^ Jump up to: а б Корбет, Джонатан (28 марта 2012 г.). «Поворотный момент для GNU libc» . LWN.net. Архивировано из оригинала 23 апреля 2016 года . Проверено 5 апреля 2012 г.
Из почти 19 000 коммитов, найденных в git-репозитории проекта (который содержит изменения, начиная с 1995 года), более 12 000 были сделаны Ульрихом.
- ^ «Glibc наконец-то стало свободным программным обеспечением – The H Open: новости и возможности» . Х-онлайн . Архивировано из оригинала 21 марта 2022 года . Проверено 19 сентября 2021 г.
- ^ Фиппс, Саймон (2 сентября 2010 г.). «Gnu/Linux: Наконец-то это действительно свободное программное обеспечение» . Инфомир . Архивировано из оригинала 28 октября 2021 года . Проверено 19 сентября 2021 г.
- ^ Корбет, Джонатан. «Взлом ABI glibc s390 [LWN.net]» . LWN.net . Архивировано из оригинала 17 марта 2022 года . Проверено 17 марта 2022 г.
- ^ Клэберн, Томас. «Разница в шутке Glibc об абортах приводит Ричарда Столлмана в негодование» . Регистр . Архивировано из оригинала 17 января 2023 года . Проверено 17 января 2023 г.
- ^ Хальфакри, Гарет. «Проекты с открытым исходным кодом glibc и gnulib стремятся разорвать связи с авторским правом с Фондом свободного программного обеспечения» . Регистр . Архивировано из оригинала 17 января 2023 года . Проверено 17 января 2023 г.
- ^ «История glibc и Linux libc» . Журнал свободного программного обеспечения . Архивировано из оригинала 26 сентября 2021 года . Проверено 10 мая 2021 г.
- ^ «Раздвоение: это может случиться даже с вами» . 24 октября 2000 г. Архивировано из оригинала 15 сентября 2009 г.
Раскол между GNU LIBC и Linux LIBC - он продолжался годами, пока Linux стабилизировался, а затем ответвления снова объединились в один проект.
- ^ Ли, Эллиот (9 июля 1998 г.). «Техническое сравнение glibc 2.x с устаревшими системными библиотеками» . Архивировано из оригинала 11 апреля 2004 года.
- ^ Моен, Рик (20 мая 2021 г.) [14 ноября 1999 г.]. Эссе «Страх перед разветвлением» . linuxmafia.com . 6. glibc --> Linux libc --> glibc. Архивировано из оригинала 27 ноября 2023 года.
- ^ «EGLIBC: Часто задаваемые вопросы» . eglibc.org . Архивировано из оригинала 17 марта 2012 года . Проверено 16 сентября 2021 г.
- ^ Разработчики eglibc подчеркнули, что eglibc — это не форк glibc, а вариант, принимающий патчи из вышестоящего проекта glibc. [24]
- ^ Вадува, Александру (2016). Linux: разработка встраиваемых систем: используйте возможности Linux для разработки увлекательных и мощных проектов встраиваемых систем Linux: курс из трех модулей . Алекс Гонсалес, Крис Симмондс. Бирмингем, Великобритания: Packt Publishing. п. 24. ISBN 978-1-78712-445-5 . OCLC 960471438 .
- ^ Штиберт, Юлиус (6 мая 2009 г.). «Debian переключается на Eglibc» . golem.de . Архивировано из оригинала 16 сентября 2021 года . Проверено 16 сентября 2021 г.
- ^ Симмондс, Крис (2017). Освоение программирования для встроенного Linux: раскрыть весь потенциал встроенного Linux (2-е изд.). Бирмингем, Великобритания. п. 26. ISBN 978-1-78728-885-0 . OCLC 995052708 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Вадува, Александру (2015). Изучение встроенного Linux с помощью проекта Yocto: разрабатывайте мощные встроенные системы Linux с помощью компонентов проекта Yocto . Бирмингем, Великобритания. п. 29. ISBN 978-1-78439-519-3 . OCLC 914797028 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ "домашняя страница glibc" . Архивировано из оригинала 22 апреля 2016 года . Проверено 16 апреля 2014 г.
В 2001 году был сформирован Руководящий комитет библиотеки GNU C..., в который в настоящее время входят Марк Браун, Пол Эггерт, Андреас Йегер, Якуб Елинек, Роланд МакГрат и Андреас Шваб.
- ^ «Ульрих Дреппер» . LinkedIn. Архивировано из оригинала 10 сентября 2014 года . Проверено 13 июня 2012 г.
- ^ онлайн, Хейсе (19 августа 2001 г.). «Разработчик открытого исходного кода критикует Столлмана» . heise онлайн (на немецком языке). Архивировано из оригинала 16 сентября 2021 года . Проверено 16 сентября 2021 г.
- ^ Дреппер, Ульрих (26 июня 2000 г.). «RMS снова в деле» . исходное программное обеспечение.org. Архивировано из оригинала 28 декабря 2012 года . Проверено 20 ноября 2015 г.
Несколько недель назад RMS начала очередную атаку на меня (одно письмо, за которым последовали косвенные попытки оказать влияние, а сегодня последовало еще одно письмо). Суть в том, что он жалуется, что я не следую «политике GNU», и поэтому меня должен заменить руководящий комитет, частью которого я мог бы быть. Некоторые из вас (а именно Роланд и Андреас С.), вероятно, знают об этом, поскольку он предложил обоих в качестве других членов комитета. Кроме того, в списке значился Марк Браун (я знаю человека с таким именем в IBM, который тоже мог бы вписаться в эту группу, но я не уверен, действительно ли это он). В любом случае, я это полностью отвергаю. Это совсем не помогает, наоборот. Во-первых, мне не известно о каких-либо существенных правилах, которые я нарушаю. Единственные из них заключаются в том, что я не выполняю приказы RMS, которые явно имеют политические намерения (что, конечно, является кощунством) и, возможно, меня не волнует Винблоуз (если последнее вообще имеет значение). Ничего из этого никак не изменится.
- ^ Дреппер, Ульрих (15 августа 2001 г.). "glibc 2.2.4" . исходное ПО.com. Архивировано из оригинала 9 апреля 2016 года . Проверено 29 ноября 2015 г.
А теперь о не очень приятных вещах. Столлман недавно предпринял то, что я бы назвал враждебным поглощением разработки glibc. Он пытался сговориться за моей спиной и убедить других основных разработчиков взять на себя управление, чтобы в конце концов он получил контроль и мог диктовать все, что ему заблагорассудится. Эта попытка провалилась, но он продолжал оказывать давление на людей повсюду, и это стало действительно ужасным. В конце концов я согласился на создание так называемого «руководящего комитета» (РК).
- ↑ rms-acused-of-attempting-glibc-hostile-takeover. Архивировано 1 августа 2020 г. на Wayback Machine на slashdot.com 19 августа 2001 г.
- ^ «Руководящий комитет библиотеки GNU C распускается – The H Open: новости и возможности» . Х-Онлайн . Архивировано из оригинала 21 марта 2023 года . Проверено 16 марта 2023 г.
- ^ МакГрат, Роланд (26 марта 2012 г.). «роспуск руководящего комитета glibc» . Исходное программное обеспечение.org. Архивировано из оригинала 26 сентября 2019 года . Проверено 13 июня 2012 г.
- ^ Майерс, Джозеф С. (26 марта 2012 г.). «Разработка и сопровождение библиотеки GNU C» . Исходное программное обеспечение.org. Архивировано из оригинала 26 сентября 2019 года . Проверено 13 июня 2012 г.
- ^ «Сопровождающие машины библиотеки GNU C» . Архивировано из оригинала 18 апреля 2016 года . Проверено 8 октября 2015 г.
- ^ Бартли, Дэвид; Спанг, Майкл. «GNU/kOpenSolaris (GNU libc/base + ядро OpenSolaris)» . Архивировано из оригинала 6 ноября 2019 года . Проверено 16 декабря 2008 г.
- ^ «Источник Хайку» . Гитхаб . Архивировано из оригинала 1 мая 2016 года . Проверено 15 октября 2014 г.
libroot.so не является частью проекта GNU и включен в исходный код Haiku.
- ^ Торвальдс, Линус (9 января 2002 г.). «Публикация в списке рассылки glibc» . Архивировано из оригинала 12 октября 2015 года . Проверено 22 июля 2007 г.
- ^ «Компоненты OpenMoko» . Архивировано из оригинала 22 апреля 2016 года . Проверено 13 мая 2008 г.
Мы будем использовать glibc (не uClibC)... Альтернативы могут сэкономить больше места и быть более оптимизированными, но с большей вероятностью доставят нам головную боль при интеграции.
- ^ "Re: [Знакомый] Какой glibc для Familiar 0.8.4?" . Архивировано из оригинала 12 марта 2022 года . Проверено 26 ноября 2018 г.
Вопрос: какая версия GLIBC использовалась для сборки Familiar 0.8.4? Ответ: 2.3.3
- ^ Керриск, Майкл. «Взлёты и падения strlcpy()» . LWN.net . Архивировано из оригинала 9 декабря 2023 года . Проверено 9 декабря 2023 г.
- ^ Корбет, Джонатан. «Добавление strlcpy() в glibc» . LWN.net . Архивировано из оригинала 9 декабря 2023 года . Проверено 9 декабря 2023 г.
- ^ Jump up to: а б "ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ" . исходное программное обеспечение.org . Архивировано из оригинала 9 декабря 2023 года . Проверено 9 декабря 2023 г.