Привет, Хабр! На связи Виктор Сергеев, редактор «МТС Диджитал». Сегодня обсудим «большую чистку» ядра Linux.

Для начала стоит избавиться от поддержки десятков устаревших ARM-процессоров. Многие чипы почти не используются, смысла в их поддержке в ядре Linux все меньше. Но как их убрать, чтобы изменения прошли безболезненно для пользователей? У одного из самых известных контрибьюторов Linux Арндта Бергмана есть план. Подробности — под катом.

Что за план

Бергман предлагает устроить «большую чистку» для ядра Linux и компиляторов из набора GCC (GNU Compiler Collection) — это набор компиляторов для языков программирования в рамках проекта GNU. GCC — открытое ПО. Оно распространяется фондом свободного программного обеспечения на условиях GNU GPL и GNU LGPL.

Если коротко, сначала Бергман хочет убрать поддержку ARMv3 (семейство ARM6) и ARMv4 (ARM 11). Эти чипы появились в конце XX века и давно потеряли актуальность. Некоторые процессоры на базе архитектур ARMv3 и ARMv4 еще изредка применяются, например, в StrongARM и FA526. Но это уже отголоски прошлого.

В случае ARMv4 Бергман считает, что на первом этапе поддержку нужно вырезать из компиляторов и только потом, через несколько лет, — из ядра Linux. Еще от одной архитектуры, ARMv7-M, планируют избавиться в 2027 году. Ее развитие прекращено в 2017-ом.

В 2023 году эксперты проводили анализ ядра и подсчитывали, насколько его можно облегчить, если убрать поддержку устаревших технологий. Выяснилось, что на 154 тыс. строк программного кода. Бергман, к сожалению, аналогичные подсчеты не проводил, но, вероятно, объем «чисток» примерно такой же.

Автор проекта рекомендует не вводить изменения сразу, а избавляться от устаревших технологий планомерно — от совсем не актуальных в настоящее время до иногда используемых.

Какие архитектуры удалят

В плане содержится подробная информация об архитектурах, чипах и расширениях, которые Бергман предлагает удалить:

  • ARMv3 — ее поддержка уже убрана из GCC 9;

  • ARMv4 — от архитектуры отказались в Debian 5.0. По плану поддержку ARMv4 прекратят сначала в GCC, а через несколько лет — в ядре;

  • ARMv4T — сейчас встречается шесть семейств SoC с ядрами ARM720T, ARM920T и ARM922T. Они распространены больше, чем представители вышеупомянутой архитектуры. Бергман предлагает избавиться от поддержки технологии в ядре, но не раньше, чем от ARMv5;

  • ARMv5 — архитектура применяется примерно на трети всех поддерживаемых в ядре платформ. Казалось бы, все хорошо, но нет: почти все они близки к окончанию жизненного цикла. Из-за отсутствия FPU и атомарных операций сохранять поддержку в Debian, например, все сложнее. Так что, возможно, скоро порт Debian для ARMv5 будет переведен в число неофициальных;

  • ARMv6 — планируется избавиться только от начальных поколений чипов этой архитектуры, включая ARM1136r0p (NXP i.MX31) и OMAP24xx (Nokia N8xx);

  • ARMv6K — используется в процессорах ARM1176 (Raspberry Pi 1, AST2500) и ARM1136r1;

  • ARMv7-M — еще используется в микроконтроллерах на базе Cortex-M3/M4/M7. Это последние из могикан, то есть поддерживаются в ядре чипами без MMU. Бергман предлагает удалить поддержку ARMv7-M в 2027 году, спустя 10 лет после остановки разработки чипов с этой архитектурой;

  • iWMMXt — в ядре Linux уже нет некоторых чипов на базе этой архитектуры, включая CPU ARMv7 PJ4 (MMP2, Berlin). Поддержка iWMMXt прекращена в Clang, ее предлагают удалить и из GCC;

  • BE32 (big endian ARMv5) — редкая архитектура, на базе которой построен только SoC Intel IXP4xx. Автор предлагает убрать поддержку технологии как из GCC, так и из ядра;

  • BE8 (big-endian ARMv7) — во многих драйверах есть проблемы, поэтому ее тоже предлагают вырезать. Тестирование не ведется, да и информации об устройствах, которые работают на базе чипов, нет.

