Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

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

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

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

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

17 сентября 1991 года Торвальдс подготовил версию 0.01 Linux и поместил на ftp.funet.fi - FTP-сервер Финского университета и исследовательской сети ( FUNET ). Он даже не был исполняемым, так как его код все еще нуждался в 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 и т. Д.

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

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

Когда Торвальдс выпустил версию 0.12 в феврале 1992 года, он принял Стандартную общественную лицензию GNU версии 2 (GPLv2) вместо своей предыдущей самовоспроизводящейся лицензии, которая не допускала коммерческого распространения. [28] В отличие от Unix , все исходные файлы Linux находятся в свободном доступе, включая драйверы устройств . [29] Первоначальный успех Linux был достигнут программистами и тестировщиками по всему миру. Благодаря поддержке API-интерфейсов POSIX через 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 . [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] получила поддержку компьютерных систем, использующих процессоры на основе архитектур Alpha , SPARC и MIPS . [ необходима цитата ]

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

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

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

Версия 2.4.0, выпущенная 4 января 2001 г. [46], содержала поддержку ISA Plug and Play , USB и PC Card . [47] Он также включал поддержку процессора PA-RISC от Hewlett-Packard . Разработка для 2.4. x немного изменился, так как на протяжении всей серии было доступно больше функций, включая поддержку Bluetooth , Logical Volume Manager (LVM) версии 1, поддержку RAID , файловых систем InterMezzo и ext3 .

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

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

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

Раньше Linux поддерживался без помощи автоматизированной системы управления исходным кодом, пока в 2002 году разработка не переключилась на BitKeeper . Оно было свободно доступно разработчикам Linux, но не было бесплатным программным обеспечением . В 2005 году из-за попыток его реинжиниринга компания, которой принадлежало программное обеспечение, отказалась от поддержки сообщества 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] Унифицированная поддержка процессора ARM той же серии . [63]

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

Изменение нумерации с 2.6.39 на 3.0 и с 3.19 на 4.0 не повлекло за собой значимого технического различия. Главный номер версии был увеличен, чтобы избежать больших второстепенных номеров. [59] [66] Стабильные ядра 3.xy были выпущены до версии 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]

Согласно ежегодному Девелопером переполнению стека в Survey 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 - это монолитное ядро с модульной конструкцией (например, оно может вставлять и удалять загружаемые модули ядра во время выполнения), поддерживающее большинство функций, когда-то доступных только в ядрах с закрытым исходным кодом несвободных операционных систем. В остальной части статьи используется соглашение о UNIX и Unix-подобных операционных системах на официальных страницах руководства . Цифры, следующие за именами команд, интерфейсов и других функций, служат для указания раздела (т. Е. Типа компонента или функции ОС), к которому они принадлежат (например, execve (2) относится к системному вызову , а exec (3) относится к оболочке библиотеки пользовательского пространства):

  • параллельные вычисления и (при наличии достаточного количества ядер ЦП для задач, которые готовы к запуску) даже истинное параллельное выполнение многих процессов одновременно (каждый из которых имеет один или несколько потоков выполнения ) на архитектурах SMP и NUMA ;
  • выбор и настройка сотен функций ядра и драйверов (с помощью одной из команд семейства make * config перед запуском компиляции), [16] [15] [14] изменение параметров ядра перед загрузкой (обычно путем вставки инструкций в строки из GRUB2 меню), и тонкой настройки поведения ядра во время выполнения ( с использованием SYSCTL (8) интерфейс / Proc / SYS / ); [17] [18] [19]
  • конфигурации (снова с помощью команд make * config ) и модификации политик [78] во время выполнения (через nice (2) , setpriority (2) и семейство системных вызовов sched _ * (2) ) планировщиков задач, которые позволяют вытесняющая многозадачность (как в пользовательском режиме , так и, начиная с версии 2.6, в режиме ядра [79] [80] ); Completely Fair Scheduler (CFS) является планировщиком по умолчанию Linux с 2007 года , и он использует красно-черное дерево , которое может выполнять поиск, вставка и удаление информации о процессе ( задача структура ) с O (журнал п) временная сложность , где n - количество выполняемых задач; [81] [82]
  • расширенное управление памятью с выгружаемой виртуальной памятью ;
  • механизм межпроцессного взаимодействия и синхронизации ;
  • виртуальная файловая система на вершине нескольких конкретных файловых систем ( ext4 , Btrfs , XFS , JFS , FAT32 , и многие другие);
  • настраиваемые планировщики ввода-вывода, системный вызов ioctl (2) [83], который управляет параметрами базового устройства специальных файлов (это нестандартный системный вызов, поскольку аргументы, возврат и семантика зависят от рассматриваемого драйвера устройства), поддержка Асинхронный ввод-вывод POSIX [84] (однако из-за того, что они плохо масштабируются с многопоточными приложениями, для управления асинхронным вводом- выводом необходимо было создать семейство специальных системных вызовов ввода-вывода Linux ( io _ * (2) [85] ). O контексты, подходящие для одновременной обработки:
  • Виртуализация на уровне ОС (с Linux-VServer ), паравиртуализация и виртуализация с аппаратной поддержкой (с KVM или Xen и с использованием QEMU для эмуляции оборудования); [86] [87] [88] [89] [90] [91] В гипервизоре Xen ядро ​​Linux обеспечивает поддержку для создания дистрибутивов Linux (таких как openSuSE Leap и многих других), которые работают как Dom0 , то есть виртуальных машин. хост-серверы, которые обеспечивают среду управления для виртуальных машин пользователя ( DomU ). [92]
  • механизмы безопасности для дискреционного и обязательного контроля доступа (SELinux, AppArmor, POSIX ACL и другие); [93] [94]
  • несколько типов многоуровневых протоколов связи (включая набор Интернет-протоколов ).

Драйверы устройств и расширения ядра выполняются в пространстве ядра ( кольцо 0 во многих архитектурах ЦП ) с полным доступом к оборудованию, хотя некоторые исключения выполняются в пространстве пользователя , например, файловые системы на основе FUSE / CUSE и части UIO. [95] [96] графическая система , большинство людей используют с Linux не работает в ядре. В отличие от стандартных монолитных ядер, драйверы устройств легко конфигурируются как модули и загружаются или выгружаются во время работы системы, а также могут быть предварительно очищены при определенных условиях для обработки аппаратных прерываний.правильно и лучше поддерживать симметричную многопроцессорность . [80] По выбору Linux не имеет стабильного двоичного интерфейса приложения драйвера устройства . [97]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Части LSB, в значительной степени относящиеся к ядру, - это General ABI (gABI), [118] особенно System V ABI [119] [120] и Executable and Linking Format (ELF), [121] [122] и Специфический для процессора ABI (psABI), например Core Specification для X86-64. [123] [124]

Стандарт ABI для того, как x86_64 пользовательские программы используют системные вызовы для загрузки номер системного вызова в RAx регистр и другие параметры в RDI , риши , RDX , r10 , r8 и r9 , и , наконец , поставить системный вызов инструкции по сборке в код. [125] [126] [127]

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

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

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

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

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

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

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

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

Технические характеристики [ править ]

Процессы и потоки [ править ]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Linux предлагает множество механизмов для уменьшения поверхности атаки ядра и повышения безопасности, которые в совокупности известны как модули безопасности Linux (LSM). [181] Они включают модуль Security-Enhanced Linux (SELinux), код которого был первоначально разработан и затем опубликован NSA , [182] и AppArmor [94] среди других. SELinux сейчас активно развивается и поддерживается на GitHub . [93] SELinux и AppArmor обеспечивают поддержку политик безопасности контроля доступа, включая обязательный контроль доступа (MAC), хотя они существенно различаются по сложности и масштабам.

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

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

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

Дистрибутивы 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%) категории. [186]

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

