Jump to content

Ядро Linux

Ядро Linux
Оригинальный автор(ы) Линус Торвальдс
Разработчик(и) Участники сообщества
Линус Торвальдс
Первоначальный выпуск 0,02 (5 октября 1991 ; 32 года назад ( 1991-10-05 ) )
Стабильная версия
6.9.5 [2]  Отредактируйте это в Викиданных / 16 июня 2024 г.
Предварительный выпуск
6.10-rc4 [3]  Отредактируйте это в Викиданных / 16 июня 2024 г.
Репозиторий
Написано в C ( C11 начиная с 5.18, C89 ранее), [4]
Ржавчина (начиная с версии 6.1), [5]
Язык ассемблера
Доступно в Английский
Лицензия Только GPL-2.0 с примечанием к системному вызову Linux [6] [7] [8] [а]
Веб-сайт ядро .org

Ядро Linux является бесплатным и открытым исходным кодом . [12] : 4  UNIX-подобное ядро , которое используется во многих компьютерных системах по всему миру. Ядро было создано Линусом Торвальдсом в 1991 году и вскоре после этого было принято в качестве ядра (ОС) GNU операционной системы , которая была создана в качестве бесплатной замены Unix .

С конца 1990-х годов он был включен во многие дистрибутивы операционных систем , многие из которых называются Linux . Известная операционная система с ядром Linux — Android , которая используется во многих мобильных и встраиваемых устройствах.

Ядро адаптировано для широкого спектра компьютерного оборудования . [13] Его можно в некоторой степени адаптировать с помощью команд и конфигурации во время сборки. Его также можно адаптировать, изменив исходный код . [14] [15] [16] Привилегированные пользователи могут точно настраивать параметры ядра во время выполнения. [17] [18] [19]

Большая часть кода ядра написана на языке C, который поддерживается коллекцией компиляторов GNU (GCC), которая имеет расширения, выходящие за рамки стандартного C. [12] : 18  [20] Код также содержит ассемблерный код для логики, зависящей от архитектуры, такой как оптимизация использования памяти и выполнения задач. [12] : 379–380 

Ядро имеет модульную конструкцию в том смысле, что модули могут быть интегрированы как программные компоненты , в том числе динамически загружаемые.

Ядро является монолитным в архитектурном смысле, поскольку вся ОС работает в пространстве ядра .

Linux предоставляется по лицензии GNU General Public License версии 2, хотя он содержит файлы под другими совместимыми лицензиями . [11]

История [ править ]

Линус Торвальдс на LinuxCon Europe 2014 в Дюссельдорфе

В апреле 1991 года Линус Торвальдс, 21-летний -компьютерщик студент Хельсинкского университета , начал работать над операционной системой, вдохновленной UNIX, для персонального компьютера. [21] Начал он с переключателя задач на языке ассемблера Intel 80386 и драйвера терминала . [21] 25 августа 1991 года Торвальдс опубликовал следующее в comp.os.minix группе новостей в Usenet : [22]

Я делаю (бесплатную) операционную систему (просто хобби, не будет большой и профессиональной, как GNU) для 386(486) AT клонов . Это назревало с апреля и начинает готовиться. Я хотел бы получить любые отзывы о том, что людям нравится/не нравится в minix, поскольку моя ОС чем-то напоминает ее (среди прочего, такое же физическое расположение файловой системы (по практическим соображениям)).
В настоящее время я портировал bash (1.08) и gcc (1.40), и, похоже, все работает. Это означает, что через несколько месяцев я получу что-то практическое [...]
Да, он не содержит никакого миникс-кода и имеет многопоточную файловую систему. Он НЕ переносимый [ sic ] (использует переключение задач 386 и т. д.), и он, вероятно, никогда не будет поддерживать ничего, кроме AT-жестких дисков, поскольку это все, что у меня есть :-(.

17 сентября 1991 года Торвальдс подготовил версию Linux 0.01 и разместил ее на «ftp.funet.fi» — FTP-сервере Финской университетской и исследовательской сети ( FUNET ). Он даже не был исполняемым, поскольку его код все еще нуждался в Minix для компиляции и тестирования. [23]

5 октября 1991 года Торвальдс анонсировал первую «официальную» версию Linux — 0.02. [24] [23]

[Как] я уже говорил месяц назад, я работаю над бесплатной версией Minix-аналога для компьютеров AT-386. Наконец-то он достиг той стадии, когда его можно даже использовать (хотя это может быть и не в зависимости от того, что вы хотите), и я готов выложить исходники для более широкого распространения. Это всего лишь версия 0.02... но я успешно запускал под ней bash, gcc, gnu-make, gnu-sed, compress и т. д.

Linux быстро рос. Несмотря на ограниченный функционал ранних версий, он завоевал пользователей. И многие разработчики, включая сообщество MINIX , внесли свой вклад в проект. [ нужна ссылка ]

В то время проект GNU завершил работу над многими компонентами для своей бесплатной замены UNIX, ОС GNU , но его ядро, GNU Hurd , было неполным. В качестве своей ОС проект принял ядро ​​Linux. [25]

Распространение программного обеспечения Беркли еще не освободилось от юридических обременений и не боролось за свободное ядро. [26]

Торвальдс присвоил ядру номер основной версии 0, чтобы указать, что оно еще не предназначено для общего использования. [27]

Версия 0.11, выпущенная в декабре 1991 года, была первой версией, размещаемой на собственном хостинге ; скомпилирован на компьютере под управлением ядра Linux.

Когда Торвальдс выпустил версию 0.12 в феврале 1992 года, он принял Стандартную общественную лицензию GNU версии 2 (GPLv2) вместо своей предыдущей лицензии, разработанной им самим, которая не допускала коммерческого распространения. [28] В отличие от Unix , все исходные файлы Linux находятся в свободном доступе, включая драйверы устройств . [29]

Первоначальный успех Linux был обусловлен программистами и тестировщиками по всему миру. Благодаря поддержке POSIX API через libC, которая при необходимости действует как точка входа в адресное пространство ядра, Linux может запускать программное обеспечение и приложения, разработанные для Unix. [30]

Ядро Linux поддерживает различные аппаратные архитектуры, обеспечивая общую платформу для программного обеспечения, включая проприетарное программное обеспечение .

19 января 1992 года было отправлено первое сообщение в новую группу новостей alt.os.linux . [31] 31 марта 1992 года группа новостей была переименована в comp.os.linux . [32]

Тот факт, что Linux представляет собой монолитное ядро, а не микроядро, был темой спора между Эндрю С. Таненбаумом , создателем MINIX, и Торвальдсом. [33] Дебаты Таненбаума и Торвальдса начались в 1992 году в Usenet группе comp.os.minix как общее обсуждение архитектуры ядра. [34] [35]

Версия 0.95 была первой версией, поддерживающей X Window System . [36]

В марте 1994 года был выпущен Linux 1.0.0 с 176 250 строками кода. [37] Судя по номеру версии, это была первая версия, считавшаяся подходящей для производственной среды . [27]

В июне 1996 года, после выпуска 1.3, Торвальдс решил, что Linux достаточно развился, чтобы гарантировать новый основной номер, и поэтому обозначил следующий выпуск как версию 2.0.0. [38] [39] Важные функции версии 2.0 включали симметричную многопроцессорную обработку (SMP), поддержку большего количества типов процессоров и поддержку выбора конкретных аппаратных целей, а также включение функций и оптимизаций, специфичных для архитектуры. [30] Семейство команд make *config команды kbuild включает и настраивает параметры для создания специальных исполняемых файлов ядра ( vmlinux ) и загружаемых модулей. [14] [15]

Версия 2.2, выпущенная 20 января 1999 г., [40] улучшена детализация блокировок и управление SMP, добавлена ​​поддержка m68k , PowerPC , Sparc64 , Alpha и других 64-битных платформ. [41] Кроме того, были добавлены новые файловые системы , включая Microsoft . от NTFS возможность чтения только для чтения [41] В 1999 году IBM опубликовала свои исправления к коду Linux 2.2.13 для поддержки архитектуры S/390 . [42]

Версия 2.4.0, выпущенная 4 января 2001 г., [43] содержала поддержку ISA Plug and Play , USB и PC Cards . В Linux 2.4 добавлена ​​поддержка Pentium 4 и Itanium (последний представил ia64 ISA, который был совместно разработан Intel и Hewlett-Packard для замены старого PA-RISC ), а также нового 64-битного процессора MIPS . [44] Разработка для 2.4. x немного изменился: на протяжении всей серии стало доступно больше функций, включая поддержку Bluetooth , диспетчера логических томов (LVM) версии 1, RAID поддержку InterMezzo и ext3 , файловых систем .

Версия 2.6.0 была выпущена 17 декабря 2003 г. [45] Разработка для 2.6. x были внесены дальнейшие изменения в сторону включения новых функций во всю серию. Среди изменений, внесенных в серию 2.6, можно отметить: интеграцию μClinux в основные исходные коды ядра, поддержку PAE , поддержку нескольких новых линеек процессоров , интеграцию Advanced Linux Sound Architecture (ALSA) в основные исходные коды ядра, поддержку до 2 32 пользователи (вместо 2 16 ), поддержка до 2 29 идентификаторы процессов (только 64-битные, 32-битные архитектуры по-прежнему ограничены двумя 15 ), [46] существенно увеличено количество типов устройств и количество устройств каждого типа, улучшена поддержка 64-бит , поддержка файловых систем , поддерживающих размеры файлов до 16 терабайт внутри ядра , вытеснение , поддержка Native POSIX Thread Library (NPTL) ), интеграция Linux в пользовательском режиме с основными исходными кодами ядра, интеграция SELinux с основными исходными кодами ядра, поддержка InfiniBand и многое другое.

Начиная с выпусков 2.6.x ядро ​​поддерживало большое количество файловых систем; некоторые предназначены для Linux, например ext3 , ext4 , FUSE , Btrfs , [47] и другие, встроенные в другие операционные системы, такие как JFS , XFS , Minix, Xenix , Irix , Solaris , System V , Windows и MS-DOS . [48]

при разработке не использовалась система контроля версий Хотя до сих пор , в 2002 году разработчики Linux приняли BitKeeper , который стал для них бесплатным, хотя и не был свободным программным обеспечением . В 2005 году из-за попыток реконструировать его компания, владевшая этим программным обеспечением, прекратила поддержку сообщества Linux. В ответ Торвальдс и другие написали Git . Новая система была написана за несколько недель, а через два месяца было выпущено первое официальное ядро, созданное с ее использованием. [49]

В 2005 году группа стабильных версий была сформирована в ответ на отсутствие дерева ядра, где люди могли бы работать над исправлением ошибок , и она продолжала обновлять стабильные версии. [50] В феврале 2008 года было создано дерево linux-next , которое служило местом сбора патчей, предназначенных для объединения во время следующего цикла разработки. [51] [52] Некоторые сопровождающие подсистем также использовали суффикс -next для деревьев, содержащих код, который они собираются отправить для включения в следующий цикл выпуска. По состоянию на январь 2014 г. , версия Linux, находящаяся в разработке, хранится в нестабильной ветке с именем linux-next . [53]

20-летие Linux Торвальдс отметил в июле 2011 года выпуском версии 3.0.0. [38] Поскольку номер версии 2.6 был номером версии в течение 8 лет, в ядро ​​пришлось добавить новую личность uname26 , которая сообщает 3.x как 2.6.40+x, чтобы старые программы работали. [54]

Версия 3.0 была выпущена 22 июля 2011 года. [55] 30 мая 2011 года Торвальдс объявил, что большим изменением является «НИЧЕГО. Абсолютно ничего». и спросил: «...давайте убедимся, что мы действительно сделаем следующий выпуск не просто новым блестящим номером, но и хорошим ядром». [56] После ожидаемых 6–7 недель процесса разработки он будет выпущен к 20-летию Linux.

11 декабря 2012 года Торвальдс решил снизить сложность ядра, удалив поддержку процессоров i386 , в частности, отказавшись от эмуляции. [57] атомарная представленная инструкция CMPXCHG, в i486 для обеспечения надежных мьютексов , делает серию ядер 3.7 последней, все еще поддерживающей исходный процессор. [58] [59] В этой же серии унифицирована поддержка процессора ARM . [60]

Версия 3.11, выпущенная 2 сентября 2013 г., [61] добавлено много новых функций, таких как новые Флаг O_TMPFILE для open(2) для уменьшения временных уязвимостей файлов, экспериментальное динамическое управление питанием AMD Radeon , опрос сети с малой задержкой и zswap (сжатый кэш подкачки). [62]

Изменение нумерации с 2.6.39 на 3.0 и с 3.19 на 4.0 не повлекло за собой значимой технической дифференциации. Основной номер версии был увеличен, чтобы избежать больших второстепенных номеров. [55] [63] Стабильные ядра 3.xy выпускались до версии 3.19 в феврале 2015 года.

В апреле 2015 года Торвальдс выпустил версию ядра 4.0. [38] К февралю 2015 года Linux получил вклад почти от 12 000 программистов из более чем 1200 компаний, включая некоторых крупнейших мировых поставщиков программного и аппаратного обеспечения. [64] Версия Linux 4.1, выпущенная в июне 2015 года, содержит более 19,5 миллионов строк кода, написанного почти 14 000 программистами. [65]

В общей сложности 1991 разработчик, из которых 334 работали впервые, добавили более 553 000 строк кода в версию 5.8, побив рекорд, ранее установленный версией 4.9. [66]

Популярность [ править ]

Согласно ежегодному опросу разработчиков Stack Overflow за 2019 год, более 53% всех респондентов разработали программное обеспечение для Linux и около 27% для Android . [67] хотя только около 25% разрабатываются с использованием операционных систем на базе Linux. [68]

Большинство веб-сайтов работают в операционных системах на базе Linux . [69] [70] и все 500 самых мощных суперкомпьютеров в мире используют ту или иную ОС на базе Linux. [71]

Дистрибутивы Linux включают ядро ​​с системным программным обеспечением (например, библиотекой GNU C , systemd и другими Unix утилитами и демонами ) и широким набором прикладного программного обеспечения , но доля их использования на настольных компьютерах невелика по сравнению с другими операционными системами.

Поскольку Android , то есть Linux, составляет большинство операционных систем мобильных устройств, [72] [73] [74] и из-за растущего использования во встраиваемых устройствах Android в значительной степени ответственен за рост использования Linux в целом. [30]

Значение [ править ]

Стоимость доработки ядра Linux

Стоимость переразработки версии 2.6.0 ядра Linux в рамках традиционной проприетарной разработки оценивается в 612 миллионов долларов США (467 миллионов евро, 394 миллиона фунтов стерлингов) в ценах 2004 года с использованием модели оценки человеко-месяца COCOMO . [75] В 2006 году исследование, профинансированное Европейским Союзом, показало, что стоимость доработки ядра версии 2.6.8 выше и составила 882 миллиона евро (1,14 миллиарда долларов, 744 миллиона фунтов стерлингов). [76]

К этой теме вернулись в октябре 2008 года Аманда Макферсон, Брайан Проффитт и Рон Хейл-Эванс. Используя методологию Дэвида А. Уиллера, они подсчитали, что переработка ядра 2.6.25 теперь стоит 1,3 миллиарда долларов (часть от общей суммы в 10,8 миллиарда долларов, потраченной на переработку Fedora 9). [77] Опять же, Гарсия-Гарсия и Алонсо де Магдалено из Университета Овьедо (Испания) подсчитали, что стоимость, ежегодно добавляемая к ядру, составляла около 100 миллионов евро в период с 2005 по 2007 год и 225 миллионов евро в 2008 году, это также будет стоить более 1 миллиарда евро (около 1,4 миллиарда долларов США). по состоянию на февраль 2010 г.) для разработки в Европейском Союзе. [78]

По состоянию на 7 марта 2011 г. , 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, используя текущие на тот момент 20 088 609 LOC (строк кода) для ядра Linux 4.14.14 и текущую среднюю зарплату программиста в США в 75 506 долларов, мы видим, что переписать существующий код будет стоить примерно 14 725 449 000 долларов (11 191 341 000 фунтов стерлингов). [79]

Распространение [ править ]

Большинство тех, кто использует Linux, делают это через дистрибутив Linux . Некоторые дистрибутивы поставляются с ванильным или стабильным ядром. Однако некоторые поставщики (например, Red Hat и Debian ) поддерживают собственное дерево исходного кода. Они обычно обновляются медленнее, чем ванильная ветка, и обычно включают все исправления из соответствующей стабильной ветки, но в то же время они также могут добавлять поддержку драйверов или функций, которые не были выпущены в ванильной версии дистрибутива. Вендор начал основывать свой филиал с.

