O kernel Linux atingiu um novo marco importante. A árvore de desenvolvimento mais recente do Linux 7.2 contém aproximadamente 43.2 milhões de total linhas em todos os arquivos rastreados, ou cerca de 42.6 milhões de linhas reconhecidas por linguagem de acordo com as ferramentas tokei e scc.

Verificamos esses números de forma independente na tag oficial v7.2-rc1 usando 4 ferramentas diferentes de contagem de código. Com base em nossas medições, esta é a maior árvore de código-fonte do kernel Linux até o momento.

À primeira vista, esse número pode parecer enorme. Mas isso não significa que o Linux tenha se tornado inchado. Em vez disso, mostra duas coisas: o quanto de hardware o Linux suporta hoje e o quão ativamente o kernel continua a evoluir.

Vamos ver o que mudou.

Linux 7.2 ultrapassa a marca de 42 milhões de linhas

Eu medi a árvore Git do Linux 7.2-rc1 usando múltiplas ferramentas de contagem de código. Para fins de demonstração, usei o commit exato da tag v7.2-rc1 (dc59e4fea9d8).

ostechnix@fedora:~/linux$ git log --oneline -1
dc59e4fea9d8 (HEAD -> master, tag: v7.2-rc1, origin/master, origin/HEAD) Linux 7.2-rc1
ostechnix@fedora:~/linux$ git describe --tags
v7.2-rc1
ostechnix@fedora:~/linux$ git rev-parse HEAD
dc59e4fea9d83f03bad6bddf3fa2e52491777482

Aqui está o que cada ferramenta encontrou:

Eu executei todas as quatro ferramentas na mesma sessão de uma VM Fedora contra o mesmo checkout do Git (dc59e4fea9d8) usando versões idênticas das ferramentas. Isso torna os resultados diretamente comparáveis e reproduzíveis.

Um teste anterior com cloc v1.96 produziu uma contagem total quase idêntica de 40,414,638 linhas. A pequena diferença vem de melhorias no cloc v2.08, que reconhece alguns formatos de arquivo adicionais, como Jinja Template e Snakemake.

Tokei e scc concordam quase perfeitamente, ambos relatando cerca de 42.58 milhões de total linhas. Seus resultados independentes diferem por apenas 2,159 linhas (cerca de 0.005%), tornando-os as medições mais consistentes com reconhecimento de linguagem da árvore de código-fonte do Linux.

Em comparação, a execução padrão do cloc subestima o kernel em aproximadamente 2.17 milhões de linhas porque ele não reconhece arquivos-fonte de Device Tree do Linux (.dts/.dtsi) por padrão. Verifiquei isso executando novamente o cloc com:

cloc --force-lang="C",dts --force-lang="C",dtsi .

Isso aumentou as contagens total do cloc em aproximadamente 2.1 milhões de linhas, trazendo seus resultados para uma concordância próxima com tokei e scc.

Reproduzi o mesmo comportamento tanto no Linux 7.1 quanto no 7.2-rc1, confirmando que a discrepância vem do reconhecimento de linguagem padrão do cloc e não de uma mudança no próprio kernel.

Como o título "43 milhões" é derivado

Uma contagem bruta com wc -l em todos os arquivos rastreados no repositório produz 43,179,595 linhas. É daí que vem o título "43 milhões de linhas".

Há uma diferença de aproximadamente 597,000 linhas entre esse número e as contagens total relatadas por tokei e scc. Essa diferença existe porque o wc -l conta todas as linhas em todos os arquivos rastreados, enquanto as ferramentas com reconhecimento de linguagem intencionalmente excluem ou classificam muitos arquivos não-fonte de forma diferente. Exemplos incluem documentação, metadados, imagens, certificados e outros formatos não-fonte ou não reconhecidos em todo o repositório.

Vale notar que um checkout Git limpo do kernel Linux não contém binários .dtb compilados e nenhum diretório firmware/ (os blobs de firmware são mantidos separadamente no repositório linux-firmware). Portanto, esses arquivos não contribuem para essa diferença.

Em resumo, o título de 43 milhões é tecnicamente preciso porque reflete todas as linhas armazenadas na árvore Git. No entanto, o número de 42.58 milhões relatado por tokei e scc é a medição mais precisa do código-fonte do kernel.

Linux 7.2 continua o crescimento do kernel

Para medir o quanto o kernel cresceu durante este ciclo de desenvolvimento, repeti as mesmas medições no lançamento final do Linux 7.1 usando a mesma VM Fedora, versões das ferramentas e metodologia.

Os resultados mostram uma concordância notável entre todos os três métodos de medição. Tanto tokei quanto scc relatam que o Linux ganhou aproximadamente 563,000 linhas com reconhecimento de linguagem entre o Linux 7.1 e o 7.2-rc1, representando cerca de 1.3% de crescimento durante um único ciclo de desenvolvimento. Uma contagem bruta com wc -l mostra um aumento de tamanho similar de 572,677 linhas.