-  Эндрю Мортон , 2005 г.

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

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

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

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

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

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

Набор инструментов GNU [ править ]

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

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

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

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

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

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

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

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

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

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

Одним из наиболее распространенных методов, используемых для обнаружения ошибок в коде, является отладка путем печати . Для этой цели Linux предоставляет встроенный в ядро ​​API под названием printk (), который сохраняет сообщения в кольцевом буфере. Системный журнал (2) системный вызов используется для чтения и / или очистки ядра сообщения кольцевого буфера и для установки максимального уровня протоколирования сообщений , которые будут отправлены на консоль (то есть, один из восьми KERN_ * параметры printk () , которые говорят о серьезности заявленного состояния); обычно он вызывается через оболочку glibC klogctl (3) . [212] Сообщения ядра также экспортируются в пользовательскую среду через / dev / kmsgинтерфейс [213] (например, systemd-journald [214] [215] читает этот интерфейс и по умолчанию добавляет сообщения в / var / log / journal ).

Другой фундаментальный метод отладки работающего ядра - трассировка. Механизм ftrace - это внутренний трассировщик Linux; он используется для мониторинга и отладки Linux во время выполнения, а также может анализировать задержки в пространстве пользователя из-за неправильного поведения ядра. [216] [217] [218] Кроме того, ftrace позволяет пользователям отслеживать Linux во время загрузки. [219]

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

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

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

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

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

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

Вилки Linux [ править ]

IPOD загрузка iPodLinux

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

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

-  Грег Кроа-Хартман , 2010 г.

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

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

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

-  Линус Торвальдс , 2001 г.

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

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

  • В июле 2007 года Кон Коливас объявил, что прекращает разработку ядра Linux. [234] [235]
  • В июле 2009 года Алан Кокс оставил свою роль сопровождающего уровня TTY после разногласий с Линусом Торвальдсом . [236]
  • В декабре 2010 года специалист по сопровождению SCSI Linux Джеймс Боттомли и специалист по сопровождению SCST Владислав Болховитин обсудили, какой целевой стек SCSI следует включить в ядро ​​Linux. [237] Это расстроило некоторых пользователей Linux. [238]
  • В июне 2012 года Торвальдс ясно дал понять, что не согласен с тем, что NVIDIA выпускает свои драйверы как закрытые. [239]
  • В апреле 2014 года Торвальдс запретил Кею Сиверсу отправлять исправления для ядра Linux за то, что он не смог исправить ошибки , из-за которых systemd отрицательно взаимодействовал с ядром. [240]
  • В октябре 2014 года Леннарт Поеттеринг обвинил Торвальдса в терпимости к грубому стилю обсуждения в списках рассылки, связанных с ядром Linux, и в плохом образце для подражания. [241]
  • В марте 2015 года Кристоф Хеллвиг подал иск против VMware за нарушение авторских прав на ядро ​​Linux. [242] Линус Торвальдс дал понять, что не согласен с этой и подобными инициативами, назвав адвокатов гнойной болезнью. [243]

Выдающиеся разработчики ядра Linux осознавали важность предотвращения конфликтов между разработчиками. [244] Долгое время не существовало кодекса поведения разработчиков ядра из-за противодействия Линуса Торвальдса . [245] Однако 8 марта 2015 г. был введен конфликтный код ядра Linux . [246] Он был заменен 16 сентября 2018 г. новым Кодексом поведения, основанным на Соглашении с участниками . Это совпало с публичными извинениями Торвальдса и коротким перерывом в разработке ядра. [247] [248] 30 ноября 2018 г. в соответствии с Кодексом поведения., Яркко Саккинен из Intel разослал патчи, заменяющие слова «fuck», появляющиеся в комментариях к исходному коду, подходящими версиями, сосредоточенными на слове «hug». [249]

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

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

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

-  Линус Торвальдс , 2005 [250] [251] [252]

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

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

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

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

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

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

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

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

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

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

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

