Unix-подобная операционная система

UNIX-подобная операционная система (иногда сокр. *nix) — система, которая образовалась под влиянием UNIX. Термин включает свободные/открытые операционные системы, образованные от UNIX компании Bell Labs или эмулирующие его возможности, коммерческие и запатентованные разработки, а также версии, основанные на исходном коде UNIX. Нет стандарта, определяющего термин, и допустимы различные точки зрения о том, считать ли определённый продукт UNIX-подобным или нет.
Содержание
Термин «UNIX-подобный» и торговая марка UNIX
The Open Group обладает торговой маркой UNIX и ведёт дела Single UNIX Specification, где слово UNIX используется как знак соответствия. Они не приветствуют употребление термина «UNIX-подобный» и считают, что это злоупотребление их товарным знаком. Руководство группы требует использования заглавных букв в названии UNIX или в другом случае отдельно от остального текста, одобряют использование слова UNIX как прилагательного в сочетании с такими словами, как «система», и не одобряют написание через дефис (относится к английскому тексту). Наиболее близкий термин, который они сочли бы корректным, был бы UNIX system-like. [1]
С 2007 года ведётся спор между Wayne R. Gray и The Open Group, в котором обсуждается использование слова UNIX как торгового знака. [2] По словам Trademark Trial and Appeal, Board Grау со своей компанией требует от The Open Group предоставить ему документацию для их требований к торговой марке.
Также, в 2007 году The Open Group настояла на том, чтобы немецкий Университет Касселя не использовал «UNIK» в качестве сокращения. [3]
Категории
Деннис Ритчи, один из создателей UNIX, выразил своё мнение, что UNIX-подобные системы, такие как Linux, являются де-факто UNIX-системами. Эрик Рэймонд предложил разделить UNIX-подобные системы на 3 типа:
Генетический UNIX Системы, исторически связанные с кодовой базой AT&T. Большинство, но не все коммерческие дистрибутивы UNIX-систем подпадают под эту категорию. Так же, как и BSD-системы, которые являются результатами работы университета Беркли в поздних 1970-х и ранних 1980-х. В некоторых из этих систем отсутствует код AT&T, но до сих пор прослеживается происхождение от разработки AT&T. UNIX по товарному знаку или бренду Эти системы, в основном коммерческого характера, были определены The Open Group как соответствующие Единой спецификации UNIX, и им разрешено носить имя UNIX. Большинство этих систем — коммерческие производные кодовой базы System V в той или иной форме (например, Amiga UNIX), хотя некоторые (например, z/OS компании IBM) заслужили торговую марку через слой совместимости с POSIX, не являясь по сути UNIX. Многие старые UNIX-системы не подходят под это определение. UNIX по функциональности В целом, любая система, поведение которой примерно соответствует спецификации UNIX. К таким системам можно отнести Linux и Minix, которые ведут подобно UNIX-системе, но не имеют генетических связей с кодовой базой AT&T. Большинство свободных/открытых реализаций UNIX, являясь генетическим UNIX или нет, подпадают под ограниченное определение этой категории в связи с дороговизной сертификации The Open Group, которая стоит несколько тысяч долларов.
Cygwin, не являясь операционнной системой, предоставляет UNIX-подобную среду в Microsoft Windows; также существуют сервисы Microsoft Windows для UNIX.
Развитие UNIX-подобных систем
UNIX-системы начали появляться с поздних 1970-х и ранних 1980-х. Много проприетарных версий, таких как Idris (1978), Coherent (1983), и UniFlex (1985), ставили целью обеспечить нужды бизнеса функциональностью, доступной обученным пользователям UNIX.
Когда AT&T разрешила коммерческое лицензирование UNIX в 1980-х, множество разработаных проприетарных систем основывались на этом, включая AIX, HP-UX, IRIX, Solaris, Tru64, Ultrix и Xenix. Это во многом вытесняло проприетарных клонов. Растущая несовместимость между системами привела к созданию стандартов взаимодействия, в том числе POSIX и Единой спецификации UNIX.
Между тем, в 1983 году был запущен проект GNU, благодаря которому удалось сделать операционную систему, которую все пользователи компьютера могли свободно использовать, изучать, исправлять, пересобирать. Различные UNIX-подобия разрабатывались аналогично GNU, часто с теми же основными компонентами. Они прежде всего служили дешёвым замещением UNIX и включали 4.4BSD, Linux и Minix. Некоторые из них послужили основой для коммерческих UNIX-систем, таких как BSD/OS и Mac OS X. Примечательно, что Mac OS X 10.5 (Leopard) сертифицирован Единой спецификацией UNIX. [4]
Nix: Что это и с чем это употреблять?