Разработчики [ править ]

Сообщество [ править ]

[80]
Никто
Неизвестный
Консультанты
СУЗЕ
Google
почти 500 других
компании


Корпоративная принадлежность вкладов в ядро ​​Linux, 4.8–4.13 [81]

Сообщество разработчиков ядра 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%) категории. [81]

Вместо дорожной карты — технические рекомендации. Вместо централизованного распределения ресурсов существуют люди и компании, которые заинтересованы в дальнейшем развитии ядра Linux совершенно независимо друг от друга:Такие люди, как Линус Торвальдс и я, не планируют эволюцию ядра. Мы не сидим и не продумываем план действий на следующие два года, а затем распределяем ресурсы на различные новые функции. Это потому, что у нас нет ресурсов. Все ресурсы принадлежат различным корпорациям, которые используют и вносят свой вклад в Linux, а также различным независимым участникам. Решают те люди, которые владеют ресурсами...

Конфликт [ править ]

Известные конфликты среди разработчиков ядра Linux:

  • В июле 2007 года Кон Коливас объявил, что прекращает разработку ядра Linux. [82] [83]
  • В июле 2009 года Алан Кокс оставил свою должность сопровождающего TTY после разногласий с Торвальдсом. [84]
  • В декабре 2010 года между сопровождающим Linux SCSI Джеймсом Боттомли и сопровождающим SCST Владиславом Болховитиным состоялась дискуссия о том, какой целевой стек SCSI следует включить в ядро ​​Linux. [85] Это расстроило некоторых пользователей Linux. [86]
  • В июне 2012 года Торвальдс ясно дал понять, что он не согласен с тем, чтобы NVIDIA выпускала свои драйверы как закрытые. [87]
  • В апреле 2014 года Торвальдс запретил Кею Сиверсу отправлять исправления для ядра Linux за неспособность устранить ошибки , из-за которых systemd отрицательно взаимодействовал с ядром. [88]
  • В октябре 2014 года Леннарт Пёттеринг обвинил Торвальдса в том, что он терпит грубый стиль обсуждения в списках рассылки, связанных с ядром Linux, и в том, что он является плохим образцом для подражания. [89]
  • В марте 2015 года Кристоф Хеллвиг подал иск против VMware за нарушение авторских прав на ядро ​​Linux. [90] Линус Торвальдс дал понять, что не согласен с этой и подобными инициативами, назвав адвокатов гноящейся болезнью. [91]
  • В апреле 2021 года было обнаружено, что команда из Университета Миннесоты в рамках своего исследования отправляла «недобросовестные» исправления для ядра. Это привело к немедленному отмене всех патчей, когда-либо отправленных сотрудниками университета. Кроме того, старший специалист по сопровождению предупредил, что любой будущий патч от университета будет отклонен сразу же. [92] [93]

Выдающиеся разработчики ядра Linux осознавали важность предотвращения конфликтов между разработчиками. [94] Из-за противодействия Торвальдса долгое время не существовало кодекса поведения для разработчиков ядра. [95] Однако Кодекс конфликтов ядра Linux. 8 марта 2015 года был представлен [96] 16 сентября 2018 года он был заменен новым Кодексом поведения, основанным на Соглашении с вкладчиками . Это совпало с публичными извинениями Торвальдса и кратким перерывом в разработке ядра. [97] [98] 30 ноября 2018 года, в соответствии с Кодексом поведения , Яркко Саккинен из Intel разослал патчи, заменяющие слова «ебать», встречающиеся в комментариях к исходному коду, подходящими версиями, сосредоточенными на слове «обнимать». [99]

Разработчики, которые считают, что с ними обошлись несправедливо, могут сообщить об этом в Технический консультативный совет Linux Foundation . [100] В июле 2013 года разработчик драйвера USB 3.0 Сейдж Шарп попросил Торвальдса устранить оскорбительные комментарии в сообществе разработчиков ядра. В 2014 году Шарп отказался от разработки ядра Linux, заявив, что «ориентация на техническое совершенство в сочетании с перегруженностью специалистов по сопровождению и людьми с разными культурными и социальными нормами означает, что специалисты по сопровождению ядра Linux часто бывают резкими, грубыми или жестокими, чтобы получить их работа выполнена». [101] На конференции linux.conf.au (LCA) в 2018 году разработчики выразили мнение, что за последние несколько лет культура сообщества стала намного лучше. Дэниел Веттер, сопровождающий драйвера графического ядра Intel drm/i915, отметил, что «довольно жестокие выражения и дискуссии» в сообществе ядра уменьшились или исчезли. [102]

Лоран Пинчарт попросил разработчиков поделиться своим опытом взаимодействия с сообществом ядра на Европейской конференции по встроенному Linux 2017 года. Поднятые вопросы были обсуждены несколько дней спустя на Саммите сопровождающих. Обеспокоенность по поводу отсутствия последовательности в том, как сопровождающие реагировали на исправления, представленные разработчиками, была поддержана Шуа Ханом , сопровождающим среды самотестирования ядра. Торвальдс утверждал, что никогда не будет единообразия в обработке исправлений, поскольку разные подсистемы ядра с течением времени применяли разные процессы разработки. Поэтому было решено, что каждый сопровождающий подсистемы ядра будет документировать правила принятия исправлений. [103]

Развитие [ править ]

Linux — это эволюция, а не разумный замысел!

Линус Торвальдс, 2005 г. [104] [105] [106]

Кодовая база [ править ]

Исходный код ядра, также известный как дерево исходного кода, управляется в Git системе контроля версий , также созданной Торвальдсом. [107]

По состоянию на 2021 год Версия ядра Linux 5.11 содержала около 30,34 миллиона строк кода. Примерно 14% кода является частью «ядра» (каталоги Arch, Kernel и mm), а 60% — это драйверы.

Взносы [ править ]

Вклады отправляются в виде исправлений в виде текстовых сообщений в список рассылки ядра Linux (LKML) (а часто также в другие списки рассылки, посвященные конкретным подсистемам). Патчи должны соответствовать набору правил и формальному языку, который, среди прочего, описывает, какие строки кода следует удалить, а какие еще следует добавить в указанные файлы. Эти исправления могут автоматически обрабатываться, чтобы системные администраторы могли применять их для внесения лишь некоторых изменений в код или для постепенного обновления до следующей версии. [108] Linux также распространяется в форматах GNU zip (gzip) и bzip2 .

Разработчик, желающий изменить ядро ​​Linux, пишет и тестирует изменение кода. В зависимости от того, насколько значительным является изменение и сколько подсистем оно модифицирует, изменение будет представлено либо в виде одного исправления, либо в виде нескольких исправлений исходного кода . В случае, если одна подсистема обслуживается одним сопровождающим, эти исправления отправляются по электронной почте сопровождающему подсистемы с соответствующим списком рассылки в поле Cc. Сопровождающий и читатели списка рассылки будут просматривать исправления и оставлять отзывы. После завершения процесса проверки специалист по сопровождению подсистемы принимает исправления в соответствующем дереве ядра Git . Если изменения в ядре Linux представляют собой исправления ошибок, которые считаются достаточно важными, запрос на получение исправлений будет отправлен Торвальдсу в течение нескольких дней. В противном случае запрос на включение будет отправлен Торвальдсу во время следующего окна слияния. Окно слияния обычно длится две недели и начинается сразу после выпуска предыдущей версии ядра. [109] В дереве исходного кода ядра Git имена всех разработчиков, внесших вклад в ядро ​​Linux, указаны в каталоге «Credits» , а все сопровождающие подсистемы перечислены в разделе «Maintainers» . [110]

Как и во многих крупных проектах программного обеспечения с открытым исходным кодом, разработчики обязаны соблюдать Соглашение участников , — кодекс поведения предназначенный для борьбы с преследованием участников меньшинства. [111] [112] использование инклюзивной терминологии в исходном коде. Кроме того, во избежание нарушений обязательно [113]

Язык программирования [ править ]

Linux написан на специальном языке программирования C, поддерживаемом GCC , компилятором, который расширяет стандарт C во многих отношениях, например, с использованием встроенных разделов кода, написанных на языке ассемблера (в синтаксисе GCC «AT&T-style») целевой архитектуры. .

В сентябре 2021 года требования к версии GCC для компиляции и сборки ядра Linux были увеличены с GCC 4.9 до 5.1, что позволяет перейти от использования кода C на основе стандарта C89 к использованию кода, написанного с использованием стандарта C11 . [114] при этом переход на стандарт состоится в марте 2022 года с выпуском Linux 5.18. [115]

Первоначальная поддержка языка программирования Rust была добавлена ​​в Linux 6.1. [5] который был выпущен в декабре 2022 года, [116] с более поздними версиями ядра, такими как Linux 6.2 и Linux 6.3, что еще больше улучшает поддержку. [117] [118]

Стиль кодирования [ править ]

С 2002 года код должен соответствовать 21 правилу, составляющему стиль кодирования ядра Linux. [119] [120]

Управление версиями [ править ]

Что касается большинства программ, версия ядра обозначается серией чисел, разделенных точками.

В ранних версиях версия состояла из трех или четырех чисел, разделенных точками, называемых основным выпуском , второстепенным выпуском и версией. [12] : 9  В то время второстепенные выпуски с нечетными номерами предназначались для разработки и тестирования, а второстепенные выпуски с четными номерами - для производства. Необязательная четвертая цифра указывает уровень исправления. [27] Версии разработки обозначались суффиксом-кандидатом на выпуск ( -rc ).

Текущие соглашения о версиях другие. Нечетное/четное число, подразумевающее dev/prod, было опущено, а основная версия обозначается первыми двумя цифрами вместе. Хотя временные рамки для разработки следующей основной версии открыты, суффикс -rcN используется для обозначения n-го кандидата на выпуск следующей версии. [121] Например, выпуску версии 4.16 предшествовало семь 4.16-rcN (от -rc1 до -rc7). После выпуска стабильной версии ее обслуживание передается команде разработчиков стабильной версии . Обновления стабильной версии обозначаются трехзначной схемой (например, 4.16.1, 4.16.2, ...). [121]

Инструментальная цепочка [ править ]

Ядро обычно собирается с помощью инструментария 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 также мог его компилировать. [122] Еще один подобный успех был зарегистрирован в 2009 году с модифицированной версией 2.6.22. [123] [124] Поддержка компилятора Intel прекращена в 2023 году. [125]

С 2010 года предпринимаются усилия по созданию Linux с Clang , альтернативным компилятором для языка C; [126] по состоянию на 12 апреля 2014 г. официальное ядро ​​почти можно было скомпилировать с помощью Clang. [127] [128] Проект, посвященный этим усилиям, называется LLVMLinux в честь инфраструктуры компилятора LLVM , на которой построен Clang. [129] LLVMLinux не преследует цель создать форк Linux или LLVM, поэтому это метапроект, состоящий из патчей, которые в конечном итоге передаются вышестоящим проектам. Включив компиляцию Linux с помощью Clang, разработчики могут получить выгоду от сокращения времени компиляции. [130]

В 2017 году разработчики завершили выпуск исправлений для поддержки сборки ядра Linux с помощью Clang в выпуске 4.15, перенеся поддержку X86-64 и AArch64 в ветки стабильного дерева ядра 4.4, 4.9 и 4.14. Google Pixel 2 поставляется с первым Clang . , построенным на Linux ядром [131] хотя патчи для Pixel (1-го поколения) существовали. [132] В 2018 году ChromeOS перешла на сборку ядер с использованием Clang по умолчанию. [133] в то время как Android (операционная система) создала Clang [134] и LLVM компоновщик LLD [135] требуется для сборок ядра в 2019 году. В 2020 году Google перевела свое рабочее ядро, используемое в своих центрах обработки данных, на сборку с помощью Clang . [136] Сегодня группа ClangBuiltLinux координирует исправления как для Linux, так и для LLVM , чтобы обеспечить совместимость, обе группы состоят из членов LLVMLinux и имеют исходные исправления от LLVMLinux .

Отладка [ править ]

Вывод паники ядра Linux

Как и в случае с любым другим программным обеспечением, проблемы с ядром Linux бывает сложно устранить . Общие проблемы связаны с доступом к пространству пользователя и пространству ядра, неправильному использованию примитивов синхронизации и неправильному управлению оборудованием. [12] : 364 

Упс это нефатальная ошибка в ядре. После такой ошибки операции продолжаются с подозрительной надежностью. [137]

Паника (созданная паника() ) является фатальной ошибкой. После такой ошибки ядро ​​выводит сообщение и останавливает компьютер. [12] : 371 

Ядро обеспечивает отладку путем печати через printk () , который сохраняет сообщения в кольцевом буфере (перезаписывая старые записи новыми). Системный вызов syslog(2) обеспечивает чтение и очистку буфера сообщений, а также установку максимального уровня журнала сообщений, отправляемых на консоль. [138] Сообщения ядра также экспортируются в пользовательскую среду через интерфейс /dev/kmsg . [139]

Механизм ftrace позволяет выполнять отладку путем трассировки. Он используется для мониторинга и отладки Linux во время выполнения и может анализировать задержки в пользовательском пространстве из-за неправильного поведения ядра. [140] [141] [142] [143] Более того, ftrace позволяет пользователям отслеживать Linux во время загрузки. [144]

kprobes и kretprobes могут прерывать выполнение ядра (как отладчики в пользовательском пространстве) и собирать информацию без прерывания работы. [145] kprobes можно вставлять в код (почти) по любому адресу, а kretprobes работают при возврате функции. У зондов схожие цели, но они также имеют некоторые различия в использовании и реализации. [146]

С помощью KGDB Linux можно отлаживать почти так же, как и программы пользовательского пространства. Для KGDB требуется дополнительная машина, на которой работает GDB и которая подключена к цели для отладки с помощью последовательного кабеля или Ethernet . [147]

Процесс изменения [ править ]

Проект ядра Linux постоянно интегрирует новый код. Стандартная рабочая процедура заключается в том, что программное обеспечение, включенное в проект, должно работать и компилироваться без ошибок.

За каждой подсистемой ядра закреплен специалист по сопровождению, который отвечает за проверку исправлений на соответствие стандартам кода ядра и поддерживает очередь исправлений, которые могут быть отправлены Торвальдсу в течение окна слияния, которое обычно длится несколько недель.

Патчи объединяются Торвальдсом с исходным кодом предыдущей стабильной версии ядра Linux, создавая кандидата на выпуск (-rc) для следующей стабильной версии. После закрытия окна слияния принимаются только исправления нового кода в разрабатываемой версии. Разрабатываемая версия ядра -rc проходит регрессионное тестирование , и как только Торвальдс и сопровождающие подсистемы считают ее стабильной, выпускается новая версия, и процесс разработки начинается заново. [148]

Основная версия Linux [ править ]

Дерево Git, содержащее исходный код ядра Linux, называется основной веткой Linux . Каждый стабильный выпуск ядра происходит из основного дерева. [149] и часто публикуется на kernel.org . Mainline Linux имеет надежную поддержку лишь для небольшого подмножества многих устройств, работающих под управлением Linux. Неосновная поддержка обеспечивается независимыми проектами, такими как Yocto или Linaro , но во многих случаях необходимо ядро ​​от поставщика устройства. [150] Для использования ядра поставщика, вероятно, потребуется пакет поддержки платы .

Поддержка дерева ядра за пределами основной версии Linux оказалась сложной задачей. [151]

Под мейнлайнингом подразумевается попытка добавить поддержку устройства в основное ядро. [152] тогда как раньше была только поддержка в развилке или вообще не было поддержки. Обычно это включает добавление драйверов или дерева устройств файлов . Когда это будет завершено, функция или исправление безопасности будет считаться основным . [153]

Linux-подобное ядро ​​[ править ]

Сопровождающий стабильной ветки Грег Кроа-Хартман применил термин «Linux-подобный» к последующим вилкам ядра от поставщиков, которые добавляют миллионы строк кода в основное ядро. [154] В 2019 году Google заявила, что хочет использовать основное ядро ​​Linux в Android, чтобы сократить количество вилок ядра. [155] Термин «подобный Linux» также применяется к подмножеству встраиваемого ядра Linux , которое включает не полное основное ядро ​​Linux, а небольшое модифицированное подмножество кода. [156]

