Ядро Linux

редактировать
Бесплатное ядро ​​Unix-подобной операционной системы с открытым исходным кодом

Ядро Linux
Тукс Тукс пингвин, талисман Linux
Linux 3.0.0 boot.png Загрузка ядра Linux 3.0.0
Разработчик Линус Торвальдс и тысячи сотрудников
Написано на C и сборке
Семейство ОСUnix - например
Первоначальный выпуск0.02 (5 октября 1991; 29 лет назад (1991-10-05))
Последний выпуск 5.9.1 (17 октября 2020; 12 дней назад (2020-10-17))
Последняя предварительная версия 5.10-rc1 (25 октября 2020; 4 дня назад (2020-10-25))
Репозиторий Измените это на Wikidata
Доступно в Английский
Ядро типМонолитное
Лицензия GNU GPLv2 (только) с некоторыми вариантами в соответствии с совместимыми вариантами GPL или разрешительными лицензиями, такими как BSD, MIT
Официальный веб-сайтwww.kernel.org

Ядро Linux,, разработанное участниками со всего мира, это бесплатная, монолитная, модульная,Unix-подобная операционная система с открытым исходным кодом ядро ​​, и его легко настраивать.

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

Ядро Linux реализовано на большом количестве вычислительных систем, таких как встроенные устройства, мобильные устройства (включая его использование в операционной системе Android ), системы компьютерах, серверах, мэйнфреймах и суперкомпьютерах.

Ядро Linux было задумано и создано в 1991 году Линусом Торвальдсом для его ПК на базе i386, но с тех пор оно было перенесено в широкий спектр архитектур. Однако ядро ​​Linux сильно оптимизировано с использованием инструкций для конкретной архитектуры (ISA ), поэтому переносимость не так проста, как с другими ядрами (например, с NetBSD, что по состоянию на 2019 год поддерживает 59 аппаратных платформ).

Linux вскоре был принят в качестве ядра для операционной системы GNU, которая была создана как с открытым исходным кодом и бесплатное программное обеспечение и основывалась на на UNIX как побочный продукт войн Unix. С тех пор он породил множество дистрибутивов операционной системы, также называемых Linux, хотя формально термин «Linux» обычно относится только к ядру.

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

Содержание
  • 1 История
  • 2 Архитектура
    • 2.1 Интерфейсы
      • 2.1.1 API ядра для пользовательского пространства
      • 2.1.2 ABI между ядром и пользовательским пространством
      • 2.1.3 В - API ядра
      • 2.1.4 Внутренний ABI
    • 2.2 Технические характеристики
      • 2.2.1 Процессы и потоки
      • 2.2.2 Виртуализация, пространство имен, группы управления
      • 2.2.3 Планирование и приоритетное прерывание
      • 2.2.4 Управление памятью
        • 2.2.4.1 Структура адресного пространства процессов
        • 2.2.4.2 Системные вызовы управления памятью
        • 2.2.4.3 Управление физической памятью
        • 2.2.4.4 Управление виртуальной памятью
        • 2.2. 4.5 Пейджинг и замена страниц
      • 2.2.5 Межпроцессное взаимодействие и синхронизация
      • 2.2.6 Уровень ввода / вывода
      • 2.2.7 Виртуальные и серьезные файловые системы
      • 2.2.8 Драйверы устройств
      • 2.2. 9 Поддерживаемая архитектура
      • 2.2.10 Оперативное исправление
      • 2.2.11 Безопасность
  • 3 Разработка
    • 3.1 Сообщество разработчиков
    • 3.2 Управление исходным кодом
    • 3.3 Отправка кода в ядро ​​
    • 3.4 Программирование языка и стиль кодирования
    • 3.5 Набор инструментов GNU
    • 3.6 Компилятор компилятора tibility
    • 3.7 Отладка ядра
    • 3.8 Модель разработки
    • 3.9 Форки Linux
    • 3.10 Конфликты сообщества разработчиков
    • 3.11 Кодовая база
    • 3.12 Ориентировочная стоимость повторной разработки
    • 3.13 Техническое обслуживание и долгосрочная поддержка
    • 3.14 Связь с дистрибутивами Linux
  • 4 Юридические аспекты
    • 4.1 Условия лицензирования GPLv2
    • 4.2 Загружаемые модули ядра
    • 4.3 Бинарные двоичные файлы встроенного ПО
    • 4.4 Товарный знак
  • 5 См. Также
  • 6 Ссылки
  • 7 Дополнительная литература
  • 8 Внешние ссылки
История
Линус Торвальдс с микрофоном на LinuxCon Europe 2014 в Дюссельдорфе

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

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

17 сентября 1991 г. Торвальдс подготовил версию Linux 0.01 и поместил на ftp.funet.fi - FTP-сервер Финского университета и исследовательской сети (FUNET ).

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

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

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

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

Когда Торвальдс выпустил версию 0.12 в феврале 1992 года, он принял Стандартную общественную лицензию GNU версию 2 (GPLv2) вместо своей предыдущей самовоспроизводящейся лицензии, которая не допускала коммерческого распространения. В отличие от Unix, все исходные файлы Linux находятся в свободном доступе, включая драйверы устройств. Первоначальный успех Linux был достигнут программистами и тестировщиками по всему миру. Благодаря поддержке API-интерфейсов POSIX через libC, которая при необходимости работает как точка входа в адресное пространство ядра, Linux может запускать программное обеспечение и приложения, разработанные для Unix.

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

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

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

