stringtranslate.com

глибк

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

История

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

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

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

Примечания

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

Ссылки

  1. ^ Корбет, Джонатан (28 марта 2012 г.). «Поворотный момент для GNU libc». LWN.net. Архивировано из оригинала 23 апреля 2016 г. Получено 5 апреля 2012 г.
  2. ^ "Библиотека GNU C версии 2.40 уже доступна". 22 июля 2024 г. Получено 23 июля 2024 г.
  3. ^ ab "sourceware.org Git – glibc.git/blob – Makefile". sourceware.org . Архивировано из оригинала 10 июня 2021 г. . Получено 10 июня 2021 г. . LGPL-2.1-or-later в заголовках
  4. ^ "sourceware.org Git – glibc.git/commit – Обновление до LGPL v.2.1". sourceware.org . 6 июля 2001 г. Архивировано из оригинала 10 июня 2021 г. . Получено 10 июня 2021 г. LGPL -2.1-or-later в заголовках
  5. ^ "glibc-1.04.tar.Z". 4 сентября 1992 г. Архивировано из оригинала 22 декабря 2021 г. Получено 22 декабря 2021 г.
  6. ^ "sourceware.org Git – glibc.git/commit – Initial import: Makefile". sourceware.org . 18 февраля 1995 г. Архивировано из оригинала 10 июня 2021 г. Получено 10 июня 2021 г. LGPL-2.0-or-later в заголовках
  7. ^ "sourceware.org Git – glibc.git/blob – NEWS". Архивировано из оригинала 21 марта 2022 г. Получено 26 апреля 2019 г.
  8. ^ "sourceware.org Git – glibc.git/blob – NEWS". Архивировано из оригинала 26 сентября 2019 г. Получено 26 апреля 2019 г.
  9. ^ "Библиотека GNU C версии 2.32 уже доступна". sourceware.org . Архивировано из оригинала 28 сентября 2020 г. . Получено 13 августа 2020 г. .
  10. ^ ab "Роланд МакГрат покидает пост сопровождающего glibc [LWN.net]". lwn.net . 7 июля 2017 г. Архивировано из оригинала 1 августа 2020 г. Получено 8 июля 2017 г.
  11. ^ Чиргвин, Ричард (10 июля 2017 г.). «Роланд Макграт уходит с поста сопровождающего glibc после 30 лет». The Register . Situation Publishing. Архивировано из оригинала 7 марта 2024 г. Получено 1 июня 2024 г.
  12. ^ "GNU's Bulletin, vol. 1 no. 4, February, 1988". Архивировано из оригинала 16 апреля 2016 года . Получено 16 апреля 2014 года . Большинство библиотек готовы. У Роланда Макграта [...] есть почти полный набор функций библиотеки ANSI C. Мы надеемся, что они будут готовы этой весной.
  13. ^ "GNU's Bulletin, vol. 1 no. 12". Архивировано из оригинала 11 марта 2016 г. Получено 16 апреля 2014 г. Теперь он содержит все функции ANSI C-1989 и POSIX.1-1990, а также ведется работа над функциями POSIX.2 и Unix (BSD и System V)
  14. ^ ab Corbet, Jonathan (28 марта 2012 г.). «Поворотный момент для GNU libc». LWN.net. Архивировано из оригинала 23 апреля 2016 г. Получено 5 апреля 2012 г. Из почти 19 000 коммитов, найденных в git-репозитории проекта (содержащем изменения с 1995 года), более 12 000 были сделаны Ульрихом.
  15. ^ "Glibc наконец-то бесплатное программное обеспечение – The H Open: новости и возможности". H-online . Архивировано из оригинала 21 марта 2022 года . Получено 19 сентября 2021 года .
  16. ^ Фиппс, Саймон (2 сентября 2010 г.). «Gnu/Linux: Наконец-то это действительно свободное программное обеспечение». InfoWorld . Архивировано из оригинала 28 октября 2021 г. . Получено 19 сентября 2021 г. .
  17. ^ Корбет, Джонатан. "The glibc s390 ABI break [LWN.net]". LWN.net . Архивировано из оригинала 17 марта 2022 г. . Получено 17 марта 2022 г. .
  18. ^ Claburn, Thomas. "Glibc 'abortion joke' diff tiff leaves Richard Stallman miffed". The Register . Архивировано из оригинала 17 января 2023 года . Получено 17 января 2023 года .
  19. ^ Halfacree, Gareth. "Проекты с открытым исходным кодом glibc и gnulib стремятся разорвать связи с авторскими правами с Free Software Foundation". The Register . Архивировано из оригинала 17 января 2023 г. Получено 17 января 2023 г.
  20. ^ "История glibc и Linux libc". Free Software Magazine . Архивировано из оригинала 26 сентября 2021 г. Получено 10 мая 2021 г.
  21. ^ "Разветвление: это может случиться даже с вами". 24 октября 2000 г. Архивировано из оригинала 15 сентября 2009 г. Разделение между GNU LIBC и Linux LIBC — оно продолжалось годами, пока Linux стабилизировался, а затем ответвления снова объединились в один проект
  22. Ли, Эллиот (9 июля 1998 г.). "Техническое сравнение glibc 2.x с устаревшими системными библиотеками". Архивировано из оригинала 11 апреля 2004 г.
  23. ^ Moen, Rick (20 мая 2021 г.) [14 ноября 1999 г.]. "Fear of Forking essay". linuxmafia.com . 6. glibc --> Linux libc --> glibc. Архивировано из оригинала 27 ноября 2023 г.
  24. ^ "EGLIBC: FAQ". eglibc.org . Архивировано из оригинала 17 марта 2012 г. Получено 16 сентября 2021 г.
  25. ^ Разработчики eglibc подчеркивают, что eglibc — это не ответвление glibc, а вариант, принимающий исправления из основного проекта glibc. [24]
  26. ^ Вадува, Александру (2016). Linux: разработка встроенных систем: используйте возможности Linux для разработки захватывающих и мощных проектов встроенных Linux: курс из трех модулей. Алекс Гонсалес, Крис Симмондс. Бирмингем, Великобритания: Packt Publishing. стр. 24. ISBN 978-1-78712-445-5. OCLC  960471438.
  27. Штиберт, Юлиус (6 мая 2009 г.). «Debian wechselt zur Eglibc». golem.de . Архивировано из оригинала 16 сентября 2021 года . Проверено 16 сентября 2021 г.
  28. ^ Симмондс, Крис (2017). Освоение программирования встроенного Linux: раскройте весь потенциал встроенного Linux (2-е изд.). Бирмингем, Великобритания. стр. 26. ISBN 978-1-78728-885-0. OCLC  995052708.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  29. ^ Вадува, Александру (2015). Изучение встраиваемого Linux с использованием проекта Yocto: разработка мощных встраиваемых систем Linux с компонентами проекта Yocto. Бирмингем, Великобритания. стр. 29. ISBN 978-1-78439-519-3. OCLC  914797028.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  30. ^ "glibc homepage". Архивировано из оригинала 22 апреля 2016 г. . Получено 16 апреля 2014 г. В 2001 г. был сформирован Руководящий комитет библиотеки GNU C ..., в который в настоящее время входят Марк Браун, Пол Эггерт, Андреас Йегер, Якуб Елинек, Роланд Макграт и Андреас Шваб.
  31. ^ "Ulrich Drepper". LinkedIn. Архивировано из оригинала 10 сентября 2014 года . Получено 13 июня 2012 года .
  32. ^ онлайн, Heise (19 августа 2001 г.). «Критический обзор Столлмана с открытым исходным кодом». heise онлайн (на немецком языке). Архивировано из оригинала 16 сентября 2021 года . Проверено 16 сентября 2021 г.
  33. ^ Drepper, Ulrich (26 июня 2000 г.). "RMS снова взялся за дело". sourceware.org. Архивировано из оригинала 28 декабря 2012 г. Получено 20 ноября 2015 г. Несколько недель назад RMS начал следующую атаку на меня (одно письмо, за которым последовали косвенные попытки оказать влияние, за которыми последовало еще одно письмо сегодня). Суть в том, что он жалуется, что я не следую "политике GNU" и поэтому должен быть заменен руководящим комитетом, частью которого я мог бы быть. Некоторые из вас (а именно Роланд и Андреас С.) вероятно знают об этом, поскольку он предложил обоих в качестве других членов комитета. Кроме того, в списке был Марк Браун (я знаю кого-то с таким именем в IBM, кто также вписался бы в эту группу, но я не уверен, действительно ли это он.) В любом случае, я полностью это отвергаю. Это совсем не помогает, верно как раз обратное. Во-первых, я не знаю ни одной существенной политики, которую я нарушаю. Единственное, что я не выполняю приказы RMS, которые явно имеют политические цели (что, конечно, святотатство) и, возможно, что мне плевать на Winblowz (если последнее вообще имеет значение). Ничего из этого не изменится никоим образом.
  34. ^ Drepper, Ulrich (15 августа 2001 г.). "glibc 2.2.4". sourceware.com. Архивировано из оригинала 9 апреля 2016 г. Получено 29 ноября 2015 г. А теперь о не очень приятных вещах. Недавно Столлман попытался осуществить то, что я бы назвал враждебным поглощением разработки glibc. Он пытался сговориться за моей спиной и убедить других основных разработчиков взять управление в свои руки, чтобы в итоге он оказался у руля и мог диктовать все, что ему заблагорассудится. Эта попытка провалилась, но он продолжал оказывать давление на людей повсюду, и это стало действительно отвратительно. В конце концов я согласился на создание так называемого "руководящего комитета" (SC).
  35. ^ rms-accused-of-attempting-glibc-hostile-takeover Архивировано 1 августа 2020 г. на Wayback Machine на slashdot .com 19 августа 2001 г.
  36. ^ "The GNU C Library Steering Committee disbands – The H Open: News and Features". H-Online . Архивировано из оригинала 21 марта 2023 г. Получено 16 марта 2023 г.
  37. ^ МакГрат, Роланд (26 марта 2012 г.). «glibc steering committee dissolving». Sourceware.org. Архивировано из оригинала 26 сентября 2019 г. Получено 13 июня 2012 г.
  38. ^ Майерс, Джозеф С. (26 марта 2012 г.). «Разработка и поддержка библиотеки GNU C». Sourceware.org. Архивировано из оригинала 26 сентября 2019 г. Получено 13 июня 2012 г.
  39. ^ "The GNU C Library machine maintainers". Архивировано из оригинала 18 апреля 2016 года . Получено 8 октября 2015 года .
  40. ^ Бартли, Дэвид; Спанг, Майкл. "GNU/kOpenSolaris (GNU libc/base + OpenSolaris kernel)". Архивировано из оригинала 6 ноября 2019 г. Получено 16 декабря 2008 г.
  41. ^ "Haiku Source". GitHub . Архивировано из оригинала 1 мая 2016 г. Получено 15 октября 2014 г. libroot.so не является частью проекта GNU и включен в исходный код Haiku.
  42. ^ Torvalds, Linus (9 января 2002 г.). "Posting to the glibc mailing list". Архивировано из оригинала 12 октября 2015 г. Получено 22 июля 2007 г.
  43. ^ "Компоненты OpenMoko". Архивировано из оригинала 22 апреля 2016 г. Получено 13 мая 2008 г. Мы будем использовать glibc (не uClibC) ... Альтернативы могут сэкономить больше места и быть более оптимизированными, но с большей вероятностью создадут нам головную боль при интеграции
  44. ^ "Re: [Familiar] Какой glibc для Familiar 0.8.4 ?". Архивировано из оригинала 12 марта 2022 г. Получено 26 ноября 2018 г. Вопрос: какая версия GLIBC использовалась для сборки Familiar 0.8.4 ? Ответ: 2.3.3
  45. ^ Керриск, Майкл. "Взлеты и падения strlcpy()". LWN.net . Архивировано из оригинала 9 декабря 2023 г. . Получено 9 декабря 2023 г. .
  46. ^ Корбет, Джонатан. "Добавление strlcpy() в glibc". LWN.net . Архивировано из оригинала 9 декабря 2023 г. . Получено 9 декабря 2023 г. .
  47. ^ ab "FAQ". sourceware.org . Архивировано из оригинала 9 декабря 2023 г. . Получено 9 декабря 2023 г. .

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