Ядро Linux - Linux kernel

Ядро Linux
Смокинг
Смокинг пингвин, талисман Linux[1]
Linux 3.0.0 boot.png
Загрузка ядра Linux 3.0.0
РазработчикЛинус Торвальдс и тысячи сотрудников
Написано вC (95,7%) и другие языки, включая C ++ и сборка[2]
Семейство ОСUnix-подобный
изначальный выпуск0.02 (5 октября 1991 г.; 29 лет назад (1991-10-05))
Последний релиз5.9.11[3] (24 ноября 2020 г.; 2 дня назад (2020-11-24)) [±]
Последний предварительный просмотр5.10-rc5[4] (22 ноября 2020 г.; 4 дня назад (2020-11-22)) [±]
Репозиторий Отредактируйте это в Викиданных
Доступно ванглийский
Ядро типМонолитный
ЛицензияGNU GPLv2 (только) с некоторым кодом в рамках совместимых вариантов GPL или разрешительных лицензий, таких как BSD, MIT[5]
Официальный веб-сайтwww.kernel.org

В Ядро Linux это бесплатно и с открытым исходным кодом,[6][7] монолитный, модульный,[8] многозадачность, Unix-подобный Операционная система ядро.[9] Он был задуман и создан в 1991 г. Линус Торвальдс[10] за его i386 на базе ПК, и вскоре он был принят в качестве ядра для Операционная система GNU,[11] который был создан как Открытый исходный код и бесплатно программное обеспечение, и основанный на UNIX как побочный продукт последствий Войны Unix.[12] С тех пор он породил множество дистрибутивы операционной системы, обычно также называемый Linux.

Linux развернут на самых разных вычислительных системах, таких как встроенные устройства, мобильные устройства (включая его использование в Android Операционная система), персональные компьютеры, серверы, мэйнфреймы, и суперкомпьютеры.[13] Его можно адаптировать для конкретной архитектуры и для нескольких сценариев использования с помощью семейства простых команд (то есть без необходимости вручную редактировать исходный код перед компиляцией);[14][15][16] привилегированные пользователи также могут точно настраивать параметры ядра во время выполнения.[17][18][19] Большая часть кода ядра Linux написана с использованием GNU расширение GCC[20][21] к стандарту Язык программирования C и с использованием инструкций, специфичных для архитектуры (ЭТО ). Это создает высокооптимизированный исполняемый файл (vmlinux ) в отношении использования пространства памяти и времени выполнения задачи.[22]

Ежедневные обсуждения развития проходят на Список рассылки ядра Linux (LKML). Изменения отслеживаются с помощью системы контроля версий мерзавец, который был создан Торвальдсом как индивидуальная замена BitKeeper. Linux в целом выпускается под Стандартная общественная лицензия GNU версия 2 (GPLv2),[23] но он также содержит несколько файлов под другими совместимыми лицензиями,[5] и специальное исключение для API пользовательского пространства файлы заголовков (UAPI).

История

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

В апреле 1991 г. Линус Торвальдс, в то время 21-летний Информатика студент в Университет Хельсинки, Финляндия, начал работать над некоторыми простыми идеями для операционной системы. Он начал с переключатель задач в Язык ассемблера Intel 80386 и драйвер терминала. 25 августа 1991 г. Торвальдс разместил в comp.os.minix, а группа новостей на Usenet:[24]

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

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

5 октября 1991 года Линус анонсировал первую «официальную» версию Linux, версию 0.02.[26] На этом этапе Linux смог запустить Bash, GCC и некоторые другие утилиты GNU:[26][25]

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

После этого многие люди внесли свой код в проект, в том числе некоторые разработчики из МИНИКС сообщество. В то время Проект GNU создал многие компоненты, необходимые для свободной операционной системы, но собственное ядро, GNU Hurd, был неполным и недоступным. В Распространение программного обеспечения Беркли еще не освободился от юридические обременения. Несмотря на ограниченную функциональность ранних версий, Linux быстро завоевал разработчиков и пользователей.

Торвальдс присвоил ядру версию 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]

Версия Linux 0.95 была первой, которая могла запускать X Window System.[36] В марте 1994 года была выпущена Linux 1.0.0 с 176 250 строками кода.[37] Это была первая версия, подходящая для использования в производственная среда.[27]

Он запустил систему управления версиями для ядра с тремя или четырьмя числами, разделенными точками, где первое представляло основной выпуск, второй был незначительный выпуск, а третий был доработка.[38] В то время с нечетным номером незначительный Релизы предназначались для разработки и тестирования, хотя были даже пронумерованы незначительный релизы были для продакшена. Необязательная четвертая цифра указывает набор патчей для доработка.[27] Релизы в разработке отмечены -rc ("кандидат на выпуск") суффикс.

Нумерация текущей версии немного отличается от указанной выше. От четной и нечетной нумерации отказались, а конкретная основной версия теперь обозначается первыми двумя числами, взятыми в целом. В то время как временные рамки открыты для разработки следующих основной, суффикс -rcN используется для обозначения n-го релиз-кандидат для следующей версии.[39] Например, выпуску версии 4.16 предшествовало семь 4.16-rcN (от -rc1 до -rc7). После того, как стабильный выпуск сделан, его обслуживание передается «стабильной команде». Периодические обновления стабильных выпусков идентифицируются с помощью трех схем нумерации (например, 4.13.1, 4.13.2, ..., 4.13.16) .[39]

Версия 1.2 (выпущена 7 марта 1995 г.)[40] получила поддержку компьютерных систем, использующих процессоры на базе Альфа, SPARC, и MIPS архитектуры.[нужна цитата ]

После версии ядра 1.3 Торвальдс решил, что Linux достаточно развит, чтобы потребовать нового основной номер, поэтому он выпустил версию 2.0.0 в июне 1996 года.[41][42] В серию вошел 41 релиз. Основной особенностью 2.0 была поддержка симметричная многопроцессорная обработка (SMP) и поддержка большего количества типов процессоров.

Начиная с версии 2.0, Linux можно настраивать для выбора конкретных целей оборудования, а также для включения специфичных для архитектуры функций и оптимизаций.[30] В make * config семья команд kbuild используются для включения и настройки тысяч опций для создания специальных исполняемых файлов ядра (vmlinux ) и загружаемые модули.[14][15]

Версия 2.2, выпущенная 20 января 1999 г.,[43] удалена «большая блокировка ядра», которая была глобальной спин-блокировка, а также улучшенная поддержка SMP, добавлена ​​поддержка m68k и PowerPC архитектуры, и добавлены новые файловые системы (включая поддержку только для чтения для Microsoft с NTFS ).[44] В 1999 году IBM опубликовала свои исправления для кода Linux 2.2.13 для поддержки S / 390 архитектура.[45]

Версия 2.4.0, выпущенная 4 января 2001 г.,[46] содержала поддержку ЭТО Подключи и играй, USB, и Карты для ПК.[47] Он также включал поддержку PA-RISC процессор от Hewlett Packard. Разработка для 2.4.Икс немного изменилось, так как на протяжении всей серии было доступно больше функций, включая поддержку Bluetooth, Диспетчер логических томов (LVM) версия 1, RAID поддерживать, Интермеццо и ext3 файловые системы.

Версия 2.6.0 была выпущена 17 декабря 2003 года.[48] Разработка для 2.6.Икс изменился дальше в сторону включения новых функций на протяжении всего сериала. Среди изменений, внесенных в серию 2.6: интеграция µClinux в основные исходные коды ядра, PAE поддержка, поддержка нескольких новых линий Процессоры, интеграция Advanced Linux Sound Architecture (ALSA) в основные источники ядра, поддержка до 232 пользователей (от 216), поддержка до 229 идентификаторы процессов (только 64-битные, 32-битные арки по-прежнему ограничены 215),[49] существенно увеличено количество типов устройств и количество устройств каждого типа, улучшено 64-битный поддержка, поддержка файловые системы которые поддерживают файлы размером до 16 терабайты, внутри ядра упреждение, поддержка Собственная библиотека потоков POSIX (NPTL), Пользовательский режим Linux интеграция с исходниками основного ядра, SELinux интеграция с исходниками основного ядра, InfiniBand поддержка и многое другое.

Также следует отметить добавление широкого выбора файловых систем, начиная с версии 2.6.Икс релизы: теперь ядро ​​поддерживает большое количество файловых систем, некоторые из которых были разработаны для Linux, например ext3, ext4, ПРЕДОХРАНИТЕЛЬ, Btrfs,[50] и другие, которые являются родными для других операционных систем, таких как JFS, XFS, Minix, Xenix, Ирикс, Солярис, Система V, Windows и MS-DOS.[51]

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

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

Подробную информацию об истории серии ядер 2.6 можно найти в файлах журнала изменений в области выпуска исходного кода серии ядра 2.6. kernel.org.[57]

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

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

11 декабря 2012 года Торвальдс решил снизить сложность ядра, отказавшись от поддержки i386 процессоров, что сделало ядро ​​серии 3.7 последним, поддерживающим исходный процессор.[61][62] В той же серии унифицированная поддержка РУКА процессор.[63]

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

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

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

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

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

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

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

ОС Android, на которую приходится большинство установленная база всех операционных систем для мобильных устройств,[75][76][77] отвечает за рост использования ядра Linux,[30] вместе с его широким использованием в большом количестве встроенные устройства.

Архитектура

Карта ядра Linux

Linux - это монолитное ядро с модульной конструкцией (например, он может вставлять и удалять загружаемые модули ядра во время выполнения), поддерживая большинство функций, когда-то доступных только в ядрах с закрытым исходным кодом несвободных операционных систем:

