Вдохновленный релизом Ubuntu 20.04 Focal Fossa обзорный материал для тех, кто не слишком пристально следит за ситуацией в индустрии открытого ПО, и не сталкивается с платформами семейства GNU/Linux достаточно регулярно в повседневной жизни и работе (по крайней мере, не напрямую).
Тем не менее, я пишу не очередной материал категории таблодиов в стиле «чего ожидать от новой Ubuntu новичку впервые увидевшему компьютер», нет. Здесь будет обсуждаться тема современных трендов дизайна ОС и принципов доставки ПО в целом, в чём семейство свободных ОС, в силу своей гибкости, возможности для компаний и сообщества развивать множество принципиально разных экспериментальных проектов независимо друг от друга, и благодаря огромной поддержке со стороны зависящих от такого софта корпораций, давно и безоговорочно безусловный локомотив.
Поговорим о том, что изменилось с тех пор как в лаборатории Bell Labs впервые обсудили идею UNIX, с какими из современных идей не согласился бы создатель Debian Ян Мёрдок, и чем отличается концепция атомарности NixOS от философии создателей OSTree. Не переключайтесь, будет интересно.
Устанавливать или предустанавливать
Без шуток дискуссионная в среде наглухо оторванных от реальности теоретиков, хотя всем, для кого перетаскивание байтиков не культ и смысл жизни, а инструмент для достижения реальных целей, должно быть очевидно, что проблема технической грамотности населения совершенно ортогональна проблеме нежелания людей делать загрузочные флешки и что-то там устанавливать на свой единственный рабочий компьютер.
Даже такой иссеченный морщинами, матёрый батя как я, не выходящий из дома без тейлза на связке ключей, и знающий наизусть нужные для настройки LVM с нуля команды parted, при прочих равных, не раздумывая ни секунды предпочел бы возможность купить в обычном магазине электроники поддерживаемый производителем лэптоп с любимым дистрибутивом на борту любому, даже самому бесшовному и беспроблемному, но мануальному процессу установки и настройки ОС.
Мне есть чем заняться кроме этого, спасибо.
И в этом смысле со времен рассылки загрузочных дисков с Ubuntu по почте уже произошли значительные положительные изменения. Так, Fedora 32 в неизмененном виде будет доступна на Hi-End моделях ThinkPad к моменту их релиза, Dell давно предлагает Ubuntu в качестве ОС по умолчанию для ряда своих продуктов, также существуют компании, целиком специализирующиеся на создании целостных решений на основе свободных продуктов, такие как Purism и System76.
Да-да, есть ещё миллион честно говоря стрёмных решений на основе говна и палок от неизвестно кого, таких как pinebook и иже с ними. Я знаю, но нет, доверия такие поделки не внушают даже на первый взгяд, что уж говорить о втором и последующих. Так что пока вот как-то так.
GNOME? GNOME!
Стандартная и единственная работающая реализация графического пользовательского интерфейса для GNU/Linux это Gnome 3. Точка.
Вы могли слышать о многочисленных возможностях кастомизации, установки различных окружений, тем оформления, альтернативных концепциях управления окнами. Да, это существует. Да, это как-то работает, и даже кому-то нравится. Но нет, ничего из этого не будет работать лучше стандартного GNOME в реальных юзкейсах.
GNOME разрабатывается изначально как единое целое, с учетом пользовательских потребностей. Он автоматически найдет внешний монитор при подключении, определит его цветовой профиль, разрешение, DPI, и выставит нужный коэффициент масштабирования ещё до того как предложить пользователю стандартный диалог, предлагающий либо расширить рабочую область на этот монитор, либо отобразить там копию содержимого текущего экрана. Всё произойдет само, без передачи параметров в xrandr, без «Ген, подай линейку», как и должно быть в нормальном компьютере.
GNOME это интеграция всего нужного со всем, он напомнит вам о событиях в календаре через центр уведомлений, правильно и автоматически подмонтирует флешки, покажет погоду, подключенные устройства, сообщит о статусе VPN, проигрываемой музыке, и о том, запрашивает ли какое-то приложение специфические разрешения, поможет искать нужные настройки и файлы прямо из меню Activities, заботливо сообщит о проблемах вроде зависшего приложения, и всё это не надо настраивать, или узнавать на форумах как добиться от оболочки нужного поведения. Все просто работает.
Сообщество GNOME действительно эффективно работает над единой целью, а также это один из немногих, и однозначно самый крутой и обширный не финансируемый корпоративно проект, для сообщества которого слова UX и дизайн — не ругательные.
Вы найдете GNOME установленным по умолчанию в примерно всех популярных дистрибутивах в принципе предлагающих графический интерфейс пользователя сегодня. Для того, чтобы добиться другого поведения, нужно приложить дополнительные усилия, и я не рекомендую этого делать.
Что касается тайловых оконных менеджеров — что ж, да, логически и иногда практически это удобный и эффективный способ управлять окнами, иногда. На деле и в условиях реального мира, ваши приложения скорее всего не всегда будут вести себя так, как вам хочется, в силу различных причин, и ваш оконный менеджер окажется удобным лишь для запуска большого количества независимых экземпляров терминала.
Это, конечно, круто и само по себе нужно, если вы много работаете в терминале. Но в GNOME для этого уже есть Tilix, делающий для экземпляров VTI ровно то же самое. Очень хороший проект, значительно опережающий iterm2 примерно во всём, даже воркспейсы полноценные с превьюхами внутри себя поддерживает.
В остальных случаях, увы, тайлинговый оконный менеджер без интеграции с окружением — это боль, только от проектов вроде Regolith немного веет надеждой. А фанатов портянок на баше приглашаю прочитать Doing Things That Scale от одного из энтузиастов Gnome. Отличный материал, идеально объясняющий, что я сейчас имею в виду.
Кстати о масштабировании
Те из вас кто уже имел в своей жизни дело с GNU/Linux, да и другими программными продуктами, в принципе, в той или иной степени, знакомы с главным проклятием системы-солянки — проблемой переносимости.
Иными словами, то, что запустилось у Алисы на Ubuntu 16.04 не обязательно запустится у Боба на Fedora 32 (возможно, по причине отсутствия зависимостей, возможно по причине взятия путей к файлам не из XDG, возможно по черт знает каким ещё причинам), а значит все инструкции по установке чего угодно всегда являются не четким путем к успеху, а лишь приблизительными рекомендациями, а значит вполне реально в любой момент вместо работающей игры на вечер обеспечить себе вечер чтения мануалов в попытках только недавно работающую игру запустить после обновления.
Гораздо хуже, когда такая проблема проявляется в промышленном окружении, и, например, веб-интерфейс терминала самообслуживания где-то в супермаркете вдруг перестаёт работать, или, скажем, на google.com не может задеплоиться ещё вчера работавшее в интранете обновление фронтенда. Это означает потерю денег для бизнеса, неудобство для всех причастных, и, разумеется, бизнес вкладывает средства в её решение.
Идея иммутабельности в абстрактном смысле звучит очень просто, поймёт даже младенец.
Насколько легко этого достичь? Разумеется, чем сложнее система в целом, тем сложнее, а компьютер в комбинации с современными ОС — безумно сложная система, целиком работу которой от первого до последнего винтика не понимает никто в мире. Сам Линус Торвальдс рейджквитнул объективно не сложный процесс установки Debian, что как бы должно натолкнуть на мысль, что даже самые великие умы не то чтобы великие и гениальные сразу во всём, а скорее просто очень узко специализированные и преуспевшие в своей специализации.
Какиех же успехов в реализации принципа иммутабельности в контексте доставки ПО нам удалось достичь состоянием на сегодняшний момент? Давайте посмотрим.
Ехал контейнер через контейнер
Первыми, кто предложил решать проблему переносимости через сохранение всего дерева файлов ОС вместе с поставляемым приложением начиная от корня, а именно этим является контейнер, были разработчики… chroot, некогда очень давно. Однако, это был лишь инструмент потенциально позволяющий создать решение, а не готовое решение.
Таковым в 2013 году стал Docker. Его все знают, а ещё он умеет много других вспомогательных штук, но это не важно. Важно то, что Docker дал возможность Алисе лишь написать Dockerfile, после передать его Бобу, и быть уверенной, что после сборки простой и универсальной для всех случаев командой, Боб на своём компьютере получит то же самое в том же виде, что сейчас работает у Алисы.
Лукавлю немного, в реальности это не совсем верно. Докерфайлы ссылаются на внешние ресурсы и файлы, а значит их можно написать (и часто пишут) так, что результат вообще будет получаться каждый раз разный даже у самой Алисы. Но. В идеальном мире бабочек, где внешние ресурсы не меняются со временем и в процессе передачи, результат не изменится тоже.
Это называется контейнеризация, частный случай инкапсуляции.
Один из подходов к созданию иммутабельных систем — поставка атомарной (неизменной в рамках релиза) базовой системы с самым необходимым (ядро, сетевой стек, драйвера, иногда графическая оболочка с минимальным набором программ) и упаковка каждой отдельной прикладной программы в контейнеры. Так работает, например, проект Silverblue (coreos + flatpak), целью которого является полная бесшовная замена собой при очередном обновлении актуальной Fedora, однако ряд проблем всё ещё не решён.
Аналогичный подход уже разработан и вовсю применяется в проекте Endless, но это немного для другой ЦА.
Что это даст пользователю? Элементарно уверенность, что обновление пакетов точно не сломает систему, возможность быстро и легко откатиться на предыдущий срез состояния если что-то пошло не так, возможность для разработчика ОС нормально тестировать обновление с релиза на релиз (сейчас процесс тестирования соткан из оптимистичных предположений о конфигурации конечной машины и не гарантирует ничего).
Частично результатами работы в этом направлении уже сейчас может наслаждаться каждый (например, флэтпаки ставить можно почти на любой современный дистрибутив, и они будут работать везде одинаково). Но есть и другой.
Декларативная… система?
Представьте что у вас вместо вороха конфигов в /etc от разных приложений и с разным синтаксисом всего один файл. Которым полностью определяется состояние всей системы, все системные настройки, какие приложения установлены и куда, настройки этих приложений, параметры разметки диска, список пользователей и уже их настройки… Всё что душе угодно, в одном формате, и скрипт сборки всегда даёт идентичный образ системы для двух идентичных файлов декларативного описания.
Именно так работает NixOS и его полностью свободный младший брат GNU Guix. Переиспользование кода обеспечивается за счёт символических ссылок, а иммутабельность за счёт сохранения итоговых хэшей всех компонентов системы в store. На данный момент это самая идеалистическая, я бы даже сказал, утопическая концепция, завязанная на предположении, что все люди будут няшками, разовьют навыки абстрактного мышления до уровня минимум Стивена Хокинга и не будут говнокодить.
Насколько это все реалистично звучит сами догадаетесь.
Из минусов подхода разве что общая сложность получающихся конструкций, вылившаяся в ну очень высокий порог вхождения в процесс, даже по сравнению с классическими UNIX системами. У меня это заняло время, значит у большинства даже моих коллег, не говоря уж о простых не технических людях, займет вечность. А, и сборщик мусора никсовый сосет жопу. Я всё сказал.
Так чего же ожидать от покупки лэптопа с GNU/Linux сегодня
Сегодня? Да никаких ужасов, в целом. Большинство связанного с компьютером досуга среднего человека проходит в браузере, а он, скорее всего, будет предустановлен. Если ваша система Ubuntu, то известные приложения которые вы скорее всего захотите поставить, поставятся без проблем из магазина через snap, если что-то другое, придется пройти небольшую процедуру запуска flatpak для вашего конкретного случая, после чего штуки вроде steam появятся в стандартном приложении магазина.
Популярные игры, даже только для windows, скорее всего будут работать просто сразу, без дополнительных движений, исключения — агрессивный DRM или античит в онлайне.
Платные проприетарные приложения вроде DaVinchi Resolve скорее всего не предложат ни snap, ни flatpak, а продадут вам глобально устанавливаемый классический .deb или .rpm со странными непредсказуемыми post-install хуками, но это уже на совести компании разработчика.
Проектор подключить и рассказать свою презентацию про митохондрии одноклассникам будет можно, проблем не возникнет. Принтер либо заработает сразу и без проблем, либо никогда. То же касается любой периферии.
Также есть небольшая вероятность, что любопытство вас поглотит, вы начнете пробовать всё подряд, несколько раз сломаете систему, отрастите большую бороду, и через некоторое время начнете получать большую зарплату в стартапе единороге за умение заходить в докер контейнер. Но это уже совсем другая история.
Ня!