为什么只有一个Snap Store?

2020-08-14 00:53:48

Snap和Flatpak是两个Linux通用应用商店的基础:Snap Store和Flathub。有趣的是,Flatpak有多个存储库:Flathub是主要的存储库,但Fedora和Elbasic OS也都有自己的存储库。相比之下,只有一个快照存储。为什么会这样呢?

注意:有关Flatpak和Snap的介绍,请阅读Linux桌面应用交付的未来是Flatpak和Snap。

Snap的设计使每个设备仅连接到单个存储,原因有三:

Snap和Ubuntu背后的公司Canonical已经尝试了分布式方法,并发现了它的缺点。在Snap之前,“个人软件包存档”(PPA)是向Ubuntu用户提供第三方软件的推荐方式。这些想法是每个开发人员创建一个包含他们的应用程序的小型存储库。用户通过添加PPA并使用其软件包管理器安装软件来获得新软件。这与Flatpak如何支持多个“商店”非常相似。

在Android和iOS上,用户通常通过打开应用商店并搜索自己需要的东西来查找新软件。对于PPA来说,这是不可能的,因为PPA中的软件只有在用户添加之后才会出现在Ubuntu应用商店中。Snap通过拥有包含所有可用应用程序的单一存储库解决了这一问题。用户直接从应用商店发现新软件,而不必在互联网上搜索。

许多开发人员还发现创建和维护存储库太麻烦了。Canonical试图让PPA尽可能容易地做到这一点,Launchpad负责构建和托管应用程序。然而,这个过程本质上比上传你的应用程序到商店要复杂得多。虽然PPA仍被许多开发人员使用,但更多的软件只能从网站下载。

这些问题对Flatpak项目来说并不陌生,这也是创建Flathub的原因:拥有一个包含所有应用程序的单一商店,每个人都会受益。

考虑到分布式方法的缺点,Canonical决定将工程资源投资于Snap的其他部分。创建分布式系统会增加复杂性;每个功能都变得更难实现。也就是说,Snap开发者过去明确表示,如果任何人有兴趣在Snap中实现这一功能,他们绝对可以这样做。

希望如此吧!尽管Snap的设计使每个设备仅连接到单个商店,但多个商店仍然可以存在!像Manjaro这样的分销公司很可能会把Snap指向他们自己的商店。Manjaro选择使用Canonical托管的Snap商店,因为他们喜欢给他们带来的优势。然而,在未来,Manjaro可以切换到他们自己的Snap商店,如果这对他们有意义的话。

这正是Ubuntu Touch项目所做的。Ubuntu Touch是一款智能手机操作系统,使用Snap的前身“Click”。他们最初使用的是Canonical托管的点击商店,但当Canonical放弃了打破智能手机双头垄断的尝试后,他们创建了自己的商店,并完全改用了点击商店。

遗憾的是,Snap商店的一部分仍然是关闭的源代码。Snap本身是完全开源的,Snap商店的许多部分也是开源的,比如网络商店前端、自动审查工具、构建服务、桌面商店应用程序等等。但是,托管快照的后端仍然是专有的。

根据Canonical的马丁·温普拉斯(Martin Wimpress)的说法,开源Snap商店后端需要对其进行重大改变:

[由于其历史原因]Snap Store现在与Canonical基础架构的其他区域集成。所以快照店不是单一的东西。它不像这一款软件,你可以很容易地将其与为Canonical基础设施提供动力的其他机器分离。所以我们不能简单地把它拆开,然后说,“给你,这就是开源快照商店。

由于Launchpad发生的事情,Canonical怀疑这笔投资是否值得。尽管他们在开源Launchpad上投入了大量资源,但仍然只有一个Launchpad实例在运行,而且他们没有收到任何来自非规范员工的重要贡献。

有趣的是,Canonical在几年前实际上发布了一个开源的Snap商店原型后端,但社区对实际维护和运行第二个Snap商店兴趣不大,因此该项目有点腐烂,与当前的Snap协议不兼容。

Linux Mint最近因阻止用户在Linux Mint上安装Snap而登上了头条。他们给出这一决定的原因之一是,Snap的集中化意味着Linux Mint不能为他们的用户提供某些快照的不同版本。他们解释说,使用APT可以做到这一点:

多亏了apt的工作方式,如果上游没有修复bug,Debian可以用补丁来修复它。如果Debian没有,Ubuntu可以。如果Ubuntu不支持,Linux Mint可以。如果Linux Mint没有,任何人都可以,而且他们不仅可以修复它,他们还可以通过PPA分发它。

可以理解,发行商希望在一定程度上控制他们的用户获得什么包,但是使用Snap商店已经可以做到这一点了!

“品牌存储”是快照存储的特殊副本,管理员在这里选择主存储中的哪些包可用,以及包含哪些附加或修改的包。例如,欧洲航天局(European Space Agency)有一个专门用于卫星通信研究的品牌商店。Brand商店的缺点是你仍然在使用Canonical的基础设施,但Linux Mint对此并不陌生。像大多数Ubuntu衍生品一样,它们在刚开始的时候严重依赖Canonical基础设施,甚至使用常规的Ubuntu存储库和镜像。

另一种选择是创建自己的Snap Store,拥有类似的功能,Canonical之前的行为表明,他们愿意为这一努力提供帮助。

在Linux社区的某些部分,拥有一个包含封闭源代码部分的快照存储是非常有争议的。在我看来,每台设备只有一个商店的决定是合理的:它对用户和开发人员都有明显的优势。尽管如此,我还是很高兴Flatpak作为一个分散设计的竞争性项目存在,而Elbasic OS的混合方法很好地利用了这一点。我希望有一天社区能创建一个类似于F-Droid正在做的替代快照店。

我不喜欢Snap商店后端是私有的,因为它正在成为Ubuntu的核心部分。我不认为Canonical以“开放核心”的方式在Ubuntu之上生成封闭源码的附加组件有什么错。GitLab在这方面做得非常好,正因为如此,我们有了一个令人惊叹的开源GitHub替代方案。Canonical试图赚钱是没有错的;没有他们,Ubuntu就不会出现在这里。Linux之所以伟大,是因为它周围的所有公司。

我不同意的是,如果没有此专有后端,您目前无法将Snap用于预期目的。具有讽刺意味的是,Ubuntu的前社区成员Jono Bacon在最近的一段视频中非常明确地表示,开放核心项目的专有部分需要是可选的。例如,拥有付费的企业功能(如Snap Store代理)很好,因为Snap在没有它的情况下仍然可以完全正常工作。

也就是说,我对专有后端持务实态度。DockerHub和GitHub非常受欢迎,而且它们完全是专有的。此外,Canonical比Docker Inc或GitHub更容易接受社区压力,因此我们更有能力引导他们做“正确的事情”。与APT和Flatpak相比,Snap提供了很多优势,如果Canonical真的不能解决问题,我们可以随时构建自己的后端。

注:我是人,和大多数人一样,我也会犯错。你觉得这篇文章有问题吗?请在评论中告诉我,我会很乐意改正的!