Мы в Typeable хотели опубликовать небольшой цикл статей о том, как Nix нам помогает (и немного мешает) в разработке. Но, проведя немножко времени в поисках похожего материала здесь, с удивлением обнаружили, что на Хабре нет толкового введения в Nix, на которое можно было бы сослаться.
Статья от @snizovtsev подойдёт как хорошее введение при разработке на C++, но это не совсем то введение, которое мне хотелось бы видеть. Поэтому я решил написать его сам 🙂
Файлы к этой статье можно найти здесь.
Где это всё взять?
Помимо NixOS, где ничего делать не нужно, Nix можно установить на любой (или почти любой) дистрибутив Linux. Для этого достаточно запустить следующую команду:
Дальше установочный скрипт сам всё сделает. После недавних изменений в MacOS, установка в ней немного осложнилась, раньше было достаточно команды выше. Про установку в последних версиях MacOS можно прочесть здесь.
Язык Nix
Когда речь идёт о Nix, часто имеют в виду две разные сущности: Nix как язык и nixpkgs как репозиторий пакетов, в том числе составляющий основу NixOS. Начнём с первого.
Nix — функциональный ленивый язык с динамической типизацией. Синтаксис во многом похож на языки семейства ML (SML, OCaml, Haskell), поэтому у тех, кто с ними знаком, особых проблем возникнуть не должно.
Начать знакомство с языком можно просто запустив интерпретатор.
Отдельного синтаксиса для объявления функций в Nix нет. Функции задаются через присваивание, так же как и другие значения.
Как и в языках, повлиявших на Nix, все функции каррированы.
Помимо примитивных типов, таких как числа и строки, Nix поддерживает списки и словари (attribute sets в терминологии Nix).
Значения в локальной области видимости можно задать через выражение let. in . Для примера, простая функция, реализующая факториал, как это принято делать в других статьях по функциональному программированию.
Директива inherit вносит или «наследует» термин из текущей области видимости и даёт ему такое же имя. Пример выше эквивалентен записи let fac = . in < fac = fac; >.
При загрузке файлов или модулей в REPL, Nix ожидает, что результатом вычисления модуля будет множество, элементы которого будут импортированы в текущую область видимости.
Для загрузки кода из других файлов в Nix есть функция import , принимающая путь к файлу с кодом и возвращающая результат выполнения этого кода.
Хотя присваивание модуля в отдельную переменную — довольно частая практика, в данном случае это выглядит несколько нелепо, правда? В Nix есть директива with , добавляющая в текущую область видимости все имена из множества, переданного в качестве параметра.
fac.nix с использованием with :
Сборка программ
Сборка программ и отдельных компонентов — это основная функция языка Nix.
В случае работы с пакетами, основным инструментом, про который нужно знать, является Derivation . Сам по себе Derivation — это специальный файл, содержащий рецепт для сборки в машинно-читаемом виде. Для компиляции программы на C, выводящей «Hello World!», derivation выглядит примерно следующим образом:
Как видно, в этом выражении содержится путь к результату сборки, который получится в итоге, а также пути к исходным файлам, скрипту сборки, и метаданные: имя проекта и платформа. Стоит так же заметить, что пути к исходникам начинаются с /nix/store . При сборке, Nix копирует всё нужное в эту директорию, после чего сборка происходит в изолированном окружении (sandbox). Таким образом достигается воспроизводимость сборки всех пакетов.
Разумеется, никто в здравом уме руками писать такое не станет! Для простых случаев, в Nix есть встроенная функция derivation , принимающая описание сборки.
Давайте попробуем разобрать этот пример. Весь файл представляет собой определение функции, которая берёт один параметр — словарь, содержащий поле pkgs . Если оно не было передано при вызове этой функции, используется значение по умолчанию: import <nixpkgs> <> .
derivation — функция, так же принимающая словарь с параметрами сборки: name — имя пакета, builder — сборочный скрипт, src — исходный код, system — система или список систем, под который возможна сборка данного пакета.
writeShellScript — функция из nixpkgs , принимающая имя для скрипта и код и возвращающая путь к исполняемому файлу. Для многострочного текста в Nix есть альтернативный синтаксис с двумя парами одинарных кавычек.
С помощью команды nix build , этот рецепт для сборки можно запустить и получить работающий бинарник.
При запуске nix build , в текущей директории создаётся символическая ссылка result , указывающая на созданный в /nix/store пакет.
Сборка программ, продвинутая версия
derivation — достаточно низкоуровневая функция, на базе которой в Nix построены куда более мощные примитивы. Для примера, можно рассмотреть сборку широко известной утилиты cowsay .
Оригинал скрипта находится здесь.
stdenv — специальный derivation , содержащий правила сборки для текущей системы: нужный компилятор, флаги и прочие параметры. Основное содержимое — гигантских размеров скрипт на баше под названием setup , который и выступает в роле скрипта builder из нашего простого примера выше.
mkDerivation — функция, создающая derivation с этим скриптом и заодно заполняющая другие поля.
Те читатели, кто раньше писал скрипты для сборки пакетов в Arch Linux или Gentoo, могут увидеть здесь крайне знакомую структуру. Как и в других дистрибутивах, сборка разбита на фазы, присутствует перечисление зависимостей ( buildInputs ) и так далее.
Заключение
В этой статье я попытался описать самые базовые части работы с Nix как языком для сборки кода. В следующих статьях я планирую показать, как мы применяем Nix в Typeable, а также как это делать лучше не стоит. Stay tuned!
Также, гораздо более подробное введение в Nix опубликовано на сайте самого проекта под названием Nix pills.
Обзор NixOS 22.05

