Хайповый дистрибутив
С возрастом всё сложнее быть программистом «в теме». Раньше я любил двух- трёхдневные марафоны, когда надо было что-то понять и написать. Сон урывками, кофе литрами, но при этом ощущение полёта, какого-то такого программистского счастья.
Статьи и книги запоем, пет-проекты, и всегда есть что-то интересное, что я ещё не пробовал, но очень хочу попробовать.
Постепенно всё уходит в прошлое, и я уже не на острие прогресса. Сейчас во всём разбираются те, кто моложе и те, кто соображает быстрее, а мне осталось только догонять. Но я пытаюсь.
Пару лет назад я спросил в одной из тусовок, где собираются люди с горящими глазами: какой дистрибутив Linux сейчас считается самым… скажем, хайповым. И мне ответили — NixOS.
Я про такой не слышал. И, конечно, сразу его поставил, работал даже, но долго не понимал главной фишки. Впрочем, нельзя сказать, что в NixOS есть одна главная фишка. Я смотрю на систему, как программист, но у неё есть свои грани для и системных администраторов, и DevOps-инженеров.
Вводные
Если вы никогда не слышали про NixOS, то вот вам несколько вводных. Nix — это пакетный менеджер. Его можно установить в любой Linux или на macOS. NixOS — это дистрибутив Linux, построенный на базе Nix. Проблема, которую пытались решить с его помощью, известна всем программистам и их заказчикам.
Она называется «на моей машине всё работает». У нас, у программистов, есть даже анекдот на эту тему.
Если бы программисты были врачами, им бы пациенты говорили, например, «у меня болит нога», а они бы отвечали «ну не знаю, у меня такая же нога, и не болит».
Проблему осознали и решают с 90-х годов. К решениям в той или иной степени относятся непрерывная интеграция (Continuous Integration), непрерывное развёртывание (Continuous Deployment), DevOps и контейнеризация. Nix тоже в этом ряду.
Иногда можно услышать (ошибочное) мнение, что эти решения — альтернативы, хотя, в действительности, они друг друга дополняют. Вы можете организовать DevOps с помощью Nix и Docker, и вот вам статья, где автор Джилл Торнхилл доходчиво объяснила, что Nix и Docker не только можно, но и нужно использовать вместе.
Nix позволяет описать конфигурацию, нужную для работы программы и аккуратно воссоздать её на другой машине. Похоже на Docker, только вам не нужны контейнеры. Nix позволяет настраивать конфигурацию в широких пределах, в частности, у вас может быть несколько конфигураций. В одном проекте вы можете писать на PHP 8.3, а в соседнем — на PHP 8.1. То же самое касается версий .NET, Java, Python, mysql и postgres. В любой момент вы можете включить конфигурацию, а потом точно также её выключить.
Но и это ещё не всё. Nix не перезаписывает изменения конфигурации, а всегда создаёт новые, позволяя вам откатиться в любой момент. Приблизительно также git хранит изменения в проекте.
Подобные устойчивые (persistence) структуры данных часто применяют в функциональном программировании. И это неспроста. Дело в том, что язык описания конфигурации Nix — чистый функциональный язык.
Спринты
Разработка Nix идёт полным ходом. За одиннадцать лет, с тех пор, как NixOS вышла на промышленные просторы, она приобрела полноценный реестр пакетов — nixpkgs. Сейчас их порядка 80000 и каждый из пакетов надо было подготовить. Nix или NixOS используют сотни компаний по всему миру, включая таких «монстров», как Atlassian и Yandex.
Люди постоянно дорабатывают софт и иногда им хочется поработать вместе. Поэтому вот уже несколько лет разработчики NixOS прилетают на неделю в какую-нибудь точку земного шара и устраивают рабочую сессию. Эти сессии носят название спринты. Чем занимаются программисты во время спринта? Пишут новые пакеты, исправляют ошибки в старых, работают над компилятором, над утилитами. Работы хватает.
Последний спринт прошёл в феврале в Таиланде. Теперь самое важное, ради чего, собственно, пост.
Следующий спринт ребята хотят провести в России. А мы с @tazjin его организуем.
Место, время и деньги
От Москвы мы отказались сразу, не смотря на то, что живём здесь. Москва это дорого. Кроме того, Москва — это не вся Россия, а гостям хочется показать что-то чуть менее мировое, и чуть более местное.
После некоторых раздумий мы остановились на Казани. Мультикультурный российский город, где у нас есть «знакомства и связи». Мы рассчитываем, что они упростят нам решение разных вопросов без частых поездок в Казань.
Этот спринт мы, по традиции, назвали, опираясь на географию — Volga Sprint. Даты проведения — в 22 по 29 августа.
Если у вас есть желание поработать над Nix и NixOS в компании увлечённых программистов со всего мира — следуйте по ссылке выше и регистрируйтесь! Если вдруг у вас по какой-то причине не получится, всегда можно отказаться.
С деньгами история такая. Участие в спринте естественно бесплатное, но добираться до Казани и жить там неделю нужно будет самим. Кроме того, придётся на неделю отпроситься с работы.
Аренду коворкинга, обеды и полдники, а также кофе и фрукты на местах традиционно помогаю оплатить спонсоры. Которых мы, кстати, тоже ищем!
Формат
Спринт — мероприятие тёплое и ламповое. Съезжаются обычно 20–25 разработчиков, снимают жильё поблизости от коворкинга, работают целый день с перерывами на обед, а вечером развлекаются. Ну, или продолжают работать — вы же знаете этих программистов!
Мы планируем культурную программу, гастрономическую программу, покатаемся по окрестностям, посмотрим на Волгу. План такой.
Организаторы
Мы только начали подготовку и не столкнулись, наверное, ещё и с половиной организационных сложностей. Но мы надеемся, что нам удастся их преодолеть.
Винсент Амбо aka tajzin, программист, опытный Nix-разработчик, основатель проекта Tvix
Марк Шевченко, программист, пользователь Nix, организатор встреч Московского клуба программистов
Комментарии (4)
easimonenko
05.04.2024 12:31Пробую писать код в среде Nix на C++. Как указать пути к заголовочным файлам нестандартных библиотек, установленных через Nix? Я так понимаю, что нужно написать какую-то Nix-конфигурацию в корне проекта?
inetstar
Подскажите, пожалуйста, если мне нужно скомпилировать что-то для чего нет пакетов. Но есть зависимости. Я - разработчик.
То насколько это геморно на Nix?
Сейчас использую Calculate Linux, ранее Gentoo.
Второй вопрос: у меня есть многопользовательская машина. Насколько сложно будет для каждой группы пользователей создать своё окружение со своей версией php, mysql и т.п.
Меня интересует можно ли это сделать без дубляции файлов для каждого пользователя, при условии что эти пользователи используют одинаковые версии.
markshevchenko Автор
По первому вопросу — пакеты можно делать самостоятельно, так поступает большинство разработчиков. Для этого надо освоить язык программирования Nix и разобраться в деталях.
Есть неофициальная документация по этому вопросу, Nix Pills. Сейчас я её перевожу и публикую здесь на Habr. Можете прочитать быстро в оригинале, если владеете английским, или подождите, где-то в течение пары месяцев я закончу.
По второму вопросу — но машине одно хранилище пакетов Nix, в каталоге /nix/store, так что пакеты дублироваться не будут. Правда, есть тонкость. На обычных дистрибутивах, чтобы использовать Nix, надо зайти под пользователем nix. На NixOS это может быть действительно многопользовательская система.
С другой стороны, вам может быть, и не надо именно так детально управлять конфигурацией пользователей. В каждый проект можно сложить по файлу shell.nix. Перед работой запускать nix-shell, а по окончании выходить из него. В shell.nix описать, какие именно пакеты нужны для работы. Это окружение смогут разделить все участники проекта.
markshevchenko Автор
Да, вопросы можно задать в группе Tg, посвящённой Nix и NixOS: https://t.me/ru_nixos
Я не на все могу ответить, потому что я программист и у меня конфиги очень простые, буквально на несколько строк.