aboutsummaryrefslogtreecommitdiff
path: root/license_type.go
diff options
context:
space:
mode:
Diffstat (limited to 'license_type.go')
-rw-r--r--license_type.go394
1 files changed, 394 insertions, 0 deletions
diff --git a/license_type.go b/license_type.go
new file mode 100644
index 0000000..6cfcbb2
--- /dev/null
+++ b/license_type.go
@@ -0,0 +1,394 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package licenseclassifier
+
+// *** NOTE: Update this file when adding a new license. You need to:
+//
+// 1. Add the canonical name to the list, and
+// 2. Categorize the license.
+
+import "github.com/google/licenseclassifier/internal/sets"
+
+// Canonical names of the licenses.
+const (
+ // The names come from the https://spdx.org/licenses website, and are
+ // also the filenames of the licenses in licenseclassifier/licenses.
+ AFL11 = "AFL-1.1"
+ AFL12 = "AFL-1.2"
+ AFL20 = "AFL-2.0"
+ AFL21 = "AFL-2.1"
+ AFL30 = "AFL-3.0"
+ AGPL10 = "AGPL-1.0"
+ AGPL30 = "AGPL-3.0"
+ Apache10 = "Apache-1.0"
+ Apache11 = "Apache-1.1"
+ Apache20 = "Apache-2.0"
+ APSL10 = "APSL-1.0"
+ APSL11 = "APSL-1.1"
+ APSL12 = "APSL-1.2"
+ APSL20 = "APSL-2.0"
+ Artistic10cl8 = "Artistic-1.0-cl8"
+ Artistic10Perl = "Artistic-1.0-Perl"
+ Artistic10 = "Artistic-1.0"
+ Artistic20 = "Artistic-2.0"
+ BCL = "BCL"
+ Beerware = "Beerware"
+ BSD2ClauseFreeBSD = "BSD-2-Clause-FreeBSD"
+ BSD2ClauseNetBSD = "BSD-2-Clause-NetBSD"
+ BSD2Clause = "BSD-2-Clause"
+ BSD3ClauseAttribution = "BSD-3-Clause-Attribution"
+ BSD3ClauseClear = "BSD-3-Clause-Clear"
+ BSD3ClauseLBNL = "BSD-3-Clause-LBNL"
+ BSD3Clause = "BSD-3-Clause"
+ BSD4Clause = "BSD-4-Clause"
+ BSD4ClauseUC = "BSD-4-Clause-UC"
+ BSDProtection = "BSD-Protection"
+ BSL10 = "BSL-1.0"
+ CC010 = "CC0-1.0"
+ CCBY10 = "CC-BY-1.0"
+ CCBY20 = "CC-BY-2.0"
+ CCBY25 = "CC-BY-2.5"
+ CCBY30 = "CC-BY-3.0"
+ CCBY40 = "CC-BY-4.0"
+ CCBYNC10 = "CC-BY-NC-1.0"
+ CCBYNC20 = "CC-BY-NC-2.0"
+ CCBYNC25 = "CC-BY-NC-2.5"
+ CCBYNC30 = "CC-BY-NC-3.0"
+ CCBYNC40 = "CC-BY-NC-4.0"
+ CCBYNCND10 = "CC-BY-NC-ND-1.0"
+ CCBYNCND20 = "CC-BY-NC-ND-2.0"
+ CCBYNCND25 = "CC-BY-NC-ND-2.5"
+ CCBYNCND30 = "CC-BY-NC-ND-3.0"
+ CCBYNCND40 = "CC-BY-NC-ND-4.0"
+ CCBYNCSA10 = "CC-BY-NC-SA-1.0"
+ CCBYNCSA20 = "CC-BY-NC-SA-2.0"
+ CCBYNCSA25 = "CC-BY-NC-SA-2.5"
+ CCBYNCSA30 = "CC-BY-NC-SA-3.0"
+ CCBYNCSA40 = "CC-BY-NC-SA-4.0"
+ CCBYND10 = "CC-BY-ND-1.0"
+ CCBYND20 = "CC-BY-ND-2.0"
+ CCBYND25 = "CC-BY-ND-2.5"
+ CCBYND30 = "CC-BY-ND-3.0"
+ CCBYND40 = "CC-BY-ND-4.0"
+ CCBYSA10 = "CC-BY-SA-1.0"
+ CCBYSA20 = "CC-BY-SA-2.0"
+ CCBYSA25 = "CC-BY-SA-2.5"
+ CCBYSA30 = "CC-BY-SA-3.0"
+ CCBYSA40 = "CC-BY-SA-4.0"
+ CDDL10 = "CDDL-1.0"
+ CDDL11 = "CDDL-1.1"
+ CommonsClause = "Commons-Clause"
+ CPAL10 = "CPAL-1.0"
+ CPL10 = "CPL-1.0"
+ eGenix = "eGenix"
+ EPL10 = "EPL-1.0"
+ EPL20 = "EPL-2.0"
+ EUPL10 = "EUPL-1.0"
+ EUPL11 = "EUPL-1.1"
+ Facebook2Clause = "Facebook-2-Clause"
+ Facebook3Clause = "Facebook-3-Clause"
+ FacebookExamples = "Facebook-Examples"
+ FreeImage = "FreeImage"
+ FTL = "FTL"
+ GPL10 = "GPL-1.0"
+ GPL20 = "GPL-2.0"
+ GPL20withautoconfexception = "GPL-2.0-with-autoconf-exception"
+ GPL20withbisonexception = "GPL-2.0-with-bison-exception"
+ GPL20withclasspathexception = "GPL-2.0-with-classpath-exception"
+ GPL20withfontexception = "GPL-2.0-with-font-exception"
+ GPL20withGCCexception = "GPL-2.0-with-GCC-exception"
+ GPL30 = "GPL-3.0"
+ GPL30withautoconfexception = "GPL-3.0-with-autoconf-exception"
+ GPL30withGCCexception = "GPL-3.0-with-GCC-exception"
+ GUSTFont = "GUST-Font-License"
+ ImageMagick = "ImageMagick"
+ IPL10 = "IPL-1.0"
+ ISC = "ISC"
+ LGPL20 = "LGPL-2.0"
+ LGPL21 = "LGPL-2.1"
+ LGPL30 = "LGPL-3.0"
+ LGPLLR = "LGPLLR"
+ Libpng = "Libpng"
+ Lil10 = "Lil-1.0"
+ LinuxOpenIB = "Linux-OpenIB"
+ LPL102 = "LPL-1.02"
+ LPL10 = "LPL-1.0"
+ LPPL13c = "LPPL-1.3c"
+ MIT = "MIT"
+ MPL10 = "MPL-1.0"
+ MPL11 = "MPL-1.1"
+ MPL20 = "MPL-2.0"
+ MSPL = "MS-PL"
+ NCSA = "NCSA"
+ NPL10 = "NPL-1.0"
+ NPL11 = "NPL-1.1"
+ OFL11 = "OFL-1.1"
+ OpenSSL = "OpenSSL"
+ OpenVision = "OpenVision"
+ OSL10 = "OSL-1.0"
+ OSL11 = "OSL-1.1"
+ OSL20 = "OSL-2.0"
+ OSL21 = "OSL-2.1"
+ OSL30 = "OSL-3.0"
+ PHP301 = "PHP-3.01"
+ PHP30 = "PHP-3.0"
+ PIL = "PIL"
+ PostgreSQL = "PostgreSQL"
+ Python20complete = "Python-2.0-complete"
+ Python20 = "Python-2.0"
+ QPL10 = "QPL-1.0"
+ Ruby = "Ruby"
+ SGIB10 = "SGI-B-1.0"
+ SGIB11 = "SGI-B-1.1"
+ SGIB20 = "SGI-B-2.0"
+ SISSL12 = "SISSL-1.2"
+ SISSL = "SISSL"
+ Sleepycat = "Sleepycat"
+ UnicodeTOU = "Unicode-TOU"
+ UnicodeDFS2015 = "Unicode-DFS-2015"
+ UnicodeDFS2016 = "Unicode-DFS-2016"
+ Unlicense = "Unlicense"
+ UPL10 = "UPL-1.0"
+ W3C19980720 = "W3C-19980720"
+ W3C20150513 = "W3C-20150513"
+ W3C = "W3C"
+ WTFPL = "WTFPL"
+ X11 = "X11"
+ Xnet = "Xnet"
+ Zend20 = "Zend-2.0"
+ ZeroBSD = "0BSD"
+ ZlibAcknowledgement = "zlib-acknowledgement"
+ Zlib = "Zlib"
+ ZPL11 = "ZPL-1.1"
+ ZPL20 = "ZPL-2.0"
+ ZPL21 = "ZPL-2.1"
+)
+
+var (
+ // Licenses Categorized by Type
+
+ // restricted - Licenses in this category require mandatory source
+ // distribution if we ships a product that includes third-party code
+ // protected by such a license.
+ restrictedType = sets.NewStringSet(
+ BCL,
+ CCBYND10,
+ CCBYND20,
+ CCBYND25,
+ CCBYND30,
+ CCBYND40,
+ CCBYSA10,
+ CCBYSA20,
+ CCBYSA25,
+ CCBYSA30,
+ CCBYSA40,
+ GPL10,
+ GPL20,
+ GPL20withautoconfexception,
+ GPL20withbisonexception,
+ GPL20withclasspathexception,
+ GPL20withfontexception,
+ GPL20withGCCexception,
+ GPL30,
+ GPL30withautoconfexception,
+ GPL30withGCCexception,
+ LGPL20,
+ LGPL21,
+ LGPL30,
+ NPL10,
+ NPL11,
+ OSL10,
+ OSL11,
+ OSL20,
+ OSL21,
+ OSL30,
+ QPL10,
+ Sleepycat,
+ )
+
+ // reciprocal - These licenses allow usage of software made available
+ // under such licenses freely in *unmodified* form. If the third-party
+ // source code is modified in any way these modifications to the
+ // original third-party source code must be made available.
+ reciprocalType = sets.NewStringSet(
+ APSL10,
+ APSL11,
+ APSL12,
+ APSL20,
+ CDDL10,
+ CDDL11,
+ CPL10,
+ EPL10,
+ EPL20,
+ FreeImage,
+ IPL10,
+ MPL10,
+ MPL11,
+ MPL20,
+ Ruby,
+ )
+
+ // notice - These licenses contain few restrictions, allowing original
+ // or modified third-party software to be shipped in any product
+ // without endangering or encumbering our source code. All of the
+ // licenses in this category do, however, have an "original Copyright
+ // notice" or "advertising clause", wherein any external distributions
+ // must include the notice or clause specified in the license.
+ noticeType = sets.NewStringSet(
+ AFL11,
+ AFL12,
+ AFL20,
+ AFL21,
+ AFL30,
+ Apache10,
+ Apache11,
+ Apache20,
+ Artistic10cl8,
+ Artistic10Perl,
+ Artistic10,
+ Artistic20,
+ BSL10,
+ BSD2ClauseFreeBSD,
+ BSD2ClauseNetBSD,
+ BSD2Clause,
+ BSD3ClauseAttribution,
+ BSD3ClauseClear,
+ BSD3ClauseLBNL,
+ BSD3Clause,
+ BSD4Clause,
+ BSD4ClauseUC,
+ BSDProtection,
+ CCBY10,
+ CCBY20,
+ CCBY25,
+ CCBY30,
+ CCBY40,
+ FTL,
+ ISC,
+ ImageMagick,
+ Libpng,
+ Lil10,
+ LinuxOpenIB,
+ LPL102,
+ LPL10,
+ MSPL,
+ MIT,
+ NCSA,
+ OpenSSL,
+ PHP301,
+ PHP30,
+ PIL,
+ Python20,
+ Python20complete,
+ PostgreSQL,
+ SGIB10,
+ SGIB11,
+ SGIB20,
+ UnicodeDFS2015,
+ UnicodeDFS2016,
+ UnicodeTOU,
+ UPL10,
+ W3C19980720,
+ W3C20150513,
+ W3C,
+ X11,
+ Xnet,
+ Zend20,
+ ZlibAcknowledgement,
+ Zlib,
+ ZPL11,
+ ZPL20,
+ ZPL21,
+ )
+
+ // permissive - These licenses can be used in (relatively rare) cases
+ // where third-party software is under a license (not "Public Domain"
+ // or "free for any use" like 'unencumbered') that is even more lenient
+ // than a 'notice' license. Use the 'permissive' license type when even
+ // a copyright notice is not required for license compliance.
+ permissiveType = sets.NewStringSet()
+
+ // unencumbered - Licenses that basically declare that the code is "free for any use".
+ unencumberedType = sets.NewStringSet(
+ CC010,
+ Unlicense,
+ ZeroBSD,
+ )
+
+ // byexceptiononly - Licenses that are incompatible with all (or most)
+ // uses in combination with our source code. Commercial third-party
+ // packages that are purchased and licensed only for a specific use
+ // fall into this category.
+ byExceptionOnlyType = sets.NewStringSet(
+ Beerware,
+ OFL11,
+ OpenVision,
+ )
+
+ // forbidden - Licenses that are forbidden to be used.
+ forbiddenType = sets.NewStringSet(
+ AGPL10,
+ AGPL30,
+ CCBYNC10,
+ CCBYNC20,
+ CCBYNC25,
+ CCBYNC30,
+ CCBYNC40,
+ CCBYNCND10,
+ CCBYNCND20,
+ CCBYNCND25,
+ CCBYNCND30,
+ CCBYNCND40,
+ CCBYNCSA10,
+ CCBYNCSA20,
+ CCBYNCSA25,
+ CCBYNCSA30,
+ CCBYNCSA40,
+ CommonsClause,
+ Facebook2Clause,
+ Facebook3Clause,
+ FacebookExamples,
+ WTFPL,
+ )
+
+ // LicenseTypes is a set of the types of licenses Google recognizes.
+ LicenseTypes = sets.NewStringSet(
+ "restricted",
+ "reciprocal",
+ "notice",
+ "permissive",
+ "unencumbered",
+ "by_exception_only",
+ )
+)
+
+// LicenseType returns the type the license has.
+func LicenseType(name string) string {
+ switch {
+ case restrictedType.Contains(name):
+ return "restricted"
+ case reciprocalType.Contains(name):
+ return "reciprocal"
+ case noticeType.Contains(name):
+ return "notice"
+ case permissiveType.Contains(name):
+ return "permissive"
+ case unencumberedType.Contains(name):
+ return "unencumbered"
+ case forbiddenType.Contains(name):
+ return "FORBIDDEN"
+ }
+ return ""
+}