NixOS — интересный дистрибутив. Операционная система в основном служит для демонстрации продвинутого пакетного менеджера Nix, который предлагает атомарные обновления, откат к предыдущим поколениям пакетов и воспроизводимые сборки. Это делает дистрибутив с Nix в качестве пакетного менеджера достаточно гибким, а также надежным при возникновении проблем с обновлением пакетов.
Менеджер пакетов Nix составляет сердце дистрибутива NixOS и может использоваться в других дистрибутивах. Переносимость Nix дает любому, кто его установит, доступ к более чем 80 000 пакетов, которые увеличились с 60 000 за последние два года.
NixOS доступна в трех редакциях. Есть две графические редакции, одна из которых включает рабочий стол GNOME и имеет размер 2,0 Гб, а другая — KDE Plasma и имеет размер 1,6 Гб. Третья редакция — это версия только для командной строки под названием Minimal, размер которой составляет 824 МБ. Одним из важных изменений в двух графических редакциях является внедрение системной программы установки Calamares.
В прошлом, когда я использовал предыдущие версии NixOS, пользователь должен был вручную разбить жесткий диск на разделы. Затем нам предлагалось отредактировать конфигурационный файл в текстовом редакторе, внеся изменения в пакеты программного обеспечения, настройки загрузчика и включив учетные записи пользователей. Хотя этот процесс был достаточно хорошо документирован, он не был ориентирован на начинающих или даже более опытных пользователей. Включение Calamares означает, что пользователи могут разбивать жесткий диск, изменять настройки и создавать учетные записи пользователей, не выходя из приложения «наведи и щелкни», которое успешно используется во многих дистрибутивах на базе Arch.
Live-версия
Live-версия NixOS предлагает ряд вариантов загрузки. Они включают запуск программы установки, запуск с параметром nomodeset (в других дистрибутивах это называется «безопасный графический режим») или с параметром copytoram (который загружает всю операционную систему в память). Конечным результатом использования любого из этих параметров является запуск NixOS, начало сеанса рабочего стола (в моем случае KDE Plasma) и автоматическое открытие программы установки Calamares.