Форки Linux [ править ]

iPod загружает iPodLinux

Существуют определенные сообщества, которые разрабатывают ядра на основе официального Linux. Некоторые интересные фрагменты кода из этих ответвлений , в том числе Linux-libre , Compute Node Linux , INK , L4Linux , RTLinux и User-Mode Linux (UML), были объединены в основную ветку. [157] Некоторые операционные системы, разработанные для мобильных телефонов, изначально использовали сильно модифицированные версии Linux, включая Google Android , Firefox OS , HP webOS , Nokia Maemo и Jolla Sailfish OS . В 2010 году сообщество Linux раскритиковало Google за эффективное создание собственного дерева ядра: [158] [159]

Это означает, что любые драйверы, написанные для аппаратных платформ Android, не могут быть объединены с основным деревом ядра, поскольку они зависят от кода, который находится только в дереве ядра Google, что приводит к невозможности его сборки в дереве kernel.org. Из-за этого Google теперь предотвратил объединение большого количества аппаратных драйверов и кода платформы в основное дерево ядра. Эффективное создание ветки ядра, на которую сейчас полагаются несколько различных поставщиков. [160]

Сегодня Android использует настроенный Linux [161] где основные изменения реализованы в драйверах устройств, но требуются некоторые изменения в основном коде ядра. Разработчики Android также отправляют исправления для официального Linux, которые, наконец, могут загружать операционную систему Android. Например, Nexus 7 может загружать и запускать основной Linux. [161]

На презентации 2001 года в Музее компьютерной истории Торвальдс сказал следующее в ответ на вопрос о том, используют ли дистрибутивы Linux точно такие же исходные коды ядра или нет:

Они не... ну, они есть, и это не так. Единого ядра нет. В каждом дистрибутиве есть свои изменения. Это продолжается практически с первого дня. Я не знаю, помните ли вы, что Yggdrasil был известен своими весьма радикальными изменениями в ядре, и даже сегодня у всех основных поставщиков есть свои собственные настройки, потому что у них есть определенная часть рынка, которая им интересна, и, откровенно говоря, именно так так и должно быть. Потому что, если все ожидают, что один человек, я, сможет отслеживать все, это не является целью GPL. Суть открытой системы не в этом. Так что на самом деле тот факт, что дистрибутив решает, что что-то настолько важно для них, что они будут добавлять патчи, даже если этого нет в стандартном ядре, это действительно хороший знак для меня. Вот, например, как было добавлено что-то вроде ReiserFS. И причина, по которой ReiserFS стала первой журналируемой файловой системой, интегрированной в стандартное ядро, заключалась не в том, что я люблю Ханса Райзера. Это произошло потому, что SUSE фактически начала поставлять ReiserFS в качестве стандартного ядра, и это сказало мне «хорошо». Это фактически используется в производстве. Нормальные люди так делают. Они, должно быть, знают что-то, чего я не знаю. Таким образом, в самом прямом смысле то, что делают многие дистрибьюторские дома, они являются частью этого подхода «давайте создадим свой собственный филиал» и «давайте внесем в него свои изменения». А благодаря лицензии GPL я могу забрать лучшие из них. [162]

Долгосрочная поддержка [ править ]

Загрузочные сообщения ядра Linux 2.6.25.17

Последняя и более ранние версии поддерживаются отдельно. Большинство последних выпусков ядра курировались Торвальдсом. [163]

Сообщество разработчиков ядра Linux поддерживает стабильное ядро, применяя исправления программных ошибок , обнаруженных во время разработки последующего стабильного ядра. Поэтому на сайте www.kernel.org всегда указаны два стабильных ядра. Следующее стабильное ядро ​​Linux будет выпущено примерно через 8–12 недель.

Некоторые выпуски предназначены для долгосрочной поддержки как долгосрочные с выпусками с исправлениями ошибок в течение двух или более лет. [164]

Архитектура и особенности [ править ]

Карта ядра Linux
Диаграмма Санки строк исходного кода ядра Linux

Несмотря на кажущуюся противоречивость, ядро ​​Linux одновременно монолитно и модульно. Ядро классифицируется как монолитное по архитектуре, поскольку вся ОС работает в пространстве ядра. Конструкция является модульной, поскольку ее можно собрать из модулей , которые в некоторых случаях загружаются и выгружаются во время выполнения. [12] : 338  [165] Он поддерживает функции, которые когда-то были доступны только в ядрах с закрытым исходным кодом несвободных операционных систем.

В оставшейся части статьи используются соглашения UNIX и Unix-подобных операционных систем, описанные в руководствах . Число, которое следует за именем команды, интерфейса или другой функции, указывает раздел (т. е. тип компонента или функции ОС), к которому она принадлежит. Например execve(2) относится к системному вызову, а exec(3) относится к оболочке библиотеки пользовательского пространства.

Ниже приводится обзор архитектурного дизайна и примечательных особенностей.

Большинство драйверов устройств и расширений ядра работают в пространстве ядра ( кольцо 0 во многих ЦП архитектурах ) с полным доступом к оборудованию. Некоторые исключения выполняются в пространстве пользователя ; Яркими примерами являются файловые системы, основанные на FUSE /CUSE и части UIO. [184] [185] Более того, X Window System и Wayland , оконная система и протоколы сервера отображения, которые большинство людей используют в Linux, не работают в ядре. Иными словами, фактическое взаимодействие с процессорами видеокарт графическими представляет собой внутриядерную подсистему, называемую Direct Rendering Manager (DRM).

В отличие от стандартных монолитных ядер, драйверы устройств легко настраиваются как модули и загружаются или выгружаются во время работы системы, а также могут быть вытеснены при определенных условиях, чтобы правильно обрабатывать аппаратные прерывания и лучше поддерживать симметричную многопроцессорность . [168] По выбору Linux не имеет стабильного двоичного интерфейса приложения драйвера устройства . [186]

Linux обычно использует защиту памяти и виртуальную память , а также может обрабатывать неравномерный доступ к памяти . [187] однако проект вобрал в себя μClinux , который также позволяет запускать Linux на микроконтроллерах без виртуальной памяти. [188]

Аппаратное обеспечение представлено в файловой иерархии. Пользовательские приложения взаимодействуют с драйверами устройств через записи в /dev или /sys каталоги. [189] Информация о процессе отображается в /прок каталог. [189]

Различные уровни в Linux, также показывающие разделение между пользовательской областью и пространством ядра.
Пользовательский режим Пользовательские приложения 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 -совместимым. [190]
планирования процессов Подсистема IPC Подсистема управления памятью Подсистема виртуальных файлов Подсистема Сетевая подсистема
Другие компоненты: ALSA , DRI , evdev , klibc , LVM , устройство отображения устройств , сетевой планировщик Linux , Netfilter.
Модули безопасности Linux : SELinux , TOMOYO , AppArmor , Smack
Аппаратное обеспечение ( ЦП , основная память , устройства хранения данных и т. д.)

Интерфейсы [ править ]

Выделяются четыре интерфейса: два внутренних по отношению к ядру и два между ядром и пользовательским пространством.

Linux начинался как клон UNIX и нацелен на соответствие POSIX и единой спецификации UNIX . [191] Ядро предоставляет системные вызовы и другие интерфейсы, специфичные для Linux. Чтобы быть включенным в официальное ядро, код должен соответствовать набору правил лицензирования. [6] [11]

Linux Бинарный интерфейс приложений (ABI) между ядром и пользовательским пространством имеет четыре степени стабильности (стабильный, тестируемый, устаревший, удаленный); [192] Ожидается, что системные вызовы никогда не изменятся, чтобы сохранить совместимость с программами пользовательского пространства , которые на них полагаются. [193]

Загружаемые модули ядра (LKM) по своей конструкции не могут полагаться на стабильный ABI. [186] Поэтому их необходимо перекомпилировать каждый раз, когда в системе устанавливается новый исполняемый файл ядра, иначе они не будут загружены. Драйверы в дереве, которые настроены стать неотъемлемой частью исполняемого файла ядра ( vmlinux ), статически связываются в процессе сборки.

Нет никакой гарантии стабильности API внутри ядра на уровне исходного кода. [186] и поэтому код драйвера устройства , а также код любой другой подсистемы ядра должен постоянно обновляться по мере развития ядра. Любой разработчик, вносящий изменения в API, обязан исправить любой код, который выходит из строя в результате их изменения. [194]

API взаимодействия ядра с пользовательским пространством [ править ]

Набор API ядра Linux , который касается интерфейсов, предоставляемых пользовательским приложениям, в основном состоит из системных вызовов UNIX и Linux . [195] Системный вызов — это точка входа в ядро ​​Linux. [196] Например, среди Linux-специфичных есть семейство clone(2) системные вызовы. [197] Большинство расширений необходимо включить, определив _GNU_SOURCE макрос в заголовочном файле или при компиляции пользовательского кода. [198]

Системные вызовы могут быть вызваны только с помощью инструкций ассемблера, которые позволяют перейти из непривилегированного пользовательского пространства в привилегированное пространство ядра в кольце 0 . По этой причине стандартная библиотека C (libC) действует как оболочка для большинства системных вызовов Linux, предоставляя функции C, которые при необходимости [199] прозрачно войти в ядро, которое будет выполняться от имени вызывающего процесса. [195] Для системных вызовов, не предоставляемых libC, таких как быстрый мьютекс пользовательского пространства , [200] библиотека предоставляет функцию под названием syscall(2), который можно использовать для их явного вызова. [201]

Псевдофайловые системы (например, файловые системы sysfs и procfs ) и специальные файлы (например, /dev/random, /dev/sda, /dev/ttyи многие другие) представляют собой еще один уровень интерфейса для структур данных ядра, представляющих аппаратные или логические (программные) устройства. [202] [203]

ABI между ядром и пользовательским пространством [ править ]

Из-за различий, существующих между сотнями различных реализаций ОС Linux, исполняемые объекты, даже если они скомпилированы, собраны и скомпонованы для работы на конкретной аппаратной архитектуре (то есть используют ISA целевого оборудования), часто не может работать в разных дистрибутивах Linux. Эта проблема в основном связана с конфигурациями, специфичными для дистрибутива, и набором исправлений, примененных к коду ядра Linux, различиями в системных библиотеках, службах (демонах), иерархиях файловой системы и переменных среды.

Основным стандартом, касающимся совместимости приложений и двоичной совместимости дистрибутивов Linux, является Linux Standard Base (LSB). [204] [205] Однако LSB выходит за рамки того, что касается ядра Linux, поскольку он также определяет спецификации рабочего стола, библиотеки X и Qt, которые имеют мало общего с ним. [206] LSB версии 5 построена на основе нескольких стандартов и проектов (POSIX, SUS, X/Open, File System Hierarchy (FHS) и других). [207]

Части младшего значащего разряда, более важные для ядра, — это общий ABI (gABI), [208] особенно System V ABI [209] [210] и формат исполняемых файлов и ссылок (ELF), [211] [212] и ABI для конкретного процессора (psABI), например базовая спецификация для X86-64. [213] [214]

Стандартный ABI для того, как пользовательские программы x86_64 вызывают системные вызовы, заключается в загрузке номера системного вызова в регистр rax , а других параметров в rdi , rsi , rdx , r10 , r8 и r9 и, наконец, помещения инструкции сборки системного вызова в код. [215] [216] [217]

Внутриядерный API [ править ]

На XDC2014 Алекс Дойчер из AMD анонсировал единый драйвер режима ядра. [218] Собственный графический драйвер Linux, libGL-fglrx-glx будет использовать ту же DRM инфраструктуру , что и Mesa 3D . в ядре нет Поскольку стабильного встроенного ABI , AMD приходилось постоянно адаптировать прежний двоичный объект, используемый Catalyst.

Между подсистемами ядра существует несколько внутренних API ядра. Некоторые из них доступны только внутри подсистем ядра, в то время как несколько ограниченный набор внутриядерных символов (т. е. переменных, структур данных и функций) доступен динамически загружаемым модулям (например, драйверам устройств, загружаемым по требованию), независимо от того, экспортируются ли они. с EXPORT_SYMBOL() и EXPORT_SYMBOL_GPL() Макросы [219] [220] (последнее зарезервировано для модулей, выпущенных по лицензии, совместимой с GPL). [221]

Linux предоставляет встроенные API-интерфейсы, которые манипулируют структурами данных (например, связанными списками , базовыми деревьями , [222] красно-черные деревья , [223] очереди ) или выполнять общие процедуры (например, копирование данных из и в пространство пользователя, выделение памяти, вывод строк в системный журнал и т. д.), которые остаются стабильными, по крайней мере, начиная с версии Linux 2.6. [224] [225] [226]

Внутриядерные API включают библиотеки общих служб низкого уровня, используемых драйверами устройств:

  • SCSI Интерфейсы и libATA — соответственно одноранговый пакетный протокол связи для устройств хранения данных, подключенных к устройствам USB, SATA, SAS, Fibre Channel, FireWire, ATAPI, [227] и встроенная библиотека для поддержки хост-контроллеров и устройств [S]ATA. [228]
  • Диспетчер прямого рендеринга (DRM) и настройка режима ядра (KMS) — для взаимодействия с графическими процессорами и поддержки потребностей современного видеооборудования с 3D-ускорением, [229] а также для настройки разрешения экрана, глубины цвета и частоты обновления. [230]
  • DMA Буферы ( DMA-BUF ) — для совместного использования буферов для прямого доступа к памяти оборудования несколькими драйверами устройств и подсистемами. [231] [232] [233]
  • Video4Linux – для оборудования захвата видео.
  • Advanced Linux Sound Architecture (ALSA) – для звуковых карт.
  • Новый API – для контроллеров сетевых интерфейсов
  • mac80211 и cfg80211 – для контроллеров интерфейса беспроводной сети [234] [235]

Внутриядерный ABI [ править ]

Разработчики Linux решили не поддерживать стабильный встроенный ABI. Модули, скомпилированные для определенной версии ядра, нельзя загрузить в другую версию без перекомпиляции. [186]

Многопроцессорность [ править ]

Linux создает процессы с помощью клон(2) или новее клон3(2) [236] системные вызовы. Эти системные вызовы создают новые объекты, начиная от новых независимых процессов (каждый из которых имеет специальный идентификатор, называемый TGID в структуре данных Task_struct в пространстве ядра, хотя этот же идентификатор называется PID в пространстве пользователя), до новых потоков внутри вызывающего процесса. [237] [238]

Если исполняемый файл динамически связан с общими библиотеками, динамический компоновщик используется для поиска и загрузки необходимых объектов, подготовки программы к запуску и последующего ее запуска. [239]

Собственная библиотека потоков POSIX (NPTL) [240] предоставляет стандартный интерфейс потоков POSIX ( pthreads ) для пользовательского пространства.

Ядро обеспечивает futex(7) (быстрый мьютекс пользовательского пространства) для блокировки и синхронизации пользовательского пространства. [241] Большинство операций выполняются в пользовательском пространстве, но может потребоваться связь с ядром с помощью futex(2) . Системный вызов [200]

В отличие от потоков пользовательского пространства, описанных выше, потоки ядра выполняются в пространстве ядра. [242]

Планирование [ править ]

Linux Планировщик процессов является модульным в том смысле, что он позволяет использовать различные классы и политики планирования. [243] [244] Классы планировщика — это подключаемые алгоритмы планировщика, которые можно зарегистрировать с помощью базового кода планировщика. Каждый класс планирует различные типы процессов. Основной код планировщика перебирает каждый класс в порядке приоритета и выбирает планировщик с наивысшим приоритетом, у которого есть планируемый объект типа struct sched_entity, готовый к запуску. [12] : 46–47  Сущностями могут быть потоки, группы потоков и даже все процессы конкретного пользователя.

Linux обеспечивает как приоритетное вытеснение пользователя , так и полное вытеснение ядра . [12] : 62–63  Упреждение уменьшает задержку , увеличивает скорость реагирования, [245] и делает Linux более подходящим для настольных компьютеров и реального времени приложений .

Для обычных задач ядро ​​по умолчанию использует класс Completely Fair Scheduler (CFS), представленный в версии 2.6.23. [169] Планировщик определяется как макрос в заголовке C как SCHED_NORMAL. В других ядрах POSIX аналогичная политика, известная как SCHED_OTHER выделяет временные интервалы ЦП (т. е. назначает абсолютные интервалы процессорного времени в зависимости от заранее определенного или динамически вычисленного приоритета каждого процесса). Linux CFS отказывается от абсолютных временных интервалов и назначает значительную долю процессорного времени в зависимости от таких параметров, как общее количество запущенных процессов и время, в течение которого они уже выполнялись; эта функция также учитывает своего рода вес, который зависит от их относительных приоритетов (приятных значений). [12] : 46–50 

