我喜欢 snap 背后的想法,并在 Ubuntu VM 上使用它。
快照概述
Snapcraft 是一个构建和打包工具,可帮助您将软件打包为快照。它使合并来自不同来源的组件和构建技术或解决方案变得容易。关键概念
Ubuntu Core 系统的 .snap 包包含其所有依赖项。与传统的基于 deb 或 rpm 的依赖处理相比,这有几个优点,最重要的是,开发人员始终可以确保不会因应用程序下的系统更改而触发回归。
Snapcraft 允许您在 snapcraft.yaml 文件中将它们指定为“部分”,从而使捆绑这些依赖项变得容易。活泼的
Snappy Ubuntu Core 是具有事务更新的 Ubuntu 的新版本 - 具有与当今 Ubuntu 相同的库的最小服务器映像,但通过更简单的机制提供应用程序。
Snappy 应用程序和 Ubuntu Core 本身可以自动升级并在需要时回滚。应用程序也受到严格限制和沙盒化,以保护您的数据和系统。
快照基于哪些技术?架构和工具包看起来如何?snap 依赖于 Linux 内核特性吗?
我问,因为我想知道将来我是否也可以在 macOS 上使用相同的 snap 包?
澄清,在第一次评论后:
我知道 macOS 和 Ubuntu 不是二进制兼容的。需要重新编译。带有Homebrew的 macOS 几乎已经有任何可用的开源代码。当 snap(将来)可用于 macOS 时,开发人员可以在 macOS 上开发并在 Ubuntu 上部署。
是的,由于 Linux 系统调用接口的稳定性,这是可能的。
Linus Torvalds 对 Linux 用户的一大承诺是内核提供的接口集是稳定的。许多人不理解这样做的价值,也不理解作为一个开放项目的领导者实现这一承诺是多么具有挑战性。例如,对比一下 GNOME API 中不可预测的变化!当你听说 Linus 在邮件列表中变得越来越激烈时,几乎总是因为一些内核提交者决定更改这样的接口,“因为他们有更好的想法”。Linus 说你可以在内核内部进行疯狂的创新,但请不要破坏依赖于现有系统调用的“用户空间”应用程序。
由于这种稳定性,其他内核可以提供相同的系统调用,从而允许构建在 Linux 上的应用程序在其他内核上运行。
其中一个例子是 Joyent Triton 项目,它在 SmartOS(IllumOS 的后代,Solaris 的后代)上的容器中提供与 Linux 兼容的系统调用。
一个更广为人知的例子是Windows 中新的 Linux 子系统。
当然,提供了多少系统调用,以及它们之间的 bug 兼容程度如何,才是真正的问题。至少就目前而言,没有其他环境可以提供所有必要的系统调用,因为 snaps 使用的系统调用相对较新,并且在内核对其管理的事物的思考方式上比较深入。
但它们肯定会及时出现,我认为快照将因此可以在广泛的环境中使用。
这很酷,欢迎补丁:)
虽然我找不到有关 macOS 的任何信息,但这个OMG!Ubuntu文章中有一个来自 Mark Shuttleworth 的有趣引用:
如果让它在 Windows 中运行是“合理的”,那么我对 macOS 也会这么说,除了微软似乎正在与 Canonical 合作,这不是我听说过苹果正在做的事情。
关于Snap 安全策略和沙盒的文档以及关于 snapd 的 Arch Wiki 条目提供了丰富的信息:
来自 Arch Wiki:
从政策:
虽然 AppArmor 和 seccomp 仅适用于 Linux,但看起来限制是可选的,所以我们可以忽略它。然后是 devpts、cgroups 和 mount 命名空间的使用。如果有任何阻碍,我认为是针对那些人的。我对 BSD 不够熟悉,无法说出等价物是什么。
应用程序本身是用 Go 编写的
snapd
,这应该使它合理地跨平台。事实上,一些文件有非常有趣的构建目标:osutil/group_other.go
:osutil/group_linux.go
:所以看起来有人对此感兴趣。
截至今天,
snap
可以在 MacOS 上安装但不能使用。