Linux Kernel 7.2 содержит 43 миллиона строк: проверено с помощью wc, tokei, scc и cloc
Ядро Linux достигло еще одной важной вехи. В последней версии дерева разработки Linux 7.2 теперь содержится приблизительно 42,6 миллиона строк исходного кода, комментариев и пустых строк. Эти данные подтверждены независимыми проверками как в официальном репозитории tokei, так и sccв официальном v7.2-rc1репозитории. Это делает его самым большим деревом исходного кода ядра Linux из когда-либо измеренных.
На первый взгляд, эта цифра может показаться огромной. Однако это не означает, что Linux стал громоздким. Напротив, это показывает, какое количество оборудования поддерживает Linux сегодня и насколько активно продолжает развиваться ядро.
Давайте посмотрим, что изменилось.
В Linux 7.2 преодолена отметка в 42 миллиона строк кода.
Дерево Git Linux 7.2-rc1 было измерено с помощью нескольких инструментов подсчета кода на точном коммите v7.2-rc1 с тегом ( dc59e4fea9d8).
andreyex@fedora:~/linux$ git log --oneline -1 dc59e4fea9d8 (HEAD -> master, tag: v7.2-rc1, origin/master, origin/HEAD) Linux 7.2-rc1
Вот что показали результаты работы каждого инструмента:
| Инструмент | Файлы | Всего строк | Кодовые строки | Комментарии | Пустые ячейки |
|---|---|---|---|---|---|
| cloc | 82,309 | 40,416,242 | 30,509,981 | 4 840 469 | 5 065 792 |
| tokei | 89,042 | 42,584,526 | 32,359,896 | 4,893,147 | 5,331,483 |
| scc | 88,988 | 42,582,367 | 32,451,089 | 4 807 573 | 5 323 705 |
| wc -l (все файлы) | — | 43,179,595 | — | — | — |
Наши собственные измерения показывают, что tokeiи sccсовпадают почти точно, составляя около 42,58 миллионов строк в общей сложности для Linux v7.2-rc1. В отличие от этого, clocv2.08 сообщает о примерно 40,42 миллионах строк, что примерно на 2,16 миллиона меньше. Исследование показывает, что clocv2.08 не учитывает исходные файлы дерева устройств ядра ( .dts/ .dtsi). Дерево Linux v7.2-rc1 содержит 6347 таких файлов, и оба tokei и scc насчитывают в них 2 095 900 строк, что составляет почти 97% разницы.
Общее wc -lколичество файлов, равное 43 179 595, и послужило основанием для заголовка «43 миллиона». Разница примерно в 597 000 строк между этим значением и цифрой tokei/scc представляет собой количество файлов прошивки, скомпилированных бинарных файлов .dtb, сертификатов и других нетекстовых файлов, которые не должны включаться в счетчик исходного кода. Таким образом, заголовок технически точен, но не отражает количество исходного кода.
Для сравнения, Linux 7.1 содержал приблизительно 42,1 миллиона строк кода . За один цикл разработки ядро пополнилось примерно полумиллионом дополнительных строк.
Хотя это звучит впечатляюще, такой рост ожидаем. Тысячи разработчиков вносят свой вклад в каждый релиз Linux, и они поддерживают огромное количество оборудования. Если вы не в курсе, над ядром Linux 7.1 работало более 2000 разработчиков, в том числе более 300 человек, которые внесли свой вклад впервые.
Linux продолжает развиваться даже после удаления устаревшего кода.
Удивительно, но этот важный этап развития Linux произошел, несмотря на удаление устаревшего кода.
В Linux 7.1 начался процесс прекращения поддержки процессоров Intel i486, в результате чего было удалено более 140 000 строк устаревшего кода, включая старые контроллеры хоста PCMCIA и драйверы ISDN. Linux 7.2 продолжает эту очистку, удаляя еще больше кода, связанного с i486, а также несколько устаревших драйверов и устаревших компонентов x86.
Другими словами, разработчики продолжают удалять устаревший код, одновременно добавляя поддержку современного оборудования. Такой баланс помогает поддерживать ядро в актуальном состоянии, избегая бесконечных работ по его обслуживанию.
Почему ядро Linux такое большое?
Ответ: Drivers.
Ядро Linux поддерживает невероятное разнообразие оборудования. Каждая видеокарта, контроллер хранения данных, сетевой адаптер, функция ноутбука, USB-устройство и встроенная платформа нуждаются в поддержке ядра.
По мере появления на рынке нового оборудования разработчики добавляют новые драйверы, сохраняя при этом совместимость с существующими устройствами. Из-за этого большая часть развития ядра происходит за счет поддержки оборудования, а не за счет основного кода планирования или управления памятью.
AMDGPU по-прежнему является крупнейшим драйвером.
Наибольший вклад по-прежнему вносит графическая подсистема AMD.
Объединенный драйвер AMDGPU и AMDKFD содержит около 6 356 056 строк кода, что делает его самым большим драйвером во всем ядре Linux.
Линус Торвальдс отметил, что примерно треть одного крупного запроса на слияние состояла из файлов определения регистров графического процессора AMD. Эти файлы в основном представляют собой сгенерированные данные, которые помогают Linux взаимодействовать с современным графическим оборудованием AMD. Даже если эти сгенерированные файлы игнорировать, драйверы устройств все равно составляют большую часть роста ядра.
Больше — не значит медленнее
Многие считают, что большее количество строк кода автоматически означает более медленную работу программного обеспечения. Но ядро Linux работает не так.
Большая часть дополнительного кода предназначена для поддержки оборудования, которое многие пользователи никогда не приобретут. Значительная его часть находится в загружаемых модулях, которые активируются только при наличии соответствующего оборудования. В результате ядро продолжает совершенствоваться, расширяя совместимость с оборудованием на настольных компьютерах, серверах, ноутбуках, встроенных системах, облачных платформах и суперкомпьютерах.
Подсчитайте общее количество строк в коде ядра Linux.
Любой желающий может клонировать репозиторий ядра Linux и провести измерения. Для начала нужно получить исходный код:
# Полное клонирование (~5 ГБ) — используйте --depth=1 для поверхностного клонирования (~1,5 ГБ) git clone --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git cd linux
Метод 1: cloc (широко цитируемый справочный инструмент)
clocЭто наиболее часто упоминаемый инструмент для подсчета строк кода ядра, но следует отметить, что он занижает количество строк в ядре Linux примерно на 2 миллиона, поскольку не распознает исходные файлы Device Tree.
# Установка sudo apt install cloc # Debian/Ubuntu sudo dnf install cloc # Fedora/RHEL sudo pacman -S cloc # Arch # Запуск cloc --progress=1 . # Для измерения прогресса только графического драйвера AMD: cloc drivers/gpu/drm/amd
cloc на обработку целого дерева может уйти от 15 до 30 минут .
Метод 2: токей (Быстрее и точнее — Рекомендуется)
tokei значительно быстрее clocи корректно подсчитывает файлы дерева устройств, что делает его более точным выбором для ядра Linux.
# Установка
cargo install tokei
# или
sudo apt install tokei / brew install tokei tokei .
Пример выходных данных:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Language Files Lines Code Comments Blanks ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ AWK 13 2805 1923 500 382 Alex 4 662 547 0 115 ASN.1 15 656 441 87 128 Assembly 11 5781 5445 0 336 GNU Style Assembly 1337 371255 270423 56888 43944 Autoconf 6 459 395 30 34 Automake 3 31 23 3 5 BASH 62 3038 2094 437 507 Bazel 81 1829 1474 54 301 Bitbake 3 13 4 6 3 C 36910 26320472 19615926 2909605 3794941 C Header 26813 10822880 8416361 1615212 791307 C++ 7 2291 1969 81 241 C++ Header 2 125 59 55 11 CSS 4 411 244 97 70 Device Tree 6343 2097441 1724154 92401 280886 Forge Config 15 1352 321 744 287 Gherkin (Cucumber) 1 336 199 97 40 Happy 10 6013 5290 0 723 HEX 2 173 173 0 0 INI 2 13 6 5 2 Jinja2 149 1187 966 145 76 JSON 1043 607008 607006 0 2 Lex 10 2940 2218 356 366 LD Script 13 552 427 40 85 Makefile 3203 87274 60667 13531 13076 Module-Definition 2 157 137 0 20 Objective-C 1 89 72 0 17 Pacman's makepkg 1 134 91 13 30 Perl 61 43189 33862 4009 5318 PO File 7 6711 3346 2259 1106 Python 439 130209 102002 8291 19916 RPM Specfile 1 215 174 14 27 ReStructuredText 4011 820556 622655 0 197901 Ruby 1 29 25 0 4 Shell 1172 219683 153221 27411 39051 Snakemake 5 153 125 13 15 SVG 87 57503 56094 1311 98 SWIG 1 252 154 27 71 TeX 1 234 155 73 6 Plain Text 981 109702 0 89924 19778 TOML 3 57 36 12 9 Unreal Script 5 618 371 156 91 Apache Velocity 1 15 15 0 0 Vim Script 1 42 33 6 3 XSL 10 200 122 52 26 XML 32 26269 23572 1452 1245 YAML 5673 648526 529448 23888 95190 ───────────────────────────────────────────────────────────────────────────────── HTML 2 29 25 0 4 |- JavaScript 1 7 7 0 0 (Total) 36 32 0 4 ───────────────────────────────────────────────────────────────────────────────── Markdown 9 534 0 385 149 |- BASH 1 2 2 0 0 |- C 1 20 12 6 2 |- Rust 1 98 76 13 9 |- YAML 1 25 22 0 3 (Total) 679 112 404 163 ───────────────────────────────────────────────────────────────────────────────── Rust 473 143187 114374 13573 15240 |- Markdown 351 39084 913 29885 8286 (Total) 182271 115287 43458 23526 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Total 89042 42584526 32359896 4893147 5331483 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
sccпрактически совпадает с результатами (см. следующий раздел).
Метод 3: scc (самый быстрый, с метриками сложности)
sccсоответствует tokeiточности и дополнительно сообщает о цикломатической сложности для каждого языка, что полезно для понимания того, какие части ядра сложнее всего поддерживать.
# Установка (скачайте бинарный файл из релизов GitHub или:) go install github.com/boyter/scc/v3@latest scc .
Пример выходных данных:
───────────────────────────────────────────────────────────────────────────────
Language Files Lines Blanks Comments Code Complexity
───────────────────────────────────────────────────────────────────────────────
C 36,910 26,320,472 3,795,058 2,909,421 19,615,993 2,566,279
C Header 26,813 10,822,880 791,303 1,614,799 8,416,778 66,444
Device Tree 6,343 2,097,441 280,886 92,367 1,724,188 36
YAML 5,672 648,427 104,949 25,934 517,544 0
ReStructuredTe… 4,011 820,556 197,878 0 622,678 0
Makefile 3,203 87,274 13,076 13,531 60,667 464
Assembly 1,348 377,036 41,691 49,680 285,665 3,505
Shell 1,174 220,250 37,034 26,897 156,319 12,925
JSON 1,043 607,008 2 0 607,006 0
Plain Text 981 109,702 19,777 0 89,925 0
Rust 473 182,419 15,156 52,407 114,856 10,808
Python 439 130,209 15,774 13,048 101,387 15,323
Jinja 149 1,187 76 145 966 193
SVG 87 57,503 98 1,311 56,094 2
Perl 67 46,073 6,048 4,183 35,842 5,246
BASH 63 3,399 513 413 2,473 324
DOT 36 1,261 81 62 1,118 0
XML 32 26,269 1,465 1,755 23,049 0
AWK 17 3,102 311 232 2,559 532
CSV 11 1,539 126 0 1,413 0
Extensible Sty… 10 200 26 0 174 0
Happy 10 6,013 723 0 5,290 0
LEX 10 2,940 366 355 2,219 0
Markdown 9 679 162 0 517 0
LD Script 8 390 60 29 301 0
C++ 7 2,291 241 81 1,969 332
Autoconf 6 459 34 30 395 11
License 5 422 84 0 338 0
Snakemake 5 153 15 13 125 0
Unreal Script 5 618 91 156 371 21
Alex 4 662 115 0 547 0
CSS 4 411 70 97 244 0
Raku 3 213 19 21 173 33
Systemd 3 167 25 63 79 0
TOML 3 57 8 12 37 0
Bazel 2 777 167 177 433 6
C++ Header 2 125 11 55 59 2
HEX 2 173 0 0 173 0
HTML 2 34 4 5 25 0
INI 2 13 2 5 6 0
Module-Definit… 2 157 20 0 137 4
bait 2 64 4 15 45 9
sed 2 106 23 53 30 0
CloudFormation… 1 99 17 2 80 0
Gherkin Specif… 1 336 40 97 199 0
MATLAB 1 89 17 37 35 3
Ruby 1 29 4 0 25 1
Scallop 1 3 0 0 3 0
TeX 1 234 6 73 155 0
Vim Script 1 42 3 12 27 5
XML Schema 1 404 46 0 358 0
───────────────────────────────────────────────────────────────────────────────
Total 88,988 42,582,367 5,323,705 4,807,573 32,451,089 2,682,508
───────────────────────────────────────────────────────────────────────────────
Estimated Cost to Develop (organic) $1,473,621,894
Estimated Schedule Effort (organic) 219.99 months
Estimated People Required (organic) 595.12
───────────────────────────────────────────────────────────────────────────────
Processed 1595970277 bytes, 1595.970 megabytes (SI)
───────────────────────────────────────────────────────────────────────────────
On the v7.2-rc1 tree, scc also estimates the cost to develop the kernel from scratch at approximately $1.47 billion using the COCOMO organic model, a rough but striking number.
Метод 4: wc -l (Быстрая проверка корректности всех файлов)
Этот счетчик подсчитывает каждую строку в каждом файле независимо от типа, включая бинарные файлы и файлы прошивки. Он выдает максимальное значение и не заменяет полноценный счетчик кода, но полезен для приблизительной оценки верхнего предела.
find . -not -path './.git/*' -type f \
| xargs wc -l 2>/dev/null \
| awk '/total/{sum += $1} END{print sum}'
Пример выходных данных:
43179595
| tail -1 в конце. Когда файлов десятки тысяч, функция xargs разбивает их на несколько пакетов, и каждый пакет выводит свою собственную строку total. Функция tail -1захватывает только промежуточный итог последнего пакета, что приводит к совершенно неверному результату.
Сравнение инструментов
| Инструмент | Скорость | Языковой анализ | Примечания |
|---|---|---|---|
wc -l | Самый быстрый | ❌ | Подсчитывает все файлы, включая бинарные. |
tokei | Очень быстро | ✅ | Оптимальный баланс скорости и точности. |
scc | Быстрый | ✅ | Также сообщается о цикломатической сложности. |
cloc | Медленно (15–30 м) | ✅ | Отсутствуют файлы дерева устройств; недоучет ядра. |
Сводка статистики кода Linux 7.2
Измерено на коммите dc59e4fea9d8(тег: v7.2-rc1), 29 июня 2026 г.:
| Статистика | Ценить |
|---|---|
Всего строк — все файлы ( wc -l) | 43,179,595 |
| Общее количество строк — с учетом исходного кода (tokei/scc) | ~42 583 000 |
| строки исходного кода | ~32 400 000 |
| Строки комментариев | ~4 850 000 |
| Пустые строки | ~5 327 000 |
| Файлы, не являющиеся исходными (пробел) | ~597 000 строк (файлы прошивки, скомпилированные .dtb файлы, сертификаты) |
| Крупнейший водитель | AMDGPU + AMDKFD |
| драйвер графики AMD | ~6 356 056 строк |
| Основной источник роста | драйверы устройств |
| Очистка наследия | Продолжается удаление кода Intel i486 и устаревших драйверов. |
| Ориентировочная стоимость разработки | Примерно 1,47 миллиарда долларов (COCOMO, через scc) |
Как появился заголовок «43 миллиона».
Проверка wc -lкаждого файла в репозитории (включая файлы прошивки, скомпилированные бинарные файлы дерева устройств .dtbи сертификаты) выдает 43 179 595 строк.
Инструменты, учитывающие исходный код, такие как tokeiи , sccпоказывают результат около 42,58 миллионов, поскольку они корректно исключают файлы, не являющиеся исходным кодом. Разница в ~597 000 строк между двумя цифрами точно соответствует этим бинарным и нетекстовым файлам.
Заключение
Пересечение отметки в 42 миллиона строк — это не просто забавная статистика. Она отражает масштаб одного из крупнейших в мире проектов по разработке программного обеспечения, основанных на сотрудничестве.
Разработчики ядра Linux продолжают добавлять поддержку нового оборудования, одновременно удаляя код для платформ, срок службы которых подошел к концу. В результате получается ядро, которое развивается там, где это необходимо, и становится чище там, где это возможно.
Для энтузиастов Linux эта веха является еще одним напоминанием о том, как быстро развивается разработка ядра и сколько работы вкладывается в поддержку всего, от крошечных встроенных плат до самых быстрых в мире суперкомпьютеров.
Источник:
Редактор: AndreyEx