Обо мне Блог Контакты

Мой путь в освоении Linux

Переход на Linux

По роду своей деятельности в последние несколько лет мне довольно часто приходилось сталкиваться с изучением и настройкой Linux-серверов. Сначала это были пара небольших VPS, затем web-серверы с соответствующим ПО, позже — администрирование целых пачек VPS, что закономерно привело к изучению автоматизации процессов на Linux.

Со временем меня это всё больше увлекало, и чуть больше года назад я окончательно отказался от Windows, перейдя на Linux на своём основном и единственном рабочем ноутбуке. Как оказалось, Linux закрывает практически все мои потребности. Кроме того, так как я увлекаюсь программированием, эта система оказалась для меня заметно ближе, удобнее и субъективно безопаснее.

Отдельным плюсом для меня стала экосистема open source приложений, которая в Linux особенно развита. Используя открытое программное обеспечение, ты в большей степени понимаешь, что именно делает установленное приложение. Исходный код открыт, и при желании любой может проверить, как работает программа и не выполняет ли она лишних действий — например, не отправляет ли какие-то метрики или данные без ведома пользователя. Разумеется, далеко не каждый пользователь будет самостоятельно читать исходный код, но сам факт открытости и возможности аудита создаёт больший уровень доверия к таким приложениям по сравнению с закрытым проприетарным софтом.

Linux в целом даёт ощущение полного контроля: здесь я могу автоматизировать всё, что считаю нужным, установить любое ПО и настроить систему под себя — от внешнего вида до поведения отдельных компонентов. В итоге система работает ровно так, как я её настроил.

При этом я прекрасно понимаю, что Linux подходит не всем. Windows по-прежнему доминирует на Desktop — на большинстве домашних ПК установлена именно она, и люди к ней привыкли. Значительная часть массового ПО исторически ориентирована на Windows. Да, существуют дружелюбные и визуально похожие на Windows дистрибутивы Linux, но это всё равно не Windows, а значит пользователю так или иначе придётся разбираться.

Для себя же я сделал вывод, что к Windows в качестве основной системы вряд ли вернусь. Использовать её как вторую ОС или запускать в виртуальной машине — возможно. Но как основную рабочую систему, загружаемую по умолчанию, — точно нет.


Дистрохоппинг

Мой путь дистрохоппера оказался довольно коротким — в "арсенале" всего три дистрибутива. В основном я ориентировался на опыт других: читал статьи, смотрел YouTube и выбирал дистрибутивы не столько методом перебора, сколько на основе чужих отзывов.

Как и многие новички, начал я с самого распространённого дистрибутива — Ubuntu. Во-первых, потому что мой серверный опыт был связан именно с ним. Во-вторых, Ubuntu действительно один из самых "на слуху" дистрибутивов. Я активно его переустанавливал, настраивал, экспериментировал, но в итоге просидел на нём недолго — около месяца.

Параллельно в процессе изучения Linux мне постоянно попадалась мысль, что "настоящий" Linux-пользователь должен попробовать Arch Linux. Воспринимал я это скорее как мем, но любопытство взяло верх. Получив базовое понимание Linux на Desktop с Ubuntu, я решил перейти на Arch.

Arch Linux стал моей основной системой примерно на полгода. За это время я перепробовал разные окружения рабочего стола и оконные менеджеры, неоднократно переустанавливал систему и существенно прокачал понимание того, как устроен Linux. Огромную роль в этом сыграла великолепная Arch Wiki, которая по праву считается одной из лучших документаций в мире Linux.

Tip

Arch Linux хорошо подходит тем, кто уже имеет базовый опыт и хочет глубже разобраться в устройстве системы.

На Arch я оставался до тех пор, пока не открыл для себя следующий дистрибутив, а именно NixOS.


NixOS

