snap是否可以在其他UNIX(例如macOS)上移植?


10

我喜欢snap背后的想法,并在Ubuntu VM上使用它。

Snapcraft概述

Snapcraft是一个构建和打包工具,可帮助您快速打包软件。它使合并来自不同来源的组件和构建技术或解决方案变得容易。关键概念

Ubuntu Core系统的.snap软件包包含其所有依赖项。与传统的基于deb或rpm的依赖项处理相比,它具有两个优点,最重要的是,开发人员始终可以确保不会因应用程序下的系统更改而触发任何回归。

Snapcraft允许您在snapcraft.yaml文件中将它们指定为“部件”,从而使捆绑这些依赖关系变得容易。活泼的

Snappy Ubuntu Core是具有事务更新的Ubuntu的新版本-最小的服务器映像,具有与当今Ubuntu相同的库,但是通过更简单的机制提供了应用程序。

Snappy应用程序和Ubuntu Core本身可以原子升级,并在需要时回滚。应用程序也受到严格限制和沙箱保护,以保护您的数据和系统。

物联网›构建应用

快照基于什么技术?架构和工具包的外观如何?snap是否依赖于Linux内核功能?

我问,因为我想知道将来是否可以在macOS上使用相同的快照程序包?

澄清后,先发表评论:

我知道macOS和Ubuntu不二进制兼容。需要重新编译。带有Homebrew的 macOS几乎已经有可用的任何开源。当快照(将来)可用于macOS时,开发人员可以在macOS上进行开发并在Ubuntu上进行部署。


1
即使不涉及内核功能,我也不希望任何非平凡的应用程序(即使是静态编译的)也无需在macOS和Linux上重新编译就可以运行-可执行文件格式不同,底层POSIX系统的ABI也会有所不同调用将有所不同,尤其是对于POSIX之上和之后的应用程序,等效的系统调用将有所不同。这些不是我认为任何包装都可以克服的障碍。否则,像Wine和Darling这样的项目早就可以成功了。
大师

那么,您要在macOS上安装快照还是在macOS上创建快照?您的问题最初看起来像前者,而现在看起来看起来像后者。
muru

无论如何,由于快照仍未完全移植到其他Linux发行版,因此我希望对macOS采取的任何行动都是梦dream以求的。
muru

Answers:


20

是的,这要归功于Linux syscall接口的稳定性。

Linus Torvalds对Linux用户的重大承诺之一是内核提供的一组接口是稳定的。许多人不欣赏此方法的价值,也不欣赏作为一个开放项目的领导者实现这一承诺所面临的挑战。例如,考虑一下GNOME API中不可预测的变化!当您得知Linus在邮件列表上变得越来越激烈时,几乎总是因为内核的某些提交者决定更改此类接口,“因为他们有更好的主意”。Linus说您可以在内核内部进行创新,但是请不要破坏依赖于现有系统调用的“用户空间”应用程序。

由于这种稳定性,其他内核可能会提供相同的系统调用,从而使基于Linux构建的应用程序可以在这些其他内核上运行。

Joyent Triton项目就是一个例子,该项目在SmartOS(IllumOS的后代,Solaris的后代)的容器中提供了与Linux兼容的系统调用。

一个更广为人知的示例是Windows中的新Linux子系统

当然,真正的问题是提供了多少个系统调用,以及它们之间的错误兼容。至少到目前为止,还没有其他所有必要的系统调用都可以使用的环境,因为快照使用的是相对较新的,并且在内核考虑其管理内容的方式上也很深。

但是它们肯定会及时到来,因此,我认为快照将在广泛的上下文中可用。

哪个很酷,欢迎补丁:)


11

虽然我找不到有关macOS的任何信息,但该OMG!Ubuntu文章引自Mark Shuttleworth有趣的话:

至于在Windows 10上运行Snap?沙特尔沃思说:“这绝对合理。”

“快照正在使用Linux内核中的现代功能来进行安全限制,设置文件系统访问等,所有这些都涉及在内核中使用现代机制。和规范领导了很多[这项工作]。微软需要一段时间才能加入。”

如果让它在Windows中运行是“合理的”,那么我将对macOS表示相同的看法,只是微软似乎正在与Canonical合作,而我对Apple所做的事情还没有听说过。


在文档管理单元的安全策略和沙箱,并在snapd拱维基条目是信息:

从Arch Wiki:

请注意,snap-confine是使用--disable-confinement选项构建的;完全限制取决于启用了AppArmor的内核和相关的配置文件。

从政策:

在引擎盖下,启动器:

  • 设置各种环境变量:[…]
  • 将硬件分配给快照后,请使用默认设备(例如,/ dev / null,/ dev / urandom等)以及分配给该快照的任何设备来设置设备cgroup
  • 使用每个命令的专用挂载名称空间设置专用的/ tmp并在/ tmp上安装每个命令的目录
  • 设置每个命令的devpts新实例
  • 为命令设置seccomp过滤器
  • 在默认尼斯值下在特定于命令的AppArmor配置文件下执行命令

严格的AppArmor配置文件(用于调解文件访问,应用程序执行,Linux功能(7),安装,ptrace,IPC,信号,粗粒度联网),明确定义的应用程序特定文件系统区域,通过seccomp进行白名单系统调用过滤,私有的组合/ tmp,新实例devpts和设备cgroup提供了强大的应用程序限制和隔离。

虽然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

因此,似乎有人对此感兴趣。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.