返回 2026-06-21
⚙️ 工程

哪种 Copyleft 许可证适合 SVG 格式?Which Copyleft Licence is Suitable for an SVG?

shkspr.mobi·2026-06-20

SVG(可缩放矢量图形)是一种基于 XML 并使用数学运算来精准定义图像的格式,具有在任何尺寸下都清晰锐利的优势。文章探讨了在开源协议体系中,如何为这种融合了代码与艺术特性的 SVG 格式选择合适的 Copyleft 许可证。作者针对 SVG 既被视为代码又被视为图像的双重属性,剖析了许可证选择的复杂性。

Terence Eden

可缩放矢量图形(SVG)格式非常出色。它允许你精确定义图像的外观。它使用 XML 编写,通过各种数学运算来显示图像,在任何尺寸下看起来都清晰锐利。

这是一个简单的例子:

<svg height="100" viewBox="0 0 100 100" width="100" xmlns="http://www.w3.org/2000/svg">
   <circle cx="50" cy="50"  fill="#fff" r="100"/>
</svg>

这段代码生成了这个圆:

你可以把它打印成半径一公里的圆,它依然会是一个完美的圆形——这不同于传统的光栅图像,后者只是由块状像素组成的网格。

但假设你想自由地将你的 SVG 分享给他人,并确保他们也能自由分享。你会给它加上哪种“Copyleft(著佐权)”许可协议呢?

Creative Commons(知识共享)

显而易见的选择似乎是 Creative Commons Share-Alike(知识共享 相同方式共享)许可协议。SVG 是图像。图像是创作作品。Creative Commons 适合创作作品。大功告成!

但是……

SVG 并不是图像。它们是生成图像的代码。如果我们假设 SVG 是软件,那么 FAQ 中的这一条就变得相关了:

我可以将 Creative Commons 许可协议应用于软件吗?我们建议不要将 Creative Commons 许可协议用于软件。[…] 与专门针对软件的许可协议不同,CC 许可协议不包含关于源代码分发的具体条款,而源代码分发对于确保软件的自由重用和可修改性通常非常重要。[…] 此外,我们的许可协议目前与主流的软件许可协议不兼容,因此很难将采用 CC 许可的作品与其他自由软件整合。现有的软件许可协议是专门为软件设计的,并提供与 Creative Commons 许可协议类似的一组权利。

在该 FAQ 的最后,他们还提到:

虽然我们建议不要将 CC 许可协议用于软件本身,但 CC 许可协议可用于软件文档,以及游戏美术或音乐等独立的艺术元素。

那么,这算是“也许可行”了?

GPL

但让我们假设 SVG 是一种媒体文件,而不是软件。对它使用软件许可协议合适吗?

各种 Gnu Public Licenses(GNU 通用公共许可证)是这样说的:

我可以将 GPL 用于软件以外的其他事物吗?你可以将 GPL 应用于任何类型的作品,只要明确什么构成了该作品的“源代码”即可。GPL 将其定义为对作品进行修改的首选形式。

一张 JPEG 照片可能是从 RAW 图像文件转换而来的。在这种情况下,适合使用 GPL 的是 RAW 文件,而不是生成的 JPEG。

同样,对于复杂且多图层的插画,其 Photoshop 文件适合使用 GPL,但输出的 PNG 则不适合。

SVG 可以横跨这两个世界。构建带有图层、组和变换的 SVG 是可行的,然后再对其进行简化以供输出。你可以编辑优化后的版本,但它很难算作是首选格式。

我阅读了 GPL(所以你就不用读了),在开头它写道:

GNU 通用公共许可证是一个用于软件和其他类型作品的自由、著佐权许可协议。

(增加了强调。)

但他们是这个意思吗?

针对其他类型作品的许可协议 […] 我们不认为艺术或娱乐作品必须是自由的,但如果你想让一部作品自由化,我们推荐使用自由艺术许可协议(Free Art License)。

但是,尽管自由艺术许可协议很棒,FSF(自由软件基金会)表示:

请不要将其用于软件或文档,因为它与 GNU GPL 和 GNU FDL 不兼容。

SVG 到底是不是软件?

我认为它是。

  • 它是用纯文本编写的。
  • 它包含定义、变量和指令。
  • 它可以包含脚本。
  • 在我看来,这完全就是软件!

    但是,与此同时,用户将其体验为一种图形。例如,一张动画 GIF 包含少量类似代码的数据,用于说明每一帧应持续多长时间以及何时停止播放。GIF 算是软件吗?上面那个基础的圆形算是软件吗?一个东西需要包含多少代码才能被称为软件?

    SVG 是库吗?

    像 LGPL 和 MPL 这样的许可证允许将 copyleft 库集成到非自由软件中。

    专有应用程序可以通过请求 SVG 渲染输出然后将其显示出来,从而将 SVG 视为库。这或许有点牵强吧?

    那么嵌入的光栅图形(raster graphics)呢?

    更复杂的是,SVG 还可以包含光栅图形。也就是说,可以在 SVG 中嵌入 PNG、JPEG 或任何其他传统图像。

    在这种情况下,嵌入的图像可以采用 Creative Commons 许可,因为 CC BY-SA 与 GPLv3 兼容。

    当有人对 BY-SA 许可的作品进行演绎改编,并将其包含在 GPLv3 许可的项目中时,这两个许可证都会适用,且下游用户必须同时遵守两者。然而,BY-SA 4.0 的第 2(a)(5)(B) 条款允许任何接收该改编材料的下游用户,以 GPLv3 所规定的方式来同时满足 BY-SA 和 GPLv3 的条件(即署名和 ShareAlike)。

    (着重号为后加。)

    仅包含嵌入图像的最基本的 SVG 可能不会被算作软件。但如果你开始对它们应用程序化转换呢?这个 SVG 嵌入了一张图像,并使用软件将其上下颠倒。

    <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64">
      <image x="0" y="0" width="64" height="64"
        transform="rotate(180)"
        href="data:image/png;base64,iVB…" />
    </svg>

    那点代码足以将其算作软件吗?

    群体的智慧

    我进行了一项极其准确的公开调查。结果如下:

    @Edent@mastodon.social 发布的帖文 在 Mastodon 上查看

    结语

    就个人而言,我认为 SVG 是软件。我理解那些认为它们适合采用 Creative Commons 许可的论点,但我并不认同。即使是最简单的 SVG,其分发方式也是由计算机来执行其内容。

    尽管 SVG 可能会被压缩并去除注释,但它们仍然保留着源代码的本质。我想你可以尝试对它们进行混淆,或者将它们打包成准二进制格式,但我坚持认为其源码仍然是可见且可编辑的。

    如果你选择使用 Creative Commons 相同方式共享(Share-Alike)许可证,可能不会造成什么危害。但考虑到 CC 不愿将其认可用于软件,使用 copyleft 的源代码许可证可能是更合理的做法。

    需要完整排版与评论请前往来源站点阅读。