容器镜像里有什么:应对法律挑战

通过容器镜像分发软件的含义与许多人熟悉的软件包管理器截然不同。
333 位读者喜欢这篇文章。
A diagram of a branching process

Opensource.com

容器技术多年来一直在改变数据中心工作负载的管理方式,并加速应用程序开发和部署的周期。

此外,容器镜像越来越多地被用作分发格式,容器注册表是软件分发的一种机制。这不就像使用包管理工具分发的包吗?不完全是。虽然容器镜像分发类似于 RPM、DEB 和其他包管理系统(例如,存储和分发文件存档),但容器镜像分发的含义更加复杂。 这不是容器技术本身的错; 而是因为容器分发的使用方式与包管理系统不同。

在谈到容器镜像的许可合规性挑战时,VMware 首席开源官 Dirk Hohndel 指出,容器镜像的内容比大多数人预期的要复杂,并且许多现成的镜像都是以令人惊讶的随意方式构建的。(请参阅 Jake Edge 在 LWN.net 上发表的关于 Dirk 四月份演讲的 文章。)

为什么很难理解容器镜像的许可? 是否应该只为镜像添加一个标签(“许可证是 X”)? 在 开放容器镜像格式规范 中,预定义的注释键之一是“org.opencontainers.image.licenses”,其描述为“包含的软件在 SPDX 许可证表达式下分发的许可证”。 但这并没有考虑容器镜像的复杂性——虽然非常简单的镜像由数十个组件构建,但镜像通常由数百个组件构建。SPDX 许可证表达式 最常用于传达单个源文件的许可。 这样的表达式可以处理多个许可证,例如“GPL-2.0 OR BSD-3-Clause”(例如,参见 附录 IV of version 2.1 of the SPDX specification)。 但是,典型容器镜像的许可通常要复杂得多。

在谈论与容器相关的技术时,“容器”一词可能会导致混淆。 容器不是指用于存储或传输的文件容器。 相反,它指的是使用内置于内核中的功能(例如 cgroups 和命名空间)来为在内核上运行的代码呈现一种“包含的”体验。 换句话说,“容器”所指的包含是一种执行体验,而不是一种分发体验。 要在文件系统中布局作为执行容器基础的一组文件通常以称为“容器镜像”的形式分发,有时会被错误地简称为容器,从而笨拙地重载了“容器”一词。

在理解通过容器镜像进行的软件分发时,我认为考虑两个独立的因素是有用的

  • 内容的多样性: 软件分发的基本单元(容器镜像)包含比典型软件分发机制中的基本分发单元更大的数量和多样性的内容。
  • 使用模型: 广泛使用的工具的性质促使使用注册表,该注册表通常是公开可用的,在典型的工作流程中。

内容的多样性

在谈论特定的容器镜像时,注意力通常集中在特定的软件组件上(例如,数据库或实现一个特定服务的代码)。 但是,容器镜像包含更大的软件集合。 事实上,即使是创建该镜像的开发人员也可能只对镜像中的大多数组件有肤浅的了解和/或兴趣。 对于其他分发机制,这些其他软件将被识别为依赖项,并且该软件的用户可能会被引导到其他地方寻求有关这些组件的专业知识。 在容器中,获取容器镜像的个人并不知道这些在特色组件中起支持作用的额外组件。

分发单元:用户驱动 vs. 工厂驱动

对于容器镜像,分发单元是用户驱动的,而不是工厂驱动的。 容器镜像是减轻软件消费者负担的好工具。 通过容器镜像,镜像的消费者可以专注于感兴趣的应用程序; 镜像的构建者可以处理依赖项和配置。 这种简化可能是一个巨大的好处。

当软件单元由“工厂”驱动时,用户需要承担更大的责任来构建运行感兴趣的软件的平台,组装正确版本的依赖项,并获得所有正确的配置详细信息。 包管理系统中的分发单元是一个模块化单元,而不是一个完整的解决方案。 该单元有助于构建和维护组件流,该组件流足够灵活,可以组装成无数的解决方案。 请注意,由于该单元,软件包维护者通常比构建容器的人更熟悉软件包的内容。 构建容器的人可能对容器的特色组件有详细的了解,但对镜像的支持组件的熟悉程度有限。

软件包、软件包管理系统工具、软件包维护流程和软件包维护者非常不受重视。 在过去的二十年中,它们一直是交付各种软件的核心。 虽然容器镜像正在发挥越来越大的作用,但我预计包管理系统的重要性不会很快消失。 事实上,容器镜像中的大部分内容都受益于从此类软件包构建。

在理解容器镜像时,重要的是要了解通过此类镜像进行分发与软件包的分发具有不同的属性。 镜像中的大部分内容都是从软件包构建的,但镜像的消费者可能不知道包含哪些软件包或其他软件包级别的信息。 将来,可以使用各种技术来构建容器,例如,直接从源代码构建,而无需软件包维护者的参与。

使用模型

关于许多容器镜像构建不佳的报告怎么样? 部分原因在于随意构建的镜像数量是因为容器工具促进了工作流程,使镜像可以公开使用。 在试验容器工具并转移到超出笔记本电脑的工作流程时,这些工具希望您拥有一个存储库,多个计算机可以在其中拉取容器镜像(容器注册表)。 您可以启动自己的注册表。 一些广泛使用的工具可以轻松使用现有的免费注册表,前提是这些镜像可以公开使用。 这使得许多随意构建的镜像可见,即使是那些从未打算维护或更新的镜像。

相比之下,您多久看到开发人员发布其早期探索的 RPM? 随机开发人员进行实验产生的 RPM 不会最终进入主要的软件包存储库。

或者考虑一下某人正在试验最新的机器学习框架。 过去,研究人员可能只分享分析结果。 现在,他们可以通过发布容器镜像来共享完整的分析软件配置。 这可能对其他研究人员有很大的好处。 但是,浏览容器注册表的人可能会对这些镜像的即用性质感到困惑。 重要的是区分为个人探索而构建的镜像和为广泛使用而组装和测试的镜像。

请注意,容器镜像包含支持软件,而不仅仅是特色软件; 容器镜像分发软件集合。 如果您正在构建或以其他方式使用他人构建的镜像,请注意该镜像的构建方式,并考虑您对镜像来源的信任程度。

标签
User profile image.
Scott Peterson 是 Red Hat 法律团队的成员。 很久以前,一位工程师向 Scott 询问有关名为 GPL 的奇怪文档的法律建议。 那个具有决定意义的问题开始了一条探索协作开发(包括技术标准和开源软件)的法律方面的曲折道路。

评论已关闭。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.