Правовые аспекты [ править ]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Linux является зарегистрированной торговой маркой от Linus Torvalds в Соединенных Штатах Америки, Европейского Союза, а также в некоторых других странах. [279] [280] Юридическая битва за товарный знак началась в 1996 году, когда Уильям Делла Кроче, юрист, никогда не участвовавший в разработке Linux, начал запрашивать лицензионные сборы за использование слова Linux . После того, как было доказано, что это слово широко использовалось задолго до того, как Делла Кроче заявила о своем первом использовании, торговая марка была передана Торвальдсу. [281] [282] [283]

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

  • Ядро
  • Монолитное ядро
  • Микроядро
  • Сравнение ядер операционных систем
  • История версий ядра Linux
  • Операционная система
  • Linux
  • Миникс 3
  • macOS
  • Майкрософт Виндоус

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

  1. ^ «Логотипы и талисманы Linux» . Linux Online. 2008. Архивировано из оригинального 15 августа 2010 года . Проверено 11 августа 2009 года .
  2. ^ Проект ядра Linux с открытым исходным кодом на странице Open Hub: Languages
  3. ^ Kroah-Хартман, Грег (11 марта 2021). «Linux 5.11.6» . LKML (список рассылки) . Проверено 12 марта 2021 года .
  4. Торвальдс, Линус (6 марта 2021 г.). «Linux 5.12-rc2» . LKML (список рассылки) . Проверено 6 марта 2021 года .
  5. ^ a b c d e "Правила лицензирования ядра 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. ^ "README" . git.kernel.org.
  10. Ричардсон, Марджори (1 ноября 1999 г.). «Интервью: Линус Торвальдс» . Linux Journal . Проверено 20 августа 2009 года .
  11. ^ Уильямс, Сэм (март 2002). «Глава 9: Стандартная общественная лицензия GNU» . Free as in Freedom: Крестовый поход Ричарда Столлмана за свободные программы . О'Рейли . ISBN 0-596-00287-4. Проверено 12 ноября 2010 года .
  12. ^ Unix System Laboratories v. Berkeley Software , 832 F. Supp. 790 ( DNJ 1993).
  13. ^ a b «ТОП500 суперкомпьютерных сайтов: Семейство операционных систем / Linux» . Top500.org . Дата обращения 5 октября 2019 .
  14. ^ a b c «Система сборки ядра - документация ядра Linux» . www.kernel.org . Дата обращения 17 июля 2020 .
  15. ^ a b c "Kconfig make config - Документация ядра Linux" . www.kernel.org . Проверено 13 сентября 2020 .
  16. ^ a b "KernelBuild - новички в ядре Linux" . kernelnewbies.org . Проверено 13 сентября 2020 .
  17. ^ a b "Интерфейс Sysctl" . www.linux.it . Проверено 13 сентября 2020 .
  18. ^ a b "sysctl (8) - справочная страница Linux" . man7.org . Проверено 13 сентября 2020 .
  19. ^ a b "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. ^ a b c d "Исходный код Linux: КОПИРОВАНИЕ (v5.4.8) - Bootlin" . elixir.bootlin.com . Проверено 6 января 2020 года .
  24. ^ a b Торвальдс, Линус Бенедикт (26 августа 1991 г.). "Что бы вы хотели видеть в minix больше всего?" . Группа новостейcomp.os.minix . Usenet: [email protected] . 
  25. ^ a b Валлийский, Мэтт; Дальхаймер, Матиас Калле; Кауфман, Лар (1999). «1». Запуск Linux (3-е изд.). Севастополь, Калифорния: ISBN O'Reilly Media, Inc. 1-56592-976-4. OCLC  50638246 .
  26. ^ a b «Бесплатные исходные коды ядра типа minix для 386-AT - Группы Google» . groups.google.com . 5 октября 1991 . Проверено 19 марта 2020 .
  27. ^ a b c Кристин Бреснахан и Ричард Блюм (2016). LPIC-2: Учебное пособие по сертификации профессионального института Linux: экзамен 201 и экзамен 202 . Джон Вили и сыновья. п. 107. ISBN 9781119150794.
  28. ^ a b Торвальдс, Линус . «Примечания к выпуску Linux v0.12» . Архивы ядра Linux . Проверено 21 февраля 2007 года .
  29. ^ Фред Хантельманн (2016). Руководство по началу работы с LINUX: самостоятельное введение . Springer Science & Business Media. п. 1. ISBN 9783642607493.
  30. ^ a b 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 Ноябрь 2 006 .
  34. Таненбаум, Энди (29 января 1992 г.). «LINUX устарел» . Группа новостейcomp.os.minix . Usenet: [email protected] . Проверено 10 мая 2006 года . 
  35. Таненбаум, Энди (12 мая 2006 г.). "Дебаты Таненбаума-Торвальдса: Часть II" . VU University Amsterdam . Проверено 6 января 2007 года .
  36. ^ Ноября 2012, Дэвид Hayward22. «История Linux: как время сформировало пингвина» . TechRadar . Проверено 19 марта 2020 .
  37. ^ Ноября 2012, Дэвид Hayward22. «История Linux: как время сформировало пингвина» . TechRadar . Проверено 26 марта 2020 года .
  38. ^ Любовь, Роберт (Роберт М.) (2010). Разработка ядра Linux (3-е изд.). Река Аппер Сэдл, Нью-Джерси: Аддисон-Уэсли. п. 9. ISBN 978-0-672-32946-3. OCLC  268788260 .
  39. ^ a b «Как работает процесс разработки - Документация ядра Linux» . www.kernel.org . Проверено 26 марта 2020 года .
  40. ^ "Выпуск исходного кода ядра 1.2" . Проверено 27 октября 2008 года .
  41. ^ a b 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. ^ Kroah-Хартман, Грег (3 августа 2006). «Адриан Банк теперь занимает стабильную ветку 2.6.16» . LKML (список рассылки) . Проверено 21 февраля 2015 года .
  53. ^ Rothwell, Стивен (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-commits-head (список рассылки).
  57. ^ «Индекс /pub/linux/kernel/v2.6» . Kernel.org . Проверено 2 марта 2014 .
  58. ^ "Добавьте личность, чтобы сообщить номера версии 2.6.x [LWN.net]" . lwn.net .
  59. ^ a b Торвальдс, Линус (21 июля 2011 г.). «Релиз Linux 3.0» . Список рассылки ядра Linux . Проверено 16 мая 2013 года .
  60. Торвальдс, Линус (30 мая 2011 г.). «Linux 3.0-rc1» . LKML (список рассылки). Архивировано из оригинального 31 мая 2011 года . Проверено 1 июля 2013 года .
  61. Перейти ↑ Vaughan-Nichols, Steven J. (13 декабря 2012 г.). «Прощай, 386: Linux откажется от поддержки чипов i386 в следующем крупном выпуске» . ZDNet . CBS Interactive . Проверено 6 февраля 2013 года .
  62. ^ Fingas, Джон (15 декабря 2012). «Linux, чтобы отказаться от поддержки i386 в ядре 3.8, заставит нас обновить нашу установку Doom» . Engadget . AOL . Проверено 22 марта 2015 года .
  63. Перейти ↑ Vaughan-Nichols, Steven J. (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. ^ "TOP500 суперкомпьютерных сайтов: Семейство операционных систем / 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 переместилась на пятую позицию, согласно 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. ^ a b Джонатан Корбет (24 февраля 2003 г.). «Перенос драйверов: вытесняемое ядро» . LWN.net . Дата обращения 7 мая 2015 .
  81. ^ a b Мольнар, Инго (13 апреля 2007 г.). «[патч] Ядро модульного планировщика и полностью справедливый планировщик [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. ^ "KVM" . 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. ^ Wilk, Konrad Rzeszutek (31 января 2014). «Linux 3.14 и ПВХ» . Xen Project . Проверено 29 марта 2020 года .
  92. ^ «Введение в виртуализацию Xen | Руководство по виртуализации | openSUSE Leap 15.2» . doc.opensuse.org . Проверено 29 сентября 2020 года .
  93. ^ a b «Проект SELinux» . GitHub . Проверено 10 января 2020 года .
  94. ^ a b «AppArmor - Документация ядра Linux» . www.kernel.org . Проверено 10 января 2020 года .
  95. Джейк Эдж (25 ноября 2008 г.). «Символьные устройства в пространстве пользователя» . LWN.net . Дата обращения 7 мая 2015 .
  96. Джонатан Корбет (2 мая 2007 г.). «UIO: драйверы пользовательского пространства» . LWN.net . Дата обращения 7 мая 2015 .
  97. ^ a b c d "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. ^ a b Нгуен, Бинь (30 июля 2004 г.). «Иерархия файловой системы Linux: Глава 1. Иерархия файловой системы Linux» . Проект документации Linux . Проверено 28 ноября 2012 года .
  101. ^ «Версия ядра Linux 5.x - Документация ядра Linux» . www.kernel.org . Проверено 4 января 2020 года .
  102. ^ "README \ ABI \ Documentation - kernel / git / torvalds / linux.git - дерево исходных текстов ядра Linux" . git.kernel.org . Проверено 18 апреля 2020 .
  103. ^ "syscalls \ stable \ ABI \ Documentation - kernel / git / torvalds / linux.git - дерево исходных текстов ядра Linux" . git.kernel.org . Проверено 18 апреля 2020 .
  104. ^ a b "1.Intro.rst - Documentation / process / 1.Intro.rst - исходный код Linux (v5.8) - Bootlin" . elixir.bootlin.com . Проверено 8 августа 2020 .
  105. ^ a b "системные вызовы" . человек7 .
  106. ^ "intro (2) - справочная страница Linux" . man7.org . Дата обращения 16 июля 2020 .
  107. ^ "клон" . man7.org . Проверено 28 января 2020 года .
  108. ^ "feature_test_macros" . man7.org . Проверено 28 января 2020 года .
  109. ^ "vdso (7) - справочная страница Linux" . man7.org . Дата обращения 2 февраля 2020 .
  110. ^ a b "futex (2) - страница руководства Linux" . man7.org . Дата обращения 2 февраля 2020 .
  111. ^ "syscall (2) - страница руководства Linux" . man7.org . Дата обращения 2 февраля 2020 .
  112. ^ "sysfs (5) - справочная страница Linux" . man7.org . Проверено 6 января 2020 года .
  113. ^ «Правила доступа к информации в sysfs - Документация ядра Linux» . www.kernel.org . Проверено 6 января 2020 года .
  114. ^ «Справочные спецификации Linux Foundation» . refspecs.linuxbase.org . Дата обращения 3 февраля 2020 .
  115. ^ «Технические характеристики LSB» . refspecs.linuxbase.org . Дата обращения 3 февраля 2020 .
  116. ^ «Стандартная базовая спецификация рабочего стола Linux, общая часть» . refspecs.linuxbase.org . Дата обращения 3 февраля 2020 .
  117. ^ «Нормативные ссылки» . refspecs.linuxfoundation.org . Дата обращения 3 февраля 2020 .
  118. ^ «Стандартная базовая базовая спецификация Linux, общая часть» . refspecs.linuxfoundation.org . Дата обращения 3 февраля 2020 .
  119. ^ «Двоичный интерфейс приложения System V - версия 4.1» (PDF) . www.sco.com .
  120. ^ "Xinuos Inc. | Разработчики | Габи | 2003-12-17 | Двоичный интерфейс приложения System V - ПРОЕКТ" . www.sco.com . Дата обращения 3 февраля 2020 .
  121. ^ «Исполняемый и связывающий формат (ELF)» . refspecs.linuxbase.org . Дата обращения 3 февраля 2020 .
  122. ^ "elf (5) - страница руководства Linux" . man7.org . Проверено 18 ноября 2020 года .
  123. ^ "Стандартные базовые спецификации ядра Linux для X86-64" . refspecs.linuxbase.org . Дата обращения 3 февраля 2020 .
  124. ^ "Двоичный интерфейс приложения System V - ПРОЕКТ" . refspecs.linuxbase.org . Дата обращения 3 февраля 2020 .
  125. ^ Seyfarth, Ray (2012). Введение в 64-битное программирование на языке ассемблера Intel для Linux . п. 170. ISBN 9781478119203.
  126. ^ "Анатомия системного вызова, часть 1 [LWN.net]" . lwn.net . Дата обращения 16 июля 2020 .
  127. ^ "Анатомия системного вызова, часть 2 [LWN.net]" . lwn.net . Дата обращения 16 июля 2020 .
  128. ^ Deucher, Alex (7 октября 2014). «Новый унифицированный драйвер с открытым исходным кодом AMD» . Фонд X.Org . Проверено 21 января 2015 года .
  129. ^ a b «Символы - ненадежное руководство по взлому ядра Linux - документация ядра Linux» . www.kernel.org . Дата обращения 8 февраля 2020 .
  130. ^ a b «Экспортированные символы и внутренний API [LWN.net]» . lwn.net . Дата обращения 15 марта 2020 .
  131. ^ a b «Не экспортируемое имя_просмотра_kallsyms () [LWN.net]» . lwn.net . Дата обращения 15 марта 2020 .
  132. ^ "Деревья I: Радиксные деревья [LWN.net]" . lwn.net . Проверено 13 ноября 2020 .
  133. ^ "Деревья II: красно-черные деревья [LWN.net]" . lwn.net . Проверено 13 ноября 2020 .
  134. ^ «Ненадежное руководство по взлому ядра Linux» . www.kernel.org (1-е изд.). 2005 . Дата обращения 15 марта 2020 .
  135. ^ «Ненадежное руководство по взлому ядра Linux - документация ядра Linux» . www.kernel.org . Дата обращения 15 марта 2020 .
  136. ^ «Ненадежное руководство по блокировке - документация ядра Linux» . www.kernel.org . Дата обращения 15 марта 2020 .
  137. ^ "Руководство по интерфейсам SCSI - Документация ядра Linux" . www.kernel.org . Проверено 11 июня 2020 .
  138. ^ «Руководство разработчика libATA - Документация по ядру Linux» . www.kernel.org . Проверено 11 июня 2020 .
  139. ^ «DRM Internals - Документация ядра Linux» . www.kernel.org . Проверено 11 июня 2020 .
  140. ^ «Настройка режима ядра (KMS) - Документация ядра Linux» . www.kernel.org . Проверено 11 июня 2020 .
  141. ^ "Представьте механизм совместного использования буфера DMA [LWN.net]" . lwn.net . Проверено 11 июня 2020 .
  142. ^ «Совместное использование буферов CPU и GPU в Linux *» . 01.org . 12 мая 2016 . Проверено 11 июня 2020 .
  143. ^ «Совместное использование буфера и синхронизация - Документация ядра Linux» . www.kernel.org . Проверено 11 июня 2020 .
  144. ^ "О mac80211" . Ядро Linux Организация, Inc . Проверено 8 июня 2014 .
  145. ^ «Отчет об изменениях ABI в ядре Linux» . Лаборатория ABI Андрея Пономаренко. 17 марта 2016 г.
  146. ^ "[PATCH v3 1/2] fork: добавить clone3 [LWN.net]" . lwn.net . Дата обращения 16 июля 2020 .
  147. ^ "clone (2) - справочная страница Linux" . man7.org . Дата обращения 15 июля 2020 .
  148. ^ "clone3 (), fchmodat4 () и fsinfo () [LWN.net]" . lwn.net . Дата обращения 15 июля 2020 .
  149. ^ "ld-linux.so (8) - страница руководства Linux" . man7.org . Проверено 18 ноября 2020 года .
  150. ^ "nptl (7) - справочная страница Linux" . man7.org . Проверено 25 июля 2020 .
  151. ^ "pthreads (7) - страница руководства Linux" . man7.org . Проверено 25 июля 2020 .
  152. ^ "pthread_create (3) - страница руководства Linux" . man7.org . Проверено 25 июля 2020 .
  153. ^ "futex (7) - страница руководства Linux" . man7.org . Проверено 25 июля 2020 .
  154. ^ «Упрощение потоков ядра [LWN.net]» . lwn.net . Проверено 15 августа 2020 .
  155. ^ "execve (2) - страница руководства Linux" . www.man7.org . Дата обращения 17 июля 2020 .
  156. ^ "Возможности (7) - Справочная страница Linux" . man7.org . Дата обращения 2 августа 2020 .
  157. ^ a b Бар, Моше (1 апреля 2000 г.). «Планировщик Linux» . Linux Journal . Belltown Медиа, Инк . Проверено 14 апреля 2012 года .
  158. ^ «Стандарт IEEE для информационных технологий - интерфейс переносимой операционной системы, POSIX.1b, расширения реального времени (IEEE Std 1003.1b-1993)» .
  159. ^ Larabel, Майкл (24 января 2014). «Ядро Linux 3.14 уже имеет много интересных функций» . Фороникс . Проверено 3 февраля 2014 года .
  160. ^ «Ядро Linux 3.14, раздел 1.1. Класс планирования крайнего срока для лучшего планирования в реальном времени» . kernelnewbies.org . 30 марта 2014 . Проверено 2 апреля 2014 года .
  161. ^ Любовь, Роберт (2010). «4». Разработка ядра Linux (3-е изд.). Эддисон Уэсли. С. 62–63. ISBN 9780672329463.
  162. ^ «Снижение задержки в Linux: введение вытесняемого ядра | Linux Journal» . www.linuxjournal.com . Дата обращения 17 августа 2020 .
  163. ^ McKenney, Пол (10 августа 2005). «Обзор вытеснения в реальном времени» . LWN.net . Проверено 5 февраля 2012 года .
  164. ^ «Проект OSADL: Linux в реальном времени» . OSADL . Проверено 5 февраля 2012 года .
  165. ^ Любовь, Роберт (2010). Разработка ядра Linux . Эддисон Уэсли. п. 20. ISBN 9780672329463.
  166. ^ «Схема стека хранилища Linux» . www.thomas-krenn.com . Проверено 19 марта 2020 .
  167. ^ a b c Торвальдс, Линус (январь 1999 г.). «Край Linux» . Открытые источники: голоса революции открытого исходного кода . О'Рейли . ISBN 1-56592-582-3. Проверено 13 октября 2013 года .
  168. ^ «Перенос Linux на DEC Alpha: ядро ​​и оболочка» .
  169. ^ «Linux на альфа-версии: стратегический выбор» .
  170. ^ "Avalon Cluster | TOP500 суперкомпьютерных сайтов" . www.top500.org . Дата обращения 5 октября 2019 .
  171. Ван, Дэвид (6 мая 2010 г.). «Android теперь работает на iPhone 3G» . TechHive . IDG . Проверено 11 июля 2010 года .
  172. ^ "LKDDb" . Проект LKDDb . Проверено 26 января 2021 года .
  173. ^ «Оборудование Linux» . Проект оборудования Linux . Проверено 26 января 2021 года .
  174. ^ «Ядро Linux 4.0, Раздел 1.2. Исправления в реальном времени» . kernelnewbies.org . 26 апреля 2015 . Проверено 27 апреля 2015 года .
  175. Джонатан Корбет (25 февраля 2015 г.). «Грубый патч для живого исправления» . LWN.net . Проверено 27 апреля 2015 года .
  176. ^ "kernel / git / torvalds / linux.git: Получите живую инфраструктуру исправлений из Jiri Kosina (дерево исходных текстов ядра Linux)" . kernel.org . 11 февраля 2015 . Проверено 27 апреля 2015 года .
  177. ^ Mookhey, KK; Бургате, Нилеш (1 июля 2005 г.). Linux: функции безопасности, аудита и контроля . США: ISACA . п. 14. ISBN 1-893209-78-4. Проверено 31 декабря 2010 года .
  178. Хэтч, Брайан (15 июля 2008 г.). Взлом открытого Linux: секреты безопасности Linux и решения . McGraw-Hill Osborne Media . п. 524. ISBN 978-0-07-226257-5. Проверено 31 декабря 2010 года .
  179. Jaeger, Трент (7 октября 2008 г.). Безопасность операционной системы . Издатели Морган и Клейпул. п. 122. ISBN 978-1-59829-212-1. Проверено 31 декабря 2010 года .
  180. ^ "CAP_PERFMON - и новые возможности в целом [LWN.net]" . lwn.net . Дата обращения 2 августа 2020 .
  181. ^ «Использование модуля безопасности Linux - документация ядра Linux» . www.kernel.org . Проверено 10 января 2020 года .
  182. ^ «Агентство национальной безопасности | Центральная служба безопасности> Чем мы занимаемся> Исследования> SE Linux> Вопросы и ответы по SE Linux» . www.nsa.gov . Проверено 10 января 2020 года .
  183. ^ «Seccomp BPF (Безопасные вычисления с фильтрами) - Документация ядра Linux» . www.kernel.org . Проверено 10 января 2020 года .
  184. Эндрюс, Джереми (16 июля 2008 г.). «Ошибки безопасности и полное раскрытие информации» . KernelTrap . Архивировано из оригинала 19 июля 2008 года . Проверено 31 декабря 2010 года .
  185. Шпенглер, Брэд (16 июля 2008 г.). «Неофициальная политика сокрытия безопасности Linux» . Полное раскрытие информации (список рассылки) . Проверено 31 декабря 2010 года .
  186. ^ Foundation, Linux (25 октября 2017 г.). «Состояние развития ядра Linux в 2017 году» . Фонд Linux . Проверено 27 мая 2020 .
  187. ^ "git-clone (1) - страница руководства Linux" . man7.org . Дата обращения 16 августа 2020 .
  188. ^ "git-pull (1) - страница руководства Linux" . man7.org . Дата обращения 16 августа 2020 .
  189. ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux . Pearson Education. п. 11. ISBN 9780768696790.
  190. ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux . Pearson Education. п. 12. ISBN 9780768696790.
  191. ^ «Как работает процесс разработки» . Проверено 4 февраля 2018 года .
  192. ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux . Pearson Education. п. 13. ISBN 9780768696790.
  193. ^ "HOWTO по разработке ядра Linux - Документация по ядру Linux" . www.kernel.org . Проверено 4 января 2020 года .
  194. ^ "Стиль кодирования ядра Linux - Документация ядра Linux" . www.kernel.org . Проверено 4 января 2020 года .
  195. ^ Kubbilun, Инго А. (2 июня 2004). «Патч ядра Linux для компилятора Intel» (на немецком языке). Pyrillion.org. Архивировано из оригинального 22 июля 2011 года . Проверено 12 ноября 2010 года .
  196. ^ Тимоти (26 февраля 2009 г.). «Проект высокопроизводительного ядра Linux - LinuxDNA» . Slashdot Linux . Dice Holdings . Проверено 30 октября 2010 года .
  197. Райан, Джастин (25 февраля 2009 г.). «LinuxDNA расширяет возможности Linux с помощью компилятора Intel C / C ++» . Linux Journal . Belltown Медиа, Инк . Проверено 30 октября 2010 года .
  198. ^ Lelbach, Bryce (25 октября 2010). «Clang создает работающее ядро ​​Linux (загрузка RL5 с SMP, сетью и X, собственными хостами)» . cfe-dev (список рассылки). Архивировано из оригинала 7 сентября 2015 года.
  199. ^ Larabel, Майкл (12 апреля 2014). «Linux 3.15 почти может быть скомпилирован под LLVM Clang» . Фороникс . Проверено 10 июня 2014 .
  200. ^ Ларабель, Майкл . «Патч за патчем, LLVM Clang становится лучше при построении ядра Linux» . Фороникс . Проверено 20 ноября 2014 года .
  201. Edge, Джейк (7 мая 2013 г.). «LFCS: проект LLVMLinux» . LWN.net . Проверено 3 марта 2015 года .
  202. Möller, Jan-Simon (2 февраля 2014 г.). «LLVMLinux: ядро ​​Linux с крыльями дракона» (PDF) . LLVM Project . Проверено 3 марта 2015 года .
  203. ^ Desaulniers, Ник; Хакманн, Грег; Хайнс, Стивен (18 октября 2017 г.). «Встреча разработчиков LLVM 2017: Компиляция пользовательского пространства Android и ядра Linux с помощью LLVM» . YouTube .
  204. ^ Hackmann, Грег (2 февраля 2017). "Марлин-нуга-mr1-clang патч серии" . Дата обращения 6 декабря 2020 .
  205. ^ Kaehlcke, Matthias (22 октября 2018). «cross-kernel2: сделать clang компилятором по умолчанию для сборок ядра» . Дата обращения 6 декабря 2020 .
  206. ^ Larabel, Майкл (4 февраля 2019). «Использование LLVM Clang для компиляции ядра Linux снова нагревается благодаря Google» . Фороникс . Дата обращения 6 декабря 2020 .
  207. ^ Desaulniers, Ник (10 декабря 2019). "vts: kernel: применять vts_kernel_toolchain для всех TARGET_ARCH для R" . Дата обращения 6 декабря 2020 .
  208. ^ Desaulniers, Ник (19 ноября 2020). "Re: нарушение сигнатуры указателя функции" . LKML . Дата обращения 6 декабря 2020 .
  209. ^ Любовь, Роберт (2010). Разработка ядра Linux (3-е изд.). Эддисон-Уэсли. п. 364. ISBN 978-0-672-32946-3. OCLC  268788260 .
  210. Брэдфорд, Джон (8 марта 2003 г.). «Re: что такое OOPS» . LKML (список рассылки) . Проверено 30 октября 2010 года .
  211. ^ Любовь, Роберт (2010). Разработка ядра Linux . Эддисон Уэсли. п. 371. ISBN. 9780672329463. OCLC  268788260 .
  212. ^ "syslog (2) - страница руководства Linux" . man7.org . Проверено 15 августа 2020 .
  213. ^ "kmsg: экспортировать записи printk в интерфейс / dev / kmsg [LWN.net]" . lwn.net . Дата обращения 16 августа 2020 .
  214. ^ "systemd" . www.freedesktop.org . Дата обращения 16 августа 2020 .
  215. ^ "systemd-journald (8) - страница руководства Linux" . man7.org . Проверено 15 августа 2020 .
  216. ^ «Отладка ядра с помощью Ftrace - часть 1 [LWN.net]» . lwn.net . Проверено 15 сентября 2020 .
  217. ^ «Отладка ядра с помощью Ftrace - часть 2 [LWN.net]» . lwn.net . Проверено 15 сентября 2020 .
  218. ^ «ftrace - Трассировщик функций - Документация ядра Linux» . www.kernel.org . Проверено 15 сентября 2020 .
  219. ^ «Трассировка времени загрузки - Документация ядра Linux» . www.kernel.org . Проверено 19 сентября 2020 года .
  220. ^ «Kernel Probes (Kprobes) - Документация ядра Linux» . www.kernel.org . Дата обращения 6 октября 2020 .
  221. ^ «Uprobe-tracer: отслеживание событий на основе Uprobe - документация ядра Linux» . www.kernel.org . Дата обращения 6 октября 2020 .
  222. ^ "Использование kgdb, kdb и внутреннего отладчика ядра" . mirrors.edge.kernel.org . Дата обращения 3 ноября 2020 .
  223. ^ Джин Салли (2010). Pro встраиваемые системы Linux . Апресс. п. 252. ISBN. 9781430272267.
  224. ^ «Кодекс конфликта» . Проверено 4 февраля 2018 года .[ постоянная мертвая ссылка ]
  225. ^ Sharwood, Саймон (6 октября 2015). «Разработчик ядра Linux, который попросил Линуса Торвальдса прекратить словесные оскорбления, уходит из-за словесных оскорблений» . Реестр .
  226. Edge, Джейк (31 января 2018 г.). «Слишком много лордов, мало управляющих» . LWN.net . Проверено 4 февраля 2018 года .
  227. Корбет, Джонатан (6 ноября 2017 г.). «Убейте разработчиков ядра» . LWN.net . Проверено 4 февраля 2018 года .
  228. ^ "Состояние вытеснения-рт" . linuxplumbersconf.org . Архивировано из оригинального 15 октября 2016 года . Проверено 14 июня +2016 .
  229. Мейер, Дэвид (3 февраля 2010 г.). «Разработчик Linux объясняет, как удалить код ядра Android» . ZDNet . CBS Interactive . Проверено 3 февраля 2010 года .
  230. ^ «Глава 03: Обзор платформы maemo» . Обзор технологии maemo . Nokia . 2008. Архивировано из оригинального 16 -го июня 2008 года . Проверено 9 апреля 2010 года .
  231. ^ Kroah-Хартман, Грег (2 февраля 2010). «Android и сообщество ядра Linux» . Проверено 3 февраля 2010 года .
  232. ^ а б Роджер Йе (2017). Системное программирование Android . Packt Publishing. п. 14. ISBN 9781787120389.
  233. Торвальдс, Линус (19 сентября 2001 г.). «Истоки Linux - Линус Торвальдс» . YouTube . Дата обращения 6 декабря 2020 .
  234. ^ «Почему я ушел: разработчик ядра Кон Коливас» . Журнал APC . Журналы ACP. 24 июля 2007 года Архивировано из оригинала 7 июля 2011 года . Проверено 15 августа 2011 года .
  235. Корбет, Джонатан (25 июля 2007 г.). "Re: -mm планы слияния для 2.6.23" . LWN.net . Проверено 10 февраля 2018 .
  236. Кокс, Алан (28 июля 2009 г.). "Re: [ПАТЧ] кдесу сломано" . Проверено 10 февраля 2018 .
  237. Родригес, Голдвин (22 января 2011 г.). «История двух целей SCSI» . Проверено 14 февраля 2018 года .
  238. Steinmetz, Андреас (17 января 2013 г.). «LIO - сломанная целевая реализация iSCSI» . Проверено 14 февраля 2018 года .
  239. Пол, Райан (19 июня 2012 г.). «Линус Торвальдс говорит NVIDIA« ебать вас » . Проверено 14 февраля 2018 года .
  240. ^ Джон Голд (3 апреля 2014 г.). «Линус Торвальдс отстраняет ключевого разработчика Linux: паника в ядре, когда разработчик Systemd тыкает медведя» . Проверено 24 марта 2019 года .
  241. ^ Поттеринг, Леннарт (6 октября 2014). «О болезни сообщества ядра Linux» . Google+ . Архивировано из оригинала на 1 марта 2021 года . Проверено 10 февраля 2018 .
  242. ^ Brodkin, Джон (6 марта 2015). «VMware якобы нарушала лицензию Linux с открытым исходным кодом в течение многих лет» . Ars Technica . Проверено 14 февраля 2018 года .
  243. Маккарти, Кирен (26 августа 2016 г.). «Обидев всех в мире, Линус Торвальдс называет собственных адвокатов« отвратительной гнойной болезнью » » . Реестр . Проверено 14 февраля 2018 года .
  244. Корбет, Джонатан (10 сентября 2007 г.). «KS2007: Отношения с разработчиками и процесс развития» . LWN.net . Проверено 11 февраля 2018 .
  245. ^ Brodkin, Джон (16 июля 2013). «Линус Торвальдс защищает свое право позорить разработчиков ядра Linux» . ARS Technica . Проверено 11 февраля 2018 .
  246. Корбет, Джонатан (9 марта 2015 г.). «Код конфликта ядра» . LWN.net . Проверено 11 февраля 2018 .
  247. Корбет, Джонатан (18 сентября 2018 г.). «Кодекс, конфликт и поведение» . LWN.net .
  248. Рианна Коэн, Ноам (19 сентября 2018 г.). «После многих лет оскорбительных писем создатель Linux уходит в сторону» . Житель Нью-Йорка .
  249. ^ Ларабель, Майкл. «Удаление ненормативной лексики в комментариях к коду ядра: Linux получает« объятия » » . Фороникс . Проверено 15 июня 2019 .
  250. ^ "Linux Evolution" (PDF) . 26 марта 2008 г.
  251. ^ «Постоянное развитие: модель жизненного цикла ядра Linux» (PDF) . 25 октября 2011 г.
  252. ^ Kroah-Хартман, Грег (12 февраля 2008). «Re: Announce: Linux-next (Или мечта Андрея :-))» . Список рассылки ядра Linux (список рассылки) . Проверено 30 января 2017 года .
  253. ^ Уиллер, Дэвид А. «Ядро Linux 2.6: оно того стоит!» .
  254. ^ «Экономическое влияние FLOSS на инновации и конкурентоспособность сектора ИКТ ЕС» (PDF) (Таблица 3 на стр. 50).
  255. ^ «Оценка общей стоимости разработки дистрибутива Linux» (PDF) (Таблица на странице 6). Архивировано из оригинального (PDF) 11 июля 2010 года.
  256. ^ "Ядро на миллиард долларов" . Linux.slashdot.org. 24 февраля 2010 . Проверено 12 ноября 2010 года .
  257. ^ Уиллер, Дэвид. «Ядро Linux: оно того стоит!» . Архивировано 23 февраля 2021 года . Проверено 17 сентября 2012 года .
  258. ^ "Linux MAINTAINERS файл" . Архивировано из оригинального 12 января 2013 года .
  259. Торвальдс, Линус (16 сентября 2018 г.). «Выпущен Linux 4.19-rc4, приношу извинения и примечания к сопровождению» . LKML . Проверено 23 сентября 2018 года .
  260. ^ Александру Вадува, Алекс Гонсалес и Крис Симмондс (2016). Linux: встроенная разработка . Packt Publishing. п. 663. ISBN 9781787124455.
  261. ^ «Архивы ядра Linux» . Дата обращения 13 ноября 2019 .
  262. ^ a b Ямагата, Хироо (3 августа 1997 г.). «Прагматик свободного программного обеспечения» . HotWired . Архивировано из оригинального 10 февраля 2007 года . Проверено 21 февраля 2007 года .
  263. ^ "GPL-v2" . gnu.org .
  264. Корбет, Джонатан (31 января 2006 г.). «GPLv3 и ядро» . LWN.net . Проверено 21 февраля 2007 года .
  265. Торвальдс, Линус (8 сентября 2000 г.). «Linux-2.4.0-test8» . LKML (список рассылки) . Проверено 21 февраля 2007 года .
  266. ^ "gnu.org" . www.gnu.org . Проверено 18 октября 2017 года .
  267. Кокс, Алан (20 января 2006 г.). «Re: GPL V3 и Linux» . LKML (список рассылки) . Проверено 21 февраля 2007 года .
  268. ^ Шенкленд, Стивен (25 сентября 2006). «Лучшие программисты Linux, поддерживающие GPL 3» . News.com . CNET . Проверено 21 февраля 2007 года .
  269. ^ a b Джеймс Э. Дж. Боттомли, Мауро Карвалью Чехаб, Томас Глейкснер, Кристоф Хеллвиг, Дэйв Джонс, Грег Кроа-Хартман, Тони Лак, Эндрю Мортон, Тронд Майклбуст, Дэвид Вудхаус (15 сентября 2006 г.). «Позиция разработчиков ядра по GPLv3: опасности и проблемы с GPLv3» . LWN.net . Проверено 11 марта 2015 года .CS1 maint: uses authors parameter (link)
  270. ^ Petreley, Николай (27 сентября 2006). «Борьба со злом или борьба за внимание?» . linuxjournal.com . Проверено 11 марта 2015 года .
  271. ^ «Линус Торвальдс говорит, что GPL v3 нарушает все, за что стояла GPLv2» . Debconf 2014. 2014 . Проверено 21 марта 2018 года .
  272. ^ Кларк, Роб; Семвал, Сумит (1 ноября 2012 г.). «Структура совместного использования буфера DMA: Введение» (PDF) . Embedded Linux Conference . Проверено 2 августа 2014 .
  273. Кокс, Алан (10 октября 2012 г.). «[PATCH] dma-buf: используйте EXPORT_SYMBOL» . Инфраструктура прямого рендеринга (список рассылки) . Проверено 3 сентября 2013 года .
  274. Торвальдс, Линус (10 декабря 2003 г.). "RE: Linux GPL и исключение для двоичных модулей?" . LKML (список рассылки) . Проверено 31 декабря 2010 года .
  275. Торвальдс, Линус (3 декабря 2003 г.). "Re: Linux GPL и исключение для двоичных модулей?" . LKML (список рассылки) . Проверено 12 ноября 2010 года .
  276. ^ "Linux Firmware API - Документация ядра Linux" . www.kernel.org . Проверено 13 января 2020 года .
  277. ^ "Испорченные ядра - Документация ядра Linux" . www.kernel.org . Проверено 13 января 2020 года .
  278. ^ «Встроенная прошивка - Документация ядра Linux» . www.kernel.org . Проверено 10 июня 2020 .
  279. ^ «Регистрация Linux TM в США» . uspto.gov .
  280. ^ «Регистрация Linux TM в ЕС» . euipo.europa.eu . Проверено 28 ноября 2020 .
  281. ^ Хьюз, Фил (1 августа 1997 г.). «Спор о товарных знаках Linux» . Linux Journal . Belltown Медиа, Инк . Проверено 8 декабря 2010 года .
  282. ^ Хьюз, Фил (1 марта 1997 г.). «Действия, предпринятые в отношении торговой марки Linux» . Linux Journal . Belltown Медиа, Инк . Проверено 8 декабря 2010 года .
  283. ^ Gisselberg, Тоня (2010). «История товарных знаков Linux, операционной системы» (PDF) . Gisselberg Law Firm, Inc. Архивировано из оригинала (PDF) 11 июля 2011 года . Проверено 8 декабря 2010 года .

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

  • Торвальдс, Линус; Даймонд, Дэвид (2001). Просто для удовольствия: история случайного революционера . HarperBusiness . ISBN 978-0066620732.
  • Безроуков Николай. «Глава 4: Доброжелательный диктатор» . Портреты пионеров открытого исходного кода (электронная книга). Мягкая панорама.
  • «LinkSys и бинарные модули» . Еженедельный выпуск LWN.net. 16 октября 2003 г.
  • «Любимый талисман Linux» .
  • «Хронология Linux» .
  • «История Linux» . Архивировано из оригинального 10 сентября 2006 года.
  • «Обновить до ядра 2.6» .
  • Праневич, Иосиф (декабрь 2003 г.). «Чудесный мир Linux 2.6» . Архивировано из оригинала 16 июля 2003 года.
  • Аас, Джош (17 февраля 2005 г.). «Понимание планировщика ЦП Linux 2.6.8.1» . Архивировано из оригинального 29 сентября 2007 года.
  • «Изменения Linux» .
  • «Семинар по ядру Linux 2.6» . Архивировано из оригинала 2 февраля 2007 года.
  • «Драйверы устройств Linux» (3-е изд.).
  • «Понимание ядра Linux» (книга) (3-е изд.).
  • «Сеть ядра Linux, Рами Розен, 2014» (книга).
  • «Linux: GPL и двоичные модули» . Архивировано из оригинала 23 июля 2005 года.
  • «Анатомия ядра Linux» .

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

  • Официальный веб-сайт
    • Указатель документации ядра Linux
    • Справочные страницы ядра Linux
    • Ядро bugzilla и регрессии для каждой последней версии ядра
  • Kernel Newbies , источник различной информации, связанной с ядром
  • Покрытие ядра на LWN.net , авторитетном источнике информации о ядре
  • Bootlin's Elixir Cross Referencer , перекрестная ссылка на исходный код ядра Linux
  • Грег Кроа Хартман о ядре Linux на YouTube