. Она запустила систему управления версией для ядра с четырьмя четырьмя числами, разделенными точками, где первая представляет основной выпуск, вторая - второстепенный выпуск, а третье была доработка. В то время второстепенные версии с нечетными номерами предназначались для разработки и тестирования, а затем второстепенные версии с нечетными номерами. Необязательная четвертая цифра указывает на набор исправлений для ревизии. Выпуски в стадии разработки обозначены суффиксом -rc («кандидат на выпуск»).

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

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

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

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

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

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

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

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

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

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

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

Торвальдс Отметил 20-летие Linux в июле 2011 года выпуском версии ядра 3.0.0. Сообщает, что сообщение 3.x как 2.6.40 + x, чтобы старые программы работали.

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

11 декабря 2012 года Торвальдс решил снизить сложность ядра, убрав поддержку процессоров i386, сделав ядро ​​серии 3.7 последним, поддерживающим исходный процессор. В той же серии унифицированная поддержка процессора ARM.

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

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

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

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

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

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

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

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

Архитектура
Карта ядра Linux

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

  • параллельные вычисления и (при наличии достаточного количества ядер ЦП для задач, готовых к запуску) даже истинное параллельное выполнение множества процессов одновременно (каждый из них имеет один или несколько потоков выполнения ) на SMP и Архитектуры NUMA ;
  • настраиваемые функции (с помощью одной из команд make * config перед запуском компиляции) и изменяемые политики во время выполнения (через nice (2), setpriority (2) и семействосистемных вызовов sched _ * (2)) планировщиков задач, которые позволяют вытеснять многозадачность (как в пользовательском режиме, так и, начиная с серии 2.6, в режим ядра ); Completely Fair Scheduler (CFS) является планировщиком Linux по умолчанию с 2007 года и использует красно-черное дерево, которое может искать, вставлять и удалять информацию о процессе (task_struct ) с O (log n) временной сложностью, где n - количество выполняемых задач;
  • расширенное управление памятью с выгружаемая виртуальная память ;
  • межпроцессное взаимодействие и механизм синхронизации ;
  • a виртуальная файловая система поверх нескольких конкретных файловых систем (ext4, Btrfs, XFS, JFS, FAT32 и многие другие);система на IBM Summit ; по состоянию на октябрь 2019 года все из 500 самых быстрых суперкомпьютеров в мире работают под управлением той или иной операционной системы на основе ядра Linux, что является большим изменением по сравнению с 1998 годом, когда в списке добавлен первый суперкомпьютер Linux.

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

    Live patching

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

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

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

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

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

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

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

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

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

    Разработка

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

    Обычно сообщество разработчиков ядра Linux состоит из 5000 или 6000 членов. Согласно исследованию «Состояние разработки ядра Linux в 2017 году», опубликованному Linux Foundation и касающемуся коммитов для выпусков с 4.8 по 4.13, около 1500 разработчиков вносили свой вклад в среднем примерно из 200-250 компаний. На долю 30 лучших разработчиков пришлось чуть более 16% кода. Что касается компаний, наибольший вклад вносят Intel (13,1%) и Red Hat (7,2%), Linaro (5,6%), IBM (4,1%), второе и пятое место занимают «нет» (8, 2%) и «неизвестные» (4,1%) категории.

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

    Эндрю Мортон, 2005

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

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

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

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

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

    Linux написан на специальный язык программирования C, поддерживаемый GCC, компилятор, который во многих отношениях расширяет стандарт C, например, используя встроенные элементы кода, написанные на ассемблер (в синтаксисе GCC "ATT") архитектуру. С 2002 года весь код должен соответствовать 21 правилу, составляющему стиль кодирования ядра Linux.

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

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

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

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

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

    Отладка ядра

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

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

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

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

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

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

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

    Модель разработки

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

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

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

    Linux разветвляется

    iPod загружается iPodLinux

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

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

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

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

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

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

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

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

    Codebase

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

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

    Линус Торвальдс, 2005

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

    Стоимость повторной разработки ядра Linux

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

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

    По состоянию на 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 фунтов стерлингов). перепишите существующий код.

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

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

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

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

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

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

    Юридические аспекты

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

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

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

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

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

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

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

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

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

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

    Бинарные двоичные объекты микропрограммы

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

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

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

    Linux является зарегистрированным товарный знак из Линуса Торвальдса в США, Европейском Союзе и некоторых других странах. Судебное разбирательство, начатое за подделку заявки на регистрацию товарного знака третьей стороной (Уильям Делла Кроче, которая никогда не участвовала в разработке Linux), и претензии того же лица о нарушении прав на товарный знак закончились в августе 1997 года, когда товарный знак был окончательно передан компании. Г-н Торвальдс.

    См. Также
    • значок Портал Linux
    • Портал бесплатного программного обеспечения с открытым исходным кодом
    Ссылки
    Дополнительная литература
    Внешние ссылки
    Викискладе есть носители, связанные с ядром Linux.
    В Викиучебниках есть больше по теме: ядро ​​Linux
Последняя правка сделана 2021-05-27 10:48:25
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте