stringtranslate.com

glibc

Библиотека 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 и другие.

История

Ульрих Дреппер в 2007 году, главный автор glibc.
Библиотека GNU C — это оболочка системных вызовов ядра Linux .
Ядро Linux и библиотека GNU C вместе образуют Linux API . После компиляции двоичные файлы предлагают ABI .

Первоначально проект 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-подобных системах.

Смотрите также

Примечания

  1. ^ LGPL-2.1 или более поздняя версия с 6 июля 2001 г., версия 2.2.4. [3] [4]
  2. ^ LGPL-2.0 или более поздняя версия с 1992 г. по 5 июля 2001 г. Версия 1.04? до 2.2.3. [5] [6]

Рекомендации

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

Внешние ссылки