LINUX.ORG.RU
ФорумTalks

Как бы я сделал идеальный дистрибутив

 ,


0

1

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

  1. Сборка. Не скажу, что видел всё, но обычно берут исходники софтины с её билд-системой, к ней сверху прикручивают какие-то скрипты, которые вызывают ./configure и тд. Я бы сделал по-другому: берём, собственно, исходники. Выкидываем все билд скрипты и переводим всё на bazel. Считаю его лучшей системой сборки в мире, если есть время на его изучение. Понятно, что надо будет исходные билд-скрипты на самом деле не выкинуть, а изучить, определять нужные дефайны и тд. Сделать процесс перевода не одноразовым, а чем-то вроде скрипта, чтобы следующие версии уже автоматом собирать, а не повторять весь процесс.

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

bazel даст повторяемые сборки. Это важно. Т.е. вася и петя берут одни исходники и получают идентичные бинарники.

  1. Пакетов, как таковых, нет. Весь дистрибутив это что-то вроде debian-minimal. Т.е. ядро + systemd + libc + coreutils + кучка необходимых программ. Всё это идёт единым образом (можно представлять как tar-архив). Образ ОС абсолютно иммутабельный, не просто 644, не просто mount -o ro, а хотелось бы прям на уровне иммутабельной ФС вроде ISO. Чтобы его поменять вообще было бы сложно. Ещё для безопасности было бы неплохо там всё обложить контрольными суммами и подписями, чтобы ядро сразу выпадало в осадок, если на диске что-то поменялось.

  2. Каждая следующая версия выпускается кроме того хорошо оптимизированным бинарным diff-ом, что позволит типовым обновлениям быть крохотными, в районе нескольких десятков килобайтов. Обновления постараться сделать не требующими перезагрузки, но в то же время корректными (перезапускать демоны, если поменялась библиотека, через kexec перезапускать ядро). Кроме того сделать возможность очень легко откатиться на предыдущую версию, тоже без перезагрузки. Понятно, что речь идёт об обновлениях безопасности, когда особо ничего не меняется.

  3. Используются современные продвинутые файловые системы наподобие bcachefs/zfs/btrfs. Смысл в том, чтобы во-первых использовать дедупликацию, и обновления из пункта 3 не занимали кучу места, во-вторых чтобы максимально упростить откаты на предыдущие версии.

  4. Использовать максимально современные и легковесные подходы. Ядро грузить с UEFI, для сервисов systemd, networkd, минимум выбора, максимум интегрированности. Также использовать хорошие подходы к безопасности, ну про иммутабельный root уже упоминал, кроме этого запускать все сервисы по возможности в chroot или вообще отдельных ns, написать хорошие selinux правила. Т.к. базовая система имеет относительно небольшой размер, это не должно быть очень уж сложным.

  5. Собственно остаётся главное, для чего нужен дистрибутив - запуск пользовательских программ. И вот это предлагается делать не через опакечивание каждой программы во вселенной, а через контейнеры. Сегодня видимо это podman. Т.е. максимум, что от дистрибутива надо - обеспечить работу этого самого podman-а. А дальше уже практически для всего софта имеются образы либо от самих разработчиков, либо от достаточно компетентных товарищей, которые достаточно часто обновляются.

  6. Есть уж говорить про GUI, тут можно применить похожую концепцию. Выбрать один DE, ну очевидно это гном, включить его в базовый образ, а весь софт ставить через контейнерные решения вроде flatpak. Хотя тут, конечно, базовый образ будет куда жирней.

★★★★

Последнее исправление: vbr (всего исправлений: 2)

Самое главное не сказал – линковка динамическая или статическая?

CYB3R ★★★★★
()
Ответ на: комментарий от hateyoufeel

Я бы заменил на meson, но кучу сборочных скриптов переписывать. Что с ядром делать – не понятно.

CYB3R ★★★★★
()

Очередное сумрачное изобретательство ради самого изобретательства.

Нормальные проектировщики идут от UX к техническим потрохам, а не наоборот.

alex1101
()
Последнее исправление: alex1101 (всего исправлений: 1)

bazel даст повторяемые сборки

Наверное, там какое-то сильное колдунство.

dataman ★★★★★
()
Ответ на: комментарий от CYB3R

Я бы заменил на meson, но кучу сборочных скриптов переписывать. Что с ядром делать – не понятно.

Проблема с этими заменами в том, что системы сборки обычно пилятся под какой-то конкретный язычок и хорошо работают только с ним. А т.н. «универсальные» системы сборки херово работают везде.

Тут кто-то уже предлагал сделать то же, что предлагает ТС, только с Nix вместо Bazel.

hateyoufeel ★★★★★
()

Flatpak на сервере? Баба Яга против! Хотя у каждого свое видение.

Thing
()

вот так и получается, что для одного идеальный дистрибутив, для другого - говно

slyjoeh ★★★
()
Ответ на: комментарий от slyjoeh

Надо будет тоже такую тему создать. Собрать статистику))

wandrien ★★
()

@linuxoshka как раз дистр пилить собирается, скооперируйтесь :)

GREAT-DNG ★★★★
()

Выкидываем все билд скрипты и переводим всё на bazel.

перевожу «закапываем несколько сотен человеко-лет и бросаем начинание»

leave ★★★★★
()
Ответ на: комментарий от leave

Ну в целом это, конечно, опциональный пункт, т.к. на результат не влияет, меня просто бесят все эти древние костыли.

vbr ★★★★
() автор топика

Даже расписывать не буду, что в этом подходе не так.

