Если вы пользуетесь NixOS, то наверняка слышали о Nixpkgs — огромной коллекции программных пакетов. Она позволяет устанавливать практически всё, что угодно, в вашей системе NixOS. Но когда что-то становится очень большим, управлять этим может быть сложно. В этом вам поможет Ekapkgs — он делает всё более организованным и эффективным.
Представьте, что Nixpkgs — это большой захламлённый шкаф, в котором хранятся сотни тысяч программных пакетов. Он хорошо работает, но поддерживать в нём порядок и вносить большие изменения может быть сложно. Ekapkgs пытается решить эту проблему.
Что такое Ekapkgs?
Ekapkgs — это полирепозиторий, созданный на основе Nixpkgs. Вместо того чтобы хранить все пакеты в одной большой коллекции, Ekapkgs разделяет их на более мелкие, хорошо организованные разделы, называемые репозиториями.
Вот как будут организованы эти репозитории (или боксы):
- Lib: Набор базовых инструментов только для Nix, которые не занимаются упаковкой программного обеспечения. Это своего рода строительные блоки.
- corepkgs: содержит основные инструменты и библиотеки, необходимые для разработки и запуска программного обеспечения. Он будет стабильным и надёжным.
- Языки: пакеты для различных языков программирования, таких как Python или Haskell. Для каждого языка есть свой раздел.
- Экосистемы: набор инструментов для конкретных областей, таких как домашняя автоматизация (Home Assistant) или машинное обучение (CUDA).
- ekapkgs: Основная коллекция, объединяющая все остальные репозитории. Она включает программное обеспечение, которое не входит в corepkgs или репозитории для конкретных языков. Она останется такой же стабильной, как Nixpkgs.
- userpkgs: Сообщество, в котором пользователи могут делиться пакетами программного обеспечения. Оно похоже на AUR (репозиторий пользователей Arch) или NUR (репозиторий пользователей Nix) и имеет меньше строгих правил в отношении качества и организации.
Чем отличается Ekapkgs?
Основная цель — улучшить организацию и упростить обслуживание. В Nixpkgs есть много похожих, но немного отличающихся способов выполнения задач. Разделив обязанности между небольшими репозиториями, будет проще управлять ими и поддерживать высокое качество.
Другая цель — более быстрое внедрение улучшений и изменений. В Nixpkgs для внесения крупных обновлений требуется длительный процесс запроса комментариев (RFC). Это может занять много времени и не всегда может быть одобрено. Ekapkgs ускорит этот процесс с помощью предложений по целенаправленному улучшению (EEP).
Эти предложения будут рассмотрены специальной командой, которая оперативно предоставит обратную связь и примет решения. Поскольку репозитории будут меньше, обновления будут выходить быстрее, а тестировать новые идеи будет проще.
Избегание крупных общесистемных обновлений
Иногда в Nixpkgs при внесении серьёзных изменений необходимо перестраивать всё. Это может быть медленным и вызывать проблемы. Ekapkgs стремится сократить количество таких масштабных обновлений, изолируя наборы пакетов.
Даже если corepkgs изменится, это затронет лишь несколько тысяч пакетов, что избавит от необходимости в сложном процессе «подготовки». Вместо этого обновления будут применяться осторожно, путём непосредственного обновления источников программного обеспечения.
Лучший контроль качества
В Nixpkgs качество программного обеспечения зависит от отдельных разработчиков. Автоматизированные проверки (например, ofBorg) выявляют только основные ошибки сборки. В Ekapkgs будет представлен инструмент под названием eka-ci. Этот инструмент предоставит подробную информацию об обновлениях программного обеспечения. Он будет проверять:
- Если обновление выводит из строя другое программное обеспечение, которое зависит от него.
- Что именно изменилось в сборке программного обеспечения.
Это сделает проверку обновлений более простой и надёжной. В разных репозиториях также будут разные стандарты качества, поэтому пользователи будут знать, чего ожидать.
Более простая настройка
В Nixpkgs пользователи могут добавлять собственное программное обеспечение с помощью наложений. Ekapkgs улучшит эту функцию, позволив пользователям включать определённые репозитории, например corepkgs
, в систему Ekala.
Также появится функция под названием config.overlays.<scope>
, которая позволит пользователям лучше контролировать добавление или изменение пакетов в определённых областях (например, Python или CUDA).
Стабильность и инновации
Ekapkgs создаст стабильное ядро с репозиториями lib
и corepkgs
и позволит реализовывать новые идеи и проводить эксперименты в userpkgs
. Пользователи могут выбрать:
- Повышение стабильности за счет использования corepkgs.
- Более быстрые обновления и новое программное обеспечение с помощью userpkgs.
- Сочетание того и другого, в зависимости от их потребностей.
Заключение
Ekapkgs берёт лучшее из Nixpkgs и делает лучше:
- Организация программного обеспечения на более мелкие, более управляемые разделы.
- Ускорение обновлений и изменений программного обеспечения.
- Сокращение числа крупных общесистемных перестроек.
- Улучшение контроля качества программного обеспечения.
- Упрощение настройки и внесения вклада для пользователей.
Таким образом, проект Ekapgs направлен на то, чтобы сделать упаковку программного обеспечения более эффективной, надёжной и удобной для пользователей для всех.