Драйверы устройств и расширения ядра работают в пространство ядра (кольцо 0 во многих ЦПУ архитектуры ) с полным доступом к оборудованию, хотя некоторые исключения выполняются в пространство пользователя, например, файловые системы на основе ПРЕДОХРАНИТЕЛЬ / CUSE и части UIO.[95][96] В графическая система большинство людей используют Linux не в ядре. В отличие от стандартных монолитных ядер, драйверы устройств легко настраиваются как модули, и загружается или выгружается во время работы системы, а также может быть предварительно опорожнена при определенных условиях для обработки аппаратные прерывания правильно и для лучшей поддержки симметричная многопроцессорная обработка.[80] По выбору Linux не имеет стабильного драйвера устройства двоичный интерфейс приложения.[97]

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

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

Различные уровни в Linux, также демонстрирующие разделение между пользовательское пространство и пространство ядра
Пользовательский режимПользовательские приложенияНапример, трепать, LibreOffice, GIMP, Блендер, 0 г., Mozilla Firefox, так далее.
Компоненты системы низкого уровня:Система демоны:
systemd, запустить его, логин, сеть, PulseAudio, ...
Оконная система:
X11, Wayland, SurfaceFlinger (Android)
Другие библиотеки:
GTK +, Qt, EFL, SDL, SFML, ФЛТК, GNUstep, так далее.
Графика:
Меса, AMD Catalyst, ...
Стандартная библиотека Cоткрыто(), exec (), sbrk (), разъем(), fopen (), calloc (), ... (до 2000 г. подпрограммы )
glibc стремится быть быстрым, мусл и uClibc целевые встроенные системы, бионический написано для Android и т. д. Все стремятся быть POSIX /SUS -совместимый.
Режим ядраЯдро Linuxстат, сращивание, обман, читать, открыто, ioctl, записывать, mmap, Закрыть, выходи др. (около 380 системных вызовов)
Ядро Linux Интерфейс системного вызова (SCI, стремится быть POSIX /SUS -совместимый)[нужна цитата ]
Планирование процессов
подсистема
МПК
подсистема
Управление памятью
подсистема
Виртуальные файлы
подсистема
Сеть
подсистема
Прочие компоненты: ALSA, DRI, Evdev, LVM, сопоставитель устройств, Сетевой планировщик Linux, Netfilter
Модули безопасности Linux: SELinux, ТОМОЙО, AppArmor, Хлопать
Аппаратное обеспечение (ЦПУ, основная память, устройства хранения данных, так далее.)

Интерфейсы

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

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

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

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

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

API ядра для пользовательского пространства

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

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

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

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

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

Основным стандартом, касающимся приложений и бинарной совместимости дистрибутивов Linux, является Стандартная база Linux (МЗБ).[115][116] Однако LSB выходит за рамки того, что касается ядра Linux, потому что он также определяет спецификации рабочего стола, библиотеки X и Qt, которые имеют мало общего с ним.[117] LSB версии 5 построен на нескольких стандартах и ​​черновиках (POSIX, SUS, X / Open, Иерархия файловой системы (FHS) и др.).[118]

Части LSB, в значительной степени относящиеся к ядру, - это Общий ABI (ГАБИ),[119] особенно Система V ABI[120][121] и Исполняемый файл и формат ссылок (ELF),[122][123] и ABI для конкретного процессора (psABI), например Базовая спецификация для X86-64.[124][125]

Стандартный ABI для того, как пользовательские программы x86_64 вызывают системные вызовы, заключается в загрузке номера системного вызова в rax регистр, а остальные параметры в rdi, RSI, rdx, r10, r8, и r9, и, наконец, поставить системный вызов Инструкция по сборке в коде.[126][127][128]

Внутриядерный API

На XDC2014 Alex Deucher из AMD анонсировал унифицированный драйвер режима ядра.[129] Проприетарный графический драйвер Linux, libGL-fglrx-glx, поделится тем же DRM инфраструктура с Меса 3D. Поскольку в ядре нет стабильной ABI, AMD приходилось постоянно адаптировать прежний двоичный blob используется Catalyst.

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

Linux предоставляет встроенные в ядро ​​API, которые манипулируют структурами данных (например, связанные списки, радиксные деревья,[133] красно-черные деревья,[134] очереди ) или выполнять стандартные процедуры (например, копирование данных из и в пространство пользователя, выделение памяти, печать строк в системный журнал и т. д.), которые оставались стабильными, по крайней мере, с версии Linux 2.6.[135][136][137]

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

  • SCSI Интерфейсы и libATA - соответственно протокол одноранговой пакетной связи для устройств хранения, подключенных к USB, SATA, SAS, Fibre Channel, FireWire, устройству ATAPI,[138] и встроенная в ядро ​​библиотека для поддержки контроллеров и устройств хоста [S] ATA.[139]
  • Менеджер прямого рендеринга (DRM) и Настройка режима ядра (KMS) - для взаимодействия с графическими процессорами и поддержки потребностей современного 3D-ускоренного видеооборудования,[140] и для настройки разрешения экрана, глубины цвета и частоты обновления[141]
  • DMA буферы (dma_buf ) - для совместного использования буферов для аппаратного прямого доступа к памяти между несколькими драйверами устройств и подсистемами[142][143][144]
  • Video4Linux - для оборудования видеозахвата
  • Расширенная звуковая архитектура Linux (ALSA) - для звуковых карт
  • Новый API - за контроллеры сетевого интерфейса
  • mac80211 - для контроллеров беспроводного сетевого интерфейса[145]

Встроенный в ядро ​​ABI

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

Технические особенности

Процессы и потоки

Linux создает процессы с помощью clone (2) или более нового clone3 (2)[147] системные вызовы. В зависимости от заданных параметров новая сущность может совместно использовать большую часть ресурсов вызывающего абонента или не использовать их вообще. Эти системные вызовы могут создавать новые объекты, начиная с новых независимых процессов (каждый из которых имеет специальный идентификатор, называемый TGID в пределах task_struct структура данных в пространстве ядра, хотя тот же идентификатор называется PID в пользовательском пространстве) в новые потоки выполнения в вызывающем процессе (с помощью параметра CLONE_THREAD). В последнем случае новое лицо владеет тем же TGID вызывающего процесса и, следовательно, имеет такой же PID в пользовательском пространстве.[148][149]

Если исполняемый файл динамически связан с разделяемыми библиотеками, интерпретатор (для объектов ELF обычно /lib/ld-linux.so.2) используется для поиска и загрузки необходимых объектов, подготовки программы к запуску, а затем ее запуска.[150]

В Собственная библиотека потоков POSIX, просто известный как NPTL,[151] предоставляет стандартный интерфейс потоков POSIX (pthreads) в пользовательское пространство[152] Каждый раз, когда создается новый поток с использованием интерфейса POSIX pthread_create (3),[153] семейство системных вызовов clone (2) также должно иметь адрес функции, к которой должен перейти новый поток. Ядро Linux предоставляет механизмы futex (7) (сокращение от «Fast user-space mutexes») для быстрой блокировки и синхронизации пользовательского пространства;[154] большинство операций выполняется в пользовательском пространстве, но может потребоваться взаимодействие с ядром с помощью системного вызова futex (2).[111]

Особую категорию ниток составляют так называемые потоки ядра. Их не следует путать с вышеупомянутыми потоками выполнения пользовательских процессов. Потоки ядра существуют только в пространстве ядра, и их единственная цель - одновременно выполнять задачи ядра.[155]

Иными словами, всякий раз, когда создается независимый процесс, системные вызовы возвращаются точно к следующей инструкции той же программы, одновременно в родитель процесс и в Дети один (т.е. одна программа, два процесса). Различные возвращаемые значения (по одному на процесс) позволяют программе знать, в каком из двух процессов она выполняется в настоящее время. Эта информация нужна программам, потому что дочерний процесс через несколько шагов после дублирования процесса обычно вызывает системный вызов execve (2) (возможно, через семейство функций оболочки exec (3) в glibC) и заменяет программу, которая в настоящее время выполняется вызывающий процесс с новой программой с вновь инициализированным стеком, кучей и (инициализированными и неинициализированными) сегментами данных.[156] Когда это будет сделано, это приведет к созданию двух процессов, которые запускают две разные программы.

В зависимости от эффективный идентификатор пользователя (euid), а на эффективный идентификатор группы (egid), процесс, запущенный с нулевыми правами пользователя (корень, системный администратор, владеющий идентификатором 0), может выполнять все (например, уничтожать все другие процессы или рекурсивно уничтожать целые файловые системы), вместо этого ненулевые пользовательские процессы не могут. Capabilities (7) делит привилегии, традиционно связанные с суперпользователем, на отдельные единицы, которые могут независимо включаться и отключаться родительским процессом или отбрасываться самим дочерним процессом.[157]

Планирование и приоритетное прерывание

Linux поддерживает различные классы и политики планирования.[158] По умолчанию ядро ​​использует механизм планировщика, называемый Полностью честный планировщик введен в версии ядра 2.6.23.[81] Внутренне этот класс планировщика по умолчанию также известен как SCHED_OTHER, но ядро ​​также содержит два POSIX-совместимых[159] классы планирования в реальном времени, названные SCHED_FIFO (в реальном времени первым пришел-первым вышел ) и SCHED_RR (в реальном времени по-круговой ), оба из которых имеют приоритет над классом по умолчанию.[158] Дополнительная политика планирования, известная как SCHED_DEADLINE, реализуя алгоритм первого крайнего срока (EDF), был добавлен в версию ядра 3.14, выпущенную 30 марта 2014 года.[160][161] SCHED_DEADLINE имеет приоритет над всеми другими классами планирования.

Linux предоставляет как вытеснение пользователей а также полный вытеснение ядра.[162] Вытеснение снижает задержка, увеличивает отзывчивость,[163] и делает Linux более подходящим для настольных компьютеров и в реальном времени Приложения.

