Repository navigation
Replies: 2 comments 2 replies
|
更正正文的两处 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Note:证据收集和本文起草使用了LLM辅助,已由人工审核,如果有错误请指出,谢谢
结论
Plain Craft Launcher 2/Resources/transformer.jar内的类构成 HMCL 某 GPL-3.0 组件的演绎作品。它随 PCL 的 exe 分发,并由 ModLauncher 通过 SPI 在用户 JVM 内实际执行。仓库内没有 GPL-3.0
许可全文,没有 GPL 声明头,也没有针对该组件的 HMCL 署名。
按 GPL-3.0 §5(a)、§5(d)、§6,以及 HMCL 自己声明的 §7 附加条款,这些要求均未满足。
如果已经存在书面授权(issue/PR 记录、邮件,或任何形式的 HMCL 授权),请直接贴出来,
本条即降级为「授权记录未随代码入库」,争议即刻结束。
一、分发与执行链路
Plain Craft Launcher 2/Resources/transformer.jarPlain Craft Launcher 2/Plain Craft Launcher 2.vbproj:840My Project/Resources.resx:172-173,资源名Transformer(ResXFileRef→System.Byte[])Modules/Minecraft/ModMinecraft.vb:2175-2178(依赖名含transformer-discovery-service时)META-INF/services/cpw.mods.modlauncher.serviceapi.ITransformerDiscoveryService内容为org.jackhuang.hmcl.HMCLTransformerDiscoveryService,由 ModLauncher 经 SPI 在 JVM 内加载执行产物坐标,便于独立复核:
二、上游来源与许可
HMCL-dev/HMCL(核实于 HEAD59bcc7fe6,2026-09-22)LICENSE为 35149 字节 / 674 行的原版未修改 GPLv3,SHA-256
3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986minecraft/libraries/HMCLTransformerDiscoveryService/src/main/java/org/jackhuang/hmcl/HMCLTransformerDiscoveryService.java,SHA-256
698e81f946440da2f8135d2ed756b8450e9b9f5d647681597e430c32415cf002Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributorsdocs/README.md:69-77声明两条 GPLv3 §7 附加条款:分发修改版须以合理方式更改软件名或版本号;以及不得移除软件中显示的版权声明(依 GPLv3 7(b))
编译成 .class 恰好剥掉了这段声明头。 jar 内的
META-INF/MANIFEST.MF只有 25 字节,内容为
Manifest-Version: 1.0,不含任何许可或版权信息;而 HMCL 自身的tasks.jar会向MANIFEST 注入
Created-By: Copyright(c) 2013-2020 huangyuhui.,PCL 的 MANIFEST 里没有。这就是在二进制里搜不到 GPL 三个字的原因。不是没有义务,是构建过程把声明丢掉了。
三、认定依据
1. SPI 接口本身不含 HMCL 专有信息
minecraft/libraries/HMCLTransformerDiscoveryService/lib/modlauncher-4.1.0.jar内的ITransformerDiscoveryService,经javap -p反编译,全部内容为:接口只强制一个方法名
candidates,此外没有任何 HMCL 专有的信息。2. 常量池与源码的对应关系
class 常量池共 2480 字节,
major=52。与源码逐项对应:CANDIDATES(22)hmcl.transformer.candidates(73)System.getProperty(...)字面量java/lang/System(104)、getProperty(105)candidates(31)、(Ljava/nio/file/Path;)Ljava/util/List;(32)Signature(35)、泛型签名 (36)gameDirectory(33)lambda$candidates$0(37)、(Ljava/lang/String;)Ljava/util/stream/Stream;(38)path -> {...}path(41)e(39)、Ljava/nio/file/InvalidPathException;(40)catch (InvalidPathException e)java/io/File(79)、pathSeparator(80)、split(81)java/util/Arrays(83)、stream(84)、flatMap(92)、Collectors(94)、toList(95)、collect(97)java/nio/file/Paths(99)、get(100)、of(102)cpw/mods/modlauncher/serviceapi/ITransformerDiscoveryService(78)SourceFile(45)、HMCLTransformerDiscoveryService.java(46)<clinit>(44)3. 按能否由 SPI 接口推出分层
上表各项的证据分量差别很大:
hmcl.transformer.candidates(73)org/jackhuang/hmcl/HMCLTransformerDiscoveryService(76)CANDIDATES(22)static final惯例即为此命名gameDirectory(33)path(41)、e(39)candidates(31)认定依据是前两行。
hmcl.transformer.candidates是 HMCL 专有的配置键,只出现在源码 L31,接口里没有任何线索能推出它;包名与类名同样不在接口中,而 PCL 本可自选命名。
后四行我不作为依据。
path、e、gameDirectory都属 Java 常见或惯例命名,巧合重现完全可能。4. 另外三项一致性观察
build.gradle.kts写死sourceCompatibility/targetCompatibility = "1.8",class
major=52即 Java 8,吻合i/lf),jar 内同一文件为52 字节 CRLF。HMCL 的
.gitattributes规定* text=auto eol=lf,唯一强制 CRLF 的是*.bat,所以 HMCL 自身构建流程不可能产出 CRLF
Created-By与Implementation-Version,说明未走 HMCL 的
jar任务这三项都只能证明该 jar 并非 HMCL 构建流程的产物。ModLauncher 4.1 运行于 Java 8,
实现者都会选 8;Windows 下独立编写的同名文件同样是 CRLF;独立实现者也不会去跑 HMCL 的
gradle。所以三项都不具备区分力,只作佐证。
四、我考虑过的另一种解释
最合理的质疑是:类名是被 SPI 契约逼出来的,加载链按这个名字找它,PCL 可能只是自己写了一个
同名实现。这个假说比我最初评估的更有解释力:
org.jackhuang.hmcl/HMCLTransformerDiscoveryServicecandidatesmajor=52(Java 8)hmcl.transformer.candidates系统属性键所以我不声称排除了这个解释。但两种情况下所负的义务相同:
HMCL 专有的系统属性,也不会沿用 HMCL 的包名与类名。
五、涉及条款
Created-By,无任何版权声明作者重叠检查:PCL 与 HMCL 无主体关系,故上述推论成立。
六、我查过的授权记录
为避免把「没找到」误当成「不存在」,列出检索范围:
NOTICE/CREDITS/THIRD-PARTY/COPYING;docs/README.md全文零处提及 PCL、bangbang93 或第三方启动器HMCL-dev/HMCL中提及 PCL 的 117 条 issue/PR,全部是功能请求、缺陷报告或竞品比较Meloong-Git/PCL中同时提及 HMCL 与 GPL 的 issue,0 条HMCLTransformerDiscoveryService,仅 5 条命中,全部在 HMCL 自己仓库内JavaManager.java:454(缺陷 issue 引用)、ModAdviser.java:49(识别PCL.ini)、I18N_zh_Hans.properties:1520(联机功能文档)以上都是公开可查的范围。私域沟通(邮件、QQ 等)我无从查证,只能由你们确认。
七、本 issue 不主张什么
但不是哈希级的同一性证明。若认为仍不足,可补充更多可复现的验证。
本 issue 不作判断。
八、可能的整改
并在关于页署名 HMCL + GPL-3.0。
org.jackhuang.hmcl:transformer-discovery-service,但它从未被发布到任何公开仓库:org/jackhuang/在 Maven Central 为 404,org/glavo/hmcl下 10 个 artifact 中也没有它。顺带一提,HMCL 自己的做法也是内嵌,该子模块的
jar任务产物由HMCLCore/build.gradle.kts:46-51打进assets/game,运行时从/assets/game/HMCLTransformerDiscoveryService-1.0.jar读取(GameLibrariesTask.java:192)。所以内嵌本身不是分歧点,差别在于 PCL 侧的声明与署名完全缺失。
关于页
PageOtherAbout.xaml已有成条的署名机制,可参考 LWJGL Unsafe Agent 条目(
:588组件名、:589版权与许可、:591源码链接、:593许可链接)。本组件看起来是从这套机制里漏掉的,补署名的边际成本很低。
All reactions