Ядро Linux
Оригинальный автор(ы) | Линус Торвальдс |
---|---|
Разработчик(и) | Участники сообщества Линус Торвальдс |
Первоначальный выпуск | 0,02 (5 октября 1991 | )
Стабильная версия | 6.10.3 [2] / 3 августа 2024 г. |
Предварительный выпуск | 6.11-rc2 [3] / 4 августа 2024 г. |
Репозиторий | |
Написано в | C ( C11 начиная с 5.18, C89 ранее), [4] Ржавчина (начиная с версии 6.1), [5] Язык ассемблера |
Доступно в | Английский |
Лицензия | Только GPL-2.0 с примечанием к системному вызову Linux [6] [7] [8] [а] |
Веб-сайт | ядро |
Ядро Linux является бесплатным и открытым исходным кодом . [12] : 4 UNIX-подобное ядро , которое используется во многих компьютерных системах по всему миру. Ядро было создано Линусом Торвальдсом в 1991 году и вскоре было принято в качестве ядра для (ОС) GNU операционной системы , которая была создана в качестве бесплатной замены Unix . С конца 1990-х годов он был включен во многие дистрибутивы операционных систем , многие из которых называются Linux . Одной из таких операционных систем с ядром Linux является Android , который используется во многих мобильных и встраиваемых устройствах.
Большая часть кода ядра написана на языке C, который поддерживается коллекцией компиляторов GNU (GCC), которая имеет расширения, выходящие за рамки стандартного C. [12] : 18 [13] Код также содержит ассемблерный код для логики, зависящей от архитектуры, такой как оптимизация использования памяти и выполнения задач. [12] : 379–380 Ядро имеет модульную конструкцию, позволяющую интегрировать модули как программные компоненты , в том числе динамически загружаемые. Ядро является монолитным в архитектурном смысле, поскольку вся ОС работает в пространстве ядра .
Linux предоставляется по лицензии GNU General Public License версии 2 , хотя он содержит файлы под другими совместимыми лицензиями . [11]
История
[ редактировать ]В апреле 1991 года Линус Торвальдс, 21-летний -компьютерщик студент Хельсинкского университета , начал работать над операционной системой, вдохновленной UNIX, для персонального компьютера. [14] Начал он с переключателя задач на языке ассемблера Intel 80386 и драйвера терминала . [14] 25 августа 1991 года Торвальдс опубликовал следующее в comp.os.minix группе новостей в Usenet : [15]
Я делаю (бесплатную) операционную систему (просто хобби, не будет большой и профессиональной, как GNU) для 386(486) AT клонов . Это назревало с апреля и начинает готовиться. Я хотел бы получить любые отзывы о том, что людям нравится/не нравится в minix, поскольку моя ОС чем-то напоминает ее (среди прочего, такое же физическое расположение файловой системы (по практическим соображениям)).
В настоящее время я портировал bash (1.08) и gcc (1.40), и, похоже, все работает. Это означает, что через несколько месяцев я получу что-то практическое [...]
Да, он не содержит какого-либо кода minix и имеет многопоточную файловую систему. Он НЕ является переносимым [ sic ] (использует переключение задач 386 и т. д.) и, вероятно, никогда не будет поддерживать ничего, кроме AT-жестких дисков, поскольку это все, что у меня есть :-(.
17 сентября 1991 года Торвальдс подготовил версию Linux 0.01 и разместил ее на «ftp.funet.fi» — FTP-сервере Финской университетской и исследовательской сети ( FUNET ). Он даже не был исполняемым, поскольку его код все еще нуждался в Minix для компиляции и тестирования. [16]
5 октября 1991 года Торвальдс анонсировал первую «официальную» версию Linux — 0.02. [17] [16]
[Как] я уже говорил месяц назад, я работаю над бесплатной версией Minix-аналога для компьютеров AT-386. Наконец-то он достиг той стадии, когда его можно даже использовать (хотя это может быть и не в зависимости от того, что вы хотите), и я готов выложить исходники для более широкого распространения. Это всего лишь версия 0.02... но я успешно запускал под ней bash, gcc, gnu-make, gnu-sed, compress и т. д.
Linux быстро рос, поскольку MINIX . в проект внесли свой вклад многие разработчики, включая сообщество [ нужна ссылка ] В то время проект GNU завершил работу над многими компонентами для своей бесплатной замены UNIX, ОС GNU , но его ядро, GNU Hurd , было неполным. В качестве своей ОС проект принял ядро Linux. [18]
Торвальдс присвоил ядру номер основной версии 0, чтобы указать, что оно еще не предназначено для общего использования. [19] Версия 0.11, выпущенная в декабре 1991 года, была первой версией, размещаемой на собственном хостинге ; скомпилирован на компьютере под управлением ядра Linux.
Когда Торвальдс выпустил версию 0.12 в феврале 1992 года, он принял Стандартную общественную лицензию GNU версии 2 (GPLv2) вместо своей предыдущей лицензии, разработанной им самим, которая не допускала коммерческого распространения. [20] В отличие от Unix , все исходные файлы Linux находятся в свободном доступе, включая драйверы устройств . [21]
Первоначальный успех Linux был обусловлен программистами и тестировщиками по всему миру. Благодаря поддержке POSIX API через libC, которая при необходимости действует как точка входа в адресное пространство ядра, Linux может запускать программное обеспечение и приложения, разработанные для Unix. [22]
19 января 1992 года было отправлено первое сообщение в новую группу новостей alt.os.linux . [23] 31 марта 1992 года группа новостей была переименована в comp.os.linux . [24]
Тот факт, что Linux представляет собой монолитное ядро, а не микроядро, был темой спора между Эндрю С. Таненбаумом , создателем MINIX, и Торвальдсом. [25] Дебаты Таненбаума и Торвальдса начались в 1992 году в Usenet группе comp.os.minix как общее обсуждение архитектуры ядра. [26] [27]
Версия 0.95 была первой версией, поддерживающей X Window System . [28] В марте 1994 года был выпущен Linux 1.0.0 с 176 250 строками кода. [29] Судя по номеру версии, это была первая версия, считавшаяся подходящей для производственной среды . [19] В июне 1996 года, после выпуска 1.3, Торвальдс решил, что Linux достаточно развился, чтобы гарантировать новый основной номер, и поэтому обозначил следующий выпуск как версию 2.0.0. [30] [31] Важные функции версии 2.0 включали симметричную многопроцессорную обработку (SMP), поддержку большего количества типов процессоров и поддержку выбора конкретных аппаратных целей, а также включение функций и оптимизаций, специфичных для архитектуры. [22] Семейство команд make *config команды kbuild включает и настраивает параметры для создания специальных исполняемых файлов ядра ( vmlinux ) и загружаемых модулей. [32] [33]
Версия 2.2, выпущенная 20 января 1999 г., [34] улучшена детализация блокировок и управление SMP, добавлена поддержка m68k , PowerPC , Sparc64 , Alpha и других 64-битных платформ. [35] Кроме того, были добавлены новые файловые системы , включая Microsoft . от NTFS возможность чтения только для чтения [35] В 1999 году IBM опубликовала свои исправления к коду Linux 2.2.13 для поддержки архитектуры S/390 . [36]
Версия 2.4.0, выпущенная 4 января 2001 г., [37] содержала поддержку ISA Plug and Play , USB и PC Cards . В Linux 2.4 добавлена поддержка Pentium 4 и Itanium (последний представил ia64 ISA, который был совместно разработан Intel и Hewlett-Packard для замены старого PA-RISC ), а также нового 64-битного процессора MIPS . [38] Разработка для 2.4. x немного изменился: на протяжении всей серии стало доступно больше функций, включая поддержку Bluetooth , диспетчера логических томов (LVM) версии 1, RAID поддержку InterMezzo и ext3 , файловых систем .
Версия 2.6.0 была выпущена 17 декабря 2003 г. [39] Разработка для 2.6. x были внесены дальнейшие изменения в сторону включения новых функций во всю серию. Среди изменений, внесенных в серию 2.6, можно отметить: интеграцию μClinux в основные исходные коды ядра, поддержку PAE , поддержку нескольких новых линеек процессоров , интеграцию Advanced Linux Sound Architecture (ALSA) в основные исходные коды ядра, поддержку до 2 32 пользователи (вместо 2 16 ), поддержка до 2 29 идентификаторы процессов (только 64-битные, 32-битные архитектуры по-прежнему ограничены двумя 15 ), [40] существенно увеличено количество типов устройств и количество устройств каждого типа, улучшена поддержка 64-бит , поддержка файловых систем , поддерживающих размеры файлов до 16 терабайт внутри ядра , вытеснение , поддержка Native POSIX Thread Library (NPTL) ), интеграция Linux в пользовательском режиме с основными исходными кодами ядра, интеграция SELinux с основными исходными кодами ядра, поддержка InfiniBand и многое другое.
Начиная с выпусков 2.6.x ядро поддерживало большое количество файловых систем; некоторые предназначены для Linux, например ext3 , ext4 , FUSE , Btrfs , [41] и другие, встроенные в другие операционные системы, такие как JFS , XFS , Minix, Xenix , Irix , Solaris , System V , Windows и MS-DOS . [42]
при разработке не использовалась система контроля версий Хотя до сих пор , в 2002 году разработчики Linux приняли BitKeeper , который стал для них бесплатным, хотя и не был свободным программным обеспечением . В 2005 году из-за попыток реконструировать его компания, владевшая этим программным обеспечением, прекратила поддержку сообщества Linux. В ответ Торвальдс и другие написали Git . Новая система была написана за несколько недель, а через два месяца было выпущено первое официальное ядро, созданное с ее использованием. [43]
В 2005 году команда стабильных разработчиков была сформирована в ответ на отсутствие дерева ядра, где люди могли бы работать над исправлением ошибок , и она продолжала обновлять стабильные версии. [44] В феврале 2008 года было создано дерево linux-next , которое служило местом сбора патчей, предназначенных для объединения во время следующего цикла разработки. [45] [46] Некоторые сопровождающие подсистем также использовали суффикс -next для деревьев, содержащих код, который они собираются отправить для включения в следующий цикл выпуска. По состоянию на январь 2014 г. [update], версия Linux, находящаяся в разработке, хранится в нестабильной ветке с именем linux-next . [47]
20-летие Linux Торвальдс отметил в июле 2011 года выпуском версии 3.0.0. [30] Поскольку номер версии 2.6 был номером версии в течение 8 лет, в ядро пришлось добавить новую личность uname26 , которая сообщает 3.x как 2.6.40+x, чтобы старые программы работали. [48]
Версия 3.0 была выпущена 22 июля 2011 года. [49] 30 мая 2011 года Торвальдс объявил, что большим изменением является «НИЧЕГО. Абсолютно ничего». и спросил: «...давайте убедимся, что мы действительно сделаем следующий выпуск не просто новым блестящим номером, но и хорошим ядром». [50] После ожидаемых 6–7 недель процесса разработки он будет выпущен к 20-летию Linux.
11 декабря 2012 года Торвальдс решил снизить сложность ядра, удалив поддержку процессоров i386 , в частности, отказавшись от эмуляции. [51] атомарная представленная инструкция CMPXCHG, в i486 для обеспечения надежных мьютексов , делает серию ядер 3.7 последней, все еще поддерживающей исходный процессор. [52] [53] В этой же серии унифицирована поддержка процессора ARM . [54]
Изменение нумерации с 2.6.39 на 3.0 и с 3.19 на 4.0 не повлекло за собой значимой технической дифференциации; основной номер версии был увеличен просто для того, чтобы избежать больших второстепенных номеров. [49] [55] Стабильные ядра 3.xy были выпущены до версии 3.19 в феврале 2015 года. Версия 3.11, выпущенная 2 сентября 2013 года, [56] добавлено много новых функций, таких как новые Флаг O_TMPFILE для для уменьшения временных уязвимостей файлов, экспериментальное динамическое управление питанием AMD Radeon , опрос сети с малой задержкой и zswap (сжатый кэш подкачки). [57]
В апреле 2015 года Торвальдс выпустил версию ядра 4.0. [30] К февралю 2015 года Linux получил вклад почти от 12 000 программистов из более чем 1200 компаний, включая некоторых крупнейших мировых поставщиков программного и аппаратного обеспечения. [58] Версия Linux 4.1, выпущенная в июне 2015 года, содержит более 19,5 миллионов строк кода, написанного почти 14 000 программистами. [59]
В общей сложности 1991 разработчик, из которых 334 работали впервые, добавили более 553 000 строк кода в версию 5.8, побив рекорд, ранее установленный версией 4.9. [60]
Популярность
[ редактировать ]Согласно ежегодному опросу разработчиков Stack Overflow за 2019 год, более 53% всех респондентов разработали программное обеспечение для Linux и около 27% для Android . [61] хотя только около 25% разрабатываются с использованием операционных систем на базе Linux. [62]
Большинство веб-сайтов работают в операционных системах на базе Linux . [63] [64] и все 500 самых мощных суперкомпьютеров в мире используют ту или иную ОС на базе Linux. [65]
Дистрибутивы Linux включают ядро с системным программным обеспечением (например, библиотекой GNU C , systemd и другими Unix утилитами и демонами ) и широким набором прикладного программного обеспечения , но доля их использования на настольных компьютерах невелика по сравнению с другими операционными системами.
Поскольку на Android , то есть Linux, приходится большинство операционных систем мобильных устройств, [66] [67] [68] и из-за растущего использования во встраиваемых устройствах Android в значительной степени ответственен за рост использования Linux в целом. [22]
Ценить
[ редактировать ]Стоимость переразработки версии 2.6.0 ядра Linux в рамках традиционной проприетарной разработки оценивается в 612 миллионов долларов США (467 миллионов евро, 394 миллиона фунтов стерлингов) в ценах 2004 года с использованием модели оценки человеко-месяца COCOMO . [69] В 2006 году исследование, профинансированное Европейским Союзом, показало, что стоимость доработки ядра версии 2.6.8 выше и составила 882 миллиона евро (1,14 миллиарда долларов, 744 миллиона фунтов стерлингов). [70]
К этой теме вновь обратились в октябре 2008 года Аманда Макферсон, Брайан Проффитт и Рон Хейл-Эванс. Используя методологию Дэвида А. Уиллера, они подсчитали, что переработка ядра 2.6.25 теперь стоит 1,3 миллиарда долларов (часть от общей суммы в 10,8 миллиарда долларов, потраченной на переработку Fedora 9). [71] Опять же, Гарсия-Гарсия и Алонсо де Магдалено из Университета Овьедо (Испания) подсчитали, что стоимость, ежегодно добавляемая к ядру, составляла около 100 миллионов евро в период с 2005 по 2007 год и 225 миллионов евро в 2008 году, это также будет стоить более 1 миллиарда евро (около 1,4 миллиарда долларов). по состоянию на февраль 2010 г.) для разработки в Европейском Союзе. [72]
По состоянию на 7 марта 2011 г. [update], using then-current LOC (lines of code) of a 2.6.x Linux kernel and wage numbers with David A. Wheeler's calculations it would cost approximately $3bn (about €2.2bn) to redevelop the Linux kernel as it keeps getting bigger. An updated calculation as of 26 September 2018[update], используя текущие на тот момент 20 088 609 LOC (строк кода) для ядра Linux 4.14.14 и текущую среднюю зарплату программиста в США в 75 506 долларов США, показывают, что переписать существующий код будет стоить примерно 14 725 449 000 долларов США (11 191 341 000 фунтов стерлингов). [73]
Распределение
[ редактировать ]Большинство тех, кто использует Linux, делают это через дистрибутив Linux . Некоторые дистрибутивы поставляются с ванильным или стабильным ядром. Однако некоторые поставщики (например, Red Hat и Debian ) поддерживают собственное дерево исходного кода. Они обычно обновляются медленнее, чем ванильная ветка, и обычно включают все исправления из соответствующей стабильной ветки, но в то же время они также могут добавлять поддержку драйверов или функций, которые не были выпущены в ванильной версии дистрибутива. Вендор начал основывать свой филиал с.
Разработчики
[ редактировать ]Сообщество
[ редактировать ]Графики недоступны по техническим причинам. Дополнительную информацию можно найти на Phabricator и на MediaWiki.org . |
компании
Сообщество разработчиков ядра Linux насчитывает около 5000–6000 участников. Согласно исследованию Linux Foundation «Состояние разработки ядра Linux в 2017 году», охватывающему коммиты для выпусков с 4.8 по 4.13, в среднем около 1500 разработчиков внесли свой вклад из примерно 200–250 компаний. Топ-30 разработчиков внесли чуть более 16% кода. Среди компаний наибольший вклад вносят Intel (13,1%) и Red Hat (7,2%), Linaro (5,6%), IBM (4,1%), второе и пятое места занимают «нет» (8,2%) и «нет». неизвестные» (4,1%) категории. [75]
Вместо дорожной карты — технические рекомендации. Вместо централизованного распределения ресурсов существуют люди и компании, которые заинтересованы в дальнейшем развитии ядра Linux совершенно независимо друг от друга:Такие люди, как Линус Торвальдс и я, не планируют эволюцию ядра. Мы не сидим и не продумываем план действий на следующие два года, а затем распределяем ресурсы на различные новые функции. Это потому, что у нас нет ресурсов. Все ресурсы принадлежат различным корпорациям, которые используют и вносят свой вклад в Linux, а также различным независимым участникам. Решают те люди, которые владеют ресурсами...
— Эндрю Мортон , 2005 г.
Конфликт
[ редактировать ]Известные конфликты среди разработчиков ядра Linux:
- В июле 2007 года Кон Коливас объявил, что прекращает разработку ядра Linux. [76] [77]
- В июле 2009 года Алан Кокс оставил свою должность сопровождающего TTY после разногласий с Торвальдсом. [78]
- В декабре 2010 года между сопровождающим Linux SCSI Джеймсом Боттомли и сопровождающим SCST Владиславом Болховитиным состоялась дискуссия о том, какой целевой стек SCSI следует включить в ядро Linux. [79] Это расстроило некоторых пользователей Linux. [80]
- В июне 2012 года Торвальдс ясно дал понять, что он не согласен с тем, чтобы NVIDIA выпускала свои драйверы как закрытые. [81]
- В апреле 2014 года Торвальдс запретил Кею Сиверсу отправлять исправления для ядра Linux за неспособность устранить ошибки , из-за которых systemd отрицательно взаимодействовал с ядром. [82]
- В октябре 2014 года Леннарт Пёттеринг обвинил Торвальдса в том, что он терпит грубый стиль обсуждения в списках рассылки, связанных с ядром Linux, и в том, что он является плохим образцом для подражания. [83]
- В марте 2015 года Кристоф Хеллвиг подал иск против VMware за нарушение авторских прав на ядро Linux. [84] Линус Торвальдс дал понять, что не согласен с этой и подобными инициативами, назвав адвокатов гноящейся болезнью. [85]
- В апреле 2021 года было обнаружено, что команда из Университета Миннесоты в рамках своего исследования отправляла «недобросовестные» исправления для ядра. Это привело к немедленному отмене всех патчей, когда-либо отправленных сотрудниками университета. Кроме того, старший специалист по сопровождению предупредил, что любой будущий патч от университета будет отклонен сразу же. [86] [87]
Выдающиеся разработчики ядра Linux осознавали важность предотвращения конфликтов между разработчиками. [88] Из-за противодействия Торвальдса долгое время не существовало кодекса поведения для разработчиков ядра. [89] Однако Кодекс конфликтов ядра Linux. 8 марта 2015 года был представлен [90] 16 сентября 2018 года он был заменен новым Кодексом поведения, основанным на Соглашении с вкладчиками . Это совпало с публичными извинениями Торвальдса и кратким перерывом в разработке ядра. [91] [92] 30 ноября 2018 года, в соответствии с Кодексом поведения , Яркко Саккинен из Intel разослал патчи, заменяющие слова «ебать», встречающиеся в комментариях к исходному коду, подходящими версиями, сосредоточенными на слове «обнимать». [93]
Разработчики, которые считают, что с ними обошлись несправедливо, могут сообщить об этом в Технический консультативный совет Linux Foundation . [94] В июле 2013 года разработчик драйвера USB 3.0 Сейдж Шарп попросил Торвальдса устранить оскорбительные комментарии в сообществе разработчиков ядра. В 2014 году Шарп отказался от разработки ядра Linux, заявив, что «ориентация на техническое совершенство в сочетании с перегруженностью специалистов по сопровождению и людьми с разными культурными и социальными нормами означает, что специалисты по сопровождению ядра Linux часто бывают резкими, грубыми или жестокими, чтобы получить их работа выполнена». [95] На конференции linux.conf.au (LCA) в 2018 году разработчики выразили мнение, что за последние несколько лет культура сообщества стала намного лучше. Дэниел Веттер, сопровождающий драйвера графического ядра Intel drm/i915, отметил, что «довольно жестокие выражения и дискуссии» в сообществе ядра уменьшились или исчезли. [96]
Лоран Пиншар попросил разработчиков поделиться своим опытом взаимодействия с сообществом ядра на Европейской конференции по встроенному Linux 2017 года. Поднятые вопросы были обсуждены несколько дней спустя на Саммите сопровождающих. Обеспокоенность по поводу отсутствия последовательности в том, как сопровождающие реагировали на исправления, представленные разработчиками, была поддержана Шуа Ханом , сопровождающим среды самотестирования ядра. Торвальдс утверждал, что никогда не будет единообразия в обработке исправлений, поскольку разные подсистемы ядра с течением времени применяли разные процессы разработки. Поэтому было решено, что каждый сопровождающий подсистемы ядра будет документировать правила принятия исправлений. [97]
Разработка
[ редактировать ]Linux — это эволюция, а не разумный замысел !
Кодовая база
[ редактировать ]Исходный код ядра, также известный как дерево исходного кода, управляется в Git системе контроля версий , также созданной Торвальдсом. [101]
По состоянию на 2021 год [update]Версия ядра Linux 5.11 содержала около 30,34 миллиона строк кода. Примерно 14% кода является частью «ядра» (каталоги Arch, Kernel и mm), а 60% — это драйверы.
Взносы
[ редактировать ]Вклады отправляются в виде исправлений в виде текстовых сообщений в список рассылки ядра Linux (LKML) (а часто также в другие списки рассылки, посвященные конкретным подсистемам). Патчи должны соответствовать набору правил и формальному языку, который, среди прочего, описывает, какие строки кода следует удалить, а какие еще следует добавить в указанные файлы. Эти исправления могут автоматически обрабатываться, чтобы системные администраторы могли применять их для внесения лишь некоторых изменений в код или для постепенного обновления до следующей версии. [102] Linux также распространяется в форматах GNU zip (gzip) и bzip2 .
Разработчик, желающий изменить ядро Linux, пишет и тестирует изменение кода. В зависимости от того, насколько значительным является изменение и сколько подсистем оно модифицирует, изменение будет представлено либо в виде одного исправления, либо в виде нескольких исправлений исходного кода . В случае, если одна подсистема обслуживается одним сопровождающим, эти исправления отправляются по электронной почте сопровождающему подсистемы с соответствующим списком рассылки в поле Cc. Сопровождающий и читатели списка рассылки будут просматривать исправления и оставлять отзывы. После завершения процесса проверки специалист по сопровождению подсистемы принимает исправления в соответствующем дереве ядра Git . Если изменения в ядре Linux представляют собой исправления ошибок, которые считаются достаточно важными, запрос на получение исправлений будет отправлен Торвальдсу в течение нескольких дней. В противном случае запрос на включение будет отправлен Торвальдсу во время следующего окна слияния. Окно слияния обычно длится две недели и начинается сразу после выпуска предыдущей версии ядра. [103] В дереве исходного кода ядра Git имена всех разработчиков, внесших вклад в ядро Linux, указаны в каталоге «Credits» , а все сопровождающие подсистемы перечислены в разделе «Maintainers» . [104]
Как и во многих крупных проектах программного обеспечения с открытым исходным кодом, разработчики обязаны соблюдать Соглашение участников , — кодекс поведения предназначенный для борьбы с преследованием участников меньшинства. [105] [106] использование инклюзивной терминологии в исходном коде. Кроме того, во избежание нарушений обязательно [107]
Язык программирования
[ редактировать ]Linux написан на специальном языке программирования C, поддерживаемом GCC , компилятором, который расширяет стандарт C во многих отношениях, например, с использованием встроенных разделов кода, написанных на языке ассемблера (в синтаксисе GCC «AT&T-style») целевой архитектуры. .
В сентябре 2021 года требования к версии GCC для компиляции и сборки ядра Linux были увеличены с GCC 4.9 до 5.1, что позволяет перейти от использования кода C на основе стандарта C89 к использованию кода, написанного с использованием стандарта C11 . [108] при этом переход на стандарт состоится в марте 2022 года с выпуском Linux 5.18. [109]
Первоначальная поддержка языка программирования Rust была добавлена в Linux 6.1. [5] который был выпущен в декабре 2022 года, [110] с более поздними версиями ядра, такими как Linux 6.2 и Linux 6.3, что еще больше улучшает поддержку. [111] [112]
Стиль кодирования
[ редактировать ]С 2002 года код должен соответствовать 21 правилу, составляющему стиль кодирования ядра Linux. [113] [114]
Управление версиями
[ редактировать ]Что касается большинства программ, версия ядра обозначается серией чисел, разделенных точками.
В ранних версиях версия состояла из трех или четырех чисел, разделенных точками, называемых основным выпуском , второстепенным выпуском и версией. [12] : 9 В то время второстепенные выпуски с нечетными номерами предназначались для разработки и тестирования, а второстепенные выпуски с четными номерами - для производства. Необязательная четвертая цифра указывает уровень исправления. [19] Версии разработки обозначались суффиксом-кандидатом на выпуск ( -rc ).
Текущие соглашения о версиях другие. Нечетное/четное число, подразумевающее dev/prod, было опущено, а основная версия обозначается первыми двумя цифрами вместе. Хотя временные рамки для разработки следующей основной версии открыты, суффикс -rcN используется для обозначения n-го кандидата на выпуск следующей версии. [115] Например, выпуску версии 4.16 предшествовало семь 4.16-rcN (от -rc1 до -rc7). После выпуска стабильной версии ее обслуживание передается команде разработчиков стабильной версии . Обновления стабильной версии обозначаются трехзначной схемой (например, 4.16.1, 4.16.2, ...). [115]
Инструментальная цепочка
[ редактировать ]Ядро обычно собирается с помощью инструментария GNU . Компилятор GNU C, GNU cc, входящий в коллекцию компиляторов GNU (GCC), является компилятором по умолчанию для основной версии Linux. Секвенированием занимается GNU make . Ассемблер GNU (часто называемый GAS или GNU as) выводит объектные файлы кода , сгенерированного GCC из ассемблерного . Наконец, компоновщик GNU (GNU ld) создает статически связанный исполняемый файл ядра, называемый vmlinux . Оба как и ld являются частью двоичных утилит GNU (binutils).
GNU cc долгое время был единственным компилятором, способным правильно собирать Linux. В 2004 году Intel заявила, что модифицировала ядро так, чтобы его компилятор C также мог его компилировать. [116] Еще один подобный успех был зарегистрирован в 2009 году с модифицированной версией 2.6.22. [117] [118] Поддержка компилятора Intel прекращена в 2023 году. [119]
С 2010 года предпринимаются усилия по созданию Linux с Clang , альтернативным компилятором для языка C; [120] по состоянию на 12 апреля 2014 г. официальное ядро почти можно было скомпилировать с помощью Clang. [121] [122] Проект, посвященный этим усилиям, называется LLVMLinux в честь инфраструктуры компилятора LLVM , на которой построен Clang. [123] LLVMLinux не преследует цель создать форк Linux или LLVM, поэтому это метапроект, состоящий из патчей, которые в конечном итоге передаются вышестоящим проектам. Включив компиляцию Linux с помощью Clang, разработчики могут получить выгоду от сокращения времени компиляции. [124]
В 2017 году разработчики завершили выпуск исправлений для поддержки сборки ядра Linux с помощью Clang в выпуске 4.15, перенеся поддержку X86-64 и AArch64 в ветки стабильного дерева ядра 4.4, 4.9 и 4.14. Google Pixel 2 поставляется с первым Clang . , построенным на Linux ядром [125] хотя патчи для Pixel (1-го поколения) существовали. [126] В 2018 году ChromeOS перешла на сборку ядер с использованием Clang по умолчанию. [127] в то время как Android (операционная система) создала Clang [128] и LLVM компоновщик LLD [129] требуется для сборок ядра в 2019 году. В 2020 году Google перевела свое рабочее ядро, используемое в своих центрах обработки данных, на сборку с помощью Clang . [130] Сегодня группа ClangBuiltLinux координирует исправления как для Linux, так и для LLVM , чтобы обеспечить совместимость, обе группы состоят из членов LLVMLinux и имеют исходные исправления от LLVMLinux .
Отладка
[ редактировать ]Как и в случае с любым другим программным обеспечением, проблемы с ядром Linux бывает сложно устранить . Общие проблемы связаны с доступом к пространству пользователя и пространству ядра, неправильному использованию примитивов синхронизации и неправильному управлению оборудованием. [12] : 364
Упс — это нефатальная ошибка в ядре. После такой ошибки операции продолжаются с подозрительной надежностью. [131]
Паника (созданная паника() ) является фатальной ошибкой. После такой ошибки ядро выводит сообщение и останавливает компьютер. [12] : 371
Ядро обеспечивает отладку путем печати через printk () , который сохраняет сообщения в кольцевом буфере (перезаписывая старые записи новыми). Системный вызов syslog(2) обеспечивает чтение и очистку буфера сообщений, а также установку максимального уровня журнала сообщений, отправляемых на консоль. [132] Сообщения ядра также экспортируются в пользовательскую среду через интерфейс /dev/kmsg . [133]
Механизм ftrace позволяет выполнять отладку путем трассировки. Он используется для мониторинга и отладки Linux во время выполнения и может анализировать задержки в пользовательском пространстве из-за неправильного поведения ядра. [134] [135] [136] [137] Более того, ftrace позволяет пользователям отслеживать Linux во время загрузки. [138]
kprobes и kretprobes могут прерывать выполнение ядра (как отладчики в пользовательском пространстве) и собирать информацию без прерывания работы. [139] kprobes можно вставлять в код (почти) по любому адресу, а kretprobes работают при возврате функции. У зондов схожие цели, но они также имеют некоторые различия в использовании и реализации. [140]
С помощью KGDB Linux можно отлаживать почти так же, как и программы пользовательского пространства. Для KGDB требуется дополнительная машина, на которой работает GDB и которая подключена к цели для отладки с помощью последовательного кабеля или Ethernet . [141]
Процесс изменения
[ редактировать ]Проект ядра Linux постоянно интегрирует новый код. Стандартная рабочая процедура заключается в том, что программное обеспечение, включенное в проект, должно работать и компилироваться без ошибок.
За каждой подсистемой ядра закреплен специалист по сопровождению, который отвечает за проверку исправлений на соответствие стандартам кода ядра и поддерживает очередь исправлений, которые могут быть отправлены Торвальдсу в течение окна слияния, которое обычно длится несколько недель.
Патчи объединяются Торвальдсом с исходным кодом предыдущей стабильной версии ядра Linux, создавая кандидата на выпуск (-rc) для следующей стабильной версии. После закрытия окна слияния принимаются только исправления нового кода в разрабатываемой версии. Разрабатываемая версия ядра -rc проходит регрессионное тестирование , и как только Торвальдс и сопровождающие подсистемы считают ее стабильной, выпускается новая версия, и процесс разработки начинается заново. [142]
Основной Linux
[ редактировать ]Дерево Git, содержащее исходный код ядра Linux, называется основной веткой Linux . Каждый стабильный выпуск ядра происходит из основного дерева. [143] и часто публикуется на kernel.org . Mainline Linux имеет надежную поддержку лишь для небольшого подмножества многих устройств, работающих под управлением Linux. Неосновная поддержка обеспечивается независимыми проектами, такими как Yocto или Linaro , но во многих случаях необходимо ядро от поставщика устройства. [144] Для использования ядра поставщика, вероятно, потребуется пакет поддержки платы .
Поддержка дерева ядра за пределами основной версии Linux оказалась сложной задачей. [145]
Под основной веткой подразумевается попытка добавить поддержку устройства в основную ветку ядра. [146] тогда как раньше была только поддержка в развилке или вообще не было поддержки. Обычно это включает добавление драйверов или дерева устройств файлов . Когда это будет завершено, функция или исправление безопасности будет считаться основным . [147]
Linux-подобное ядро
[ редактировать ]Сопровождающий стабильной ветки Грег Кроа-Хартман применил термин «Linux-подобный» к последующим вилкам ядра от поставщиков, которые добавляют миллионы строк кода в основное ядро. [148] В 2019 году Google заявила, что хочет использовать основное ядро Linux в Android, чтобы сократить количество вилок ядра. [149] Термин «подобный Linux» также применяется к подмножеству встраиваемого ядра Linux , которое включает не полное основное ядро Linux, а небольшое модифицированное подмножество кода. [150]
Развилки Linux
[ редактировать ]Существуют определенные сообщества, которые разрабатывают ядра на основе официального Linux. Некоторые интересные фрагменты кода из этих ответвлений , в том числе Linux-libre , Compute Node Linux , INK , L4Linux , RTLinux и User-Mode Linux (UML), были объединены в основную ветку. [151] Некоторые операционные системы, разработанные для мобильных телефонов, изначально использовали сильно модифицированные версии Linux, включая Google Android , Firefox OS , HP webOS , Nokia Maemo и Jolla Sailfish OS . В 2010 году сообщество Linux раскритиковало Google за эффективное создание собственного дерева ядра: [152] [153]
Это означает, что любые драйверы, написанные для аппаратных платформ Android, не могут быть объединены с основным деревом ядра, поскольку они зависят от кода, который находится только в дереве ядра Google, что приводит к невозможности его сборки в дереве kernel.org. Из-за этого Google теперь предотвратил слияние большого количества аппаратных драйверов и кода платформы с основным деревом ядра. Эффективное создание ветки ядра, на которую сейчас полагаются несколько различных поставщиков. [154]
— Грег Кроа-Хартман , 2010 г.
Сегодня Android использует настроенный Linux [155] где основные изменения реализованы в драйверах устройств, но требуются некоторые изменения в основном коде ядра. Разработчики Android также отправляют исправления для официального Linux, которые, наконец, могут загружать операционную систему Android. Например, Nexus 7 может загружать и запускать основной Linux. [155]
На презентации 2001 года в Музее компьютерной истории Торвальдс сказал следующее в ответ на вопрос о том, используют ли дистрибутивы Linux точно такие же исходные коды ядра или нет:
Они не... ну, они есть, и это не так. Единого ядра нет. В каждом дистрибутиве есть свои изменения. Это продолжается практически с первого дня. Я не знаю, помните ли вы, что Yggdrasil был известен своими весьма радикальными изменениями в ядре, и даже сегодня у всех основных поставщиков есть свои собственные настройки, потому что у них есть определенная часть рынка, которая им интересна, и, откровенно говоря, именно так так и должно быть. Потому что, если все ожидают, что один человек, я, сможет отслеживать все, это не является целью GPL. Суть открытой системы не в этом. Так что на самом деле тот факт, что дистрибутив решает, что что-то настолько важно для них, что они будут добавлять патчи, даже если этого нет в стандартном ядре, это действительно хороший знак для меня. Вот, например, как было добавлено что-то вроде ReiserFS. И причина, по которой ReiserFS стала первой журналируемой файловой системой, интегрированной в стандартное ядро, заключалась не в том, что я люблю Ханса Райзера. Это произошло потому, что SUSE фактически начала поставлять ReiserFS в качестве стандартного ядра, и это сказало мне «хорошо». Это фактически используется в производстве. Нормальные люди так делают. Они, должно быть, знают что-то, чего я не знаю. Таким образом, в самом прямом смысле то, что делают многие дистрибьюторские дома, они являются частью этого подхода «давайте создадим наш собственный филиал» и «давайте внесем в него свои изменения». А благодаря лицензии GPL я могу забрать лучшие из них. [156]
— Линус Торвальдс , 2001 г.
Долгосрочная поддержка
[ редактировать ]Последняя и более ранние версии поддерживаются отдельно. Большинство последних выпусков ядра курировались Торвальдсом. [157]
Сообщество разработчиков ядра Linux поддерживает стабильное ядро, применяя исправления программных ошибок , обнаруженных во время разработки последующего стабильного ядра. Поэтому на сайте www.kernel.org всегда указаны два стабильных ядра. Следующее стабильное ядро Linux будет выпущено примерно через 8–12 недель.
Некоторые выпуски предназначены для долгосрочной поддержки как долгосрочные с выпусками с исправлениями ошибок в течение двух или более лет. [158]
Архитектура и особенности
[ редактировать ]Несмотря на кажущуюся противоречивость, ядро Linux одновременно монолитно и модульно. Ядро классифицируется как монолитное по архитектуре, поскольку вся ОС работает в пространстве ядра. Конструкция является модульной, поскольку ее можно собрать из модулей , которые в некоторых случаях загружаются и выгружаются во время выполнения. [12] : 338 [159] Он поддерживает функции, которые когда-то были доступны только в ядрах с закрытым исходным кодом несвободных операционных систем.
В оставшейся части статьи используются соглашения UNIX и Unix-подобных операционных систем, описанные в руководствах . Число, которое следует за именем команды, интерфейса или другой функции, указывает раздел (т. е. тип компонента или функции ОС), к которому она принадлежит. Например execve(2) относится к системному вызову, а exec(3) относится к оболочке библиотеки пользовательского пространства.
Ниже приводится обзор архитектурного дизайна и примечательных особенностей.
- Параллельные вычисления и (при наличии достаточного количества ядер ЦП для готовых к выполнению задач) даже настоящее параллельное выполнение множества процессов одновременно (каждый из которых имеет один или несколько потоков выполнения ) на SMP и NUMA . архитектурах
- Выбор и настройка сотен функций ядра и драйверов (с использованием одного из make *config перед сборкой), семейство команд [160] [33] [32] модификация параметров ядра перед загрузкой (обычно путем вставки инструкций в строки меню GRUB2 ) и точная настройка поведения ядра во время выполнения (с использованием команды sysctl(8) интерфейс для /proc/sys/ ). [161] [162] [163]
- Конфигурация (снова используя команды make *config ) и изменения политик во время выполнения. [164] (с помощью приятно(2) , setpriority(2) и семейство sched_*(2) системные вызовы) планировщиков задач , которые обеспечивают вытесняющую многозадачность (как в пользовательском режиме , так и, начиная с серии 2.6, в режиме ядра) . [165] [166] ); самый ранний подходящий планировщик виртуального крайнего срока первого планирования (EEVDF), [167] является планировщиком по умолчанию в Linux с 2023 года и использует красно-черное дерево , которое может искать, вставлять и удалять информацию о процессе ( структуру задачи ) с O(log n) временной сложностью , где n — количество выполняемых задач. [168] [169]
- Расширенное управление памятью с помощью выгружаемой виртуальной памяти .
- Межпроцессные коммуникации и механизм синхронизации .
- Виртуальная файловая система поверх нескольких конкретных файловых систем ( ext4 , Btrfs , XFS , JFS , FAT32 и многих других).
- Настраиваемые планировщики ввода-вывода, ioctl(2) [170] системный вызов, который манипулирует параметрами базового устройства специальных файлов (это нестандартный системный вызов, поскольку аргументы, возвраты и семантика зависят от рассматриваемого драйвера устройства), поддержка асинхронного ввода-вывода POSIX [171] (однако, поскольку они плохо масштабируются с многопоточными приложениями, семейство системных вызовов ввода-вывода, специфичных для Linux ( это_*(2) [172] ) необходимо было создать для управления контекстами асинхронного ввода-вывода, подходящими для параллельной обработки).
- Виртуализация на уровне ОС (с помощью Linux-VServer ), паравиртуализация и аппаратная виртуализация (с помощью KVM или Xen и использование QEMU для эмуляции оборудования); [173] [174] [175] [176] [177] [178] Xen В гипервизоре ядро Linux обеспечивает поддержку сборки дистрибутивов Linux (таких как openSUSE Leap и многих других), которые работают как Dom0 , которые представляют собой хост-серверы виртуальных машин, обеспечивающие среду управления виртуальными машинами пользователя ( DomU ). [179]
- Виртуализация ввода-вывода с помощью VFIO и SR-IOV . Виртуальный функциональный ввод-вывод (VFIO) предоставляет прямой доступ устройства к пользовательскому пространству в защищенной среде безопасной памяти (IOMMU). С помощью VFIO гость виртуальной машины может напрямую обращаться к аппаратным устройствам на хост-сервере виртуальной машины. Этот метод повышает производительность по сравнению с полной виртуализацией и паравиртуализацией. Однако с помощью VFIO устройства не могут совместно использоваться несколькими гостевыми виртуальными машинами. Виртуализация ввода-вывода с единым корнем (SR-IOV) сочетает в себе повышение производительности VFIO и возможность совместного использования устройства с несколькими гостями виртуальной машины (но для этого требуется специальное оборудование, которое должно быть способно отображаться двум или более гостям виртуальной машины как разные устройства). . [180]
- Механизмы безопасности для дискреционного и обязательного контроля доступа (SELinux, AppArmor, POSIX ACL и другие). [181] [182]
- Несколько типов многоуровневых протоколов связи (включая набор протоколов Интернета ).
- Асимметричная многопроцессорная обработка через подсистему RPMsg .
Большинство драйверов устройств и расширений ядра работают в пространстве ядра ( кольцо 0 во многих ЦП архитектурах ) с полным доступом к оборудованию. Некоторые исключения выполняются в пространстве пользователя ; Яркими примерами являются файловые системы, основанные на FUSE /CUSE и части UIO. [183] [184] Более того, X Window System и Wayland , оконная система и протоколы серверов отображения, которые большинство людей используют в Linux, не работают в ядре. Иными словами, фактическое взаимодействие с процессорами видеокарт графическими представляет собой внутриядерную подсистему, называемую Direct Rendering Manager (DRM).
В отличие от стандартных монолитных ядер, драйверы устройств легко настраиваются как модули и загружаются или выгружаются во время работы системы, а также могут быть вытеснены при определенных условиях, чтобы правильно обрабатывать аппаратные прерывания и лучше поддерживать симметричную многопроцессорность . [166] По выбору Linux не имеет стабильного двоичного интерфейса приложения драйвера устройства . [185]
Linux обычно использует защиту памяти и виртуальную память , а также может обрабатывать неравномерный доступ к памяти . [186] однако проект вобрал в себя μClinux , который также позволяет запускать Linux на микроконтроллерах без виртуальной памяти. [187]
Аппаратное обеспечение представлено в файловой иерархии. Пользовательские приложения взаимодействуют с драйверами устройств через записи в /dev или /sys каталоги. [188] Информация о процессе отображается в /прок каталог. [188]
Пользовательский режим | Пользовательские приложения | bash , LibreOffice , GIMP , Blender , 0 AD , Mozilla Firefox , ... | ||||
---|---|---|---|---|---|---|
Компоненты системы | демон инициализации : OpenRC , runit , systemd ... | Системные демоны : polkitd , smbd , sshd , udevd ... | Оконный менеджер : X11 , Wayland , SurfaceFlinger (Android) | Графика : Меса , катализатор AMD , ... | Другие библиотеки: GTK , Qt , EFL , SDL , SFML , FLTK , GNUstep , ... | |
Стандартная библиотека C | fopen , execv , malloc , memcpy , localtime , pthread_create ... (до 2000 подпрограмм ) glibc стремится быть быстрым, musl стремится быть легким, uClibc нацелен на встраиваемые системы, bionic написан для Android и т. д. Все стремятся быть POSIX / SUS -совместимыми. | |||||
Режим ядра | Ядро Linux | stat , splice , dup , read , open , ioctl , write , mmap , close , exit и т. д. (около 380 системных вызовов) ядра Linux Интерфейс системных вызовов (SCI) должен быть POSIX / SUS -совместимым. [189] | ||||
планирования процессов Подсистема | IPC Подсистема | управления памятью Подсистема | виртуальных файлов Подсистема | Сетевая подсистема | ||
Другие компоненты: ALSA , DRI , evdev , klibc , LVM , устройство отображения устройств , сетевой планировщик Linux , Netfilter. Модули безопасности Linux : SELinux , TOMOYO , AppArmor , Smack | ||||||
Аппаратное обеспечение ( ЦП , основная память , устройства хранения данных и т. д.) |
Интерфейсы
[ редактировать ]Linux начинался как клон UNIX и нацелен на соответствие POSIX и единой спецификации UNIX . [190] Ядро предоставляет системные вызовы и другие интерфейсы, специфичные для Linux. Чтобы быть включенным в официальное ядро, код должен соответствовать набору правил лицензирования. [6] [11]
Linux Бинарный интерфейс приложений (ABI) между ядром и пользовательским пространством имеет четыре степени стабильности (стабильный, тестируемый, устаревший, удаленный); [191] Ожидается, что системные вызовы никогда не изменятся, чтобы сохранить совместимость с программами пользовательского пространства , которые на них полагаются. [192]
Загружаемые модули ядра (LKM) по своей конструкции не могут полагаться на стабильный ABI. [185] Поэтому их необходимо перекомпилировать каждый раз, когда в системе устанавливается новый исполняемый файл ядра, иначе они не будут загружены. Драйверы в дереве, которые настроены стать неотъемлемой частью исполняемого файла ядра ( vmlinux ), статически связываются в процессе сборки.
Нет никакой гарантии стабильности API внутри ядра на уровне исходного кода. [185] и поэтому код драйвера устройства , а также код любой другой подсистемы ядра должен постоянно обновляться по мере развития ядра. Любой разработчик, вносящий изменения в API, обязан исправить любой код, который выходит из строя в результате их изменения. [193]
API ядра-пользователя
[ редактировать ]Набор API ядра Linux , который касается интерфейсов, предоставляемых пользовательским приложениям, в основном состоит из системных вызовов UNIX и Linux . [194] Системный вызов — это точка входа в ядро Linux. [195] Например, среди Linux-специфичных есть семейство clone(2) . Системные вызовы [196] Большинство расширений необходимо включить, определив _GNU_SOURCE
макрос в заголовочном файле или при компиляции пользовательского кода. [197]
Системные вызовы могут быть вызваны только с помощью инструкций ассемблера, которые позволяют перейти из непривилегированного пользовательского пространства в привилегированное пространство ядра в кольце 0 . По этой причине стандартная библиотека C (libC) действует как оболочка для большинства системных вызовов Linux, предоставляя функции C, которые при необходимости [198] прозрачно войти в ядро, которое будет выполняться от имени вызывающего процесса. [194] Для системных вызовов, не предоставляемых libC, таких как быстрый мьютекс пользовательского пространства , [199] библиотека предоставляет функцию под названием syscall(2), который можно использовать для их явного вызова. [200]
Псевдофайловые системы (например, файловые системы sysfs и procfs ) и специальные файлы (например, /dev/random
, /dev/sda
, /dev/tty
и многие другие) представляют собой еще один уровень интерфейса для структур данных ядра, представляющих аппаратные или логические (программные) устройства. [201] [202]
ABI между ядром и пользовательским пространством
[ редактировать ]Из-за различий, существующих между сотнями различных реализаций ОС Linux, исполняемые объекты, даже если они скомпилированы, собраны и скомпонованы для работы на конкретной аппаратной архитектуре (то есть используют ISA целевого оборудования), часто не может работать в разных дистрибутивах Linux. Эта проблема в основном связана с конфигурациями, специфичными для дистрибутива, и набором исправлений, примененных к коду ядра Linux, различиями в системных библиотеках, службах (демонах), иерархиях файловой системы и переменных среды.
The main standard concerning application and binary compatibility of Linux distributions is the Linux Standard Base (LSB).[203][204] However, the LSB goes beyond what concerns the Linux kernel, because it also defines the desktop specifications, the X libraries and Qt that have little to do with it.[205] The LSB version 5 is built upon several standards and drafts (POSIX, SUS, X/Open, File System Hierarchy (FHS), and others).[206]
The parts of the LSB more relevant to the kernel are the General ABI (gABI),[207] especially the System V ABI[208][209] and the Executable and Linking Format (ELF),[210][211] and the Processor Specific ABI (psABI), for example the Core Specification for X86-64.[212][213]
The standard ABI for how x86_64 user programs invoke system calls is to load the syscall number into the rax register, and the other parameters into rdi, rsi, rdx, r10, r8, and r9, and finally to put the syscall assembly instruction in the code.[214][215][216]
In-kernel API
[edit]There are several internal kernel APIs between kernel subsystems. Some are available only within the kernel subsystems, while a somewhat limited set of in-kernel symbols (i.e., variables, data structures, and functions) is exposed to dynamically loadable modules (e.g., device drivers loaded on demand) whether they're exported with the EXPORT_SYMBOL() and EXPORT_SYMBOL_GPL() macros[218][219] (the latter reserved to modules released under a GPL-compatible license).[220]
Linux provides in-kernel APIs that manipulate data structures (e.g., linked lists, radix trees,[221] red-black trees,[222] queues) or perform common routines (e.g., copy data from and to user space, allocate memory, print lines to the system log, and so on) that have remained stable at least since Linux version 2.6.[223][224][225]
In-kernel APIs include libraries of low-level common services used by device drivers:
- SCSI Interfaces and libATA – respectively, a peer-to-peer packet based communication protocol for storage devices attached to USB, SATA, SAS, Fibre Channel, FireWire, ATAPI device,[226] and an in-kernel library to support [S]ATA host controllers and devices.[227]
- Direct Rendering Manager (DRM) and Kernel Mode Setting (KMS) – for interfacing with GPUs and supporting the needs of modern 3D-accelerated video hardware,[228] and for setting screen resolution, color depth and refresh rate[229]
- DMA buffers (DMA-BUF) – for sharing buffers for hardware direct memory access across multiple device drivers and subsystems[230][231][232]
- Video4Linux – for video capture hardware
- Advanced Linux Sound Architecture (ALSA) – for sound cards
- New API – for network interface controllers
- mac80211 and cfg80211 – for wireless network interface controllers[233][234]
In-kernel ABI
[edit]The Linux developers chose not to maintain a stable in-kernel ABI. Modules compiled for a specific version of the kernel cannot be loaded into another version without being recompiled.[185]
Multiprocessing
[edit]This section may be confusing or unclear to readers. In particular, it does little to describe the overall model and focuses on minute technical interface details unlikely to provide clear context. (July 2023) |
Linux creates processes by means of the clone(2) or newer clone3(2)[235] system calls. These syscalls create new entities ranging from new independent processes (each having a special identifier called TGID within the task_struct data structure in kernel space, although that same identifier is called PID in userspace), to new threads within the calling process.[236][237]
If the executable is dynamically linked to shared libraries, a dynamic linker is used to find and load the needed objects, prepare the program to run and then run it.[238]
The Native POSIX Thread Library (NPTL)[239] provides the POSIX standard thread interface (pthreads) to userspace.
The kernel provides the futex(7) (fast user-space mutex) mechanisms for user-space locking and synchronization.[240] The majority of the operations are performed in userspace but it may be necessary to communicate with the kernel using the futex(2) system call.[199]
As opposed to userspace threads described above, kernel threads run in kernel space.[241]
Scheduling
[edit]The Linux process scheduler is modular, in the sense that it enables different scheduling classes and policies.[242][243] Scheduler classes are plugable scheduler algorithms that can be registered with the base scheduler code. Each class schedules different types of processes. The core code of the scheduler iterates over each class in order of priority and chooses the highest priority scheduler that has a schedulable entity of type struct sched_entity ready to run.[12]: 46–47 Entities may be threads, group of threads, and even all the processes of a specific user.
Linux provides both user preemption as well as full kernel preemption.[12]: 62–63 Preemption reduces latency, increases responsiveness,[244] and makes Linux more suitable for desktop and real-time applications.
For normal tasks, by default, the kernel uses the Completely Fair Scheduler (CFS) class, introduced in version 2.6.23.[168] The scheduler is defined as a macro in a C header as SCHED_NORMAL
. In other POSIX kernels, a similar policy known as SCHED_OTHER
allocates CPU timeslices (i.e, it assigns absolute slices of the processor time depending on either predetermined or dynamically computed priority of each process). The Linux CFS does away with absolute timeslices and assigns a fair proportion of CPU time, as a function of parameters like the total number of runnable processes and the time they have already run; this function also takes into account a kind of weight that depends on their relative priorities (nice values).[12]: 46–50
With user preemption, the kernel scheduler can replace the current process with the execution of a context switch to a different one that therefore acquires the computing resources for running (CPU, memory, and more). It makes it according to the CFS algorithm (in particular, it uses a variable called vruntime for sorting entities and then chooses the one that has the smaller vruntime, - i.e., the schedulable entity that has had the least share of CPU time), to the active scheduler policy and to the relative priorities.[245] With kernel preemption, the kernel can preempt itself when an interrupt handler returns, when kernel tasks block, and whenever a subsystem explicitly calls the schedule() function.
The kernel also contains two POSIX-compliant[246] real-time scheduling classes named SCHED_FIFO
(realtime first-in-first-out) and SCHED_RR
(realtime round-robin), both of which take precedence over the default class.[242] An additional scheduling policy known as SCHED DEADLINE
, implementing the earliest deadline first algorithm (EDF), was added in kernel version 3.14, released on 30 March 2014.[247][248] SCHED_DEADLINE
takes precedence over all the other scheduling classes.
Real-time PREEMPT_RT
patches, included into the mainline Linux since version 2.6, provide a deterministic scheduler, the removal of preemption and interrupt disabling (where possible), PI Mutexes (i.e., locking primitives that avoid priority inversion),[249][250] support for High Precision Event Timers (HPET), preemptive read-copy-update (RCU), (forced) IRQ threads, and other minor features.[251][252][253]
In 2023, Peter Zijlstra proposed replacing CFS with an earliest eligible virtual deadline first scheduling (EEVDF) scheduler,[254][255] to prevent the need for CFS "latency nice" patches.[256] The EEVDF scheduler replaced CFS in version 6.6 of the Linux kernel.[257]
Synchronization
[edit]The kernel has different causes of concurrency (e.g., interrupts, bottom halves, preemption of kernel and users tasks, symmetrical multiprocessing).[12]: 167
For protecting critical regions (sections of code that must be executed atomically), shared memory locations (like global variables and other data structures with global scope), and regions of memory that are asynchronously modifiable by hardware (e.g., having the C volatile
type qualifier), Linux provides a large set of tools. They consist of atomic types (which can only be manipulated by a set of specific operators), spinlocks, semaphores, mutexes,[258][12]: 176–198 [259] and lockless algorithms (e.g., RCUs).[260][261][262] Most lock-less algorithms are built on top of memory barriers for the purpose of enforcing memory ordering and prevent undesired side effects due to compiler optimization.[263][264][265][266]
PREEMPT_RT
code included in mainline Linux provide RT-mutexes, a special kind of Mutex which do not disable preemption and have support for priority inheritance.[267][268] Almost all locks are changed into sleeping locks when using configuration for realtime operation.[269][253][268] Priority inheritance avoids priority inversion by granting a low-priority task which holds a contended lock the priority of a higher-priority waiter until that lock is released.[270][271]
Linux includes a kernel lock validator called Lockdep.[272][273]
Interrupts
[edit]Although the management of interrupts could be seen as a single job, it is divided into two. This split in two is due to the different time constraints and to the synchronization needs of the tasks whose the management is composed of. The first part is made up of an asynchronous interrupt service routine that in Linux is known as the top half, while the second part is carried out by one of three types of the so-called bottom halves (softirq, tasklets, and work queues).[12]: 133–137
Linux interrupt service routines can be nested. A new IRQ can trap into a high priority ISR that preempts any other lower priority ISR.
Memory
[edit]Linux implements virtual memory with 5-level page tables.[274] The kernel is not pageable (meaning it is always resident in physical memory and cannot be swapped to the disk) and there is no memory protection (no SIGSEGV signals, unlike in user space), therefore memory violations lead to instability and system crashes.[12]: 20 User memory is pageable by default, although paging for specific memory areas can be disabled with the mlock()
system call family.
Page frame information is maintained in apposite data structures (of type struct page) that are populated immediately after boot and kept until shutdown, regardless of whether they are associated with virtual pages. The physical address space is divided into different zones, according to architectural constraints and intended use. NUMA systems with multiple memory banks are also supported.[275]
Small chunks of memory can be dynamically allocated in kernel space via the family of kmalloc()
APIs and freed with the appropriate variant of kfree()
. vmalloc()
and kvfree()
are used for large virtually contiguous chunks. alloc_pages()
allocates the desired number of entire pages.
The kernel used to include the SLAB, SLUB and SLOB allocators as configurable alternatives.[277][278] The SLOB allocator was removed in Linux 6.4[279] and the SLAB allocator was removed in Linux 6.8.[280] The sole remaining allocator is SLUB, which aims for simplicity and efficiency,[278] is PREEMPT_RT
compatible[281] and was introduced in Linux 2.6.
Supported architectures
[edit]While not originally designed to be portable,[15][282] Linux is now one of the most widely ported operating system kernels, running on a diverse range of systems from the ARM architecture to IBM z/Architecture mainframe computers. The first port was performed on the Motorola 68000 platform. The modifications to the kernel were so fundamental that Torvalds viewed the Motorola version as a fork and a "Linux-like operating system".[282] However, that moved Torvalds to lead a major restructure of the code to facilitate porting to more computing architectures. The first Linux that, in a single source tree, had code for more than i386 alone, supported the DEC Alpha AXP 64-bit platform.[283][284][282]
Linux runs as the main operating system on IBM's Summit; as of October 2019[update], all of the world's 500 fastest supercomputers run some operating system based on the Linux kernel,[285] a big change from 1998 when the first Linux supercomputer got added to the list.[286]
Linux has also been ported to various handheld devices such as Apple's iPhone 3G and iPod.[287]
Supported devices
[edit]In 2007, the LKDDb project has been started to build a comprehensive database of hardware and protocols known by Linux kernels.[288] The database is built automatically by static analysis of the kernel sources. Later in 2014, the Linux Hardware project was launched to automatically collect a database of all tested hardware configurations with the help of users of various Linux distributions.[289]
Live patching
[edit]This section needs to be updated.(September 2023) |
Rebootless updates can even be applied to the kernel by using live patching technologies such as Ksplice, kpatch and kGraft. Minimalistic foundations for live kernel patching were merged into the Linux kernel mainline in kernel version 4.0, which was released on 12 April 2015. Those foundations, known as livepatch and based primarily on the kernel's ftrace functionality, form a common core capable of supporting hot patching by both kGraft and kpatch, by providing an application programming interface (API) for kernel modules that contain hot patches and an application binary interface (ABI) for the userspace management utilities. However, the common core included into Linux kernel 4.0 supports only the x86 architecture and does not provide any mechanisms for ensuring function-level consistency while the hot patches are applied. As of April 2015[update], there is ongoing work on porting kpatch and kGraft to the common live patching core provided by the Linux kernel mainline.[290][291][292]
Security
[edit]Kernel bugs present potential security issues. For example, they may allow for privilege escalation or create denial-of-service attack vectors. Over the years, numerous bugs affecting system security were found and fixed.[293] New features are frequently implemented to improve the kernel's security.[294][295]
Capabilities(7) have already been introduced in the section about the processes and threads. Android makes use of them and systemd gives administrators detailed control over the capabilities of processes.[296]
Linux offers a wealth of mechanisms to reduce kernel attack surface and improve security which are collectively known as the Linux Security Modules (LSM).[297] They comprise the Security-Enhanced Linux (SELinux) module, whose code has been originally developed and then released to the public by the NSA,[298] and AppArmor[182] among others. SELinux is now actively developed and maintained on GitHub.[181] SELinux and AppArmor provide support to access control security policies, including mandatory access control (MAC), though they profoundly differ in complexity and scope.
Another security feature is the Seccomp BPF (SECure COMPuting with Berkeley Packet Filters) which works by filtering parameters and reducing the set of system calls available to user-land applications.[299]
Critics have accused kernel developers of covering up security flaws, or at least not announcing them; in 2008, Torvalds responded to this with the following:[300][301]
I personally consider security bugs to be just "normal bugs". I don't cover them up, but I also don't have any reason what-so-ever to think it's a good idea to track them and announce them as something special...one reason I refuse to bother with the whole security circus is that I think it glorifies—and thus encourages—the wrong behavior. It makes "heroes" out of security people, as if the people who don't just fix normal bugs aren't as important. In fact, all the boring normal bugs are way more important, just because there's[sic] a lot more of them. I don't think some spectacular security hole should be glorified or cared about as being any more "special" than a random spectacular crash due to bad locking.
Linux distributions typically release security updates to fix vulnerabilities in the Linux kernel. Many offer long-term support releases that receive security updates for a certain Linux kernel version for an extended period of time.
Legal
[edit]Licensing terms
[edit]Initially, Torvalds released Linux under a license which forbade any commercial use.[302] This was changed in version 0.12 by a switch to the GNU General Public License version 2 (GPLv2).[20] This license allows distribution and sale of possibly modified and unmodified versions of Linux but requires that all those copies be released under the same license and be accompanied by - or that, on request, free access is given to - the complete corresponding source code.[303] Torvalds has described licensing Linux under the GPLv2 as the "best thing I ever did".[302]
The Linux kernel is licensed explicitly under GNU General Public License version 2 only (GPL-2.0-only) with an explicit syscall exception (Linux-syscall-note),[6][9][10] without offering the licensee the option to choose any later version, which is a common GPL extension. Contributed code must be available under GPL-compatible license.[11][193]
There was considerable debate about how easily the license could be changed to use later GPL versions (including version 3), and whether this change is even desirable.[304] Torvalds himself specifically indicated upon the release of version 2.4.0 that his own code is released only under version 2.[305] However, the terms of the GPL state that if no version is specified, then any version may be used,[306] and Alan Cox pointed out that very few other Linux contributors had specified a particular version of the GPL.[307]
In September 2006, a survey of 29 key kernel programmers indicated that 28 preferred GPLv2 to the then-current GPLv3 draft. Torvalds commented, "I think a number of outsiders... believed that I personally was just the odd man out because I've been so publicly not a huge fan of the GPLv3."[308] This group of high-profile kernel developers, including Torvalds, Greg Kroah-Hartman and Andrew Morton, commented on mass media about their objections to the GPLv3.[309] They referred to clauses regarding DRM/tivoization, patents, "additional restrictions" and warned a Balkanisation of the "Open Source Universe" by the GPLv3.[309][310] Torvalds, who decided not to adopt the GPLv3 for the Linux kernel, reiterated his criticism even years later.[311]
Loadable kernel modules
[edit]It is debated whether some loadable kernel modules (LKMs) are to be considered derivative works under copyright law, and thereby whether or not they fall under the terms of the GPL.
In accordance with the license rules, LKMs using only a public subset of the kernel interfaces[218][219] are non-derived works, thus Linux gives system administrators the mechanisms to load out-of-tree binary objects into the kernel address space.[11]
Существуют некоторые загружаемые вне дерева модули, которые законно используют функцию ядра dma_buf . [312] GPL compliant code can certainly use it. However, a different possible use case would be Nvidia Optimus that pairs a fast GPU with an Intel integrated GPU, where the Nvidia GPU writes into the Intel framebuffer when it is active. But, Nvidia cannot use this infrastructure because it necessitates bypassing a rule that can only be used by LKMs that are also GPL.[220] Alan Cox replied on LKML, rejecting a request from one of Nvidia's engineers to remove this technical enforcement from the API.[313] Торвальдс четко заявил в LKML, что «[я] заявляю, что модули ядра, состоящие только из двоичных файлов, ЯВЛЯЮТСЯ производными «по умолчанию»». [314]
С другой стороны, Торвальдс также сказал, что «[одна] серая зона, в частности, представляет собой что-то вроде драйвера, который изначально был написан для другой операционной системы (т. е. явно не является производной версией Linux). ЭТО серая зона. , и _это_ - это область, в которой я лично считаю, что некоторые модули можно считать не производными просто потому, что они не были разработаны для Linux и не зависят от какого-либо особого поведения Linux». [315] проприетарные В частности, активно обсуждаются графические драйверы.
Всякий раз, когда в Linux загружаются проприетарные модули, ядро помечает себя как «испорченное». [316] и поэтому отчеты об ошибках из испорченных ядер часто игнорируются разработчиками.
Бинарные файлы прошивки
[ редактировать ]Официальное ядро, то есть ветка Linus git в репозитории kernel.org, содержит двоичные объекты, выпущенные в соответствии с условиями лицензии GNU GPLv2. [6] [11] Linux также может выполнять поиск в файловых системах в поисках двоичных объектов, проприетарного встроенного ПО, драйверов или других исполняемых модулей, а затем загружать и связывать их в пространство ядра. [317]
Когда это необходимо (например, для доступа к загрузочным устройствам или для повышения скорости), прошивка может быть встроена в ядро, это означает встраивание прошивки в vmlinux ; однако это не всегда приемлемый вариант по техническим или юридическим вопросам (например, не разрешается делать это с прошивкой, не совместимой с GPL, хотя, тем не менее, это довольно распространено). [318]
Торговая марка
[ редактировать ]Linux является зарегистрированной торговой маркой Линуса Торвальдса в США, Европейском Союзе и некоторых других странах. [319] [320] Судебная тяжба по поводу товарного знака началась в 1996 году, когда Уильям Делла Кроче, юрист, никогда не занимавшийся разработкой Linux, начал требовать лицензионные сборы за использование слова Linux . После того, как было доказано, что это слово широко использовалось задолго до того, как Делла Кроче заявил о первом использовании, товарный знак был передан Торвальдсу. [321] [322] [323]
См. также
[ редактировать ]- Микроядро — ядро, предоставляющее меньше служб, чем традиционное ядро.
- История версий ядра Linux — история версий ядра Linux.
- Сравнение операционных систем
- Сравнение ядер операционных систем
- Linux — семейство Unix-подобных операционных систем.
- Minix 3 – Unix-подобная операционная система.
- macOS – операционная система для компьютеров Apple.
- Microsoft Windows – Компьютерные операционные системы
Примечания
[ редактировать ]- ^ В целом исходный код Linux предоставляется на условиях лицензии только GPL-2.0 с явным исключением системного вызова. [9] [10] Помимо этого, отдельные файлы могут предоставляться под другой лицензией, которая должна быть совместима только с лицензией GPL-2.0 (т. е. с GNU General Public License версии 2) или двойной лицензией, причем одним из вариантов является GPL версии 2 или лицензия, совместимая с GPLv2. [11]
Ссылки
[ редактировать ]- ^ «Логотипы и талисманы Linux» . Линукс онлайн. 2008. Архивировано из оригинала 15 августа 2010 года . Проверено 11 августа 2009 г.
- ^ Грег Кроа-Хартман (3 августа 2024 г.). «Линукс 6.10.3» . Проверено 4 августа 2024 г.
- ^ Линус Торвальдс (4 августа 2024 г.). «Линукс 6.11-rc2» . Проверено 4 августа 2024 г.
- ^ Бергманн, Арнд (3 марта 2022 г.). «Kbuild: перейти к -std=gnu11» . git.kernel.org .
- ^ Jump up to: а б Доказано, Лиам. «Linux 6.1: Rust поражает основное ядро» . Регистр . Проверено 12 мая 2023 г.
- ^ Jump up to: а б с д «КОПИРОВАНИЕ» . git.kernel.org . Архивировано из оригинала 2 сентября 2021 года . Проверено 2 сентября 2021 г.
- ^ «Только GPL-2.0» . spdx.org . Проверено 2 сентября 2021 г.
- ^ «Linux-syscall-note» . spdx.org . Проверено 2 сентября 2021 г.
- ^ Jump up to: а б «GPL-2.0» . git.kernel.org .
- ^ Jump up to: а б «Linux-syscall-note» . git.kernel.org .
- ^ Jump up to: а б с д и ж «Правила лицензирования ядра Linux — Документация по ядру Linux» . www.kernel.org . Архивировано из оригинала 7 марта 2020 года . Проверено 6 января 2020 г.
- ^ Jump up to: а б с д и ж г час я дж к л м н С любовью, Роберт (2010). Разработка ядра Linux (3-е изд.). Река Аппер-Сэддл, Нью-Джерси: Аддисон-Уэсли . ISBN 978-0-672-32946-3 . OCLC 268788260 .
- ^ «Расширения C (с использованием коллекции компиляторов GNU (GCC))» . gcc.gnu.org . Архивировано из оригинала 20 ноября 2020 года . Проверено 13 ноября 2020 г.
- ^ Jump up to: а б Ричардсон, Марджори (1 ноября 1999 г.). «Интервью: Линус Торвальдс» . Linux-журнал. Архивировано из оригинала 14 мая 2011 года . Проверено 20 августа 2009 г.
- ^ Jump up to: а б Торвальдс, Линус Бенедикт (26 августа 1991 г.). «Что бы вы больше всего хотели видеть в миниксе?» . Группа новостей : comp.os.minix . Usenet: [электронная почта защищена] . Архивировано из оригинала 9 мая 2013 года . Проверено 14 сентября 2016 г.
- ^ Jump up to: а б Валлийский, Мэтт; Дальхаймер, Матиас Калле; Кауфман, Лар (1999). «1: Введение в Linux». Запуск Linux (3-е изд.). Севастополь, Калифорния: O'Reilly Media, Inc., с. 5. ISBN 1-56592-976-4 . OCLC 50638246 .
- ^ «Бесплатные миникс-подобные исходные коды ядра для 386-AT — Группы Google» . groups.google.com . 5 октября 1991 года. Архивировано из оригинала 1 марта 2021 года . Проверено 19 марта 2020 г.
- ^ Уильямс, Сэм (март 2002 г.). «Глава 9: Стандартная общественная лицензия GNU» . Свободно как свобода: крестовый поход Ричарда Столлмана за свободное программное обеспечение . О'Рейли . ISBN 0-596-00287-4 . Проверено 12 ноября 2010 г.
- ^ Jump up to: а б с Кристин Бреснахан и Ричард Блюм (2016). LPIC-2: Учебное пособие по сертификации профессионального института Linux: экзамен 201 и экзамен 202 . Джон Уайли и сыновья. п. 107. ИСБН 9781119150794 .
- ^ Jump up to: а б Торвальдс, Линус . «Примечания к выпуску Linux v0.12» . Архивы ядра Linux. Архивировано из оригинала 19 августа 2007 года . Проверено 21 февраля 2007 г.
- ^ Фред Хантельманн (2016). Руководство по началу работы с Linux: автономное введение . Springer Science & Business Media. п. 1. ISBN 9783642607493 .
- ^ Jump up to: а б с Фред Хантельманн (2016). Руководство по началу работы с Linux: автономное введение . Springer Science & Business Media. п. 16. ISBN 9783642607493 .
- ^ Саммерс, Дэвид В. (19 января 1992 г.). «Проблемы с разделами» . Группа новостей : alt.os.linux . Usenet: [электронная почта защищена] . Архивировано из оригинала 2 июня 2013 года . Проверено 7 января 2007 г.
- ^ Клегг, Алан Б. (31 марта 1992 г.). «Это здесь!» . Группа новостей : comp.os.linux . Usenet: [электронная почта защищена] . Архивировано из оригинала 2 июня 2013 года . Проверено 7 января 2007 г.
- ^ «Приложение А: Дебаты Таненбаума и Торвальдса» . Открытые исходные коды: голоса революции открытого исходного кода . О'Рейли . 1999. ISBN 1-56592-582-3 . Проверено 22 ноября 2006 г.
- ^ Таненбаум, Энди (29 января 1992 г.). «LINUX устарел» . Группа новостей : comp.os.minix . Usenet: [электронная почта защищена] . Архивировано из оригинала 17 октября 2011 года . Проверено 10 мая 2006 г.
- ^ Таненбаум, Энди (12 мая 2006 г.). «Дебаты Таненбаума-Торвальдса: Часть II» . Университет ВУ Амстердама . Архивировано из оригинала 5 августа 2015 года . Проверено 6 января 2007 г.
- ^ Хейворд, Дэвид (22 ноября 2012 г.). «История Linux: как время сформировало пингвина» . ТехРадар . Архивировано из оригинала 19 марта 2020 года . Проверено 19 марта 2020 г.
- ^ Хейворд, Дэвид (22 ноября 2012 г.). «История Linux: как время сформировало пингвина» . ТехРадар . Архивировано из оригинала 19 марта 2020 года . Проверено 26 марта 2020 г. .
- ^ Jump up to: а б с Кристин Бреснахан и Ричард Блюм (2016). LPIC-2: Учебное пособие по сертификации профессионального института Linux: экзамен 201 и экзамен 202 . Джон Уайли и сыновья. п. 108. ИСБН 9781119150794 .
- ^ Торвальдс, Линус (9 июня 1996 г.). «Linux 2.0 действительно выпущен». LKML (список рассылки). Архивировано из оригинала 2 апреля 2015 года . Проверено 8 марта 2015 г.
- ^ Jump up to: а б «Система сборки ядра — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 22 июля 2020 года . Проверено 17 июля 2020 г.
- ^ Jump up to: а б «Kconfig make config — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 17 июля 2020 года . Проверено 13 сентября 2020 г.
- ^ Торвальдс, Линус (20 января 1999 г.). «2.2.0-финал» . LKML (список рассылки). Архивировано из оригинала 2 апреля 2015 года . Проверено 8 марта 2015 г.
- ^ Jump up to: а б «Чудесный мир Linux 2.2» . 26 января 1999 года. Архивировано из оригинала 6 ноября 2014 года . Проверено 27 октября 2008 г.
- ^ «Наблюдения и заметки по Linux/390» . linuxvm.org . Архивировано из оригинала 26 февраля 2019 года . Проверено 29 марта 2020 г.
- ^ Торвальдс, Линус (4 января 2001 г.). «И о, кстати». LKML (список рассылки). Архивировано из оригинала 26 января 2016 года . Проверено 8 марта 2015 г.
- ^ «Чудесный мир Linux 2.4» . Архивировано из оригинала 17 марта 2005 года . Проверено 27 октября 2008 г.
- ^ Торвальдс, Линус (17 декабря 2003 г.). «Линукс 2.6.0» . LKML (список рассылки). Архивировано из оригинала 2 апреля 2015 года . Проверено 28 февраля 2015 г.
- ^ «proc(5) — страница руководства Linux» (см. /proc/sys/kernel/pid_max). Архивировано из оригинала 7 февраля 2014 года . Проверено 19 февраля 2014 г.
- ^ «btrfs вики» . btrfs.wiki.kernel.org . Архивировано из оригинала 25 апреля 2012 года . Проверено 17 июля 2020 г.
- ^ Фред Хантельманн (2016). Руководство по началу работы с Linux: автономное введение . Springer Science & Business Media. стр. 1–2. ISBN 9783642607493 .
- ^ Список рассылки ядра Linux (17 июня 2005 г.). «Линукс 2.6.12» . git-commits-head (список рассылки). Архивировано из оригинала 26 января 2016 года . Проверено 23 января 2008 г.
- ^ Кроа-Хартман, Грег (3 августа 2006 г.). «Адриан Банк теперь берет на себя управление стабильной веткой версии 2.6.16» . LKML (список рассылки). Архивировано из оригинала 26 января 2016 года . Проверено 21 февраля 2015 г.
- ^ Ротвелл, Стивен (12 февраля 2008 г.). "Анонс: Linux-next (Или мечта Андрея :-))" . LKML (список рассылки). Архивировано из оригинала 24 ноября 2010 года . Проверено 30 октября 2010 г.
- ^ Корбет, Джонатан (21 октября 2010 г.). «Linux-next и процесс управления исправлениями» . LWN.net . Eklektix, Inc. Архивировано из оригинала 21 июня 2010 года . Проверено 30 октября 2010 г.
- ^ «Архивы ядра Linux» . Кернел.орг. Архивировано из оригинала 30 января 1998 года . Проверено 22 января 2014 г.
- ^ «Добавьте личность, чтобы сообщить номера версий 2.6.x [LWN.net]» . lwn.net . Архивировано из оригинала 16 июля 2020 года . Проверено 15 июля 2020 г.
- ^ Jump up to: а б Торвальдс, Линус (21 июля 2011 г.). «Выпуск Linux 3.0» . Список рассылки ядра Linux . Архивировано из оригинала 18 октября 2019 года . Проверено 16 мая 2013 г.
- ^ Торвальдс, Линус (30 мая 2011 г.). «Линукс 3.0-rc1» . LKML (список рассылки). Архивировано из оригинала 31 мая 2011 года . Проверено 1 июля 2013 г.
- ^ Торвальдс, Линус (10 апреля 2001 г.). «Re: [ИСПРАВЛЕНИЕ] исправление i386 rw_semaphores» . yarchive.net . Проверено 26 мая 2024 г.
- ^ Воан-Николс, Стивен Дж. (13 декабря 2012 г.). «Прощай, 386: Linux прекратит поддержку чипов i386 в следующем крупном выпуске» . ЗДНет . CBS Интерактив . Архивировано из оригинала 17 февраля 2015 года . Проверено 6 февраля 2013 г.
- ^ Фингас, Джон (15 декабря 2012 г.). «Linux прекратит поддержку i386 в ядре 3.8, заставит нас обновить нашу установку Doom» . Engadget . АОЛ . Архивировано из оригинала 2 апреля 2015 года . Проверено 22 марта 2015 г.
- ^ Воан-Николс, Стивен Дж. (11 декабря 2012 г.). «Выходит Linux 3.7, разработчики ARM радуются» . ЗДНет . CBS Интерактив . Архивировано из оригинала 5 ноября 2014 года . Проверено 6 февраля 2013 г.
- ^ Торвальдс, Линус (12 апреля 2015 г.). «Выпущен Linux 4.0» . LKML (список рассылки). Архивировано из оригинала 13 апреля 2015 года . Проверено 12 апреля 2015 г.
- ^ Торвальдс, Линус (2 сентября 2013 г.). «Линукс 3.11» . LKML (список рассылки). Архивировано из оригинала 26 февраля 2014 года . Проверено 3 сентября 2013 г.
- ^ «Линукс 3.11» . kernelnewbies.org. 2 сентября 2013 года . Проверено 21 января 2014 г.
- ^ «Фонд Linux публикует отчет о разработке Linux» . Фонд Linux . 18 февраля 2015 года. Архивировано из оригинала 19 июля 2016 года . Проверено 20 февраля 2015 г.
- ^ Майкл Ларабель (23 июня 2014 г.). «Ядро Linux с объемом кода в 19,5 миллионов строк продолжает расти» . Фороникс . Архивировано из оригинала 23 ноября 2020 года . Проверено 23 июня 2015 г.
- ^ Корбет, Джонатан (3 августа 2020 г.). «Некоторая статистика из цикла ядра 5.8» . LWN — Еженедельные новости Linux . Архивировано из оригинала 4 сентября 2020 года . Проверено 11 августа 2020 г. .
- ^ «Опрос разработчиков Stack Overflow 2019 — самые популярные технологии» . Переполнение стека . Архивировано из оригинала 8 октября 2020 года . Проверено 17 марта 2020 г.
- ^ «Опрос разработчиков Stack Overflow 2019 — среды и инструменты разработки» . Переполнение стека . Архивировано из оригинала 7 марта 2020 года . Проверено 17 марта 2020 г.
- ^ «Статистика использования и доля рынка операционных систем для веб-сайтов, март 2020 г.» . w3techs.com . Проверено 17 марта 2020 г.
- ^ «Статистика использования и доля рынка Unix для веб-сайтов, март 2020 г.» . w3techs.com . Проверено 17 марта 2020 г.
- ^ «ТОП500 суперкомпьютерных сайтов: Семейство операционных систем/Linux» . Топ500.org. Архивировано из оригинала 19 ноября 2012 года . Проверено 5 октября 2019 г.
- ^ «Gartner заявляет, что продажи планшетов составят менее 10 процентов всех устройств в 2014 году» (пресс-релиз). Эгам, Великобритания : Gartner . 15 октября 2014 года. Архивировано из оригинала 17 октября 2014 года . Проверено 19 октября 2014 г.
- ^ Лунден, Ингрид (15 октября 2014 г.). «Рост продаж планшетов резко упал в 2014 году, поскольку Android-смартфоны продолжают стремительно расти: Gartner» . ТехКранч . АОЛ . Архивировано из оригинала 23 октября 2014 года . Проверено 23 октября 2014 г.
- ^ «Глобальные поставки ПК превзошли прогнозы при незначительном улучшении потребительского спроса, в то время как Apple переместилась на пятое место по данным IDC» (пресс-релиз). Фрамингем, Массачусетс : IDC . 8 октября 2014 года. Архивировано из оригинала 11 октября 2014 года . Проверено 19 октября 2014 г.
- ^ Уиллер, Дэвид А. «Ядро Linux 2.6: оно стоит большего!» . Архивировано из оригинала 20 августа 2011 года . Проверено 18 января 2007 г.
- ^ «Экономическое влияние FLOSS на инновации и конкурентоспособность сектора ИКТ ЕС» (PDF) (таблица 3 на стр. 50). Архивировано (PDF) из оригинала 15 февраля 2010 года . Проверено 8 января 2011 г.
- ^ «Оценка общей стоимости разработки дистрибутива Linux» (PDF) (таблица на странице 6). Архивировано из оригинала (PDF) 11 июля 2010 года.
- ^ «Ядро на миллиард долларов» . Linux.slashdot.org. 24 февраля 2010 года. Архивировано из оригинала 15 мая 2011 года . Проверено 12 ноября 2010 г.
- ^ Уилер, Дэвид. «Ядро Linux: оно стоит большего!» . Архивировано из оригинала 24 февраля 2021 года . Проверено 17 сентября 2012 г.
- ^ «Архивы ядра Linux» . www.kernel.org . Проверено 28 февраля 2023 г.
- ^ Jump up to: а б «Состояние разработки ядра Linux в 2017 году» . Фонд Linux . 25 октября 2017 г. Архивировано из оригинала 27 мая 2020 г. . Проверено 27 мая 2020 г.
- ^ «Почему я ушёл: разработчик ядра Кон Коливас» . Журнал АПК . Журналы АКП. 24 июля 2007 г. Архивировано из оригинала 7 июля 2011 г. Проверено 15 августа 2011 г.
- ^ Корбет, Джонатан (25 июля 2007 г.). «Re: Планы слияния -mm для версии 2.6.23» . LWN.net. Архивировано из оригинала 11 февраля 2018 года . Проверено 10 февраля 2018 г.
- ^ Кокс, Алан (28 июля 2009 г.). «Re: [ИСПРАВЛЕНИЕ] kdesu сломано» . Архивировано из оригинала 11 февраля 2018 года . Проверено 10 февраля 2018 г.
- ^ Родригес, Голдвин (22 января 2011 г.). «История двух целей SCSI» . Архивировано из оригинала 15 февраля 2018 года . Проверено 14 февраля 2018 г.
- ^ Штайнмец, Андреас (17 января 2013 г.). «LIO — сломанная целевая реализация iSCSI» . Архивировано из оригинала 15 февраля 2018 года . Проверено 14 февраля 2018 г.
- ^ Пол, Райан (19 июня 2012 г.). «Линус Торвальдс говорит NVIDIA: «Да пошли вы!» . Архивировано из оригинала 15 февраля 2018 года . Проверено 14 февраля 2018 г.
- ^ Джон Голд (3 апреля 2014 г.). «Линус Торвальдс отстраняет ключевого разработчика Linux: паника ядра, когда разработчик Systemd тыкает медведя» . Архивировано из оригинала 24 марта 2019 года . Проверено 24 марта 2019 г.
- ^ Пёттеринг, Леннарт (6 октября 2014 г.). «О болезни сообщества ядра Linux» . Гугл+ . Архивировано из оригинала 27 мая 2018 года . Проверено 10 февраля 2018 г.
- ^ Бродкин, Джон (6 марта 2015 г.). «VMware якобы нарушала лицензию Linux на открытый исходный код в течение многих лет» . Арс Техника . Архивировано из оригинала 15 февраля 2018 года . Проверено 14 февраля 2018 г.
- ^ Маккарти, Кирен (26 августа 2016 г.). «Оскорбив всех в мире, Линус Торвальдс называет своих адвокатов «мерзкой гноящейся болезнью» » . Регистр . Архивировано из оригинала 15 февраля 2018 года . Проверено 14 февраля 2018 г.
- ^ Кроа-Хартман, Грег. «[ИСПРАВЛЕНИЕ 000/190] Отмена всех коммитов umn.edu» . Архив списка рассылки ядра Linux . Проверено 13 января 2022 г.
- ^ Чин, Моника (30 апреля 2021 г.). «Как университету запретили использование ядра Linux» . Грань . Проверено 13 января 2022 г.
- ^ Корбет, Джонатан (10 сентября 2007 г.). «KS2007: Отношения с разработчиками и процесс разработки» . LWN.net . Архивировано из оригинала 12 февраля 2018 года . Проверено 11 февраля 2018 г.
- ^ Бродкин, Джон (16 июля 2013 г.). «Линус Торвальдс защищает свое право опозорить разработчиков ядра Linux» . АРС Техника . Архивировано из оригинала 17 февраля 2018 года . Проверено 11 февраля 2018 г.
- ^ Корбет, Джонатан (9 марта 2015 г.). «Конфликтный код ядра» . LWN.net . Архивировано из оригинала 12 февраля 2018 года . Проверено 11 февраля 2018 г.
- ^ Корбет, Джонатан (18 сентября 2018 г.). «Кодекс, конфликт и поведение» . LWN.net . Архивировано из оригинала 19 сентября 2018 года . Проверено 19 сентября 2018 г.
- ^ Коэн, Ноам (19 сентября 2018 г.). «После многих лет оскорбительных писем по электронной почте создатель Linux уходит в сторону» . Житель Нью-Йорка . Архивировано из оригинала 20 февраля 2020 года . Проверено 24 сентября 2018 г.
- ^ Ларабель, Майкл. «Отказ от ненормативной лексики в комментариях к коду ядра: Linux получает «обнимашки» » . Фороникс . Архивировано из оригинала 21 апреля 2019 года . Проверено 15 июня 2019 г.
- ^ «Кодекс конфликта» . Проверено 4 февраля 2018 г. [ постоянная мертвая ссылка ]
- ^ Шарвуд, Саймон (6 октября 2015 г.). «Разработчик ядра Linux, который попросил Линуса Торвальдса прекратить словесные оскорбления, ушёл из-за словесных оскорблений» . Регистр . Архивировано из оригинала 29 марта 2020 года . Проверено 4 февраля 2018 г.
- ^ Эдж, Джейк (31 января 2018 г.). «Слишком много лордов, недостаточно управляющих» . LWN.net . Архивировано из оригинала 9 ноября 2020 года . Проверено 4 февраля 2018 г.
- ^ Корбет, Джонатан (6 ноября 2017 г.). «Разгромить тех, кто сопровождает ядро» . LWN.net . Архивировано из оригинала 26 января 2021 года . Проверено 4 февраля 2018 г.
- ^ «Эволюция Linux» (PDF) . 26 марта 2008 г. Архивировано (PDF) из оригинала 14 декабря 2013 г. . Проверено 6 ноября 2013 г.
- ^ «Постоянная разработка: модель жизненного цикла ядра Linux» (PDF) . 25 октября 2011 г. Архивировано (PDF) из оригинала 17 октября 2013 г. . Проверено 6 ноября 2013 г.
- ^ Кроа-Хартман, Грег (12 февраля 2008 г.). "Re: Анонс: Linux-next (Или мечта Андрея :-))" . Список рассылки ядра Linux (список рассылки). Архивировано из оригинала 2 февраля 2017 года . Проверено 30 января 2017 г.
- ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux . Пирсон Образование. п. 11. ISBN 9780768696790 .
- ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux . Пирсон Образование. п. 12. ISBN 9780768696790 .
- ^ «Как работает процесс разработки» . Архивировано из оригинала 9 декабря 2017 года . Проверено 4 февраля 2018 г.
- ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux . Пирсон Образование. п. 13. ISBN 9780768696790 .
- ^ «Кодекс поведения участников Соглашения» . Документация ядра Linux . Проверено 6 октября 2021 г.
- ^ «Толкование Кодекса поведения участников Linux Kernel Covenant» . Документация ядра Linux . Проверено 6 октября 2021 г.
- ^ Уильямс, Дэн. «[ИСПРАВЛЕНИЕ] CodingStyle: содержащая терминология» . Список рассылки ядра Linux .
- ^ Тим Андерсон. «Минимальный компилятор ядра Linux повышен до GCC 5.1, что позволяет потенциально использовать C11» . Регистр . Проверено 12 мая 2023 г.
- ^ Ларабель, Майкл. «Переход с C89 на C11/GNU11 с Linux 5.18» . www.phoronix.com . Проверено 12 мая 2023 г.
- ^ Шарвуд, Саймон (11 декабря 2022 г.). «Линус Торвальдс раскрывает ядро Linux 6.1» . Регистр . Проверено 12 мая 2023 г.
- ^ Корбет, Джонатан. «Ржавчина в ядре 6.2» . LWN.net . Проверено 12 мая 2023 г.
- ^ Ларабель, Майкл. «Подготовлено больше кода Rust для Linux 6.3 — ближе к внедрению драйверов Rust» . Фороникс . Проверено 12 мая 2023 г.
- ^ «КАК разрабатывать ядро Linux — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 4 января 2020 г.
- ^ «Стиль кодирования ядра Linux — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 5 января 2020 года . Проверено 4 января 2020 г.
- ^ Jump up to: а б «Как работает процесс разработки — Документация ядра Linux» . Кернел.орг . Архивировано из оригинала 9 декабря 2017 года . Проверено 26 марта 2020 г. .
- ^ Куббилун, Инго А. (2 июня 2004 г.). «Патч ядра Linux для компилятора Intel» (на немецком языке). Pyrillion.org. Архивировано из оригинала 22 июля 2011 года . Проверено 12 ноября 2010 г.
- ^ Тимофей (26 февраля 2009 г.). «Проект высокопроизводительного ядра Linux — LinuxDNA» . Слэшдот Линукс . Холдинг Дайс . Архивировано из оригинала 18 октября 2019 года . Проверено 30 октября 2010 г.
- ^ Райан, Джастин (25 февраля 2009 г.). «LinuxDNA расширяет возможности Linux с помощью компилятора Intel C/C++» . Linux-журнал . Belltown Media, Inc. Архивировано из оригинала 9 ноября 2020 года . Проверено 30 октября 2010 г.
- ^ Ларабель, Майкл (5 марта 2023 г.). «В Linux 6.3 прекращена поддержка компилятора Intel ICC» . Фороникс . Проверено 6 марта 2023 г.
- ^ Лельбах, Брайс (25 октября 2010 г.). «Clang собирает работающее ядро Linux (загружается до RL5 с SMP, сетью и X, собственными хостами)» . cfe-dev (список рассылки). Архивировано из оригинала 7 сентября 2015 года.
- ^ Ларабель, Майкл (12 апреля 2014 г.). «Linux 3.15 почти можно скомпилировать под Clang LLVM» . Фороникс . Архивировано из оригинала 13 августа 2020 года . Проверено 10 июня 2014 г.
- ^ Ларабель, Майкл . «Пакет за патчем LLVM Clang становится лучше при создании ядра Linux» . Фороникс . Архивировано из оригинала 13 августа 2020 года . Проверено 20 ноября 2014 г.
- ^ Эдж, Джейк (7 мая 2013 г.). «LFCS: Проект LLVMLinux» . LWN.net . Архивировано из оригинала 10 августа 2020 года . Проверено 3 марта 2015 г.
- ^ Мёллер, Ян-Симон (2 февраля 2014 г.). «LLVMLinux: Ядро Linux с крыльями дракона» (PDF) . Проект ЛЛВМ . Архивировано (PDF) из оригинала 3 августа 2020 г. Проверено 3 марта 2015 г.
- ^ Десольнье, Ник; Хакманн, Грег; Хайнс, Стивен (18 октября 2017 г.). «Собрание разработчиков LLVM 2017: компиляция пользовательского пространства Android и ядра Linux с помощью LLVM» . Ютуб . Архивировано из оригинала 31 декабря 2020 года . Проверено 7 декабря 2020 г.
- ^ Хакманн, Грег (2 февраля 2017 г.). «Серия патчей marlin-nougat-mr1-clang» . Архивировано из оригинала 10 декабря 2020 года . Проверено 6 декабря 2020 г.
- ^ Кельке, Матиас (22 октября 2018 г.). «cros-kernel2: сделать clang компилятором по умолчанию для сборок ядра» . Архивировано из оригинала 10 декабря 2020 года . Проверено 6 декабря 2020 г.
- ^ Ларабель, Майкл (4 февраля 2019 г.). «Использование LLVM Clang для компиляции ядра Linux снова набирает обороты благодаря Google» . Фороникс . Архивировано из оригинала 25 ноября 2020 года . Проверено 6 декабря 2020 г.
- ^ Десольнье, Ник (10 декабря 2019 г.). «vts: ядро: принудительно использовать vts_kernel_toolchain для всех TARGET_ARCH для R» . Архивировано из оригинала 10 декабря 2020 года . Проверено 6 декабря 2020 г.
- ^ Десольнье, Ник (19 ноября 2020 г.). «Re: нарушение подписи указателя функции» . ЛКМЛ . Проверено 6 декабря 2020 г.
- ^ Брэдфорд, Джон (8 марта 2003 г.). «Re: что такое упс» . LKML (список рассылки). Архивировано из оригинала 31 октября 2014 года . Проверено 30 октября 2010 г.
- ^ «syslog(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 13 октября 2020 года . Проверено 15 августа 2020 г. .
- ^ «kmsg: экспортировать записи printk в интерфейс /dev/kmsg [LWN.net]» . lwn.net . Архивировано из оригинала 2 октября 2015 года . Проверено 16 августа 2020 г. .
- ^ Посмотрите, что делает ваш компьютер с помощью утилит Ftrace , 24 января 2019 г., заархивировано из оригинала 15 декабря 2021 г. , получено 9 мая 2021 г.
- ^ «Отладка ядра с помощью Ftrace — часть 1 [LWN.net]» . lwn.net . Архивировано из оригинала 9 ноября 2020 года . Проверено 15 сентября 2020 г.
- ^ «Отладка ядра с помощью Ftrace — часть 2 [LWN.net]» . lwn.net . Архивировано из оригинала 31 марта 2020 года . Проверено 15 сентября 2020 г.
- ^ «ftrace — Function Tracer — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 19 сентября 2020 года . Проверено 15 сентября 2020 г.
- ^ «Отслеживание времени загрузки — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 31 октября 2020 года . Проверено 19 сентября 2020 г.
- ^ «Kernel Probes (Kprobes) — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 11 октября 2020 года . Проверено 6 октября 2020 г.
- ^ «Uprobe-tracer: Трассировка событий на основе Uprobe — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 4 декабря 2020 года . Проверено 6 октября 2020 г.
- ^ «Использование кгдб, кдб и внутренних компонентов отладчика ядра» . Mirrors.edge.kernel.org . Архивировано из оригинала 26 января 2021 года . Проверено 3 ноября 2020 г. .
- ^ Джин Салли (2010). Профессиональные встраиваемые системы Linux . Апресс. п. 252. ИСБН 9781430272267 .
- ^ Биллимория, Кайван Н. (2021). Программирование ядра Linux. Подробное руководство по внутреннему устройству ядра, написанию модулей ядра и синхронизации ядра . Бирмингем: Packt Publishing, Limited. п. 55. ИСБН 978-1-78995-592-7 . OCLC 1240585605 .
- ^ Вадува, Александру; Гонсалес, Алекс; Симмондс, Крис (2016). Linux: разработка встраиваемых систем: используйте возможности Linux для разработки увлекательных и мощных проектов встраиваемых систем Linux: курс из трех модулей . Бирмингем, Великобритания: Packt Publishing . п. 663. ИСБН 978-1-78712-445-5 . OCLC 960471438 .
- ^ Карим Ягмур (2008). Создание встроенных систем Linux (2-е изд.). Севастополь [Калифорния]: O'Reilly Media. п. 387. ИСБН 978-0-596-52968-0 . ОСЛК 273049576 .
- ^ Ягмур, Карим (2011). Встроенный Андроид . Севастополь, Калифорния: O'Reilly Media. п. 44. ИСБН 978-1-4493-2798-9 . OCLC 812180000 .
- ^ «SoC (Система на кристалле)» . OpenWrt Wiki . 6 ноября 2014 г. Архивировано из оригинала 23 августа 2022 г. . Проверено 15 марта 2021 г.
- ^ «Что делать с номерами CVE [LWN.net]» . lwn.net . Проверено 15 марта 2021 г.
- ^ Амадео, Рон (20 ноября 2019 г.). «Google обрисовывает планы по поддержке основного ядра Linux в Android» . Арс Техника . Проверено 31 марта 2021 г.
- ^ Брюшон, Джоди (24 апреля 2021 г.), jbruchon/elks , получено 27 апреля 2021 г.
- ^ «Состояние упреждения-рт» . linuxplumbersconf.org . Архивировано из оригинала 15 октября 2016 года . Проверено 14 июня 2016 г.
- ^ Мейер, Дэвид (3 февраля 2010 г.). «Разработчик Linux объясняет удаление кода ядра Android» . ЗДНет . CBS Интерактив . Архивировано из оригинала 15 октября 2016 года . Проверено 3 февраля 2010 г.
- ^ «Глава 03: Обзор платформы maemo» . Обзор технологии maemo . Нокиа . 2008. Архивировано из оригинала 16 июня 2008 года . Проверено 9 апреля 2010 г.
- ^ Кроа-Хартман, Грег (2 февраля 2010 г.). «Android и сообщество ядра Linux» . Архивировано из оригинала 27 апреля 2019 года . Проверено 3 февраля 2010 г.
- ^ Jump up to: а б Роджер Йе (2017). Системное программирование Android . Пакт Паблишинг. п. 14. ISBN 9781787120389 .
- ^ Торвальдс, Линус (19 сентября 2001 г.). «Происхождение Linux — Линус Торвальдс» . Ютуб . Архивировано из оригинала 15 декабря 2021 года . Проверено 6 декабря 2020 г.
- ^ «Файл Linux MAINTAINERS» . Архивировано из оригинала 12 января 2013 года.
- ^ Александру Вадува, Алекс Гонсалес и Крис Симмондс (2016). Linux: встроенная разработка . Пакт Паблишинг. п. 663. ИСБН 9781787124455 .
- ^ «ЧИТАЙТЕ» . git.kernel.org. Архивировано из оригинала 24 июля 2012 года . Проверено 24 марта 2021 г.
- ^ «KernelBuild — новички в ядре Linux» . kernelnewbies.org . Архивировано из оригинала 19 октября 2020 года . Проверено 13 сентября 2020 г.
- ^ «Интерфейс Sysctl» . Linux.it . Архивировано из оригинала 17 февраля 2020 года . Проверено 13 сентября 2020 г.
- ^ «sysctl(8) — страница руководства Linux» . man7.org . Архивировано из оригинала 30 сентября 2020 года . Проверено 13 сентября 2020 г.
- ^ «procfs(5) — страница руководства Linux» . man7.org . Архивировано из оригинала 24 сентября 2020 года . Проверено 13 сентября 2020 г.
- ^ «sched(7) — страница руководства Linux» . man7.org . Архивировано из оригинала 17 июля 2020 года . Проверено 27 июля 2020 г.
- ^ «Часто задаваемые вопросы: Упреждение» . kernelnewbies.org . 22 августа 2009 г. Архивировано из оригинала 7 августа 2020 г. . Проверено 7 мая 2015 г.
- ^ Jump up to: а б Джонатан Корбет (24 февраля 2003 г.). «Портирование драйверов: вытесняемое ядро» . LWN.net . Архивировано из оригинала 10 августа 2020 года . Проверено 7 мая 2015 г.
- ^ «Планировщик EEVDF объединен для Linux 6.6, повторно представлено планирование гибридного кластера Intel» . Фороникс .
- ^ Jump up to: а б Мольнар, Инго (13 апреля 2007 г.). «[исправление] Модульное ядро планировщика и полностью честный планировщик [CFS]» . LKML (список рассылки). Архивировано из оригинала 3 ноября 2020 года . Проверено 30 марта 2020 г.
- ^ «Совершенно честный планировщик | Linux Journal» . Linuxjournal.com . Архивировано из оригинала 3 августа 2020 года . Проверено 30 марта 2020 г.
- ^ «ioctl(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 20 июля 2020 года . Проверено 11 августа 2020 г. .
- ^ «aio(7) — страница руководства Linux» . man7.org . Архивировано из оригинала 12 апреля 2020 года . Проверено 11 августа 2020 г. .
- ^ «io_setup(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 20 августа 2020 года . Проверено 11 августа 2020 г. .
- ^ «КВМ» . Linux-kvm.org . Архивировано из оригинала 28 марта 2020 года . Проверено 29 марта 2020 г.
- ^ «TechComparison — Wiki по виртуализации Linux» . Virt.kernelnewbies.org . Архивировано из оригинала 3 августа 2020 года . Проверено 29 марта 2020 г.
- ^ «Поддержка_виртуализации_через_KVM в Linux_2_6_20 — новички в ядре Linux» . Kernelnewbies.org . Архивировано из оригинала 29 ноября 2019 года . Проверено 29 марта 2020 г.
- ^ Кукартс, Вим. «Основная ветка Linux содержит все биты кода Xen для поддержки Dom0 и DomU» . blogs.oracle.com . Архивировано из оригинала 3 августа 2020 года . Проверено 29 марта 2020 г.
- ^ «Xen отмечает полную поддержку Dom0 и DomU в Linux 3.0 – blog.xen.org» . 7 июня 2011 года. Архивировано из оригинала 7 июня 2011 года . Проверено 29 марта 2020 г.
- ^ Вилк, Конрад Жешутек (31 января 2014 г.). «Linux 3.14 и ПВХ» . Проект Зен . Архивировано из оригинала 29 марта 2020 года . Проверено 29 марта 2020 г.
- ^ «Введение в виртуализацию Xen | Руководство по виртуализации | openSUSE Leap 15.2» . doc.opensuse.org . Архивировано из оригинала 28 сентября 2020 года . Проверено 29 сентября 2020 г.
- ^ «Технология виртуализации | Руководство по виртуализации | openSUSE Leap 15.3» . doc.opensuse.org . Проверено 30 сентября 2021 г.
- ^ Jump up to: а б «Проект SELinux» . Гитхаб . Архивировано из оригинала 12 декабря 2019 года . Проверено 10 января 2020 г. .
- ^ Jump up to: а б «AppArmor — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 8 мая 2020 года . Проверено 10 января 2020 г. .
- ^ Джейк Эдж (25 ноября 2008 г.). «Символовые устройства в пользовательском пространстве» . LWN.net . Архивировано из оригинала 26 января 2021 года . Проверено 7 мая 2015 г.
- ^ Джонатан Корбет (2 мая 2007 г.). «UIO: драйверы пользовательского пространства» . LWN.net . Архивировано из оригинала 11 ноября 2020 года . Проверено 7 мая 2015 г.
- ^ Jump up to: а б с д «stable-api-nonsense — дерево исходного кода ядра Linux» . git.kernel.org . Архивировано из оригинала 5 марта 2021 года . Проверено 18 апреля 2020 г.
- ^ Горман, Мел (15 февраля 2004 г.). Общие сведения о диспетчере виртуальной памяти Linux (PDF) . Прентис Холл. п. 26. ISBN 0-13-145348-3 . Архивировано (PDF) из оригинала 3 мая 2019 года . Проверено 27 января 2020 г.
- ^ Грег Унгерер. «Объявление основной линии uClinux» . Архивировано из оригинала 31 октября 2007 года . Проверено 15 января 2008 г.
- ^ Jump up to: а б Нгуен, Бинь (30 июля 2004 г.). «Иерархия файловой системы Linux: Глава 1. Иерархия файловой системы Linux» . Проект документации Linux. Архивировано из оригинала 2 декабря 2020 года . Проверено 28 ноября 2012 г.
- ^ «Руководство администратора README» . Git-репозитории Kernel.org .
- ^ «Ядро Linux версии 5.x — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 4 января 2020 г.
- ^ «README\ABI\Documentation — kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux» . git.kernel.org . Архивировано из оригинала 1 октября 2020 года . Проверено 18 апреля 2020 г.
- ^ «syscalls\stable\ABI\Documentation — kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux» . git.kernel.org . Архивировано из оригинала 2 октября 2020 года . Проверено 18 апреля 2020 г.
- ^ Jump up to: а б «1.Intro.rst — Documentation/process/1.Intro.rst — исходный код Linux (v5.8) — Bootlin» . elixir.bootlin.com . Проверено 8 августа 2020 г.
- ^ Jump up to: а б «системные вызовы» . мужчина7 . Архивировано из оригинала 15 января 2020 года . Проверено 28 января 2020 г.
- ^ «intro(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 17 июля 2020 года . Проверено 16 июля 2020 г.
- ^ «клон» . man7.org . Архивировано из оригинала 18 января 2020 года . Проверено 28 января 2020 г.
- ^ "feature_test_macros" . man7.org . Архивировано из оригинала 19 января 2020 года . Проверено 28 января 2020 г.
- ^ «vdso(7) — страница руководства Linux» . man7.org . Архивировано из оригинала 2 февраля 2020 года . Проверено 2 февраля 2020 г.
- ^ Jump up to: а б «futex(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 31 января 2020 года . Проверено 2 февраля 2020 г.
- ^ «syscall(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 21 января 2020 года . Проверено 2 февраля 2020 г.
- ^ «sysfs(5) — страница руководства Linux» . man7.org . Архивировано из оригинала 18 января 2020 года . Проверено 6 января 2020 г.
- ^ «Правила доступа к информации в sysfs — Документация ядра Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 6 января 2020 г.
- ^ «Справочные спецификации Linux Foundation» . refspecs.linuxbase.org . Проверено 3 февраля 2020 г. .
- ^ «Спецификации LSB» . refspecs.linuxbase.org . Проверено 3 февраля 2020 г. .
- ^ «Стандартная базовая спецификация рабочего стола Linux, общая часть» . refspecs.linuxbase.org . Проверено 3 февраля 2020 г. .
- ^ «Нормативные ссылки» . refspecs.linuxfoundation.org . Архивировано из оригинала 12 августа 2020 года . Проверено 3 февраля 2020 г. .
- ^ «Стандартная базовая спецификация Linux, общая часть» . refspecs.linuxfoundation.org . Архивировано из оригинала 29 ноября 2019 года . Проверено 3 февраля 2020 г. .
- ^ «Двоичный интерфейс приложения System V — Редакция 4.1» (PDF) . Sco.com . Архивировано (PDF) из оригинала 13 декабря 2019 года . Проверено 3 февраля 2020 г. .
- ^ «Xinuos Inc. | Разработчики | Габи | 17 декабря 2003 г. | Двоичный интерфейс приложения System V — ПРОЕКТ» . Sco.com . Архивировано из оригинала 3 февраля 2020 года . Проверено 3 февраля 2020 г. .
- ^ «Формат исполняемых файлов и ссылок (ELF)» . Refspecs.linuxbase.org . Проверено 3 февраля 2020 г. .
- ^ «elf(5) — страница руководства Linux» . man7.org . Архивировано из оригинала 30 ноября 2020 года . Проверено 18 ноября 2020 г.
- ^ «Стандартная базовая спецификация Linux для X86-64» . Refspecs.linuxbase.org . Проверено 3 февраля 2020 г. .
- ^ «Двоичный интерфейс приложения System V — ПРОЕКТ» . Refspecs.linuxbase.org . Проверено 3 февраля 2020 г. .
- ^ Зайфарт, Рэй (2012). Введение в программирование на 64-битном языке ассемблера Intel для Linux . Независимая издательская платформа CreateSpace. п. 170. ИСБН 9781478119203 .
- ^ «Анатомия системного вызова, часть 1 [LWN.net]» . lwn.net . Архивировано из оригинала 18 августа 2020 года . Проверено 16 июля 2020 г.
- ^ «Анатомия системного вызова, часть 2 [LWN.net]» . lwn.net . Архивировано из оригинала 6 августа 2020 года . Проверено 16 июля 2020 г.
- ^ Дойчер, Алекс (7 октября 2014 г.). «Новый унифицированный драйвер AMD с открытым исходным кодом» . Фонд X.Org . Архивировано из оригинала 21 января 2015 года . Проверено 21 января 2015 г.
- ^ Jump up to: а б «Символы — ненадежное руководство по взлому ядра Linux — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 3 августа 2020 года . Проверено 8 февраля 2020 г.
- ^ Jump up to: а б «Экспортированные символы и внутренний API [LWN.net]» . Lwn.net . Архивировано из оригинала 31 марта 2020 года . Проверено 15 марта 2020 г.
- ^ Jump up to: а б «Отказ от экспорта kallsyms_lookup_name() [LWN.net]» . Lwn.net . Архивировано из оригинала 1 апреля 2020 года . Проверено 15 марта 2020 г.
- ^ «Деревья I: Основанные деревья [LWN.net]» . lwn.net . Архивировано из оригинала 8 ноября 2020 года . Проверено 13 ноября 2020 г.
- ^ «Деревья II: красно-черные деревья [LWN.net]» . lwn.net . Архивировано из оригинала 13 ноября 2020 года . Проверено 13 ноября 2020 г.
- ^ «Ненадежное руководство по взлому ядра Linux» . Kernel.org (1-е изд.). 2005. Архивировано из оригинала 16 февраля 2020 года . Проверено 15 марта 2020 г.
- ^ «Ненадежное руководство по взлому ядра Linux — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 15 марта 2020 г.
- ^ «Ненадежное руководство по блокировке — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 15 марта 2020 г.
- ^ «Руководство по интерфейсам SCSI — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 2 июня 2020 года . Проверено 11 июня 2020 г.
- ^ «Руководство разработчика libATA — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 30 мая 2020 года . Проверено 11 июня 2020 г.
- ^ «Внутреннее устройство DRM — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 1 июня 2020 года . Проверено 11 июня 2020 г.
- ^ «Настройка режима ядра (KMS) — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 11 июня 2020 года . Проверено 11 июня 2020 г.
- ^ «Введение механизма совместного использования буфера DMA [LWN.net]» . lwn.net . Архивировано из оригинала 11 июня 2020 года . Проверено 11 июня 2020 г.
- ^ «Совместное использование буферов ЦП и ГП в Linux*» . 01.org . 12 мая 2016 г. Архивировано из оригинала 11 июня 2020 г. . Проверено 11 июня 2020 г.
- ^ «Совместное использование буферов и синхронизация — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 1 июня 2020 года . Проверено 11 июня 2020 г.
- ^ «О mac80211» . Linux Kernel Organization, Inc. Архивировано из оригинала 1 февраля 2021 года . Проверено 8 июня 2014 г.
- ^ «Руководство разработчика драйверов Linux 802.11 — Документация по ядру Linux» . Кернел.орг . Проверено 19 ноября 2021 г.
- ^ «Разветвление [PATCH v3 1/2]: добавьте clone3 [LWN.net]» . lwn.net . Архивировано из оригинала 16 июля 2020 года . Проверено 16 июля 2020 г.
- ^ «clone(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 15 июля 2020 года . Проверено 15 июля 2020 г.
- ^ «clone3(), fchmodat4() и fsinfo() [LWN.net]» . lwn.net . Архивировано из оригинала 15 июня 2020 года . Проверено 15 июля 2020 г.
- ^ «ld-linux.so(8) — страница руководства Linux» . man7.org . Архивировано из оригинала 26 ноября 2020 года . Проверено 18 ноября 2020 г.
- ^ «nptl(7) — страница руководства Linux» . man7.org . Архивировано из оригинала 25 июля 2020 года . Проверено 25 июля 2020 г.
- ^ «futex(7) — страница руководства Linux» . man7.org . Архивировано из оригинала 15 июля 2020 года . Проверено 25 июля 2020 г.
- ^ «Потоки ядра стали проще [LWN.net]» . lwn.net . Архивировано из оригинала 31 марта 2020 года . Проверено 15 августа 2020 г. .
- ^ Jump up to: а б Бар, Моше (1 апреля 2000 г.). «Планировщик Linux» . Linux-журнал . Belltown Media, Inc. Архивировано из оригинала 2 февраля 2021 года . Проверено 14 апреля 2012 г.
- ^ BKK19-TR03 — Планировщик ядра Linux — Обзор , 23 апреля 2019 г., заархивировано из оригинала 15 декабря 2021 г. , получено 17 мая 2021 г.
- ^ «Снижение задержки в Linux: введение вытесняемого ядра | Журнал Linux» . Linuxjournal.com . Архивировано из оригинала 9 августа 2020 года . Проверено 17 августа 2020 г. .
- ^ «Планировщик CFS — документация по ядру Linux» . Кернел.орг . Проверено 1 мая 2021 г.
- ^ «Стандарт IEEE для информационных технологий – интерфейс портативной операционной системы, POSIX.1b, расширения реального времени (IEEE Std 1003.1b-1993)» . Архивировано из оригинала 16 ноября 2010 года . Проверено 17 марта 2016 г.
- ^ Ларабель, Майкл (24 января 2014 г.). «Ядро Linux 3.14 уже имеет множество интересных функций» . Фороникс . Архивировано из оригинала 13 августа 2020 года . Проверено 3 февраля 2014 г.
- ^ «Ядро Linux 3.14, раздел 1.1. Класс планирования сроков для лучшего планирования в реальном времени» . kernelnewbies.org . 30 марта 2014 г. Архивировано из оригинала 15 января 2021 г. Проверено 2 апреля 2014 г.
- ^ «Проект реализации RT-мьютекса — документация по ядру Linux» . Кернел.орг . Проверено 17 декабря 2021 г.
- ^ «Подсистема RT-mutex с поддержкой PI — Документация по ядру Linux» . Кернел.орг . Проверено 17 декабря 2021 г.
- ^ Маккенни, Пол (10 августа 2005 г.). «Обзор упреждения в реальном времени» . LWN.net . Архивировано из оригинала 10 августа 2020 года . Проверено 5 февраля 2012 г.
- ^ «Проект OSADL: Linux реального времени» . ОСАДЛ . Архивировано из оригинала 4 февраля 2021 года . Проверено 5 февраля 2012 г.
- ^ Jump up to: а б «Стивен-Ростедт_он_PREEMPT_RT» (PDF) .
- ^ «Планировщик EEVDF может быть готов к использованию в Linux 6.6» . Фороникс . Проверено 31 августа 2023 г.
- ^ «[ИСПРАВЛЕНИЕ 00/10] запланировано: EEVDF с использованием хорошей задержки [LWN.net]» . LWN.net .
- ^ «Планировщик ЦП EEVDF для Linux [LWN.net]» . LWN.net . Проверено 31 августа 2023 г.
- ^ «Планировщик EEVDF объединен для Linux 6.6, повторно представлено планирование гибридного кластера Intel» . Фороникс .
- ^ «блокировка — документация ядра Linux» . Кернел.орг . Проверено 17 декабря 2021 г.
- ^ «locking.rst — Documentation/kernel-hacking/locking.rst — исходный код Linux (v5.11.10) — Bootlin» . elixir.bootlin.com . Проверено 29 марта 2021 г.
- ^ «Что такое RCU по сути? [LWN.net]» . lwn.net . Проверено 29 марта 2021 г.
- ^ «Что такое RCU? Часть 2: Использование [LWN.net]» . lwn.net . Проверено 29 марта 2021 г.
- ^ «RCU, часть 3: API RCU [LWN.net]» . lwn.net . Проверено 29 марта 2021 г.
- ^ «Модель памяти ядра Linux» . open-std.org . Проверено 29 марта 2021 г.
- ^ «Формальная модель упорядочения памяти ядра (часть 1) [LWN.net]» . lwn.net . Проверено 29 марта 2021 г.
- ^ «Формальная модель упорядочения памяти ядра (часть 2) [LWN.net]» . lwn.net . Проверено 29 марта 2021 г.
- ^ Стерн, Алан. «Объяснение модели согласованности памяти ядра Linux» .
- ^ «kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux» . git.kernel.org . Проверено 17 декабря 2021 г.
- ^ Jump up to: а б «Типы блокировок и их правила — Документация ядра Linux» . Кернел.орг . Проверено 17 декабря 2021 г.
- ^ «Короткие темы: Realtime, Futexes и ntfs3» . Lwn.net . Проверено 20 февраля 2022 г.
- ^ «Подсистема RT-mutex с поддержкой PI — Документация по ядру Linux» . Кернел.орг . Проверено 20 февраля 2022 г.
- ^ «Проект реализации RT-мьютекса — документация ядра Linux» .
- ^ «Проверка правильности блокировки во время выполнения — документация по ядру Linux» . Кернел.орг . Проверено 17 декабря 2021 г.
- ^ «Прерывания, потоки и блокировка [LWN.net]» . lwn.net . Проверено 17 декабря 2021 г.
- ^ «Таблицы страниц — документация по ядру Linux» . www.kernel.org . Проверено 21 июля 2024 г.
- ^ «Физическая память — документация по ядру Linux» . www.kernel.org . Проверено 21 июля 2024 г.
- ^ «Диаграмма стека хранилища Linux» . Thomas-krenn.com . Архивировано из оригинала 3 августа 2020 года . Проверено 19 марта 2020 г.
- ^ «Распределитель SLUB» . Lwn.net . 11 апреля 2007 года . Проверено 20 февраля 2022 г.
- ^ Jump up to: а б «Распределители плит в ядре Linux: SLAB, SLOB, SLUB» (PDF) . Events.static.linuxfound.org . Проверено 20 февраля 2022 г.
- ^ Корбет, Джонатан (28 апреля 2023 г.). «6.4 Окно слияния, часть 1 [LWN.net]» . LWN.net . Проверено 12 мая 2023 г.
- ^ «Первая половина окна слияния 6.8 [LWN.net]» . lwn.net . Проверено 21 июля 2024 г.
- ^ «Kernel/Git/Torvalds/Linux.git — дерево исходного кода ядра Linux» . Git.kernel.org .
- ^ Jump up to: а б с Торвальдс, Линус (январь 1999 г.). «Край Linux» . Открытые исходные коды: голоса революции открытого исходного кода . О'Рейли . ISBN 1-56592-582-3 . Проверено 13 октября 2013 г.
- ^ «Портирование Linux на DEC Alpha: ядро и оболочка» . Архивировано из оригинала 5 сентября 2019 года . Проверено 5 октября 2019 г.
- ^ «Linux в альфа-версии: стратегический выбор» . Архивировано из оригинала 4 сентября 2019 года . Проверено 5 октября 2019 г.
- ^ «ТОП500 суперкомпьютерных сайтов: Семейство операционных систем/Linux» . Топ500.org. Архивировано из оригинала 19 ноября 2012 года . Проверено 5 октября 2019 г.
- ^ «Кластер Авалон | ТОП500 суперкомпьютерных сайтов» . Top500.org . Архивировано из оригинала 5 октября 2019 года . Проверено 5 октября 2019 г.
- ^ Ван, Дэвид (6 мая 2010 г.). «Android теперь работает на iPhone 3G» . ТехХайв . ИДГ . Архивировано из оригинала 22 июля 2010 года . Проверено 11 июля 2010 г.
- ^ «ЛКДДб» . Проект ЛКДДб. Архивировано из оригинала 25 февраля 2021 года . Проверено 26 января 2021 г.
- ^ «Оборудование Linux» . Проект аппаратного обеспечения Linux. Архивировано из оригинала 26 января 2021 года . Проверено 26 января 2021 г.
- ^ «Ядро Linux 4.0, раздел 1.2. Оперативное обновление» . kernelnewbies.org . 26 апреля 2015 года. Архивировано из оригинала 4 мая 2015 года . Проверено 27 апреля 2015 г.
- ^ Джонатан Корбет (25 февраля 2015 г.). «Черновой патч для живого исправления» . LWN.net . Архивировано из оригинала 27 апреля 2015 года . Проверено 27 апреля 2015 г.
- ^ «kernel/git/torvalds/linux.git: получить инфраструктуру оперативного исправления от Иржи Косины (дерево исходного кода ядра Linux)» . ядро.орг . 11 февраля 2015 года. Архивировано из оригинала 11 июня 2015 года . Проверено 27 апреля 2015 г.
- ^ Муки, К.К.; Бургейт, Нилеш (1 июля 2005 г.). Linux: функции безопасности, аудита и контроля . США: ISACA . п. 14. ISBN 1-893209-78-4 . Архивировано из оригинала 2 июня 2013 года . Проверено 31 декабря 2010 г.
- ^ Хэтч, Брайан (15 июля 2008 г.). Взлом открытого Linux: секреты безопасности Linux и решения . Макгроу-Хилл Осборн Медиа . п. 524. ИСБН 978-0-07-226257-5 . Архивировано из оригинала 2 июня 2013 года . Проверено 31 декабря 2010 г.
- ^ Джагер, Трент (7 октября 2008 г.). Безопасность операционной системы . Издательство Морган и Клейпул. п. 122. ИСБН 978-1-59829-212-1 . Архивировано из оригинала 2 июня 2013 года . Проверено 31 декабря 2010 г.
- ^ «CAP_PERFMON — и новые возможности в целом [LWN.net]» . lwn.net . Архивировано из оригинала 4 августа 2020 года . Проверено 2 августа 2020 г.
- ^ «Использование модуля безопасности Linux — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 2 мая 2020 года . Проверено 10 января 2020 г. .
- ^ «Агентство национальной безопасности | Центральная служба безопасности > Чем мы занимаемся > Исследования > SE Linux > Часто задаваемые вопросы по SE Linux» . Nsa.gov . Архивировано из оригинала 18 сентября 2019 года . Проверено 10 января 2020 г. .
- ^ «Seccomp BPF (БЕЗОПАСНЫЕ ВЫЧИСЛЕНИЯ с фильтрами) — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 10 января 2020 г. .
- ^ Эндрюс, Джереми (16 июля 2008 г.). «Ошибки безопасности и полное раскрытие информации» . Ядерная ловушка . Архивировано из оригинала 19 июля 2008 года . Проверено 31 декабря 2010 г.
- ^ Шпенглер, Брэд (16 июля 2008 г.). «Неофициальная политика Linux по обеспечению безопасности посредством сокрытия» . Полное раскрытие информации (список рассылки). Архивировано из оригинала 7 августа 2020 года . Проверено 31 декабря 2010 г.
- ^ Jump up to: а б Ямагата, Хироо (3 августа 1997 г.). «Прагматик свободного программного обеспечения» . HotWired . Архивировано из оригинала 10 февраля 2007 года . Проверено 21 февраля 2007 г.
- ^ «GPL-v2» . gnu.org . Архивировано из оригинала 25 декабря 2019 года . Проверено 28 января 2020 г.
- ^ Корбет, Джонатан (31 января 2006 г.). «GPLv3 и ядро» . LWN.net . Архивировано из оригинала 10 августа 2020 года . Проверено 21 февраля 2007 г.
- ^ Торвальдс, Линус (8 сентября 2000 г.). «Linux-2.4.0-test8» . LKML (список рассылки). Архивировано из оригинала 15 мая 2020 года . Проверено 21 февраля 2007 г.
- ^ «gnu.org» . Gnu.org . Архивировано из оригинала 2 февраля 2021 года . Проверено 18 октября 2017 г.
- ^ Кокс, Алан (20 января 2006 г.). «Относительно: GPL V3 и Linux» . LKML (список рассылки). Архивировано из оригинала 26 января 2021 года . Проверено 21 февраля 2007 г.
- ^ Шенкленд, Стивен (25 сентября 2006 г.). «Лучшие программисты Linux критикуют GPL 3» . Новости.com . CNET . Архивировано из оригинала 14 сентября 2013 года . Проверено 21 февраля 2007 г.
- ^ Jump up to: а б Джеймс Э. Дж. Боттомли; Мауро Карвалью Чехаб; Томас Глейкснер; Кристоф Хеллвиг; Дэйв Джонс; Грег Кроа-Хартман; Тони Лак; Эндрю Мортон; Тронд Миклебуст; Дэвид Вудхаус (15 сентября 2006 г.). «Позиция разработчиков ядра в отношении GPLv3: опасности и проблемы с GPLv3» . LWN.net . Архивировано из оригинала 18 января 2021 года . Проверено 11 марта 2015 г.
- ^ Петрели, Николас (27 сентября 2006 г.). «Борьба со злом или борьба за внимание?» . linuxjournal.com. Архивировано из оригинала 2 марта 2018 года . Проверено 11 марта 2015 г.
- ^ «Линус Торвальдс говорит, что GPL v3 нарушает все, что отстаивала GPLv2» . Debconf 2014. 2014. Архивировано из оригинала 8 мая 2018 года . Проверено 21 марта 2018 г.
- ^ Кларк, Роб; Семвал, Сумит (1 ноября 2012 г.). «Среда совместного использования буфера DMA: введение» (PDF) . Конференция по встроенному Linux. Архивировано (PDF) из оригинала 8 августа 2014 года . Проверено 2 августа 2014 г.
- ^ Кокс, Алан (10 октября 2012 г.). «[ИСПРАВЛЕНИЕ] dma-buf: используйте EXPORT_SYMBOL» . Инфраструктура прямого рендеринга (список рассылки). Архивировано из оригинала 22 января 2013 года . Проверено 3 сентября 2013 г.
- ^ Торвальдс, Линус (10 декабря 2003 г.). «RE: Linux GPL и положение об исключении двоичных модулей?» . LKML (список рассылки). Архивировано из оригинала 15 июня 2011 года . Проверено 31 декабря 2010 г.
- ^ Торвальдс, Линус (3 декабря 2003 г.). «Re: Linux GPL и положение об исключении двоичных модулей?» . LKML (список рассылки). Архивировано из оригинала 28 апреля 2020 года . Проверено 12 ноября 2010 г.
- ^ «Испорченные ядра — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 13 января 2020 г. .
- ^ «API прошивки Linux — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 13 января 2020 года . Проверено 13 января 2020 г. .
- ^ «Встроенная прошивка — Документация ядра Linux» . Кернел.орг . Архивировано из оригинала 10 июня 2020 года . Проверено 10 июня 2020 г.
- ^ «Регистрация Linux TM в США» . uspto.gov . Архивировано из оригинала 24 февраля 2021 года . Проверено 6 сентября 2019 г.
- ^ «Регистрация Linux TM в ЕС» . euipo.europa.eu . Архивировано из оригинала 9 июня 2016 года . Проверено 28 ноября 2020 г. .
- ^ Хьюз, Фил (1 августа 1997 г.). «Спор о товарных знаках Linux» . Linux-журнал . Belltown Media, Inc. Архивировано из оригинала 30 апреля 2010 года . Проверено 8 декабря 2010 г.
- ^ Хьюз, Фил (1 марта 1997 г.). «Действия, предпринятые в отношении торговой марки Linux» . Linux-журнал . Belltown Media, Inc. Архивировано из оригинала 3 марта 2010 года . Проверено 8 декабря 2010 г.
- ^ Гиссельберг, Тоня (2010). «История торговой марки Linux, операционной системы» (PDF) . Юридическая фирма Gisselberg, Inc. Архивировано из оригинала (PDF) 11 июля 2011 года . Проверено 8 декабря 2010 г.
Дальнейшее чтение
[ редактировать ]- Торвальдс, Линус; Даймонд, Дэвид (2001). Просто для развлечения: история случайного революционера . ХарперБизнес . ISBN 978-0066620732 .
- Безруков Николай. «Глава 4: Доброжелательный диктатор» . Портреты пионеров открытого исходного кода (электронная книга). Мягкая панорама. Архивировано из оригинала 13 октября 2005 года . Проверено 3 октября 2005 г.
- «LinkSys и бинарные модули» . Еженедельное издание LWN.net. 16 октября 2003 г. Архивировано из оригинала 1 августа 2016 г. Проверено 21 июля 2016 г.
- «Всеобщий любимый талисман Linux» . Архивировано из оригинала 16 августа 2005 года . Проверено 16 июня 2005 г.
- Праневич, Джозеф (декабрь 2003 г.). «Чудесный мир Linux 2.6» . Архивировано из оригинала 16 июля 2003 года.
- «Изменения Linux» . Архивировано из оригинала 31 октября 2005 года . Проверено 31 октября 2005 г.
- «Семинар по ядру Linux 2.6» . Архивировано из оригинала 2 февраля 2007 года.
- «Драйверы устройств Linux» (3-е изд.). Архивировано из оригинала 27 июля 2016 года . Проверено 21 июля 2016 г.
- «Понимание ядра Linux» (книга) (3-е изд.). Архивировано из оригинала 17 декабря 2005 года . Проверено 22 декабря 2005 г.
- Сеть ядра Linux, Рами Розен, 2014 г. (книга). Архивировано из оригинала 12 мая 2015 года . Проверено 14 июня 2015 г.
- «Linux: GPL и бинарные модули» . Архивировано из оригинала 23 июля 2005 года.
- «Анатомия ядра Linux» . ИБМ . Архивировано из оригинала 27 июня 2007 года . Проверено 9 июня 2007 г.
- Таненбаум, Эндрю; Бос, Герберт (2015). Современные операционные системы . Соединенные Штаты Америки: Пирсон. п. 722. ИСБН 9781292061429 . OCLC 892574803 .
Внешние ссылки
[ редактировать ]- Официальный сайт
- Указатель документации ядра Linux
- Справочные страницы ядра Linux
- Kernel bugzilla и регрессии для каждой последней версии ядра
- Kernel Newbies — источник различной информации, связанной с ядром.
- Освещение ядра на LWN.net , авторитетном источнике информации, связанной с ядром.
- Bootlin's Elixir Cross Referencer , перекрестная ссылка на исходный код ядра Linux.
- Грег Кроа Хартман о ядре Linux на YouTube
- Ядро Linux
- Финские изобретения
- Бесплатное программное обеспечение с открытым исходным кодом
- Бесплатное программное обеспечение, написанное на C.
- Бесплатное системное программное обеспечение
- Линус Торвальдс
- Монолитные ядра
- Операционные системы
- Программное обеспечение, использующее лицензию GPL
- Варианты Unix