На данный момент NixOS является моей основной системой — именно на ней я сейчас пишу этот текст. У меня есть не самая полезная черта: я довольно сильно склонен к перфекционизму. После любых серьёзных изменений в системе — установки и удаления пакетов, экспериментов с настройками — меня не покидает ощущение, что где-то могли остаться лишние конфиги, скрытые файлы или ненужные сервисы, пусть даже они ничего не делают и не потребляют ресурсы.

В обычных дистрибутивах это часто приводило к желанию всё переустановить "с чистого листа". В разумных пределах, конечно, но всё же. Именно от этого ощущения NixOS меня и избавил.


Декларативность

Если объяснять максимально просто, NixOS — это система, которая описывается набором конфигурационных файлов. Грубо говоря, я описываю в них, какой должна быть моя система:

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

После этого я применяю конфигурацию — и система пересобирается в соответствии с этим описанием. Если какой-то компонент больше не нужен или эксперимент с программой оказался неудачным, я просто удаляю соответствующую часть конфигурации и применяю её заново. В результате система возвращается в состояние, как будто этих изменений никогда и не было.

Tip

Речь идёт прежде всего о системных пакетах и сервисах. Пользовательские файлы и конфигурации остаются обычными, как и в любом другом дистрибутиве. При этом в системе не остаётся неуправляемых изменений: старые сборки можно очистить вручную или настроить автоматическую сборку мусора.

В этом и заключается декларативный подход. В императивных дистрибутивах вы описываете как сделать желаемое — например:

sudo pacman -S vim

Буквально эта строка означает: "Установи мне приложение Vim, используя пакетный менеджер pacman".

В декларативном же подходе вы описываете что должно быть в системе: "я хочу, чтобы в системе был Vim", а все детали установки берёт на себя система.

Благодаря этому NixOS сложно сломать безвозвратно. Можно спокойно экспериментировать с настройками, а если что-то пошло не так — просто откатиться на предыдущую конфигурацию и получить рабочую систему в том же состоянии, что и раньше. Банально нужно просто удалить из конфигурации не нужные вам строки и пересобрать систему.

Дополнительный плюс — воспроизводимость. Однажды написанная конфигурация может храниться, например, в репозитории на GitHub. При смене компьютера или переустановке системы её можно развернуть практически в том же виде за считанные шаги. Со временем такая конфигурация становится действительно "своей": от сочетаний клавиш до внешнего вида и набора сервисов.

Этот подход особенно ценят системные администраторы. Нужен сервер под конкретную задачу — есть готовый NixOS-конфиг. Применил его — и получил нужное окружение. Нужно десять одинаковых серверов — не проблема. Да, подобные решения существуют и для других дистрибутивов, но в этом аспекте NixOS действительно выделяется.

Именно этим он меня и подкупил.


Недостатки

Главный недостаток NixOS для меня — это его радикально отличающаяся модель управления системой. Всё, что в привычных дистрибутивах настраивается напрямую через конфиги и команды в терминале, в NixOS описывается декларативно на специализированном функциональном языке программирования Nix.

Например, fstab в системе существует, но напрямую не редактируется — точки монтирования описываются в конфигурации. То же касается сервисов, автозагрузки и множества других аспектов системы. Это требует изучения языка Nix и его экосистемы. Сам язык не слишком сложен, но он довольно нишевый и используется в основном внутри экосистемы Nix.

На самом деле это можно отнести как к недостаткам, так и к достоинствам. С одной стороны, ты не изучаешь по сути Linux как таковой, потому что все привычное от Linux от тебя скрыли за ширмой языка Nix. Таким образом если что-то не получается сделать - ты не ищешь решение в Linux сообществах, а роешься конкретно в мануале языка Nix и GitHub репозитории с nixpkgs. С другой стороны описываешь все в одном месте, и получаешь готовую систему. Каждый может обе эти мысли для себя определить - что тут достоинство, а что недостаток.


Вывод

Для меня NixOS — отличный дистрибутив для рабочей машины разработчика и задач, где важны воспроизводимость, контроль и чистота системы.