Захотелось потрындеть, решил описать свое видение идеального дистрибутива. Сразу скажу, что меня интересует лишь серверная специфика, про полноценный GUI писать не буду, там думать надо.
- Сборка. Не скажу, что видел всё, но обычно берут исходники софтины с её билд-системой, к ней сверху прикручивают какие-то скрипты, которые вызывают ./configure и тд. Я бы сделал по-другому: берём, собственно, исходники. Выкидываем все билд скрипты и переводим всё на bazel. Считаю его лучшей системой сборки в мире, если есть время на его изучение. Понятно, что надо будет исходные билд-скрипты на самом деле не выкинуть, а изучить, определять нужные дефайны и тд. Сделать процесс перевода не одноразовым, а чем-то вроде скрипта, чтобы следующие версии уже автоматом собирать, а не повторять весь процесс.
Отдельный вопрос с крупными пакетами вроде ядра. Там система сборки, наверное, в каком-то смысле уже часть исходников. Не уверен, что для ядра это вообще возможно. Но если возможно, то надо сделать, однозначно.
bazel даст повторяемые сборки. Это важно. Т.е. вася и петя берут одни исходники и получают идентичные бинарники.
-
Пакетов, как таковых, нет. Весь дистрибутив это что-то вроде debian-minimal. Т.е. ядро + systemd + libc + coreutils + кучка необходимых программ. Всё это идёт единым образом (можно представлять как tar-архив). Образ ОС абсолютно иммутабельный, не просто 644, не просто mount -o ro, а хотелось бы прям на уровне иммутабельной ФС вроде ISO. Чтобы его поменять вообще было бы сложно. Ещё для безопасности было бы неплохо там всё обложить контрольными суммами и подписями, чтобы ядро сразу выпадало в осадок, если на диске что-то поменялось.
-
Каждая следующая версия выпускается кроме того хорошо оптимизированным бинарным diff-ом, что позволит типовым обновлениям быть крохотными, в районе нескольких десятков килобайтов. Обновления постараться сделать не требующими перезагрузки, но в то же время корректными (перезапускать демоны, если поменялась библиотека, через kexec перезапускать ядро). Кроме того сделать возможность очень легко откатиться на предыдущую версию, тоже без перезагрузки. Понятно, что речь идёт об обновлениях безопасности, когда особо ничего не меняется.
-
Используются современные продвинутые файловые системы наподобие bcachefs/zfs/btrfs. Смысл в том, чтобы во-первых использовать дедупликацию, и обновления из пункта 3 не занимали кучу места, во-вторых чтобы максимально упростить откаты на предыдущие версии.
-
Использовать максимально современные и легковесные подходы. Ядро грузить с UEFI, для сервисов systemd, networkd, минимум выбора, максимум интегрированности. Также использовать хорошие подходы к безопасности, ну про иммутабельный root уже упоминал, кроме этого запускать все сервисы по возможности в chroot или вообще отдельных ns, написать хорошие selinux правила. Т.к. базовая система имеет относительно небольшой размер, это не должно быть очень уж сложным.
-
Собственно остаётся главное, для чего нужен дистрибутив - запуск пользовательских программ. И вот это предлагается делать не через опакечивание каждой программы во вселенной, а через контейнеры. Сегодня видимо это podman. Т.е. максимум, что от дистрибутива надо - обеспечить работу этого самого podman-а. А дальше уже практически для всего софта имеются образы либо от самих разработчиков, либо от достаточно компетентных товарищей, которые достаточно часто обновляются.
-
Есть уж говорить про GUI, тут можно применить похожую концепцию. Выбрать один DE, ну очевидно это гном, включить его в базовый образ, а весь софт ставить через контейнерные решения вроде flatpak. Хотя тут, конечно, базовый образ будет куда жирней.