Библиотека GNU C - GNU C Library
Оригинальный автор (ы) | Роланд МакГрат |
---|---|
Разработчики) | Проект GNU |
изначальный выпуск | 1987[1] |
Стабильный выпуск | 2.32[2] (5 августа 2020 г. ) [±] |
Репозиторий | |
Написано в | C |
Операционная система | Unix-подобный |
Тип | Библиотека времени исполнения |
Лицензия | LGPLv2.1[3] |
Интернет сайт | www |
В Библиотека GNU C, широко известный как glibc, это Проект GNU реализация Стандартная библиотека C. Несмотря на свое название, теперь он также напрямую поддерживает C ++ (и, косвенно, другие языки программирования ). Он был начат в начале 1990-х годов Фонд свободного программного обеспечения (FSF) за их GNU Операционная система.
Выпущено под Стандартная общественная лицензия ограниченного применения GNU,[3] glibc это бесплатно программное обеспечение. Проект библиотеки GNU C предоставляет базовые библиотеки для системы GNU и систем GNU / Linux, а также многих других систем, использующих Linux как ядро. Эти библиотеки предоставляют важные API включая ISO C11, POSIX.1-2008, BSD, API-интерфейсы для конкретных ОС и многое другое. Эти API включают такие базовые возможности, как открыто, читать, записывать, маллок, printf, getaddrinfo, dlopen, pthread_create, склеп, авторизоваться, выход и больше.
История
Первоначально проект glibc был написан в основном Роланд МакГрат, работая на Фонд свободного программного обеспечения (FSF) в 1980-х, будучи подростком.[4]
В феврале 1988 года FSF описал glibc как почти завершившую функциональность, требуемую ANSI C.[5] К 1992 году в нем были реализованы функции ANSI C-1989 и POSIX.1-1990, и велась работа над POSIX.2.[6]
В сентябре 1995 года Ульрих Дреппер сделал свой первый вклад в проект glibc и в течение 1990-х годов постепенно стал основным разработчиком и сопровождающим glibc.[7] Дреппер много лет занимал должность сопровождающего и до 2012 года собрал 63% всех обязательств по проекту.[8]
Linux libc
В начале 1990-х годов разработчики Ядро Linux раздвоенный glibc. Их форк «Linux libc» поддерживался отдельно.
Когда в январе 1997 года FSF выпустила glibc 2.0, разработчики ядра прекратили поддержку Linux libc из-за превосходного соответствия glibc 2.0 стандартам POSIX.[9] glibc 2.0 тоже был лучше интернационализация и более глубокий перевод, IPv6 возможности, 64-битный доступ к данным, возможности для многопоточных приложений, совместимость с будущими версиями и более переносимый код.[10]
Последняя используемая версия Linux libc использовала внутреннее имя (soname ) libc.so.5. Исходя из этого, glibc 2.x в Linux использует soname libc.so.6[11] (Альфа и IA64 архитектуры теперь используют libc.so.6.1, вместо). Имя файла * .so часто сокращается как libc6 (например, в имени пакета в Debian ) в соответствии с обычными соглашениями для библиотек.
В соответствии с Ричард Столмен, FSF не смог объединить изменения, внесенные в libc Linux, в glibc из-за неопределенного авторства. Проект GNU довольно строго относится к записи авторских прав и авторов.[12]
Установка руководящего комитета
Начиная с 2001 года развитие библиотеки курировал комитет,[13] с Ульрих Дреппер[14] остается ведущим участником и сопровождающим. В руководящий комитет установка была окружена общественными спорами, так как Ульрих Дреппер открыто назвал ее провальной. враждебный захват маневр Ричарда Столмена.[15][16][17]
Миграция на Git, распределенную VCS
Хотя ранее в CVS репозиторий, в 2009 году glibc был перенесен на Git (распределенная система контроля версий) репозиторий на Исходное ПО.[18]
Debian переходит на EGLIBC и обратно
После долгих разногласий по поводу стиля руководства Дреппера и признания вклада извне,[19][20][21] Debian публично переключился на форк glibc EGLIBC в 2009 [22] и вернемся к glibc с выпуском Debian 8.0 (Jessie) в апреле 2015 года.[23]
Руководящий комитет распускается
В марте 2012 года руководящий комитет проголосовал за роспуск и удаление Drepper в пользу процесса разработки, управляемого сообществом, с Райаном Арнольдом, Максимом Кувырковым, Джозефом Майерсом, Карлосом О'Донеллом и Александр Олива несет ответственность за сопровождение GNU (но без дополнительных полномочий по принятию решений).[24][25]
После изменения в поддержке glibc Debian и другие проекты, которые перешли на альтернативы, мигрировали обратно в glibc.[26] С начала 2014 года форк glibc EGLIBC больше не разрабатывается, так как его «цели теперь решаются непосредственно в GLIBC».
В июле 2017 года, через 30 лет после создания glibc, Роланд МакГрат объявил о своем уходе, «объявив себя почетным сопровождающим и отказавшись от прямого участия в проекте. Последние несколько месяцев, если не последние несколько лет, доказали, что вы этого не сделаете. нужен мне больше ".[4]
История версий
Для большинства систем версию glibc можно получить, выполнив файл lib (например, /lib/libc.so.6).
Версия | Дата | Примечания | Принятие |
---|---|---|---|
0.1 – 0.6 | Октябрь 1991 - февраль 1992 | ||
1.0 | Февраль 1992 г. | ||
1.01 – 1.09.3 | Март 1992 г. - декабрь 1994 г. | ||
1.90 – 1.102 | Май 1996 - январь 1997 | ||
2.0 | Январь 1997 г. | ||
2.0.1 | Январь 1997 г. | ||
2.0.2 | Февраль 1997 г. | ||
2.0.91 | Декабрь 1997 г. | ||
2.0.95 | Июль 1998 г. | ||
2.1 | Февраль 1999 г. | ||
2.1.1 | Март 1999 г. | ||
2.2 | Ноябрь 2000 г. | ||
2.2.1 | Январь 2001 | ||
2.2.2 | Февраль 2001 г. | ||
2.2.3 | Март 2001 г. | ||
2.2.4 | Июль 2001 г. | ||
2.3 | Октябрь 2002 г. | ||
2.3.1 | Октябрь 2002 г. | ||
2.3.2 | Февраль 2003 г. | Debian 3.1 (Сержант) | |
2.3.3 | Декабрь 2003 г. | ||
2.3.4 | Декабрь 2004 г. | Стандарт для Стандартная база Linux (МЗБ) 3,0 | RHEL 4 (Обновление 5) |
2.3.5 | Апрель 2005 г. | SLES 9 | |
2.3.6 | Ноябрь 2005 г. | Debian 4.0 (травление) | |
2.4 | Март 2006 г. | Стандарт для LSB 4.0, начальная inotify поддерживать | SLES 10 |
2.5 | Сентябрь 2006 г. | Полный inotify поддерживать | RHEL 5 |
2.6 | Май 2007 г. | ||
2.7 | Октябрь 2007 г. | Debian 5 (Ленни), Ubuntu 8.04 | |
2.8 | Апрель 2008 г. | ||
2.9 | Ноябрь 2008 г. | ||
2.10 | Май 2009 г. | ||
2.11 | Октябрь 2009 г. | SLES 11, Ubuntu 10.04, eglibc используется в Debian 6 (Сжать) | |
2.12 | Май 2010 г. | RHEL 6 | |
2.13 | Январь 2011 г. | eglibc 2.13 используется в Debian 7 (хрипы) | |
2.14 | Июнь 2011 г. | ||
2.15 | Март 2012 г. | Ubuntu 12.04 и 12.10 | |
2.16 | Июнь 2012 г. | x32 ABI поддерживать, ISO C11 согласие, SystemTap | |
2.17 | Декабрь 2012 г. | 64-битная ARM поддерживать | Ubuntu 13.04, RHEL 7 |
2.18 | август 2013 | Улучшенный C ++ 11 поддерживать. Поддержка Intel TSX блокировка elision. Поддержка Xilinx MicroBlaze и IBM МОЩНОСТЬ8 микроархитектуры. | Fedora 20 |
2.19 | Февраль 2014 | SystemTap зонды для маллок. Поддержка косвенной функции GNU (IFUNC) для ppc32 и ppc64. Новый макрос проверки функций _DEFAULT_SOURCE для замены _SVID_SOURCE и _BSD_SOURCE. Предварительная документация по безопасности для всех функций в руководстве. Изменение ABI в ucontext и jmp_buf для s390 / s390x. | Ubuntu 14.04, eglibc 2.19 используется в Debian 8 (Джесси), openSUSE 13, SLES 12 |
2.20 | Сентябрь 2014 г. | Поддержка блокировок описания файлов | Fedora 21 |
2.21 | Февраль 2015 г. | Новая реализация семафора | Ubuntu 15.04, Fedora 22 |
2.22 | Август 2015 г. | Поддержка для включения Собственный клиент Google (NaCl), которая изначально работала на x86, работала на ARMv7-A, Unicode 7.0 | Fedora 23 |
2.23 | Февраль 2016 г. | Unicode 8.0 | Fedora 24, Ubuntu 16.04 |
2.24 | Август 2016 г. | Некоторые устаревшие функции были удалены | Fedora 25, Ubuntu 16.10 и 17.04, Debian 9 (растяжка) |
2.25 | Февраль 2017 г. | В гетентропия и getrandom функции, а <sys/random.h> добавлен заголовочный файл. | Fedora 26 |
2.26 | Август 2017 г. | Повышенная производительность (поточный кеш для malloc), поддержка Unicode 10 | Fedora 27, Ubuntu 17.10 |
2.27 | Февраль 2018 г. | Оптимизация производительности. RISC-V поддерживать. | Fedora 28, Ubuntu 18.04 |
2.28 | Август 2018 г. | statx , renameat2 , Юникод 11.0.0 | Ubuntu 18.10,[27] RHEL 8.0.0,[28] Debian 10 (Buster),[29] Fedora 29[30][31] |
2.29 | Февраль 2019 г. |
| Ubuntu 19.04,[33] Fedora 30[34][35] |
2.30 | Август 2019 г. | Unicode 12.1.0, динамический компоновщик принимает --preload аргумент для предварительной загрузки общих объектов, Gettid функция была добавлена в Linux, поддержка календаря Minguo (Китайская Республика), новая японская эра добавлена в локаль ja_JP, функции распределения памяти не работают с общим размером объекта больше, чем PTRDIFF_MAX ; CVE -2019-7309 и CVE-2019-9169 фиксированный[36] | Ubuntu 19.10,[37] Fedora 31[38] |
2.31 | Февраль 2020 г. | Исходный C2x стандартная поддержка | Ubuntu 20.04,[39] Fedora 32[40] |
2.32 | Август 2020 г. | Unicode 13.0, атрибут 'access' для более точных предупреждений в GCC 10, то есть для «помощи в обнаружении переполнения буфера и других выходов за границы»[41] | Ubuntu 20.10 |
Функциональность
glibc обеспечивает функциональность, требуемую Единая спецификация UNIX, POSIX (1c, 1d и 1j) и некоторые функции, необходимые для ISO C11, ISO C99, Беркли Unix (BSD) интерфейсы Определение интерфейса System V (SVID) и X / Open Руководство по переносимости (XPG), выпуск 4.2, со всеми расширениями, общими для XSI (X / интерфейс открытой системы ) совместимые системы вместе со всеми расширениями X / Open UNIX.
Кроме того, glibc также предоставляет расширения, которые были сочтены полезными или необходимыми при разработке. GNU.
Поддерживаемое оборудование и ядра
glibc используется в системах, в которых работает множество различных ядра и разные аппаратное обеспечение архитектуры. Чаще всего его используют в системах, использующих Ядро Linux на x86 оборудование, однако, официально поддерживаемое оборудование[42] включает: 32-битная ARM и ее новая 64-битная ISA (AArch64), C-SKY, DEC Alpha, IA-64, Motorola m68k, MicroBlaze, MIPS, Ниос II, PA-RISC, PowerPC, RISC-V, s390, SPARC, и x86 (поддержка старых версий ПЛИТКА ). Он официально поддерживает Херд и Linux ядра. Кроме того, есть сильно пропатченные версии, которые работают на ядрах FreeBSD и NetBSD (откуда Debian GNU / kFreeBSD и Debian GNU / NetBSD системы построены соответственно), а также форк-версия OpenSolaris.[43] Он также используется (в отредактированном виде) и называется libroot.so в BeOS и Хайку.[44]
Использование в небольших устройствах
glibc был раскритикован как "раздутый "и медленнее, чем другие библиотеки в прошлом, например, Линус Торвальдс[45] и встроенный Linux программисты. По этой причине несколько альтернативные стандартные библиотеки C были созданы, которые подчеркивают меньшую занимаемую площадь. Тем не менее, многие проекты для небольших устройств используют GNU libc вместо небольших альтернатив из-за поддержки приложений, соответствия стандартам и полноты. Примеры включают Openmoko[46] и Знакомый Linux для КПК iPaq (при использовании GPE программное обеспечение дисплея).[47]
Слои совместимости
Есть уровни совместимости ("прокладки "), чтобы программы, написанные для других экосистем, могли работать в системах, предлагающих интерфейс glibc. К ним относятся libhybris, уровень совместимости для Android Бионический, и Вино, который можно рассматривать как уровень совместимости из Windows API-интерфейсы для glibc и других собственных API-интерфейсов, доступных в Unix-подобных системах.
Смотрите также
Рекомендации
- ^ Корбет, Джонатан (28 марта 2012 г.). «Поворотный момент для GNU libc». LWN.net.
- ^ Карлос О'Донелл (6 августа 2020 г.). «Библиотека GNU C версии 2.32 теперь доступна» (Список рассылки). Получено 6 августа 2020.
- ^ а б "sourceware.org Git - glibc.git / blob - COPYING.LIB". sourceware.org. Получено 13 сентября 2017.
- ^ а б "Роланд МакГрат покидает пост сопровождающего glibc [LWN.net]". lwn.net. 7 июля 2017 г.. Получено 8 июля 2017.
- ^ "Бюллетень GNU, том 1, № 4, февраль 1988 г.".
Большинство библиотек готово. Роланд МакГрат […] имеет почти полный набор функций библиотеки ANSI C. Надеемся, они будут готовы весной этого года.
- ^ "Бюллетень GNU, том 1, номер 12".
Теперь он содержит все функции ANSI C-1989 и POSIX.1-1990, а также ведется работа над функциями POSIX.2 и Unix (BSD и System V).
- ^ журнал изменений glibc на GitHub.
- ^ Корбет, Джонатан (28 марта 2012 г.). «Поворотный момент для GNU libc». LWN.net.
Из почти 19 000 коммитов, найденных в репозитории проекта git (который содержит изменения с 1995 года), более 12 000 были сделаны Ульрихом.
- ^ "Разветвление: это могло случиться даже с вами". 12 сентября 2008 г.
раскол между GNU LIBC и Linux LIBC - он продолжался годами, пока Linux стабилизировался, а затем форки снова объединились в один проект
- ^ Ли, Эллиот (2001). «Техническое сравнение glibc 2.x с устаревшими системными библиотеками». Архивировано из оригинал 11 апреля 2004 г.
- ^ «Боязнь раздвоения», см. «6. glibc -> Linux libc -> glibc"".
- ^ "Fear of Forking, сноска к комментариям Столлмана о слиянии".
- ^ "домашняя страница glibc".
В 2001 году был сформирован Руководящий комитет библиотеки GNU C…, который в настоящее время состоит из Марка Брауна, Пола Эггерта, Андреаса Йегера, Якуба Елинека, Роланда МакГрата и Андреаса Шваба.
- ^ "Ульрих Дреппер". LinkedIn. Получено 13 июн 2012.
- ^ Дреппер, Ульрих (26 июня 2000 г.). "RMS снова за дело". sourceware.org. Получено 20 ноября 2015.
Несколько недель назад RMS начал очередную атаку на меня (одно письмо, затем непрямые попытки получить влияние, а сегодня - еще одно письмо). Суть в том, что он жалуется, что я не следую «политике GNU» и, следовательно, должен быть заменен руководящим комитетом, частью которого я мог бы быть. Некоторые из вас (а именно Роланд и Андреас С.), вероятно, знают об этом, поскольку он предлагал обоих в качестве других членов комитета. Вдобавок в списке был Марк Браун (я знаю в IBM кого-то с таким именем, который также подошел бы к этой группе, но я не уверен, действительно ли это он.) В любом случае, я полностью отвергаю это. Это совсем не помогает, все наоборот. Во-первых, я не знаю ни одной важной политики, которую нарушаю. Единственное, что я не выполняю приказы RMS, которые явно имеют политические намерения (что, конечно, кощунственно), и, возможно, меня не волнует Винблоуз (если последний вообще имеет значение). Ничего из этого никоим образом не изменится.
- ^ Дреппер, Ульрих (15 августа 2001 г.). "glibc 2.2.4". sourceware.com. Получено 29 ноябрь 2015.
А теперь о не очень приятных вещах. Столмен недавно предпринял попытку того, что я бы назвал враждебным захватом разработки glibc. Он пытался за моей спиной устроить заговор и убедить других основных разработчиков взять под свой контроль, чтобы в конце концов он все контролировал и мог диктовать все, что ему угодно. Эта попытка провалилась, но он продолжал оказывать давление на людей повсюду, и это стало действительно ужасно. В конце концов я согласился на создание так называемого «руководящего комитета» (СК).
- ^ rms-обвиняемый-в-попытке-glibc-враждебном захвате на слэшдот.com 19 августа 2001 г.
- ^ репозиторий glibc на Sourceware.com
- ^ Ульрих Дреппер 2007-10-03 06:13:55 UTC «Это не имеет ничего общего с« только x86 ». Все ABI, разработанные людьми, имеющими хоть какое-то понимание, не требуют изменений. Любое изменение отрицательно повлияет на хорошо спроектированные архитектуры - единственное преимущество этой встроенной чуши. Но ваша собственная версия файл в дополнении ".
- ^ Дреппер, Ульрих (25 мая 2005 г.). «Диктатура меньшинств». udrepper.livejournal.com. Получено 15 января 2012.
Какие архитектуры стоит поддерживать? […]. Мы не только должны искать нерелевантность (какой процент заботится о поддержке Vax, PArisc), мы также должны смотреть на уровень дополнительной сложности, который требуется для поддержки. Некоторые ABI просто намеренно определены, чтобы отличаться от других (см. IA-64), что требует огромных усилий. Возможности также существенно расходятся (например, отсутствие атомарных операций в слишком большом количестве архитектур). Это слишком часто приводит к излишнему искажению кода, поскольку писать код таким образом, чтобы его можно было оптимально использовать во всех ситуациях, очень сложно. Решение должно заключаться в том, чтобы ограничить поддержку только горсткой архитектур, которые поддерживаются в проекте. Вся остальная поддержка должна происходить за пределами дерева, и поэтому всю работу должны выполнять группы с особыми интересами. Я не хочу сказать, что мы точно следуем всем этим пунктам, но для большого проекта glibc определенно подходит ближе всего к этому.
- ^ Ярно, Орелиен (5 мая 2009 г.). «Debian переходит на EGLIBC». aurel32.net. Получено 15 января 2012.
Более дружественный апстрим (особенно в отношении встроенных архитектур): «Поощряйте сотрудничество, общение, вежливость и уважение среди разработчиков» (в отличие от этого).
- ^ тимофей (6 мая 2009 г.). «Переход Debian с Glibc на Eglibc». Slashdot. Получено 14 января 2012.
- ^ Журнал изменений пакета Debian
- ^ Макграт, Роланд (26 марта 2012 г.). "роспуск руководящего комитета glibc". Sourceware.org. Получено 13 июн 2012.
- ^ Майерс, Джозеф С. (26 марта 2012 г.). "Разработка и сопровождение библиотеки GNU C". Sourceware.org. Получено 13 июн 2012.
- ^ «Debian переключается (обратно) на GLIBC». Орелиен. 19 июня 2014 г.. Получено 19 июн 2014.
- ^ "CosmicCuttlefish / ReleaseNotes - Ubuntu Wiki".
- ^ «Глава 5. RHEL 8.0.0, выпуск Red Hat Enterprise Linux 8».
- ^ «Глава 2. Что нового в Debian 10».
- ^ "Изменения / GLIBC228".
- ^ "Red Hat Bugzilla - Ошибка 1598403".
- ^ "sourceware.org Git - glibc.git / blob - НОВОСТИ".
- ^ "DiscoDingo / ReleaseNotes - Ubuntu Wiki".
- ^ "Изменения / GLIBC229".
- ^ "Red Hat Bugzilla - Ошибка 1653403".
- ^ "sourceware.org Git - glibc.git / blob - НОВОСТИ".
- ^ "EoanErmine / ReleaseNotes - Ubuntu Wiki".
- ^ "Изменения / GLIBC230".
- ^ «Focal (20.04): пакет glibc: Ubuntu».
- ^ "Изменения / GLIBC231".
- ^ «Библиотека GNU C версии 2.32 теперь доступна». sourceware.org. Получено 13 августа 2020.
- ^ «Сопровождающие машины с библиотекой GNU C».
- ^ Бартли, Дэвид; Спанг, Майкл. "GNU / kOpenSolaris (GNU libc / base + ядро OpenSolaris)". Получено 16 декабря 2008.
- ^ "Источник хайку".
libroot.so не является частью проекта GNU и включен в исходный код Haiku.
- ^ Торвальдс, Линус (9 января 2002 г.). "Отправка в список рассылки glibc".
- ^ «Компоненты OpenMoko».
Мы будем использовать glibc (не uClibC)… Альтернативы могут сэкономить больше места и быть более оптимизированными, но с большей вероятностью доставят нам головную боль интеграции
- ^ "Re: [Familiar] Какой glibc для Familiar 0.8.4?".
Вопрос: какая версия GLIBC использовалась для сборки Familiar 0.8.4? Ответ: 2.3.3