每次依赖项有安全更新时,我是否需要创建一个新的 Snap 包?

如果我创建一个带有5个依赖项的snap软件包。每当一个依赖项获得(安全)更新时,我是否需要创建一个新的软件包版本?
我的意思是,.deb软件包的优势在于,在Ubuntu/Debian等系统中,我可以使用一个库,一旦该库得到更新,这也意味着我的软件的一部分也会得到更新。而且,由于他们只提交安全更新,我可以(99%)确信库的更新不会破坏API,从而导致我的软件崩溃。
1个回答

简短的回答是,如果您需要更新依赖项,那么您需要重新构建您的快照。然而,这里也有一个更长的答案。
假设您有一些使用SSL的应用程序(可以是一些嵌入式软件或使用Apache的完整网站)。您进行了研究并利用了特定的密钥交换和对称算法。现在假设在SSL中发现了一个安全漏洞,并发布了一个新版本。仅仅因为它是一个安全发布,并不意味着修补的漏洞就在您使用的算法之一。如果不是呢?如果通过修补您没有使用的算法中的漏洞,导致您使用的某个部分被破坏或受到威胁(我最近在PHP中遇到了这种情况)?如果您将其捆绑在一起,您可以根据具体情况决定是否需要逐个升级。您还可以在向所有用户推出之前进行广泛测试。还有可能您所针对的发行版具有与您的软件不兼容的不同版本的SSL,而将其捆绑在快照中可以提供跨平台的共同体验。
在共享依赖项的好处和捆绑它们的好处之间肯定存在权衡。

1最近你回答了一些突发问题,并且表现出一定的权威性。你是开发者吗?如果不是,能否提供可靠的信息来源链接?如果是,能否提供一些可靠的信息来源? - muru
1除此之外:如果我必须相信每个开发者对OpenSSL代码的判断和理解,而不是例如Canonical安全团队或多年来一直处理OpenSSL的Debian维护人员,那么关于snap安全性的讨论就是一派胡言。 - muru
我并不是在说捆绑SSL需要理解SSL的代码,我只是想指出从开发者的角度来看,捆绑这些东西可能会有好处。是的,如果捆绑的依赖需要更新,就必须生成一个新的快照。 - kyrofa
另外,你需要什么样的可靠来源?是指明确说明如果捆绑的依赖项发生变化,就需要重新构建你的快照的内容吗? - kyrofa
是的,还有关于http://askubuntu.com/questions/787149/how-do-snap-packages-handle-shared-dependencies的其他问题。 - muru
2如果您从开发者那里安装软件,那就意味着您对该开发者有所信任。他们处理SSL的方式就是一个很好的例子 - 如果应用程序开发者不明智地使用库的话,仅仅拥有一个已经修复过的库版本并不能为您提供帮助。有很多应用程序因为选择算法、密钥管理或签名检查出现问题而导致安全性较差的情况 - 这与他们链接到的OpenSSL版本无关。明白这一点是明智之举 - 您不能仅仅通过在系统上获取更新的库来获得安全性。 - Mark Shuttleworth
2相比之下,如果一个应用被入侵了,deb 包通常会让攻击者能够在整个系统中自由操作,而 snap 包则不会。没有系统是完美的,但可以说,在某些情况下,snap 是一个有用的改进。 - Mark Shuttleworth
1@MarkShuttleworth 我可能会相信开发者X能够提供一款不错的Y语言应用程序,但我可能不会相信他们是否理解对OpenSSL的特定补丁是否会给他们带来问题,而在我看来,这正是Snaps要求他们做到的。这是一个技术细节层面,我认为大多数应用程序开发人员并不熟悉,这也是为什么他们(和用户)依赖像OpenSSL这样的库和像Ubuntu这样的发行版的原因。当然,我只是个无名小卒,所以我的意见并不重要。(此外,Snaps可能被限制,但这并不意味着它们不处理用户数据,... - muru
@MarkShuttleworth … 例如,如果LibreOffice或owncloud的快照被攻击,我可能会遭受很大的损失。 (另外,请在回复评论中使用@muru,这样我就会收到通知。我会定期检查有趣的帖子,但通知也是不错的。) - muru
只有没有人是无名之辈,你必须成为有个人 :) - Mark Shuttleworth
snapcraft工具将始终使用新鲜的软件包或部件,只要Snap定期重建,您就会自动获得这些新鲜的软件包或部件。对于OpenSSL的特定情况,它位于核心操作系统的Snap中,并且由我们进行更新。 - Mark Shuttleworth
我确实理解风险,但如果这个应用程序有缺陷,并且没有得到更新,那么你在处理数据时仍然会面临完全相同的问题。 - Mark Shuttleworth