План пока обсуждается, финального решения нет. Автор предлагает не затягивать с ним, а начать работу по очистке ядра Linux уже с версии 6.12. Стабильный дистрибутив запланирован на декабрь 2024 года.

Не только ARM

Разработчики Linux избавляются от наследия прошлого не только в виде прекращения поддержки старых чипов на базе ARM. То же самое они делают и в отношении устаревших x86-процессоров. В самом конце прошлого года из Linux 6.7 удалили код, отвечавший за поддержку микросхем Intel Itanium на базе архитектуры IA-64. Инициатором той чистки был сам Линус Торвальдс. Еще в 2021 году он назвал эти чипы «мертвыми».

А в 2022 году он же предложил удалить и процессоры Intel семейства i486. По словам Торвальдса, технология безнадежно устарела, поэтому из ядра Linux нужно убрать весь связанный с ними код. Ну а поддержку i386 убрали еще в конце 2012, так что i486 продержались достаточно долго.

А что вы думаете о «большой чистке Бергмана» и ее возможных последствиях?

Еще можно почитать:

Комментарии (7)


  1. NeoCode
    06.08.2024 14:18

    Не одобряю такого. ИМХО, в идеале вся поддержка старых чипов должна заключаться в принципе "работает - не трогай". Ведь чипы не меняются? Значит и поддерживать ничего не надо.

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


    1. gudvinr
      06.08.2024 14:18

      Так в том и дело, что НЕ работает.

      Ядро постоянно развивается, включая API, которые используются легаси кодом. Изменения API могут поломать код поддержки старых архитектур.
      Поэтому кто-то должен постоянно их проверять с новыми ядрами. А кто будет их проверять, если никто ими не пользуется?

      Получается, что в ядре находится код с непонятным статусом, но который надо поддерживать, на который надо ориентироваться при совершении изменений. Хотите, чтобы не удаляли - поддерживайте и проверяйте сами. Только так.

      Более того, даже с новым ядром далеко не факт, что ПО поверх ядра запустится т.к. в старых процессорах могут отсутствовать инструкции, необходимые новым программам - SIMD и пр.
      Поэтому скорее всего на такой старой системе проще и удобнее будет работать со старым ядром и старым ПО.


      1. Nansch
        06.08.2024 14:18
        +2

        А почему эти чипы всё ещё в ядре, а не в модулях?


        1. NickDoom
          06.08.2024 14:18

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

          Так что с точки зрения структуры сырцов они уже «в модулях» :) просто если оно слишком распухает, начинается постоянное «ойнесобирается», ну а при необходимости можно что-то в более-менее частном порядке обратно втащить, я думаю… но, правда, придётся продраться через все «ойнесобирается», которые накопились :)

          А бинарные модули по понятной причине в тех же машкодах, что и ядро, так что эти (буквальные) модули нам не помогут %)


  1. datacompboy
    06.08.2024 14:18

    Покуда чистка не затрагивает историю в гите -- давно пора.


  1. goldexer
    06.08.2024 14:18
    +2

    Хлам - долой. Для специализированных случаев есть специализированные редакции и возможность вносить правки. Не верите/не согласны? А ну тогда небыло бы у нас ни Андроида, ни RaspberryPi и проч. Сейчас всё с исключительным уровнем специфичности можно залить в отдельный модуль и расшарить. Только пожалуйста, упаси вас бог превращать это в Виндоус, заплывшей жиром, с огромным полумертвым легаси в каждом дистрибутиве без реального разграничения функционала версий и попытками в новую инфраструктуру на костях старой... Это живёт только на правах монополиста с пренебрежением ущерба репутации. Линукс же изначально был... ну вы и сами знаете


  1. kenomimi
    06.08.2024 14:18

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

    ARMv7-M — еще используется в микроконтроллерах на базе Cortex-M3/M4/M7.

    Оно есть в мейнлайне? Не знал. Был вроде форк ucLinux для поддержки жирных микроконтроллеров, но о нем уже давно ничего не слышно...