Ubuntu 的 Snap、Red Hat 的 Flatpak 这种通吃所有发行版的打包方式真的有用吗？
=================================================================================

![](http://www.iwillfolo.com/wordpress/wp-content/uploads/2016/06/Flatpak-and-Snap-Packages.jpg)

**对新一代的打包格式开始渗透到 Linux 生态系统中的深入观察**

最近我们听到越来越多的有关于 Ubuntu 的 Snap 包和由 Red Hat 员工 Alexander Larsson 创造的 Flatpak （曾经叫做 xdg-app）的消息。

这两种下一代打包方法在本质上拥有相同的目标和特点：即不依赖于第三方系统功能库的独立包装。

这种 Linux 新技术方向似乎自然会让人脑海中浮现这样的问题：独立包的优点/缺点是什么？这是否让我们拥有更好的 Linux 系统？其背后的动机是什么？

为了回答这些问题，让我们先深入了解一下 Snap 和 Flatpak。

### 动机

根据 [Flatpak][1] 和 [Snap][2] 的声明，背后的主要动机是使同一版本的应用程序能够运行在多个 Linux 发行版。

> “从一开始它的主要目标是允许相同的应用程序运行在各种 Linux 发行版和操作系统上。” —— Flatpak

> “……‘snap’ 通用 Linux 包格式，使简单的二进制包能够完美的、安全的运行在任何 Linux 桌面、服务器、云和设备上。” —— Snap

说得更具体一点，站在 Snap 和 Flatpak （以下称之为 S&F）背后的人认为，Linux 平台存在碎片化的问题。

这个问题导致了开发者们需要做许多不必要的工作来使他的软件能够运行在各种不同的发行版上，这影响了整个平台的前进。

所以，作为 Linux 发行版（Ubuntu 和 Red Hat）的领导者，他们希望消除这个障碍，推动平台发展。

但是，是否是更多的个人收益刺激了 S&F 的开发？

#### 个人收益？

虽然没有任何官方声明，但是试想一下，如果能够创造这种可能会被大多数发行版（即便不是全部）所采用的打包方式，那么这个项目的领导者将可能成为一个能够决定 Linux 大船航向的重要人物。

### 优势

这种独立包的好处多多，并且取决于不同的因素。

这些因素基本上可以归为两类：

#### 用户角度

**+** 从 Liunx 用户的观点来看：Snap 和 Flatpak 带来了将任何软件包（软件或应用）安装在用户使用的任何发行版上的可能性。

例如你在使用一个不是很流行的发行版，由于开发工作的缺乏，它的软件仓库只有很稀少的包。现在，通过 S&F 你就可以显著的增加包的数量，这是一个多么美好的事情。

**+** 同样，对于使用流行的发行版的用户，即使该发行版的软件仓库上有很多的包，他也可以在不改变它现有的功能库的同时安装一个新的包。

比方说, 一个 Debian 的用户想要安装一个 “测试分支” 的包，但是他又不想将他的整个系统变成测试版（来让该包运行在更新的功能库上）。现在，他就可以简单的想安装哪个版本就安装哪个版本，而不需要考虑库的问题。

对于持后者观点的人，可能基本上都是使用源文件编译他们的包的人，然而，除非你使用类似 Gentoo 这样基于源代码的发行版，否则大多数用户将从头编译视为是一个恶心到吐的事情。

**+** 高级用户，或者称之为 “拥有安全意识的用户” 可能会觉得更容易接受这种类型的包，只要它们来自可靠来源，这种包倾向于提供另一层隔离，因为它们通常是与系统包想隔离的。

\* 不论是 Snap 还是 Flatpak 都在不断努力增强它们的安全性，通常他们都使用 “沙盒化” 来隔离，以防止它们可能携带病毒感染整个系统，就像微软 Windows 系统中的 .exe 程序一样。（关于微软和 S&F 后面还会谈到）

#### 开发者角度

与普通用户相比，对于开发者来说，开发 S&F 包的优点可能更加清楚。这一点已经在上一节有所提示。

尽管如此，这些优点有：

**+** S&F 通过统一开发的过程，将多发行版的开发变得简单了起来。对于需要将他的应用运行在多个发行版的开发者来说，这大大的减少了他们的工作量。

**++** 因此，开发者能够更容易的使他的应用运行在更多的发行版上。

**+** S&F 允许开发者私自发布他的包，不需要依靠发行版维护者在每一个/每一次发行版中发布他的包。

**++** 通过上述方法，开发者可以不依赖发行版而直接获取到用户安装和卸载其软件的统计数据。

**++** 同样是通过上述方法，开发者可以更好的直接与用户互动，而不需要通过中间媒介，比如发行版这种中间媒介。

### 缺点

**–** 膨胀。就是这么简单。Flatpak 和 Snap 并不是凭空变出来它的依赖关系。相反，它是通过将依赖关系预构建在其中来代替使用系统中的依赖关系。

就像谚语说的：“山不来就我，我就去就山”。

**–** 之前提到安全意识强的用户会喜欢 S&F 提供的额外的一层隔离，只要该应用来自一个受信任的来源。但是从另外一个角度看，对这方面了解较少的用户，可能会从一个不靠谱的地方弄来一个包含恶意软件的包从而导致危害。

上面提到的观点可以说是有很有意义的，虽说今天的流行方法，像 PPA、overlay 等也可能是来自不受信任的来源。

但是，S&F 包更加增加这个风险，因为恶意软件开发者只需要开发一个版本就可以感染各种发行版。相反，如果没有 S&F，恶意软件的开发者就需要创建不同的版本以适应不同的发行版。

### 原来微软一直是正确的吗？

考虑到上面提到的，很显然，在大多数情况下，使用 S&F 包的优点超过缺点。

至少对于二进制发行版的用户，或者重点不是轻量级的发行版的用户来说是这样的。

这促使我问出这个问题，可能微软一直是正确的吗？如果是的，那么当 S&F 变成 Linux 的标准后，你还会一如既往的使用 Linux 或者类 Unix 系统吗？

很显然，时间会是这个问题的最好答案。

不过，我认为，即使不完全正确，但是微软有些地方也是值得赞扬的，并且以我的观点来看，所有这些方式在 Linux 上都立马能用也确实是一个亮点。

--------------------------------------------------------------------------------

via: http://www.iwillfolo.com/ubuntus-snap-red-hats-flatpack-and-is-one-fits-all-linux-packages-useful/

作者：[Editorials][a]
译者：[Chao-zhi](https://github.com/Chao-zhi)
校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](https://linux.cn/) 荣誉推出

[a]: http://www.iwillfolo.com/category/editorials/
[1]: http://flatpak.org/press/2016-06-21-flatpak-released.html
[2]: https://insights.ubuntu.com/2016/06/14/universal-snap-packages-launch-on-multiple-linux-distros