Благодаря приоритету пользователя планировщик ядра может заменить текущий процесс выполнением переключения контекста на другой, который, таким образом, получает вычислительные ресурсы для работы (ЦП, память и т. д.). Делает это по алгоритму CFS (в частности, использует переменную под названием vruntime для сортировки объектов, а затем выбирает тот, который имеет меньшее время vruntime (т. е. планируемый объект, у которого была наименьшая доля процессорного времени), к активной политике планировщика и относительным приоритетам. [246] При использовании вытеснения ядра ядро ​​может вытеснять себя, когда возвращается обработчик прерывания, когда задачи ядра блокируются, а также всякий раз, когда подсистема явно вызывает функцию Schedule().

Ядро также содержит два POSIX-совместимых [247] классы планирования в реальном времени с именем SCHED_FIFO ( в режиме реального времени в порядке очереди ) и SCHED_RR ( циклический перебор в реальном времени ), оба из которых имеют приоритет над классом по умолчанию. [243] Дополнительная политика планирования, известная как SCHED DEADLINE, реализующий алгоритм первого крайнего срока (EDF), был добавлен в версию ядра 3.14, выпущенную 30 марта 2014 года. [248] [249] SCHED_DEADLINE имеет приоритет над всеми остальными классами планирования.

В режиме реального времени PREEMPT_RT патчи, включенные в основную ветку Linux начиная с версии 2.6, обеспечивают детерминированный планировщик , удаление вытеснения и отключение прерываний (там, где это возможно), PI Mutexes (т. е. блокировку примитивов, позволяющих избежать инверсии приоритетов), [250] [251] поддержка таймеров событий высокой точности (HPET), упреждающего чтения-копирования-обновления (RCU), (принудительных) потоков IRQ и других второстепенных функций. [252] [253] [254]

В 2023 году Питер Зийлстра предложил заменить CFS самым ранним подходящим планировщиком виртуального графика первого срока (EEVDF), [255] [256] чтобы предотвратить необходимость в исправлениях CFS с «оптимальной задержкой». [257] Планировщик EEVDF заменил CFS в версии 6.6 ядра Linux. [258]

Синхронизация [ править ]

Ядро имеет разные причины параллелизма (например, прерывания, нижние половины, вытеснение задач ядра и пользователей, симметричная многопроцессорная обработка). [12] : 167 

Для защиты критических областей (разделов кода, которые должны выполняться атомарно), областей разделяемой памяти (например, глобальных переменных и других структур данных с глобальной областью действия) и областей памяти, которые асинхронно модифицируются аппаратно (например, наличие C volatile квалификатор типа ), Linux предоставляет большой набор инструментов. Они состоят из атомарных типов (манипулировать которыми можно только с помощью набора определенных операторов), спин-блокировок , семафоров , мьютексов , [259] [12] : 176–198  [260] и алгоритмы без блокировки (например, RCU ). [261] [262] [263] Большинство алгоритмов без блокировки построены поверх барьеров памяти с целью обеспечения порядка в памяти и предотвращения нежелательных побочных эффектов из-за оптимизации компилятора . [264] [265] [266] [267]

PREEMPT_RT код, включенный в основную версию Linux, предоставляет RT-мьютексы , особый вид мьютексов, которые не отключают вытеснение и поддерживают наследование приоритетов. [268] [269] Почти все блокировки переводятся в спящие при использовании конфигурации для работы в реальном времени. [270] [254] [269] Наследование приоритетов позволяет избежать инверсии приоритетов, предоставляя задаче с низким приоритетом, которая удерживает конкурирующую блокировку приоритетом ожидания с более высоким приоритетом, пока эта блокировка не будет снята. [271] [272]

Linux включает в себя валидатор блокировки ядра под названием Lockdep . [273] [274]

Прерывания [ править ]

Хотя управление прерываниями можно рассматривать как одну задачу, оно разделено на две части. Такое разделение на две части обусловлено различными временными ограничениями и необходимостью синхронизации задач, из которых состоит управление. Первая часть состоит из асинхронной процедуры обслуживания прерываний , которая в Linux известна как верхняя половина , тогда как вторая часть выполняется одним из трех типов так называемых нижних половин ( softirq , тасклеты и рабочие очереди ). . [12] : 133–137 

Подпрограммы обработки прерываний Linux могут быть вложенными. Новое прерывание может попасть в ISR с высоким приоритетом, который вытеснит любое другое ISR с более низким приоритетом.

Память [ править ]

Управление памятью в Linux — сложная тема. Прежде всего, ядро ​​не является страничным (т. е. оно всегда находится в физической памяти и не может быть перенесено на диск). В ядре нет защиты памяти (нет сигналов SIGSEGV , в отличие от пользовательского пространства), поэтому нарушения памяти приводят к нестабильности и сбоям системы. [12] : 20 

Linux реализует виртуальную память с 4- и 5-уровневыми таблицами страниц . Как уже было сказано, только пространство пользовательской памяти всегда доступно для страниц . Он хранит информацию о каждом страничном кадре в ОЗУ соответствующих структурах данных (типа struct page ), которые заполняются сразу после загрузки и сохраняются до завершения работы, независимо от того, связаны они с виртуальными страницами или нет. Более того, он классифицирует все страничные фреймы по зонам в соответствии с ограничениями, зависящими от их архитектуры, и предполагаемым использованием. Например, страницы, зарезервированные для операций DMA, находятся в ZONE_DMA, страницы, которые не сопоставлены постоянно с виртуальными адресами, находятся в ZONE_HIGHMEM (в архитектуре x86_32 эта зона предназначена для физических адресов размером более 896 МБ, тогда как x86_64 в ней не нуждается, поскольку x86_64 может постоянно отображать физические адреса). страницы, находящиеся по более высоким адресам), и все, что остается (за исключением других, менее используемых классификаций), находится в ZONE_NORMAL.

Небольшие фрагменты памяти могут быть динамически выделены с помощью семейства kmalloc() API и освобождены с помощью соответствующего варианта kfree(). vmalloc() и kvfree() используются для больших, практически смежных фрагментов. alloc_pages() выделяет желаемое количество целых страниц.

Схема стека хранилища Linux [275]

Ядро включает в себя распределители SLAB, SLUB и SLOB в качестве настраиваемых альтернатив. [276] [277] SLUB — новейший вариант, а также распределитель по умолчанию. Он нацелен на простоту и эффективность, [277] и есть PREEMPT_RT совместимый. [278] Распределитель SLOB позже был удален в Linux 6.4. [279] при этом распределитель SLAB планируется удалить в Linux 6.5, оставив единственным оставшимся распределителем SLUB, распределитель, который доступен начиная с Linux 2.6. [280]

Поддерживаемые архитектуры [ править ]

TiVo DVR , потребительское устройство под управлением Linux

Хотя изначально он не был предназначен для портативного использования , [22] [281] В настоящее время Linux является одним из наиболее широко портируемых ядер операционной системы, работающим на самых разных системах — от архитектуры ARM IBM z/Architecture до мейнфреймов . Первый порт был выполнен на платформе Motorola 68000 . Модификации ядра были настолько фундаментальными, что Торвальдс рассматривал версию Motorola как ответвление и «Linux-подобную операционную систему». [281] Однако это побудило Торвальдса провести серьезную реструктуризацию кода, чтобы облегчить портирование на большее количество вычислительных архитектур. Первый Linux, который в одном дереве исходного кода содержал код более чем для одного только i386, поддерживал DEC Alpha AXP . 64-битную платформу [282] [283] [281]

Linux работает в качестве основной операционной системы IBM на Summit ; по состоянию на октябрь 2019 г. в мире , все 500 самых быстрых суперкомпьютеров работают под управлением той или иной операционной системы, основанной на ядре Linux, [13] большое изменение по сравнению с 1998 годом, когда в список был добавлен первый суперкомпьютер Linux. [284]

Linux также был портирован на различные портативные устройства, такие как Apple iPhone 3G и iPod . [285]

Поддерживаемые устройства [ править ]

В 2007 году был начат проект LKDDb по созданию комплексной базы данных оборудования и протоколов, известных ядрам Linux. [286] База данных создается автоматически путем статического анализа исходников ядра. Позже в 2014 году был запущен проект Linux Hardware для автоматического сбора базы данных всех протестированных конфигураций оборудования с помощью пользователей различных дистрибутивов Linux. [287]

Живое обновление [ править ]

Обновления без перезагрузки можно даже применять к ядру с помощью технологий оперативного исправления, таких как Ksplice , kpatch и kGraft . Минималистичные основы для оперативного исправления ядра были объединены с основной веткой ядра Linux в версии ядра 4.0, выпущенной 12 апреля 2015 года. Эти основы, известные как livepatch и основанные главным образом на функциональности ядра ftrace , образуют общее ядро, способное поддерживать горячее исправление. как kGraft, так и kpatch, предоставляя интерфейс прикладного программирования (API) для модулей ядра, содержащих горячие исправления, и двоичный интерфейс приложения (ABI) для утилит управления пользовательским пространством. Однако общее ядро, включенное в ядро ​​Linux 4.0, поддерживает только архитектуру x86 и не предоставляет никаких механизмов для обеспечения согласованности на уровне функций во время применения горячих исправлений. По состоянию на апрель 2015 г. , продолжается работа по портированию kpatch и kGraft на общее ядро ​​оперативного исправления, предоставляемое основной веткой ядра Linux. [288] [289] [290]

Безопасность [ править ]

Ошибки ядра представляют собой потенциальные проблемы безопасности. Например, они могут допускать повышение привилегий или создавать векторы атак типа «отказ в обслуживании» . За прошедшие годы было обнаружено и исправлено множество ошибок, влияющих на безопасность системы. [291] Часто реализуются новые функции для повышения безопасности ядра. [292] [293]

Возможности(7) уже были представлены в разделе о процессах и потоках. Android использует их, а systemd предоставляет администраторам детальный контроль над возможностями процессов. [294]

Linux предлагает множество механизмов для уменьшения поверхности атаки ядра и повышения безопасности, которые известны под общим названием « Модули безопасности Linux» (LSM). [295] Они включают в себя модуль Security-Enhanced Linux (SELinux), код которого был первоначально разработан, а затем опубликован АНБ . [296] и AppArmor [183] среди других. SELinux сейчас активно развивается и поддерживается на GitHub . [182] SELinux и AppArmor обеспечивают поддержку политик безопасности контроля доступа, включая обязательный контроль доступа (MAC), хотя они существенно различаются по сложности и объему.

Еще одной функцией безопасности является Seccomp BPF (Безопасные вычисления с фильтрами пакетов Беркли), которая работает путем фильтрации параметров и сокращения набора системных вызовов, доступных для пользовательских приложений. [297]

Критики обвиняют разработчиков ядра в сокрытии недостатков безопасности или, по крайней мере, не объявляют о них; в 2008 году Торвальдс ответил на это следующим образом: [298] [299]

Лично я считаю ошибки безопасности просто «обычными ошибками». Я не скрываю их, но у меня также нет никаких оснований думать, что отслеживать их и объявлять о чем-то особенном - это хорошая идея... одна из причин, по которой я отказываюсь беспокоиться обо всей безопасности. Цирк заключается в том, что я думаю, что он прославляет – и, таким образом, поощряет – неправильное поведение. Это делает людей, занимающихся безопасностью, «героями», как будто люди, которые не просто исправляют обычные ошибки, не так важны. На самом деле, все скучные обычные ошибки гораздо важнее просто потому, что их [sic] намного больше. Я не думаю, что какую-то впечатляющую дыру в безопасности следует прославлять или рассматривать как более «особенную», чем случайный впечатляющий сбой из-за плохой блокировки.

Дистрибутивы Linux обычно выпускают обновления безопасности для исправления уязвимостей в ядре Linux. Многие предлагают выпуски с долгосрочной поддержкой , которые получают обновления безопасности для определенной версии ядра Linux в течение длительного периода времени.

Юридический [ править ]

Условия лицензирования [ править ]

Первоначально Торвальдс выпустил Linux по лицензии, запрещавшей любое коммерческое использование. [300] В версии 0.12 это было изменено путем перехода на Стандартную общественную лицензию GNU версии 2 (GPLv2). [28] Эта лицензия разрешает распространение и продажу, возможно, модифицированных и немодифицированных версий Linux, но требует, чтобы все эти копии выпускались под одной и той же лицензией и сопровождались полным соответствующим исходным кодом или, по запросу, предоставлялся свободный доступ. [301] Торвальдс назвал лицензирование Linux по лицензии GPLv2 «лучшим, что я когда-либо делал». [300]

Ядро Linux лицензируется только по лицензии GNU General Public License версии 2 (только GPL-2.0) с явным исключением системного вызова (Linux-syscall-note), [6] [9] [10] без предоставления лицензиату возможности выбрать любую более позднюю версию, которая является распространенным расширением GPL. Предоставленный код должен быть доступен по лицензии, совместимой с GPL . [11] [194]

Были серьезные споры о том, насколько легко можно изменить лицензию для использования более поздних версий GPL (включая версию 3) и желательно ли это изменение вообще. [302] Сам Торвальдс при выходе версии 2.4.0 специально указал, что его собственный код выпускается только под версией 2. [303] Однако условия GPL гласят, что если версия не указана, то можно использовать любую версию. [304] и Алан Кокс отметил, что очень немногие другие участники Linux указали конкретную версию GPL. [305]

В сентябре 2006 года опрос 29 ключевых программистов ядра показал, что 28 из них предпочли GPLv2 действующему на тот момент проекту GPLv3. Торвальдс прокомментировал: «Я думаю, что многие посторонние… считали, что лично я был просто лишним человеком, потому что публично я не был большим поклонником GPLv3». [306] Эта группа известных разработчиков ядра, в которую вошли Торвальдс, Грег Кроа-Хартман и Эндрю Мортон , прокомментировала в средствах массовой информации свои возражения против GPLv3. [307] Они ссылались на положения, касающиеся DRM / тивоизации , патентов, «дополнительных ограничений» и предупреждали о балканизации «Вселенной с открытым исходным кодом» GPLv3. [307] [308] Торвальдс, который решил не использовать GPLv3 для ядра Linux, повторил свою критику даже годы спустя. [309]

Загружаемые модули ядра [ править ]

Спорным является вопрос о том, некоторые загружаемые модули ядра следует ли считать (LKM) производными произведениями в соответствии с законом об авторском праве и, следовательно, подпадают ли они под условия GPL.

В соответствии с правилами лицензии, ЛКМ используют только общедоступное подмножество интерфейсов ядра. [219] [220] являются непроизводными произведениями, поэтому Linux предоставляет системным администраторам механизмы для загрузки двоичных объектов вне дерева в адресное пространство ядра. [11]

Существуют некоторые загружаемые вне дерева модули, которые законно используют функцию ядра dma_buf . [310] Код, соответствующий GPL, безусловно, может его использовать. Однако другим возможным вариантом использования может быть Nvidia Optimus , который объединяет быстрый графический процессор со встроенным графическим процессором Intel, где графический процессор Nvidia записывает данные в кадровый буфер Intel , когда он активен. Но Nvidia не может использовать эту инфраструктуру, поскольку это требует обхода правила, которое может использоваться только LKM, которые также являются GPL. [221] Алан Кокс ответил на LKML , отклонив просьбу одного из инженеров Nvidia удалить это техническое требование из API. [311] Торвальдс четко заявил в LKML, что «[я] заявляю, что модули ядра, состоящие только из двоичных файлов, ЯВЛЯЮТСЯ производными «по умолчанию»». [312]

С другой стороны, Торвальдс также сказал, что «[одна] серая зона, в частности, представляет собой что-то вроде драйвера, который изначально был написан для другой операционной системы (т. е. явно не является производной версией Linux). ЭТО серая зона. , и _это_ - это область, в которой я лично считаю, что некоторые модули можно считать не производными просто потому, что они не были разработаны для Linux и не зависят от какого-либо особого поведения Linux». [313] проприетарные В частности, активно обсуждаются графические драйверы.

Всякий раз, когда в Linux загружаются проприетарные модули, ядро ​​помечает себя как «испорченное». [314] и поэтому отчеты об ошибках из испорченных ядер часто игнорируются разработчиками.

