此页面内容来源于 JSHint 项目仓库。如果您发现错误,请 提交问题 或(更佳)提交拉取请求

2020 年重新授权

2020 年 8 月,JSHint 项目维护人员重新授权了该项目。这是多年努力的成果,在此过程中,我们非常谨慎地尊重软件许可的惯例以及所有贡献者的意图。本文档通过总结维护人员遵循的过程,证明了更改的合法性。

起源:JSLint

JSLint 项目于 2002 年首次公开发布。它免费分发,但使用所谓的“JSON 许可证”[1] 授权。根据此许可证发布的代码未被自由软件基金会[2] 认定为“自由软件”,也未被开源计划[3] 认定为“开源软件”,原因在于以下条款

软件应用于善,而非恶。

在初始版本发布后,JSLint 的创建者对其唯一的源代码文件进行了一系列修补程序的迭代改进。在此期间,所有者是该项目的唯一贡献者。

分支

2011 年,另一位开发人员做出了自己的改进,并将结果发布为一个名为“JSHint”[4] 的新项目。根据 JSLint 许可证的条款,只要新项目对其继承的代码使用相同的许可证,这都是允许的。

第二位开发人员继续修改 JSHint,并接受了其他人的贡献。为了促进源代码的可维护性,偶尔会在设计为在运行时包含的不同文件中引入新功能。这些文件被称为“模块”,根据 MIT “Expat”许可证[5] 的条款提供。随着自动化测试的编写和包含在项目中,它们也根据 MIT “Expat”许可证获得许可。

在随后的几年里,JSHint 项目接受了数百名开发人员的直接代码贡献。许多这些补丁修改了最初的 JSON 许可文件。同时,JSLint 的作者允许 Eclipse 基金会使用 MIT Expat 许可证重新授权 JSLint 的一个版本,以便将其包含在名为 Orion[6] 的项目中。

注入 FOSS 起点

2013 年,一位 JSHint 用户请求重新授权该项目[7]。JSHint 维护人员通过以下程序予以了满足

  1. 使用 git 版本控制软件,他们回滚了提交给 JSHint 的所有更改。(生成的代码在 JSHint 创建时与 JSLint 完全相同。)
  2. 他们用 Eclipse 基金会发布的 MIT 许可版本替换了 JSON 许可版本的代码。(生成的代码仅在许可证标题方面与 JSLint 不同。)
  3. 他们重新应用了提交给 JSHint 的所有更改。

虽然此操作创建了一个“替代历史”,证明了 JSHint 如何可以作为自由软件项目创建,但它不一定反映了贡献者的意图。JSHint 在当时没有维护贡献者许可协议,因此维护人员无权修改提交 JSHint 特定补丁的条款。

为了解决这个问题,维护人员首先引入了贡献者许可协议(“CLA”)。他们确保所有后续贡献者在接受其补丁之前都同意协议条款。他们联系了每个修改了 JSON 许可的 jshint.js 文件的贡献者,并请求他们签署协议。尽管大多数人通过签署协议做出了回应,但有些人拒绝了,还有一些人没有回应。

重写

未签署 CLA 的补丁作者的完整列表与本文档一起在 JSHint 项目源代码存储库中提供。

维护人员审查了每个无法重新授权的补丁。许多补丁涉及非实质性更改,例如代码注释修订、拼写更正或对标准化 API 的引用。由于这些贡献没有以任何有意义的方式改变软件的行为,因此不能声称拥有所有权,因此不需要明确的重新授权许可。

但是,共有六个补丁包含对 jshint.js 的非平凡更改。维护人员安排了对这些补丁的重写。

四名志愿者重写了三项贡献,他们从未审查过他们正在重写的实现。项目维护人员为每位志愿者准备了项目的备用版本——一个省略了需要重新实现的每个补丁的版本。

另外三项贡献由 JSHint 项目维护人员重写。其他维护人员验证了他的工作的独特性。

在所有情况下,项目现有的自动化测试都验证了新实现的正确性(因为如上所述,其许可不受更改)。

完成

完成此工作后,JSHint 项目中的每一行代码都已获得其贡献者的许可,可以使用 MIT “Expat”许可证进行许可。“替代历史”在名为 relicensing-2020 的 Git 标签中可用。

从 2.12.0 版本开始,JSHint 是一个自由软件项目。

[1] https://gnu.ac.cn/licenses/license-list.en.html#JSON [2] 同上 [3] https://open-source.org.cn/licenses/alphabetical [4] https://web.archive.org/web/20110224022052/http://anton.kovalyov.net/2011/02/20/why-i-forked-jslint-to-jshint/ [5] https://gnu.ac.cn/licenses/license-list.en.html#Expat [6] http://git.eclipse.org/c/orion/org.eclipse.orion.client.git/tree/lib/jslint/jslint-2011-01-09.js [7] https://github.com/jshint/jshint/issues/1234