-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a683c10
commit d65513c
Showing
5 changed files
with
209 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
8accbaed,[email protected],DOCS-Replace-Private-Use-Area-character,Non-substantive | ||
862f00b0,[email protected],Do-not-assume-JSON-block-when-mapping-array,"(signed, just erroneously switched e-mail address and name in form)" | ||
e8137dfa,[email protected],Issue-350-Make-shadow-check-for-outer-scopes-as-well,granted permission via a GPG-signed e-mail sent to project maintainers | ||
e2c876d5,[email protected],Fixed-1243-Detect-comparisons-with-typeof-x-and-check-the-other-operand,granted permission via a GPG-signed e-mail sent to project maintainers | ||
6038e4e2,[email protected],Fixed-1253-Limit-parseInt-radix-check-to-ES3-only,"(signed, just erroneously switched e-mail address and name in form)" | ||
dd0effc7,[email protected],Fixed-1221-Add-globals-to-the-valOptions-list,Non-substantive | ||
a17ae9ed,[email protected],Fixed-1189-Support-spaces-in-global,Rewritten via e542f67722430318e9d4804d9f4089b84507b45a | ||
537dcbd4,[email protected],Fixed-1164-Add-codes-to-errors-generated-by-quit,Rewritten via 94d7f239da4b2ae300b2342af0b777a489f63765 | ||
87e3e6cc,[email protected],Fixed-1138-Count-ternary-and-or-operators-for-complexity,Rewritten via 7a5948c64b5b3937e422843c0234f7a4685bba68 and 8a205a808582579592d5301bba587894e3a824c8 | ||
66f3e4c1,[email protected],Fixed-1133-Make-shelljs-imply-node,Non-substantive | ||
88c862df,[email protected],Fixed-1109-Parse-yield-expressions,Rewritten via 6fdb4f60586fce156d62633845ca5a19417379c3 | ||
b3d054e0,[email protected],Fixed-1105-two-unrelated-bugs-with-a-parser.-See-1106-for-more-info,Rewritten via 691dbdc1970bc1f1406a0d0ab68e184a0f20ece2 | ||
88644e3d,[email protected],Fixes-1124-Add-shelljs-option,Non-substantive | ||
813de6cb,[email protected],Don-t-try-to-parse-expression-closure-bodies-as-comma-expressions,Non-substantive | ||
807db5e3,[email protected],Try-directly-setting-x.paren-from-nud-of-prefix,Rewritten via 9b8cec9a2afc5d53adb965824b42e626607d44fc | ||
72f5f371,[email protected],An-attempt-to-ignore-assigns-in-conditionals-when-in-parens,Rewritten via 9b8cec9a2afc5d53adb965824b42e626607d44fc | ||
6de20a3b,[email protected],Break-out-of-comma-expression-parsing-when-a-reserved-word-is-seen,Rewritten via 9b8cec9a2afc5d53adb965824b42e626607d44fc | ||
21b77a5e,[email protected],Update-precedence-for-expression-calls-that-cannot-include-commas,Rewritten via 9b8cec9a2afc5d53adb965824b42e626607d44fc | ||
48a0ae6a,[email protected],Use-the-new-comma-parsing-code-in-if-conditions,Rewritten via 9b8cec9a2afc5d53adb965824b42e626607d44fc | ||
2865994b,[email protected],Make-comma-an-infix-operator,Rewritten via 9b8cec9a2afc5d53adb965824b42e626607d44fc | ||
2ea9d842,[email protected],Handle-assignments-in-switch-conditions,Rewritten via 9b8cec9a2afc5d53adb965824b42e626607d44fc | ||
abbbad5e,[email protected],Slightly-cleaner-solution,Non-substantive | ||
8ccd8275,[email protected],Fix-read-of-property-use-strict-of-undefined,Non-substantive | ||
cd03a564,[email protected],Always-do-the-unstack-and-after-the-last-advance-for-good-measure,Rewritten via 08eb4e25962eb71f94c09f79b3b08288b91a7bce | ||
b4e146e2,[email protected],Add-spec-comment-for-strictness-of-ClassBody,Non-substantive | ||
6b99d1d0,[email protected],Remove-explicit-check-for-class-names-eval-or-arguments,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
dfeaebec,[email protected],Code-cleanup-reduce-diff-with-master,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
19aa8a10,[email protected],expression-should-only-warn-about-future-reserved-words-in-labels,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
9d3abc80,[email protected],Remove-unnecessary-esnextReserved-meta-tag,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
9b992412,[email protected],Mark-interface-as-an-es5-strictOnly-keyword,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
4d6f9540,[email protected],Make-only-class-bodies-strict-by-default-not-the-entire-declaration,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
75b06d7e,[email protected],Accept-class-C-extends-AssignmentExpression,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
b6190c8e,[email protected],Use-function-param-isclassdef-not-function-classdef-in-conditional,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
bbfa15d1,[email protected],Simpler-to-do-one-unstack-here-blockscope-already-has-one-stack,Rewritten via 08eb4e25962eb71f94c09f79b3b08288b91a7bce | ||
5ac92c2f,[email protected],Recognize-unused-let-at-the-global-scope,Rewritten via 08eb4e25962eb71f94c09f79b3b08288b91a7bce | ||
181f1c80,[email protected],Update-class-getter-setter-naming-error-messages-to-be-more-specific,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
c658a4c0,[email protected],Fix-error-message-calls,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
ab3a40ba,[email protected],Fix-indentation,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
955da17d,[email protected],Comments-reformat-and-add-some-more-relevant-quotes-from-the-ES6-spec,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
0235f38d,[email protected],Limit-constructor-getter-setter-checks-to-class-definitions,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
cd04ea7b,[email protected],Check-for-methods-named-prototype,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
adc4ffe6,[email protected],Require-that-constructors-be-regular-methods,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
3c5acdc7,[email protected],Treat-methods-and-static-methods-separately-in-checking-for-duplicates,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
df6e0337,[email protected],Formatting-only-add-newline,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
0ffccb97,[email protected],Remove-unused-vars,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
eacc3bd9,[email protected],Extend-strictness-to-cover-the-entire-class-definition,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
8dfa1b64,[email protected],Factor-out-common-code-for-class-statements-and-class-expressions,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
93a5120e,[email protected],Rename-function-param-classdef-to-isclassdef,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
f8869f14,[email protected],Forgot-to-make-class-bodies-strict,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
2fb046e5,[email protected],Add-classexpression-handling,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
db6bcc9d,[email protected],Handle-class-statements.-Reuses-the-code-for-handling-object-literals,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
fec1bf88,[email protected],Treat-class-extends-import-export-as-reserved-when-inESNext,Rewritten via 6759ac902928c32e0c798134abe1fbd1353ad3a3 | ||
ebe8156a,[email protected],Don-t-warn-about-uncapitalized-global-functions-used-as-constructors,Rewritten via 08eb4e25962eb71f94c09f79b3b08288b91a7bce | ||
b0f3198b,[email protected],Added-broken-test-for-Node-and-NodeFilter,Non-substantive | ||
e82c83b4,[email protected],Add-DOMParser-global-to-browser,Non-substantive | ||
56b998a9,[email protected],Add-XMLSerializer-global-to-browser,Non-substantive | ||
2a2c9461,[email protected],Add-atob-and-btoa-globals-to-browser,Non-substantive | ||
e2dc30a6,[email protected],adding-provides-to-couch-env,Non-substantive | ||
fc83cf97,[email protected],Add-missing-comma-in-members-list,Non-substantive | ||
6dd6052f,[email protected],Adding-HTML-canvas-and-video-tags-for-HTML5,Non-substantive | ||
09c1982c,[email protected],Added-predefined-browser-classes-for-various-HTML-object-types,Non-substantive | ||
f9a2dfee,[email protected],Added-predefined-browser-classes-for-various-HTML-object-types,Non-substantive | ||
b30bfa89,[email protected],Separate-check-for-trailing-whitespace-in-to-its-own-function-along-with-tests,removed via 0c0e19319b276b019d285bdfd2cfc49126abd814 | ||
38ccb0fb,[email protected],Corrected-misspelled-specigic,Non-substantive | ||
6c238084,[email protected],new-Array-expression-is-valid,Rewritten via 9c07e4c5764a564073433265edcaa3b823fbf41d | ||
7c327bf6,[email protected],Tolerate-stupid-blockless-blocks,relicensed via Eclipse | ||
5675d2c6,[email protected],http-tech.groups.yahoo.com-group-jslint_com-message-1730,relicensed via Eclipse | ||
73c2fe36,[email protected],indent,relicensed via Eclipse | ||
d7896b2c,[email protected],step_in-step_out,relicensed via Eclipse | ||
85c95acb,[email protected],for-var,relicensed via Eclipse | ||
caa8885a,[email protected],use-strict,relicensed via Eclipse | ||
1da55dd6,[email protected],http-www.yuiblog.com-blog-2010-12-14-strict-mode-is-coming-to-town,relicensed via Eclipse | ||
b6d8b251,[email protected],use-strict,relicensed via Eclipse | ||
dc4a0133,[email protected],JSON-escape-v,relicensed via Eclipse | ||
80a22526,[email protected],JSON-escape-single-quote,relicensed via Eclipse | ||
bdd35767,[email protected],k,relicensed via Eclipse | ||
6735394d,[email protected],Cleanup,relicensed via Eclipse | ||
6af839a6,[email protected],option.predef,relicensed via Eclipse | ||
c9332068,[email protected],Warn-on-new-Array-NUMBER,relicensed via Eclipse | ||
523956b6,[email protected],Removing-rhino.js-and-wsh.js.-Other-projects-are-providing-better-alternatives,relicensed via Eclipse | ||
d98f7530,[email protected],dangerous-comments,relicensed via Eclipse | ||
35ec4a53,[email protected],groove,relicensed via Eclipse | ||
d4a0702b,[email protected],More-css-colors,relicensed via Eclipse | ||
eb939e7f,[email protected],Use-charAt-instead-of-in-line-1786,relicensed via Eclipse | ||
af040fb1,[email protected],Use-.charAt-instead-of-in-line-1786,relicensed via Eclipse | ||
ca120a73,[email protected],first-commit,relicensed via Eclipse |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
# 2020 Relicensing | ||
|
||
In August of 2020, the JSHint project maintainers relicensed the project. This | ||
was the culmination of a years-long effort where great care was taken to | ||
respect the practice of software licensing and the intent of all contributors. | ||
By summarizing the process followed by the maintainers, this document | ||
demonstrates the legitimacy of the change. | ||
|
||
## Origin: JSLint | ||
|
||
The JSLint project was first made publicly available in 2002. It was | ||
distributed free-of-charge, but it was licensed with the so-called "JSON | ||
License" [1]. Code published under this license is not recognized as "free | ||
software" by the Free Software Foundation [2], nor is it recognized as "open | ||
source" by the Open Source Initiative [3] due to the following clause: | ||
|
||
> The Software shall be used for Good, not Evil. | ||
After the initial release, JSLint's creator iteratively improved it through a | ||
series of patches to its one-and-only source code file. Throughout this time, | ||
the owner was the sole contributor to the project. | ||
|
||
## The fork | ||
|
||
In 2011, another developer made improvements of their own and published the | ||
result as a new project named "JSHint" [4]. This was permissible under the | ||
terms of JSLint's license provided that the new project used the same license | ||
for the code it inherited. | ||
|
||
The second developer continued to modify JSHint and also accepted contributions | ||
from others. To promote the maintainability of the source code, new features | ||
were occasionally introduced in distinct files that were designed to be | ||
included at runtime. Referred to as "modules," these files were made available | ||
under the terms of the MIT "Expat" license [5]. As automated tests were written | ||
and included in the project, they too were licensed under MIT "Expat." | ||
|
||
In the years that followed, the JSHint project accepted direct code | ||
contributions from hundreds of developers. Many of these patches modified the | ||
original JSON-licensed file. Meanwhile, the author of JSLint permitted the | ||
Eclipse Foundation to relicense a version of JSLint using the MIT Expat license | ||
so that it could be included in their project named Orion [6]. | ||
|
||
## Injecting a FOSS starting point | ||
|
||
In 2013, a user of JSHint requested that the project be relicensed [7]. The | ||
JSHint maintainers obliged via the following procedure: | ||
|
||
1. Using the git version control software, they reverted all of the changes | ||
that were submitted to JSHint. (The resulting code was identical to JSLint | ||
at the moment JSHint was created.) | ||
2. They replaced the JSON-licensed version of the code with the MIT-licensed | ||
version published by the Eclipse Foundation. (The resulting code differed | ||
from JSLint only in the license header.) | ||
3. They re-applied all of the changes that were submitted to JSHint. | ||
|
||
While this operation created an "alternate history" which demonstrated how | ||
JSHint could have been created as a free software project, it did not | ||
necessarily reflect the intentions of the contributors. JSHint did not at that | ||
time maintain a Contributors Licensing Agreement, so the maintainers did not | ||
have the authority to modify the terms under which the JSHint-specific patches | ||
were submitted. | ||
|
||
To address this, the maintainers first introduced a Contributors Licensing | ||
Agreement ("CLA"). They ensured all subsequent contributors agreed to the terms | ||
of the agreement prior to accepting their patches. They contacted every | ||
contributor who had modified the JSON-licensed `jshint.js` file and requested | ||
they they sign the agreement. Although most responded by signing the agreement, | ||
a few refused and still others did not respond. | ||
|
||
## Rewriting | ||
|
||
A full listing of the patches whose authors have not signed the CLA is | ||
available alongside this document in the JSHint project source code repository. | ||
|
||
The maintainers reviewed each patch which could not be relicensed. Many | ||
involved non-substantive changes such as code comment amendments, spelling | ||
corrections, or the introduction of references to standardized APIs. Because | ||
these contributions did not meaningfully alter the behavior of the software, | ||
there could be no claim to ownership, so explicit permission to relicense was | ||
not necessary. | ||
|
||
However, a total of six patches included non-trivial changes to `jshint.js`. | ||
The maintainers arranged for each of these to be re-written. | ||
|
||
Three contributions were rewritten by four volunteers who never reviewed the | ||
implementation they were rewriting. The project maintainers prepared an | ||
alternate version of the project for each volunteer--one that omitted each | ||
patch that needed to be reimplemented. | ||
|
||
Three additional contributions were rewritten by a JSHint project maintainer. | ||
The uniqueness of his work was verified by the other maintainers. | ||
|
||
In all cases, correctness of the new implementation was verified by the | ||
project's existing automated tests (because as described above, their licensing | ||
was not subject to change). | ||
|
||
## Finalization | ||
|
||
With this work complete, every line of code in the JSHint project has been | ||
permitted by its contributor to be licensed using the MIT "Expat" license. The | ||
"alternate history" is available in a Git tag named `relicensing-2020`. | ||
|
||
As of version 2.12.0, JSHint is a free software project. | ||
|
||
[1] https://www.gnu.org/licenses/license-list.en.html#JSON | ||
[2] *Ibid.* | ||
[3] https://opensource.org/licenses/alphabetical | ||
[4] https://web.archive.org/web/20110224022052/http://anton.kovalyov.net/2011/02/20/why-i-forked-jslint-to-jshint/ | ||
[5] https://www.gnu.org/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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters