资讯动态

Madeira项目GPL与专有库兼容设计:Madeira Converter Exception完全解读

发布时间:2026/10/4 4:22:35 来源:尧图企业网站定制
Madeira项目GPL与专有库兼容设计Madeira Converter Exception完全解读【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/MadeiraMadeira 是一款能在 iPhone 上免越狱运行 x86-64 Windows PC 游戏的开源项目它通过 FEX-Emu 指令翻译、Wine 模拟环境和 DXMT 图形转译实现 Windows 游戏兼容。本文完整解读它的许可设计GPL-3.0-or-later 主许可如何与 Apple 专有动态库共存核心就是那份名为Madeira Converter ExceptionMadeira 转换器例外的附加许可条款。一个项目里其实藏着五六套许可Madeira 的主仓库采用GPL-3.0-or-later见 LICENSE 与 COPYING但完整的应用还包含大量上游组件每个组件保留自己的许可。项目用 THIRD-PARTY-NOTICES.md 逐条记录许可证原文集中在 LICENSES/ 目录组件上游许可Madeira 中的状态Wine 分支LGPL-2.1-or-later静态链接LGPL 义务生效FEX-Emu / DXMT forkMIT上游保持 MITMadeira 的修改为 GPL-3.0-or-laterrpmalloc fork0BSD上游保持 0BSD作者修改为 GPL-3.0-or-laterGnuTLS / Nettle / GMP / FFmpegLGPL 系列静态链接源码与构建脚本全部入库Apple Metal Shader ConverterApple 专有协议以 dlopen 动态加载仅限着色器转换用途转换器头文件Apache-2.0随源码树分发选择 GPL 而不是更宽松的许可目的很明确衍生作品必须保持开源动机详见 THIRD-PARTY-NOTICES.md 的 Why GPL-3.0-or-later 一节。而 LGPL 刻意允许专有程序链接受覆盖代码不符合这个意图。核心矛盾GPL 代码与 Apple 专有库相遇问题出在 Direct3D 12 支持上。游戏的 DXIL 着色器需要转换成 Metal 库Madeira 使用 Apple 官方的Metal Shader Converterlibmetalirconverter.dylib在运行时完成这项工作。这是一个专有二进制它由 Apple 的许可协议管辖不是开源的协议第 2.B 条允许分发该动态库但仅限着色器转换目的METAL-SHADER-CONVERTER-AGREEMENT.txt按 GPL-3.0 的默认规则GPL 代码与专有库组合后的结合作品会要求提供组合体的全部对应源码——包括 Apple 库的源码这显然不可能。也就是说不加特殊条款这个应用根本不能合法分发。关键解法GPL-3.0 第 7 条的附加许可GPL-3.0 第 7 条允许版权方在标准条款之外附加许可。LICENSE-EXCEPTION.md 正是这样一份附加许可additional permission即 Madeira Converter Exception, version 12026-09-16 拟定2026-09-24 正式采纳。它的要点允许分发组合体如果你将程序与libmetalirconverter.dylib任何版本、或 Apple 的 Metal、Foundation、UIKit 等系统框架包括修改版链接或组合许可方额外授权你分发结果源码义务有边界对应源码只需包含程序本身的代码无需包含 Apple 库的源码不改变 Apple 许可这些库仍受 Apple 自己的协议约束该附加许可不及于它们可移除按 GPL-3.0 第 7 条你在分发副本时也可以移除这份附加许可。仓库里还有一个工程化细节.githooks/pre-push钩子在例外条款未正式采纳前会拒绝向远程推送确保公开版本永远带着生效条款。为什么例外条款只能覆盖一部分代码这是整个设计中最容易被忽略、却最关键的一环。附加许可只能由被覆盖代码的版权持有人授予。所以 LICENSE-EXCEPTION.md 的 Scope and authority 一节划出了清晰的边界✅ 例外覆盖的范围主仓库中的 Madeira 应用与工具作者自有版权madeira-d3d12 原生 Direct3D 12 运行时同一作者其 LICENSE 载有相同条款FEX、DXMT fork 以及 rpmalloc fork 中Madeira 作者的修改上游 MIT/0BSD 代码本身不需要例外。❌ 例外无法覆盖的范围上游 Wine 代码早先的 Wine fork 曾按 LGPL-2.1 第 3 条整体转为 GPL-3.0-or-later这一转换对那份副本不可逆作者已无权再为它附加任何例外。为此项目专门准备了madeira-lgpl分支以上游 wine-11.4 为基线将 51 个 Madeira 提交按序挑回、重新以 LGPL-2.1-or-later 发布完整溯源记录在 docs/wine-lgpl-provenance.mdApple 库本身永远只受 Apple 协议约束。 换句话说不是给 Wine 找个例外而是让 Wine 回到 LGPL 分支让例外只落在作者自己能授权的那部分代码上——这就是 GPL 与专有库兼容设计里最精妙的分工。分发时随附的义务清单即使有了例外条款分发构建好的应用仍需履行一揽子义务详见 docs/LICENSING.mdLGPL 静态链接义务WineLGPL 分支、GnuTLS、FFmpeg 等静态链接库要求提供完整对应源码、LGPL 副本并让接收方能够重新链接修改后的库版本。为此项目把 GMP/Nettle/GnuTLS/FFmpeg 的未修改上游源码包和 SHA-256 校验和直接入库THIRD-PARTY-NOTICES.md Corresponding source 一节Apple 协议 2.D 条转换器不得在非 Apple 设备上使用不得作为服务对外提供——Madeira 恰好只在 Apple 设备上运行天然合规版权声明每个 fork 保留上游版权声明应用包内携带licenses/目录GPL-3.0、例外条款、LGPL、MIT、0BSD、LLVM 文本及 THIRD-PARTY-NOTICES.txt微软 VC 运行库明确不分发MSVC 运行库只能在微软条款下原样再分发仓库已将其移出跟踪构建时需按 tools/fetch-vcruntime.md 自行提供。另外文档也诚实地说明了 GPL做不到的事不覆盖通过 Madeira 运行的游戏本身那是独立作品、不禁止他人独立重写、也不能收回 FEX/DXMT 已以 MIT 发布的代码授权。新手速记5 个要点带走 #要点1主许可GPL-3.0-or-later目标是让所有分发出去的衍生作品保持开源2GPL 代码 专有 Apple 转换器 默认不可分发靠GPL-3.0 §7 附加许可破局3Madeira Converter Exception 只豁免组合分发的源码义务不改变Apple 库自身的专有性质4附加许可只能由版权持有人授予 → 上游 Wine 必须走LGPL 分支madeira-lgpl绕开已转 GPL 的副本5分发构建产物时须履行 LGPL 重链接、源码供应、声明随附等义务文档均标注待律师终审想深入阅读建议按此顺序浏览LICENSE-EXCEPTION.md例外条款原文→ THIRD-PARTY-NOTICES.md组件许可清单→ docs/LICENSING.md组装应用的义务清单→ docs/wine-lgpl-provenance.mdWine LGPL 分支的逐提交溯源。这套主许可 窄范围附加许可 上游保持原许可的分层设计是 GPL 项目引入专有二进制依赖时可参考的完整范本。【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/Madeira创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