License 闹剧一则

EasyCodeML 违反 LGPL 始末

起始

因为前段时间一直在 BioArchLinux 上面做一些工作,然后就发现自己打的一个包,根本没有办法工作,总是显示找不到 exe 就在他们的群里问了问,然后得到了回复

比如文件名带exe,不代表文件就是windows可执行程序

我就很好奇,他到底是什么,结果发现,这竟然是 Linux binary 真的十分奇特了,这就好比 zip 文件命名成 png,根本不是正常的脑回路。

离谱的作者

后来越看越更离奇的是这个仓库commit a655455 之前使用 LGPL。他们原文如下

Copyright 2018 by the EasyCodeML authors. EasyCodeML is a free software and you are welcome to redistribute it under certain conditions. It is released under GNU Lesser General Public License, Version 3. See http://www.gnu.org/licenses/lgpl.html. No guarantee of the functionality of this software, or of the accuracy of results obtained, is expressed or implied. Please inspect any results carefully.

这时候我就开了一个 issue。因为他们重新分发了 PAML 的源码,而 PAML 本身是 GPL, 因为传染性,所以这些代码应该是 GPL, 但是自从他们在 commit a655455 修改完 License 并且拒绝分发源码后,依然没有移除 PAML 代码。

在群里的交流中,其中一个作者拒绝分发源码后并声称这种是笔误

好吧,看来是笔误了,修改成non-commercial吧

当我在说,除非你们不想分发源码额的时候,他们说

确实不想,不是除非不想

当我提醒他们违反了 LGPL 时候,他们说

哦,没事,后面我找到时间了,一定尽快去删掉那句话,谢谢提醒

后面我找到时间了,一定尽快去删掉那句话,谢谢提醒

逻辑上我们不需要开源,也不想开源。但是现在写了,我就删了,还是决定不会开源。

当我再次提醒他们这样违反了 LGPL

这个时候,我选择不对之前的笔误负责,所以不准备讲这个道理。

当我表示这种行为很好笑的时候

大家开心一下,也是一个好事。

当继续讨论的时候,他们说

已经删除了,纠结这个已经没多大意义了

这个问题就此打住,没有继续的意义

刚才我去吃烧烤,点了生蚝,吃了牛肉,还点了一盘蒜蓉白菜。我说这个蒜蓉白菜好吃,一定要点。最后买单走人了。单子上面写了有蒜蓉白菜,我也付款了。可是实际上,老板既没有上白菜,我也没吃过这道白菜。

最后呢,大伙都说,点了,钱也付了,你一定是吃过了。就算没吃过,你也要说自己吃了,不然菜单上怎么写了蒜蓉白菜。你这不是瞎点吗?

后来又仔细看了看付款金额,老板没把蒜蓉白菜的钱算进去。这时,到底我是当做我没点过这道白菜好,还是跑回去说“不行,老板,上白菜”。

后续,群管理开始撤回一些继续讨论的信息。

我在想 License 一个法律问题,也能被说的那么轻松,也真的没有谁了。

所以,还是决定让大家认识一下 https://doi.org/10.1002/ece3.5015 中两位作者,了解一下他们的言行。

附录

CodeMLSrc 下为 PAML 的源码,PAML 遵循 GPL 3.0 。

CodeMLSrc/Linux CodeMLSrc/Mac CodeMLSrc/Win 下面为他们编译的 binary,Linux 下的 binary 也使用 exe 作为文件后缀,实属可笑。

EasyCodeML.jarEasyCodeML的 java binary。

Preset 下的两个 exe 可能为二进制链接,他们自己也说不清楚,Linux 下运行不了,但是也不能缺少这个或者 CodeMLSrc/Linux 下的 exe,都会报错,并且 Preset 下的 exe 需要 777 权限。

.
├── Citation.ris
├── CodeMLSrc
│   ├── chi2.c
│   ├── codeml.c
│   ├── Compile Commands for Mac or Linux
│   ├── Linux
│   │   ├── chi2.exe
│   │   └── codeml.exe
│   ├── Mac
│   │   ├── chi2.exe
│   │   └── codeml.exe
│   ├── paml.h
│   ├── tools.c
│   ├── treespace.c
│   ├── treesub.c
│   └── Win
│       ├── chi2.exe
│       └── codeml.exe
├── Custom
│   ├── codeml.ctl
│   ├── dat
│   │   ├── cpREV10.dat
│   │   ├── cpREV64.dat
│   │   ├── dayhoff.dat
│   │   ├── dayhoff-dcmut.dat
│   │   ├── g1974a.dat
│   │   ├── g1974c.dat
│   │   ├── g1974p.dat
│   │   ├── g1974v.dat
│   │   ├── grantham.dat
│   │   ├── jones.dat
│   │   ├── jones-dcmut.dat
│   │   ├── lg.dat
│   │   ├── miyata.dat
│   │   ├── mtArt.dat
│   │   ├── mtmam.dat
│   │   ├── mtREV24.dat
│   │   ├── MtZoa.dat
│   │   └── wag.dat
│   └── default.ctl
├── Debug_Mac.sh
├── Debug_Win.bat
├── EasyCodeML.jar
├── Example
│   ├── Example1.pml
│   ├── Example1.tree
│   ├── Example2.pml
│   └── Example2.tre
├── inPath
│   ├── Command line for reference.txt
│   ├── Seq1.fasta
│   ├── Seq2.meg
│   └── Seq3.nex
├── outPath
│   ├── Seq1.pml
│   ├── Seq2.pml
│   └── Seq3.pml
├── Preset
│   ├── BM
│   │   ├── BM
│   │   │   └── codeml.ctl
│   │   ├── FR
│   │   │   └── codeml.ctl
│   │   └── M0
│   │       └── codeml.ctl
│   ├── BSM
│   │   ├── ModelA
│   │   │   └── codeml.ctl
│   │   └── ModelAnull
│   │       └── codeml.ctl
│   ├── chi2.exe
│   ├── CM
│   │   ├── CmC
│   │   │   └── codeml.ctl
│   │   └── M22
│   │       └── codeml.ctl
│   ├── codeml.exe
│   └── SM
│       ├── M0
│       │   └── codeml.ctl
│       ├── M1a
│       │   └── codeml.ctl
│       ├── M2a
│       │   └── codeml.ctl
│       ├── M3
│       │   └── codeml.ctl
│       ├── M7
│       │   └── codeml.ctl
│       ├── M8
│       │   └── codeml.ctl
│       └── M8a
│           └── codeml.ctl
├── Quick_Guide.pdf
├── README.md
└── Version History.txt