С приоритетом пользователя планировщик ядра может заменить текущий процесс выполнением переключатель контекста к другому, который, следовательно, получает вычислительные ресурсы для работы (ЦП, память и т. д.). Это делает это в соответствии с CFS алгоритм (в частности, он использует переменную с именем vruntime для процессов сортировки), активной политике планировщика и относительным приоритетам процессов. С приоритетным приоритетом ядра ядро ​​может вытеснить само себя, когда обработчик прерывания возвращается, когда задачи ядра блокируются и когда подсистема явно вызывает функцию schedule ().

Патч ядра Linux PREEMPT_RT обеспечивает полное вытеснение критических секций, обработчиков прерываний и кодовых последовательностей "отключения прерывания".[164] Частичная интеграция исправлений Linux в реальном времени привнесла вышеупомянутые функции в основную линию ядра.[165]

Управление памятью

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

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

Поддерживаемые архитектуры

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

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

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

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

Живое исправление

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

Безопасность

Ошибки ядра представляют потенциальные проблемы безопасности. Например, они могут разрешить повышение привилегий или создать атака отказа в обслуживании векторов. За прошедшие годы были обнаружены и исправлены многочисленные ошибки, влияющие на безопасность системы.[176] Новые функции часто внедряются для повышения безопасности ядра.[177][178]

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

Linux предлагает множество механизмов для уменьшения поверхности атаки ядра и повышения безопасности, которые вместе известны как Модули безопасности Linux (LSM).[180] Они составляют Linux с повышенной безопасностью (SELinux) модуль, код которого был первоначально разработан, а затем опубликован АНБ,[181] и AppArmor[94] среди прочего. SELinux сейчас активно развивается и поддерживается GitHub.[93] SELinux и AppArmor обеспечивают поддержку политик безопасности контроля доступа, включая принудительный контроль доступа (MAC), хотя они сильно различаются по сложности и масштабу.

Еще одна функция безопасности - это Seccomp BPF (SECure Computing with Berkeley Packet Filters), который работает путем фильтрации параметров и сокращения набора системных вызовов, доступных для пользовательских приложений.[182]

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

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

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

Разработка

Сообщество разработчиков

Сообщество разработчиков ядра Linux насчитывает около 5000-6000 участников. Согласно исследованию «Состояние разработки ядра Linux в 2017 году», опубликованному Linux Foundation и касающемуся коммитов для выпусков с 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%) категории.[185]

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

Управление исходным кодом

Сообщество разработчиков Linux использует Git управлять исходный код. Пользователи Git клонируют последнюю версию дерева Торвальдса с помощью git-clone (1)[186] и обновляйте его, используя мерзавец (1).[187][188] Вклады отправляются в виде исправлений в виде текстовых сообщений на LKML (и часто также в других списках рассылки, посвященных определенным подсистемам). Исправления должны соответствовать набору правил и формальному языку, который, среди прочего, описывает, какие строки кода должны быть удалены, а какие другие должны быть добавлены в указанные файлы. Эти исправления могут обрабатываться автоматически, так что системные администраторы могут применять их для внесения только некоторых изменений в код или для постепенного обновления до следующей версии.[189] Linux распространяется также в GNU zip (gzip) и bzip2 форматы.

Отправка кода в ядро

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

Язык программирования и стиль кодирования

Linux написан в специальной Язык программирования C при поддержке GCC, компилятор, который во многих отношениях расширяет стандарт C, например, используя встроенные разделы кода написано в язык ассемблера (в синтаксисе GCC "AT&T") целевой архитектуры. С 2002 года весь кодекс должен соответствовать 21 правилу, составляющему Стиль кодирования ядра Linux.[192][193]

Набор инструментов GNU

В Коллекция компиляторов GNU (GCC или GNU cc) по умолчанию компилятор для основных исходных кодов Linux и вызывается утилитой под названием делать. Затем Ассемблер GNU (чаще называемый GAS или GNU as) выводит объектные файлы из GCC, созданного сборка код. Наконец, Линкер GNU (GNU ld) используется для создания статически связанного исполняемого файла ядра с именем vmlinux. as и ld являются частью пакета, называемого GNU binutils. Вышеупомянутые инструменты вместе известны как Набор инструментов GNU.

Совместимость с компилятором

GCC долгое время был единственным компилятором, способным правильно собирать Linux. В 2004 г. Intel утверждал, что модифицировал ядро ​​так, чтобы его компилятор C также был способен его составить.[194] В 2009 году был отмечен еще один такой успех с измененной версией 2.6.22.[195][196]

С 2010 года прилагаются усилия по созданию Linux с Лязг, альтернативный компилятор для языка C;[197] по состоянию на 12 апреля 2014 года официальное ядро ​​почти могло быть скомпилировано Clang.[198][199] Проект, посвященный этой работе, называется LLVMLinux после LLVM инфраструктура компилятора, на которой построен Clang.[200] LLVMLinux не ставит своей целью разветвление Linux или LLVM, поэтому это метапроект, состоящий из исправлений, которые в конечном итоге передаются в вышестоящие проекты. Включив компиляцию Linux с помощью Clang, разработчики могут выиграть от более короткого времени компиляции.[201]

Отладка ядра

Пример паники ядра Linux

Ошибки Linux может быть очень сложно обнаружить и исправить, во-первых, из-за взаимодействия ядра с пользовательским пространством и оборудованием, а во-вторых, потому что они могут быть вызваны более широким числом причин, чем те, которые могут повлиять на пользовательские программы. Несколько примеров основных причин - семантические ошибки в коде, неправильное использование примитивов синхронизации и неправильное управление оборудованием.[202]

Сообщение о нефатальной ошибке в ядре называется "ой "; такие отклонения от правильного поведения ядра Linux могут позволить продолжить работу с пониженной надежностью.[203]

О критической и неустранимой ошибке сообщается через "паника() "функция. Она печатает сообщение, а затем останавливает ядро.[204]

Один из наиболее распространенных методов, используемых для обнаружения ошибок в коде, - это отладка путем печати. Для этой цели Linux предоставляет встроенный в ядро ​​API, называемый printk () который хранит сообщения в кольцевом буфере. В системный журнал (2) системный вызов используется для чтения и / или очистки кольцевого буфера сообщений ядра и для установки максимального уровень журнала сообщений, отправляемых на консоль (т. е. одно из восьми КЕРН_ * параметры printk (), которые говорят о серьезности сообщаемого состояния); обычно вызывается через оболочку glibC klogctl (3).[205] Сообщения ядра также экспортируются в пользовательскую среду через / dev / kmsg интерфейс[206] (например., systemd-journald[207][208] читает этот интерфейс и по умолчанию добавляет сообщения в / var / журнал / журнал).

Другой фундаментальный метод отладки работающего ядра - трассировка. В ftrace механизм - это внутренний трассировщик Linux; он используется для мониторинга и отладки Linux во время выполнения, а также может анализировать задержки в пространстве пользователя из-за неправильного поведения ядра.[209][210][211] Более того, ftrace позволяет пользователям отслеживать Linux во время загрузки.[212]

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

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

Модель развития

Проект ядра Linux интегрирует новый код на постоянной основе. Программное обеспечение, внесенное в проект, должно работать и компилировать без ошибок. Для каждой подсистемы ядра есть специалист по сопровождению, который отвечает за проверку исправлений на соответствие стандартам кода ядра и поддерживает очередь исправлений, которые могут быть отправлены Линусу Торвальдсу в течение периода слияния в несколько недель. Патчи добавлены Торвальдсом в исходный код предыдущего стабильного выпуска ядра Linux, создавая -rc релиз-кандидат для следующего стабильного ядра. После закрытия окна слияния принимаются только исправления нового кода в разрабатываемой версии. В -rc разрабатываемый выпуск ядра проходит регрессионные тесты и как только Торвальдс и специалисты по обслуживанию подсистемы ядра признают его стабильным, выпускается новое ядро ​​Linux, и процесс разработки начинается заново.[216]

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

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

Вилки Linux

An iPod загрузка iPodLinux

Есть определенные сообщества, которые разрабатывают ядра на основе официального Linux. Некоторые интересные фрагменты кода из этих вилки (т. е. сленговый термин, означающий «производные проекты»), которые включают Linux-libre, Вычислительный узел Linux, ЧЕРНИЛА, L4Linux, RTLinux, и Пользовательский режим Linux (UML) были объединены в основную ветку.[221] Некоторые операционные системы, разработанные для мобильных телефонов, изначально использовали сильно модифицированные версии Linux, в том числе Google. Android, ОС Firefox, HP WebOS, Nokia Maemo и Джолла ОС Sailfish. В 2010 году сообщество Linux раскритиковало Google за эффективное создание собственного дерева ядра:[222][223]

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

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

Конфликты сообщества разработчиков

Между разработчиками ядра Linux было несколько заметных конфликтов. Примеры таких конфликтов:

  • В июле 2007 г. Кон Коливас объявил, что прекратит разработку ядра Linux.[226][227]
  • В июле 2009 г. Алан Кокс бросил свою роль TTY сопровождающий уровня после несогласия с Линус Торвальдс.[228]
  • В декабре 2010 г. между специалистом по сопровождению SCSI Linux Джеймсом Боттомли и специалистом по сопровождению SCST Владиславом Болховитиным состоялась дискуссия о том, какой целевой стек SCSI следует включить в ядро ​​Linux.[229] Это расстроило некоторых пользователей Linux.[230]
  • В июне 2012 года Торвальдс ясно дал понять, что не согласен с тем, что NVIDIA выпускает свои драйверы как закрытые.[231]
  • В апреле 2014 года Торвальдс запретил Кей Сиверс от отправки исправлений в ядро ​​Linux за неспособность справиться с ошибки это вызвало systemd отрицательно взаимодействовать с ядром.[232]
  • В октябре 2014 г. Леннарт Поеттеринг обвинил Торвальдса в терпимости к грубому стилю обсуждения в списках рассылки, связанных с ядром Linux, и в плохом образце для подражания.[233]
  • В марте 2015 года Кристоф Хеллвиг подал иск против VMware за нарушение авторских прав на ядро ​​Linux.[234] Линус Торвальдс дал понять, что не согласен с этой и аналогичными инициативами, назвав адвокатов гнойной болезнью.[235]