Если мы захотим изучить живую сессию, рабочий стол Plasma имеет толстую панель в нижней части экрана, которая содержит меню приложений, переключатель задач и системный трей. На рабочем столе есть значки, которые открывают менеджер разделов, запускают программу установки, открывают терминал и отображают локальную копию руководства в формате HTML. По умолчанию установлено не так много приложений, хотя веб-браузер Firefox включен.
Установка
Calamares представляет собой графическую программу установки, которая проводит пользователя через выполнение некоторых основных шагов по настройке. На первой странице мы можем выбрать язык и кнопки, которые откроют Firefox для отображения документации, сообщений об ошибках и заметок о выпуске дистрибутива. На следующей странице нам предлагается выбрать часовой пояс на карте. Затем нам предлагается выбрать раскладку клавиатуры и создать имя пользователя и пароль. По умолчанию пароль должен быть сложным, длинным и не состоять из словарных слов. Честно говоря, я не смог заставить поле пароля принять что-либо, так как все случайные буквы и цифры, которые я вводил, отмечались как взятые из словаря. Есть флажок, который можно установить, чтобы отключить проверку пароля, что позволяет использовать любой пароль.

Затем программа установки просит нас выбрать один рабочий стол (предлагаются GNOME, KDE Plasma, Xfce, Pantheon, Cinnamon, MATE, Enlightenment и LXQt). Мы также можем не устанавливать среду рабочего стола. Нас спросят, хотим ли мы включить несвободные пакеты, которые включают драйверы оборудования. Я решил включить несвободные элементы. Затем нам предлагается разбить диск на разделы. Ручной вариант довольно дружелюбный и обтекаемый. Calamares также предлагает управляемый вариант, при котором весь диск будет занят одной файловой системой ext4. Стоит отметить, что в управляемом варианте не создается пространство подкачки — ни файловое, ни в виде раздела. Программа установки копирует свои файлы на диск и предлагает перезагрузить компьютер.
Первые впечатления