windows10 ★★★★★
()
Ответ на: комментарий от hateyoufeel

Ну так в базовой системе язык один – Си, хотя плюсы пытались пропихнуть но не особо получилось, сейчас с растом начнут пытаться.

CYB3R ★★★★★
()

Самый простой способ - это скопировать систему с любимого домашнего сервачка Линуса. Там все отлажено и собрано оптимально.

Irma ★★
()
Ответ на: комментарий от vbr

Иногда сборка оказывается сводится к gcc -o бинарник список_исходников, опционально перед этим создав где-то config.h

Я так libfuse-2.9.9 перепаковал в build.sh скрипт, в том числе заменив мусорный 500кб configure из autotools на свой генератор config.h в том же build.sh на пару страниц.

Однако совсем не везде так, и в целом где-то у тебя не хватит на это ресурсов.

firkax ★★★★★
()
Ответ на: комментарий от CYB3R

Ну так в базовой системе язык один – Си, хотя плюсы пытались пропихнуть но не особо получилось, сейчас с растом начнут пытаться.

Пххахахахахахахахах! Что это за базовая система такая? Ведро + Busybox? Потому что дальше начинаются свистопляски уже.

Кстати, все сишные компиляторы сейчас написаны ВНЕЗАПНо не на C.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)

Без нескучных обоев это все лишено смысла.

LightDiver ★★★★★
()
Ответ на: комментарий от hateyoufeel

Тут кто-то уже предлагал сделать то же, что предлагает ТС, только с Nix вместо Bazel.

А чем это тогда будет отличаться от NixOS?

theNamelessOne ★★★★★
()

Лучшее - враг хорошего. Не делайте идеальный дистрибутив, сделайте хороший.

vbcnthfkmnth123 ★★★★★
()
Последнее исправление: vbcnthfkmnth123 (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Проблема с этими заменами в том, что системы сборки обычно пилятся под какой-то конкретный язычок и хорошо работают только с ним. А т.н. «универсальные» системы сборки херово работают везде.

Благо божественные автотулзы заруливают абсолютно всё на свете и смотрят на эти ваши новомодные как на то, чем они и являются.

token_polyak ★★★★★
()
Ответ на: комментарий от token_polyak

Благо божественные автотулзы заруливают абсолютно всё на свете и смотрят на эти ваши новомодные как на то, чем они и являются.

Ну да, сделать большее говно чем автолулзы мало кому удавалось. С этим даже спорить бесполезно.

hateyoufeel ★★★★★
()
Ответ на: комментарий от theNamelessOne

Тут кто-то уже предлагал сделать то же, что предлагает ТС, только с Nix вместо Bazel.

А чем это тогда будет отличаться от NixOS?

NixOS дёргает систему сборки опакечиваемого софта. То, что тут предлагает чувак, это грубо говоря заменить Makefile, Cabal, Cargo, Pip и прочие на Nix или Bazel.

hateyoufeel ★★★★★
()

Как бы я сделал идеальный дистрибутив

Дениска, ты?

posixbit ★★
()
Ответ на: комментарий от alex1101

При том, что топикстартер о каком-то рокет сайенс говорит, с переделыванием сборки сотен пакетов лол

timdorohin ★★★★
()

идеальный дистрибутив

systemd

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

Слишком толсто.

Dog ★★★
()

Я бы сделал по-другому: берём, собственно, исходники. Выкидываем все билд скрипты и переводим всё на bazel.

Не нужно и практически неосуществимо.

</thread>

X512 ★★★★★
()
Ответ на: комментарий от wandrien

Все? Да ты что.

Все актуальные компиляторы Си для производительного железа (не дохлые микроконтроллеры) написаны на C++.

X512 ★★★★★
()

Самое главное забыл: какие обои?

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: комментарий от LINUX-ORG-RU

Идеал в том, что ТС перечислил максимум бесполезных решений в одном посте и не решил ни одной реальной проблемы. Это покруче, чем БолгенОС.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)

про полноценный GUI писать не буду, там думать надо

Выбрать один DE, ну очевидно это гном

Смеркалось, не думалось…

dataman ★★★★★
()
  • Оптимизированный двоичный diff ? Одно дело если ты дыры замещаешь, но если ты меняешь двоичные файлы, то выигрыша нет, ибо изменения либо незначительны, либо чаще таковы, что подобный дифф угробит нафиг производительность и самое главное - неясно что хорошего в том, чтобы вместо скачивания одного архива нужно было скачивать сотни диффов и накладывать их один за другим.

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

  • контейнеры нужны для изоляции окружения ПО, что противоречит интеграции в окружение и взаимодействие ПО с пользователем.

AKonia ★★
()
Ответ на: комментарий от AKonia

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

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

Выбор за пользователя среды рабочего стола - плохая идея

Многим пользователям нужно, чтобы выбор сделали за них. К примеру я - такой пользователь. Меня бесит выбор. Я люблю, когда выбора нет, когда его сделали за меня и при этом выбрали то, что мне нужно. Кому нужен выбор - debian никто не отменял, они вон хвастаются, что в очередном релизе добавили ещё 50 000 пакетов, а у меня волосы на груди шевелятся, когда я представляю себе это.

контейнеры нужны для изоляции окружения ПО, что противоречит интеграции в окружение и взаимодействие ПО с пользователем.

Не очень понял, о чём речь. Изоляция нужна для безопасности (чтобы вирус не вылез за пределы контейнера) и для стабильности (чтобы кривой софт не вылез за пределы контейнера).

vbr ★★★★
() автор топика
Последнее исправление: vbr (всего исправлений: 2)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)