Выдающиеся разработчики ядра Linux осознавали важность предотвращения конфликтов между разработчиками.[236] Долгое время не было кодекса поведения разработчиков ядра из-за возражений со стороны Линус Торвальдс.[237] Однако ядро ​​Linux Кодекс конфликта был представлен 8 марта 2015 года.[238] Он был заменен 16 сентября 2018 года новым Нормы поведения на основе Соглашение для авторов. Это совпало с публичными извинениями Линуса и коротким перерывом в разработке ядра.[239][240] 30 ноября 2018 г. в соответствии с Нормы поведения, Яркко Саккинен из Intel разослал патчи, заменяющие слова «fuck», появляющиеся в комментариях к исходному коду, подходящими версиями, сосредоточенными на слове «hug».[241]

Кодовая база

По состоянию на 2020 год, версия 5.9 ядра Linux содержала около 27,8 миллионов строк кода, примерно 14% кода - это часть «ядра» (каталоги arch, kernel и mm), а 60% - драйверы.

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

Ориентировочная стоимость перепланировки

Затраты на переделку ядра Linux

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

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

По состоянию на 7 марта 2011 г., используя тогдашний LOC (строки кода) ядра Linux 2.6.x и цифры заработной платы с расчетами Дэвида А. Уиллера, чтобы переработать ядро ​​Linux, по мере того, как оно становится все больше, обойдется примерно в 3 миллиарда долларов (около 2,2 миллиарда евро). Обновленный расчет по состоянию на 26 сентября 2018 г., используя текущие 20 088 609 LOC (строк кода) для ядра Linux 4.14.14 и текущую среднюю зарплату программиста в США в 75 506 долларов, показывают, что переписать существующий код будет стоить примерно 14 725 449 000 долларов (11 191 341 000 фунтов стерлингов).[249]

Сопровождение и долгосрочная поддержка

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

Последняя версия ядра и более старые версии ядра обслуживаются отдельно. Самыми последними выпусками ядра руководил Линус Торвальдс.[250] Текущие версии выпущены Грег Кроа-Хартман.[251]

Сообщество разработчиков ядра Linux поддерживает стабильное ядро, применяя исправления для программные ошибки которые были обнаружены во время разработки следующего стабильного ядра. Поэтому на сайте www.kernel.org всегда будут указаны два стабильных ядра. Следующее стабильное ядро ​​Linux теперь выпущено только через 8–12 недель. Поэтому разработчики ядра Linux обозначили некоторые стабильные выпуски ядра как долгосрочный, эти долгосрочная поддержка Ядра Linux обновляются с исправлениями ошибок в течение двух или более лет.[252] В ноябре 2019 года существовало пять долгосрочных ядер Linux: 4.19.84, 4.14.154, 4.9.201, 4.4.201 и 3.16.76.[253] Полный список релизов находится на История версий ядра Linux.

Связь с дистрибутивами Linux

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

Правовые аспекты

Условия лицензирования GPLv2

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

Ядро Linux явно лицензируется только в соответствии с версией 2 GPL,[23] не предлагая лицензиату выбрать «любую более позднюю версию», которая является распространенным расширением GPL. Официальная ветвь git Torvalds содержит документацию, объясняющую процесс разработки ядра людям, которые хотят работать с сообществом и вносить свой код; в нем четко сказано, что «[Любые] материалы, не подпадающие под действие [GPLv2]-совместимой лицензии, не будут приняты в ядро».[105]

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

В сентябре 2006 года опрос 29 ключевых программистов ядра показал, что 28 предпочитают GPLv2 нынешнему проекту GPLv3. Торвальдс прокомментировал: «Я думаю, что некоторые посторонние ... считали, что я лично был просто странным человеком, потому что публично я не был большим поклонником GPLv3».[260] Эта группа известных разработчиков ядра, включая Торвальдса, Грег Кроа-Хартман и Эндрю Мортон, прокомментировали в СМИ свои возражения против GPLv3.[261] Они сослались на статьи, касающиеся DRM /тивоизация, патенты, «дополнительные ограничения» и предупредили Балканизация «Вселенной с открытым исходным кодом» по GPLv3.[261][262] Линус Торвальдс, который решил не принимать GPLv3 для ядра Linux, повторил свою критику даже спустя годы.[263]

Загружаемые модули ядра

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

В соответствии с лицензионными правилами LKM, использующие только общедоступное подмножество интерфейсов ядра.[130][131] являются производными произведениями, поэтому Linux дает системным администраторам механизмы для загрузки двоичных объектов вне дерева в адресное пространство ядра.[5]

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

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

Бинарные капли прошивки

Официальное ядро, то есть ветвь Linus git в репозитории kernel.org, не содержит какого-либо проприетарного кода;[23][5] однако Linux может искать в файловых системах проприетарные прошивки, драйверы и другие исполняемые модули (вместе известные как "двоичные капли "), затем он может загрузить и связать их с пространством ядра.[268] Когда в Linux загружаются проприетарные модули, ядро ​​отмечает себя как «испорченное».[269] и поэтому отчеты об ошибках из испорченных ядер часто игнорируются разработчиками.

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

Товарный знак