Когда я впервые загрузился в свою новую копию NixOS, дистрибутив предложил мне войти либо в Plasma, работающую на X11, либо в Plasma на Wayland. По умолчанию используется сеанс X11. Plasma загружалась необычайно медленно: первый запуск занял около 30 секунд на системе, где вход в систему обычно занимает менее 5 секунд. Последующие входы происходили быстрее.
Войдя в Plasma (версия 5.24), я заметил, что рядом с меню приложений есть четыре значка быстрого запуска. Эти значки служат для панели настроек, отображения рабочего стола, запуска файлового менеджера Dolphin и браузера Firefox. Нажатие на значок рабочего стола привело к появлению уведомления об ошибке, которое гласило: «Plasma Workspace: Неизвестная папка приложения». Остальные три значка работали, как и ожидалось.
По умолчанию включено не так много приложений. NixOS поставляется с Firefox, Dolphin, Gwenview, просмотрщиком документов Okular и музыкальным плеером Elisa. Панель системных настроек KDE также включена, чтобы помочь нам настроить рабочий стол. В фоновом режиме мы находим утилиты командной строки GNU и страницы руководства. Программа systemd init включена вместе с версией 5.15 ядра Linux.
Основная причина, по которой мне нравится экспериментировать с NixOS каждые несколько лет, заключается в том, что это дает мне возможность поэкспериментировать с продвинутым менеджером пакетов Nix. Большинство операций в Nix можно выполнить с помощью команды nix-env. Эта утилита командной строки помогает нам находить, устанавливать, удалять и обновлять пакеты. Мы также можем составлять список установленных пакетов и перемещаться вперед и назад между поколениями пакетов. Подробнее о поколениях я расскажу чуть позже.
Инструменты командной строки Nix имеют сопроводительные страницы руководства, и выполнение команды «nix-env —help» из командной строки открывает соответствующую страницу руководства в терминале. Также у нас есть список удобных функций Nix на странице «Управление пакетами».
Когда я только начинал использовать Nix, процесс запроса пакетов был медленным, необычайно медленным. Обычно Nix работает примерно с такой же скоростью, как APT или Zypper, но Nix потребовалось несколько минут для поиска пакета. Я подумал, что это может быть связано с необходимостью обновления базы данных. Я выполнил ручное обновление базы данных, а затем попытался выполнить обновление всех пакетов в системе. После пяти минут без каких-либо признаков прогресса я прервал обновление. Затем я попытался установить пакет, и через 5 минут nix-env сообщил, что пытается установить пакет. Через 15 минут я сдался и остановил процесс. Такая медленная работа Nix 2.8.1 удивила меня, поскольку прошлые версии Nix работали хорошо и быстро.
Я решил перезагрузиться и попробовать еще раз. На этот раз полное обновление системы завершилось за 4 минуты. Несколько больших пакетов установились менее чем за 2 минуты каждый. Вновь установленные приложения не появились в меню приложений ни сразу, ни после того, как я вышел из системы и снова вошел в свой аккаунт.
В следующий раз, когда я перезапустил NixOS, система загрузилась в текстовый терминал и не смогла запустить графическую среду. Очевидно, что-то сломалось в процессе обновления. Вот здесь-то и пригодится генерация пакетов. Каждый раз, когда мы выполняем какое-либо действие с помощью nix-env, например, устанавливаем новый пакет или выполняем обновление, Nix делает снимок своих пакетов в системе. Каждый снимок называется поколением. Мы можем мгновенно переключаться между поколениями для использования различных версий пакетов или для отката проблемы. Это полезно как для тестирования различных версий программного обеспечения, так и для устранения проблем.
В моем случае я вошел в терминал как пользователь root. Затем я выполнил команду
которая показала, что в системе было три предыдущих поколения, а последнее поколение было отмечено как «текущее». Затем я мог выполнить команду
чтобы вернуть систему к ее первому поколению. После этого я перезагрузил систему, NixOS запустилась и отобразила ожидаемый графический экран входа в систему. Возможно, в ближайшем будущем то, что вызвало проблему с экраном входа в систему, будет исправлено, и я снова смогу обновить систему.
Эта возможность мгновенного отката или перемещения вперед через снимки пакетов довольно удобна. Она не занимает много места, и если мы захотим очистить старые поколения пакетов, мы можем удалить их, чтобы освободить больше места на диске.
Аппаратное обеспечение
Я экспериментировал с NixOS в среде VirtualBox и на рабочей станции. На рабочей станции производительность была хорошей, система была стабильной, и, если отбросить некоторые опасения по поводу застревания Nix, в основном все работало хорошо. Я мог подключаться к сети, слушать музыку и воспроизводить видео на YouTube.
Когда я запустил NixOS в VirtualBox, все пошло не так хорошо. Производительность была довольно сильно снижена на рабочем столе. Я также не смог заставить систему воспроизводить звук, например, при открытии аудиофайлов в медиаплеере Elise. Я также не смог заставить видео с YouTube воспроизводиться ни в Firefox (браузер по умолчанию), ни в Falkon, который я установил позже. Я не уверен, но подозреваю, что проблемы со звуком могут быть связаны с использованием PipeWire в NixOS.
Свежая установка KDE Plasma версии NixOS заняла 6 ГБ дискового пространства. При входе в сеанс Plasma система использовала 430 МБ оперативной памяти, что ниже среднего.
Nix на AlmaLinux OS
Одна из вещей, которые мне нравятся в Nix, — это менеджер пакетов, предназначенный для работы с другими дистрибутивами. Проект предоставляет сценарий, который мы можем запустить для установки менеджера пакетов на выбранный нами дистрибутив Linux:
Этот сценарий запрашивает у нас пароль sudo, а затем советует нам использовать сценарий Nix для установки переменной окружения. В качестве альтернативы мы можем выйти из системы и войти снова, чтобы получить новые настройки.
Я установил Nix в AlmaLinux OS, просто потому что у меня была уже установленная и доступная копия. Одним из первых моих действий была попытка обновить базу данных пакетов и проверить наличие обновлений. Проверка обновлений не удалась с ошибкой, которая гласила: «неожиданный конец файла». Это было не очень элегантно, но неудивительно, поскольку я еще не установил ни одного пакета.
Затем я попытался установить несколько пакетов, таких как Falkon, GIMP и Firefox. Это не удалось, поскольку утилита nix-env столкнулась с segfault (сбой из-за проблем с памятью). Я обновил базу данных пакетов и повторил попытку. При попытке установить новые пакеты на этот раз каждый раз возникало больше ошибок «неожиданный конец файла».
Я был удивлен этим. В прошлом я использовал более ранние версии Nix в других дистрибутивах и никогда не сталкивался с подобными проблемами. Похоже, что-то в обработке конфигурации сломалось в этом выпуске там, где в прошлых версиях все работало.
Выводы
С одной стороны, я был рад услышать, что NixOS добавил Calamares в live media, чтобы облегчить установку дистрибутива. Мне понравился мой прошлый опыт работы с NixOS, и одной из немногих проблем, с которыми я сталкивался в предыдущих пробных версиях, была правильная настройка конфигурационного файла Nix. Nix может многое предложить, и меня удручала необходимость проходить через медленный процесс чтения документации и настройки текстового файла, чтобы настроить систему. Calamares — это удобная графическая программа установки, которая значительно снижает барьер для того, чтобы попробовать NixOS и менеджер пакетов Nix.
Однако в этот раз с Nix возникли серьезные проблемы. В прошлом я пробовал NixOS и Nix на других дистрибутивах, и раньше все было гладко, отполировано и функционально. Хотя иногда мне приходилось немного почитать страницы руководства, чтобы получить максимум от Nix, прошлые версии работали хорошо, и NixOS в целом работала довольно хорошо, как и другие минимальные дистрибутивы для рабочего стола.
В этот раз, хотя NixOS в целом работала нормально на моей рабочей лошадке, она столкнулась с многочисленными проблемами производительности и звука при запуске в VirtualBox. Nix иногда блокировался, когда я только начал его использовать. В первый раз, когда я успешно обновил пакеты, он сломал экран входа в систему, и Nix вообще не работал, когда я установил его в AlmaLinux OS.
Я не уверен, что произошло с Nix за последний год или около того с тех пор, как я в последний раз экспериментировал с ним (и NixOS), но это было похоже на большой шаг назад. И функциональность Nix, и стабильность пакетов, доступных в репозиториях, не соответствовали прежним высоким стандартам. Тот факт, что я вообще не смог заставить Nix работать в AlmaLinux после установки прошлых версий на дистрибутивы вроде Debian, вызывает беспокойство, и я надеюсь, что эти проблемы будут решены. Пользователь не должен видеть отладочные сообщения и сегфолты при попытке выполнить обновление или установку пакетов.
Тем не менее, я хочу отметить, что первое обновление NixOS дало мне шанс проверить и подтвердить ценность поколений пакетов. Это не очень хорошо, что обновление NixOS все сломало, но это показывает, как быстро Nix может исправить проблемы, когда обновление повреждает систему.
Что такое unix-подобные операционные системы.