Бинарные файлы прошивки [ править ]

Официальное ядро, то есть ветка Linus git в репозитории kernel.org, содержит двоичные объекты, выпущенные в соответствии с условиями лицензии GNU GPLv2. [6] [11] Linux также может выполнять поиск в файловых системах в поисках двоичных объектов, проприетарного встроенного ПО, драйверов или других исполняемых модулей, а затем загружать и связывать их в пространство ядра. [315]

Когда это необходимо (например, для доступа к загрузочным устройствам или для повышения скорости), прошивка может быть встроена в ядро, это означает встраивание прошивки в vmlinux ; однако это не всегда приемлемый вариант по техническим или юридическим вопросам (например, не разрешается делать это с прошивкой, не совместимой с GPL, хотя, тем не менее, это довольно распространено). [316]

Торговая марка [ править ]

Linux является зарегистрированной торговой маркой Линуса Торвальдса в США, Европейском Союзе и некоторых других странах. [317] [318] Судебная тяжба по поводу товарного знака началась в 1996 году, когда Уильям Делла Кроче, юрист, никогда не занимавшийся разработкой Linux, начал требовать лицензионные сборы за использование слова Linux . После того, как было доказано, что это слово широко использовалось задолго до того, как Делла Кроче заявил о первом использовании, товарный знак был передан Торвальдсу. [319] [320] [321]

См. также [ править ]

Примечания [ править ]

  1. ^ В целом исходный код Linux предоставляется на условиях лицензии только GPL-2.0 с явным исключением системного вызова. [9] [10] Помимо этого, отдельные файлы могут предоставляться под другой лицензией, которая должна быть совместима только с лицензией GPL-2.0 (т. е. с GNU General Public License версии 2) или двойной лицензией, причем одним из вариантов является GPL версии 2 или лицензия, совместимая с GPLv2. [11]