Linux является зарегистрированным товарный знак из Линус Торвальдс в США, Евросоюзе и некоторых других странах.[271][272] Юридическая битва за товарный знак началась в 1996 году, когда Уильям Делла Кроче, юрист, никогда не участвовавший в разработке Linux, начал запрашивать лицензионные сборы за использование этого слова Linux. После того, как было доказано, что это слово широко использовалось задолго до того, как Делла Кроче заявила о своем первом использовании, торговая марка была передана Торвальдсу.[273][274][275]

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

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

  1. ^ «Логотипы и талисманы Linux». Linux Online. 2008. Архивировано с оригинал 15 августа 2010 г.. Получено 11 августа 2009.
  2. ^ Проект ядра Linux с открытым исходным кодом на странице Open Hub: Languages
  3. ^ Кроа-Хартман, Грег (24 ноября 2020 г.). «Linux 5.9.11». LKML (Список рассылки). Получено 24 ноября 2020.
  4. ^ Торвальдс, Линус (23 ноября 2020 г.). «Linux 5.10-rc5». LKML (Список рассылки). Получено 23 ноября 2020.
  5. ^ а б c d е «Правила лицензирования ядра Linux - Документация по ядру Linux». www.kernel.org. Получено 6 января 2020.
  6. ^ Таненбаум, Эндрю; Бос, Герберт (2015). Современные операционные системы. Соединенные Штаты Америки: Пирсон. п. 722. ISBN  9781292061429. OCLC  892574803.
  7. ^ С любовью, Роберт (2010). Разработка ядра Linux. Эддисон-Уэсли. п. 4. ISBN  978-0-672-32946-3. OCLC  268788260.
  8. ^ С любовью, Роберт (2010). Разработка ядра Linux. Эддисон-Уэсли. п. 338. ISBN  978-0-672-32946-3. OCLC  268788260.
  9. ^ "ПРОЧТИ МЕНЯ". git.kernel.org.
  10. ^ Ричардсон, Марджори (1 ноября 1999 г.). «Интервью: Линус Торвальдс». Linux журнал. Получено 20 августа 2009.
  11. ^ Уильямс, Сэм (март 2002). «Глава 9: Стандартная общественная лицензия GNU». Free as in Freedom: крестовый поход Ричарда Столлмана за свободные программы. О'Рейли. ISBN  0-596-00287-4. Получено 12 ноября 2010.
  12. ^ Unix System Laboratories против Berkeley Software, 832 F. Supp. 790 (D.N.J. 1993).
  13. ^ а б «ТОП500 суперкомпьютерных сайтов: Семейство операционных систем / Linux». Top500.org. Получено 5 октября 2019.
  14. ^ а б c «Система сборки ядра - документация по ядру Linux». www.kernel.org. Получено 17 июля 2020.
  15. ^ а б c «Kconfig make config - Документация ядра Linux». www.kernel.org. Получено 13 сентября 2020.
  16. ^ а б "KernelBuild - новички в ядре Linux". kernelnewbies.org. Получено 13 сентября 2020.
  17. ^ а б "Интерфейс Sysctl". www.linux.it. Получено 13 сентября 2020.
  18. ^ а б "sysctl (8) - страница руководства Linux". man7.org. Получено 13 сентября 2020.
  19. ^ а б "procfs (5) - страница руководства Linux". man7.org. Получено 13 сентября 2020.
  20. ^ С любовью, Роберт (2010). Разработка ядра Linux. Эддисон Уэсли. п. 18. ISBN  978-0-672-32946-3. OCLC  268788260.
  21. ^ «Расширения C (с использованием коллекции компиляторов GNU (GCC))». gcc.gnu.org. Получено 13 ноября 2020.
  22. ^ С любовью, Роберт (2010). Разработка ядра Linux. США: Аддисон Уэсли. С. 379–380. ISBN  9780672329463.
  23. ^ а б c d «Исходный код Linux: КОПИРОВАНИЕ (v5.4.8) - Bootlin». elixir.bootlin.com. Получено 6 января 2020.
  24. ^ а б Торвальдс, Линус Бенедикт (26 августа 1991 г.). "Что бы вы хотели видеть в minix больше всего?". Группа новостейcomp.os.minix. Usenet:  [email protected].
  25. ^ а б Валлийский, Мэтт; Дальхаймер, Матиас Калле; Кауфман, Лар (1999). «1». Запуск Linux (3-е изд.). Севастополь, Калифорния: O'Reilly Media, Inc. ISBN  1-56592-976-4. OCLC  50638246.
  26. ^ а б "Бесплатные исходные коды ядра типа minix для 386-AT - Группы Google". groups.google.com. 5 октября 1991 г.. Получено 19 марта 2020.
  27. ^ а б c Кристин Бреснахан и Ричард Блюм (2016). LPIC-2: Учебное пособие по сертификации профессионального института Linux: экзамен 201 и экзамен 202. Джон Вили и сыновья. п. 107. ISBN  9781119150794.
  28. ^ а б Торвальдс, Линус. «Примечания к выпуску Linux v0.12». Архивы ядра Linux. Получено 21 февраля 2007.
  29. ^ Фред Хантельманн (2016). Руководство по началу работы с LINUX: самостоятельное введение. Springer Science & Business Media. п. 1. ISBN  9783642607493.
  30. ^ а б c Фред Хантельманн (2016). Руководство по началу работы с LINUX: самостоятельное введение. Springer Science & Business Media. п. 16. ISBN  9783642607493.
  31. ^ Саммерс, Дэвид В. (19 января 1992 г.). «Проблемы с перегородками». Группа новостейalt.os.linux. Usenet:  [email protected]. Получено 7 января 2007.
  32. ^ Клегг, Алан Б. (31 марта 1992 г.). "Это здесь!". Группа новостейcomp.os.linux. Usenet:  [email protected]. Получено 7 января 2007.
  33. ^ "Приложение A: Дебаты Таненбаума-Торвальдса". Открытые источники: голоса революции открытого исходного кода. О'Рейли. 1999. ISBN  1-56592-582-3. Получено 22 ноября 2006.
  34. ^ Таненбаум, Энди (29 января 1992 г.). «LINUX устарел». Группа новостейcomp.os.minix. Usenet:  [email protected]. Получено 10 мая 2006.
  35. ^ Таненбаум, Энди (12 мая 2006 г.). "Дебаты Таненбаума-Торвальдса: Часть II". VU University Amsterdam. Получено 6 января 2007.
  36. ^ Ноябрь 2012, Дэвид Хейворд 22. «История Linux: как время сформировало пингвина». TechRadar. Получено 19 марта 2020.
  37. ^ Ноябрь 2012, Дэвид Хейворд 22. «История Linux: как время сформировало пингвина». TechRadar. Получено 26 марта 2020.
  38. ^ Любовь, Роберт (Роберт М.) (2010). Разработка ядра Linux (3-е изд.). Река Аппер Сэдл, Нью-Джерси: Аддисон-Уэсли. п. 9. ISBN  978-0-672-32946-3. OCLC  268788260.
  39. ^ а б «Как работает процесс разработки - документация ядра Linux». www.kernel.org. Получено 26 марта 2020.
  40. ^ «Выпуск исходного кода ядра 1.2». Получено 27 октября 2008.
  41. ^ а б c Кристин Бреснахан и Ричард Блюм (2016). LPIC-2: Учебное пособие по сертификации профессионального института Linux: экзамен 201 и экзамен 202. Джон Вили и сыновья. п. 108. ISBN  9781119150794.
  42. ^ Торвальдс, Линус (9 июня 1996 г.). «Linux 2.0 действительно выпущен». LKML (Список рассылки). Получено 8 марта 2015.
  43. ^ Торвальдс, Линус (20 января 1999 г.). «2.2.0-финал». LKML (Список рассылки). Получено 8 марта 2015.
  44. ^ «Чудесный мир Linux 2.2». 26 января 1999 г.. Получено 27 октября 2008.
  45. ^ "Linux / 390 Наблюдения и примечания". linuxvm.org. Получено 29 марта 2020.
  46. ^ Торвальдс, Линус (4 января 2001 г.). "И о, кстати". LKML (Список рассылки). Получено 8 марта 2015.
  47. ^ «Чудесный мир Linux 2.4». Архивировано из оригинал 17 марта 2005 г.. Получено 27 октября 2008.
  48. ^ Торвальдс, Линус (17 декабря 2003 г.). «Linux 2.6.0». LKML (Список рассылки). Получено 28 февраля 2015.
  49. ^ "proc (5) - страница руководства Linux" (см. / proc / sys / kernel / pid_max).
  50. ^ "btrfs Wiki". btrfs.wiki.kernel.org. Получено 17 июля 2020.
  51. ^ Фред Хантельманн (2016). Руководство по началу работы с LINUX: самостоятельное введение. Springer Science & Business Media. С. 1–2. ISBN  9783642607493.
  52. ^ Кроа-Хартман, Грег (3 августа 2006 г.). «Адриан Банк теперь занимает стабильную ветку 2.6.16». LKML (Список рассылки). Получено 21 февраля 2015.
  53. ^ Ротвелл, Стивен (12 февраля 2008 г.). «Анонс: Linux-next (Или мечта Эндрю :-))». LKML (Список рассылки). Получено 30 октября 2010.
  54. ^ Корбет, Джонатан (21 октября, 2010 г.). "linux-next и процесс управления исправлениями". LWN.net. Eklektix, Inc. Получено 30 октября 2010.
  55. ^ "Архивы ядра Linux". Kernel.org. Получено 22 января 2014.
  56. ^ Список рассылки ядра Linux (17 июня 2005 г.). «Linux 2.6.12». git-коммит-голова (Список рассылки).
  57. ^ "Индекс /pub/linux/kernel/v2.6". Kernel.org. Получено 2 марта 2014.
  58. ^ "Добавьте личность, чтобы сообщить номера версий 2.6.x [LWN.net]". lwn.net.
  59. ^ а б Торвальдс, Линус (21 июля 2011 г.). «Выпуск Linux 3.0». Список рассылки ядра Linux. Получено 16 мая 2013.
  60. ^ Торвальдс, Линус (30 мая 2011 г.). «Linux 3.0-rc1». LKML (Список рассылки). Архивировано из оригинал 31 мая 2011 г.. Получено 1 июля 2013.
  61. ^ Воан-Николс, Стивен Дж. (13 декабря 2012 г.). «Прощай, 386: Linux откажется от поддержки чипов i386 в следующем крупном выпуске». ZDNet. CBS Interactive. Получено 6 февраля 2013.
  62. ^ Фингас, Джон (15 декабря 2012 г.). «Linux откажется от поддержки i386 в ядре 3.8, заставит нас обновить нашу установку Doom». Engadget. AOL. Получено 22 марта 2015.
  63. ^ Воан-Николс, Стивен Дж. (11 декабря 2012 г.). «Linux 3.7 приходит, разработчики ARM радуются». ZDNet. CBS Interactive. Получено 6 февраля 2013.
  64. ^ Торвальдс, Линус (2 сентября 2013 г.). «Linux 3.11». LKML (Список рассылки). Получено 3 сентября 2013.
  65. ^ «Linux 3.11». kernelnewbies.org. 2 сентября 2013 г.. Получено 21 января 2014.
  66. ^ Торвальдс, Линус (12 апреля 2015 г.). «Выпущен Linux 4.0». LKML (Список рассылки). Получено 12 апреля 2015.
  67. ^ «Linux Foundation выпускает отчет о разработке Linux». Linux Foundation. 18 февраля 2015. Архивировано с оригинал 19 июля 2016 г.. Получено 20 февраля 2015.
  68. ^ Майкл Ларабель (23 июня 2014 г.). «Ядро Linux, насчитывающее 19,5 миллионов строк кода, продолжает расти». Фороникс. Получено 23 июн 2015.
  69. ^ Корбет, Джонатан (3 августа 2020 г.). "Немного статистики из цикла ядра 5.8". LWN - Еженедельные новости Linux. Получено 11 августа 2020.
  70. ^ «Опрос разработчиков Stack Overflow 2019 - самые популярные технологии». Переполнение стека. Получено 17 марта 2020.
  71. ^ «Опрос разработчиков Stack Overflow 2019 - среды и инструменты разработки». Переполнение стека. Получено 17 марта 2020.
  72. ^ «Статистика использования и рыночная доля операционных систем для веб-сайтов, март 2020». w3techs.com. Получено 17 марта 2020.
  73. ^ «Статистика использования и рыночная доля Unix для веб-сайтов, март 2020». w3techs.com. Получено 17 марта 2020.
  74. ^ «ТОП500 суперкомпьютерных сайтов: Семейство операционных систем / Linux». Top500.org. Получено 5 октября 2019.
  75. ^ «Gartner заявляет, что продажи планшетов будут составлять менее 10 процентов от всех устройств в 2014 году» (Пресс-релиз). Эгхэм, Великобритания: Gartner. 15 октября 2014 г.. Получено 19 октября 2014.
  76. ^ Лунден, Ингрид (15 октября 2014 г.). «Рост продаж планшетов в 2014 году резко упал, поскольку смартфоны Android продолжают расти: Gartner». TechCrunch. AOL. Получено 23 октября 2014.
  77. ^ «Мировые поставки ПК превысили прогноз с небольшим улучшением потребительского спроса, в то время как Apple переместилась на 5-е место, согласно IDC» (Пресс-релиз). Фрамингем, Массачусетс: IDC. 8 октября 2014 г. Архивировано с оригинал 11 октября 2014 г.. Получено 19 октября 2014.
  78. ^ "sched (7) - страница руководства Linux". man7.org. Получено 27 июля 2020.
  79. ^ "FAQ: приоритетное прерывание". kernelnewbies.org. 22 августа 2009 г.. Получено 7 мая 2015.
  80. ^ а б Джонатан Корбет (24 февраля 2003 г.). «Перенос драйверов: вытесняемое ядро». LWN.net. Получено 7 мая 2015.
  81. ^ а б Мольнар, Инго (13 апреля 2007 г.). «[patch] Ядро модульного планировщика и полностью справедливый планировщик [CFS]». LKML (Список рассылки). Получено 30 марта 2020.
  82. ^ "Полностью честный планировщик | Linux Journal". www.linuxjournal.com. Получено 30 марта 2020.
  83. ^ "ioctl (2) - страница руководства Linux". man7.org. Получено 11 августа 2020.
  84. ^ "aio (7) - страница руководства Linux". man7.org. Получено 11 августа 2020.
  85. ^ "io_setup (2) - страница руководства Linux". man7.org. Получено 11 августа 2020.
  86. ^ «КВМ». www.linux-kvm.org. Получено 29 марта 2020.
  87. ^ "TechComparison - Linux Virtualization Wiki". virt.kernelnewbies.org. Получено 29 марта 2020.
  88. ^ "Virtualization_support_through_KVM в Linux_2_6_20 - новички в ядре Linux". kernelnewbies.org. Получено 29 марта 2020.
  89. ^ Coekaerts, Wim. «Основная линия Linux содержит все биты кода Xen для поддержки Dom0 и DomU». blogs.oracle.com. Получено 29 марта 2020.
  90. ^ «Xen отмечает полную поддержку Dom0 и DomU в Linux 3.0 - blog.xen.org». 7 июня 2011. Архивировано с оригинал 7 июня 2011 г.. Получено 29 марта 2020.
  91. ^ Вилк, Конрад Жешутек (31 января 2014 г.). «Linux 3.14 и ПВХ». Xen Project. Получено 29 марта 2020.
  92. ^ «Введение в виртуализацию Xen | Руководство по виртуализации | openSUSE Leap 15.2». doc.opensuse.org. Получено 29 сентября 2020.
  93. ^ а б «Проект SELinux». GitHub. Получено 10 января 2020.
  94. ^ а б «AppArmor - документация ядра Linux». www.kernel.org. Получено 10 января 2020.
  95. ^ Джейк Эдж (25 ноября 2008 г.). «Символьные устройства в пространстве пользователя». LWN.net. Получено 7 мая 2015.
  96. ^ Джонатан Корбет (2 мая 2007 г.). "UIO: драйверы пользовательского пространства". LWN.net. Получено 7 мая 2015.
  97. ^ а б c "stable-api-nonsense - дерево исходных текстов ядра Linux". git.kernel.org. Получено 18 апреля 2020.
  98. ^ Горман, Мел (15 февраля 2004 г.). Общие сведения о диспетчере виртуальной памяти Linux (PDF). Прентис Холл. п. 26. ISBN  0-13-145348-3.
  99. ^ Грег Унгерер. "Объявление uClinux mainline". Архивировано из оригинал 31 октября 2007 г.. Получено 15 января 2008.
  100. ^ а б Нгуен, Бинь (30 июля 2004 г.). «Иерархия файловой системы Linux: Глава 1. Иерархия файловой системы Linux». Проект документации Linux. Получено 28 ноября 2012.
  101. ^ «Версия ядра Linux 5.x - Документация по ядру Linux». www.kernel.org. Получено 4 января 2020.
  102. ^ "READMEABIDocumentation - kernel / git / torvalds / linux.git - дерево исходных текстов ядра Linux". git.kernel.org. Получено 18 апреля 2020.
  103. ^ "syscallsstableABIDocumentation - kernel / git / torvalds / linux.git - дерево исходных текстов ядра Linux". git.kernel.org. Получено 18 апреля 2020.
  104. ^ "stable-api-nonsense - дерево исходных текстов ядра Linux". git.kernel.org. Получено 18 апреля 2020.
  105. ^ а б «1.Intro.rst - Документация / процесс / 1.Intro.rst - Исходный код Linux (v5.8) - Bootlin». elixir.bootlin.com. Получено 8 августа 2020.
  106. ^ а б "системные вызовы". человек7.
  107. ^ "intro (2) - страница руководства Linux". man7.org. Получено 16 июля 2020.
  108. ^ "клон". man7.org. Получено 28 января 2020.
  109. ^ "feature_test_macros". man7.org. Получено 28 января 2020.
  110. ^ "vdso (7) - страница руководства Linux". man7.org. Получено 2 февраля 2020.
  111. ^ а б "futex (2) - страница руководства Linux". man7.org. Получено 2 февраля 2020.
  112. ^ "syscall (2) - страница руководства Linux". man7.org. Получено 2 февраля 2020.
  113. ^ "sysfs (5) - страница руководства Linux". man7.org. Получено 6 января 2020.
  114. ^ "Правила доступа к информации в sysfs - Документация ядра Linux". www.kernel.org. Получено 6 января 2020.
  115. ^ «Ссылки на спецификации Linux Foundation». refspecs.linuxbase.org. Получено 3 февраля 2020.
  116. ^ "Технические характеристики LSB". refspecs.linuxbase.org. Получено 3 февраля 2020.
  117. ^ «Стандартная базовая спецификация рабочего стола Linux, общая часть». refspecs.linuxbase.org. Получено 3 февраля 2020.
  118. ^ "Нормативные ссылки". refspecs.linuxfoundation.org. Получено 3 февраля 2020.
  119. ^ «Стандартная базовая базовая спецификация ядра Linux, общая часть». refspecs.linuxfoundation.org. Получено 3 февраля 2020.
  120. ^ «Двоичный интерфейс приложения System V - версия 4.1» (PDF). www.sco.com.
  121. ^ "Xinuos Inc. | Разработчики | Габи | 2003-12-17 | Двоичный интерфейс приложения System V - ПРОЕКТ". www.sco.com. Получено 3 февраля 2020.
  122. ^ «Исполняемый и связывающий формат (ELF)». refspecs.linuxbase.org. Получено 3 февраля 2020.
  123. ^ "elf (5) - страница руководства Linux". man7.org. Получено 18 ноября 2020.
  124. ^ «Стандартная базовая спецификация ядра Linux для X86-64». refspecs.linuxbase.org. Получено 3 февраля 2020.
  125. ^ «Двоичный интерфейс приложения System V - ПРОЕКТ». refspecs.linuxbase.org. Получено 3 февраля 2020.
  126. ^ Сейфарт, Рэй (2012). Введение в 64-битное программирование на языке ассемблера Intel для Linux. п. 170. ISBN  9781478119203.
  127. ^ «Анатомия системного вызова, часть 1 [LWN.net]». lwn.net. Получено 16 июля 2020.
  128. ^ «Анатомия системного вызова, часть 2 [LWN.net]». lwn.net. Получено 16 июля 2020.
  129. ^ Дюшер, Алекс (7 октября 2014 г.). «Новый унифицированный драйвер с открытым исходным кодом AMD». Фонд X.Org. Получено 21 января 2015.
  130. ^ а б «Символы - ненадежное руководство по взлому ядра Linux - Документация по ядру Linux». www.kernel.org. Получено 8 февраля 2020.
  131. ^ а б «Экспортированные символы и внутренний API [LWN.net]». lwn.net. Получено 15 марта 2020.
  132. ^ а б "Не экспортируется kallsyms_lookup_name () [LWN.net]". lwn.net. Получено 15 марта 2020.
  133. ^ "Деревья I: корневые деревья [LWN.net]". lwn.net. Получено 13 ноября 2020.
  134. ^ "Деревья II: красно-черные деревья [LWN.net]". lwn.net. Получено 13 ноября 2020.
  135. ^ «Ненадежное руководство по взлому ядра Linux». www.kernel.org (1-е изд.). 2005 г.. Получено 15 марта 2020.
  136. ^ «Ненадежное руководство по взлому ядра Linux - документация ядра Linux». www.kernel.org. Получено 15 марта 2020.
  137. ^ «Ненадежное руководство по блокировке - документация ядра Linux». www.kernel.org. Получено 15 марта 2020.
  138. ^ «Руководство по интерфейсам SCSI - документация ядра Linux». www.kernel.org. Получено 11 июн 2020.
  139. ^ "Руководство разработчика libATA - Документация по ядру Linux". www.kernel.org. Получено 11 июн 2020.
  140. ^ «Внутреннее устройство DRM - Документация ядра Linux». www.kernel.org. Получено 11 июн 2020.
  141. ^ «Настройка режима ядра (KMS) - документация ядра Linux». www.kernel.org. Получено 11 июн 2020.
  142. ^ «Внедрить механизм совместного использования буфера DMA [LWN.net]». lwn.net. Получено 11 июн 2020.
  143. ^ «Совместное использование буферов CPU и GPU в Linux *». 01.org. 12 мая 2016. Получено 11 июн 2020.
  144. ^ «Совместное использование буфера и синхронизация - документация ядра Linux». www.kernel.org. Получено 11 июн 2020.
  145. ^ "О mac80211". Linux Kernel Organization, Inc. Получено 8 июн 2014.
  146. ^ «Отчет об изменениях ABI в ядре Linux». Лаборатория ABI Андрея Пономаренко. 17 марта 2016 г.
  147. ^ "[PATCH v3 1/2] fork: добавить clone3 [LWN.net]". lwn.net. Получено 16 июля 2020.
  148. ^ "clone (2) - страница руководства Linux". man7.org. Получено 15 июля 2020.
  149. ^ "clone3 (), fchmodat4 () и fsinfo () [LWN.net]". lwn.net. Получено 15 июля 2020.
  150. ^ "ld-linux.so (8) - страница руководства Linux". man7.org. Получено 18 ноября 2020.
  151. ^ "nptl (7) - страница руководства Linux". man7.org. Получено 25 июля 2020.
  152. ^ "pthreads (7) - страница руководства Linux". man7.org. Получено 25 июля 2020.
  153. ^ "pthread_create (3) - страница руководства Linux". man7.org. Получено 25 июля 2020.
  154. ^ "futex (7) - страница руководства Linux". man7.org. Получено 25 июля 2020.
  155. ^ «Упрощение потоков ядра [LWN.net]». lwn.net. Получено 15 августа 2020.
  156. ^ "execve (2) - страница руководства Linux". www.man7.org. Получено 17 июля 2020.
  157. ^ "возможности (7) - страница руководства Linux". man7.org. Получено 2 августа 2020.
  158. ^ а б Бар, Моше (1 апреля 2000 г.). «Планировщик Linux». Linux журнал. Belltown Media, Inc. Получено 14 апреля 2012.
  159. ^ «Стандарт IEEE для информационных технологий - интерфейс переносимой операционной системы, POSIX.1b, расширения реального времени (IEEE Std 1003.1b-1993)».
  160. ^ Ларабель, Майкл (24 января 2014 г.). «Ядро Linux 3.14 уже имеет много интересных функций». Фороникс. Получено 3 февраля 2014.
  161. ^ «Ядро Linux 3.14, раздел 1.1. Класс планирования крайнего срока для лучшего планирования в реальном времени». kernelnewbies.org. 30 марта 2014 г.. Получено 2 апреля 2014.
  162. ^ С любовью, Роберт (2010). «4». Разработка ядра Linux (3-е изд.). Эддисон Уэсли. С. 62–63. ISBN  9780672329463.
  163. ^ «Снижение латентности в Linux: знакомство с вытесняемым ядром | Linux Journal». www.linuxjournal.com. Получено 17 августа 2020.
  164. ^ Маккенни, Пол (10 августа 2005 г.). "Обзор приоритетного обслуживания в реальном времени". LWN.net. Получено 5 февраля 2012.
  165. ^ «Проект OSADL: Linux в реальном времени». OSADL. Получено 5 февраля 2012.
  166. ^ С любовью, Роберт (2010). Разработка ядра Linux. Эддисон Уэсли. п. 20. ISBN  9780672329463.
  167. ^ «Схема стека хранилища Linux». www.thomas-krenn.com. Получено 19 марта 2020.
  168. ^ а б c Торвальдс, Линус (Январь 1999 г.). "Linux Edge". Открытые источники: голоса революции открытого исходного кода. О'Рейли. ISBN  1-56592-582-3. Получено 13 октября 2013.
  169. ^ «Перенос Linux на DEC Alpha: ядро ​​и оболочка».
  170. ^ «Linux on Alpha: стратегический выбор».
  171. ^ «Кластер Авалон | ТОП500 суперкомпьютерных сайтов». www.top500.org. Получено 5 октября 2019.
  172. ^ Ван, Дэвид (6 мая 2010 г.). «Android теперь работает на iPhone 3G». TechHive. IDG. Получено 11 июля 2010.
  173. ^ «Ядро Linux 4.0, Раздел 1.2. Исправления в реальном времени». kernelnewbies.org. 26 апреля 2015 г.. Получено 27 апреля 2015.
  174. ^ Джонатан Корбет (25 февраля 2015 г.). «Грубый патч для живого исправления». LWN.net. Получено 27 апреля 2015.
  175. ^ "kernel / git / torvalds / linux.git: получить живую инфраструктуру исправлений из Jiri Kosina (дерево исходных текстов ядра Linux)". kernel.org. 11 февраля 2015 г.. Получено 27 апреля 2015.
  176. ^ Mookhey, K. K .; Бургате, Нилеш (1 июля 2005 г.). Linux: функции безопасности, аудита и контроля. СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ: ISACA. п. 14. ISBN  1-893209-78-4. Получено 31 декабря 2010.
  177. ^ Хэтч, Брайан (15 июля 2008 г.). Взлом открытого Linux: секреты безопасности Linux и решения. McGraw-Hill Osborne Media. п. 524. ISBN  978-0-07-226257-5. Получено 31 декабря 2010.
  178. ^ Джегер, Трент (7 октября 2008 г.). Безопасность операционной системы. Издатели Морган и Клейпул. п. 122. ISBN  978-1-59829-212-1. Получено 31 декабря 2010.
  179. ^ "CAP_PERFMON - и новые возможности в целом [LWN.net]". lwn.net. Получено 2 августа 2020.
  180. ^ «Использование модуля безопасности Linux - документация ядра Linux». www.kernel.org. Получено 10 января 2020.
  181. ^ "Агентство национальной безопасности | Центральная служба безопасности> Чем мы занимаемся> Исследования> SE Linux> Вопросы и ответы по SE Linux". www.nsa.gov. Получено 10 января 2020.
  182. ^ «Seccomp BPF (SECure Computing with Filters) - Документация ядра Linux». www.kernel.org. Получено 10 января 2020.
  183. ^ Эндрюс, Джереми (16 июля 2008 г.). «Ошибки безопасности и полное раскрытие информации». KernelTrap. Архивировано из оригинал 19 июля 2008 г.. Получено 31 декабря 2010.
  184. ^ Шпенглер, Брэд (16 июля 2008 г.). «Неофициальная политика сокрытия безопасности Linux». Полное раскрытие (Список рассылки). Получено 31 декабря 2010.
  185. ^ Foundation, Linux (25 октября 2017 г.). «Состояние развития ядра Linux в 2017 году». Фонд Linux. Получено 27 мая 2020.
  186. ^ "git-clone (1) - страница руководства Linux". man7.org. Получено 16 августа 2020.
  187. ^ "git-pull (1) - страница руководства Linux". man7.org. Получено 16 августа 2020.
  188. ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux. Pearson Education. п. 11. ISBN  9780768696790.
  189. ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux. Pearson Education. п. 12. ISBN  9780768696790.
  190. ^ «Как работает процесс разработки». Получено 4 февраля 2018.
  191. ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux. Pearson Education. п. 13. ISBN  9780768696790.
  192. ^ «HOWTO по разработке ядра Linux - документация по ядру Linux». www.kernel.org. Получено 4 января 2020.
  193. ^ «Стиль кодирования ядра Linux - документация ядра Linux». www.kernel.org. Получено 4 января 2020.
  194. ^ Куббилун, Инго А. (2 июня 2004 г.). «Патч ядра Linux для компилятора Intel» (на немецком). Pyrillion.org. Архивировано из оригинал 22 июля 2011 г.. Получено 12 ноября 2010.
  195. ^ тимофей (26 февраля 2009 г.). «Проект высокопроизводительного ядра Linux - LinuxDNA». Slashdot Linux. Dice Holdings. Получено 30 октября 2010.
  196. ^ Райан, Джастин (25 февраля 2009 г.). «LinuxDNA делает Linux более мощным с помощью компилятора Intel C / C ++». Linux журнал. Belltown Media, Inc. Получено 30 октября 2010.
  197. ^ Лельбах, Брюс (25 октября 2010 г.). «Clang создает работающее ядро ​​Linux (загрузка RL5 с SMP, сетью и X, собственными хостами)». cfe-dev (Список рассылки). Архивировано из оригинал 7 сентября 2015 г.
  198. ^ Ларабель, Майкл (12 апреля 2014 г.). «Linux 3.15 почти может быть скомпилирован под управлением LLVM». Фороникс. Получено 10 июн 2014.
  199. ^ Ларабель, Майкл. «Патч за патчем, LLVM Clang становится лучше при создании ядра Linux». Фороникс. Получено 20 ноября 2014.
  200. ^ Эдж, Джейк (7 мая 2013 г.). «LFCS: проект LLVMLinux». LWN.net. Получено 3 марта 2015.
  201. ^ Мёллер, Ян-Симон (2 февраля 2014 г.). "LLVMLinux: ядро ​​Linux с крыльями дракона" (PDF). LLVM проект. Получено 3 марта 2015.
  202. ^ С любовью, Роберт (2010). Разработка ядра Linux (3-е изд.). Эддисон-Уэсли. п. 364. ISBN  978-0-672-32946-3. OCLC  268788260.
  203. ^ Брэдфорд, Джон (8 марта 2003 г.). "Re: что такое OOPS". LKML (Список рассылки). Получено 30 октября 2010.
  204. ^ С любовью, Роберт (2010). Разработка ядра Linux. Эддисон Уэсли. п. 371. ISBN  9780672329463. OCLC  268788260.
  205. ^ "syslog (2) - страница руководства Linux". man7.org. Получено 15 августа 2020.
  206. ^ "kmsg: экспортировать записи printk в интерфейс / dev / kmsg [LWN.net]". lwn.net. Получено 16 августа 2020.
  207. ^ "systemd". www.freedesktop.org. Получено 16 августа 2020.
  208. ^ "systemd-journald (8) - страница руководства Linux". man7.org. Получено 15 августа 2020.
  209. ^ «Отладка ядра с помощью Ftrace - часть 1 [LWN.net]». lwn.net. Получено 15 сентября 2020.
  210. ^ «Отладка ядра с помощью Ftrace - часть 2 [LWN.net]». lwn.net. Получено 15 сентября 2020.
  211. ^ "ftrace - Function Tracer - Документация ядра Linux". www.kernel.org. Получено 15 сентября 2020.
  212. ^ «Трассировка времени загрузки - документация ядра Linux». www.kernel.org. Получено 19 сентября 2020.
  213. ^ "Kernel Probes (Kprobes) - Документация ядра Linux". www.kernel.org. Получено 6 октября 2020.
  214. ^ "Uprobe-tracer: отслеживание событий на основе Uprobe - документация ядра Linux". www.kernel.org. Получено 6 октября 2020.
  215. ^ "Использование kgdb, kdb и внутреннего отладчика ядра". mirrors.edge.kernel.org. Получено 3 ноября 2020.
  216. ^ Джин Салли (2010). Встроенные системы Pro Linux. Апресс. п. 252. ISBN  9781430272267.
  217. ^ «Кодекс конфликта». Получено 4 февраля 2018.[постоянная мертвая ссылка ]
  218. ^ Шарвуд, Саймон (6 октября 2015 г.). «Разработчик ядра Linux, который попросил Линуса Торвальдса прекратить словесные оскорбления, уходит из-за словесных оскорблений». Реестр.
  219. ^ Эдж, Джейк (31 января 2018 г.). «Слишком много лордов, недостаточно управляющих». LWN.net. Получено 4 февраля 2018.
  220. ^ Корбет, Джонатан (6 ноября 2017 г.). "Bash разработчиков ядра". LWN.net. Получено 4 февраля 2018.
  221. ^ «Состояние вытеснения-рт». linuxplumbersconf.org. Архивировано из оригинал 15 октября 2016 г.. Получено 14 июн 2016.
  222. ^ Мейер, Дэвид (3 февраля 2010 г.). «Разработчик Linux объясняет, как удалить код ядра Android». ZDNet. CBS Interactive. Получено 3 февраля 2010.
  223. ^ «Глава 03: Обзор платформы Maemo». Обзор технологии maemo. Nokia. 2008. Архивировано с оригинал 16 июня 2008 г.. Получено 9 апреля 2010.
  224. ^ Кроа-Хартман, Грег (2 февраля 2010 г.). «Android и сообщество ядра Linux». Получено 3 февраля 2010.
  225. ^ а б Роджер Йе (2017). Системное программирование Android. Packt Publishing. п. 14. ISBN  9781787120389.
  226. ^ «Почему я ушел: разработчик ядра Кон Коливас». Журнал APC. Журналы ACP. 24 июля 2007 г. Архивировано с оригинал 7 июля 2011 г.. Получено 15 августа 2011.
  227. ^ Корбет, Джонатан (25 июля 2007 г.). "Планы слияния Re: -mm для 2.6.23". LWN.net. Получено 10 февраля 2018.
  228. ^ Кокс, Алан (28 июля 2009 г.). "Re: [ПАТЧ] кдесу сломано". Получено 10 февраля 2018.
  229. ^ Родригес, Голдвин (22 января 2011 г.). «Рассказ о двух целях SCSI». Получено 14 февраля 2018.
  230. ^ Штейнмец, Андреас (17 января 2013 г.). «LIO - сломанная реализация цели iSCSI». Получено 14 февраля 2018.
  231. ^ Пол, Райан (19 июня 2012 г.). "Линус Торвальдс говорит NVIDIA" ебать вас ". Получено 14 февраля 2018.
  232. ^ Джон Голд (3 апреля 2014 г.). «Линус Торвальдс отстраняет ключевого разработчика Linux: паника в ядре, когда разработчик Systemd тыкает медведя». Получено 24 марта 2019.
  233. ^ Poettering, Леннарт (6 октября 2014 г.). «О болезни сообщества ядра Linux». Google+. Получено 10 февраля 2018.
  234. ^ Бродкин, Джон (6 марта 2015 г.). «VMware якобы нарушала лицензию Linux с открытым исходным кодом в течение многих лет». Ars Technica. Получено 14 февраля 2018.
  235. ^ Маккарти, Кирен (26 августа 2016 г.). "Обидев всех в мире, Линус Торвальдс называет собственных адвокатов" отвратительной гнойной болезнью.'". Реестр. Получено 14 февраля 2018.
  236. ^ Корбет, Джонатан (10 сентября 2007 г.). «KS2007: Отношения с разработчиками и процесс разработки». LWN.net. Получено 11 февраля 2018.
  237. ^ Бродкин, Джон (16 июля 2013 г.). «Линус Торвальдс защищает свое право позорить разработчиков ядра Linux». ARS Technica. Получено 11 февраля 2018.
  238. ^ Корбет, Джонатан (9 марта 2015 г.). «Код конфликта ядра». LWN.net. Получено 11 февраля 2018.
  239. ^ Корбет, Джонатан (18 сентября 2018 г.). «Кодекс, конфликт и поведение». LWN.net.
  240. ^ Коэн, Ноам (19 сентября 2018 г.). «После многих лет оскорбительных писем создатель Linux уходит в сторону». Житель Нью-Йорка.
  241. ^ Ларабель, Майкл. «Отказ от ненормативной лексики в комментариях к коду ядра: Linux получает» Объятия"". Фороникс. Получено 15 июн 2019.
  242. ^ «Эволюция Linux» (PDF). 26 марта 2008 г.
  243. ^ «Бесконечное развитие: модель жизненного цикла ядра Linux» (PDF). 25 октября 2011 г.
  244. ^ Кроа-Хартман, Грег (12 февраля 2008 г.). "Re: Announce: Linux-next (Или мечта Эндрю :-))". Список рассылки ядра Linux (Список рассылки). Получено 30 января 2017.
  245. ^ Уилер, Дэвид А. «Ядро Linux 2.6: оно того стоит!».
  246. ^ «Экономическое влияние FLOSS на инновации и конкурентоспособность сектора ИКТ ЕС» (PDF) (Таблица 3 на странице 50).
  247. ^ «Оценка общей стоимости разработки дистрибутива Linux» (PDF) (Таблица на странице 6). Архивировано из оригинал (PDF) 11 июля 2010 г.
  248. ^ "Ядро на миллиард долларов". Linux.slashdot.org. 24 февраля 2010 г.. Получено 12 ноября 2010.
  249. ^ Уилер, Дэвид. «Ядро Linux: оно того стоит!». Получено 17 сентября 2012.
  250. ^ "Linux MAINTAINERS файл". Архивировано из оригинал 12 января 2013 г.
  251. ^ Торвальдс, Линус (16 сентября 2018 г.). «Выпущен Linux 4.19-rc4, извинения и примечания к сопровождению». LKML. Получено 23 сентября 2018.
  252. ^ Александру Вадува, Алекс Гонсалес и Крис Симмондс (2016). Linux: встроенная разработка. Packt Publishing. п. 663. ISBN  9781787124455.
  253. ^ "Архивы ядра Linux". Получено 13 ноября 2019.
  254. ^ а б Ямагата, Хироо (3 августа 1997 г.). «Прагматик свободного программного обеспечения». HotWired. Архивировано из оригинал 10 февраля 2007 г.. Получено 21 февраля 2007.
  255. ^ "GPL-v2". gnu.org.
  256. ^ Корбет, Джонатан (31 января 2006 г.). «GPLv3 и ядро». LWN.net. Получено 21 февраля 2007.
  257. ^ Торвальдс, Линус (8 сентября 2000 г.). «Linux-2.4.0-test8». LKML (Список рассылки). Получено 21 февраля 2007.
  258. ^ "gnu.org". www.gnu.org. Получено 18 октября 2017.
  259. ^ Кокс, Алан (20 января 2006 г.). «Re: GPL V3 и Linux». LKML (Список рассылки). Получено 21 февраля 2007.
  260. ^ Шенкленд, Стивен (25 сентября 2006 г.). «Лучшие программисты Linux по GPL 3». News.com. CNET. Получено 21 февраля 2007.
  261. ^ а б Джеймс Э.Дж. Боттомли, Мауро Карвалью Чехаб, Томас Глейкснер, Кристоф Хеллвиг, Дэйв Джонс, Грег Кроа-Хартман, Тони Лак, Эндрю Мортон, Тронд Майклбаст, Дэвид Вудхаус (15 сентября 2006 г.). «Позиция разработчиков ядра по GPLv3: опасности и проблемы с GPLv3». LWN.net. Получено 11 марта 2015.CS1 maint: использует параметр авторов (связь)
  262. ^ Петрелей, Николас (27 сентября 2006 г.). «Борьба со злом или борьба за внимание?». linuxjournal.com. Получено 11 марта 2015.
  263. ^ «Линус Торвальдс говорит, что GPL v3 нарушает все, что стояло за GPLv2». Debconf 2014. 2014. Получено 21 марта 2018.
  264. ^ Кларк, Роб; Семвал, Сумит (1 ноября 2012 г.). «Структура совместного использования буфера DMA: Введение» (PDF). Конференция по встроенным Linux. Получено 2 августа 2014.
  265. ^ Кокс, Алан (10 октября 2012 г.). "[PATCH] dma-buf: используйте EXPORT_SYMBOL". Инфраструктура прямого рендеринга (Список рассылки). Получено 3 сентября 2013.
  266. ^ Торвальдс, Линус (10 декабря 2003 г.). "RE: Linux GPL и исключение для двоичных модулей?". LKML (Список рассылки). Получено 31 декабря 2010.
  267. ^ Торвальдс, Линус (3 декабря 2003 г.). "Re: Linux GPL и исключение для двоичных модулей?". LKML (Список рассылки). Получено 12 ноября 2010.
  268. ^ «Linux Firmware API - документация ядра Linux». www.kernel.org. Получено 13 января 2020.
  269. ^ «Испорченные ядра - Документация по ядру Linux». www.kernel.org. Получено 13 января 2020.
  270. ^ «Встроенная прошивка - Документация ядра Linux». www.kernel.org. Получено 10 июн 2020.
  271. ^ «Регистрация Linux TM в США». uspto.gov.
  272. ^ «Регистрация Linux TM в ЕС». euipo.europa.eu. Архивировано из оригинал 9 июня 2016 г.
  273. ^ Хьюз, Фил (1 августа 1997 г.). «Спор о товарных знаках Linux». Linux журнал. Belltown Media, Inc. Получено 8 декабря 2010.
  274. ^ Хьюз, Фил (1 марта 1997 г.). «Действия, предпринятые в отношении товарного знака Linux». Linux журнал. Belltown Media, Inc. Получено 8 декабря 2010.
  275. ^ Гиссельберг, Тоня (2010). «История торговой марки Linux, операционной системы» (PDF). Gisselberg Law Firm, Inc. Архивировано с оригинал (PDF) 11 июля 2011 г.. Получено 8 декабря 2010.

дальнейшее чтение

внешняя ссылка