此页面内容来源于 JSHint 项目仓库。如果您发现错误,请 提交问题 或(更佳)提交拉取请求!
2020 年 8 月,JSHint 项目维护人员重新授权了该项目。这是多年努力的成果,在此过程中,我们非常谨慎地尊重软件许可的惯例以及所有贡献者的意图。本文档通过总结维护人员遵循的过程,证明了更改的合法性。
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] 的项目中。
2013 年,一位 JSHint 用户请求重新授权该项目[7]。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