Сайт Данила

Ґікс (Guix)

Кількість слів: ~1017

Дисклеймер

Я вже давно використовую NixOS, ба більше я пройшов перші три розділи книги SICP! Мені набагато легше збагнути що робити й що відбувається в цій ОС. Не кожен зможе опанувати нові підходи до налаштувань його системи.

Що є Ґікс?

Ґікс як і Нікс є двох варіантів. Пакетний менеджер Ґікс і Ґікс дистрибутив. Можливо ви вже чули те що Нікс це ще й мова програмування? Ґікс не створив(насправді створив) для себе окрему DSL мову, а використав Guile мову програмування.

Спочатку мене цікавило лише те як Ґікс компонує сервіси й конфігурації. Адже Нікс це лінива мова, з досить незвичним підходом до залежностей між сервісами й їх розширенням. Так от, нещодавно вийшов випуск Ґікс версії 1.5.0. Я вирішив спробувати цей дистрибутив знову.

Linux Libre

Це ядро без компонентів які не мають сирцевого коду. На моєму комп’ютері не працює Wi-Fi та AMD графіка, а останнє мене здивувало. GNU рекоменує обирати комп’ютери з повністю вільними компонентами.

Якщо трохи потерпіти то після встановлення (або навіть під час) можна додати залежність на неофіційний канал з пакетами Ґікс, де пакують стандартне ядро Linux.

Guile

Ця мова програмування походить із LISP сімейства мов, а точніше це Scheme подібна мова. Це дуже розширювальна мова, дозволяє суттєво змінити мову використовуючи лише наявні можливості мови, такі як макроси.

На час написання, я поставив на паузу використання Guix, бо відчув деякі його проблеми, стосовно Guile, а можливо це більше про маленьку спільноту.

Guix пакети

Guix пакети розповсюджуються у вигляді сирцевого коду, який можна скачати з codeberg. Раніше код розміщався на якомусь дуже повільному GNU сервісі, було неможливо користуватись. Кожен пакет описує де отримати необхідні файли для збірки та її залежності, тобто те саме що й Nix.

guix командою відбувається взаємодія з системою. Наприклад guix shell yt-dlp запустить новий shell процес з модифікованими змінними середовища, тобто в цьому тимчасовому середовищі вже встановлені вказані пакети. Серед інших дій є: guix build, guix home, guix edit, guix graph, guix size, guix lint, guix style.

guix style форматує код, але на жаль, часто рекомендують після нього вручну доформатовувати, бо він має дуже дивні правила форматування в деяких випадках. Це велика проблема! До запитів на злиття висувають багато вимог оформлення, наприклад писати changelog у кожному коміті! А коли ще треба форматувати код вручну, стає невесло.

Це також стосується способів пакування. Є така річ як FOD (Fixed Output Derivation). Простими словами, це хеш сума файлів отриманих з інтернету, наприклад залежності Go програми можна запакувати викликавши go mod vendor а потім порахувати хеш суму vendor директорії. Guix надає перевагу явним окремим залежностям. Тобто, FOD створюється для всіх залежностей одної програми, малоймовірно що ще якась програма буде мати точнісенько такі ж залежності. Але якщо робити з кожної окремої залежності свій пакунок, тоді не треба виконувати go mod vendor, а лише вказати всі ті самі залежності з go.mod файлу. Таким чином оновлення якоїсь бібліотеки впливає на всі пакунки в Ґікс пакетах, що в деяких випадках дуже зручно. Наприклад, знайшли нову вразливість у бібліотеці, тепер оновивши лише цю бібліотеку усі інші проєкти перебудуються з цією патченою версією.

Висновок

Ґікс має набагато кращий CLI досвід, але високий бар’єр при внесенні змін до офіційних пакетів. Є проблеми з автоформатуванням коду та проблеми Guile мови, такі як розбивка стрічок на декілька ліній.

Zig підміна VTable