Ссылки [ править ]

  1. ^ «Логотипы и талисманы Linux» . Линукс онлайн. 2008. Архивировано из оригинала 15 августа 2010 года . Проверено 11 августа 2009 г.
  2. ^ Грег Кроа-Хартман (16 июня 2024 г.). «Линукс 6.9.5» . Проверено 16 июня 2024 г.
  3. ^ Линус Торвальдс (16 июня 2024 г.). «Линукс 6.10-rc4» . Проверено 16 июня 2024 г.
  4. ^ Бергманн, Арнд (3 марта 2022 г.). «Kbuild: перейти к -std=gnu11» . git.kernel.org .
  5. ^ Перейти обратно: а б Доказано, Лиам. «Linux 6.1: Rust поражает основное ядро» . Регистр . Проверено 12 мая 2023 г.
  6. ^ Перейти обратно: а б с д «КОПИРОВАНИЕ» . git.kernel.org . Архивировано из оригинала 2 сентября 2021 года . Проверено 2 сентября 2021 г.
  7. ^ «Только GPL-2.0» . spdx.org . Проверено 2 сентября 2021 г.
  8. ^ «Linux-syscall-note» . spdx.org . Проверено 2 сентября 2021 г.
  9. ^ Перейти обратно: а б «GPL-2.0» . git.kernel.org .
  10. ^ Перейти обратно: а б «Linux-syscall-note» . git.kernel.org .
  11. ^ Перейти обратно: а б с д и ж «Правила лицензирования ядра Linux — Документация по ядру Linux» . www.kernel.org . Архивировано из оригинала 7 марта 2020 года . Проверено 6 января 2020 г.
  12. ^ Перейти обратно: а б с д и ж г час я дж к л м н С любовью, Роберт (2010). Разработка ядра Linux (3-е изд.). Река Аппер-Сэддл, Нью-Джерси: Аддисон-Уэсли . ISBN  978-0-672-32946-3 . OCLC   268788260 .
  13. ^ Перейти обратно: а б «ТОП500 суперкомпьютерных сайтов: Семейство операционных систем/Linux» . Топ500.org. Архивировано из оригинала 19 ноября 2012 года . Проверено 5 октября 2019 г.
  14. ^ Перейти обратно: а б с «Система сборки ядра — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 22 июля 2020 года . Проверено 17 июля 2020 г.
  15. ^ Перейти обратно: а б с «Kconfig make config — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 17 июля 2020 года . Проверено 13 сентября 2020 г.
  16. ^ Перейти обратно: а б «KernelBuild — новички в ядре Linux» . kernelnewbies.org . Архивировано из оригинала 19 октября 2020 года . Проверено 13 сентября 2020 г.
  17. ^ Перейти обратно: а б «Интерфейс Sysctl» . Linux.it . Архивировано из оригинала 17 февраля 2020 года . Проверено 13 сентября 2020 г.
  18. ^ Перейти обратно: а б «sysctl(8) — страница руководства Linux» . man7.org . Архивировано из оригинала 30 сентября 2020 года . Проверено 13 сентября 2020 г.
  19. ^ Перейти обратно: а б «procfs(5) — страница руководства Linux» . man7.org . Архивировано из оригинала 24 сентября 2020 года . Проверено 13 сентября 2020 г.
  20. ^ «Расширения C (с использованием коллекции компиляторов GNU (GCC))» . gcc.gnu.org . Архивировано из оригинала 20 ноября 2020 года . Проверено 13 ноября 2020 г.
  21. ^ Перейти обратно: а б Ричардсон, Марджори (1 ноября 1999 г.). «Интервью: Линус Торвальдс» . Linux-журнал. Архивировано из оригинала 14 мая 2011 года . Проверено 20 августа 2009 г.
  22. ^ Перейти обратно: а б Торвальдс, Линус Бенедикт (26 августа 1991 г.). «Что бы вы больше всего хотели видеть в миниксе?» . Группа новостей : comp.os.minix . Usenet:   [электронная почта защищена] . Архивировано из оригинала 9 мая 2013 года . Проверено 14 сентября 2016 г.
  23. ^ Перейти обратно: а б Валлийский, Мэтт; Дальхаймер, Матиас Калле; Кауфман, Лар (1999). «1: Введение в Linux». Запуск Linux (3-е изд.). Севастополь, Калифорния: O'Reilly Media, Inc., с. 5. ISBN  1-56592-976-4 . OCLC   50638246 .
  24. ^ «Бесплатные миникс-исходники ядра для 386-AT — Группы Google» . groups.google.com . 5 октября 1991 года. Архивировано из оригинала 1 марта 2021 года . Проверено 19 марта 2020 г.
  25. ^ Уильямс, Сэм (март 2002 г.). «Глава 9: Стандартная общественная лицензия GNU» . Свободно как свобода: крестовый поход Ричарда Столлмана за свободное программное обеспечение . О'Рейли . ISBN  0-596-00287-4 . Проверено 12 ноября 2010 г.
  26. ^ «Объяснение БСД» . Портал документации FreeBSD . Проверено 6 октября 2023 г.
  27. ^ Перейти обратно: а б с Кристин Бреснахан и Ричард Блюм (2016). LPIC-2: Учебное пособие по сертификации профессионального института Linux: экзамен 201 и экзамен 202 . Джон Уайли и сыновья. п. 107. ИСБН  9781119150794 .
  28. ^ Перейти обратно: а б Торвальдс, Линус . «Примечания к выпуску Linux v0.12» . Архивы ядра Linux. Архивировано из оригинала 19 августа 2007 года . Проверено 21 февраля 2007 г.
  29. ^ Фред Хантельманн (2016). Руководство по началу работы с Linux: автономное введение . Springer Science & Business Media. п. 1. ISBN  9783642607493 .
  30. ^ Перейти обратно: а б с Фред Хантельманн (2016). Руководство по началу работы с Linux: автономное введение . Springer Science & Business Media. п. 16. ISBN  9783642607493 .
  31. ^ Саммерс, Дэвид В. (19 января 1992 г.). «Проблемы с разделами» . Группа новостей : alt.os.linux . Usenet:   [электронная почта защищена] . Архивировано из оригинала 2 июня 2013 года . Проверено 7 января 2007 г.
  32. ^ Клегг, Алан Б. (31 марта 1992 г.). «Это здесь!» . Группа новостей : comp.os.linux . Usenet:   [электронная почта защищена] . Архивировано из оригинала 2 июня 2013 года . Проверено 7 января 2007 г.
  33. ^ «Приложение А: Дебаты Таненбаума и Торвальдса» . Открытые исходные коды: голоса революции открытого исходного кода . О'Рейли . 1999. ISBN  1-56592-582-3 . Проверено 22 ноября 2006 г.
  34. ^ Таненбаум, Энди (29 января 1992 г.). «LINUX устарел» . Группа новостей : comp.os.minix . Usenet:   [электронная почта защищена] . Архивировано из оригинала 17 октября 2011 года . Проверено 10 мая 2006 г.
  35. ^ Таненбаум, Энди (12 мая 2006 г.). «Дебаты Таненбаума-Торвальдса: Часть II» . Университет ВУ Амстердама . Архивировано из оригинала 5 августа 2015 года . Проверено 6 января 2007 г.
  36. ^ Хейворд, Дэвид (22 ноября 2012 г.). «История Linux: как время сформировало пингвина» . ТехРадар . Архивировано из оригинала 19 марта 2020 года . Проверено 19 марта 2020 г.
  37. ^ Хейворд, Дэвид (22 ноября 2012 г.). «История Linux: как время сформировало пингвина» . ТехРадар . Архивировано из оригинала 19 марта 2020 года . Проверено 26 марта 2020 г. .
  38. ^ Перейти обратно: а б с Кристин Бреснахан и Ричард Блюм (2016). LPIC-2: Учебное пособие по сертификации профессионального института Linux: экзамен 201 и экзамен 202 . Джон Уайли и сыновья. п. 108. ИСБН  9781119150794 .
  39. ^ Торвальдс, Линус (9 июня 1996 г.). «Linux 2.0 действительно выпущен». LKML (список рассылки). Архивировано из оригинала 2 апреля 2015 года . Проверено 8 марта 2015 г.
  40. ^ Торвальдс, Линус (20 января 1999 г.). «2.2.0-финал» . LKML (список рассылки). Архивировано из оригинала 2 апреля 2015 года . Проверено 8 марта 2015 г.
  41. ^ Перейти обратно: а б «Чудесный мир Linux 2.2» . 26 января 1999 года. Архивировано из оригинала 6 ноября 2014 года . Проверено 27 октября 2008 г.
  42. ^ «Наблюдения и заметки по Linux/390» . linuxvm.org . Архивировано из оригинала 26 февраля 2019 года . Проверено 29 марта 2020 г.
  43. ^ Торвальдс, Линус (4 января 2001 г.). «И о, кстати». LKML (список рассылки). Архивировано из оригинала 26 января 2016 года . Проверено 8 марта 2015 г.
  44. ^ «Чудесный мир Linux 2.4» . Архивировано из оригинала 17 марта 2005 года . Проверено 27 октября 2008 г.
  45. ^ Торвальдс, Линус (17 декабря 2003 г.). «Линукс 2.6.0» . LKML (список рассылки). Архивировано из оригинала 2 апреля 2015 года . Проверено 28 февраля 2015 г.
  46. ^ «proc(5) — страница руководства Linux» (см. /proc/sys/kernel/pid_max). Архивировано из оригинала 7 февраля 2014 года . Проверено 19 февраля 2014 г.
  47. ^ «btrfs вики» . btrfs.wiki.kernel.org . Архивировано из оригинала 25 апреля 2012 года . Проверено 17 июля 2020 г.
  48. ^ Фред Хантельманн (2016). Руководство по началу работы с Linux: автономное введение . Springer Science & Business Media. стр. 1–2. ISBN  9783642607493 .
  49. ^ Список рассылки ядра Linux (17 июня 2005 г.). «Линукс 2.6.12» . git-commits-head (список рассылки). Архивировано из оригинала 26 января 2016 года . Проверено 23 января 2008 г.
  50. ^ Кроа-Хартман, Грег (3 августа 2006 г.). «Адриан Банк теперь берет на себя управление стабильной веткой версии 2.6.16» . LKML (список рассылки). Архивировано из оригинала 26 января 2016 года . Проверено 21 февраля 2015 г.
  51. ^ Ротвелл, Стивен (12 февраля 2008 г.). "Анонс: Linux-next (Или мечта Андрея :-))" . LKML (список рассылки). Архивировано из оригинала 24 ноября 2010 года . Проверено 30 октября 2010 г.
  52. ^ Корбет, Джонатан (21 октября 2010 г.). «Linux-next и процесс управления исправлениями» . LWN.net . Eklektix, Inc. Архивировано из оригинала 21 июня 2010 года . Проверено 30 октября 2010 г.
  53. ^ «Архивы ядра Linux» . Кернел.орг. Архивировано из оригинала 30 января 1998 года . Проверено 22 января 2014 г.
  54. ^ «Добавьте личность, чтобы сообщить номера версий 2.6.x [LWN.net]» . lwn.net . Архивировано из оригинала 16 июля 2020 года . Проверено 15 июля 2020 г.
  55. ^ Перейти обратно: а б Торвальдс, Линус (21 июля 2011 г.). «Выпуск Linux 3.0» . Список рассылки ядра Linux . Архивировано из оригинала 18 октября 2019 года . Проверено 16 мая 2013 г.
  56. ^ Торвальдс, Линус (30 мая 2011 г.). «Линукс 3.0-rc1» . LKML (список рассылки). Архивировано из оригинала 31 мая 2011 года . Проверено 1 июля 2013 г.
  57. ^ Торвальдс, Линус (10 апреля 2001 г.). «Re: [ИСПРАВЛЕНИЕ] исправление i386 rw_semaphores» . yarchive.net . Проверено 26 мая 2024 г.
  58. ^ Воан-Николс, Стивен Дж. (13 декабря 2012 г.). «Прощай, 386: Linux прекратит поддержку чипов i386 в следующем крупном выпуске» . ЗДНет . CBS Интерактив . Архивировано из оригинала 17 февраля 2015 года . Проверено 6 февраля 2013 г.
  59. ^ Фингас, Джон (15 декабря 2012 г.). «Linux прекратит поддержку i386 в ядре 3.8, заставит нас обновить нашу установку Doom» . Engadget . АОЛ . Архивировано из оригинала 2 апреля 2015 года . Проверено 22 марта 2015 г.
  60. ^ Воан-Николс, Стивен Дж. (11 декабря 2012 г.). «Выходит Linux 3.7, разработчики ARM радуются» . ЗДНет . CBS Интерактив . Архивировано из оригинала 5 ноября 2014 года . Проверено 6 февраля 2013 г.
  61. ^ Торвальдс, Линус (2 сентября 2013 г.). «Линукс 3.11» . LKML (список рассылки). Архивировано из оригинала 26 февраля 2014 года . Проверено 3 сентября 2013 г.
  62. ^ «Линукс 3.11» . kernelnewbies.org. 2 сентября 2013 года . Проверено 21 января 2014 г.
  63. ^ Торвальдс, Линус (12 апреля 2015 г.). «Выпущен Linux 4.0» . LKML (список рассылки). Архивировано из оригинала 13 апреля 2015 года . Проверено 12 апреля 2015 г.
  64. ^ «Фонд Linux публикует отчет о разработке Linux» . Фонд Linux . 18 февраля 2015 года. Архивировано из оригинала 19 июля 2016 года . Проверено 20 февраля 2015 г.
  65. ^ Майкл Ларабель (23 июня 2014 г.). «Ядро Linux с объемом кода в 19,5 миллионов строк продолжает расти» . Фороникс . Архивировано из оригинала 23 ноября 2020 года . Проверено 23 июня 2015 г.
  66. ^ Корбет, Джонатан (3 августа 2020 г.). «Некоторые статистические данные из цикла ядра 5.8» . LWN — Еженедельные новости Linux . Архивировано из оригинала 4 сентября 2020 года . Проверено 11 августа 2020 г. .
  67. ^ «Опрос разработчиков Stack Overflow 2019 — самые популярные технологии» . Переполнение стека . Архивировано из оригинала 8 октября 2020 года . Проверено 17 марта 2020 г.
  68. ^ «Опрос разработчиков Stack Overflow 2019 — среды и инструменты разработки» . Переполнение стека . Архивировано из оригинала 7 марта 2020 года . Проверено 17 марта 2020 г.
  69. ^ «Статистика использования и доля рынка операционных систем для веб-сайтов, март 2020 г.» . w3techs.com . Проверено 17 марта 2020 г.
  70. ^ «Статистика использования и доля рынка Unix для веб-сайтов, март 2020 г.» . w3techs.com . Проверено 17 марта 2020 г.
  71. ^ «ТОП500 суперкомпьютерных сайтов: Семейство операционных систем/Linux» . Топ500.org. Архивировано из оригинала 19 ноября 2012 года . Проверено 5 октября 2019 г.
  72. ^ «Gartner заявляет, что продажи планшетов составят менее 10 процентов всех устройств в 2014 году» (пресс-релиз). Эгам, Великобритания : Gartner . 15 октября 2014 года. Архивировано из оригинала 17 октября 2014 года . Проверено 19 октября 2014 г.
  73. ^ Лунден, Ингрид (15 октября 2014 г.). «Рост продаж планшетов резко упал в 2014 году, поскольку Android-смартфоны продолжают стремительно расти: Gartner» . ТехКранч . АОЛ . Архивировано из оригинала 23 октября 2014 года . Проверено 23 октября 2014 г.
  74. ^ «Глобальные поставки ПК превзошли прогнозы при незначительном улучшении потребительского спроса, в то время как Apple переместилась на пятое место по данным IDC» (пресс-релиз). Фрамингем, Массачусетс : IDC . 8 октября 2014 года. Архивировано из оригинала 11 октября 2014 года . Проверено 19 октября 2014 г.
  75. ^ Уиллер, Дэвид А. «Ядро Linux 2.6: оно стоит большего!» . Архивировано из оригинала 20 августа 2011 года . Проверено 18 января 2007 г.
  76. ^ «Экономическое влияние FLOSS на инновации и конкурентоспособность сектора ИКТ ЕС» (PDF) (таблица 3 на стр. 50). Архивировано (PDF) из оригинала 15 февраля 2010 года . Проверено 8 января 2011 г.
  77. ^ «Оценка общей стоимости разработки дистрибутива Linux» (PDF) (таблица на странице 6). Архивировано из оригинала (PDF) 11 июля 2010 года.
  78. ^ «Ядро на миллиард долларов» . Linux.slashdot.org. 24 февраля 2010 года. Архивировано из оригинала 15 мая 2011 года . Проверено 12 ноября 2010 г.
  79. ^ Уиллер, Дэвид. «Ядро Linux: оно стоит большего!» . Архивировано из оригинала 24 февраля 2021 года . Проверено 17 сентября 2012 г.
  80. ^ «Архивы ядра Linux» . www.kernel.org . Проверено 28 февраля 2023 г.
  81. ^ Перейти обратно: а б «Состояние разработки ядра Linux в 2017 году» . Фонд Linux . 25 октября 2017 г. Архивировано из оригинала 27 мая 2020 г. . Проверено 27 мая 2020 г.
  82. ^ «Почему я ушёл: разработчик ядра Кон Коливас» . Журнал АПК . Журналы АКП. 24 июля 2007 г. Архивировано из оригинала 7 июля 2011 г. Проверено 15 августа 2011 г.
  83. ^ Корбет, Джонатан (25 июля 2007 г.). «Re: Планы слияния -mm для версии 2.6.23» . LWN.net. Архивировано из оригинала 11 февраля 2018 года . Проверено 10 февраля 2018 г.
  84. ^ Кокс, Алан (28 июля 2009 г.). «Re: [ИСПРАВЛЕНИЕ] kdesu сломано» . Архивировано из оригинала 11 февраля 2018 года . Проверено 10 февраля 2018 г.
  85. ^ Родригес, Голдвин (22 января 2011 г.). «История двух целей SCSI» . Архивировано из оригинала 15 февраля 2018 года . Проверено 14 февраля 2018 г.
  86. ^ Штайнмец, Андреас (17 января 2013 г.). «LIO — сломанная целевая реализация iSCSI» . Архивировано из оригинала 15 февраля 2018 года . Проверено 14 февраля 2018 г.
  87. ^ Пол, Райан (19 июня 2012 г.). «Линус Торвальдс говорит NVIDIA: «Да пошли вы!» . Архивировано из оригинала 15 февраля 2018 года . Проверено 14 февраля 2018 г.
  88. ^ Джон Голд (3 апреля 2014 г.). «Линус Торвальдс отстраняет ключевого разработчика Linux: паника ядра, когда разработчик Systemd тыкает медведя» . Архивировано из оригинала 24 марта 2019 года . Проверено 24 марта 2019 г.
  89. ^ Пёттеринг, Леннарт (6 октября 2014 г.). «О болезни сообщества ядра Linux» . Гугл+ . Архивировано из оригинала 27 мая 2018 года . Проверено 10 февраля 2018 г.
  90. ^ Бродкин, Джон (6 марта 2015 г.). «VMware якобы нарушала лицензию Linux на открытый исходный код в течение многих лет» . Арс Техника . Архивировано из оригинала 15 февраля 2018 года . Проверено 14 февраля 2018 г.
  91. ^ Маккарти, Кирен (26 августа 2016 г.). «Оскорбив всех в мире, Линус Торвальдс называет своих адвокатов «мерзкой гноящейся болезнью» » . Регистр . Архивировано из оригинала 15 февраля 2018 года . Проверено 14 февраля 2018 г.
  92. ^ Кроа-Хартман, Грег. «[ИСПРАВЛЕНИЕ 000/190] Отмена всех коммитов umn.edu» . Архив списка рассылки ядра Linux . Проверено 13 января 2022 г.
  93. ^ Чин, Моника (30 апреля 2021 г.). «Как университету запретили использование ядра Linux» . Грань . Проверено 13 января 2022 г.
  94. ^ Корбет, Джонатан (10 сентября 2007 г.). «KS2007: Отношения с разработчиками и процесс разработки» . LWN.net . Архивировано из оригинала 12 февраля 2018 года . Проверено 11 февраля 2018 г.
  95. ^ Бродкин, Джон (16 июля 2013 г.). «Линус Торвальдс защищает свое право опозорить разработчиков ядра Linux» . АРС Техника . Архивировано из оригинала 17 февраля 2018 года . Проверено 11 февраля 2018 г.
  96. ^ Корбет, Джонатан (9 марта 2015 г.). «Конфликтный код ядра» . LWN.net . Архивировано из оригинала 12 февраля 2018 года . Проверено 11 февраля 2018 г.
  97. ^ Корбет, Джонатан (18 сентября 2018 г.). «Кодекс, конфликт и поведение» . LWN.net . Архивировано из оригинала 19 сентября 2018 года . Проверено 19 сентября 2018 г.
  98. ^ Коэн, Ноам (19 сентября 2018 г.). «После многих лет оскорбительных писем по электронной почте создатель Linux уходит в сторону» . Житель Нью-Йорка . Архивировано из оригинала 20 февраля 2020 года . Проверено 24 сентября 2018 г.
  99. ^ Ларабель, Майкл. «Отказ от ненормативной лексики в комментариях к коду ядра: Linux получает «обнимашки» » . Фороникс . Архивировано из оригинала 21 апреля 2019 года . Проверено 15 июня 2019 г.
  100. ^ «Кодекс конфликта» . Проверено 4 февраля 2018 г. [ постоянная мертвая ссылка ]
  101. ^ Шарвуд, Саймон (6 октября 2015 г.). «Разработчик ядра Linux, который попросил Линуса Торвальдса прекратить словесные оскорбления, уходит из-за словесных оскорблений» . Регистр . Архивировано из оригинала 29 марта 2020 года . Проверено 4 февраля 2018 г.
  102. ^ Эдж, Джейк (31 января 2018 г.). «Слишком много лордов, недостаточно управляющих» . LWN.net . Архивировано из оригинала 9 ноября 2020 года . Проверено 4 февраля 2018 г.
  103. ^ Корбет, Джонатан (6 ноября 2017 г.). «Разгромить тех, кто сопровождает ядро» . LWN.net . Архивировано из оригинала 26 января 2021 года . Проверено 4 февраля 2018 г.
  104. ^ «Эволюция Linux» (PDF) . 26 марта 2008 г. Архивировано (PDF) из оригинала 14 декабря 2013 г. . Проверено 6 ноября 2013 г.
  105. ^ «Постоянная разработка: модель жизненного цикла ядра Linux» (PDF) . 25 октября 2011 г. Архивировано (PDF) из оригинала 17 октября 2013 г. . Проверено 6 ноября 2013 г.
  106. ^ Кроа-Хартман, Грег (12 февраля 2008 г.). "Re: Анонс: Linux-next (Или мечта Андрея :-))" . Список рассылки ядра Linux (список рассылки). Архивировано из оригинала 2 февраля 2017 года . Проверено 30 января 2017 г.
  107. ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux . Пирсон Образование. п. 11. ISBN  9780768696790 .
  108. ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux . Пирсон Образование. п. 12. ISBN  9780768696790 .
  109. ^ «Как работает процесс разработки» . Архивировано из оригинала 9 декабря 2017 года . Проверено 4 февраля 2018 г.
  110. ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux . Пирсон Образование. п. 13. ISBN  9780768696790 .
  111. ^ «Кодекс поведения участников Соглашения» . Документация ядра Linux . Проверено 6 октября 2021 г.
  112. ^ «Толкование Кодекса поведения участников Linux Kernel Covenant» . Документация ядра Linux . Проверено 6 октября 2021 г.
  113. ^ Уильямс, Дэн. «[ИСПРАВЛЕНИЕ] CodingStyle: содержащая терминология» . Список рассылки ядра Linux .
  114. ^ Тим Андерсон. «Минимальный компилятор ядра Linux повышен до GCC 5.1, что позволяет потенциально использовать C11» . Регистр . Проверено 12 мая 2023 г.
  115. ^ Ларабель, Майкл. «Переход с C89 на C11/GNU11 с Linux 5.18» . www.phoronix.com . Проверено 12 мая 2023 г.
  116. ^ Шарвуд, Саймон (11 декабря 2022 г.). «Линус Торвальдс раскрывает ядро ​​Linux 6.1» . Регистр . Проверено 12 мая 2023 г.
  117. ^ Корбет, Джонатан. «Ржавчина в ядре 6.2» . LWN.net . Проверено 12 мая 2023 г.
  118. ^ Ларабель, Майкл. «Подготовлено больше кода Rust для Linux 6.3 — ближе к внедрению драйверов Rust» . Фороникс . Проверено 12 мая 2023 г.
  119. ^ «КАК разрабатывать ядро ​​Linux — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 4 января 2020 г.
  120. ^ «Стиль кодирования ядра Linux — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 5 января 2020 года . Проверено 4 января 2020 г.
  121. ^ Перейти обратно: а б «Как работает процесс разработки — Документация ядра Linux» . Кернел.орг . Архивировано из оригинала 9 декабря 2017 года . Проверено 26 марта 2020 г. .
  122. ^ Куббилун, Инго А. (2 июня 2004 г.). «Патч ядра Linux для компилятора Intel» (на немецком языке). Pyrillion.org. Архивировано из оригинала 22 июля 2011 года . Проверено 12 ноября 2010 г.
  123. ^ Тимофей (26 февраля 2009 г.). «Проект высокопроизводительного ядра Linux — LinuxDNA» . Слэшдот Линукс . Холдинг Дайс . Архивировано из оригинала 18 октября 2019 года . Проверено 30 октября 2010 г.
  124. ^ Райан, Джастин (25 февраля 2009 г.). «LinuxDNA расширяет возможности Linux с помощью компилятора Intel C/C++» . Linux-журнал . Belltown Media, Inc. Архивировано из оригинала 9 ноября 2020 года . Проверено 30 октября 2010 г.
  125. ^ Ларабель, Майкл (5 марта 2023 г.). «В Linux 6.3 прекращена поддержка компилятора Intel ICC» . Фороникс . Проверено 6 марта 2023 г.
  126. ^ Лельбах, Брайс (25 октября 2010 г.). «Clang собирает работающее ядро ​​Linux (загружается до RL5 с SMP, сетью и X, собственными хостами)» . cfe-dev (список рассылки). Архивировано из оригинала 7 сентября 2015 года.
  127. ^ Ларабель, Майкл (12 апреля 2014 г.). «Linux 3.15 почти можно скомпилировать под Clang LLVM» . Фороникс . Архивировано из оригинала 13 августа 2020 года . Проверено 10 июня 2014 г.
  128. ^ Ларабель, Майкл . «Пакет за патчем LLVM Clang становится лучше при создании ядра Linux» . Фороникс . Архивировано из оригинала 13 августа 2020 года . Проверено 20 ноября 2014 г.
  129. ^ Эдж, Джейк (7 мая 2013 г.). «LFCS: Проект LLVMLinux» . LWN.net . Архивировано из оригинала 10 августа 2020 года . Проверено 3 марта 2015 г.
  130. ^ Мёллер, Ян-Симон (2 февраля 2014 г.). «LLVMLinux: Ядро Linux с крыльями дракона» (PDF) . Проект ЛЛВМ . Архивировано (PDF) из оригинала 3 августа 2020 г. Проверено 3 марта 2015 г.
  131. ^ Десольнье, Ник; Хакманн, Грег; Хайнс, Стивен (18 октября 2017 г.). «Собрание разработчиков LLVM 2017: компиляция пользовательского пространства Android и ядра Linux с помощью LLVM» . Ютуб . Архивировано из оригинала 31 декабря 2020 года . Проверено 7 декабря 2020 г.
  132. ^ Хакманн, Грег (2 февраля 2017 г.). «Серия патчей marlin-nougat-mr1-clang» . Архивировано из оригинала 10 декабря 2020 года . Проверено 6 декабря 2020 г.
  133. ^ Кельке, Матиас (22 октября 2018 г.). «cros-kernel2: сделать clang компилятором по умолчанию для сборок ядра» . Архивировано из оригинала 10 декабря 2020 года . Проверено 6 декабря 2020 г.
  134. ^ Ларабель, Майкл (4 февраля 2019 г.). «Использование LLVM Clang для компиляции ядра Linux снова набирает обороты благодаря Google» . Фороникс . Архивировано из оригинала 25 ноября 2020 года . Проверено 6 декабря 2020 г.
  135. ^ Десольнье, Ник (10 декабря 2019 г.). «vts: ядро: принудительно использовать vts_kernel_toolchain для всех TARGET_ARCH для R» . Архивировано из оригинала 10 декабря 2020 года . Проверено 6 декабря 2020 г.
  136. ^ Десольнье, Ник (19 ноября 2020 г.). «Re: нарушение подписи указателя функции» . ЛКМЛ . Проверено 6 декабря 2020 г.
  137. ^ Брэдфорд, Джон (8 марта 2003 г.). «Re: что такое упс» . LKML (список рассылки). Архивировано из оригинала 31 октября 2014 года . Проверено 30 октября 2010 г.
  138. ^ «syslog(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 13 октября 2020 года . Проверено 15 августа 2020 г. .
  139. ^ «kmsg: экспортируйте записи printk в интерфейс /dev/kmsg [LWN.net]» . lwn.net . Архивировано из оригинала 2 октября 2015 года . Проверено 16 августа 2020 г. .
  140. ^ Посмотрите, что делает ваш компьютер с помощью утилит Ftrace , 24 января 2019 г., заархивировано из оригинала 15 декабря 2021 г. , получено 9 мая 2021 г.
  141. ^ «Отладка ядра с помощью Ftrace — часть 1 [LWN.net]» . lwn.net . Архивировано из оригинала 9 ноября 2020 года . Проверено 15 сентября 2020 г.
  142. ^ «Отладка ядра с помощью Ftrace — часть 2 [LWN.net]» . lwn.net . Архивировано из оригинала 31 марта 2020 года . Проверено 15 сентября 2020 г.
  143. ^ «ftrace — Function Tracer — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 19 сентября 2020 года . Проверено 15 сентября 2020 г.
  144. ^ «Отслеживание времени загрузки — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 31 октября 2020 года . Проверено 19 сентября 2020 г.
  145. ^ «Kernel Probes (Kprobes) — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 11 октября 2020 года . Проверено 6 октября 2020 г.
  146. ^ «Uprobe-tracer: Трассировка событий на основе Uprobe — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 4 декабря 2020 года . Проверено 6 октября 2020 г.
  147. ^ «Использование кгдб, кдб и внутренних компонентов отладчика ядра» . Mirrors.edge.kernel.org . Архивировано из оригинала 26 января 2021 года . Проверено 3 ноября 2020 г. .
  148. ^ Джин Салли (2010). Профессиональные встраиваемые системы Linux . Апресс. п. 252. ИСБН  9781430272267 .
  149. ^ Биллимория, Кайван Н. (2021). Программирование ядра Linux. Подробное руководство по внутреннему устройству ядра, написанию модулей ядра и синхронизации ядра . Бирмингем: Packt Publishing, Limited. п. 55. ИСБН  978-1-78995-592-7 . OCLC   1240585605 .
  150. ^ Вадува, Александру; Гонсалес, Алекс; Симмондс, Крис (2016). Linux: разработка встраиваемых систем: используйте возможности Linux для разработки увлекательных и мощных проектов встраиваемых систем Linux: курс из трех модулей . Бирмингем, Великобритания: Packt Publishing . п. 663. ИСБН  978-1-78712-445-5 . OCLC   960471438 .
  151. ^ Карим Ягмур (2008). Создание встроенных систем Linux (2-е изд.). Севастополь [Калифорния]: O'Reilly Media. п. 387. ИСБН  978-0-596-52968-0 . ОСЛК   273049576 .
  152. ^ Ягмур, Карим (2011). Встроенный Андроид . Севастополь, Калифорния: O'Reilly Media. п. 44. ИСБН  978-1-4493-2798-9 . OCLC   812180000 .
  153. ^ «SoC (Система на кристалле)» . OpenWrt Wiki . 6 ноября 2014 г. Архивировано из оригинала 23 августа 2022 г. . Проверено 15 марта 2021 г.
  154. ^ «Что делать с номерами CVE [LWN.net]» . lwn.net . Проверено 15 марта 2021 г.
  155. ^ Амадео, Рон (20 ноября 2019 г.). «Google обрисовывает планы по поддержке основного ядра Linux в Android» . Арс Техника . Проверено 31 марта 2021 г.
  156. ^ Брюшон, Джоди (24 апреля 2021 г.), jbruchon/elks , получено 27 апреля 2021 г.
  157. ^ «Состояние упреждения-рт» . linuxplumbersconf.org . Архивировано из оригинала 15 октября 2016 года . Проверено 14 июня 2016 г.
  158. ^ Мейер, Дэвид (3 февраля 2010 г.). «Разработчик Linux объясняет удаление кода ядра Android» . ЗДНет . CBS Интерактив . Архивировано из оригинала 15 октября 2016 года . Проверено 3 февраля 2010 г.
  159. ^ «Глава 03: Обзор платформы maemo» . Обзор технологии maemo . Нокиа . 2008. Архивировано из оригинала 16 июня 2008 года . Проверено 9 апреля 2010 г.
  160. ^ Кроа-Хартман, Грег (2 февраля 2010 г.). «Android и сообщество ядра Linux» . Архивировано из оригинала 27 апреля 2019 года . Проверено 3 февраля 2010 г.
  161. ^ Перейти обратно: а б Роджер Йе (2017). Системное программирование Android . Пакт Паблишинг. п. 14. ISBN  9781787120389 .
  162. ^ Торвальдс, Линус (19 сентября 2001 г.). «Происхождение Linux — Линус Торвальдс» . Ютуб . Архивировано из оригинала 15 декабря 2021 года . Проверено 6 декабря 2020 г.
  163. ^ «Файл Linux MAINTAINERS» . Архивировано из оригинала 12 января 2013 года.
  164. ^ Александру Вадува, Алекс Гонсалес и Крис Симмондс (2016). Linux: встроенная разработка . Пакт Паблишинг. п. 663. ИСБН  9781787124455 .
  165. ^ «ЧИТАЙТЕ» . git.kernel.org. Архивировано из оригинала 24 июля 2012 года . Проверено 24 марта 2021 г.
  166. ^ «sched(7) — страница руководства Linux» . man7.org . Архивировано из оригинала 17 июля 2020 года . Проверено 27 июля 2020 г.
  167. ^ «Часто задаваемые вопросы: Упреждение» . kernelnewbies.org . 22 августа 2009 г. Архивировано из оригинала 7 августа 2020 г. Проверено 7 мая 2015 г.
  168. ^ Перейти обратно: а б Джонатан Корбет (24 февраля 2003 г.). «Портирование драйверов: вытесняемое ядро» . LWN.net . Архивировано из оригинала 10 августа 2020 года . Проверено 7 мая 2015 г.
  169. ^ Перейти обратно: а б Мольнар, Инго (13 апреля 2007 г.). «[исправление] Модульное ядро ​​планировщика и полностью честный планировщик [CFS]» . LKML (список рассылки). Архивировано из оригинала 3 ноября 2020 года . Проверено 30 марта 2020 г.
  170. ^ «Совершенно честный планировщик | Linux Journal» . Linuxjournal.com . Архивировано из оригинала 3 августа 2020 года . Проверено 30 марта 2020 г.
  171. ^ «ioctl(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 20 июля 2020 года . Проверено 11 августа 2020 г. .
  172. ^ «aio(7) — страница руководства Linux» . man7.org . Архивировано из оригинала 12 апреля 2020 года . Проверено 11 августа 2020 г.
  173. ^ «io_setup(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 20 августа 2020 года . Проверено 11 августа 2020 г. .
  174. ^ «КВМ» . Linux-kvm.org . Архивировано из оригинала 28 марта 2020 года . Проверено 29 марта 2020 г.
  175. ^ «TechComparison — Wiki по виртуализации Linux» . Virt.kernelnewbies.org . Архивировано из оригинала 3 августа 2020 года . Проверено 29 марта 2020 г.
  176. ^ «Поддержка_виртуализации_через_KVM в Linux_2_6_20 — новички в ядре Linux» . Kernelnewbies.org . Архивировано из оригинала 29 ноября 2019 года . Проверено 29 марта 2020 г.
  177. ^ Кукартс, Вим. «Основная строка Linux содержит все биты кода Xen для поддержки Dom0 и DomU» . blogs.oracle.com . Архивировано из оригинала 3 августа 2020 года . Проверено 29 марта 2020 г.
  178. ^ «Xen отмечает полную поддержку Dom0 и DomU в Linux 3.0 – blog.xen.org» . 7 июня 2011 года. Архивировано из оригинала 7 июня 2011 года . Проверено 29 марта 2020 г.
  179. ^ Вилк, Конрад Жешутек (31 января 2014 г.). «Linux 3.14 и ПВХ» . Проект Зен . Архивировано из оригинала 29 марта 2020 года . Проверено 29 марта 2020 г.
  180. ^ «Введение в виртуализацию Xen | Руководство по виртуализации | openSUSE Leap 15.2» . doc.opensuse.org . Архивировано из оригинала 28 сентября 2020 года . Проверено 29 сентября 2020 г.
  181. ^ «Технология виртуализации | Руководство по виртуализации | openSUSE Leap 15.3» . doc.opensuse.org . Проверено 30 сентября 2021 г.
  182. ^ Перейти обратно: а б «Проект SELinux» . Гитхаб . Архивировано из оригинала 12 декабря 2019 года . Проверено 10 января 2020 г. .
  183. ^ Перейти обратно: а б «AppArmor — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 8 мая 2020 года . Проверено 10 января 2020 г. .
  184. ^ Джейк Эдж (25 ноября 2008 г.). «Символовые устройства в пользовательском пространстве» . LWN.net . Архивировано из оригинала 26 января 2021 года . Проверено 7 мая 2015 г.
  185. ^ Джонатан Корбет (2 мая 2007 г.). «UIO: драйверы пользовательского пространства» . LWN.net . Архивировано из оригинала 11 ноября 2020 года . Проверено 7 мая 2015 г.
  186. ^ Перейти обратно: а б с д «stable-api-nonsense — дерево исходного кода ядра Linux» . git.kernel.org . Архивировано из оригинала 5 марта 2021 года . Проверено 18 апреля 2020 г.
  187. ^ Горман, Мел (15 февраля 2004 г.). Общие сведения о диспетчере виртуальной памяти Linux (PDF) . Прентис Холл. п. 26. ISBN  0-13-145348-3 . Архивировано (PDF) из оригинала 3 мая 2019 года . Проверено 27 января 2020 г.
  188. ^ Грег Унгерер. «Объявление основной линии uClinux» . Архивировано из оригинала 31 октября 2007 года . Проверено 15 января 2008 г.
  189. ^ Перейти обратно: а б Нгуен, Бинь (30 июля 2004 г.). «Иерархия файловой системы Linux: Глава 1. Иерархия файловой системы Linux» . Проект документации Linux. Архивировано из оригинала 2 декабря 2020 года . Проверено 28 ноября 2012 г.
  190. ^ «Руководство администратора README» . Git-репозитории Kernel.org .
  191. ^ «Ядро Linux версии 5.x — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 4 января 2020 г.
  192. ^ «README\ABI\Documentation — kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux» . git.kernel.org . Архивировано из оригинала 1 октября 2020 года . Проверено 18 апреля 2020 г.
  193. ^ «syscalls\stable\ABI\Documentation — kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux» . git.kernel.org . Архивировано из оригинала 2 октября 2020 года . Проверено 18 апреля 2020 г.
  194. ^ Перейти обратно: а б «1.Intro.rst — Documentation/process/1.Intro.rst — исходный код Linux (v5.8) — Bootlin» . elixir.bootlin.com . Проверено 8 августа 2020 г.
  195. ^ Перейти обратно: а б «системные вызовы» . мужчина7 . Архивировано из оригинала 15 января 2020 года . Проверено 28 января 2020 г.
  196. ^ «intro(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 17 июля 2020 года . Проверено 16 июля 2020 г.
  197. ^ «клон» . man7.org . Архивировано из оригинала 18 января 2020 года . Проверено 28 января 2020 г.
  198. ^ "feature_test_macros" . man7.org . Архивировано из оригинала 19 января 2020 года . Проверено 28 января 2020 г.
  199. ^ «vdso(7) — страница руководства Linux» . man7.org . Архивировано из оригинала 2 февраля 2020 года . Проверено 2 февраля 2020 г.
  200. ^ Перейти обратно: а б «futex(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 31 января 2020 года . Проверено 2 февраля 2020 г.
  201. ^ «syscall(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 21 января 2020 года . Проверено 2 февраля 2020 г.
  202. ^ «sysfs(5) — страница руководства Linux» . man7.org . Архивировано из оригинала 18 января 2020 года . Проверено 6 января 2020 г.
  203. ^ «Правила доступа к информации в sysfs — Документация ядра Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 6 января 2020 г.
  204. ^ «Справочные спецификации Linux Foundation» . refspecs.linuxbase.org . Проверено 3 февраля 2020 г. .
  205. ^ «Спецификации LSB» . refspecs.linuxbase.org . Проверено 3 февраля 2020 г. .
  206. ^ «Стандартная базовая спецификация рабочего стола Linux, общая часть» . refspecs.linuxbase.org . Проверено 3 февраля 2020 г. .
  207. ^ «Нормативные ссылки» . refspecs.linuxfoundation.org . Архивировано из оригинала 12 августа 2020 года . Проверено 3 февраля 2020 г. .
  208. ^ «Стандартная базовая спецификация Linux, общая часть» . refspecs.linuxfoundation.org . Архивировано из оригинала 29 ноября 2019 года . Проверено 3 февраля 2020 г. .
  209. ^ «Двоичный интерфейс приложения System V — Редакция 4.1» (PDF) . Sco.com . Архивировано (PDF) из оригинала 13 декабря 2019 года . Проверено 3 февраля 2020 г. .
  210. ^ «Xinuos Inc. | Разработчики | Габи | 17 декабря 2003 г. | Двоичный интерфейс приложения System V — ПРОЕКТ» . Sco.com . Архивировано из оригинала 3 февраля 2020 года . Проверено 3 февраля 2020 г. .
  211. ^ «Формат исполняемых файлов и ссылок (ELF)» . Refspecs.linuxbase.org . Проверено 3 февраля 2020 г. .
  212. ^ «elf(5) — страница руководства Linux» . man7.org . Архивировано из оригинала 30 ноября 2020 года . Проверено 18 ноября 2020 г. .
  213. ^ «Стандартная базовая спецификация Linux для X86-64» . Refspecs.linuxbase.org . Проверено 3 февраля 2020 г. .
  214. ^ «Двоичный интерфейс приложения System V — ПРОЕКТ» . Refspecs.linuxbase.org . Проверено 3 февраля 2020 г. .
  215. ^ Зайфарт, Рэй (2012). Введение в программирование на 64-битном языке ассемблера Intel для Linux . Независимая издательская платформа CreateSpace. п. 170. ИСБН  9781478119203 .
  216. ^ «Анатомия системного вызова, часть 1 [LWN.net]» . lwn.net . Архивировано из оригинала 18 августа 2020 года . Проверено 16 июля 2020 г.
  217. ^ «Анатомия системного вызова, часть 2 [LWN.net]» . lwn.net . Архивировано из оригинала 6 августа 2020 года . Проверено 16 июля 2020 г.
  218. ^ Дойчер, Алекс (7 октября 2014 г.). «Новый унифицированный драйвер AMD с открытым исходным кодом» . Фонд X.Org . Архивировано из оригинала 21 января 2015 года . Проверено 21 января 2015 г.
  219. ^ Перейти обратно: а б «Символы — ненадежное руководство по взлому ядра Linux — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 3 августа 2020 года . Проверено 8 февраля 2020 г.
  220. ^ Перейти обратно: а б «Экспортированные символы и внутренний API [LWN.net]» . Lwn.net . Архивировано из оригинала 31 марта 2020 года . Проверено 15 марта 2020 г.
  221. ^ Перейти обратно: а б «Отказ от экспорта kallsyms_lookup_name() [LWN.net]» . Lwn.net . Архивировано из оригинала 1 апреля 2020 года . Проверено 15 марта 2020 г.
  222. ^ «Деревья I: Основания деревьев [LWN.net]» . lwn.net . Архивировано из оригинала 8 ноября 2020 года . Проверено 13 ноября 2020 г.
  223. ^ «Деревья II: красно-черные деревья [LWN.net]» . lwn.net . Архивировано из оригинала 13 ноября 2020 года . Проверено 13 ноября 2020 г.
  224. ^ «Ненадежное руководство по взлому ядра Linux» . Kernel.org (1-е изд.). 2005. Архивировано из оригинала 16 февраля 2020 года . Проверено 15 марта 2020 г.
  225. ^ «Ненадежное руководство по взлому ядра Linux — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 15 марта 2020 г.
  226. ^ «Ненадежное руководство по блокировке — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 15 марта 2020 г.
  227. ^ «Руководство по интерфейсам SCSI — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 2 июня 2020 года . Проверено 11 июня 2020 г.
  228. ^ «Руководство разработчика libATA — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 30 мая 2020 года . Проверено 11 июня 2020 г.
  229. ^ «Внутреннее устройство DRM — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 1 июня 2020 года . Проверено 11 июня 2020 г.
  230. ^ «Настройка режима ядра (KMS) — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 11 июня 2020 года . Проверено 11 июня 2020 г.
  231. ^ «Введение механизма совместного использования буфера DMA [LWN.net]» . lwn.net . Архивировано из оригинала 11 июня 2020 года . Проверено 11 июня 2020 г.
  232. ^ «Совместное использование буферов ЦП и ГП в Linux*» . 01.орг . 12 мая 2016 г. Архивировано из оригинала 11 июня 2020 г. . Проверено 11 июня 2020 г.
  233. ^ «Совместное использование буферов и синхронизация — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 1 июня 2020 года . Проверено 11 июня 2020 г.
  234. ^ «О mac80211» . Linux Kernel Organization, Inc. Архивировано из оригинала 1 февраля 2021 года . Проверено 8 июня 2014 г.
  235. ^ «Руководство разработчика драйверов Linux 802.11 — Документация по ядру Linux» . Кернел.орг . Проверено 19 ноября 2021 г.
  236. ^ «Разветвление [PATCH v3 1/2]: добавьте clone3 [LWN.net]» . lwn.net . Архивировано из оригинала 16 июля 2020 года . Проверено 16 июля 2020 г.
  237. ^ «clone(2) — страница руководства Linux» . man7.org . Архивировано из оригинала 15 июля 2020 года . Проверено 15 июля 2020 г.
  238. ^ «clone3(), fchmodat4() и fsinfo() [LWN.net]» . lwn.net . Архивировано из оригинала 15 июня 2020 года . Проверено 15 июля 2020 г.
  239. ^ «ld-linux.so(8) — страница руководства Linux» . man7.org . Архивировано из оригинала 26 ноября 2020 года . Проверено 18 ноября 2020 г. .
  240. ^ «nptl(7) — страница руководства Linux» . man7.org . Архивировано из оригинала 25 июля 2020 года . Проверено 25 июля 2020 г.
  241. ^ «futex(7) — страница руководства Linux» . man7.org . Архивировано из оригинала 15 июля 2020 года . Проверено 25 июля 2020 г.
  242. ^ «Потоки ядра стали проще [LWN.net]» . lwn.net . Архивировано из оригинала 31 марта 2020 года . Проверено 15 августа 2020 г. .
  243. ^ Перейти обратно: а б Бар, Моше (1 апреля 2000 г.). «Планировщик Linux» . Linux-журнал . Belltown Media, Inc. Архивировано из оригинала 2 февраля 2021 года . Проверено 14 апреля 2012 г.
  244. ^ BKK19-TR03 — Планировщик ядра Linux — Обзор , 23 апреля 2019 г., заархивировано из оригинала 15 декабря 2021 г. , получено 17 мая 2021 г.
  245. ^ «Снижение задержки в Linux: введение вытесняемого ядра | Журнал Linux» . Linuxjournal.com . Архивировано из оригинала 9 августа 2020 года . Проверено 17 августа 2020 г. .
  246. ^ «Планировщик CFS — документация по ядру Linux» . Кернел.орг . Проверено 1 мая 2021 г.
  247. ^ «Стандарт IEEE для информационных технологий – интерфейс портативной операционной системы, POSIX.1b, расширения реального времени (IEEE Std 1003.1b-1993)» . Архивировано из оригинала 16 ноября 2010 года . Проверено 17 марта 2016 г.
  248. ^ Ларабель, Майкл (24 января 2014 г.). «Ядро Linux 3.14 уже имеет множество интересных функций» . Фороникс . Архивировано из оригинала 13 августа 2020 года . Проверено 3 февраля 2014 г.
  249. ^ «Ядро Linux 3.14, раздел 1.1. Класс планирования сроков для лучшего планирования в реальном времени» . kernelnewbies.org . 30 марта 2014 г. Архивировано из оригинала 15 января 2021 г. Проверено 2 апреля 2014 г.
  250. ^ «Проект реализации RT-мьютекса — документация по ядру Linux» . Кернел.орг . Проверено 17 декабря 2021 г.
  251. ^ «Подсистема RT-mutex с поддержкой PI — Документация по ядру Linux» . Кернел.орг . Проверено 17 декабря 2021 г.
  252. ^ Маккенни, Пол (10 августа 2005 г.). «Обзор упреждения в реальном времени» . LWN.net . Архивировано из оригинала 10 августа 2020 года . Проверено 5 февраля 2012 г.
  253. ^ «Проект OSADL: Linux реального времени» . ОСАДЛ . Архивировано из оригинала 4 февраля 2021 года . Проверено 5 февраля 2012 г.
  254. ^ Перейти обратно: а б «Стивен-Ростедт_он_PREEMPT_RT» (PDF) .
  255. ^ «Планировщик EEVDF может быть готов к использованию в Linux 6.6» . Фороникс . Проверено 31 августа 2023 г.
  256. ^ «[ИСПРАВЛЕНИЕ 00/10] запланировано: EEVDF с использованием хорошей задержки [LWN.net]» . LWN.net .
  257. ^ «Планировщик ЦП EEVDF для Linux [LWN.net]» . LWN.net . Проверено 31 августа 2023 г.
  258. ^ «Планировщик EEVDF объединен для Linux 6.6, повторно представлено планирование гибридного кластера Intel» . Фороникс .
  259. ^ «блокировка — документация ядра Linux» . Кернел.орг . Проверено 17 декабря 2021 г.
  260. ^ «locking.rst — Documentation/kernel-hacking/locking.rst — исходный код Linux (v5.11.10) — Bootlin» . elixir.bootlin.com . Проверено 29 марта 2021 г.
  261. ^ «Что такое RCU по сути? [LWN.net]» . lwn.net . Проверено 29 марта 2021 г.
  262. ^ «Что такое RCU? Часть 2: Использование [LWN.net]» . lwn.net . Проверено 29 марта 2021 г.
  263. ^ «RCU, часть 3: API RCU [LWN.net]» . lwn.net . Проверено 29 марта 2021 г.
  264. ^ «Модель памяти ядра Linux» . open-std.org . Проверено 29 марта 2021 г.
  265. ^ «Формальная модель упорядочения памяти ядра (часть 1) [LWN.net]» . lwn.net . Проверено 29 марта 2021 г.
  266. ^ «Формальная модель упорядочения памяти ядра (часть 2) [LWN.net]» . lwn.net . Проверено 29 марта 2021 г.
  267. ^ Стерн, Алан. «Объяснение модели согласованности памяти ядра Linux» .
  268. ^ «kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux» . git.kernel.org . Проверено 17 декабря 2021 г.
  269. ^ Перейти обратно: а б «Типы блокировок и их правила — Документация ядра Linux» . Кернел.орг . Проверено 17 декабря 2021 г.
  270. ^ «Короткие темы: Realtime, Futexes и ntfs3» . Lwn.net . Проверено 20 февраля 2022 г.
  271. ^ «Подсистема RT-mutex с поддержкой PI — Документация по ядру Linux» . Кернел.орг . Проверено 20 февраля 2022 г.
  272. ^ «Проект реализации RT-мьютекса — документация ядра Linux» .
  273. ^ «Проверка правильности блокировки во время выполнения — документация по ядру Linux» . Кернел.орг . Проверено 17 декабря 2021 г.
  274. ^ «Прерывания, потоки и блокировка [LWN.net]» . lwn.net . Проверено 17 декабря 2021 г.
  275. ^ «Диаграмма стека хранилища Linux» . Thomas-krenn.com . Архивировано из оригинала 3 августа 2020 года . Проверено 19 марта 2020 г.
  276. ^ «Распределитель SLUB» . Lwn.net . 11 апреля 2007 года . Проверено 20 февраля 2022 г.
  277. ^ Перейти обратно: а б «Распределители плит в ядре Linux: SLAB, SLOB, SLUB» (PDF) . Events.static.linuxfound.org . Проверено 20 февраля 2022 г.
  278. ^ «Kernel/Git/Torvalds/Linux.git — дерево исходного кода ядра Linux» . Git.kernel.org .
  279. ^ Корбет, Джонатан (28 апреля 2023 г.). «6.4 Окно слияния, часть 1 [LWN.net]» . LWN.net . Проверено 12 мая 2023 г.
  280. ^ «Распределитель SLAB в Linux скоро устареет и будет удален» . Фороникс . Проверено 12 мая 2023 г.
  281. ^ Перейти обратно: а б с Торвальдс, Линус (январь 1999 г.). «Край Linux» . Открытые исходные коды: голоса революции открытого исходного кода . О'Рейли . ISBN  1-56592-582-3 . Проверено 13 октября 2013 г.
  282. ^ «Портирование Linux на DEC Alpha: ядро ​​и оболочка» . Архивировано из оригинала 5 сентября 2019 года . Проверено 5 октября 2019 г.
  283. ^ «Linux в альфа-версии: стратегический выбор» . Архивировано из оригинала 4 сентября 2019 года . Проверено 5 октября 2019 г.
  284. ^ «Кластер Авалон | ТОП500 суперкомпьютерных сайтов» . Top500.org . Архивировано из оригинала 5 октября 2019 года . Проверено 5 октября 2019 г.
  285. ^ Ван, Дэвид (6 мая 2010 г.). «Android теперь работает на iPhone 3G» . ТехХайв . ИДГ . Архивировано из оригинала 22 июля 2010 года . Проверено 11 июля 2010 г.
  286. ^ «ЛКДДб» . Проект ЛКДДб. Архивировано из оригинала 25 февраля 2021 года . Проверено 26 января 2021 г.
  287. ^ «Оборудование Linux» . Проект аппаратного обеспечения Linux. Архивировано из оригинала 26 января 2021 года . Проверено 26 января 2021 г.
  288. ^ «Ядро Linux 4.0, раздел 1.2. Оперативное обновление» . kernelnewbies.org . 26 апреля 2015 года. Архивировано из оригинала 4 мая 2015 года . Проверено 27 апреля 2015 г.
  289. ^ Джонатан Корбет (25 февраля 2015 г.). «Черновой патч для живого исправления» . LWN.net . Архивировано из оригинала 27 апреля 2015 года . Проверено 27 апреля 2015 г.
  290. ^ «kernel/git/torvalds/linux.git: получить инфраструктуру оперативного исправления от Иржи Косины (дерево исходного кода ядра Linux)» . ядро.орг . 11 февраля 2015 года. Архивировано из оригинала 11 июня 2015 года . Проверено 27 апреля 2015 г.
  291. ^ Муки, К.К.; Бургейт, Нилеш (1 июля 2005 г.). Linux: функции безопасности, аудита и контроля . США: ISACA . п. 14. ISBN  1-893209-78-4 . Архивировано из оригинала 2 июня 2013 года . Проверено 31 декабря 2010 г.
  292. ^ Хэтч, Брайан (15 июля 2008 г.). Взлом открытого Linux: секреты безопасности Linux и решения . Макгроу-Хилл Осборн Медиа . п. 524. ИСБН  978-0-07-226257-5 . Архивировано из оригинала 2 июня 2013 года . Проверено 31 декабря 2010 г.
  293. ^ Джагер, Трент (7 октября 2008 г.). Безопасность операционной системы . Издательство Морган и Клейпул. п. 122. ИСБН  978-1-59829-212-1 . Архивировано из оригинала 2 июня 2013 года . Проверено 31 декабря 2010 г.
  294. ^ «CAP_PERFMON — и новые возможности в целом [LWN.net]» . lwn.net . Архивировано из оригинала 4 августа 2020 года . Проверено 2 августа 2020 г.
  295. ^ «Использование модуля безопасности Linux — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 2 мая 2020 года . Проверено 10 января 2020 г. .
  296. ^ «Агентство национальной безопасности | Центральная служба безопасности > Чем мы занимаемся > Исследования > SE Linux > Часто задаваемые вопросы по SE Linux» . Nsa.gov . Архивировано из оригинала 18 сентября 2019 года . Проверено 10 января 2020 г. .
  297. ^ «Seccomp BPF (БЕЗОПАСНЫЕ ВЫЧИСЛЕНИЯ с фильтрами) — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 10 января 2020 г. .
  298. ^ Эндрюс, Джереми (16 июля 2008 г.). «Ошибки безопасности и полное раскрытие информации» . Ядерная ловушка . Архивировано из оригинала 19 июля 2008 года . Проверено 31 декабря 2010 г.
  299. ^ Шпенглер, Брэд (16 июля 2008 г.). «Неофициальная политика Linux по обеспечению безопасности посредством сокрытия» . Полное раскрытие информации (список рассылки). Архивировано из оригинала 7 августа 2020 года . Проверено 31 декабря 2010 г.
  300. ^ Перейти обратно: а б Ямагата, Хироо (3 августа 1997 г.). «Прагматик свободного программного обеспечения» . HotWired . Архивировано из оригинала 10 февраля 2007 года . Проверено 21 февраля 2007 г.
  301. ^ «GPL-v2» . gnu.org . Архивировано из оригинала 25 декабря 2019 года . Проверено 28 января 2020 г.
  302. ^ Корбет, Джонатан (31 января 2006 г.). «GPLv3 и ядро» . LWN.net . Архивировано из оригинала 10 августа 2020 года . Проверено 21 февраля 2007 г.
  303. ^ Торвальдс, Линус (8 сентября 2000 г.). «Linux-2.4.0-test8» . LKML (список рассылки). Архивировано из оригинала 15 мая 2020 года . Проверено 21 февраля 2007 г.
  304. ^ «gnu.org» . Gnu.org . Архивировано из оригинала 2 февраля 2021 года . Проверено 18 октября 2017 г.
  305. ^ Кокс, Алан (20 января 2006 г.). «Относительно: GPL V3 и Linux» . LKML (список рассылки). Архивировано из оригинала 26 января 2021 года . Проверено 21 февраля 2007 г.
  306. ^ Шенкленд, Стивен (25 сентября 2006 г.). «Лучшие программисты Linux критикуют GPL 3» . Новости.com . CNET . Проверено 21 февраля 2007 г. [ постоянная мертвая ссылка ]
  307. ^ Перейти обратно: а б Джеймс Э. Дж. Боттомли; Мауро Карвалью Чехаб; Томас Глейкснер; Кристоф Хеллвиг; Дэйв Джонс; Грег Кроа-Хартман; Тони Лак; Эндрю Мортон; Тронд Миклебуст; Дэвид Вудхаус (15 сентября 2006 г.). «Позиция разработчиков ядра в отношении GPLv3: опасности и проблемы с GPLv3» . LWN.net . Архивировано из оригинала 18 января 2021 года . Проверено 11 марта 2015 г.
  308. ^ Петрели, Николас (27 сентября 2006 г.). «Борьба со злом или борьба за внимание?» . linuxjournal.com. Архивировано из оригинала 2 марта 2018 года . Проверено 11 марта 2015 г.
  309. ^ «Линус Торвальдс говорит, что GPL v3 нарушает все, что отстаивала GPLv2» . Debconf 2014. 2014. Архивировано из оригинала 8 мая 2018 года . Проверено 21 марта 2018 г.
  310. ^ Кларк, Роб; Семвал, Сумит (1 ноября 2012 г.). «Среда совместного использования буфера DMA: введение» (PDF) . Конференция по встроенному Linux. Архивировано (PDF) из оригинала 8 августа 2014 года . Проверено 2 августа 2014 г.
  311. ^ Кокс, Алан (10 октября 2012 г.). «[ИСПРАВЛЕНИЕ] dma-buf: используйте EXPORT_SYMBOL» . Инфраструктура прямого рендеринга (список рассылки). Архивировано из оригинала 22 января 2013 года . Проверено 3 сентября 2013 г.
  312. ^ Торвальдс, Линус (10 декабря 2003 г.). «RE: Linux GPL и положение об исключении двоичных модулей?» . LKML (список рассылки). Архивировано из оригинала 15 июня 2011 года . Проверено 31 декабря 2010 г.
  313. ^ Торвальдс, Линус (3 декабря 2003 г.). «Re: Linux GPL и положение об исключении двоичных модулей?» . LKML (список рассылки). Архивировано из оригинала 28 апреля 2020 года . Проверено 12 ноября 2010 г.
  314. ^ «Испорченные ядра — Документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 7 марта 2020 года . Проверено 13 января 2020 г. .
  315. ^ «API прошивки Linux — документация по ядру Linux» . Кернел.орг . Архивировано из оригинала 13 января 2020 года . Проверено 13 января 2020 г. .
  316. ^ «Встроенная прошивка — Документация ядра Linux» . Кернел.орг . Архивировано из оригинала 10 июня 2020 года . Проверено 10 июня 2020 г.
  317. ^ «Регистрация Linux TM в США» . uspto.gov . Архивировано из оригинала 24 февраля 2021 года . Проверено 6 сентября 2019 г.
  318. ^ «Регистрация Linux TM в ЕС» . euipo.europa.eu . Архивировано из оригинала 9 июня 2016 года . Проверено 28 ноября 2020 г.
  319. ^ Хьюз, Фил (1 августа 1997 г.). «Спор о товарных знаках Linux» . Linux-журнал . Belltown Media, Inc. Архивировано из оригинала 30 апреля 2010 года . Проверено 8 декабря 2010 г.
  320. ^ Хьюз, Фил (1 марта 1997 г.). «Действия, предпринятые в отношении торговой марки Linux» . Linux-журнал . Belltown Media, Inc. Архивировано из оригинала 3 марта 2010 года . Проверено 8 декабря 2010 г.
  321. ^ Гиссельберг, Тоня (2010). «История торговой марки Linux, операционной системы» (PDF) . Юридическая фирма Gisselberg, Inc. Архивировано из оригинала (PDF) 11 июля 2011 года . Проверено 8 декабря 2010 г.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9adaf21a7d2378aae048de19af58ce7a__1718528400
URL1:https://arc.ask3.ru/arc/aa/9a/7a/9adaf21a7d2378aae048de19af58ce7a.html
Заголовок, (Title) документа по адресу, URL1:
Linux kernel - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)