Является ли оснастка переносимой через другой UNIX (например, macOS)?

10

Мне нравится идея Snap и я играл с ней на виртуальной машине Ubuntu.

Обзор Snapcraft

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

Пакет .snap для системы Ubuntu Core содержит все ее зависимости. Это имеет несколько преимуществ по сравнению с традиционной обработкой зависимостей на основе deb или rpm, наиболее важным из которых является то, что разработчик всегда может быть уверен, что нет никаких регрессий, вызванных изменениями в системе под их приложением.

Snapcraft упрощает связывание этих зависимостей, позволяя указывать их как «части» в файле snapcraft.yaml. кусачий

Snappy Ubuntu Core - это новая версия Ubuntu с обновлениями транзакций - минимальный образ сервера с теми же библиотеками, что и в сегодняшней Ubuntu, но приложения предоставляются с помощью более простого механизма.

Приложения Snappy и само Ubuntu Core можно обновлять атомарно и при необходимости откатывать. Приложения также строго ограничены и помещены в «песочницу» для защиты ваших данных и системы.

IoT ›Создание приложений

На каких технологиях основана оснастка? Как выглядят архитектура и инструментарий? Зависит ли привязка от особенностей ядра Linux?

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

Пояснение после первого комментария:

Я знаю, что macOS и Ubuntu не совместимы в двоичном формате. Перекомпиляция необходима. Уже есть практически любой открытый исходный код для MacOS с Homebrew . Разработчик может разрабатывать на macOS и развертывать на Ubuntu, когда оснастка будет (в будущем) доступна для macOS.

Иванов
источник
1
Даже если бы не было задействовано никаких функций ядра, я бы не ожидал, что какое-либо нетривиальное приложение, даже статически скомпилированное, будет работать без перекомпиляции в macOS и Linux - форматы исполняемых файлов различны, ABI будут различаться для базовой системы POSIX вызовы будут другими, и особенно для приложений, выходящих за пределы POSIX, эквивалентные системные вызовы будут другими. Это не барьеры, я думаю, что любая упаковка может преодолеть. В противном случае такие проекты, как Wine и Darling, были бы успешными уже давно.
Муру
Итак, вы хотите установить моментальные снимки в macOS или создать моментальные снимки в macOS? Ваш вопрос изначально выглядел как первый, а теперь выглядит как последний.
Муру
В любом случае, поскольку моментальные снимки еще не были полностью перенесены в другие дистрибутивы Linux , я ожидаю, что любое действие на macOS будет несбыточной мечтой.
Муру

Ответы:

20

Да, благодаря стабильности интерфейса системного вызова Linux это возможно.

Одно из больших обязательств Линуса Торвальдса перед пользователями Linux заключается в том, что набор интерфейсов, предлагаемых ядром, стабилен. Многие люди не ценят ценность этого или то, насколько сложно быть лидером открытого проекта для достижения этой цели. Рассмотрим, например, насколько непредсказуемые изменения в API-интерфейсах GNOME! Когда вы слышите о том, что Линус активно участвует в списке рассылки, это происходит почти всегда, потому что некоторые коммиттеры ядра решили изменить такой интерфейс «потому что у них была лучшая идея». Линус говорит, что вы можете активно внедрять инновации ВНУТРИ ядра, но, пожалуйста, не ломайте приложения «пространства пользователя», которые зависят от существующих системных вызовов.

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

Одним из примеров этого является проект Joyent Triton, который предлагает совместимые с Linux системные вызовы в контейнерах на SmartOS (потомок IllumOS, потомок Solaris).

Более широко известный пример - новая подсистема Linux в Windows .

Конечно, реальный вопрос состоит в том, сколько системных вызовов предлагается, и насколько они совместимы между собой. По крайней мере, на данный момент не существует другой среды, в которой имеются все необходимые системные вызовы, потому что используемые привязки являются относительно новыми и глубоко в том, как ядро ​​думает о вещах, которыми оно управляет.

Но они обязательно придут со временем, и я думаю, что снимки, таким образом, будут использоваться в широком диапазоне контекстов.

Что очень круто, патчи приветствуются :)

Марк Шаттлворт
источник
11

Пока я не могу найти информацию о macOS, это OMG! В статье об Ubuntu есть интересная цитата Марка Шаттлворта:

Что касается запуска Snaps на Windows 10? «Это абсолютно правдоподобно», - сказал Шаттлворт.

«Snaps использует современные функции ядра Linux для ограничения безопасности, настройки доступа к файловой системе и т. Д., И все это включает использование современных механизмов в ядре. И Canonical ведет много [этой работы]. Microsoft потребуется некоторое время, чтобы [подключиться к ней] ».

Если «правдоподобно» запустить его в Windows, я бы сказал, что то же самое для macOS, за исключением того, что Microsoft, похоже, сотрудничает с Canonical, что я не слышал о том, что делает Apple.


Документация по политике безопасности Snapbox и песочнице и записи Arch Wiki на snapd являются информативными:

Из Arch Wiki:

Обратите внимание, что snap-confine создается с опцией --disable-confinement; полное ограничение опирается на ядро ​​с поддержкой AppArmor и связанный профиль для оснастки.

Из политики:

Под капотом лаунчер:

  • Устанавливает различные переменные среды: […]
  • Когда оборудование привязано к оснастке, устанавливает группу устройств с устройствами по умолчанию (например, / dev / null, / dev / urandom и т. Д.) И любыми устройствами, назначенными для этой привязки.
  • Устанавливает приватный / tmp, используя пространство имен монтирования для каждой команды и монтируя каталог для каждой команды в / tmp
  • Устанавливает для каждой команды devpts новый экземпляр
  • Устанавливает фильтр seccomp для команды
  • Выполняет команду в профильном профильном профиле AppArmor по умолчанию и имеет значение nice по умолчанию

Эта комбинация ограничительных профилей AppArmor (которые обеспечивают доступ к файлам, выполнение приложений, возможности Linux (7), монтирование, ptrace, IPC, сигналы, грубая сеть), четко определенные области файловой системы для приложений, фильтрация системных вызовов из белого списка через seccomp, private / tmp, новые экземпляры devpts и устройства cgroups обеспечивают строгое ограничение и изоляцию приложений.

Хотя AppArmor и seccomp предназначены только для Linux, похоже, что ограничение можно сделать необязательным, поэтому мы можем это игнорировать. Затем есть использование devpts, cgroups и пространств имен mount. Если есть какие-либо блокировки, я думаю, что это будет для тех. Я не достаточно знаком с BSD, чтобы сказать, каковы эквиваленты.

Само snapdприложение написано на Go, что должно сделать его кросс-платформенным. Действительно, некоторые файлы имеют очень интересные цели сборки :

osutil/group_other.go:

// -*- Mode: Go; indent-tabs-mode: t -*-
// +build !linux,!darwin,!freebsd

osutil/group_linux.go:

// -*- Mode: Go; indent-tabs-mode: t -*-
// +build darwin freebsd linux
// +build cgo

Похоже, что кто-то заинтересован в этом.

Мур
источник