Godot 仓库内置 libjpeg-turbo 的许可证结构:IJG/BSD 双许可解析与合规义务详解

Godot 仓库内置 libjpeg-turbo 的许可证结构:IJG/BSD 双许可解析与合规义务详解 Godot 仓库内置 libjpeg-turbo 的许可证结构IJG/BSD 双许可解析与合规义务详解【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot本文以 thirdparty/libjpeg-turbo/LICENSE.md 为核心文档完整解读 Godot 引擎所内置 libjpeg-turbo 的“IJG 许可 Modified BSD 许可含 zlib 许可”双许可证结构、逐条聚合后的分发合规义务以及“为什么要用两个许可证”的设计考量同时结合仓库中 modules/jpg/SCsub、SConstruct 等构建系统源码说明这些许可证条款如何实际作用于 Godot 的编译流程与产物分发。读完后你将能够准确判断使用或再分发 Godot 中内置的 libjpeg-turbo 时需要保留哪些版权声明、在文档中附加哪些归属声明以及源码级实现8/12 位深度双编译、补丁裁剪与许可证条款之间的关系。组件背景libjpeg-turbo 在 Godot 仓库中的位置libjpeg-turbo 是以 IJGIndependent JPEG Group独立 JPEG 小组JPEG 库为基础、增加 SIMD 优化的 JPEG 编解码库。在 Godot 仓库中它以第三方依赖的形式完整内置于 thirdparty/libjpeg-turbo/ 目录下其源码目录 thirdparty/libjpeg-turbo/src/ 包含jcapistd.c、jdapistd.c、turbojpeg.c、jpeglib.h等完整的 IJG 风格 C 源码同时目录内还带有 README.ijgIJG 许可文本载体与一组补丁文件 thirdparty/libjpeg-turbo/patches/。从源码结构看该依赖主要服务于仓库中的 JPEG 图像模块 modules/jpg/modules/jpg/SCsub 直接按文件名将jaricom.c、jcarith.c、turbojpeg.c等 libjpeg-turbo 源文件编入模块目标文件modules/svg/SCsub 中也引用了同一内置库。构建入口 SConstruct 提供了布尔选项opts.Add(BoolVariable(builtin_libjpeg_turbo, Use the built-in libjpeg-turbo library, True))即builtin_libjpeg_turbo默认为TrueGodot 默认直接使用内置 libjpeg-turbo 而非外部系统库。正因如此理解 LICENSE.md 所定义的许可条款直接关系到 Godot 引擎本身作为“静态链接 libjpeg-turbo 的产物”时的合规义务。双许可结构IJG 许可与 Modified BSD 许可含 zlib 许可thirdparty/libjpeg-turbo/LICENSE.md 开篇即点明核心事实libjpeg-turbo 受两个相互兼容的 BSD 风格开源许可证覆盖。原文档对两者的适用范围界定得非常精确这是理解整个许可结构的关键IJGIndependent JPEG Group许可完整文本列于 README.ijg 中。适用范围libjpeg API 库及其关联程序包括从 libjpeg 继承的任何代码以及对该代码所做的任何修改。一个重要的许可“包含”subsume关系libjpeg-turbo 的 SIMD 源代码本身受 zlib Licensezlib 许可约束但在整个 libjpeg API 库的语境下zlib 许可的条款被 IJG 许可的条款所包含/吸收。Modified (3-clause) BSD 许可全文见下文“Modified BSD 许可全文”一节。适用范围TurboJPEG API 库及其关联程序以及构建系统build system。另一层“包含”关系TurboJPEG API 库本身是对 libjpeg API 库的封装wrap因此在整个 TurboJPEG API 库的语境下IJG 许可与 Modified BSD 许可两者的条款同时适用。README.ijg 文件开头有一段 libjpeg-turbo 项目自己的说明该文件已由 The libjpeg-turbo Project 修改过仅保留与 libjpeg-turbo 相关的信息并移除了 libjpeg v8 README 中不恰当impolitic的措辞仅为满足 IJG 许可“分发源码时必须附带此 README 文件”的要求而包含在内。其中 LEGAL ISSUES 一节保留了 IJG 许可的原始法律文本我们不保证这个软件能正常工作。你可以把这个软件用于任何目的不需要付钱。你不得假装这个软件是你写的。如果你在你的程序里使用了它必须在你的文档中某个地方说明你使用了 IJG 代码。其法律条文要点为作者不作出任何明示或暗示的保证AS IS 提供源码分发时必须原样附带 README 文件及其版权/免责声明且对原始文件的增删改必须在随附文档中明确标注仅分发可执行代码时随附文档必须声明 “this software is based in part on the work of the Independent JPEG Group”用户自行承担全部后果作者不承担任何损害责任不允许将任何 IJG 作者或其公司名用于广告或宣传。合规义务聚合说明Complying with the libjpeg-turbo Licenses原文档最有实战价值的部分是把三个许可证IJG、Modified BSD、zlib中分散的条款聚合成一份按场景组织的义务清单并注明每条义务的条款出处。文档特别声明该聚合只是澄清性汇总a roll-up for clarification其本身不是一份新的许可证。以下是完整继承的四条义务1. 分发 libjpeg-turbo 的修改版源码时不得删改源码中任何已有的版权或许可声明。条款出处IJG 许可第 1 条Modified BSD 许可第 1 条zlib 许可第 1、3 条。必须在你修改过的每个源文件头部加上你自己的版权声明使他人能够看出该文件被你修改过。如果该文件原本没有版权头则可以直接加一条“你修改了此文件”的声明。条款出处IJG 许可第 1 条zlib 许可第 2 条。必须包含 IJG 的 README 文件且不得改动该文件中的任何版权或许可文本。条款出处IJG 许可第 1 条。Godot 仓库对此有现成示范thirdparty/libjpeg-turbo/README.ijg 被原样保留在内置目录中并在文件头部加上了一段 “libjpeg-turbo note” 说明本文件被 libjpeg-turbo 项目修改过、修改了什么——这正是 IJG 许可第 1 条“对原始文件的改动必须明确标注”义务的落地实践。而 thirdparty/libjpeg-turbo/patches/ 目录中的0001-cmake-generated-headers.patch、0002-disable-16bitlossless.patch、0003-remove-bmp-ppm-support.patch三个补丁文件表明 Godot 对内置源码的裁剪按文件名可推断移除构建生成的头文件、禁用 16 位无损模式、移除 BMP/PPM 支持是以独立补丁形式记录的便于追溯修改内容。2. 仅分发二进制、或不带源码地分发静态链接了 libjpeg-turbo 的应用时你的产品文档必须包含如下声明This software is based in part on the work of the Independent JPEG Group.条款出处IJG 许可第 2 条。如果你的二进制发行版包含或使用了 TurboJPEG API你的产品文档必须包含 Modified BSD 许可的全文即下文“Modified BSD 许可全文”一节的完整文本。条款出处Modified BSD 许可第 2 条。这一条对 Godot 有直接现实意义由于 modules/jpg/SCsub 在builtin_libjpeg_turbo为真默认值时把 libjpeg-turbo 的 C 源码直接编译进引擎目标文件静态链接并经由 modules/jpg/image_loader_libjpeg_turbo.cpp 实现 JPEG 图像加载、经由 modules/jpg/movie_writer_mjpeg.cpp 提供 MJPEG 电影写出因此在分发不含源码的 Godot 引擎二进制时上述 IJG 归属声明义务即被触发。3. 命名与宣传限制不得使用 IJG 或 The libjpeg-turbo Project 及其贡献者的名称进行广告、宣传等活动。条款出处IJG 许可Modified BSD 许可第 3 条。4. 免责声明IJG 与 The libjpeg-turbo Project 不保证 libjpeg-turbo 无缺陷也不接受因使用该软件导致的不良后果所产生的任何责任。条款出处IJG 许可Modified BSD 许可zlib 许可。Modified (3-clause) BSD 许可全文thirdparty/libjpeg-turbo/LICENSE.md 内嵌了该许可的完整法律文本版权年份为 2009-2025 D. R. Commander 与 2015 Viktor Szathmáry全文如下Copyright (C) 2009-2025 D. R. Commander. All Rights Reserved. Copyright (C) 2015 Viktor Szathmáry. All Rights Reserved.Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.Neither the name of the libjpeg-turbo Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS, AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.三个条件可概括为源码再分发须保留版权头、条件列表与免责声明二进制再分发须在文档或随附材料中复现同样内容未经书面许可不得以项目或贡献者名义为衍生产品背书或做宣传。为什么使用两个许可证原文档最后一节 “Why Two Licenses?” 解释了双许可并非随意选择而是一个有明确动机的设计理论上完全可以用 zlib License 替代 Modified (3-clause) BSD License——因为 IJG 许可实际上已经“包含”了 zlib 许可的分发条件若这样做libjpeg-turbo 的二进制分发实际上就落在 IJG 许可之下但是IJG 许可的条款只针对 Independent JPEG Group 本身并没有把“归属保护attribution”和“反背书保护endorsement protection”延伸到其他实体因此项目方希望为新写的代码选择一份能给予 libjpeg-turbo 项目方同等保护的许可证——正如当年 IJG 为基于其软件的衍生代码所获得的那种保护。Modified BSD 许可的三条条款恰好提供了这种对等的归属与背书约束。仓库佐证许可条款与 Godot 构建系统的对应关系从源码结构看Godot 构建系统与许可证文档之间存在几处可以直接相互印证的事实内置库开关与默认值SConstruct 中builtin_libjpeg_turbo默认True即默认构建走内置的 thirdparty/libjpeg-turbo 源码许可义务随引擎二进制静态链接而产生见上文第 2 条义务场景。8/12 位深度双编译modules/jpg/SCsub 将 libjpeg-turbo 源码分为thirdparty_sources_common与位深无关如turbojpeg.c、jmemmgr.c和thirdparty_sources_bit_dependent与位深相关如jcdctmgr.c、jdhuff.c两组然后对BITS_IN_JSAMPLE8与BITS_IN_JSAMPLE12各编译一遍并用OBJSUFFIX_8、_12后缀区分目标文件以避免符号冲突。这说明 Godot 同时支持 8 位与 12 位 JPEG 采样深度的解码路径而所有被编译的源文件均落在 IJG 许可覆盖的“libjpeg API 库及其修改”范围内。源码与补丁分离thirdparty/libjpeg-turbo/src/ 内保留完整源码修改以 patches 下的补丁文件记录这与 IJG 许可第 1 条要求的“改动必须可被识别、README 不得篡改”在工程上是一致的设计取向。跨模块复用modules/svg/SCsub 同样引用builtin_libjpeg_turbo选项即 SVG 模块与 JPG 模块共享同一内置库实例进一步确认该第三方组件是整个引擎图像链路的公共依赖。小结一份可执行的合规检查清单以 thirdparty/libjpeg-turbo/LICENSE.md 的聚合条款为基准结合 Godot 仓库的实际使用方式可归纳如下检查清单保留声明内置目录中 README.ijg 与 LICENSE.md 的版权/许可文本不可删改对源码的修改应像仓库 patches 那样可追溯标注。源码分发若分发修改后的 libjpeg-turbo 源码须附带 IJG README 原文并在每个修改过的文件头部加自己的版权/修改声明。二进制分发Godot 引擎二进制的典型场景产品文档中加入 “This software is based in part on the work of the Independent JPEG Group.”若使用了 TurboJPEG API另需附上 Modified BSD 许可全文。宣传限制不得以 IJG 或 libjpeg-turbo 项目及其贡献者名义为产品背书或做广告。责任边界三个许可证均不保证无缺陷、不承担一切使用后果的责任。需要强调的是LICENSE.md 自身明确声明其“合规聚合”部分仅为澄清性汇总不构成独立许可证最终权利与义务仍以 IJG 许可README.ijg、Modified BSD 许可LICENSE.md 内嵌全文及 zlib 许可的原始文本为准。【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考