Unix-подобные системы. Возможно, вы не раз уже слышали об этом понятии. Давайте попробуем разобраться, что это такое и для чего это нужно.
Первое, что нужно понимать:
Unix НЕ равно Linux
Это две разные операционные системы.
Посмотрите слайд из видео, на котором я представил небольшую схему развития операционных систем в истории и как появился Linux.
Понятие unix-подобные системы произошло по историческим причинам и связано с тем, как происходило развитие операционных систем.
В 1970 г. появилась такая операционная система, которая называлась Unix. Все начиналось с этой операционной системы. Она была создана для корпоративных целей. Компьютеры в то время были доступны только для крупных корпораций.
После того как компьютеры развивались и становились доступными большему количеству людей, начали появляться новые операционные системы.
Отдельной веткой развивалась операционная система Windows. А на основе Unix была разработана целая серия операционных систем, которые получили очень большое распространение.
В первую очередь это операционная система Linux. В 1991 г. был разработан так называемый проект GNU. Это принцип свободного распространения операционных систем. По этой лицензии Linux распространялся бесплатно, с открытым исходным кодом. На основе Linux по этой причине появилось довольно много различных сборок.
Сборка — это тот же самый Linux, но немного видоизмененный. Ядро операционной системы везде одинаково.
Также на основе Unix разрабатывалась операционная система BSD и Mac OS.
Т.к. эти операционные системы разрабатывались на основе одной системы, очень многие вещи в них оказались схожими. Это схожая файловая структуру, принципы безопасности, принципы работы с пользователями, команды в командной строке и.т.д.
Именно поэтому все такие системы и назвали unix-подобными. Т.к. они разрабатывались на основе общего ядра и общей операционной системы.