Ядро Linux является свободным и открытым исходным кодом , [6] [7] монолитного , модульное , [8] многозадачность , Unix , как операционная система ядра . [9] Он был задуман и создан в 1991 году Линус Торвальдс [10] для его i386 -На PC, и вскоре был принят в качестве ядра для операционной системы GNU , [11] , который был создан в качестве бесплатной замены для UNIX . [12] С тех пор он породил множестводистрибутивы операционной системы , обычно также называемые Linux .
Разработчик | Линус Торвальдс и тысячи сотрудников |
---|---|
Написано в | C (95,7%) и другие языки, включая C ++ и ассемблер [2] [ необходим более качественный исходный код ] |
Семейство ОС | Unix-подобный |
Первый выпуск | 0,02 (5 октября 1991 | )
Последний релиз | 5.12.2 [3] (7 мая 2021 г . ) [±] |
Последний предварительный просмотр | 5.12-rc8 [4] (18 апреля 2021 г . ) [±] |
Репозиторий | |
Доступно в | английский |
Тип ядра | Монолитный |
Лицензия | GNU GPLv2 (только) с некоторым кодом в рамках совместимых вариантов GPL или разрешительных лицензий, таких как BSD, MIT [5] |
Официальный веб-сайт | www |
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) .
История
В апреле 1991 года Линус Торвальдс , в то время 21-летний студент факультета информатики в Университете Хельсинки , Финляндия , начал работать над некоторыми простыми идеями для операционной системы. Он начал с переключателя задач на языке ассемблера Intel 80386 и драйвера терминала . 25 августа 1991 года Торвальдс отправил следующее в comp.os.minix , группу новостей на Usenet : [24]
Я делаю (бесплатную) операционную систему (просто хобби, не будет такой большой и профессиональной, как gnu) для клонов 386 (486) AT . Это назревает с апреля и начинает готовиться. Я хотел бы получить любые отзывы о том, что людям нравится / не нравится в minix, поскольку моя ОС чем-то похожа на нее (среди прочего такая же физическая структура файловой системы (по практическим причинам)). В настоящее время я портировал bash (1.08) и gcc (1.40), и, похоже, все работает. Это означает, что я получу что-нибудь практичное в течение нескольких месяцев [...] Да, это не содержит никакого кода minix и имеет многопоточную fs. Это НЕ переносимый [ 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]
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.3 Торвальдс решил, что Linux достаточно развит, чтобы гарантировать новый основной номер, поэтому он выпустил версию 2.0.0 в июне 1996 года. [40] [41] Серия включала 41 выпуск. Основной особенностью 2.0 была поддержка симметричной многопроцессорной обработки (SMP) и поддержка большего количества типов процессоров.
Начиная с версии 2.0, Linux можно настраивать для выбора конкретных целей оборудования, а также для включения специфичных для архитектуры функций и оптимизаций. [30] делает * конфиг семейство команд kbuild используется для включения и настройки тысячи вариантов для создания специального ядра исполняемых файлов ( vmlinux ) и загружаемых модулей. [14] [15]
Версия 2.2, выпущенная 20 января 1999 г. [42], улучшила детализацию блокировок и управление SMP, добавила поддержку m68k , PowerPC , Sparc64 , Alpha и других 64-битных платформ. [43] Кроме того, добавлены новые файловые системы , включая Microsoft «s NTFS только для чтения возможностей. [43] В 1999 году IBM опубликовала свои исправления для кода Linux 2.2.13 для поддержки архитектуры S / 390 . [44]
Версия 2.4.0, выпущенная 4 января 2001 г. [45], содержала поддержку ISA Plug and Play , USB и PC Card . В Linux 2.4 добавлена поддержка Pentium 4 и Itanium (последний представил ia64 ISA, который был совместно разработан Intel и Hewlett-Packard для замены старого PA-RISC ), а также нового 64-битного процессора MIPS . [46] Разработка для 2.4. x немного изменился, так как на протяжении всей серии было доступно больше функций, включая поддержку Bluetooth , Logical Volume Manager (LVM) версии 1, поддержку RAID , файловых систем InterMezzo и ext3 .
Версия 2.6.0 была выпущена 17 декабря 2003 года. [47] Разработка для 2.6. x изменился дальше в сторону включения новых функций на протяжении всего сериала. Среди изменений, внесенных в серию 2.6: интеграция µClinux в исходные коды основного ядра, поддержка PAE , поддержка нескольких новых линий ЦП , интеграция Advanced Linux Sound Architecture (ALSA) в исходные коды основного ядра, поддержка до 2 32 пользователей (вместо 2 16 ), поддержка до 2 29 идентификаторов процессов (только 64-разрядные, 32-разрядные дуги по-прежнему ограничены до 215 ), [48] существенно увеличили количество типов устройств и количество устройств каждого типа, улучшенная поддержка 64-бит , поддержка файловых систем, которые поддерживают размер файлов до 16 терабайт , вытеснение в ядре , поддержка собственной библиотеки потоков POSIX (NPTL), интеграция Linux в пользовательском режиме в основную линию исходные коды ядра, интеграция SELinux с исходными кодами основного ядра, поддержка InfiniBand и многое другое.
Также следует отметить добавление широкого выбора файловых систем, начиная с версии 2.6. x : теперь ядро поддерживает большое количество файловых систем, некоторые из которых были разработаны для Linux, например ext3 , ext4 , FUSE , Btrfs , [49] и другие, родные для других операционных систем, таких как JFS , XFS , Minix, Xenix , Irix , Solaris , System V , Windows и MS-DOS . [50]
В 2005 году была сформирована стабильная команда в ответ на отсутствие дерева ядра, где люди могли бы работать над исправлением ошибок , и она продолжала бы обновлять стабильные версии. [51] В феврале 2008 года было создано дерево linux-next, служащее местом, где патчи, предназначенные для слияния, собирались во время следующего цикла разработки. [52] [53] Некоторые специалисты по сопровождению подсистем также приняли суффикс -next для деревьев, содержащих код, который они хотят отправить для включения в следующий цикл выпуска. По состоянию на январь 2014 г.[Обновить], находящаяся в разработке версия Linux хранится в нестабильной ветке с именем linux-next . [54]
Раньше Linux поддерживался без помощи автоматизированной системы управления исходным кодом, пока в 2002 году разработка не переключилась на BitKeeper . Оно было свободно доступно разработчикам Linux, но не было бесплатным программным обеспечением . В 2005 году из-за попыток его реинжиниринга компания, которой принадлежало программное обеспечение, отказалась от поддержки сообщества Linux. В ответ Торвальдс и другие написали Git . Новая система была написана в течение нескольких недель, а через два месяца было выпущено первое официальное ядро, созданное с ее использованием. [55]
Подробную информацию об истории серии ядер 2.6 можно найти в файлах журнала изменений в области выпуска исходного кода серии ядра 2.6 на сайте kernel.org . [56]
В июле 2011 года Торвальдс отметил 20-летие Linux выпуском версии ядра 3.0.0. [40] Поскольку 2.6 был номером версии в течение 8 лет, в ядро нужно было добавить новую личность uname26, которая сообщает 3.x как 2.6.40 + x, чтобы старые программы работали. [57]
Версия 3.0 была выпущена 22 июля 2011 года. [58] 30 мая 2011 года Торвальдс объявил, что большим изменением является «НИЧЕГО. Абсолютно ничего». и спросил: «... давайте удостоверимся, что мы действительно сделаем следующий выпуск не просто новым блестящим номером, но и хорошим ядром». [59] После ожидаемых 6-7 недель процесса разработки он будет выпущен к 20-летию Linux.
11 декабря 2012 года Торвальдс решил снизить сложность ядра, отказавшись от поддержки процессоров i386 , сделав ядро серии 3.7 последним, которое все еще поддерживает исходный процессор. [60] [61] Та же серия унифицированная поддержка процессора ARM . [62]
Версия 3.11, выпущенная 2 сентября 2013 года [63], добавляет много новых функций, таких как новый флаг O_TMPFILE для уменьшения уязвимостей временных файлов, экспериментальное динамическое управление питанием AMD Radeon , опрос сети с малой задержкой и zswap (сжатый кэш подкачки). [64]
Изменение нумерации с 2.6.39 на 3.0 и с 3.19 на 4.0 не повлекло за собой значимого технического различия. Главный номер версии был увеличен, чтобы избежать больших второстепенных номеров. [58] [65] Стабильные ядра 3.xy были выпущены до версии 3.19 в феврале 2015 года.
В апреле 2015 года Торвальдс выпустил ядро версии 4.0. [40] К февралю 2015 года Linux получила помощь от почти 12000 программистов из более чем 1200 компаний, включая некоторых из крупнейших мировых поставщиков программного и аппаратного обеспечения. [66] Версия 4.1 Linux, выпущенная в июне 2015 года, содержит более 19,5 миллионов строк кода, внесенных почти 14 000 программистов. [67]
В общей сложности 1991 разработчик, из которых 334 являются первыми сотрудниками, добавили более 553 000 строк кода в версию 5.8, побив рекорд, ранее установленный версией 4.9. [68]
Согласно ежегодному Девелопером переполнению стека в Survey 2019, более чем 53% всех респондентов разработали программное обеспечение для операционной системы Linux и около 27% для Android , [69] , хотя только около 25% развивается с Linux на базе операционных систем. [70]
Большинство веб - сайтов работают на Linux на базе операционных систем , [71] [72] и все 500 самых мощных суперкомпьютеров мира используют какой - то ОС на базе Linux. [73]
Дистрибутивы Linux объединяют ядро с системным программным обеспечением (например, библиотекой GNU C , systemd и другими утилитами и демонами Unix ) и широким набором прикладного программного обеспечения , но их доля использования на настольных компьютерах мала по сравнению с другими операционными системами.
Android , на который приходится большая часть установленной базы всех операционных систем для мобильных устройств, [74] [75] [76] ответственен за растущее использование ядра Linux [30] вместе с его широким использованием в больших множество встраиваемых устройств .
Архитектура и особенности
Linux - это монолитное ядро с модульной конструкцией (например, оно может вставлять и удалять загружаемые модули ядра во время выполнения), поддерживающее большинство функций, когда-то доступных только в ядрах с закрытым исходным кодом несвободных операционных систем. В остальной части статьи используется соглашение о UNIX и Unix-подобных операционных системах на официальных страницах руководства . Цифры, следующие за именами команд, интерфейсов и других функций, служат для указания раздела (т. Е. Типа компонента или функции ОС), к которому они принадлежат (например, execve (2) относится к системному вызову, а exec (3) относится к оболочке библиотеки пользовательского пространства):
- параллельные вычисления и (при наличии достаточного количества ядер ЦП для задач, которые готовы к запуску) даже истинное параллельное выполнение многих процессов одновременно (каждый из которых имеет один или несколько потоков выполнения ) на архитектурах SMP и NUMA ;
- выбор и настройка сотен функций ядра и драйверов (с помощью одного из make * config семейство команд перед запуском компиляции), [16] [15] [14] изменение параметров ядра перед загрузкой (обычно путем вставки инструкций в строки меню GRUB2 ) и тонкая настройка поведения ядра при запуске- время (используя sysctl (8) к / proc / sys / ); [17] [18] [19]
- конфигурация (снова используя make * config ) и модификации политик во время выполнения [77] (через приятно (2) , setpriority (2) , а семейство sched _ * (2) syscalls) планировщиков задач, которые позволяют выполнять вытесняющую многозадачность (как в пользовательском режиме , так и, начиная с серии 2.6, в режиме ядра [78] [79] ); Completely Fair Scheduler (CFS) является планировщиком по умолчанию Linux с 2007 года , и он использует красно-черное дерево , которое может выполнять поиск, вставка и удаление информации о процессе ( задача структура ) с O (журнал п) сложность времени , где п есть число запускаемых задач; [80] [81]
- расширенное управление памятью с выгружаемой виртуальной памятью ;
- механизм межпроцессного взаимодействия и синхронизации ;
- виртуальная файловая система на вершине нескольких конкретных файловых систем ( ext4 , Btrfs , XFS , JFS , FAT32 , и многие другие);
- настраиваемые планировщики ввода / вывода, ioctl (2) [82] системный вызов, который управляет параметрами базового устройства специальных файлов (это нестандартный системный вызов, поскольку аргументы, возврат и семантика зависят от рассматриваемого драйвера устройства), поддержка асинхронного ввода-вывода POSIX [ 83] (однако, поскольку они плохо масштабируются с многопоточными приложениями, семейство специальных системных вызовов ввода-вывода Linux ( io _ * (2) [84] ) необходимо было создать для управления контекстами асинхронного ввода-вывода, подходящими для параллельной обработки);
- Виртуализация на уровне ОС (с Linux-VServer ), паравиртуализация и виртуализация с аппаратной поддержкой (с KVM или Xen и с использованием QEMU для аппаратной эмуляции); [85] [86] [87] [88] [89] [90] На гипервизоре Xen ядро Linux обеспечивает поддержку для создания дистрибутивов Linux (таких как openSuSE Leap и многих других), которые работают как Dom0 , то есть виртуальных машин. хост-серверы, которые обеспечивают среду управления для виртуальных машин пользователя ( DomU ). [91]
- механизмы безопасности для дискреционного и обязательного контроля доступа (SELinux, AppArmor, POSIX ACL и другие); [92] [93]
- несколько типов многоуровневых протоколов связи (включая набор Интернет-протоколов ).
Драйверы устройств и расширения ядра выполняются в пространстве ядра ( кольцо 0 во многих архитектурах ЦП ) с полным доступом к оборудованию, хотя некоторые исключения выполняются в пространстве пользователя , например, файловые системы на основе FUSE / CUSE и части UIO. [94] [95] графическая система , большинство людей используют с Linux не работает в ядре. В отличие от стандартных монолитных ядер, драйверы устройств легко конфигурируются как модули и загружаются или выгружаются во время работы системы, а также могут быть предварительно очищены при определенных условиях, чтобы правильно обрабатывать аппаратные прерывания и лучше поддерживать симметричную многопроцессорность . [79] По выбору Linux не имеет стабильного двоичного интерфейса приложения драйвера устройства . [96]
Linux обычно использует защиту памяти и виртуальной памяти , а также может обрабатывать неравномерный доступ к памяти , [97] , однако проект вобрал μClinux который также позволяет запускать Linux на микроконтроллерах без виртуальной памяти. [98]
Оборудование представлено в файловой иерархии. Пользовательские приложения взаимодействуют с драйверами устройств через записи в / dev или / sys каталоги. [99] Информация о процессах также отображается в файловую систему через Каталог / proc . [99]
Пользовательский режим | Пользовательские приложения | bash , LibreOffice , GIMP , Blender , 0 AD , Mozilla Firefox , ... | ||||
---|---|---|---|---|---|---|
Системные компоненты | Демоны : Systemd , runit , udevd , polkitd , SSHD , Smbd ... | Оконный менеджер : X11 , Wayland , SurfaceFlinger (Android) | Графика : Mesa , AMD Catalyst , ... | Другие библиотеки: GTK , Qt , EFL , SDL , SFML , FLTK , GNUstep , ... | ||
Стандартная библиотека C | fopen , execv , malloc , memcpy , localtime , pthread_create ... (до 2000 подпрограмм ) Glibc цели , чтобы быть быстрой, MUSL и uClibc целевых встроенные системы, бионические , написанные для Android и т.д. Все стремятся быть POSIX / SUS -Совместимы. | |||||
Режим ядра | Ядро Linux | stat , splice , dup , read , open , ioctl , write , mmap , close , exit И т.д. (около 380 системных вызовов) Ядро Linux Интерфейс системных вызовов (SCI, цели быть POSIX / SUS -Совместим) [ править ] | ||||
Подсистема планирования процессов | Подсистема IPC | Подсистема управления памятью | Подсистема виртуальных файлов | Сетевая подсистема | ||
Другие компоненты: ALSA , DRI , evdev , LVM , устройство картографа , Linux Network Scheduler , Netfilter Модули безопасности Linux : SELinux , Tomoyo , AppArmor , Хлопайте | ||||||
Аппаратное обеспечение ( ЦП , основная память , устройства хранения данных и т. Д.) |
Интерфейсы
Linux является клоном UNIX и нацелен на соответствие POSIX и единой спецификации UNIX . [100] Ядро также предоставляет системные вызовы и другие интерфейсы, специфичные для Linux. Чтобы быть включенным в официальное ядро, код должен соответствовать ряду правил лицензирования. [23] [5]
Двоичный интерфейс приложения Linux (ABI) между ядром и пользовательским пространством имеет четыре степени стабильности (стабильный, тестируемый, устаревший, удаленный); [101] однако ожидается , что системные вызовы никогда не изменятся, чтобы не нарушить работу программ пользовательского пространства , которые на них полагаются. [102]
Загружаемые модули ядра (LKM) по своей конструкции не могут полагаться на стабильный ABI. [96] Следовательно, они всегда должны перекомпилироваться всякий раз, когда в системе устанавливается новый исполняемый файл ядра, иначе они не будут загружены. Встроенные в дерево драйверы, сконфигурированные для того, чтобы стать неотъемлемой частью исполняемого файла ядра ( vmlinux ), статически связаны процессом сборки.
Также нет гарантии стабильности внутреннего API уровня исходного кода [96], и по этой причине код драйверов устройств , а также код любой другой подсистемы ядра должен обновляться по мере развития ядра. Любой разработчик, который вносит изменения в API, должен исправить любой код, который ломается в результате их изменения. [103]
API между ядром и пользовательским пространством
Набор API ядра Linux, который касается интерфейсов, предоставляемых пользовательским приложениям, в основном состоит из системных вызовов, специфичных для UNIX и Linux . [104] Системный вызов - это точка входа в ядро Linux. [105] Например, среди специфичных для Linux есть семейство clone (2) системные вызовы. [106] Большинство расширений должны быть включены путем определения_GNU_SOURCE
макроса в файле заголовка или при компиляции кода пользователя. [107]
Системные вызовы могут быть вызваны только с помощью инструкций сборки, которые позволяют переход из непривилегированного пользовательского пространства в привилегированное пространство ядра в кольце 0 . По этой причине стандартная библиотека C (libC) действует как оболочка для большинства системных вызовов Linux, предоставляя функции C, которые, только если они необходимы, [108] могут прозрачно входить в ядро, которое будет выполняться от имени вызывающего. процесс. [104] Для тех системных вызовов, которые не предоставляются libC, например быстрого мьютекса пользовательского пространства ( futex ), [109] библиотека предоставляет функцию, называемую syscall (2), который можно использовать для их явного вызова. [110]
Псевдо файловых систем (например, sysfs и PROCFS файловых систем) и специальные файлы (например, /dev/random
, /dev/sda
, /dev/tty
и многие другие) представляют собой еще один слой интерфейса к структурам данных ядра , представляющие аппаратные средства или логические устройства (программное обеспечение). [111] [112]
ABI между ядром и пользовательским пространством
Из-за различий, существующих между сотнями различных реализаций ОС Linux, исполняемые объекты, даже если они скомпилированы, собраны и связаны для работы на определенной аппаратной архитектуре (то есть они используют ISA целевого оборудования), часто не может работать в разных дистрибутивах Linux. Эта проблема в основном связана с конфигурациями конкретного дистрибутива и набором исправлений, примененных к коду ядра Linux, различиями в системных библиотеках, службах (демонах), иерархиях файловых систем и переменных среды.
Основным стандартом, касающимся приложений и бинарной совместимости дистрибутивов Linux, является Linux Standard Base (LSB). [113] [114] Однако LSB выходит за рамки того, что касается ядра Linux, потому что он также определяет спецификации рабочего стола, библиотеки X и Qt, которые имеют мало общего с ним. [115] LSB версии 5 построен на нескольких стандартах и черновиках (POSIX, SUS, X / Open, File System Hierarchy (FHS) и др.). [116]
Части LSB, в значительной степени относящиеся к ядру, - это General ABI (gABI), [117], особенно System V ABI [118] [119] и Executable and Linking Format (ELF), [120] [121] и Специфический для процессора ABI (psABI), например Core Specification для X86-64. [122] [123]
Стандарт ABI для того, как x86_64 пользовательские программы используют системные вызовы для загрузки номер системного вызова в RAx регистр и другие параметры в RDI , риши , RDX , r10 , r8 и r9 , и , наконец , поставить системный вызов инструкции по сборке в код. [124] [125] [126]
Внутриядерный API
Между различными подсистемами используется несколько внутренних API-интерфейсов ядра. Некоторые из них доступны только в подсистемах ядра, в то время как несколько ограниченный набор символов в ядре (т. Е. Переменных, структур данных и функций) предоставляется также динамически загружаемым модулям (например, драйверам устройств, загружаемым по запросу), независимо от того, являются ли они экспортируется с EXPORT_SYMBOL () и EXPORT_SYMBOL_GPL () макросы [128] [129] (последний только для модулей , выпущенных под GPL-совместимой лицензии). [130]
Linux предоставляет встроенные в ядро API-интерфейсы, которые манипулируют структурами данных (например, связанными списками , основами системы счисления , [131] красно-черными деревьями , [132] очередями ) или выполняют общие процедуры (например, копируют данные из и в пользовательское пространство, выделяют память, выводить строки в системный журнал и т. д.), которые оставались стабильными, по крайней мере, с Linux версии 2.6. [133] [134] [135]
Встроенные в ядро API включают библиотеки низкоуровневых общих служб, используемых драйверами устройств:
- Интерфейсы SCSI и libATA - соответственно протокол одноранговой пакетной связи для устройств хранения, подключенных к USB, SATA, SAS, Fibre Channel, FireWire, устройству ATAPI, [136] и встроенная в ядро библиотека для поддержки [S] Хост-контроллеры и устройства ATA. [137]
- Direct Rendering Manager (DRM) и настройка режима ядра (KMS) - для взаимодействия с графическими процессорами и поддержки потребностей современного 3D-ускоренного видеооборудования [138], а также для настройки разрешения экрана, глубины цвета и частоты обновления [139]
- Буферы DMA ( DMA-BUF ) - для совместного использования буферов для аппаратного прямого доступа к памяти через несколько драйверов устройств и подсистем [140] [141] [142]
- Video4Linux - для оборудования видеозахвата
- Advanced Linux Sound Architecture (ALSA) - для звуковых карт
- Новый API - для контроллеров сетевого интерфейса
- mac80211 - для контроллеров беспроводного сетевого интерфейса [143]
Встроенный в ядро ABI
Разработчики Linux предпочитают не поддерживать стабильный встроенный в ядро ABI. [144] Модули, скомпилированные для определенной версии ядра, не могут быть загружены в другую версию без повторной компиляции, предполагая, что исходный уровень API в ядре остался прежним, в противном случае также необходимо соответствующим образом изменить код модуля. [96]
Процессы и потоки
Linux создает процессы с помощью clone (2) или новее clone3 (2) [145] системные вызовы. В зависимости от заданных параметров новая сущность может совместно использовать большую часть ресурсов вызывающего абонента или не использовать их вообще. Эти системные вызовы могут создавать новые объекты, начиная от новых независимых процессов (каждый из которых имеет специальный идентификатор, называемый TGID в структуре данных task_struct в пространстве ядра, хотя тот же идентификатор называется PID в пространстве пользователя), до новых потоков выполнения в вызывающем процессе (посредством с помощью Параметр CLONE_THREAD ). В этом последнем случае новый объект владеет тем же TGID вызывающего процесса и, следовательно, имеет тот же PID в пользовательском пространстве. [146] [147]
Если исполняемый файл динамически связан с разделяемыми библиотеками, динамический компоновщик (для объектов ELF обычно /lib/ld-linux.so.2 ) используется для поиска и загрузки необходимых объектов, подготовки программы к запуску и последующего ее запуска. [148]
Родной POSIX Thread Library , просто известный как NPTL, [149] обеспечивает стандартный интерфейс POSIX Threads ( Pthreads ) в пользовательском пространстве [150] Всякий раз , когда новый поток создается с помощью pthread_create (3) POSIX интерфейс, [151]Семейство системных вызовов clone (2) также должно иметь адрес функции, к которой должен перейти новый поток. Ядро Linux предоставляет futex (7) (аббревиатура от «Fast user-space mutexes») механизмы для быстрой блокировки и синхронизации пользовательского пространства; [152] большинство операций выполняется в пользовательском пространстве, но может потребоваться взаимодействие с ядром, используя системный вызов futex (2) . [109]
Особую категорию потоков составляют так называемые потоки ядра . Их не следует путать с вышеупомянутыми потоками выполнения пользовательских процессов. Потоки ядра существуют только в пространстве ядра, и их единственная цель - одновременно выполнять задачи ядра. [153]
Иными словами, всякий раз, когда создается независимый процесс, системные вызовы возвращаются точно к следующей инструкции той же программы, одновременно в родительском процессе и в дочернем (т. Е. Одна программа, два процесса). Различные возвращаемые значения (по одному на процесс) позволяют программе знать, в каком из двух процессов она выполняется в настоящее время. Эта информация нужна программам, потому что дочерний процесс через несколько шагов после дублирования процесса обычно вызывает системный вызов execve (2) (возможно, через семейство exec (3) функции оболочки в glibC) и заменить программу, которая в настоящее время выполняется вызывающим процессом, новой программой с вновь инициализированным стеком, кучей и (инициализированными и неинициализированными) сегментами данных. [154] Когда это сделано, это приводит к двум процессам, которые запускают две разные программы.
В зависимости от эффективного идентификатора пользователя ( euid ) и эффективного идентификатора группы ( egid ) процесс, выполняющийся с нулевыми привилегиями пользователя ( root , системный администратор, владеет идентификатором 0), может выполнять все (например, убить все другие процессы). или рекурсивно уничтожить целые файловые системы), вместо этого ненулевые пользовательские процессы не могут. Возможности (7) делят привилегии, традиционно связанные с суперпользователем, на отдельные единицы, которые могут независимо включаться и отключаться родительским процессом или отбрасываться самим дочерним процессом. [155]
Планирование и приоритетное прерывание
Планировщик Linux является модульным в том смысле, что он позволяет использовать различные классы и политики планирования. [156] Классы планировщика - это подключаемые алгоритмы планировщика, которые могут быть зарегистрированы с помощью базового кода планировщика. Каждый класс планирует различные типы процессов. Основной код планировщика выполняет итерацию по каждому классу в порядке приоритета и выбирает планировщик с наивысшим приоритетом, у которого есть планируемый объект типа struct sched_entity, готовый к запуску. [157] Сущностями могут быть потоки, группы потоков и даже все процессы конкретного пользователя.
Linux обеспечивает как приоритетное прерывание работы пользователей, так и полное прерывание обслуживания ядра . [158] Вытеснение сокращает время ожидания , увеличивает скорость отклика, [159] и делает Linux более подходящим для настольных приложений и приложений реального времени .
Для обычных задач по умолчанию ядро использует класс Completely Fair Scheduler (CFS), представленный в версии ядра 2.6.23. [80] Внутренне этот класс планировщика по умолчанию определен в макросе заголовка C как SCHED_NORMAL
. В других ядрах POSIX аналогичная политика, известная как SCHED_OTHER
выделяет временные интервалы ЦП (т. Е. Назначает абсолютные интервалы процессорного времени в зависимости от заранее определенного или динамически вычисляемого приоритета каждого процесса). Linux CFS устраняет абсолютные временные интервалы и назначает справедливую долю процессорного времени в зависимости от таких параметров, как общее количество запущенных процессов и время, которое они уже были запущены; эта функция также принимает во внимание вес, который зависит от их относительных приоритетов (хорошие значения). [160]
С приоритетом пользователя планировщик ядра может заменить текущий процесс выполнением переключения контекста на другой, который, следовательно, получает вычислительные ресурсы для работы (ЦП, память и т. Д.). Делает это по алгоритму CFS (в частности, использует переменную с именем vruntime для сортировки объектов, а затем выбирает тот, который имеет меньшее vruntime, - т. е. планируемый объект, на который приходится наименьшая доля процессорного времени), для активной политики планировщика и относительных приоритетов. [161] С приоритетным приоритетом ядра ядро может выполнять приоритетное задание, когда возвращается обработчик прерывания, когда задачи ядра блокируются и когда подсистема явно вызывает функцию schedule ().
Ядро также содержит два POSIX-совместимых [162] класса планирования в реальном времени с именами SCHED_FIFO
(« первым пришел - первым обслужен» в реальном времени ) и SCHED_RR
( циклический перебор в реальном времени ), оба из которых имеют приоритет над классом по умолчанию. [156] Дополнительная политика планирования, известная как SCHED DEADLINE
реализация алгоритма первого крайнего срока (EDF), была добавлена в версию ядра 3.14, выпущенную 30 марта 2014 года. [163] [164] SCHED_DEADLINE
имеет приоритет над всеми другими классами планирования.
Патч ядра Linux PREEMPT_RT
обеспечивает полное вытеснение критических секций, обработчиков прерываний и кодовых последовательностей "отключения прерывания". [165] Частичная интеграция исправлений Linux реального времени привнесла вышеупомянутые функции в основную линию ядра. [166]
Параллелизм и синхронизация
Ядро имеет разные причины параллелизма (например, прерывания, нижние половины, приоритетное выполнение задач ядра и пользователей, симметричная многопроцессорная обработка). [167] Для защиты критических областей (участков кода, которые должны выполняться атомарно), областей разделяемой памяти (таких как глобальные переменные и другие структуры данных с глобальной областью видимости) и областей памяти, которые можно асинхронно изменять аппаратно (например, имея C квалификатор типа ), Linux предоставляет большой набор инструментов. Они состоят из атомарных типов (которыми можно управлять только с помощью набора определенных операторов), спин-блокировок , семафоров , мьютексов , [168] [169] и алгоритмов без блокировки (например, RCU ). [170] [171] [172] Большинство алгоритмов без блокировки построены поверх барьеров памяти с целью принудительного упорядочивания памяти и предотвращения нежелательных побочных эффектов из-за оптимизации компилятора . [173] [174] [175] [176]volatile
Управление прерываниями
Управление прерываниями , хотя его можно рассматривать как единое задание, разделено на две отдельные части. Это разделение на две части связано с разными временными ограничениями и потребностями в синхронизации задач, из которых состоит управление. Первая часть состоит из асинхронных обработок прерывания обслуживания , что в Linux известен как верхняя половина , в то время как вторая часть осуществляются одним из трех типов так называемых нижних половин ( softirq , Тасклеты, и рабочие очереди ) . [177] Подпрограммы обслуживания прерываний Linux могут быть вложенными (т. Е. Новое IRQ может перехватывать прерывание в ISR с высоким приоритетом, которое вытесняет любые другие ISR с более низким приоритетом).
Управление памятью
Управление памятью в Linux - сложная тема. Прежде всего, ядро не выгружается на страницы (т. Е. Оно всегда находится в физической памяти и не может быть выгружено на диск). В ядре нет защиты памяти (нет сигналов SIGSEGV , в отличие от пользовательского пространства), поэтому нарушения памяти приводят к нестабильности и сбоям системы. [178]
Как уже говорилось, Linux реализует выгружаемую виртуальную память. Он поддерживает информацию о каждой странице кадров из оперативной памяти в уместна структур данных (типа struct page ), которые заполняются сразу после загрузки и хранятся до завершения работы, независимо от того, связаны ли они с виртуальными страницами или нет. Кроме того, он классифицирует все страничные фреймы в зонах в соответствии с их архитектурно-зависимыми ограничениями и предполагаемым использованием. Например, страницы, зарезервированные для операций DMA, находятся в ZONE_DMA, страницы, которые не сопоставлены постоянно с виртуальными адресами, находятся в ZONE_HIGHMEM (в архитектуре x86_32 эта зона предназначена для физических адресов более 896 МБ, в то время как x86_64 не нуждается в этом, потому что x86_64 может постоянно отображать физические страницы, которые находятся по более высоким адресам), и все, что остается (за исключением других менее используемых классификаций), находится в ZONE_NORMAL.
Поддерживаемые архитектуры
Первоначально не предназначенный для переносимости , [24] [180] Linux в настоящее время является одним из наиболее широко переносимых ядер операционных систем, работающих в широком диапазоне систем от архитектуры ARM до мэйнфреймов IBM z / Architecture . Первый порт был выполнен на платформе Motorola 68000 . Модификации ядра были настолько фундаментальными, что Торвальдс рассматривал версию Motorola как форк и «Linux-подобную операционную систему». [180] Однако это побудило Торвальдса возглавить серьезную реструктуризацию кода, чтобы облегчить перенос на другие вычислительные архитектуры. Первый Linux, который в едином дереве исходных текстов содержал код более чем для i386, поддерживал 64-битную платформу DEC Alpha AXP . [181] [182] [180]
Linux работает как основная операционная система на IBM «s Summit ; по состоянию на октябрь 2019 г.[Обновить]все 500 самых быстрых суперкомпьютеров в мире работают под управлением той или иной операционной системы, основанной на ядре Linux [13], что является большим изменением по сравнению с 1998 годом, когда в список был добавлен первый суперкомпьютер Linux. [183]
Linux также был перенесен на различные портативные устройства, такие как Apple iPhone 3G и iPod . [184]
Поддерживаемые устройства
В 2007 году был начат проект LKDDb по созданию всеобъемлющей базы данных оборудования и протоколов, известных ядрам Linux. [185] База данных создается автоматически путем статического анализа исходных кодов ядра. Позже, в 2014 году, был запущен проект Linux Hardware по автоматическому сбору базы данных всех протестированных конфигураций оборудования с помощью пользователей различных дистрибутивов Linux. [186]
Живое исправление
Обновления без перезагрузки можно даже применить к ядру с помощью технологий оперативного исправления, таких как Ksplice , kpatch и kGraft . Минималистичные основы для установки исправлений в реальном времени были объединены с основной веткой ядра Linux в версии ядра 4.0, которая была выпущена 12 апреля 2015 года. Эти основы, известные как livepatch и основанные в основном на функциональности ядра ftrace , образуют общее ядро, способное поддерживать горячее исправление как kGraft, так и kpatch, предоставляя интерфейс прикладного программирования (API) для модулей ядра, которые содержат горячие исправления, и двоичный интерфейс приложения (ABI) для утилит управления пользовательским пространством. Однако общее ядро, включенное в ядро Linux 4.0, поддерживает только архитектуру x86 и не предоставляет никаких механизмов для обеспечения согласованности на уровне функций при применении горячих исправлений. По состоянию на апрель 2015 г.[Обновить], продолжается работа по переносу kpatch и kGraft на общее ядро динамического исправления, предоставляемое основной веткой ядра Linux. [187] [188] [189]
Безопасность
Ошибки ядра представляют собой потенциальные проблемы безопасности. Например, они могут допускать повышение привилегий или создавать векторы атак типа «отказ в обслуживании» . За прошедшие годы были обнаружены и исправлены многочисленные ошибки, влияющие на безопасность системы. [190] Для повышения безопасности ядра часто внедряются новые функции. [191] [192]
Возможности (7) уже были представлены в разделе о процессах и потоках. Android использует их, а systemd дает администраторам полный контроль над возможностями процессов. [193]
Linux предлагает множество механизмов для уменьшения поверхности атаки ядра и повышения безопасности, которые в совокупности известны как модули безопасности Linux (LSM). [194] Они включают модуль Security-Enhanced Linux (SELinux), код которого был первоначально разработан и затем опубликован NSA , [195] и AppArmor [93] среди других. SELinux сейчас активно развивается и поддерживается на GitHub . [92] SELinux и AppArmor обеспечивают поддержку политик безопасности контроля доступа, включая обязательный контроль доступа (MAC), хотя они существенно различаются по сложности и масштабам.
Еще одна функция безопасности - это Seccomp BPF (SECure Computing with Berkeley Packet Filters), который работает путем фильтрации параметров и сокращения набора системных вызовов, доступных для пользовательских приложений. [196]
Критики обвиняют разработчиков ядра в том, что они скрывают недостатки безопасности или, по крайней мере, не заявляют о них; в 2008 году Линус Торвальдс ответил на это следующим образом: [197] [198]
Я лично считаю ошибки безопасности просто «нормальными ошибками». Я не скрываю их, но у меня также нет никаких оснований думать, что было бы неплохо отслеживать их и объявлять о них как о чем-то особенном ... одна причина, по которой я отказываюсь беспокоиться о всей безопасности Цирк - это то, что я думаю, он прославляет - и таким образом поощряет - неправильное поведение. Это делает людей из службы безопасности «героями», как будто люди, которые не исправляют обычные ошибки, не так важны. На самом деле, все скучные нормальные ошибки являются способом более важно, просто потому , что там [так] намного больше из них. Я не думаю, что какую-то впечатляющую дыру в безопасности следует прославлять или заботиться о ней как о более «особенной», чем случайный впечатляющий сбой из-за плохой блокировки.
Дистрибутивы 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%) категории. [199]
Вместо дорожной карты есть технические рекомендации. Вместо централизованного распределения ресурсов есть люди и компании, которые все заинтересованы в дальнейшем развитии ядра Linux, совершенно независимо друг от друга: такие люди, как Линус Торвальдс, и я не планируем эволюцию ядра. Мы не сидим сложа руки и не придумываем дорожную карту на следующие два года, а затем выделяем ресурсы на различные новые функции. Это потому, что у нас нет ресурсов. Все ресурсы принадлежат различным корпорациям, которые используют Linux и вносят в него свой вклад, а также различным независимым участникам. Решают те люди, которые владеют ресурсами ...
- Эндрю Мортон , 2005 г.
Управление исходным кодом
Сообщество разработчиков Linux использует Git для управления исходным кодом . Пользователи Git клонируют последнюю версию дерева Торвальдса с помощью git-clone (1) [200] и обновляйте его, используя git-pull (1) . [201] [202] Вклады отправляются в виде исправлений в виде текстовых сообщений на LKML (и часто также в другие списки рассылки, посвященные определенным подсистемам). Патчи должны соответствовать набору правил и формальному языку, который, среди прочего, описывает, какие строки кода должны быть удалены, а какие другие должны быть добавлены к указанным файлам. Эти исправления могут обрабатываться автоматически, чтобы системные администраторы могли применять их для внесения лишь некоторых изменений в код или для постепенного обновления до следующей версии. [203] Linux распространяется также в форматах GNU zip (gzip) и bzip2 .
Отправка кода в ядро
Разработчик, желающий изменить ядро Linux, начинает с разработки и тестирования этого изменения. В зависимости от того, насколько значительным является изменение и сколько подсистем оно модифицирует, изменение будет либо представлено как один патч, либо как несколько патчей исходного кода . В случае единственной подсистемы, которая поддерживается одним сопровождающим, эти исправления отправляются по электронной почте обслуживающему персоналу подсистемы с соответствующим списком рассылки в Cc. Сопровождающий и читатели списка рассылки рассмотрят исправления и предоставят отзывы. После завершения процесса проверки сопровождающий подсистемы принимает исправления в соответствующем дереве ядра Git . Если изменения в ядре Linux представляют собой исправления ошибок, которые считаются достаточно важными, запрос исправлений будет отправлен Торвальдсу в течение нескольких дней. В противном случае запрос на перенос будет отправлен Торвальдсу во время следующего окна слияния. Окно слияния обычно длится две недели и начинается сразу после выпуска предыдущей версии ядра. [204] В дереве исходных текстов ядра Git перечислены все разработчики, которые внесли свой вклад в ядро Linux, в каталоге Credits, а все специалисты по сопровождению подсистемы перечислены в разделе « Сопровождающие» . [205]
Язык программирования и стиль кодирования
Linux написан на специальном языке программирования C, поддерживаемом GCC , компилятором, который во многих отношениях расширяет стандарт C, например, используя встроенные разделы кода, написанного на языке ассемблера (в синтаксисе GCC «AT & T-style») целевой архитектуры. . С 2002 года весь код должен соответствовать 21 правилу, составляющему стиль кодирования ядра Linux. [206] [207]
Набор инструментов GNU
GNU Compiler Collection (GCC или GNU CC) по умолчанию компилятор для магистральных источников Linux и вызывается с помощью утилиты под названием марки . Затем GNU Assembler (чаще называемый GAS или GNU as) выводит объектные файлы из кода сборки, созданного GCC . Наконец, GNU Linker (GNU ld) используется для создания статически связанного исполняемого файла ядра с именем vmlinux . Оба как и ld являются частью двоичных утилит GNU (binutils). Вышеупомянутые инструменты вместе известны как набор инструментов GNU .
Совместимость с компилятором
GCC долгое время был единственным компилятором, способным правильно собирать Linux. В 2004 году Intel заявила, что модифицировала ядро, чтобы компилятор C также мог его компилировать. [208] В 2009 году был зарегистрирован еще один такой успех - модифицированная версия 2.6.22. [209] [210]
С 2010 года предпринимаются попытки собрать Linux с помощью Clang , альтернативного компилятора для языка C; [211] По состоянию на 12 апреля 2014 года официальное ядро почти могло быть скомпилировано Clang. [212] [213] Проект, посвященный этой работе, назван LLVMLinux в честь инфраструктуры компилятора LLVM, на которой построен Clang. [214] LLVMLinux не ставит своей целью форк Linux или LLVM, поэтому это метапроект, состоящий из исправлений, которые в конечном итоге передаются в вышестоящие проекты. Включив компиляцию Linux с помощью Clang, разработчики могут получить выгоду от более короткого времени компиляции. [215]
В 2017 году разработчики завершили апстрим-патчи для поддержки сборки ядра Linux с помощью Clang в выпуске 4.15, поддерживая поддержку X86-64 и AArch64 в ветвях 4.4, 4.9 и 4.14 стабильного дерева ядра. Google Pixel 2 поставлялся с первым ядром Linux, построенным на Clang [216], хотя исправления для Pixel (1-го поколения) действительно существовали. [217] В 2018 году ChromeOS перешла на сборку ядер с использованием Clang по умолчанию [218], в то время как Android (операционная система) сделала Clang [219] и компоновщик LLVM LLD [220] необходимым для сборки ядра в 2019 году. Google переместил свое производственное ядро используется во всех своих центрах обработки данных для создания с помощью Clang в 2020 году. [221] Сегодня группа ClangBuiltLinux координирует исправления как для Linux, так и для LLVM для обеспечения совместимости, оба из которых состоят из членов LLVMLinux и имеют обновленные исправления из LLVMLinux .
Отладка ядра
Ошибки, связанные с ядром Linux, могут быть трудными для устранения, это связано с взаимодействием ядра с пользовательским пространством и оборудованием; а также потому, что они могут быть вызваны более широким кругом причин по сравнению с причинами пользовательских программ. Несколько примеров основных причин - семантические ошибки в коде, неправильное использование примитивов синхронизации и неправильное управление оборудованием. [222]
Сообщение о нефатальной ошибке в ядре называется « упс »; такие отклонения от правильного поведения ядра Linux могут позволить продолжить работу с пониженной надежностью. [223]
О критической и фатальной ошибке сообщается через panic () функция. Он печатает сообщение, а затем останавливает ядро. [224]
Одним из наиболее распространенных методов, используемых для обнаружения ошибок в коде, является отладка путем печати . Для этой цели Linux предоставляет встроенный в ядро API, называемый printk () хранит сообщения в кольцевом буфере. В Системный вызов syslog (2) используется для чтения и / или очистки кольцевого буфера сообщений ядра и для установки максимального уровня журнала сообщений, отправляемых на консоль (т. е. одного из восьми KERN_ * параметры printk () , который сообщает серьезность сообщаемого состояния); обычно он вызывается через оболочку glibC klogctl (3) . [225] Сообщения ядра также экспортируются в пользовательскую среду через интерфейс / dev / kmsg [226] (например, systemd-journald [227] [228] читает этот интерфейс и по умолчанию добавляет сообщения в / var / log / journal ).
Другой фундаментальный метод отладки работающего ядра - трассировка. Механизм ftrace - это внутренний трассировщик Linux; он используется для мониторинга и отладки Linux во время выполнения, а также может анализировать задержки в пространстве пользователя из-за неправильного поведения ядра. [229] [230] [231] [232] Кроме того, ftrace позволяет пользователям отслеживать Linux во время загрузки. [233]
kprobes и kretprobes могут взламывать (как отладчики в пользовательском пространстве) Linux и собирать информацию без прерывания работы. [234] kprobes можно вставить в код по (почти) любому адресу, в то время как kretprobes работает при возврате функции. uprobes имеют схожие цели, но также имеют некоторые различия в использовании и реализации. [235]
С помощью KGDB Linux можно отлаживать почти так же, как и программы пользовательского пространства. KGDB требует дополнительной машины, на которой работает GDB и которая подключена к цели для отладки с помощью последовательного кабеля или Ethernet . [236]
Модель развития
Проект ядра Linux постоянно интегрирует новый код. Программное обеспечение, внесенное в проект, должно работать и компилироваться без ошибок. Каждой подсистеме ядра назначается сопровождающий, который отвечает за проверку исправлений на соответствие стандартам кода ядра и поддерживает очередь исправлений, которые могут быть отправлены Линусу Торвальдсу в течение периода слияния в несколько недель. Патчи добавляются Торвальдсом в исходный код предыдущего стабильного выпуска ядра Linux, создавая -rc- кандидат на выпуск следующего стабильного ядра. После закрытия окна слияния принимаются только исправления нового кода в разрабатываемой версии. -Rc релиз развития ядра проходит регрессионные тесты , и как только она оценивается как стабильный по Torvalds и подсистема ядра Сопровождающих новое ядро Linux будет отпущен и процесс развития начинается снова. [237]
Разработчики, которые считают, что к ним относятся несправедливо, могут сообщить об этом в Технический консультативный совет Linux Foundation . [238] В июле 2013 года разработчик драйвера USB 3.0 Сара Шарп попросила Торвальдса отреагировать на оскорбительный комментарий в сообществе разработчиков ядра. В 2014 году Sharp отказался от разработки ядра Linux, заявив, что «акцент на техническом совершенстве в сочетании с перегруженными специалистами по сопровождению и людьми с разными культурными и социальными нормами означает, что специалисты по сопровождению ядра Linux часто бывают грубыми, грубыми или жестокими, чтобы добиться их работа сделана ". [239] На конференции linux.conf.au (LCA) в 2018 году разработчики выразили мнение, что культура сообщества за последние несколько лет стала намного лучше. Дэниел Веттер, разработчик драйвера графического ядра Intel drm / i915, отметил, что «довольно резкие выражения и дискуссии» в сообществе разработчиков ядра уменьшились или исчезли. [240]
Лоран Пинчарт попросил разработчиков высказать свое мнение об их опыте работы с сообществом разработчиков ядра на Европейской конференции по встроенным Linux в 2017 году. Поднятые вопросы были обсуждены несколько дней спустя на Саммите Maintainers Summit. Обеспокоенность по поводу непоследовательности реакции сопровождающих на патчи, представленные разработчиками, была поддержана Шуахом Кханом , сопровождающим фреймворка самотестирования ядра. Торвальдс утверждал, что никогда не будет единообразия в обработке исправлений, потому что разные подсистемы ядра со временем переняли разные процессы разработки. Поэтому было решено, что каждый сопровождающий подсистемы ядра будет документировать правила принятия исправлений. [241]
Основная линия Linux
Git дерево Линуса Торвальдса , который содержит Linux ядро, называется магистральный Linux . Каждый стабильный выпуск ядра происходит из основного дерева [242] и часто публикуется на kernel.org . Mainline Linux имеет надежную поддержку только для небольшого подмножества множества устройств, на которых работает Linux. Неосновная поддержка предоставляется независимыми проектами, такими как Yocto или Linaro , но во многих случаях требуется ядро от производителя устройства. [243] Для использования ядра поставщика, вероятно, потребуется пакет поддержки платы .
Поддержание дерева ядра за пределами основной Linux оказалось сложной задачей. [244]
Mainlining относится к усилиям по добавлению поддержки устройства в основное ядро [245], в то время как раньше была поддержка только в вилке или без поддержки вообще. Обычно это включает добавление драйверов или файлов дерева устройств . Когда это будет завершено, функция или исправление безопасности считается основной . [246]
Linux-подобное ядро
Сопровождающий в стабильной ветке, Грег Kroah-Хартман , применил термин Linux, как для последующих вилок ядра по поставщикам , которые добавляют миллионы строк кода в основную ветку ядра. [247] В 2019 году Google заявил, что они хотят использовать основное ядро Linux в Android, чтобы уменьшить количество форков ядра. [248] Термин «Linux-подобный» также применялся к встраиваемому подмножеству ядра Linux , которое не включает в себя полное основное ядро Linux, а лишь небольшую модифицированную подмножество кода. [249]
Вилки Linux
Есть определенные сообщества, которые разрабатывают ядра на основе официального Linux. Некоторые интересные фрагменты кода из этих форков (т. Е. Сленговый термин, означающий «производные проекты»), который включает Linux-libre , Compute Node Linux , INK , L4Linux , RTLinux и User-Mode Linux (UML), были объединены в основную ветку. . [250] Некоторые операционные системы, разработанные для мобильных телефонов, изначально использовали сильно модифицированные версии Linux, включая Google Android , Firefox OS , HP webOS , Nokia Maemo и Jolla Sailfish OS . В 2010 году сообщество Linux раскритиковало Google за эффективное начало собственного дерева ядра: [251] [252]
Это означает, что любые драйверы, написанные для аппаратных платформ Android, не могут быть объединены в основное дерево ядра, поскольку они зависят от кода, который находится только в дереве ядра Google, что приводит к невозможности его построения в дереве kernel.org. Из-за этого Google теперь предотвратил объединение большого количества драйверов оборудования и кода платформы в основное дерево ядра. Эффективное создание ветки ядра, на которую теперь полагаются несколько различных поставщиков. [253]
- Грег Кроа-Хартман , 2010 г.
Сегодня Android использует слегка настроенный Linux [254], в котором изменения внесены в драйверы устройств, так что не требуется никаких изменений в основном коде ядра. Разработчики Android также отправляют исправления для официального Linux, которые, наконец, могут загружать операционную систему Android. Например, Nexus 7 может загружать и запускать основной Linux. [254]
В 2001 году презентации в Музее компьютерной истории , Линус Торвальдс был это сказать , в ответ на вопрос о распределении Linux с использованием точно такие же исходные коды ядра или нет:
Они не ... ну, и они не такие. Единого ядра нет. В каждом дистрибутиве есть свои изменения. Это происходит практически с первого дня. Я не знаю, помните ли вы, что Yggdrasil был известен весьма радикальными изменениями в ядре, и даже сегодня у всех основных поставщиков есть свои собственные настройки, потому что у них есть часть рынка, в которой они заинтересованы, и, откровенно говоря, именно так так должно быть. Потому что, если все ожидают, что один человек, я, сможет отслеживать все, в этом нет смысла GPL. Не в этом смысл открытой системы. Так что на самом деле тот факт, что дистрибутив решает, что что-то настолько важно для них, что они будут добавлять исправления, даже если этого нет в стандартном ядре, это действительно хороший знак для меня. Так, например, было добавлено что-то вроде ReiserFS. И причина, по которой ReiserFS стала первой журналируемой файловой системой, которая была интегрирована в стандартное ядро, заключалась не в том, что я люблю Ханса Райзера. Это произошло потому, что SUSE фактически начал поставляться с ReiserFS в качестве стандартного ядра, что сказало мне «хорошо». Фактически это используется в производстве. Нормальные люди так делают. Они должны знать то, чего я не знаю. Так что в самом прямом смысле то, что делают многие дистрибьюторские компании, они являются частью этого «давайте создадим нашу собственную ветвь» и «давайте внесем в это наши изменения». А благодаря GPL я могу брать их лучшие части. [255]
- Линус Торвальдс , 2001 г.
Конфликты сообщества разработчиков
Между разработчиками ядра Linux было несколько заметных конфликтов. Примеры таких конфликтов:
- В июле 2007 года Кон Коливас объявил, что прекращает разработку ядра Linux. [256] [257]
- В июле 2009 года Алан Кокс оставил свою роль сопровождающего уровня TTY после разногласий с Линусом Торвальдсом . [258]
- В декабре 2010 года специалист по сопровождению SCSI Linux Джеймс Боттомли и специалист по сопровождению SCST Владислав Болховитин обсудили, какой целевой стек SCSI следует включить в ядро Linux. [259] Это расстроило некоторых пользователей Linux. [260]
- В июне 2012 года Торвальдс ясно дал понять, что не согласен с тем, что NVIDIA выпускает свои драйверы как закрытые. [261]
- В апреле 2014 года Торвальдс запретил Кею Сиверсу отправлять исправления для ядра Linux за то, что он не смог исправить ошибки , из-за которых systemd отрицательно взаимодействовал с ядром. [262]
- В октябре 2014 года Леннарт Поеттеринг обвинил Торвальдса в терпимости к грубому стилю обсуждения в списках рассылки, связанных с ядром Linux, и в плохом образце для подражания. [263]
- В марте 2015 года Кристоф Хеллвиг подал иск против VMware за нарушение авторских прав на ядро Linux. [264] Линус Торвальдс дал понять, что не согласен с этой и подобными инициативами, назвав адвокатов гнойной болезнью. [265]
Выдающиеся разработчики ядра Linux осознавали важность предотвращения конфликтов между разработчиками. [266] Долгое время не существовало кодекса поведения разработчиков ядра из-за противодействия Линуса Торвальдса . [267] Однако 8 марта 2015 г. был введен Кодекс конфликта ядра Linux . [268] Он был заменен 16 сентября 2018 г. новым Кодексом поведения, основанным на Соглашении с участниками . Это совпало с публичными извинениями Торвальдса и коротким перерывом в разработке ядра. [269] [270] 30 ноября 2018 г., соблюдая Кодекс поведения , Яркко Саккинен из Intel разослал патчи, заменяющие слова «fuck», появляющиеся в комментариях к исходному коду, подходящими версиями, сосредоточенными на слове «hug». [271]
Кодовая база
По состоянию на 2021 год[Обновить], версия 5.11 ядра Linux содержала около 30,34 миллиона строк кода, примерно 14% кода - это часть «ядра» (каталоги arch, kernel и mm), а 60% - драйверы.
Linux - это эволюция, а не разумный замысел!
- Линус Торвальдс , 2005 [272] [273] [274]
Ориентировочная стоимость перепланировки
Стоимость повторной разработки ядра Linux версии 2.6.0 в традиционном закрытом режиме разработки была оценена в 612 миллионов долларов США (467 миллионов евро, 394 миллиона фунтов стерлингов) в ценах 2004 года с использованием модели оценки человеко-месяцев COCOMO . [275] В 2006 году исследование, финансируемое Европейским Союзом, показало, что стоимость повторной разработки версии ядра 2.6.8 выше и составила 882 миллиона евро (1,14 миллиарда долларов, 744 миллиона фунтов стерлингов). [276]
К этой теме вернулись в октябре 2008 года Аманда Макферсон, Брайан Проффитт и Рон Хейл-Эванс. Используя методологию Дэвида А. Уиллера, они подсчитали, что модернизация ядра 2.6.25 сейчас стоит 1,3 миллиарда долларов (часть из 10,8 миллиарда долларов на переработку Fedora 9). [277] Опять же, Гарсия-Гарсия и Алонсо де Магдалено из Университета Овьедо (Испания) оценивают, что стоимость ядра, ежегодно добавляемая к ядру, составляла около 100 миллионов евро в период с 2005 по 2007 год и 225 миллионов евро в 2008 году, это также будет стоить более 1 миллиарда евро ( около 1,4 млрд долларов по состоянию на февраль 2010 г.) для развития в Европейском Союзе. [278]
По состоянию на 7 марта 2011 г.[Обновить], используя текущие LOC (строки кода) ядра Linux 2.6.x и цифры заработной платы с расчетами Дэвида А. Уиллера, переработка ядра Linux будет стоить примерно 3 млрд долларов (около 2,2 млрд евро) по мере того, как оно становится все больше. Обновленный расчет по состоянию на 26 сентября 2018 г.[Обновить], используя текущие 20 088 609 LOC (строк кода) для ядра Linux 4.14.14 и текущую среднюю зарплату программиста в США в 75 506 долларов, показывает, что переписывание существующего кода будет стоить примерно 14 725 449 000 долларов (11 191 341 000 фунтов стерлингов). [279]
Сопровождение и долгосрочная поддержка
Последняя версия ядра и более старые версии ядра обслуживаются отдельно. Самыми последними выпусками ядра руководил Линус Торвальдс. [280] Текущие версии выпущены Грегом Кроа-Хартманом . [281]
Сообщество разработчиков ядра Linux поддерживает стабильное ядро, применяя исправления для ошибок программного обеспечения , которые были обнаружены во время разработки следующего стабильного ядра. Поэтому на сайте www.kernel.org всегда будут указаны два стабильных ядра. Следующее стабильное ядро Linux теперь выпущено только через 8–12 недель. Поэтому специалисты по сопровождению ядра Linux определили некоторые стабильные выпуски ядра как долгосрочные , эта долгосрочная поддержка Ядра Linux обновляются с исправлениями ошибок в течение двух или более лет. [282] В ноябре 2019 года существовало пять долгосрочных ядер Linux: 4.19.84, 4.14.154, 4.9.201, 4.4.201 и 3.16.76. [283] Полный список выпусков находится в истории версий ядра Linux .
Связь с дистрибутивами Linux
Большинство пользователей Linux используют ядро, поставляемое их дистрибутивом Linux . Некоторые дистрибутивы поставляют "ванильные" или "стабильные" ядра. Однако несколько поставщиков дистрибутивов Linux (например, Red Hat и Debian ) поддерживают другой набор ветвей ядра Linux, которые интегрированы в их продукты. Обычно они обновляются медленнее по сравнению с «ванильной» веткой и обычно включают все исправления из соответствующей «стабильной» ветки, но в то же время они могут также добавлять поддержку для драйверов или функций, которые не были выпущены в "ванильная" версия, с которой поставщик дистрибутива начал основывать свою ветку.
Правовые аспекты
Условия лицензирования GPLv2
Первоначально Торвальдс выпускал Linux по лицензии, запрещавшей любое коммерческое использование. [284] Это было изменено в версии 0.12 путем перехода на Стандартную общественную лицензию GNU версии 2 (GPLv2). [28] Эта лицензия разрешает распространение и продажу возможно модифицированных и немодифицированных версий Linux, но требует, чтобы все эти копии были выпущены под одной лицензией и сопровождались полным соответствующим исходным кодом. [285] Торвальдс охарактеризовал лицензирование Linux под GPLv2 как «лучшее, что я когда-либо делал». [284]
Ядро Linux явно лицензируется только в соответствии с версией 2 GPL [23], без предоставления лицензиату возможности выбрать «любую более позднюю версию», которая является распространенным расширением GPL. Официальная ветвь git Торвальдса содержит документацию, объясняющую процесс разработки ядра людям, которые хотят работать с сообществом и вносить свой код; в нем четко указано, что «[Любые] материалы, не подпадающие под лицензию, совместимую с [GPLv2], не будут приняты в ядро». [103]
Было много споров о том, насколько легко можно изменить лицензию для использования более поздних версий GPL (включая версию 3), и желательно ли это изменение. [286] Сам Торвальдс специально указал при выпуске версии 2.4.0, что его собственный код выпущен только под версией 2. [287] Однако условия GPL гласят, что если версия не указана, то может использоваться любая версия. , [288] и Алан Кокс указали, что очень немногие другие участники Linux указали конкретную версию GPL. [289]
В сентябре 2006 года опрос 29 ключевых программистов ядра показал, что 28 предпочитают GPLv2 нынешнему проекту GPLv3. Торвальдс прокомментировал: «Я думаю, что некоторые посторонние ... считали, что я лично был просто странным человеком, потому что публично я не был большим поклонником GPLv3». [290] Эта группа известных разработчиков ядра, включая Торвальдса, Грега Кроа-Хартмана и Эндрю Мортона , прокомментировала в СМИ свои возражения против GPLv3. [291] Они сослались на статьи, касающиеся DRM / тивоизации , патентов, «дополнительных ограничений» и предупредили о балканизации «Вселенной с открытым исходным кодом» GPLv3. [291] [292] Линус Торвальдс, который решил не принимать GPLv3 для ядра Linux, повторил свою критику даже спустя годы. [293]
Загружаемые модули ядра
Обсуждается вопрос о том, следует ли считать некоторые загружаемые модули ядра (LKM) производными работами в соответствии с законом об авторском праве и, таким образом, подпадают ли они под условия GPL.
В соответствии с лицензионными правилами LKM, использующие только общедоступное подмножество интерфейсов ядра [128] [129] , не являются производными продуктами, поэтому Linux дает системным администраторам механизмы для загрузки двоичных объектов вне дерева в адресное пространство ядра. . [5]
Есть несколько загружаемых модулей вне дерева, которые законно используют функцию ядра dma_buf . [294] Код, совместимый с GPL, безусловно, может его использовать. Однако другим возможным вариантом использования может быть Nvidia Optimus, которая соединяет быстрый графический процессор со встроенным графическим процессором Intel, где графический процессор Nvidia записывает в кадровый буфер Intel, когда он активен. Но Nvidia не может использовать эту инфраструктуру, потому что это требует обхода правила, которое может использоваться только LKM, которые также являются GPL. [130] Алан Кокс ответил на LKML , отклонив запрос одного из их инженеров на удаление этого технического принуждения из API. [295] Торвальдс четко заявил в LKML, что «[I] утверждают, что модули ядра только для двоичных файлов ЯВЛЯЮТСЯ производными» по умолчанию «» ». [296]
С другой стороны, Торвальдс также сказал, что «[одна] серая область, в частности, представляет собой что-то вроде драйвера, который изначально был написан для другой операционной системы (т.е. явно не является производным от Linux по происхождению). ЭТО серая область , и _that_ - это область, в которой я лично считаю, что некоторые модули могут считаться недействительными просто потому, что они не были разработаны для Linux и не зависят от какого-либо особого поведения Linux ». [297] В частности, активно обсуждаются проприетарные графические драйверы.
Бинарные файлы прошивки
Официальное ядро, то есть ветвь Linus git в репозитории kernel.org, не содержит какого-либо проприетарного кода; [23] [5] однако Linux может искать в файловых системах проприетарные прошивки, драйверы и другие исполняемые модули (известные под общим названием « двоичные капли »), а затем загружать и связывать их с пространством ядра. [298] Каждый раз, когда проприетарные модули загружаются в Linux, ядро отмечает себя как «испорченное», [299] и поэтому отчеты об ошибках из испорченных ядер часто игнорируются разработчиками.
Когда это необходимо (например, для доступа к загрузочным устройствам или для повышения скорости), микропрограммное обеспечение может быть встроено в ядро, это означает, что микропрограммное обеспечение встроено в vmlinux ; однако это не всегда приемлемый вариант из-за технических или юридических проблем (например, он не разрешен для микропрограмм, не совместимых с GPL). [300]
Торговая марка
Linux является зарегистрированной торговой маркой от Linus Torvalds в Соединенных Штатах Америки, Европейского Союза, а также в некоторых других странах. [301] [302] Юридическая битва за товарный знак началась в 1996 году, когда Уильям Делла Кроче, юрист, никогда не участвовавший в разработке Linux, начал запрашивать лицензионные сборы за использование слова Linux . После того, как было доказано, что это слово широко использовалось задолго до того, как Делла Кроче заявила о своем первом использовании, торговая марка была передана Торвальдсу. [303] [304] [305]
Смотрите также
- Операционная система
- Ядро
- Монолитное ядро
- Микроядро
- История версий ядра Linux
- Сравнение операционных систем
- Сравнение ядер операционных систем
- Linux
- Миникс 3
- macOS
- Майкрософт Виндоус
Рекомендации
- ^ «Логотипы и талисманы Linux» . Linux Online. 2008. Архивировано из оригинального 15 августа 2010 года . Проверено 11 августа 2009 года .
- ^ «Проект ядра Linux с открытым исходным кодом на Open Hub: страница языков» . Архивировано 15 ноября 2018 года . Проверено 28 марта 2019 .
- ^ Кроа-Хартман, Грег (7 мая 2021 г.). «Linux 5.12.2» . LKML (список рассылки) . Дата обращения 9 мая 2021 .
- ^ Торвальдс, Линус (18 апреля 2021 г.). «Linux 5.12-rc8» . LKML (список рассылки) . Проверено 18 апреля 2021 года .
- ^ а б в г д «Правила лицензирования ядра Linux - документация ядра Linux» . www.kernel.org . Архивировано 7 марта 2020 года . Проверено 6 января 2020 года .
- ^ Таненбаум, Эндрю; Бос, Герберт (2015). Современные операционные системы . Соединенные Штаты Америки: Пирсон. п. 722. ISBN 9781292061429. OCLC 892574803 .
- ^ С любовью, Роберт (2010). Разработка ядра Linux . Эддисон-Уэсли. п. 4. ISBN 978-0-672-32946-3. OCLC 268788260 .
- ^ С любовью, Роберт (2010). Разработка ядра Linux . Эддисон-Уэсли. п. 338. ISBN 978-0-672-32946-3. OCLC 268788260 .
- ^ "README" . git.kernel.org. Архивировано из оригинального 24 июля 2012 года . Проверено 24 марта 2021 года .
- ^ Ричардсон, Марджори (1 ноября 1999 г.). «Интервью: Линус Торвальдс» . Linux Journal. Архивировано 14 мая 2011 года . Проверено 20 августа 2009 года .
- ^ Уильямс, Сэм (март 2002). «Глава 9: Стандартная общественная лицензия GNU» . Free as in Freedom: Крестовый поход Ричарда Столлмана за свободные программы . О'Рейли . ISBN 0-596-00287-4. Проверено 12 ноября 2010 года .
- ^ Unix System Laboratories v. Berkeley Software , 832 F. Supp. 790 ( DNJ 1993).
- ^ а б "TOP500 суперкомпьютерных сайтов: Семейство операционных систем / Linux" . Top500.org. Архивировано 19 ноября 2012 года . Дата обращения 5 октября 2019 .
- ^ а б в «Система сборки ядра - документация ядра Linux» . www.kernel.org . Архивировано 22 июля 2020 года . Дата обращения 17 июля 2020 .
- ^ а б в «Kconfig make config - документация ядра Linux» . www.kernel.org . Архивировано 17 июля 2020 года . Проверено 13 сентября 2020 .
- ^ а б "KernelBuild - новички в ядре Linux" . kernelnewbies.org . Архивировано 19 октября 2020 года . Проверено 13 сентября 2020 .
- ^ а б «Интерфейс Sysctl» . www.linux.it . Архивировано 17 февраля 2020 года . Проверено 13 сентября 2020 .
- ^ а б "sysctl (8) - справочная страница Linux" . man7.org . Архивировано 30 сентября 2020 года . Проверено 13 сентября 2020 .
- ^ а б "procfs (5) - справочная страница Linux" . man7.org . Архивировано 24 сентября 2020 года . Проверено 13 сентября 2020 .
- ^ С любовью, Роберт (2010). Разработка ядра Linux . Эддисон Уэсли. п. 18. ISBN 978-0-672-32946-3. OCLC 268788260 .
- ^ «Расширения C (с использованием коллекции компиляторов GNU (GCC))» . gcc.gnu.org . Архивировано 20 ноября 2020 года . Проверено 13 ноября 2020 .
- ^ С любовью, Роберт (2010). Разработка ядра Linux . США: Аддисон Уэсли. С. 379–380. ISBN 9780672329463.
- ^ а б в г «Исходный код Linux: КОПИРОВАНИЕ (v5.4.8) - Bootlin» . elixir.bootlin.com . Архивировано 1 июня 2020 года . Проверено 6 января 2020 года .
- ^ а б Торвальдс, Линус Бенедикт (26 августа 1991 г.). "Что бы вы хотели видеть в minix больше всего?" . Группа новостей : comp.os.minix . Usenet: [email protected] . Архивировано 9 мая 2013 года . Проверено 14 сентября 2016 года .
- ^ а б Валлийский, Мэтт; Дальхаймер, Матиас Калле; Кауфман, Лар (1999). «1». Запуск Linux (3-е изд.). Севастополь, Калифорния: ISBN O'Reilly Media, Inc. 1-56592-976-4. OCLC 50638246 .
- ^ а б «Бесплатные исходные коды ядра типа minix для 386-AT - Группы Google» . groups.google.com . 5 октября 1991 года. Архивировано 1 марта 2021 года . Проверено 19 марта 2020 .
- ^ а б в Кристин Бреснахан и Ричард Блюм (2016). LPIC-2: Учебное пособие по сертификации профессионального института Linux: экзамен 201 и экзамен 202 . Джон Вили и сыновья. п. 107. ISBN 9781119150794.
- ^ а б Торвальдс, Линус . «Примечания к выпуску Linux v0.12» . Архивы ядра Linux. Архивировано 19 августа 2007 года . Проверено 21 февраля 2007 года .
- ^ Фред Хантельманн (2016). Руководство по началу работы с LINUX: самостоятельное введение . Springer Science & Business Media. п. 1. ISBN 9783642607493.
- ^ а б в Фред Хантельманн (2016). Руководство по началу работы с LINUX: самостоятельное введение . Springer Science & Business Media. п. 16. ISBN 9783642607493.
- ^ Саммерс, Дэвид В. (19 января 1992 г.). «Проблемы с перегородками» . Группа новостей : alt.os.linux . Usenet: [email protected] . Архивировано 2 июня 2013 года . Проверено 7 января 2007 года .
- ^ Клегг, Алан Б. (31 марта 1992 г.). "Это здесь!" . Группа новостей : comp.os.linux . Usenet: [email protected] . Архивировано 2 июня 2013 года . Проверено 7 января 2007 года .
- ^ «Приложение A: Дебаты Таненбаума-Торвальдса» . Открытые источники: голоса революции открытого исходного кода . О'Рейли . 1999. ISBN 1-56592-582-3. Источник +22 Ноябрь +2006 .
- ^ Таненбаум, Энди (29 января 1992 г.). «LINUX устарел» . Группа новостей : comp.os.minix . Usenet: [email protected] . Архивировано 17 октября 2011 года . Проверено 10 мая 2006 года .
- ^ Таненбаум, Энди (12 мая 2006 г.). "Дебаты Таненбаума-Торвальдса: Часть II" . VU University Amsterdam . Архивировано 5 августа 2015 года . Проверено 6 января 2007 года .
- ^ Ноябрь 2012, Дэвид Хейворд 22. «История Linux: как время сформировало пингвина» . TechRadar . Архивировано 19 марта 2020 года . Проверено 19 марта 2020 .
- ^ Ноябрь 2012, Дэвид Хейворд 22. «История Linux: как время сформировало пингвина» . TechRadar . Архивировано 19 марта 2020 года . Проверено 26 марта 2020 года .
- ^ Любовь, Роберт (Роберт М.) (2010). Разработка ядра Linux (3-е изд.). Река Аппер Сэдл, Нью-Джерси: Аддисон-Уэсли. п. 9. ISBN 978-0-672-32946-3. OCLC 268788260 .
- ^ а б «Как работает процесс разработки - документация ядра Linux» . www.kernel.org . Архивировано 9 декабря 2017 года . Проверено 26 марта 2020 года .
- ^ а б в Кристин Бреснахан и Ричард Блюм (2016). LPIC-2: Учебное пособие по сертификации профессионального института Linux: экзамен 201 и экзамен 202 . Джон Вили и сыновья. п. 108. ISBN 9781119150794.
- ^ Торвальдс, Линус (9 июня 1996 г.). «Linux 2.0 действительно выпущен». LKML (список рассылки). Архивировано 2 апреля 2015 года . Проверено 8 марта 2015 года .
- ^ Торвальдс, Линус (20 января 1999 г.). «2.2.0-финал» . LKML (список рассылки). Архивировано 2 апреля 2015 года . Проверено 8 марта 2015 года .
- ^ а б «Чудесный мир Linux 2.2» . 26 января 1999 года. Архивировано 6 ноября 2014 года . Проверено 27 октября 2008 года .
- ^ "Linux / 390 Наблюдения и примечания" . linuxvm.org . Архивировано 26 февраля 2019 года . Проверено 29 марта 2020 года .
- ^ Торвальдс, Линус (4 января 2001 г.). "И о, кстати". LKML (список рассылки). Архивировано 26 января 2016 года . Проверено 8 марта 2015 года .
- ^ «Чудесный мир Linux 2.4» . Архивировано из оригинала 17 марта 2005 года . Проверено 27 октября 2008 года .
- ^ Торвальдс, Линус (17 декабря 2003 г.). «Linux 2.6.0» . LKML (список рассылки). Архивировано 2 апреля 2015 года . Проверено 28 февраля 2015 года .
- ^ "proc (5) - страница руководства Linux" (см. / proc / sys / kernel / pid_max). Архивировано 7 февраля 2014 года . Проверено 19 февраля 2014 .
- ^ "btrfs Wiki" . btrfs.wiki.kernel.org . Архивировано 25 апреля 2012 года . Дата обращения 17 июля 2020 .
- ^ Фред Хантельманн (2016). Руководство по началу работы с LINUX: самостоятельное введение . Springer Science & Business Media. С. 1–2. ISBN 9783642607493.
- ^ Кроа-Хартман, Грег (3 августа 2006 г.). «Адриан Банк теперь занимает стабильную ветку 2.6.16» . LKML (список рассылки). Архивировано 26 января 2016 года . Проверено 21 февраля 2015 года .
- ^ Ротвелл, Стивен (12 февраля 2008 г.). «Анонс: Linux-next (Или мечта Андрея :-))» . LKML (список рассылки). Архивировано 24 ноября 2010 года . Проверено 30 октября 2010 года .
- ^ Корбет, Джонатан (21 октября 2010 г.). "linux-next и процесс управления исправлениями" . LWN.net . Eklektix, Inc. Архивировано 21 июня 2010 года . Проверено 30 октября 2010 года .
- ^ «Архив ядра Linux» . Kernel.org. Архивировано 30 января 1998 года . Проверено 22 января 2014 .
- ^ Список рассылки ядра Linux (17 июня 2005 г.). «Linux 2.6.12» . git-commits-head (список рассылки). Архивировано 26 января 2016 года . Проверено 23 января 2008 года .
- ^ «Индекс /pub/linux/kernel/v2.6» . Kernel.org. Архивировано 10 февраля 2014 года . Проверено 2 марта 2014 .
- ^ «Добавьте личность, чтобы сообщить номера версии 2.6.x [LWN.net]» . lwn.net . Архивировано 16 июля 2020 года . Дата обращения 15 июля 2020 .
- ^ а б Торвальдс, Линус (21 июля 2011 г.). «Релиз Linux 3.0» . Список рассылки ядра Linux . Архивировано 18 октября 2019 года . Проверено 16 мая 2013 года .
- ^ Торвальдс, Линус (30 мая 2011 г.). «Linux 3.0-rc1» . LKML (список рассылки). Архивировано из оригинального 31 мая 2011 года . Проверено 1 июля 2013 года .
- ^ Воан-Николс, Стивен Дж. (13 декабря 2012 г.). «Прощай, 386: Linux откажется от поддержки чипов i386 со следующим основным выпуском» . ZDNet . CBS Interactive . Архивировано 17 февраля 2015 года . Проверено 6 февраля 2013 года .
- ^ Фингас, Джон (15 декабря 2012 г.). «Linux, чтобы отказаться от поддержки i386 в ядре 3.8, заставит нас обновить нашу установку Doom» . Engadget . AOL . Архивировано 2 апреля 2015 года . Проверено 22 марта 2015 года .
- ^ Воан-Николс, Стивен Дж. (11 декабря 2012 г.). «Прибывает Linux 3.7, радуются разработчики ARM» . ZDNet . CBS Interactive . Архивировано 5 ноября 2014 года . Проверено 6 февраля 2013 года .
- ^ Торвальдс, Линус (2 сентября 2013 г.). «Linux 3.11» . LKML (список рассылки). Архивировано 26 февраля 2014 года . Проверено 3 сентября 2013 года .
- ^ «Linux 3.11» . kernelnewbies.org. 2 сентября 2013 . Проверено 21 января 2014 года .
- ^ Торвальдс, Линус (12 апреля 2015 г.). «Выпущен Linux 4.0» . LKML (список рассылки). Архивировано 13 апреля 2015 года . Проверено 12 апреля 2015 года .
- ^ «Linux Foundation выпускает отчет о разработке Linux» . Linux Foundation . 18 февраля 2015. Архивировано из оригинала 19 июля 2016 года . Проверено 20 февраля 2015 года .
- ^ Майкл Ларабель (23 июня 2014 г.). «Ядро Linux, состоящее из 19,5 миллионов строк кода, продолжает расти» . Фороникс . Архивировано 23 ноября 2020 года . Проверено 23 июня 2015 года .
- ^ Корбет, Джонатан (3 августа 2020 г.). "Немного статистики из цикла ядра 5.8" . LWN - Еженедельные новости Linux . Архивировано 4 сентября 2020 года . Дата обращения 11 августа 2020 .
- ^ «Опрос разработчиков Stack Overflow 2019 - самые популярные технологии» . Переполнение стека . Архивировано 8 октября 2020 года . Дата обращения 17 марта 2020 .
- ^ «Опрос разработчиков Stack Overflow 2019 - среды и инструменты разработки» . Переполнение стека . Архивировано 7 марта 2020 года . Дата обращения 17 марта 2020 .
- ^ «Статистика использования и рыночная доля операционных систем для веб-сайтов, март 2020 г.» . w3techs.com . Дата обращения 17 марта 2020 .
- ^ «Статистика использования и рыночная доля Unix для веб-сайтов, март 2020» . w3techs.com . Дата обращения 17 марта 2020 .
- ^ "TOP500 суперкомпьютерных сайтов: Семейство операционных систем / Linux" . Top500.org. Архивировано 19 ноября 2012 года . Дата обращения 5 октября 2019 .
- ^ «Gartner заявляет, что продажи планшетов будут составлять менее 10 процентов от всех устройств в 2014 году» (пресс-релиз). Эгхэм, Великобритания : Gartner . 15 октября 2014. архивации с оригинала на 17 октября 2014 года . Проверено 19 октября 2014 года .
- ^ Лунден, Ингрид (15 октября 2014 г.). «Рост продаж планшетов резко упал в 2014 году, поскольку смартфоны Android продолжают расти: Gartner» . TechCrunch . AOL . Архивировано 23 октября 2014 года . Проверено 23 октября 2014 года .
- ^ «Мировые поставки ПК превысили прогноз при незначительном улучшении потребительского спроса, в то время как Apple переместилась на 5-е место, согласно IDC» (пресс-релиз). Фрамингем, Массачусетс : IDC . 8 октября 2014. Архивировано из оригинала 11 октября 2014 года . Проверено 19 октября 2014 года .
- ^ "sched (7) - справочная страница Linux" . man7.org . Архивировано 17 июля 2020 года . Проверено 27 июля 2020 .
- ^ «FAQ: Вытеснение» . kernelnewbies.org . 22 августа 2009 года архивация с оригинала на 7 августа 2020 года . Дата обращения 7 мая 2015 .
- ^ а б Джонатан Корбет (24 февраля 2003 г.). «Перенос драйверов: вытесняемое ядро» . LWN.net . Архивировано 10 августа 2020 года . Дата обращения 7 мая 2015 .
- ^ а б Мольнар, Инго (13 апреля 2007 г.). «[патч] Ядро модульного планировщика и полностью справедливый планировщик [CFS]» . LKML (список рассылки). Архивировано 3 ноября 2020 года . Проверено 30 марта 2020 .
- ^ "Полностью честный планировщик | Linux Journal" . www.linuxjournal.com . Архивировано 3 августа 2020 года . Проверено 30 марта 2020 .
- ^ «ioctl (2) - справочная страница Linux» . man7.org . Архивировано 20 июля 2020 года . Дата обращения 11 августа 2020 .
- ^ «aio (7) - справочная страница Linux» . man7.org . Архивировано 12 апреля 2020 года . Дата обращения 11 августа 2020 .
- ^ «io_setup (2) - справочная страница Linux» . man7.org . Архивировано 20 августа 2020 года . Дата обращения 11 августа 2020 .
- ^ «КВМ» . www.linux-kvm.org . Архивировано 28 марта 2020 года . Проверено 29 марта 2020 года .
- ^ «TechComparison - Linux Virtualization Wiki» . virt.kernelnewbies.org . Архивировано 3 августа 2020 года . Проверено 29 марта 2020 года .
- ^ «Virtualization_support_through_KVM в Linux_2_6_20 - новички в ядре Linux» . kernelnewbies.org . Архивировано 29 ноября 2019 года . Проверено 29 марта 2020 года .
- ^ Coekaerts, Wim. «Основная линия Linux содержит все биты кода Xen для поддержки Dom0 и DomU» . blogs.oracle.com . Архивировано 3 августа 2020 года . Проверено 29 марта 2020 года .
- ^ «Xen отмечает полную поддержку Dom0 и DomU в Linux 3.0 - blog.xen.org» . 7 июня 2011 года Архивировано из оригинала 7 июня 2011 года . Проверено 29 марта 2020 года .
- ^ Вилк, Конрад Жешутек (31 января 2014 г.). «Linux 3.14 и ПВХ» . Xen Project . Архивировано 29 марта 2020 года . Проверено 29 марта 2020 года .
- ^ «Введение в виртуализацию Xen | Руководство по виртуализации | openSUSE Leap 15.2» . doc.opensuse.org . Архивировано 28 сентября 2020 года . Проверено 29 сентября 2020 года .
- ^ а б «Проект SELinux» . GitHub . Архивировано 12 декабря 2019 года . Проверено 10 января 2020 года .
- ^ а б «AppArmor - документация ядра Linux» . www.kernel.org . Архивировано 8 мая 2020 года . Проверено 10 января 2020 года .
- ^ Джейк Эдж (25 ноября 2008 г.). «Символьные устройства в пространстве пользователя» . LWN.net . Архивировано 26 января 2021 года . Дата обращения 7 мая 2015 .
- ^ Джонатан Корбет (2 мая 2007 г.). «UIO: драйверы пользовательского пространства» . LWN.net . Архивировано 11 ноября 2020 года . Дата обращения 7 мая 2015 .
- ^ а б в г "stable-api-nonsense - дерево исходных текстов ядра Linux" . git.kernel.org . Архивировано 5 марта 2021 года . Проверено 18 апреля 2020 .
- ^ Горман, Мел (15 февраля 2004 г.). Общие сведения о диспетчере виртуальной памяти Linux (PDF) . Прентис Холл. п. 26. ISBN 0-13-145348-3. Архивировано 3 мая 2019 года (PDF) . Проверено 27 января 2020 года .
- ^ Грег Унгерер. "Объявление uClinux mainline" . Архивировано из оригинального 31 октября 2007 года . Проверено 15 января 2008 года .
- ^ а б Нгуен, Бинь (30 июля 2004 г.). «Иерархия файловой системы Linux: Глава 1. Иерархия файловой системы Linux» . Проект документации Linux. Архивировано 2 декабря 2020 года . Проверено 28 ноября 2012 года .
- ^ «Версия ядра Linux 5.x - Документация ядра Linux» . www.kernel.org . Архивировано 7 марта 2020 года . Проверено 4 января 2020 года .
- ^ "README \ ABI \ Documentation - kernel / git / torvalds / linux.git - дерево исходных текстов ядра Linux" . git.kernel.org . Архивировано 1 октября 2020 года . Проверено 18 апреля 2020 .
- ^ "syscalls \ stable \ ABI \ Documentation - kernel / git / torvalds / linux.git - дерево исходных текстов ядра Linux" . git.kernel.org . Архивировано 2 октября 2020 года . Проверено 18 апреля 2020 .
- ^ а б «1.Intro.rst - Документация / процесс / 1.Intro.rst - Исходный код Linux (v5.8) - Bootlin» . elixir.bootlin.com . Проверено 8 августа 2020 .
- ^ а б "системные вызовы" . человек7 . Архивировано 15 января 2020 года . Проверено 28 января 2020 года .
- ^ "intro (2) - справочная страница Linux" . man7.org . Архивировано 17 июля 2020 года . Дата обращения 16 июля 2020 .
- ^ «клон» . man7.org . Архивировано 18 января 2020 года . Проверено 28 января 2020 года .
- ^ "feature_test_macros" . man7.org . Архивировано 19 января 2020 года . Проверено 28 января 2020 года .
- ^ "vdso (7) - справочная страница Linux" . man7.org . Архивировано 2 февраля 2020 года . Дата обращения 2 февраля 2020 .
- ^ а б "futex (2) - справочная страница Linux" . man7.org . Архивировано 31 января 2020 года . Дата обращения 2 февраля 2020 .
- ^ "syscall (2) - справочная страница Linux" . man7.org . Архивировано 21 января 2020 года . Дата обращения 2 февраля 2020 .
- ^ "sysfs (5) - справочная страница Linux" . man7.org . Архивировано 18 января 2020 года . Проверено 6 января 2020 года .
- ^ «Правила доступа к информации в sysfs - документация ядра Linux» . www.kernel.org . Архивировано 7 марта 2020 года . Проверено 6 января 2020 года .
- ^ «Справочные спецификации Linux Foundation» . refspecs.linuxbase.org . Дата обращения 3 февраля 2020 .
- ^ «Технические характеристики LSB» . refspecs.linuxbase.org . Дата обращения 3 февраля 2020 .
- ^ «Стандартная базовая спецификация рабочего стола Linux, общая часть» . refspecs.linuxbase.org . Дата обращения 3 февраля 2020 .
- ^ «Нормативные ссылки» . refspecs.linuxfoundation.org . Архивировано 12 августа 2020 года . Дата обращения 3 февраля 2020 .
- ^ «Стандартная базовая базовая спецификация ядра Linux, общая часть» . refspecs.linuxfoundation.org . Архивировано 29 ноября 2019 года . Дата обращения 3 февраля 2020 .
- ^ «Двоичный интерфейс приложений System V - версия 4.1» (PDF) . www.sco.com . Архивировано 13 декабря 2019 года (PDF) . Дата обращения 3 февраля 2020 .
- ^ "Xinuos Inc. | Разработчики | Габи | 2003-12-17 | Двоичный интерфейс приложения System V - ПРОЕКТ" . www.sco.com . Архивировано 3 февраля 2020 года . Дата обращения 3 февраля 2020 .
- ^ «Исполняемый и связывающий формат (ELF)» . refspecs.linuxbase.org . Дата обращения 3 февраля 2020 .
- ^ "elf (5) - справочная страница Linux" . man7.org . Архивировано 30 ноября 2020 года . Проверено 18 ноября 2020 года .
- ^ «Стандартная базовая базовая спецификация ядра Linux для X86-64» . refspecs.linuxbase.org . Дата обращения 3 февраля 2020 .
- ^ «Двоичный интерфейс приложений System V - ПРОЕКТ» . refspecs.linuxbase.org . Дата обращения 3 февраля 2020 .
- ^ Сейфарт, Рэй (2012). Введение в 64-битное программирование на языке ассемблера Intel для Linux . п. 170. ISBN 9781478119203.
- ^ «Анатомия системного вызова, часть 1 [LWN.net]» . lwn.net . Архивировано 18 августа 2020 года . Дата обращения 16 июля 2020 .
- ^ «Анатомия системного вызова, часть 2 [LWN.net]» . lwn.net . Архивировано 6 августа 2020 года . Дата обращения 16 июля 2020 .
- ^ Дюшер, Алекс (7 октября 2014 г.). «Новый унифицированный драйвер с открытым исходным кодом AMD» . Фонд X.Org . Архивировано 21 января 2015 года . Проверено 21 января 2015 года .
- ^ а б «Символы - ненадежное руководство по взлому ядра Linux - документация ядра Linux» . www.kernel.org . Архивировано 3 августа 2020 года . Дата обращения 8 февраля 2020 .
- ^ а б «Экспортированные символы и внутренний API [LWN.net]» . lwn.net . Архивировано 31 марта 2020 года . Дата обращения 15 марта 2020 .
- ^ а б «Не экспортируется kallsyms_lookup_name () [LWN.net]» . lwn.net . Архивировано 1 апреля 2020 года . Дата обращения 15 марта 2020 .
- ^ «Деревья I: корневые деревья [LWN.net]» . lwn.net . Архивировано 8 ноября 2020 года . Проверено 13 ноября 2020 .
- ^ «Деревья II: красно-черные деревья [LWN.net]» . lwn.net . Архивировано 13 ноября 2020 года . Проверено 13 ноября 2020 .
- ^ «Ненадежное руководство по взлому ядра Linux» . www.kernel.org (1-е изд.). 2005. Архивировано 16 февраля 2020 года . Дата обращения 15 марта 2020 .
- ^ «Ненадежное руководство по взлому ядра Linux - документация ядра Linux» . www.kernel.org . Архивировано 7 марта 2020 года . Дата обращения 15 марта 2020 .
- ^ «Ненадежное руководство по блокировке - документация ядра Linux» . www.kernel.org . Архивировано 7 марта 2020 года . Дата обращения 15 марта 2020 .
- ^ «Руководство по интерфейсам SCSI - документация ядра Linux» . www.kernel.org . Архивировано 2 июня 2020 года . Проверено 11 июня 2020 .
- ^ «Руководство разработчика libATA - Документация по ядру Linux» . www.kernel.org . Архивировано 30 мая 2020 года . Проверено 11 июня 2020 .
- ^ «Внутреннее устройство DRM - документация ядра Linux» . www.kernel.org . Архивировано 1 июня 2020 года . Проверено 11 июня 2020 .
- ^ «Настройка режима ядра (KMS) - документация ядра Linux» . www.kernel.org . Архивировано 11 июня 2020 года . Проверено 11 июня 2020 .
- ^ «Внедрить механизм совместного использования буфера DMA [LWN.net]» . lwn.net . Архивировано 11 июня 2020 года . Проверено 11 июня 2020 .
- ^ «Совместное использование буферов CPU и GPU в Linux *» . 01.org . 12 мая 2016. Архивировано 11 июня 2020 года . Проверено 11 июня 2020 .
- ^ «Совместное использование буфера и синхронизация - документация ядра Linux» . www.kernel.org . Архивировано 1 июня 2020 года . Проверено 11 июня 2020 .
- ^ "О mac80211" . Linux Kernel Organization, Inc. Архивировано 1 февраля 2021 года . Проверено 8 июня 2014 .
- ^ «Отчет об изменениях ABI в ядре Linux» . Лаборатория ABI Андрея Пономаренко. 17 марта 2016 года архивации с оригинала на 12 марта 2016 года . Проверено 16 марта 2016 .
- ^ «Форк [PATCH v3 1/2]: добавить clone3 [LWN.net]» . lwn.net . Архивировано 16 июля 2020 года . Дата обращения 16 июля 2020 .
- ^ "clone (2) - справочная страница Linux" . man7.org . Архивировано 15 июля 2020 года . Дата обращения 15 июля 2020 .
- ^ "clone3 (), fchmodat4 () и fsinfo () [LWN.net]" . lwn.net . Архивировано 15 июня 2020 года . Дата обращения 15 июля 2020 .
- ^ «ld-linux.so (8) - справочная страница Linux» . man7.org . Архивировано 26 ноября 2020 года . Проверено 18 ноября 2020 года .
- ^ «nptl (7) - справочная страница Linux» . man7.org . Архивировано 25 июля 2020 года . Проверено 25 июля 2020 .
- ^ "pthreads (7) - справочная страница Linux" . man7.org . Архивировано 15 июля 2020 года . Проверено 25 июля 2020 .
- ^ «pthread_create (3) - справочная страница Linux» . man7.org . Архивировано 25 июля 2020 года . Проверено 25 июля 2020 .
- ^ "futex (7) - справочная страница Linux" . man7.org . Архивировано 15 июля 2020 года . Проверено 25 июля 2020 .
- ^ «Облегчение потоков ядра [LWN.net]» . lwn.net . Архивировано 31 марта 2020 года . Проверено 15 августа 2020 .
- ^ "execve (2) - справочная страница Linux" . www.man7.org . Архивировано 15 июля 2020 года . Дата обращения 17 июля 2020 .
- ^ "Возможности (7) - справочная страница Linux" . man7.org . Архивировано 15 июля 2020 года . Дата обращения 2 августа 2020 .
- ^ а б Бар, Моше (1 апреля 2000 г.). «Планировщик Linux» . Linux Journal . Belltown Media, Inc. Архивировано 2 февраля 2021 года . Проверено 14 апреля 2012 года .
- ^ С любовью, Роберт (2010). «4». Разработка ядра Linux . Эддисон-Уэсли. С. 46–47. ISBN 978-0-672-32946-3. OCLC 268788260 .
- ^ С любовью, Роберт (2010). «4». Разработка ядра Linux (3-е изд.). Эддисон Уэсли. С. 62–63. ISBN 9780672329463.
- ^ «Снижение задержки в Linux: введение вытесняемого ядра | Linux Journal» . www.linuxjournal.com . Архивировано 9 августа 2020 года . Дата обращения 17 августа 2020 .
- ^ С любовью, Роберт (2010). «4». Разработка ядра Linux (3-е изд.). Эддисон Уэсли. С. 46–50. ISBN 9780672329463.
- ^ «CFS Scheduler - документация ядра Linux» . www.kernel.org . Проверено 1 мая 2021 года .
- ^ «Стандарт IEEE для информационных технологий - интерфейс переносимой операционной системы, POSIX.1b, расширения реального времени (IEEE Std 1003.1b-1993)» . Архивировано 16 ноября 2010 года . Проверено 17 марта 2016 года .
- ^ Ларабель, Майкл (24 января 2014 г.). «Ядро Linux 3.14 уже имеет много интересных функций» . Фороникс . Архивировано 13 августа 2020 года . Проверено 3 февраля 2014 года .
- ^ «Ядро Linux 3.14, раздел 1.1. Класс планирования крайнего срока для лучшего планирования в реальном времени» . kernelnewbies.org . 30 марта 2014 года. Архивировано 15 января 2021 года . Проверено 2 апреля 2014 года .
- ^ Маккенни, Пол (10 августа 2005 г.). «Обзор вытеснения в реальном времени» . LWN.net . Архивировано 10 августа 2020 года . Проверено 5 февраля 2012 года .
- ^ «Проект OSADL: Linux в реальном времени» . OSADL . Архивировано 4 февраля 2021 года . Проверено 5 февраля 2012 года .
- ^ С любовью, Роберт (2010). «9». Разработка ядра Linux (3-е изд.). Эддисон Уэсли. п. 167. ISBN. 9780672329463.
- ^ С любовью, Роберт (2010). «10». Разработка ядра Linux (3-е изд.). Эддисон Уэсли. С. 176–198. ISBN 9780672329463.
- ^ "lock.rst - Документация / kernel-hacking /lock.rst - Исходный код Linux (v5.11.10) - Bootlin" . elixir.bootlin.com . Проверено 29 марта 2021 года .
- ^ «Что такое RCU по сути? [LWN.net]» . lwn.net . Проверено 29 марта 2021 года .
- ^ «Что такое RCU? Часть 2: Использование [LWN.net]» . lwn.net . Проверено 29 марта 2021 года .
- ^ «RCU, часть 3: RCU API [LWN.net]» . lwn.net . Проверено 29 марта 2021 года .
- ^ «Модель памяти ядра Linux» . open-std.org . Проверено 29 марта 2021 года .
- ^ «Формальная модель упорядочивания памяти в ядре (часть 1) [LWN.net]» . lwn.net . Проверено 29 марта 2021 года .
- ^ «Формальная модель упорядочивания памяти в ядре (часть 2) [LWN.net]» . lwn.net . Проверено 29 марта 2021 года .
- ^ Стерн, Алан. «Объяснение модели согласованности памяти ядра Linux» .
- ^ С любовью, Роберт (2010). Разработка ядра Linux . Эддисон Уэсли. С. 133–137. ISBN 9780672329463.
- ^ С любовью, Роберт (2010). Разработка ядра Linux . Эддисон Уэсли. п. 20. ISBN 9780672329463.
- ^ «Схема стека хранилища Linux» . www.thomas-krenn.com . Архивировано 3 августа 2020 года . Проверено 19 марта 2020 .
- ^ а б в Торвальдс, Линус (январь 1999 г.). «Край Linux» . Открытые источники: голоса революции открытого исходного кода . О'Рейли . ISBN 1-56592-582-3. Проверено 13 октября 2013 года .
- ^ «Перенос Linux на DEC Alpha: ядро и оболочка» . Архивировано 5 сентября 2019 года . Дата обращения 5 октября 2019 .
- ^ «Linux on Alpha: стратегический выбор» . Архивировано 4 сентября 2019 года . Дата обращения 5 октября 2019 .
- ^ "Кластер Авалон | ТОП500 суперкомпьютерных сайтов" . www.top500.org . Архивировано 5 октября 2019 года . Дата обращения 5 октября 2019 .
- ^ Ван, Дэвид (6 мая 2010 г.). «Android теперь работает на iPhone 3G» . TechHive . IDG . Архивировано 22 июля 2010 года . Проверено 11 июля 2010 года .
- ^ «ЛКДДб» . Проект LKDDb. Архивировано 25 февраля 2021 года . Проверено 26 января 2021 года .
- ^ «Оборудование Linux» . Проект оборудования Linux. Архивировано 26 января 2021 года . Проверено 26 января 2021 года .
- ^ «Ядро Linux 4.0, Раздел 1.2. Исправления в реальном времени» . kernelnewbies.org . 26 апреля 2015. архивации с оригинала на 4 мая 2015 года . Проверено 27 апреля 2015 года .
- ^ Джонатан Корбет (25 февраля 2015 г.). «Грубый патч для живого исправления» . LWN.net . Архивировано 27 апреля 2015 года . Проверено 27 апреля 2015 года .
- ^ "kernel / git / torvalds / linux.git: Получите живую инфраструктуру исправлений из Jiri Kosina (дерево исходных текстов ядра Linux)" . kernel.org . 11 февраля 2015 года архивации от оригинала 11 июня 2015 . Проверено 27 апреля 2015 года .
- ^ Mookhey, KK; Бургате, Нилеш (1 июля 2005 г.). Linux: функции безопасности, аудита и контроля . США: ISACA . п. 14. ISBN 1-893209-78-4. Архивировано 2 июня 2013 года . Проверено 31 декабря 2010 года .
- ^ Хэтч, Брайан (15 июля 2008 г.). Взлом открытого Linux: секреты безопасности Linux и решения . McGraw-Hill Osborne Media . п. 524. ISBN 978-0-07-226257-5. Архивировано 2 июня 2013 года . Проверено 31 декабря 2010 года .
- ^ Джегер, Трент (7 октября 2008 г.). Безопасность операционной системы . Издатели Морган и Клейпул. п. 122. ISBN 978-1-59829-212-1. Архивировано 2 июня 2013 года . Проверено 31 декабря 2010 года .
- ^ «CAP_PERFMON - и вообще новые возможности [LWN.net]» . lwn.net . Архивировано 4 августа 2020 года . Дата обращения 2 августа 2020 .
- ^ «Использование модуля безопасности Linux - документация ядра Linux» . www.kernel.org . Архивировано 2 мая 2020 года . Проверено 10 января 2020 года .
- ^ "Агентство национальной безопасности | Центральная служба безопасности> Чем мы занимаемся> Исследования> SE Linux> Вопросы и ответы по SE Linux" . www.nsa.gov . Архивировано 18 сентября 2019 года . Проверено 10 января 2020 года .
- ^ «Seccomp BPF (SECure Computing with Filters) - Документация ядра Linux» . www.kernel.org . Архивировано 7 марта 2020 года . Проверено 10 января 2020 года .
- ^ Эндрюс, Джереми (16 июля 2008 г.). «Ошибки безопасности и полное раскрытие информации» . KernelTrap . Архивировано из оригинала 19 июля 2008 года . Проверено 31 декабря 2010 года .
- ^ Шпенглер, Брэд (16 июля 2008 г.). «Неофициальная политика сокрытия безопасности Linux» . Полное раскрытие информации (список рассылки). Архивировано 7 августа 2020 года . Проверено 31 декабря 2010 года .
- ^ Foundation, Linux (25 октября 2017 г.). «Состояние развития ядра Linux в 2017 году» . Фонд Linux . Архивировано 27 мая 2020 года . Проверено 27 мая 2020 .
- ^ "git-clone (1) - справочная страница Linux" . man7.org . Архивировано 14 октября 2020 года . Дата обращения 16 августа 2020 .
- ^ "git-pull (1) - справочная страница Linux" . man7.org . Архивировано 12 ноября 2020 года . Дата обращения 16 августа 2020 .
- ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux . Pearson Education. п. 11. ISBN 9780768696790.
- ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux . Pearson Education. п. 12. ISBN 9780768696790.
- ^ «Как работает процесс разработки» . Архивировано 9 декабря 2017 года . Проверено 4 февраля 2018 года .
- ^ Роберт Лав (2010). Разработка ядра Linux: Разработка ядра Linux . Pearson Education. п. 13. ISBN 9780768696790.
- ^ «HOWTO по разработке ядра Linux - документация по ядру Linux» . www.kernel.org . Архивировано 7 марта 2020 года . Проверено 4 января 2020 года .
- ^ «Стиль кодирования ядра Linux - документация ядра Linux» . www.kernel.org . Архивировано 5 января 2020 года . Проверено 4 января 2020 года .
- ^ Куббилун, Инго А. (2 июня 2004 г.). «Патч ядра Linux для компилятора Intel» (на немецком языке). Pyrillion.org. Архивировано из оригинального 22 июля 2011 года . Проверено 12 ноября 2010 года .
- ^ тимофей (26 февраля 2009 г.). «Проект высокопроизводительного ядра Linux - LinuxDNA» . Slashdot Linux . Dice Holdings . Архивировано 18 октября 2019 года . Проверено 30 октября 2010 года .
- ^ Райан, Джастин (25 февраля 2009 г.). «LinuxDNA расширяет возможности Linux с помощью компилятора Intel C / C ++» . Linux Journal . Belltown Media, Inc. Архивировано 9 ноября 2020 года . Проверено 30 октября 2010 года .
- ^ Лельбах, Брюс (25 октября 2010 г.). «Clang создает работающее ядро Linux (загрузка RL5 с SMP, сетью и X, собственными хостами)» . cfe-dev (список рассылки). Архивировано из оригинала 7 сентября 2015 года.
- ^ Ларабель, Майкл (12 апреля 2014 г.). «Linux 3.15 почти может быть скомпилирован под LLVM Clang» . Фороникс . Архивировано 13 августа 2020 года . Проверено 10 июня 2014 .
- ^ Ларабель, Майкл . «Патч за патчем, LLVM Clang становится лучше при построении ядра Linux» . Фороникс . Архивировано 13 августа 2020 года . Проверено 20 ноября 2014 года .
- ^ Эдж, Джейк (7 мая 2013 г.). «LFCS: проект LLVMLinux» . LWN.net . Архивировано 10 августа 2020 года . Проверено 3 марта 2015 года .
- ^ Мёллер, Ян-Симон (2 февраля 2014 г.). «LLVMLinux: ядро Linux с крыльями дракона» (PDF) . LLVM Project . Архивировано 3 августа 2020 года (PDF) . Проверено 3 марта 2015 года .
- ^ Desaulniers, Ник; Хакманн, Грег; Хайнс, Стивен (18 октября 2017 г.). «Встреча разработчиков LLVM 2017: Компиляция пользовательского пространства Android и ядра Linux с помощью LLVM» . YouTube . Архивировано 31 декабря 2020 года . Проверено 7 декабря 2020 .
- ^ Хакманн, Грег (2 февраля 2017 г.). "Марлин-нуга-mr1-clang патч серии" . Архивировано 10 декабря 2020 года . Дата обращения 6 декабря 2020 .
- ^ Кельке, Матиас (22 октября 2018 г.). «cross-kernel2: сделать clang компилятором по умолчанию для сборок ядра» . Архивировано 10 декабря 2020 года . Дата обращения 6 декабря 2020 .
- ^ Ларабель, Майкл (4 февраля 2019 г.). «Использование LLVM Clang для компиляции ядра Linux снова нагревается благодаря Google» . Фороникс . Архивировано 25 ноября 2020 года . Дата обращения 6 декабря 2020 .
- ^ Десольерс, Ник (10 декабря 2019 г.). "vts: kernel: применять vts_kernel_toolchain для всех TARGET_ARCH для R" . Архивировано 10 декабря 2020 года . Дата обращения 6 декабря 2020 .
- ^ Десольерс, Ник (19 ноября 2020 г.). "Re: нарушение сигнатуры указателя функции" . LKML . Дата обращения 6 декабря 2020 .
- ^ С любовью, Роберт (2010). Разработка ядра Linux (3-е изд.). Эддисон-Уэсли. п. 364. ISBN 978-0-672-32946-3. OCLC 268788260 .
- ^ Брэдфорд, Джон (8 марта 2003 г.). «Re: что такое OOPS» . LKML (список рассылки). Архивировано 31 октября 2014 года . Проверено 30 октября 2010 года .
- ^ С любовью, Роберт (2010). Разработка ядра Linux . Эддисон Уэсли. п. 371. ISBN. 9780672329463. OCLC 268788260 .
- ^ "syslog (2) - справочная страница Linux" . man7.org . Архивировано 13 октября 2020 года . Проверено 15 августа 2020 .
- ^ «kmsg: экспортировать записи printk в интерфейс / dev / kmsg [LWN.net]» . lwn.net . Архивировано 2 октября 2015 года . Дата обращения 16 августа 2020 .
- ^ "systemd" . www.freedesktop.org . Архивировано 18 августа 2020 года . Дата обращения 16 августа 2020 .
- ^ "systemd-journald (8) - страница руководства Linux" . man7.org . Архивировано 12 августа 2020 года . Проверено 15 августа 2020 .
- ^ Посмотрите, что делает ваш компьютер, с помощью утилит Ftrace , данные получены 9 мая 2021 г.
- ^ «Отладка ядра с помощью Ftrace - часть 1 [LWN.net]» . lwn.net . Архивировано 9 ноября 2020 года . Проверено 15 сентября 2020 .
- ^ «Отладка ядра с помощью Ftrace - часть 2 [LWN.net]» . lwn.net . Архивировано 31 марта 2020 года . Проверено 15 сентября 2020 .
- ^ «ftrace - Function Tracer - Документация ядра Linux» . www.kernel.org . Архивировано 19 сентября 2020 года . Проверено 15 сентября 2020 .
- ^ «Трассировка времени загрузки - документация ядра Linux» . www.kernel.org . Архивировано 31 октября 2020 года . Проверено 19 сентября 2020 года .
- ^ «Зонды ядра (Kprobes) - документация ядра Linux» . www.kernel.org . Архивировано 11 октября 2020 года . Дата обращения 6 октября 2020 .
- ^ «Uprobe-tracer: отслеживание событий на основе Uprobe - документация ядра Linux» . www.kernel.org . Архивировано 4 декабря 2020 года . Дата обращения 6 октября 2020 .
- ^ «Использование kgdb, kdb и внутреннего отладчика ядра» . mirrors.edge.kernel.org . Архивировано 26 января 2021 года . Дата обращения 3 ноября 2020 .
- ^ Джин Салли (2010). Pro встраиваемые системы Linux . Апресс. п. 252. ISBN. 9781430272267.
- ^ «Кодекс конфликта» . Проверено 4 февраля 2018 года .[ постоянная мертвая ссылка ]
- ^ Шарвуд, Саймон (6 октября 2015 г.). «Разработчик ядра Linux, который попросил Линуса Торвальдса прекратить словесные оскорбления, уходит из-за словесных оскорблений» . Реестр . Архивировано 29 марта 2020 года . Проверено 4 февраля 2018 года .
- ^ Эдж, Джейк (31 января 2018 г.). «Слишком много лордов, мало управляющих» . LWN.net . Архивировано 9 ноября 2020 года . Проверено 4 февраля 2018 года .
- ^ Корбет, Джонатан (6 ноября 2017 г.). «Убейте разработчиков ядра» . LWN.net . Архивировано 26 января 2021 года . Проверено 4 февраля 2018 года .
- ^ Биллимория, Кайвань Н. (2021 г.). Программирование ядра Linux - Всеобъемлющее руководство по внутреннему устройству ядра, написанию модулей ядра и синхронизации ядра . Бирмингем: Packt Publishing, Limited. п. 55. ISBN 978-1-78995-592-7. OCLC 1240585605 .
- ^ Вадува, Александру (2016). Linux: разработка встраиваемых систем: использование возможностей Linux для разработки увлекательных и эффективных проектов встраиваемых систем Linux: курс, состоящий из трех модулей . Алекс Гонсалес, Крис Симмондс. Бирмингем, Великобритания. п. 663. ISBN 978-1-78712-445-5. OCLC 960471438 .
- ^ Создание встроенных систем Linux . Карим Ягмур (2-е изд.). Севастополь [Калифорния]: O'Reilly Media. 2008. с. 387. ISBN. 978-0-596-52968-0. OCLC 273049576 .CS1 maint: другие ( ссылка )
- ^ Ягмур, Карим (2011). Встроенный Android . Севастополь, Калифорния: O'Reilly Media. п. 44. ISBN 978-1-4493-2798-9. OCLC 812180000 .
- ^ «SoC (система на кристалле)» . OpenWrt Wiki . 6 ноября 2014 . Проверено 15 марта 2021 года .
- ^ «Что делать с номерами CVE [LWN.net]» . lwn.net . Проверено 15 марта 2021 года .
- ^ Амадео, Рон (20 ноября 2019 г.). «Google излагает планы по основной поддержке ядра Linux в Android» . Ars Technica . Проверено 31 марта 2021 года .
- ^ Брюшон, Джоди (24 апреля 2021 г.), jbruchon / elks , получено 27 апреля 2021 г.
- ^ «Состояние вытеснения-рт» . linuxplumbersconf.org . Архивировано из оригинального 15 октября 2016 года . Проверено 14 июня +2016 .
- ^ Мейер, Дэвид (3 февраля 2010 г.). «Разработчик Linux объясняет, как удалить код ядра Android» . ZDNet . CBS Interactive . Архивировано 15 октября 2016 года . Проверено 3 февраля 2010 года .
- ^ «Глава 03: Обзор платформы maemo» . Обзор технологии maemo . Nokia . 2008. Архивировано из оригинального 16 -го июня 2008 года . Проверено 9 апреля 2010 года .
- ^ Кроа-Хартман, Грег (2 февраля 2010 г.). «Android и сообщество ядра Linux» . Архивировано 27 апреля 2019 года . Проверено 3 февраля 2010 года .
- ^ а б Роджер Йе (2017). Системное программирование Android . Packt Publishing. п. 14. ISBN 9781787120389.
- ^ Торвальдс, Линус (19 сентября 2001 г.). «Истоки Linux - Линус Торвальдс» . YouTube . Дата обращения 6 декабря 2020 .
- ^ «Почему я ушел: разработчик ядра Кон Коливас» . Журнал APC . Журналы ACP. 24 июля 2007 года Архивировано из оригинала 7 июля 2011 года . Проверено 15 августа 2011 года .
- ^ Корбет, Джонатан (25 июля 2007 г.). "Re: -mm планы слияния для 2.6.23" . LWN.net. Архивировано 11 февраля 2018 года . Проверено 10 февраля 2018 .
- ^ Кокс, Алан (28 июля 2009 г.). "Re: [ПАТЧ] кдесу сломано" . Архивировано 11 февраля 2018 года . Проверено 10 февраля 2018 .
- ^ Родригес, Голдвин (22 января 2011 г.). «История двух целей SCSI» . Архивировано 15 февраля 2018 года . Проверено 14 февраля 2018 года .
- ^ Стейнмец, Андреас (17 января 2013 г.). «LIO - сломанная целевая реализация iSCSI» . Архивировано 15 февраля 2018 года . Проверено 14 февраля 2018 года .
- ^ Пол, Райан (19 июня 2012 г.). «Линус Торвальдс говорит NVIDIA« ебать вас » . Архивировано 15 февраля 2018 года . Проверено 14 февраля 2018 года .
- ^ Джон Голд (3 апреля 2014 г.). «Линус Торвальдс отстраняет ключевого разработчика Linux: паника в ядре, когда разработчик Systemd тыкает медведя» . Архивировано 24 марта 2019 года . Проверено 24 марта 2019 года .
- ^ Поэтинг, Леннарт (6 октября 2014 г.). «О болезни сообщества ядра Linux» . Google+ . Архивировано из оригинального 27 мая 2018 года . Проверено 10 февраля 2018 .
- ^ Бродкин, Джон (6 марта 2015 г.). «VMware якобы нарушала лицензию Linux с открытым исходным кодом в течение многих лет» . Ars Technica . Архивировано 15 февраля 2018 года . Проверено 14 февраля 2018 года .
- ^ Маккарти, Кирен (26 августа 2016 г.). «Обидев всех в мире, Линус Торвальдс называет собственных адвокатов« отвратительной гнойной болезнью » » . Реестр . Архивировано 15 февраля 2018 года . Проверено 14 февраля 2018 года .
- ^ Корбет, Джонатан (10 сентября 2007 г.). «KS2007: Отношения с разработчиками и процесс развития» . LWN.net . Архивировано 12 февраля 2018 года . Проверено 11 февраля 2018 .
- ^ Бродкин, Джон (16 июля 2013 г.). «Линус Торвальдс защищает свое право позорить разработчиков ядра Linux» . ARS Technica . Архивировано 17 февраля 2018 года . Проверено 11 февраля 2018 .
- ^ Корбет, Джонатан (9 марта 2015 г.). «Код конфликта ядра» . LWN.net . Архивировано 12 февраля 2018 года . Проверено 11 февраля 2018 .
- ^ Корбет, Джонатан (18 сентября 2018 г.). «Кодекс, конфликт и поведение» . LWN.net . Архивировано 19 сентября 2018 года . Проверено 19 сентября 2018 года .
- ^ Коэн, Ноам (19 сентября 2018 г.). «После многих лет оскорбительных писем создатель Linux уходит в сторону» . Житель Нью-Йорка . Архивировано 20 февраля 2020 года . Проверено 24 сентября 2018 года .
- ^ Ларабель, Майкл. «Отказ от ненормативной лексики в комментариях к коду ядра: Linux получает« объятия » » . Фороникс . Архивировано 21 апреля 2019 года . Проверено 15 июня 2019 .
- ^ «Эволюция Linux» (PDF) . 26 марта 2008 г. Архивировано 14 декабря 2013 г. (PDF) . Проверено 6 ноября 2013 года .
- ^ «Бесконечное развитие: модель жизненного цикла ядра Linux» (PDF) . 25 октября 2011 г. Архивировано 17 октября 2013 г. (PDF) . Проверено 6 ноября 2013 года .
- ^ Кроа-Хартман, Грег (12 февраля 2008 г.). «Re: Announce: Linux-next (Или мечта Андрея :-))» . Список рассылки ядра Linux (список рассылки). Архивировано 2 февраля 2017 года . Проверено 30 января 2017 года .
- ^ Уиллер, Дэвид А. «Ядро Linux 2.6: оно того стоит!» . Архивировано 21 августа 2011 года . Проверено 18 января 2007 года .
- ^ «Экономическое влияние FLOSS на инновации и конкурентоспособность сектора ИКТ ЕС» (PDF) (Таблица 3 на стр. 50). Архивировано 15 февраля 2010 года (PDF) . Проверено 8 января 2011 года .
- ^ «Оценка общей стоимости разработки дистрибутива Linux» (PDF) (таблица на странице 6). Архивировано из оригинального (PDF) 11 июля 2010 года.
- ^ «Ядро на миллиард долларов» . Linux.slashdot.org. 24 февраля 2010 года архивации с оригинала на 15 мая 2011 года . Проверено 12 ноября 2010 года .
- ^ Уилер, Дэвид. «Ядро Linux: оно того стоит!» . Архивировано 23 февраля 2021 года . Проверено 17 сентября 2012 года .
- ^ "Файл Linux MAINTAINERS" . Архивировано из оригинального 12 января 2013 года .
- ^ Торвальдс, Линус (16 сентября 2018 г.). «Выпущен Linux 4.19-rc4, приношу извинения и примечания к сопровождению» . LKML . Архивировано 23 сентября 2018 года . Проверено 23 сентября 2018 года .
- ^ Александру Вадува, Алекс Гонсалес и Крис Симмондс (2016). Linux: встроенная разработка . Packt Publishing. п. 663. ISBN 9781787124455.
- ^ «Архив ядра Linux» . Архивировано 21 февраля 2011 года . Дата обращения 13 ноября 2019 .
- ^ а б Ямагата, Хироо (3 августа 1997 г.). «Прагматик свободного программного обеспечения» . HotWired . Архивировано из оригинального 10 февраля 2007 года . Проверено 21 февраля 2007 года .
- ^ «GPL-v2» . gnu.org . Архивировано 25 декабря 2019 года . Проверено 28 января 2020 года .
- ^ Корбет, Джонатан (31 января 2006 г.). «GPLv3 и ядро» . LWN.net . Архивировано 10 августа 2020 года . Проверено 21 февраля 2007 года .
- ^ Торвальдс, Линус (8 сентября 2000 г.). «Linux-2.4.0-test8» . LKML (список рассылки). Архивировано 15 мая 2020 года . Проверено 21 февраля 2007 года .
- ^ "gnu.org" . www.gnu.org . Архивировано 2 февраля 2021 года . Проверено 18 октября 2017 года .
- ^ Кокс, Алан (20 января 2006 г.). «Re: GPL V3 и Linux» . LKML (список рассылки). Архивировано 26 января 2021 года . Проверено 21 февраля 2007 года .
- ^ Шенкленд, Стивен (25 сентября 2006 г.). «Лучшие программисты Linux, поддерживающие GPL 3» . News.com . CNET . Проверено 21 февраля 2007 года .
- ^ а б Джеймс Э. Дж. Боттомли, Мауро Карвалью Чехаб, Томас Глейкснер, Кристоф Хеллвиг, Дэйв Джонс, Грег Кроа-Хартман, Тони Лак, Эндрю Мортон, Тронд Майклбаст, Дэвид Вудхаус (15 сентября 2006 г.). «Позиция разработчиков ядра по GPLv3: опасности и проблемы с GPLv3» . LWN.net . Архивировано 18 января 2021 года . Проверено 11 марта 2015 года .CS1 maint: использует параметр авторов ( ссылка )
- ^ Петрелей, Николас (27 сентября 2006 г.). «Борьба со злом или борьба за внимание?» . linuxjournal.com. Архивировано 2 марта 2018 года . Проверено 11 марта 2015 года .
- ^ «Линус Торвальдс говорит, что GPL v3 нарушает все, за что стояла GPLv2» . Debconf 2014. 2014. Архивировано 8 мая 2018 года . Проверено 21 марта 2018 года .
- ^ Кларк, Роб; Семвал, Сумит (1 ноября 2012 г.). «Структура совместного использования буфера DMA: Введение» (PDF) . Embedded Linux Conference. Архивировано (PDF) из оригинала 8 августа 2014 года . Проверено 2 августа 2014 .
- ^ Кокс, Алан (10 октября 2012 г.). «[PATCH] dma-buf: используйте EXPORT_SYMBOL» . Инфраструктура прямого рендеринга (список рассылки). Архивировано 22 января 2013 года . Проверено 3 сентября 2013 года .
- ^ Торвальдс, Линус (10 декабря 2003 г.). "RE: Linux GPL и исключение для двоичных модулей?" . LKML (список рассылки). Архивировано 15 июня 2011 года . Проверено 31 декабря 2010 года .
- ^ Торвальдс, Линус (3 декабря 2003 г.). "Re: Linux GPL и исключение для двоичных модулей?" . LKML (список рассылки). Архивировано 28 апреля 2020 года . Проверено 12 ноября 2010 года .
- ^ «Linux Firmware API - документация ядра Linux» . www.kernel.org . Архивировано 13 января 2020 года . Проверено 13 января 2020 года .
- ^ «Испорченные ядра - документация ядра Linux» . www.kernel.org . Архивировано 7 марта 2020 года . Проверено 13 января 2020 года .
- ^ «Встроенная прошивка - Документация ядра Linux» . www.kernel.org . Архивировано 10 июня 2020 года . Проверено 10 июня 2020 .
- ^ «Регистрация Linux TM в США» . uspto.gov . Архивировано 24 февраля 2021 года . Проверено 6 сентября 2019 .
- ^ «Регистрация Linux TM в ЕС» . euipo.europa.eu . Архивировано 9 июня 2016 года . Проверено 28 ноября 2020 .
- ^ Хьюз, Фил (1 августа 1997 г.). «Спор о товарных знаках Linux» . Linux Journal . Belltown Media, Inc. Архивировано 30 апреля 2010 года . Проверено 8 декабря 2010 года .
- ^ Хьюз, Фил (1 марта 1997 г.). «Действия, предпринятые в отношении торговой марки Linux» . Linux Journal . Belltown Media, Inc. Архивировано 3 марта 2010 года . Проверено 8 декабря 2010 года .
- ^ Гиссельберг, Тоня (2010). «История товарных знаков Linux, операционной системы» (PDF) . Gisselberg Law Firm, Inc. Архивировано из оригинального (PDF) 11 июля 2011 года . Проверено 8 декабря 2010 года .
дальнейшее чтение
- Торвальдс, Линус; Даймонд, Дэвид (2001). Просто для удовольствия: история случайного революционера . HarperBusiness . ISBN 978-0066620732.
- Безроуков Николай. «Глава 4: Доброжелательный диктатор» . Портреты пионеров открытого исходного кода (электронная книга). Мягкая панорама. Архивировано 13 октября 2005 года . Проверен +3 Октябрь 2005 .
- «LinkSys и бинарные модули» . Еженедельный выпуск LWN.net. 16 октября 2003 года архивации с оригинала на 1 августа 2016 года . Проверено 21 июля +2016 .
- «Любимый талисман Linux» . Архивировано 16 августа 2005 года . Проверено +16 июнь +2005 .
- Праневич, Иосиф (декабрь 2003 г.). «Чудесный мир Linux 2.6» . Архивировано из оригинала 16 июля 2003 года.
- «Изменения Linux» . Архивировано 31 октября 2005 года . Проверено 31 Октябрь 2005 .
- «Семинар по ядру Linux 2.6» . Архивировано из оригинала 2 февраля 2007 года.
- «Драйверы устройств Linux» (3-е изд.). Архивировано 27 июля 2016 года . Проверено 21 июля +2016 .
- «Понимание ядра Linux» (книга) (3-е изд.). Архивировано 17 декабря 2005 года . Проверено 22 декабрь 2 005 .
- «Сеть ядра Linux, Рами Розен, 2014» (книга). Архивировано 12 мая 2015 года . Проверено 14 июня 2015 года .
- «Linux: GPL и двоичные модули» . Архивировано из оригинала 23 июля 2005 года.
- «Анатомия ядра Linux» . Архивировано 27 июня 2007 года . Проверено 9 июня 2007 года .
Внешние ссылки
- Официальный веб-сайт
- Указатель документации ядра Linux
- Справочные страницы ядра Linux
- Ядро bugzilla и регрессии для каждой последней версии ядра
- Kernel Newbies , источник различной информации, связанной с ядром
- Покрытие ядра на LWN.net , авторитетном источнике информации о ядре
- Bootlin's Elixir Cross Referencer , перекрестная ссылка на исходный код ядра Linux
- Грег Кроа Хартман о ядре Linux на YouTube