Isso parece dramático, mas é totalmente esperado. Cada lançamento do kernel Linux adiciona suporte para novos processadores, plataformas, sistemas de arquivos, drivers, tecnologias de virtualização e melhorias de segurança, enquanto continua refinando subsistemas existentes.

De acordo com as notas de lançamento finais do Linux 7.1, mais de 2,000 desenvolvedores contribuíram com mudanças, incluindo mais de 300 contribuidores de primeira viagem. Contribuições sustentadas nessa escala naturalmente se traduzem em um crescimento constante da árvore de código-fonte ao longo do tempo.

Linux continua crescendo mesmo após remover código antigo

Um aspecto surpreendente deste marco é que o código do kernel Linux continua a crescer mesmo enquanto remove código legado.

Linux 7.1 começou a abandonar o suporte para processadores i486 da Intel, removendo mais de 140,000 linhas de código obsoleto, incluindo controladores PCMCIA legados e drivers ISDN. Linux 7.2 continua essa limpeza removendo código adicional relacionado a i486 junto com vários drivers obsoletos e componentes x86 legados.

Em outras palavras, os desenvolvedores do Linux estão continuamente equilibrando adições com remoções. Enquanto novo suporte a hardware, arquiteturas, drivers, sistemas de arquivos e recursos de segurança expandem o kernel, o código obsoleto é regularmente aposentado para reduzir a carga de manutenção e manter o projeto moderno.

Por que o kernel Linux é tão grande?

A resposta são os drivers.

O kernel Linux suporta uma variedade incrível de hardware. Cada placa de vídeo, controladora de armazenamento, adaptador de rede, recurso de laptop, dispositivo USB e plataforma embarcada precisa de suporte do kernel.

À medida que novo hardware chega ao mercado, os desenvolvedores adicionam novos drivers. Ao mesmo tempo, eles mantêm a compatibilidade com dispositivos existentes. Por causa disso, a maior parte do crescimento do kernel vem do suporte a hardware. Muito pouco crescimento vem do código central de agendamento ou gerenciamento de memória do kernel.

AMDGPU continua sendo o maior driver

O maior contribuinte ainda é o subsistema gráfico da AMD.

O driver combinado AMDGPU e AMDKFD contém aproximadamente 6.35 milhões de linhas de código. Isso o torna o maior driver em todo o kernel Linux.

Linus Torvalds apontou algo interessante. Cerca de um terço de um grande pull request consistia em arquivos de definição de registradores da GPU AMD. Esses arquivos são, em sua maioria, dados gerados. Eles ajudam o Linux a se comunicar com hardware gráfico moderno da AMD.

Maior não significa mais lento

Muitas pessoas assumem que mais linhas de código significam software mais lento. Não é assim que o kernel Linux funciona.

A maior parte do código extra existe para suportar hardware que muitos usuários nunca terão. Grande parte dele vive em módulos carregáveis. Esses módulos só são ativados quando o hardware correspondente está presente.

Como resultado, o kernel continua melhorando enquanto expande a compatibilidade de hardware. Isso se aplica a desktops, servidores, laptops, sistemas embarcados, plataformas em nuvem e supercomputadores.

Conte o número total de linhas no código do kernel Linux

Qualquer um pode clonar o repositório do kernel Linux e medi-lo. Primeiro, obtenha o código-fonte do kernel:

git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux

Um clone completo tem cerca de 5 GB. Você pode adicionar --depth=1 ao comando git para um clone raso (cerca de 1.5 GB):

git clone --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

Para este guia, usei um clone completo.

Método 1: cloc (a ferramenta de referência amplamente citada)

cloc é a ferramenta mais comumente usada para contagens de linhas do kernel.

# Install
sudo apt install cloc        # Debian/Ubuntu
sudo dnf install cloc        # Fedora/RHEL
sudo pacman -S cloc          # Arch

Agora, execute:

cloc --progress=1 .

Observe o ponto (.) no final. Significa que estamos instruindo o cloc a analisar o diretório atual.

Dependendo do seu hardware, o cloc pode levar vários minutos para escanear toda a árvore de código-fonte do Linux. Na minha VM Fedora, ele completou em cerca de 3–4 minutos.

Exemplo de saída:

94718 text files.
82309 unique files.
12415 files ignored.
github.com/AlDanial/cloc v 2.08  T=276.85 s (297.3 files/s, 145986.6 lines/s)
----------------------------------------------------------------------------------------
Language                              files          blank        comment           code
----------------------------------------------------------------------------------------
C                                     36898        3801120        2908960       19610084
C/C++ Header                          26648         791061        1600637        8405094
JSON                                    833              2              0         553530
reStructuredText                       4011         197901          81994         540661
YAML                                   5675         104970          25957         518427
Assembly                               1343          47625          99191         230030
Bourne Shell                           1321          40912          27301         159379
Rust                                    473          15277          52795         114347
Python                                  428          21148          18854          90203
Text                                    975          19724              0          89632
make                                   3188          12948          13377          60578
SVG                                      87             98           1311          56094
Perl                                     69           6811           4558          34796
XML                                      32           1514           1706          23049
yacc                                     10            723            442           4848
PO File                                   7           1106           1269           4336
Bourne Again Shell                       63            631            416           2584
lex                                      10            366            355           2219
C++                                       9            356            143           1917
awk                                      16            374            480           1743
CSV                                      11            126              0           1413
Jinja Template                          102             69             98            794
NAnt script                               2            167              0            610
Logos                                     4            115              0            547
Markdown                                  9            162              3            514
XML (Qt/GTK)                              1             50              0            486
XSD                                       1             46              9            349
CSS                                       4             71             96            244
Cucumber                                  1             40             97            199
TeX                                       1              6             73            155
TNSDL                                     2             33              0            140
Windows Module Definition                 2             20              0            137
Linker Script                             5             25             11            126
Snakemake                                 5             15             13            125
Clojure                                  36              1              0             95
m4                                        1             15              1             95
XSLT                                      5             13             26             61
BitBake                                   5             65            178             58
Umka                                      2             20              0             54
TOML                                      3              9             12             36
MATLAB                                    1             17             37             35
INI                                       3              6              0             34
sed                                       2             23             52             31
vim script                                1              3             12             27
HTML                                      2              4              5             25
Ruby                                      1              4              0             25
Velocity Template Language                1              0              0             15
----------------------------------------------------------------------------------------
SUM:                                  82309        5065792        4840469       30509981
----------------------------------------------------------------------------------------

Nota: O cloc não reconhece arquivos-fonte de Device Tree (.dts/.dtsi). Isso é parte do motivo pelo qual ele subestima o kernel (veja a análise no início deste guia).

Para medir apenas o driver gráfico da AMD, execute:

cloc drivers/gpu/drm/amd

Método 2: tokei (mais rápido e mais preciso, recomendado)

tokei é significativamente mais rápido que o cloc. Ele também conta corretamente os arquivos Device Tree. Isso o torna uma escolha mais precisa para o kernel Linux.

Primeiro, certifique-se de que o Rust está instalado no seu sistema. E então, instale o tokei usando o gerenciador de pacotes cargo:

cargo install tokei

O tokei também está disponível nos repositórios oficiais de algumas distribuições, então você pode instalá-lo usando o gerenciador de pacotes padrão como abaixo:

sudo apt install tokei
brew install tokei

Agora, execute:

tokei .

Exemplo de saída:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
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
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Ele termina em menos de um minuto e corresponde de perto aos resultados do scc (veja a próxima seção).

Método 3: scc (mais rápido, com métricas de complexidade)

scc corresponde à precisão do tokei. Ele também relata a complexidade ciclomática por linguagem. Isso é útil para entender quais partes do kernel são mais difíceis de manter.

Certifique-se de que o Golang está instalado no seu sistema e então execute o seguinte comando para instalar o scc:

go install github.com/boyter/scc/v3@latest

Agora, execute:

scc .

Exemplo de saída:

───────────────────────────────────────────────────────────────────────────────
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)
───────────────────────────────────────────────────────────────────────────────

Na árvore v7.2-rc1, o scc também estima o custo para reconstruir o kernel do zero. A estimativa é de cerca de $1.47 bilhões, usando o modelo orgânico COCOMO. Você pode ver esse detalhe quase no final da saída.

Método 4: wc -l (verificação rápida de sanidade em todos os arquivos)

O comando wc conta todas as linhas em todos os arquivos, independentemente do tipo. Isso inclui arquivos binários e não-texto. Ele produz o maior número de todas as quatro ferramentas.

find . -not -path './.git/*' -type f \
| xargs wc -l 2>/dev/null \
| awk '/total/{sum += $1} END{print sum}'

Exemplo de saída:

43179595

Por favor, note que wc não é um contador de código com reconhecimento de linguagem. Mas ele fornece um limite superior útil para o número total de linhas armazenadas na árvore Git.

Nota: Não adicione | tail -1 no final. Quando há dezenas de milhares de arquivos, o xargs os divide em vários lotes. Cada lote imprime sua própria linha de total. Usar tail -1 captura apenas o subtotal do último lote. Isso produz um resultado gravemente errado.

Linux 7.2 Resumo das estatísticas de código

Medido no commit dc59e4fea9d8 (tag: v7.2-rc1), junho de 30, 2026:

Ultrapassar 42 milhões de linhas é mais do que uma estatística divertida. Isso reflete a escala de um dos maiores projetos de software colaborativo do mundo.

Os mantenedores do kernel Linux continuam adicionando suporte para novo hardware. Ao mesmo tempo, eles removem código para plataformas que chegaram ao fim de sua vida útil. O resultado é um kernel que cresce onde precisa e se torna mais limpo onde pode.

Para entusiastas do Linux, este marco é outro lembrete de quão rápido o desenvolvimento do kernel se move. Também mostra quanto trabalho é necessário para suportar tudo, desde pequenas placas embarcadas até os supercomputadores mais rápidos do mundo.

Fonte: