Сколько строк кода в ядре linux

Обновлено: 07.07.2024

Linux ( /ˈlɪnʊks/ [1] ) — ядро операционной системы, соответствующее стандартам финским студентом Линусом Торвальдсом в 1991 году.

В большинстве своём код написан на Си с некоторыми расширениями ассемблере (с использованием синтаксиса GNU Assembler AT&T).

Распространяется в основном [2] свободно на условиях GNU General Public License.

Содержание

История

Привет всем, кто использует миникс — Я делаю (бесплатную) операционную систему (всего лишь хобби, не будет большой и профессиональной как gnu) для клонов 386 (486) AT…

Hello everybody out there using minix -

I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones.

К тому времени проект GNU Hurd ещё не было готово.

«Linux», разработка которого была начата Торвальдсом — лишь небольшая часть многих из использующих его систем, которые обычно тоже называют «Linux». Это иногда приводит к путанице, и те из них, которые используют системные библиотеки (например, GNU C Library) и другие программы Проекта GNU, называют также «GNU/Linux». [4]

О различных комбинациях свободных компонентов в операционных системах см. Операционные системы на основе свободного ПО.

Сейчас семейство операционных систем на базе ядра Linux — третье по популярности (0,8 % [5] ) в мире на рынке настольных компьютеров.

Хронология

From: torvalds@klaava.Helsinki.Fi (Линус Бенедикт Торвальдс)
Newsgroups: comp.os.minix
Subject: Маленький опрос о моей новой операционной системе
Message-ID:<1991Aug25.205708.9541@klaava.Helsinki.Fi>
Date: 25 Aug 91 20:57:08 GMT
Organization: Хельсинкский Университет

Привет всем, кто использует миникс — Я делаю (бесплатную) операционную систему (всего лишь хобби, не будет большой и профессиональной как gnu) для клонов 386 (486) AT. Она ваялась с апреля, и скоро будет готова. Я хочу отзывов о том, что людям нравится/не нравится в миниксе, ибо моя система на неё похожа(такое же устройство файловой системы(по практическим соображениям) среди всего прочего).

Я уже включил gcc (1.40), и похоже всё работает. Это значит, что что-то полезное появится через несколько месяцев, и я хотел бы узнать, чего люди хотят. Любые советы принимаются, но я не обещаю, что всё исполню :-)

Линус (torvalds@kruuna.helsinki.fi)

PS. Да, у неё никакого миниксового кода, и многозадачная фс. Она НЕ переносима (применяет переключение задач 386-го, и т. п.), и скорее всего будет поддерживать только AT-винчестеры, так как это всё, что у меня есть :-(

Hello everybody out there using minix -

I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things).

I've currently ported bash(1.08) and gcc(1.40), and things seem to work. This implies that I'll get something practical within a few months, and I'd like to know what features most people would want. Any suggestions are welcome, but I won't promise I'll implement them :-)

Linus (torvalds@kruuna.helsinki.fi)

PS. Yes - it's free of any minix code, and it has a multi-threaded fs. It is NOT protable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that's all I have :-(.

Версии

Торвальдс продолжает выпускать новые версии ядра, объединяя изменения, вносимые другими программистами, и внося свои. Оно обычно называется «ванильным» (vanilla), то есть официальное ядро без каких-либо сторонних изменений. В дополнение к официальным версиям ядра существуют альтернативные ветки, которые могут быть взяты из различных источников. Как правило, разработчики дистрибутивов GNU/Linux поддерживают свои собственные версии ядра Linux, например, включая в них драйверы устройств, которые ещё не включены в официальную версию.

Нумерация версий

Номер версии ядра Linux в настоящее время содержит четыре числа, следуя недавнему изменению в долго используемой до этого политике схемы версий, основанной на трёх числах. Для иллюстрации допустим, что номер версии составлен таким образом: A.B.C[.D] (например 2.2.1, 2.4.13 или 2.6.12.3).

  • Число A обозначает версию ядра. Оно изменяется наименее часто и только тогда, когда вносятся значительные изменения в код и концепцию ядра. Оно изменялось дважды в истории ядра: в 1994 (версия 1.0) и в 1996 (версия 2.0).
  • Число B обозначает старшую версию ревизии ядра. Чётные числа обозначают стабильные ревизии, то есть те, которые предназначены для промышленного использования, такие как 1.2, 2.4 или 2.6. Нечётные числа обозначают ревизии для разработчиков, такие как 1.1 или 2.5. Они предназначены для тестирования новых улучшений и драйверов до тех пор, пока они не станут достаточно стабильными для того, чтобы быть включёнными в стабильный выпуск.
  • Число C обозначает младшую версию ревизии ядра. В старой трёхчисловой схеме нумерации, оно изменялось тогда, когда в ядро включались заплатки связанные с безопасностью, исправления ошибок, новые улучшения или драйверы. С новой политикой нумерации, однако, оно изменяется только тогда, когда вносятся новые драйверы или улучшения; небольшие исправления поддерживаются числом D.
  • Число D впервые появилось после случая, когда в коде ядра версии 2.6.8 была обнаружена грубая, требующая незамедлительного исправления ошибка, связанная с NFS. Однако, было недостаточно других изменений, для того чтобы это послужило причиной для выпуска новой младшей ревизии (которой должна была стать 2.6.9). Поэтому была выпущена версия 2.6.8.1 с единственным исправлением в виде исправления для этой ошибки. С ядра 2.6.11, эта нумерация была адаптирована в качестве новой официальной политики версий. Исправления ошибок и заплатки безопасности теперь обозначаются с помощью четвёртого числа, тогда как большие изменения выполняются в изменениях младшей версии ревизии ядра (число C).

Поддержка

В то время как Торвальдс продолжает выпускать новые экспериментальные версии, руководство «старыми» стабильными версиями передаётся другим лицам:

Серия Версии Руководители
2.0 2.0.40 Дэвид Виенхал
2.2 2.2.27-rc2 Марк-Кристиан Петерсон (раньше Алан Кокс)
2.4 2.4.37 Willy Tarreau
2.6.16 2.6.16.62 Adrian Bunk
2.6 2.6.30 Линус Торвальдс

Другими программистами ядра Linux являются Роберт Лав и Инго Молнар. (См. Список сопроводителей Linux (англ.) ).

Стабильные версии

  • Версия 1.0 в марте 1994 — поддерживала только однопроцессорные i386-машины.
  • Версия 1.2 в марте 1995 — добавлена поддержка процессоров Alpha, MIPS.
  • Версия 2.0 в июне 1996 — добавлена поддержка других процессоров, а также многопроцессорных систем.
  • Версия 2.2 в январе 1999 — [2] (англ.) .
  • Версия 2.4 в январе 2001 — добавлена поддержка Plug and Play, процессоров USB и PC-Card ([3] (англ.)
  • Версия 2.6 от 17 декабря 2003:
    • создано ответвление μClinux (для микроконтроллеров);
    • добавлена поддержка для процессоров Hitachi серии H8/300, Motorola m68k, новая архитектура доступа к памяти NUMA, поддержка NCR Voyager, технологии hyperthreading и PAE;
    • добавлено:
      • поддержка файловой системы SGI);
      • улучшена поддержка
      • увеличено максимальное количество процессов с 32 000 до 1 млрд;
      • увеличено максимальное количество типов устройств (major device) с 255 до 4095 и максимальное количество устройств каждого типа (minor device) с 255 до более миллиона. из-за проблем с распределением номеров под типы устроиства введен системный сервис udev;
      • улучшена поддержка 64-битных систем и поддержка файловых систем размером более 16 Тбайт;
      • уменьшено время реакции для процессов реального времени;
      • переписана реализация потоков с использованием Native POSIX Thread Library (NPTL);
      • улучшен загрузчик модулей;
      • добавлена новая служебная файловая система User-mode Linux;
      • и др.

      Архитектура

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

      На сегодняшний день Linux — монолитное ядро с поддержкой загружаемых модулей. Драйверы устройств и расширения ядра обычно запускаются на «кольце 0», с полным доступом к оборудованию. В отличие от обычных монолитных ядер, драйверы устройств легко собираются в виде модулей и загружаются или выгружаются во время работы системы.

      То, что архитектура Linux не является микроядерной, вызвало обширнейшие прения между Линусом Торвальдсом и Эндрю Таненбаумом в конференции comp.os.minix (англ.) в 1992 г.

      Совместимость

      Не задуманный изначально как многоплатформенное ядро, Linux на данный момент портирован на очень широкий круг архитектур, запускается на широком спектре оборудования от IBM S/390 (высокопроизводительный мейнфрейм). Системы на основе Linux используются в качестве основных практически на всех суперкомпьютерах (более 80 % списка Top500), в том числе и на самых мощных — Roadrunner фирмы IBM.

      Изначально Linux разрабатывался для 32-битных ПК; на сегодняшний день Linux запускается на следующих процессорных архитектурах:

      • StrongARM, Intel XScale и т. п.
      • Axis Communications CRIS
      • HP Hitachi:
      • IBM zSeries-мэйнфреймы
      • Intel 80386 и выше: IBM PC и совместимые с процессорами:
          , 80486, а также AMD, TI и IBM-варианты;
        • серия Core, Core2 Duo в 32 и 64-х битных версиях.
        • AMD K5, K6, Duron;
        • Cyrix 5x86, 6x86 (M1), 6x86MX и и последующие процессоры;
        • поддержка Intel 8086, 8088, 80186, 80188 и 80286 процессоров находится в разработке (см. проект ELKS (англ.) );
        • Xbox (Pentium III).
          ;
        • Cobalt Qube, Cobalt Raq;
        • PlayStation 2, PlayStation 3;
        • DECstation;
        • некоторые другие.
        • более новые A1200, A2500, A3000, A4000
        • рабочие станции Sun Microsystems серии 3 (экспериментальная, с использование Sun-3 MMU)
        • все новые компьютеры Apple (все оснащённые PCI Power Macintoshes, ограниченная поддержка NuBus Power Macs)
        • клоны PCI Power Mac, разработанные Power Computing, UMAX и Motorola
        • IBM RS/6000, iSeries- и pSeries-системы
        • некоторые встроенные системы PowerPC

        Лицензия

        Linux распространяется на условиях лицензии General Public License, то есть свободно. Эту лицензию выбрал Линус Торвальдс практически сразу после того, как стало понятно, что его хобби начало получать распространение по всему миру. Обладателем торговой марки Linux™ является Линус, а помогает следить за соблюдением его прав и условий GPL Фонд свободного программного обеспечения.

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

        Какие исторические и текущие причины драйверы включены в базу кода ядра?

        Включают ли эти 15 с лишним миллионов строк каждый драйвер для каждого компонента оборудования? Если это так, то возникает вопрос, почему драйверы встроены в ядро, а не в отдельные пакеты, которые автоматически определяются и устанавливаются из идентификаторов оборудования?

        Является ли размер базы кода проблемой для устройств с ограниченным хранилищем или памятью?

        Кажется, это увеличило бы размер ядра для устройств ARM с ограниченным пространством, если бы все это было встроено. Много ли строк отбраковано препроцессором? Назовите меня сумасшедшим, но я не могу представить себе машину, требующую столько логики для запуска, как я понимаю, роли ядра.

        Есть ли доказательства того, что размер будет проблемой через 50 с лишним лет из-за его, казалось бы, постоянно растущей природы?

        Включение драйверов означает, что оно будет расти по мере изготовления оборудования.

        РЕДАКТИРОВАТЬ : Для тех, кто думает, что это природа ядер, после некоторых исследований я понял, что это не всегда. Ядро не обязательно должно быть таким большим, так как микроядро Карнеги-Меллона было приведено в качестве примера «обычно под 10000 строк кода».

        Да, я написал код для компилятора, лексического анализатора и генератора байтового кода для языка, и он был полностью завершен плюс рекурсия, и он не занимал 10 000 строк. Вы должны скачать и настроить, make menuconfig чтобы увидеть, сколько кода можно включить / отключить до сборки. @JonathanLeaders: Я закончил тестирование полных компиляторов для языков, подобных LISP, менее чем в 100 строк, с тестовыми программами, отображающими Мандельброта. Всегда зависит.

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

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

        Быстрый поиск вызвал дискуссию по поводу разработки драйверов внутри дерева и вне дерева .

        Широкое использование Linux во встраиваемых системах привело к лучшей поддержке отказа от вещей, чем Linux имел годы назад, когда дерево исходных текстов ядра было меньше. Супер-минимальное ядро ​​4.0, вероятно, меньше супер-минимального ядра 2.4.0.

        Теперь ЭТО имеет смысл для меня, почему логично собрать весь код вместе, это экономит человеческие часы за счет ресурсов компьютера и чрезмерных зависимостей. @JonathanLeaders: да, это позволяет избежать гниения для водителей с не очень активным обслуживанием. Также возможно полезно иметь весь код драйвера при рассмотрении изменений ядра. Поиск во всех вызывающих программах какого-либо внутреннего API может привести к тому, что драйвер будет использовать его так, как вы и не думали, что может повлиять на изменение, о котором вы думали. @JonathanLeaders приходят на xd, как будто эти дополнительные строки занимают намного больше места, в современных измерениях установки его на ПК. @Junaga: вы понимаете, что Linux очень переносим и масштабируем, верно? Потеря 1 МБ постоянно используемой памяти ядра во встроенной системе 32 МБ является большой проблемой. Размер исходного кода не важен, но размер скомпилированного двоичного файла все еще важен. Память ядра не выгружается, поэтому даже с пространством подкачки вы не сможете ее вернуть. @ Рольф: Это большой, но это не спагетти. В настоящее время он достаточно хорошо спроектирован без двусторонних зависимостей между основным кодом и драйверами. Драйверы могут быть оставлены без нарушения ядра ядра. Когда внутренняя функция или API подвергается рефакторингу, поэтому драйверы должны использовать его по-другому, драйверы могут нуждаться в замене, но это нормально для рефакторинга.

        Согласно Cloc, работающему против 3.13, Linux содержит около 12 миллионов строк кода.

        • 7 миллионов LOC в драйверах /
        • 2 миллиона LOC в арке /
        • всего 139 тыс. LOC в ядре /

        lsmod | wc на моем ноутбуке Debian показано 158 модулей, загруженных во время выполнения, поэтому динамическая загрузка модулей - это популярный способ поддержки аппаратного обеспечения.

        Надежная система конфигурации (например make menuconfig ) используется для выбора кода для компиляции (и, более того, какой код не компилировать). Встраиваемые системы определяют свои собственные .config файлы только с помощью аппаратной поддержки, которая им нужна (включая поддержку аппаратного обеспечения, встроенного в ядро ​​или в виде загружаемых модулей).

        подсчета модулей недостаточно, многое может быть встроено в конфигурацию Я думаю, что из этого мы можем сделать вывод, что ядро ​​Linux огромно, потому что оно поддерживает всевозможные конфигурации устройств, а не потому, что оно чрезвычайно сложно. Мы видим здесь, что очень мало из 15-метровых линий фактически используется. Хотя, как и почти все, это может быть слишком сложно, по крайней мере, мы можем спать по ночам, зная, что это разумно @JonathanLeaders: Да, а также модули для странных устройств, есть модули для скрытых файловых систем, сетевых протоколов и т. Д. @JonathanLeader Я помню, когда Linux запускался - даже заставить установщик работать (если у него даже был установщик!) Было огромной болью - все еще есть некоторые дистрибутивы, где вам нужно выбрать драйвер мыши вручную. Создание таких вещей, как создание сетей или, не дай бог, X-Window, работа, было обрядом обряда. При первой установке Red Hat мне пришлось написать собственный графический драйвер, потому что было доступно только три (!) Драйвера. Работа с базовыми компонентами по умолчанию является признаком зрелости, и, очевидно, вы можете позволить себе гораздо больше настроек встроенной системы, в которой всего несколько комбинаций HW. @JonathanLeaders Как я думаю, вы поняли, что LOC в источнике более или менее не имеет значения. Если вы хотите узнать, сколько памяти использует ядро, есть гораздо более прямые способы .

        Для любого любопытного, вот разбивка строки счета для зеркала GitHub:

        drivers вносит большой вклад в количество строк.

        Это интересно. Еще более интересны потенциально слабые места в коде, где программисты были недовольны: grep -Pir "\x66\x75\x63\x6b" /usr/src/linux/ | wc -l @jimmij '\ x73 \ x68 \ x69 \ x74' может быть более распространенным явлением в соответствии с этим новаторским (если немного датированным) исследованием . Случайный факт: документация находится в папке, которая ближе к 600 000 LOC, оцененных ОП. @ drewbenn Я понял это больше как "документация не пуста?"

        Пока что ответы кажутся «да, кода много», и никто не решает вопрос с наиболее логичным ответом: 15M +? И ЧТО? Какое отношение имеет 15 миллионов строк исходного кода к цене рыбы? Что делает это таким невообразимым?

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

        Не все скомпилировано. Система сборки Kernel позволяет быстро определять конфигурации, которые выбирают наборы исходного кода. Некоторые экспериментальные, некоторые старые, некоторые просто не нужны для каждой системы. Посмотрите на /boot/config-$(uname -r) (на Ubuntu), make menuconfig и вы увидите, сколько исключено.

        И это настольный дистрибутив с переменной целью. Конфигурация для встроенной системы будет включать только то, что ей нужно.

        Не все встроено. В моей конфигурации большинство функций ядра построены в виде модулей:

        Чтобы было ясно, они все могли быть встроены . Так же, как они могли быть распечатаны и превращены в гигантский бумажный бутерброд. Это просто не имело бы смысла, если бы вы не выполняли пользовательскую сборку для отдельной аппаратной работы (в этом случае вы бы уже сократили количество этих элементов).

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

        Почти ничего не загружается.

        Микроядра не одно и то же. Всего 10 секунд просмотра ведущего изображения на странице Википедии, на которую вы ссылаетесь , покажут, что они созданы совершенно по-другому.

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

        Комментарии снова подчеркивают, что вы не получаете это. Если вы хотите развернуть Linux на дискретном оборудовании (например, в аэрокосмическом пространстве, TiVo, планшете и т. Д.), Вы конфигурируете его для сборки только необходимых вам драйверов . Вы можете сделать то же самое на вашем рабочем столе с make localmodconfig . В итоге вы получите крошечную сборку ядра с нулевой гибкостью.

        Для таких дистрибутивов, как Ubuntu, допустим один пакет ядра размером 40 МБ. Нет, откажитесь от этого, на самом деле, это предпочтительнее сценария массового архивирования и загрузки, в котором хранится более 4000 плавающих модулей в виде пакетов. Он использует меньше дискового пространства для них, легче упаковывать во время компиляции, легче хранить и лучше для своих пользователей (у которых есть система, которая просто работает).

        Будущее тоже не проблема. Скорость процессора, плотность диска / цены и пропускная способность кажутся намного быстрее, чем рост ядра. Пакет Kernel 200 МБ за 10 лет не станет концом для мира.

        Это также не улица с односторонним движением. Код выгоняется, если он не поддерживается.

        Ядру Linux исполнилось 30 лет Linux, Kernel, Длиннопост

        25 августа 1991 года после пяти месяцев разработки 21-летний студент Линус Торвальдс объявил в телеконференции comp.os.minix о создании рабочего прототипа новой операционной системы Linux, для которой было отмечено завершение портирования bash 1.08 и gcc 1.40. Первый публичный выпуск ядра Linux был представлен 17 сентября. Ядро 0.0.1 имело размер 62 Кб в сжатом виде и содержало около 10 тысяч строк исходного кода. Современное ядро Linux насчитывает более 28 млн строк кода. По данным исследования, проведённого в 2010 году по заказу Евросоюза, приблизительная стоимость разработки с нуля проекта, аналогичного современному ядру Linux, составила бы более миллиарда долларов США (расчёт производился, когда в ядре было 13 млн строк кода), по другим оценкам - более 3 миллиардов.

        Ядро Linux было создано под впечатлением от операционной системы MINIX, которая не устраивала Линуса своей ограниченной лицензией. Впоследствии, когда Linux стал известным проектом, недоброжелатели пытались обвинить Линуса в прямом копировании кода некоторых подсистем MINIX. Нападение отразил Эндрю Таненбаум, автор MINIX, который поручил одному из студентов провести детальное сравнение кода Minix и первых публичных версий Linux. Результаты исследования показали наличие только четырёх несущественных совпадений блоков кода, обусловленных требованиями POSIX и ANSI C.

        Динамика роста кодовой базы (количество строк исходного кода) ядра:

        0.0.1 - сентябрь 1991, 10 тыс. строк кода;

        1.0.0 - март 1994, 176 тыс. строк кода;

        1.2.0 - март 1995, 311 тыс. строк кода;

        2.0.0 - июнь 1996, 778 тыс. строк кода;

        2.2.0 - январь 1999, 1.8 млн. строк кода;

        2.4.0 - январь 2001, 3.4 млн. строк кода;

        2.6.0 - декабрь 2003, 5.9 млн. строк кода;

        2.6.28 - декабрь 2008, 10.2 млн. строк кода;

        2.6.35 - август 2010, 13.4 млн. строк кода;

        3.0 - август 2011, 14.6 млн. строк кода.

        3.5 - июль 2012, 15.5 млн. строк кода.

        3.10 - июль 2013, 15.8 млн. строк кода;

        3.16 - август 2014, 17.5 млн. строк кода;

        4.1 - июнь 2015, 19.5 млн. строк кода;

        4.7 - июль 2016, 21.7 млн. строк кода;

        4.12 - июль 2017, 24.1 млн. строк кода;

        4.18 - август 2018, 25.3 млн. строк кода.

        5.2 - июль 2019, 26.55 млн. строк кода.

        5.8 - август 2020, 28.4 млн. строк кода.

        5.13 - июнь 2021, 29.2 млн. строк кода.

        Прогресс развития ядра:

        Linux 0.0.1 - сентябрь 1991, первый публичный выпуск, поддерживающий только CPU i386 и загружающийся с дискеты;

        Linux 0.12 - январь 1992, код начал распространяться под лицензией GPLv2;

        Linux 0.95 - март 1992, обеспечена возможность запуска X Window System, реализована поддержка виртуальной памяти и раздела подкачки.

        Linux 0.96-0.99 - 1992-1993, началась работа над сетевым стеком. Представлена файловая система Ext2, добавлена поддержка формата файлов ELF, представлены драйверы для звуковых карт и контроллеров SCSI, реализована загрузка модулей ядра и файловой системы /proc.

        В 1992 году появились первые дистрибутивы SLS и Yggdrasil. Летом 1993 года были основаны проекты Slackware и Debian.

        Linux 1.0 - март 1994, первый официально стабильный релиз;

        Linux 1.2 - март 1995, существенное увеличение числа драйверов, поддержка платформ Alpha, MIPS и SPARC, расширение возможностей сетевого стека, появление пакетного фильтра, поддержка NFS;

        Linux 2.0 - июнь 1996 года, поддержка многопроцессорных систем;

        Март 1997: основан LKML, список рассылки разработчиков ядра Linux;

        1998 год: запущен первый попавший в список Top500 кластер на базе Linux, состоящий из 68 узлов с CPU Alpha;

        Linux 2.2 - январь 1999, увеличена эффективность системы управления памятью, добавлена поддержка IPv6, реализован новый межсетевой экран, представлена новая звуковая подсистема;

        Linux 2.6 - декабрь 2003, поддержка SELinux, средства автоматического тюнинга параметров ядра, sysfs, переработанная система управления памятью;

        В 2005 году представлен гипервизор Xen, который открыл эру виртуализации;

        В сентябре 2008 года сформирован первый релиз платформы Android, основанной на ядре Linux;

        В июле 2011 года после 10 лет развития ветки 2.6.x осуществлён переход к нумерации 3.x. Число объектов в Git-репозитории достигло 2 млн;

        В 2015 году состоялся выпуск ядра Linux 4.0. Число git-объектов в репозитории достигло 4 млн;

        В апреле 2018 года преодолён рубеж в 6 млн git-объектов в репозитории ядра.

        В январе 2019 года сформирована ветка ядра Linux 5.0. Репозиторий достиг уровня 6.5 млн git-объектов.

        Опубликованное в августе 2020 года ядро 5.8 стало самым крупным по числу изменений из всех ядер за всё время существования проекта.

        В ядре 5.13 был поставлен рекорд по числу разработчиков (2150), изменения от которых вошли в состав ядра.

        В 2021 году в ветку ядра Linux-next добавлен код для разработки драйверов на языке Rust. Ведётся работа по включению компонентов для поддержки Rust в основной состав ядра.

        68% всех изменений в ядро внесены 20 наиболее активными компаниями. Например, при разработке ядра 5.13 10% всех изменений подготовлено компанией Intel, 6.5% - Huawei, 5.9% - Red Hat, 5.7% - Linaro, 4.9% - Google, 4.8% - AMD, 3.1% - NVIDIA, 2.8% - Facebook, 2.3% - SUSE, 2.1% - IBM, 1.9% - Oracle, 1.5% - ARM, 1.4% - Canonical. 13.2% изменений подготовлены независимым участниками или разработчиками, явно не заявившим о своей работе на определённые компании. 1.3% изменений подготовлены студентами, аспирантами и представителями учебных заведений. По числу добавленных в ядро 5.13 строк кода лидирует компания AMD, доля которой составила 20.2% (драйвер amdgpu насчитывает около 3 млн строк кода, что примерно 10% от общего размера ядра - 2.4 млн строк приходится на сгенерированные автоматически заголовочные файлы с данными для регистров GPU).


        GNU/Linux

        711 постов 13.2K подписчика

        Правила сообщества

        Все дистрибутивы хороши.

        Иллюстрация к комментарию

        Ура ура ура! Великолепное ядро, великолепная ось!

        Спасибо GNU Linux, долгих и продуктивных лет жизни проекту.

        Ой, а помните кубунту по почте? Ностальгия мляяя.

        Поздравления всем причастным. Купайтесь в море а не в фонтанах. У нас открылась вакансия для линуксоида. @moderator, вчера вы сказали что в комментарии можно

        Годная книжка на тему just for fun. Рекомендуется к прочтению.

        С днем рождения Пингвина! Перешёл на Linux с выходом WIN10 и пока уходить не собираюсь!

        С праздником красноглазики.

        ща маньяки начнут компилять)

        Спасибо за вторую жизнь старых ПК!

        Отмечу день компиляцией ядра под древний планшет. Боюсь правда праздник затянется.

        Насчет кодовой базы вспомнилась старая шутка: если из комментов убрать мат, то объем уменьшится на треть :)

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

        Linux лучше без гуя.

        Периодически меня задалбывает винда и случаются порывы перейти на Убунту. Два года держался, но вчера запустил 20.04 с флешки. Первое, что заметил, они перешли с Unity на Gnome. Не понравилось. Из магазина приложений смог установить редактор карт JOSM в одно нажатие. VLC плеер тоже есть. Вроде даже браузер Edge можно поставить. Понравилось. Не нашёл видеодрайвер под свой ноут (может плохо искал) - ну такое… Хватило меня часа на три, пока вернулся на винду.

        У моей матери Chrome OS стоит на ноуте, тот же Линукс с хромом сверху, учётка хрома. Вот так капиталисты оси бесплатные используют. Для бабушки кстати хватает ноута, уже лет 7 работает нормально, только разъем перепаивали.

        Иллюстрация к комментарию

        Опа. А я как раз вчера добрался до wsl.

        Хых, надо сегодня пахнуть пару пинт )


        В ядро Linux 5.4 приняты патчи для ограничения доступа root к внутренностям ядра

        Линус Торвальдс принял в состав будущего выпуска ядра Linux 5.4 набор патчей "lockdown", предложенный Дэвидом Хоуэллсом (David Howells, работает в Red Hat) и Мэтью Гарретом (Matthew Garrett, работает в Google) для ограничения доступа пользователя root к ядру. Связанная с "lockdown" функциональность вынесена в опционально загружаемый LSM-модуль (Linux Security Module), устанавливающий барьер между UID 0 и ядром, ограничивая определённую низкоуровневую функциональность.

        Если злоумышленник в результате атаки добился выполнения кода с правами root, то он может выполнить свой код и на уровне ядра, напирмер, через замену ядра при помощи kexec или чтения/записи памяти через /dev/kmem. Наиболее очевидным следствием подобной активности может стать обход UEFI Secure Boot или извлечение конфиденциальных данных, хранящихся на уровне ядра.

        Изначально функции ограничения root развивались в контексте усиления защиты верифицированной загрузки и в дистрибутивах уже достаточно давно для блокирования обхода UEFI Secure Boot применяются сторонние патчи с ограничениями. При этом в основной состав ядра подобные ограничения не включались из-за разногласий в их реализации и опасений нарушения работы существующих систем. Модуль "lockdown" вобрал в себя уже используемые в дистрибутивах патчи, которые были переработаны в форме отдельной подсистемы, не привязанной к UEFI Secure Boot.

        В режиме lockdown ограничивается доступ к /dev/mem, /dev/kmem, /dev/port, /proc/kcore, debugfs, отладочному режиму kprobes, mmiotrace, tracefs, BPF, PCMCIA CIS (Card Information Structure), некоторым интерфейсам ACPI и MSR-регистрам CPU, блокируются вызовы kexec_file и kexec_load, запрещается переход в спящий и ждущий режимы, лимитируется использование DMA для PCI-устройств, запрещается импорт кода ACPI из переменных EFI, недопускаются манипуляции с портами ввода/вывода, в том числе изменение номера прерывания и порта ввода/вывода для последовательного порта.

        По умолчанию модуль lockdown не активен, собирается при указании в kconfig опции SECURITY_LOCKDOWN_LSM и активируется через параметр ядра "lockdown=", управляющий файл "/sys/kernel/security/lockdown" или сборочные опции LOCK_DOWN_KERNEL_FORCE_*, которые могут принимать значения "integrity" и "confidentiality". В первом случае блокируются возможности, позволяющие вносить изменения в работающее ядро из пространства пользователя, а во втором случае отключается функциональность, которую можно использовать для извлечения конфиденциальной информации из ядра.

        При этом важно отметить, что lockdown лишь ограничивает штатные возможности доступа к ядру, но не защищает от модификаций в результате эксплуатации уязвимостей. Для блокирования внесения изменений в работающее ядро при применении эксплоитов проектом Openwall развивается отдельный модуль LKRG (Linux Kernel Runtime Guard).

        Согласно статистике GitHub, проанализированной Майклом Ларабелем из Phoronix, ядро ​​Linux имеет около 27.8 миллионов строк кода в репозитории Git по сравнению с 26.1 миллионами год назад, в то время как systemd теперь имеет почти 1.3 миллиона строк кода.

        Сколько строк кода в Unix?

        Согласно репозиторию истории Unix, V1 имел 4,501 линии ассемблерного кода для своего ядра, инициализации и оболочки. Из них 3,976 приходится на ядро ​​и 374 на оболочку.

        Сколько строк кода в Ubuntu?

        204.5 миллиона строк кода равняется одному отличному дистрибутиву Linux.

        Какова длина кода Linux?

        Согласно cloc run против 3.13, Linux около 12 миллионов строк кода.

        Сколько строк кода в ядре Windows?

        Новый ответ на старый вопрос, но основные компоненты кода ядра Windows примерно

        Насколько велик исходный код Linux?

        - Дерево исходных текстов ядра Linux до 62,296 файлов с общим количеством строк во всех этих файлах кода и других файлах 25,359,556 XNUMX XNUMX строк.

        Насколько велико ядро ​​Linux?

        Обычное стабильное ядро ​​3 * около 70 мб Теперь. Но есть небольшие дистрибутивы linux размером 30-10 мб с программным обеспечением и прочим, запущенным из коробки.

        Как Linux зарабатывает деньги?

        Компании Linux, такие как RedHat и Canonical, компания, создавшая невероятно популярный дистрибутив Ubuntu Linux, также зарабатывают большую часть своих денег. от профессиональных служб поддержки. Если подумать, программное обеспечение раньше продавалось разово (с некоторыми обновлениями), а профессиональные услуги - это постоянная рента.

        Linux - это ядро ​​или ОС?

        Linux по своей природе не является операционной системой; это ядро. Ядро - это часть операционной системы - и самая важная. Чтобы это была ОС, она поставляется с программным обеспечением GNU и другими дополнениями, дающими нам название GNU / Linux. Линус Торвальдс сделал Linux открытым исходным кодом в 1992 году, через год после его создания.

        Простой анализ последней версии ядра Linux показывает, что число строк кода достигло 10 миллионов (считая и комментарии, и пустые строки). При детальном анализе становится видно, что реальное количество строк кода (без комментариев и пустых строк) составляет 6399191. Это число растет с каждой новой версией ядра.

        топик: s/Количество строк/Количество строк кода/

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

        Какая разница сколько строк кода? Собирай ядро себе сам - выкидывай не нужное.

        > уверен, что половину кода оттуда можно выкинуть

        бла-бла-бла

        > Монструозная все-таки это вещь - ядро Linux.

        осиль сборку ядра вручную, многое поймешь


        >Посчитайте количество строк в сорцах ядра Vista


        Ну вот и займитесь, наконец.
        Баллмер, перелогиньтесь.

        Осильте стабильное API, а еще лучше микроядро.

        Тогда не недо будет пихать в основную ветку дрова для всевозможных девайсов. И ядро Linux'a будет намного стройнее и аккуратнее

        > Посчитайте количество строк в сорцах ядра Vista

        Уговорил, давай сырцы.

        > Таненбаум, залогинтесь.

        А тебе неуч, не надо было мои лекции прогуливать. Вот и парься теперь со своим монолитом.

        а сумма американского внешнего долга перевалила за 10 трлн

        >А тебе неуч, не надо было мои лекции прогуливать. Вот и парься теперь со своим монолитом.

        Бугага. А вы нам с миникса пишите или с тру-микроядерной венды?

        > Осильте стабильное API, а еще лучше микроядро.

        >Тогда не недо будет пихать в основную ветку дрова для всевозможных девайсов. И ядро Linux'a будет намного стройнее и аккуратнее

        Вы наверно уже осили и написали? Микро ядро в теории хороша. На практике проще не ебать коня, а делом заняться.

        да походу это поделие и со 100 миллионами строк таким же УГ будет ;)

        >Вы наверно уже осили и написали? Микро ядро в теории хороша. На практике проще не ебать коня, а делом заняться.

        Согласен брат. НО. тащить в ядре всевозможные драйвера, и еще хз что, тоже не лучший выход. этак к 2010 глду ты качнешь 1GB linux-src.tar.gz

        >Осильте стабильное API, а еще лучше микроядро. Тогда не недо будет пихать в основную ветку дрова для всевозможных девайсов. И ядро Linux'a будет намного стройнее и аккуратнее

        так я вот что не пойму, почему этого самого стабильного API в линуксе нету? объясните кто знает, не флейма ради. спасибо.

        > так я вот что не пойму, почему этого самого стабильного API в линуксе нету?
        Потому что это нонсенс.

        > Согласен брат. НО. тащить в ядре всевозможные драйвера, и еще хз что, тоже не лучший выход. этак к 2010 глду ты качнешь 1GB linux-src.tar.gz

        диффы к 2010 году отменят?

        если выкинут драйвера из кернеля. хотя из кернеля бох с ним, если из дистров - то я тебя обязательно найду, и выскажу всё, что думаю. день и ночь буду искать, так высказать захочется.

        если всё выкинуть - это ж тогда винда получится.

        > А если его проанализировать не с помощью программ, а с помощью тысяч китайцев,

        тогда уже и рифмы посчитай, иксперт ты наш доморощеный, повелитель китайцев ля

        > так я вот что не пойму, почему этого самого стабильного API в линуксе нету? Потому что это нонсенс.

        а подробнее можно? и будет ли оно хоть когда-нибудь разработано?


        > диффы к 2010 году отменят? если выкинут драйвера из кернеля. хотя из кернеля бох с ним, если из дистров - то я тебя обязательно найду, и выскажу всё, что думаю. день и ночь буду искать, так высказать захочется. если всё выкинуть - это ж тогда винда получится.

        Подпишусь, +1. Лучше пусть будет всё в одном. Гораздо удобнее, чем каждый раз при установке тянуть каждый драйвер из тырнета. А если тырнета не будет? Да и драйвер на сетевуху тоже нужен, как его буду тянуть без тырнета? :)

        Кроме драйвера для сетевухи нужен драйвер для дискового контроллера.

        А то будет полное вендузятничество с подсовыванием дискеток.

        Согласен брат. НО. тащить в ядре всевозможные драйвера, и еще хз что, тоже не лучший выход. этак к 2010 глду ты качнешь 1GB linux-src.tar.gz

        anonymous (*) (23.10.2008 23:25:11)

        С самого начала Линукс был задуман как система под конкретный компьтер. Я помню ядро, лет 10 назад, в десятки килобайт. Но, сегодня выросло огромное количество драйверов, ядро уже не вмещается на дискетту. Решили делать ссылки на драйвера, которые в модулях. В чем проблема? Перекомпилируйте ядро под то, что вам нужно, что у вас стоит при загрузке. Я не вижу проблему. Зачем пускать этот пар?


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

        это никак с микроядром не коррелирует.

        > Простой анализ последней версии ядра Linux показывает, что число строк кода достигло 10 миллионов (считая и комментарии, и пустые строки). При детальном анализе становится видно, что реальное количество строк кода (без комментариев и пустых строк) составляет 6399191. Это число растет с каждой новой версией ядра.

        все христиане должны немедленно удалить ЭТО!

        > Да и драйвер на сетевуху тоже нужен, как его буду тянуть без тырнета? :)

        И тут я вспоминаю виндятину с ее вечной проблемой, когда на встроеные сетевухи дрова не могли найтись =) Не не ядро менять ненадо, как сейчас само то. Кому не устраивает что все в куче уже был совет - попробовать собрать вручную =)

        > А то будет полное вендузятничество с подсовыванием дискеток.

        А еще драйвер дисковода на дискетке

        на D - короче будет или длиннее?


        >Посчитайте количество строк в сорцах ядра Vista

        Драйвера как считать? ;)

        Веть в линуховом ведре есть и дрова для isa-звуковух и для тв-тюнеров и для всякого усб-барахла =)


        Ага, драйвер для дисковода подсовываем на дискетке, а драйвер для сетевухи качаем из тырнета. А драйвер для DVD-привода на DVD-диске.


        >так я вот что не пойму, почему этого самого стабильного API в линуксе нету?

        Потому что это не нужно. Нестабильное апи постоянно создает мелкие шероховатости. А вот стабильное - иногда создает крупные НЕСТЫКОВКИ при переходе от одного стабильного апи к другому (причем такие нестыковки бывают и на минорных версиях - вспомним работу с усб в XP SP1 и SP2) ЗЫ По поводу написания дров: почему же проприетарные драйвера нвидии прекрасно собираются с любой версией ядра? И всякие alsa, v4l тем более? Может дело в радиусе кривизны разработчиков драйверов?


        >на D - короче будет или длиннее?

        >почему же проприетарные драйвера нвидии прекрасно собираются с любой версией ядра?

        Это не драйвер собирается, а прослойка. А про драйвер нвидиа - сравните размер nvidia.ko и например, vmlinux

        О какой версии ядра идет речь?

        > Ага, драйвер для дисковода подсовываем на дискетке, а драйвер для сетевухи качаем из тырнета. А драйвер для DVD-привода на DVD-диске.

        И все пакеты запакованы, включая распаковщик.

        Мне вот не понятно, а что мешает сначала собрать систему с лайвсиди, содержащего все необходимые дрова, грамотно подготовленного заранее то бишь, а уже потом её запускать и докачивать недостающее? И не надо туда ничего лишнего пихать при таком подходе.

        > так и хочется спросить: и чё?! Посчитайте количество строк в сорцах ядра Vista

        Проблема в том, что ядра у глисты нет.

        > Согласен брат. НО. тащить в ядре всевозможные драйвера, и еще хз что, тоже не лучший выход. этак к 2010 глду ты качнешь 1GB linux-src.tar.gz

        Ты действительно на столько тупой?

        > все христиане должны немедленно удалить ЭТО!

        Интересно, среди модераторов есть подразумеваемые тобой христиане?

        > Мне вот не понятно

        Потому что ты идиот. Начинай думать головой.

        А ещё давайте посчитаем кол-во строк в кедах и в гноме и в других де, надо ж как-то время убивать, ну не разрабатывать же в самом деле это долбанное ядро

        а ещё можно 639+9+19-1

        >Лучше пусть будет всё в одном. Гораздо удобнее, чем каждый раз при установке тянуть каждый драйвер из тырнета. А если тырнета не будет? Да и драйвер на сетевуху тоже нужен, как его буду тянуть без тырнета? :)

        А ядро Linux ты тоже каждый раз тянешь? Нет? А что так? Представим такую ситуацию сгорела у тебя сетевая купил ты новую, опа а на старом ядре нет дров! И что? Качаем новое ядро? Так не проще будет скачать десяток килобайт драйвера чем 50м ядра?

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

        То то весело ставить Linux на сервер где контроллер дисков по умолчанию не поддерживается, конечно проще пересобрать ядро на устоновщике? чем подсунуть дискету? Это уже красноглазие.

        Количество не таких же строк, как в KDE4, я надеюсь? А то встретил интересный метод написания кода - "заведем 10 переменных, забудем про них, заведем еще 10" в kdelibs-4.1.2 :)

        10 миллионов строк кода - и ведь абсолютно на халяву.

        Вот попробуйте сделать переносимую систему на USB-устройстве с микроядром. Один фиг дрова нужны будут.

        >. Linux на сервер где контроллер дисков по умолчанию не поддерживается..

        Если контроллер не подерживается по умолчанию - это не сервер.

        Это я к тому, что микроядро в чистом виде нафиг не нужно.

        Новость сама по себе ни о чем.

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

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

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

        Читайте также: