Skip to content

Instantly share code, notes, and snippets.

@vincentarelbundock
Last active August 11, 2025 19:24
Show Gist options
  • Save vincentarelbundock/8a3ce1486da8aaca62c239daa49c1408 to your computer and use it in GitHub Desktop.
Save vincentarelbundock/8a3ce1486da8aaca62c239daa49c1408 to your computer and use it in GitHub Desktop.
spdx2r
Name: GNU General Public License
Abbrev: GPL
Version: 2
SSS: GPL-2
OSI: open (https://opensource.org/licenses/gpl-license)
FSF: free (https://www.gnu.org/licenses/license-list.html#GPLv2)
File: share/licenses/GPL-2
URL: https://www.r-project.org/Licenses/GPL-2
FOSS: yes
SPDX: GPL-2.0-only
Name: GNU General Public License
Abbrev: GPL
Version: 3
SSS: GPL-3
OSI: open (https://opensource.org/licenses/gpl-license)
FSF: free (https://www.gnu.org/licenses/license-list.html#GNUGPL)
File: share/licenses/GPL-3
URL: https://www.r-project.org/Licenses/GPL-3
FOSS: yes
Extensible: yes
SPDX: GPL-3.0-only
Name: GNU Library General Public License
Abbrev: LGPL
Version: 2
SSS: LGPL-2
OSI: open (https://opensource.org/license/lgpl-2-0)
FSF: free
File: share/licenses/LGPL-2
URL: https://www.r-project.org/Licenses/LGPL-2
FOSS: yes
SPDX: LGPL-2.0-only
Name: GNU Lesser General Public License
Abbrev: LGPL
Version: 2.1
SSS: LGPL-2.1
OSI: open (https://opensource.org/licenses/lgpl-license)
FSF: free (https://www.gnu.org/licenses/license-list.html#LGPLv2.1)
File: share/licenses/LGPL-2.1
URL: https://www.r-project.org/Licenses/LGPL-2.1
FOSS: yes
SPDX: LGPL-2.1-only
Name: GNU Lesser General Public License
Abbrev: LGPL
Version: 3
SSS: LGPL-3
OSI: open (https://opensource.org/licenses/lgpl-license)
FSF: free (https://www.gnu.org/licenses/license-list.html#LGPL)
File: share/licenses/LGPL-3
URL: https://www.r-project.org/Licenses/LGPL-3
FOSS: yes
Extensible: yes
SPDX: LGPL-3.0-only
Name: GNU Affero General Public License
Abbrev: AGPL
Version: 3
SSS: AGPL-3
FSF: free (https://www.gnu.org/licenses/license-list.html#AGPLv3.0)
OSI: open (https://opensource.org/licenses/AGPL-3.0)
File: share/licenses/AGPL-3
URL: https://www.r-project.org/Licenses/AGPL-3
FOSS: yes
Extensible: yes
SPDX: AGPL-3.0-only
Name: Apache License
Version: 1.1
OSI: open but superseded (https://opensource.org/licenses/apachepl-1.1)
FSF: free (https://www.gnu.org/licenses/license-list.html#apache1.1)
URL: https://www.apache.org/LICENSE-1.1
FOSS: yes
SPDX: Apache-1.1
Name: Apache License
Version: 2.0
OSI: open (https://opensource.org/licenses/Apache-2.0)
FSF: free (https://www.gnu.org/licenses/license-list.html#apache2)
File: share/licenses/Apache-2.0
URL: https://www.r-project.org/Licenses/Apache-2.0
FOSS: yes
SPDX: Apache-2.0
Name: Artistic License
Version: 1.0
SSS: Artistic-1.0
OSI: open but superseded (https://opensource.org/licenses/artistic-license-1.0)
FSF: non_free (https://www.gnu.org/licenses/license-list.html#ArtisticLicense)
URL: https://www.r-project.org/Licenses/Artistic-1.0
FOSS: no
Restricts_use: no
SPDX: Artistic-1.0
Name: Artistic License
Version: 2.0
SSS: Artistic-2.0
OSI: open (https://opensource.org/licenses/Artistic-2.0)
FSF: free (https://www.gnu.org/licenses/license-list.html#ArtisticLicense2)
File: share/licenses/Artistic-2.0
URL: https://www.r-project.org/Licenses/Artistic-2.0
FOSS: yes
SPDX: Artistic-2.0
Name: CeCILL
Abbrev: CeCILL
Version: 2
FSF: free (https://www.gnu.org/licenses/license-list.html#CeCILL)
URL: https://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
FOSS: yes
SPDX: CECILL-2.0
Name: CeCILL
Abbrev: CeCILL
Version: 2.1
SSS: CECILL-2.1
OSI: open (https://opensource.org/license/cecill-2-1/)
URL: https://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
FOSS: yes
SPDX: CECILL-2.1
Name: FreeBSD License
Abbrev: FreeBSD
OSI: open (https://opensource.org/licenses/BSD-2-Clause)
FSF: free (https://www.gnu.org/licenses/license-list.html#FreeBSD)
URL: https://www.freebsd.org/copyright/freebsd-license.html
FOSS: yes
SPDX: BSD-2-Clause-FreeBSD
Name: MIT License
Abbrev: MIT
OSI: open (https://opensource.org/licenses/MIT)
File: share/licenses/MIT
URL: https://opensource.org/licenses/mit-license.php
FOSS: yes
Extensible: yes
Note: this is a template, needs + file LICENSE
SPDX: MIT
Name: Modified BSD License
Abbrev: BSD
OSI: open (https://opensource.org/licenses/BSD-3-Clause)
File: share/licenses/BSD_3_clause
FSF: free (https://www.gnu.org/licenses/license-list.html#ModifiedBSD)
URL: https://opensource.org/licenses/BSD-3-Clause
FOSS: yes
Note: do not use: use BSD_2_clause or BSD_3_clause instead
SPDX: BSD-3-Clause
Name: BSD 2-clause License
Abbrev: BSD_2_clause
OSI: open (https://opensource.org/licenses/BSD-2-Clause)
FSF: free (https://www.gnu.org/licenses/license-list.html#FreeBSD)
File: share/licenses/BSD_2_clause
URL: https://opensource.org/licenses/BSD-2-Clause
FOSS: yes
Extensible: yes
Note: this is a template, needs + file LICENSE
SPDX: BSD-2-Clause
Name: BSD 3-clause License
Abbrev: BSD_3_clause
OSI: open (https://opensource.org/licenses/BSD-3-Clause)
FSF: free (https://www.gnu.org/licenses/license-list.html#ModifiedBSD)
File: share/licenses/BSD_3_clause
URL: https://opensource.org/licenses/BSD-3-Clause
FOSS: yes
Extensible: yes
Note: this is a template, needs + file LICENSE
SPDX: BSD-3-Clause
Name: Mozilla Public License
Abbrev: MPL
Version: 1.0
OSI: open but superseded (https://opensource.org/licenses/mozilla1.0)
FSF: free
URL: http://website-archive.mozilla.org/www.mozilla.org/mpl/MPL/1.0/
FOSS: yes
SPDX: MPL-1.0
Name: Mozilla Public License
Abbrev: MPL
Version: 1.1
OSI: open but superseded (https://opensource.org/licenses/MPL-1.1)
FSF: free (https://www.gnu.org/licenses/license-list.html#MPL)
URL: https://www.mozilla.org/en-US/MPL/1.1/
FOSS: yes
SPDX: MPL-1.1
Name: Mozilla Public License
Abbrev: MPL
Version: 2.0
OSI: open (https://opensource.org/licenses/MPL-2.0)
FSF: free (https://www.gnu.org/licenses/license-list.html#MPL-2.0)
URL: https://www.mozilla.org/en-US/MPL/2.0/
FOSS: yes
SPDX: MPL-2.0
Name: Common Public License
Abbrev: CPL
Version: 1.0
FSF: free (https://www.gnu.org/licenses/license-list.html#CommonPublicLicense10)
OSI: open but superseded (https://opensource.org/licenses/cpl1.0)
URL: https://www.eclipse.org/legal/cpl-v10.html
FOSS: yes
SPDX: CPL-1.0
Name: Eclipse Public License
Version: 1.0
Abbrev: EPL
FSF: free (https://www.gnu.org/licenses/license-list.html#EPL)
OSI: open (https://opensource.org/licenses/EPL-1.0)
URL: https://www.eclipse.org/legal/epl-v10.html
FOSS: yes
SPDX: EPL-1.0
Name: Lucent Public License
Version: 1.02
FSF: free (https://www.gnu.org/licenses/license-list.html#lucent102)
OSI: open (https://opensource.org/licenses/LPL-1.02)
URL: https://opensource.org/licenses/lucent1.02.php
FOSS: yes
SPDX: LPL-1.02
Name: European Union Public License
Version: 1.1
Abbrev: EUPL
FSF: free (https://www.gnu.org/licenses/license-list.html#EUPL)
OSI: open but superseded (https://opensource.org/licenses/EUPL-1.1)
URL: https://joinup.ec.europa.eu/software/page/eupl
FOSS: yes
SPDX: EUPL-1.1
Name: European Union Public License
Version: 1.2
Abbrev: EUPL
FSF: free (https://www.gnu.org/licenses/license-list.html#EUPL)
OSI: open (https://opensource.org/licenses/EUPL-1.2)
URL: https://joinup.ec.europa.eu/software/page/eupl
FOSS: yes
SPDX: EUPL-1.2
Name: Creative Commons Attribution 4.0 International License
Abbrev: CC BY 4.0
FSF: free (https://www.gnu.org/licenses/license-list.html#ccby)
URL: https://creativecommons.org/licenses/by/4.0
FOSS: yes
Extensible: yes
SPDX: CC-BY-4.0
Name: Creative Commons Attribution-ShareAlike 4.0 International License
Abbrev: CC BY-SA 4.0
FSF: free (https://www.gnu.org/licenses/license-list.html#ccbysa)
URL: https://creativecommons.org/licenses/by-sa/4.0
FOSS: yes
Extensible: yes
SPDX: CC-BY-SA-4.0
Name: Creative Commons Attribution-NonCommercial 4.0 International License
Abbrev: CC BY-NC 4.0
FSF: non_free (https://www.gnu.org/licenses/license-list.html#CC-BY-NC)
URL: https://creativecommons.org/licenses/by-nc/4.0
FOSS: no
Extensible: yes
Restricts_use: yes
SPDX: CC-BY-NC-4.0
Name: Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License
Abbrev: CC BY-NC-SA 4.0
FSF: non_free (https://www.gnu.org/licenses/license-list.html#CC-BY-NC)
URL: https://creativecommons.org/licenses/by-nc-sa/4.0
FOSS: no
Extensible: yes
Restricts_use: yes
SPDX: CC-BY-NC-SA-4.0
Name: Creative Commons Attribution-NonCommercial-NoDerivs 4.0 International License
Abbrev: CC BY-NC-ND 4.0
FSF: non_free (https://www.gnu.org/licenses/license-list.html#CC-BY-NC)
URL: https://creativecommons.org/licenses/by-nc-nd/4.0
FOSS: no
Extensible: yes
Restricts_use: yes
SPDX: CC-BY-NC-ND-4.0
Name: CC0
FSF: free (https://www.gnu.org/licenses/license-list.html#CC0)
OSI: NA (https://opensource.org/faq#cc-zero)
File: CC0-1.0
URL: https://www.r-project.org/Licenses/CC0-1.0
FOSS: yes
SPDX: CC0-1.0
Name: zlib License
Abbrev: Zlib
FSF: free (https://www.gnu.org/licenses/license-list.html#ZLib)
OSI: open (https://opensource.org/licenses/Zlib)
URL: http://www.gzip.org/zlib/zlib_license.html
FOSS: yes
SPDX: Zlib
Name: Boost Software License
Version: 1.0
Abbrev: BSL
FSF: free (https://www.gnu.org/licenses/license-list.html#boost)
OSI: open (https://opensource.org/licenses/BSL-1.0)
URL: http://www.boost.org/LICENSE_1_0.txt
FOSS: yes
SPDX: BSL-1.0
spdx2r <- function(spdx) {
if (!is.character(spdx)) {
stop("Input must be character")
}
db <- read.dcf(file.path(R.home("share"), "licenses", "license.db"))
# output = basename(File) if available, else SPDX identifier
r_format <- ifelse(!is.na(db[, "File"]), basename(db[, "File"]), db[, "SPDX"])
names(r_format) <- db[, "SPDX"]
convert_single <- function(single_id) {
single_id <- toupper(trimws(single_id))
if (single_id == "" || is.na(single_id)) {
return(NA_character_)
}
single_id <- sub("-only", "", single_id)
# Return if perfect match to license.db
idx <- match(toupper(single_id), toupper(names(r_format)))
if (!is.na(idx)) {
return(r_format[idx])
}
# -or-later + license.db does not always retain trailing zeros
if (grepl("-or-later$", single_id, ignore.case = TRUE)) {
base_id <- sub("-or-later", "", single_id, ignore.case = TRUE)
base_id_nozero <- c(base_id, sub("-(\\d)\\.0", "-\\1", base_id))
full_id <- sub(
pattern = "-(\\d)\\.0-or-later", replacement = " (>= \\1)",
x = single_id, ignore.case = TRUE)
full_id <- sub(
pattern = "-(\\d\\.\\d)-or-later", replacement = " (>= \\1)",
x = full_id, ignore.case = TRUE)
if (any(toupper(base_id_nozero) %in% toupper(r_format))) {
return(full_id)
}
}
return(NA_character_)
}
convert_compound <- function(compound_id) {
compound_id <- trimws(compound_id)
# OR -> |
if (grepl(" OR ", compound_id, ignore.case = TRUE)) {
parts <- strsplit(compound_id, " [Oo][Rr] ", perl = TRUE)[[1]]
converted_parts <- sapply(parts, convert_single, USE.NAMES = FALSE)
if (any(is.na(converted_parts))) {
return(NA_character_)
}
return(paste(converted_parts, collapse = " | "))
}
return(convert_single(compound_id))
}
result <- sapply(spdx, convert_compound, USE.NAMES = FALSE)
names(result) <- NULL
return(result)
}
# Test 1: Main example from GitHub issue
stopifnot(identical(spdx2r("GPL-2.0-only OR GPL-3.0-only"), "GPL-2 | GPL-3"))
# Test 2: or-later functionality
stopifnot(identical(spdx2r("GPL-3.0-or-later"), "GPL (>= 3)"))
# Test 3: Single license identifiers
stopifnot(identical(spdx2r("GPL-2.0-only"), "GPL-2"))
stopifnot(identical(spdx2r("GPL-3.0-only"), "GPL-3"))
stopifnot(identical(spdx2r("LGPL-2.1-only"), "LGPL-2.1"))
stopifnot(identical(spdx2r("AGPL-3.0-only"), "AGPL-3"))
stopifnot(identical(spdx2r("MIT"), "MIT"))
stopifnot(identical(spdx2r("Apache-2.0"), "Apache-2.0"))
stopifnot(identical(spdx2r("BSD-3-Clause"), "BSD_3_clause"))
# Test 4: Unknown license handling
stopifnot(identical(spdx2r("UnknownLicense-1.0"), NA_character_))
# Test 5: Multiple OR expressions
stopifnot(identical(spdx2r("GPL-2.0-only OR GPL-3.0-only OR LGPL-2.1-only"), "GPL-2 | GPL-3 | LGPL-2.1"))
# Test 6: Edge cases
stopifnot(identical(spdx2r(" GPL-2.0-only "), "GPL-2")) # Whitespace trimming
stopifnot(identical(spdx2r(""), NA_character_)) # Empty string
stopifnot(identical(spdx2r(NA_character_), NA_character_)) # NA input
# Test 7: Vectorized input
vector_input <- c("GPL-2.0-only", "MIT", "UnknownLicense-1.0", "GPL-3.0-or-later")
expected_output <- c("GPL-2", "MIT", NA_character_, "GPL (>= 3)")
stopifnot(identical(spdx2r(vector_input), expected_output))
# Test 8: Additional GPL variants
stopifnot(identical(spdx2r("GPL-2.0-or-later"), "GPL (>= 2)"))
stopifnot(identical(spdx2r("LGPL-2.1-or-later"), "LGPL (>= 2.1)"))
stopifnot(identical(spdx2r("LGPL-3.0-only"), "LGPL-3"))
# Test 9: Case insensitive matching
stopifnot(identical(spdx2r("gpl-2.0-only"), "GPL-2")) # Should work - case insensitive
stopifnot(identical(spdx2r("GPL-2.0-ONLY"), "GPL-2")) # Should work - case insensitive
stopifnot(identical(spdx2r("mit"), "MIT")) # Should work - case insensitive
# Test 10: Complex OR expressions with or-later
stopifnot(identical(spdx2r("GPL-2.0-or-later OR MIT"), "GPL (>= 2) | MIT"))
cat("All tests passed\n")
spdx <- c("0BSD", "3D-Slicer-1.0", "AAL", "Abstyles", "AdaCore-doc", "Adobe-2006", "Adobe-Display-PostScript", "Adobe-Glyph", "Adobe-Utopia", "ADSL", "AFL-1.1", "AFL-1.2", "AFL-2.0", "AFL-2.1", "AFL-3.0", "Afmparse", "AGPL-1.0-only", "AGPL-1.0-or-later", "AGPL-3.0-only", "AGPL-3.0-or-later", "Aladdin", "AMD-newlib", "AMDPLPA", "AML", "AML-glslang", "AMPAS", "ANTLR-PD", "ANTLR-PD-fallback", "any-OSI", "any-OSI-perl-modules", "Apache-1.0", "Apache-1.1", "Apache-2.0", "APAFML", "APL-1.0", "App-s2p", "APSL-1.0", "APSL-1.1", "APSL-1.2", "APSL-2.0", "Arphic-1999", "Artistic-1.0", "Artistic-1.0-cl8", "Artistic-1.0-Perl", "Artistic-2.0", "Artistic-dist", "Aspell-RU", "ASWF-Digital-Assets-1.0", "ASWF-Digital-Assets-1.1", "Baekmuk", "Bahyph", "Barr", "bcrypt-Solar-Designer", "Beerware", "Bitstream-Charter", "Bitstream-Vera", "BitTorrent-1.0", "BitTorrent-1.1", "blessing", "BlueOak-1.0.0", "Boehm-GC", "Boehm-GC-without-fee", "Borceux", "Brian-Gladman-2-Clause", "Brian-Gladman-3-Clause", "BSD-1-Clause", "BSD-2-Clause", "BSD-2-Clause-Darwin", "BSD-2-Clause-first-lines", "BSD-2-Clause-Patent", "BSD-2-Clause-pkgconf-disclaimer", "BSD-2-Clause-Views" , "BSD-3-Clause", "BSD-3-Clause-acpica", "BSD-3-Clause-Attribution", "BSD-3-Clause-Clear", "BSD-3-Clause-flex", "BSD-3-Clause-HP", "BSD-3-Clause-LBNL", "BSD-3-Clause-Modification", "BSD-3-Clause-No-Military-Li cense", "BSD-3-Clause-No-Nuclear-License", "BSD-3-Clause-No-Nuclear-License-2014", "BSD-3-Clause-No-Nuclear-Warranty", "BSD-3-Clause-Open-MPI", "BSD-3-Clause-Sun", "BSD-4-Clause", "BSD-4-Clause-Shortened", "BSD-4-Clause-UC", "BSD-4.3RENO", "BSD-4.3TAHOE", "BSD-Advertising-Acknowledge ment", "BSD-Attribution-HPND-disclaimer", "BSD-Inferno-Nettverk", "BSD-Protection", "BSD-Source-beginning-file", "BSD-Source-Code", "BSD-Systemics", "BSD-Systemics-W3Works", "BSL-1.0", "BUSL-1.1", "bzip2-1.0.6", "C-UDA-1.0", "CAL-1.0", "CAL-1.0-Combined-Work-Exception", "Caldera", "Caldera-no-preamble", "Catharon", "CATOSL-1.1", "CC-BY-1.0", "CC-BY-2.0", "CC-BY-2.5", "CC-BY-2.5-AU", "CC-BY-3.0", "CC-BY-3.0-AT", "CC-BY-3.0-AU", "CC-BY-3.0-DE", "CC-BY-3.0-IGO", "CC-BY-3.0-NL", "CC-BY-3.0-US", "CC-BY-4.0", "CC-BY-NC-1.0", "CC-BY-NC-2.0", "CC-BY-NC-2.5", "CC-BY-NC-3.0", "CC-BY-NC-3.0-DE", "CC-BY-NC-4.0", "CC-BY-NC-ND-1.0", "CC-BY-NC-ND-2.0", "CC-BY-NC-ND-2.5", "CC-BY-NC-ND-3.0", "CC-BY-NC-ND-3.0-DE", "CC-BY-NC-ND-3.0-IGO", "CC-BY-NC-ND-4.0", "CC-BY-NC-SA-1.0", "CC-BY-NC-SA-2.0", "CC-BY-NC-SA-2.0-DE", "CC-BY-NC-SA-2.0-F R", "CC-BY-NC-SA-2.0-UK", "CC-BY-NC-SA-2.5", "CC-BY-NC-SA-3.0", "CC-BY-NC-SA-3.0-D E", "CC-BY-NC-SA-3.0-IGO", "CC-BY-NC-SA-4.0", "CC-BY-ND-1.0", "CC-BY-ND-2.0", "CC-BY-ND-2.5", "CC-BY-ND-3.0", "CC-BY-ND-3.0-DE", "CC-BY-ND-4.0", "CC-BY-SA-1.0", "CC-BY-SA-2.0", "CC-BY-SA-2.0-UK", "CC-BY-SA-2.1-JP", "CC-BY-SA-2.5", "CC-BY-SA-3.0", "CC-BY-SA-3.0-AT", "CC-BY-SA-3.0-DE", "CC-BY-SA-3.0-IGO", "CC-BY-SA-4.0", "CC-PDDC", "CC-PDM-1.0", "CC-SA-1.0", "CC0-1.0", "CDDL-1.0", "CDDL-1.1", "CDL-1.0", "CDLA-Permissive-1. 0", "CDLA-Permissive-2.0", "CDLA-Sharing-1.0", "CECILL-1.0", "CECILL-1.1", "CECILL-2.0", "CECILL-2.1", "CECILL-B", "CECILL-C", "CERN-OHL-1.1", "CERN-OHL-1.2", "CERN-OHL-P-2.0", "CERN-OHL-S-2.0", "CERN-OHL-W-2.0", "CFITSIO", "check-cvs", "checkmk", "ClArtistic", "Clips", "CMU-Mach", "CMU-Mach-nodoc", "CNRI-Jython", "CNRI-Python", "CNRI-Python-GPL-Compatible", "COIL-1.0", "Community-Spec-1.0", "Condor-1.1", "copyleft-next-0.3.0", "copyleft-next-0.3.1", "Cornell-Lossless-JPEG", "CPAL-1.0", "CPL-1.0", "CPOL-1.02", "Cronyx", "Crossword", "CryptoSwift", "CrystalStacker", "CUA-OPL-1.0", "Cube", "curl", "cve-tou", "D-FSL-1.0", "DEC-3-Clause", "diffmark", "DL-DE-BY-2.0", "DL-DE-ZERO-2.0", "DOC", "DocBook-DTD", "DocBook-Schema", "DocBook-Stylesheet", "DocBook-XML", "Dotseqn", "DRL-1.0", "DRL-1.1", "DSDP", "dtoa", "dvipdfm", "ECL-1.0", "ECL-2.0", "EFL-1.0", "EFL-2.0", "eGenix", "Elastic-2.0", "Entessa", "EPICS", "EPL-1.0", "EPL-2.0", "ErlPL-1.1", "etalab-2.0", "EUDatagrid", "EUPL-1.0", "EUPL-1.1", "EUPL-1.2", "Eurosym", "Fair", "FBM", "FDK-AAC", "Ferguson-Twofish", "Frameworx-1.0", "FreeBSD-DOC", "FreeImage", "FSFAP", "FSFAP-no-warranty-disclaimer", "FSFUL", "FSFULLR", "FSFULLRSD", "FSFULLRWD", "FSL-1.1-ALv2", "FSL-1.1-MIT", "FTL", "Furuseth", "fwlw", "Game-Programming-Gems", "GCR-docs", "GD", "generic-xts", "GFDL-1.1-invariants-only", "GFDL-1.1-invariants-or-later ", "GFDL-1.1-no-invariants-only", "GFDL-1.1-no-invariants-or-later", "GFDL-1.1-only", "GFDL-1.1-or-later", "GFDL-1.2-invariants-only", "GFDL-1.2-invariants-or-later", "GFDL-1.2-no-invariants-only", "GFDL-1.2-no-invariants-or-later", "GFDL-1.2-only", "GFDL-1.2-or-later", "GFDL-1.3-invariants-only", "GFDL-1.3-invariants-or-later", "GFDL-1.3-no-invar iants-only", "GFDL-1.3-no-invariants-or-later", "GFDL-1.3-only", "GFDL-1.3-or-later", "Giftware", "GL2PS", "Glide", "Glulxe", "GLWTPL", "gnuplot", "GPL-1.0-only", "GPL-1.0-or-later", "GPL-2.0-only", "GPL-2.0-or-later", "GPL-3.0-only", "GPL-3.0-or-later", "Graphics-Gems", "gSOAP-1.3b", "gtkbook", "Gutmann", "HaskellReport", "HDF5", "hdparm", "HIDAPI", "Hippocratic-2.1", "HP-1986", "HP-1989", "HPND", "HPND-DEC", "HPND-doc", "HPND-doc-sell", "HPND-export-US", "HPND-export-US-acknowledgement ", "HPND-export-US-modify", "HPND-export2-US", "HPND-Fenneberg-Livingston", "HPND-INRIA-IMAG", "HPND-Intel", "HPND-Kevlin-Henney", "HPND-Markus-Kuhn", "HPND-merchantability-variant", "HPND-MIT-disclaimer", "HPND-Netrek", "HPND-Pbmplus", "HPND-sell-MIT-disclaimer-xserver", "HPND-sell-regexpr", "HPND-sell-variant", "HPND-sell-variant-MIT-disclaimer", "HPND-sell-variant-MI T-disclaimer-rev", "HPND-UC", "HPND-UC-export-US", "HTMLTIDY", "IBM-pibs", "ICU", "IEC-Code-Components-EULA", "IJG", "IJG-short", "ImageMagick", "iMatix", "Imlib2", "Info-ZIP", "Inner-Net-2.0", "InnoSetup", "Intel", "Intel-ACPI", "Interbase-1.0", "IPA", "IPL-1.0", "ISC", "ISC-Veillard", "Jam", "JasPer-2.0", "jove", "JPL-image", "JPNIC", "JSON", "Kastrup", "Kazlib", "Knuth-CTAN", "LAL-1.2", "LAL-1.3", "Latex2e", "Latex2e-translated-notice", "Leptonica", "LGPL-2.0-only", "LGPL-2.0-or-later", "LGPL-2.1-only", "LGPL-2.1-or-later", "LGPL-3.0-only", "LGPL-3.0-or-later", "LGPLLR", "Libpng", "libpng-1.6.35", "libpng-2.0", "libselinux-1.0", "libtiff", "libutil-David-Nugent", "LiLiQ-P-1.1", "LiLiQ-R-1.1", "LiLiQ-Rplus-1.1", "Linux-man-pages-1-para", "Linux-man-pages-c opyleft", "Linux-man-pages-copyleft-2-para", "Linux-man-pages-copyleft-var", "Linux-OpenIB", "LOOP", "LPD-document", "LPL-1.0", "LPL-1.02", "LPPL-1.0", "LPPL-1.1", "LPPL-1.2", "LPPL-1.3a", "LPPL-1.3c", "lsof", "Lucida-Bitmap-Fonts", "LZMA-SDK-9.11-to-9.20", "LZMA-SDK-9.22", "Mackerras-3-Clause", "Mackerras-3-Clause-acknowledgment", "magaz", "mailprio", "MakeIndex", "man2html", "Martin-Birgmeier", "McPhee-slideshow", "metamail", "Minpack", "MIPS", "MirOS", "MIT", "MIT-0", "MIT-advertising", "MIT-Click", "MIT-CMU", "MIT-enna", "MIT-feh", "MIT-Festival", "MIT-Khronos-old", "MIT-Modern-Variant", "MIT-open-group", "MIT-testregex", "MIT-Wu", "MITNFA", "MMIXware", "Motosoto", "MPEG-SSG", "mpi-permissive", "mpich2", "MPL-1.0", "MPL-1.1", "MPL-2.0", "MPL-2.0-no-copyleft-exception", "mplus", "MS-LPL", "MS-PL", "MS-RL", "MTLL", "MulanPSL-1.0", "MulanPSL-2.0", "Multics", "Mup", "NAIST-2003", "NASA-1.3", "Naumen", "NBPL-1.0", "NCBI-PD", "NCGL-UK-2.0", "NCL", "NCSA", "NetCDF", "Newsletr", "NGPL", "ngrep", "NICTA-1.0", "NIST-PD", "NIST-PD-fallback", "NIST-Software", "NLOD-1.0", "NLOD-2.0", "NLPL", "Nokia", "NOSL", "Noweb", "NPL-1.0", "NPL-1.1", "NPOSL-3.0", "NRL", "NTIA-PD", "NTP", "NTP-0", "O-UDA-1.0", "OAR", "OCCT-PL", "OCLC-2.0", "ODbL-1.0", "ODC-By-1.0", "OFFIS", "OFL-1.0", "OFL-1.0-no-RFN", "OFL-1.0-RFN", "OFL-1.1", "OFL-1.1-no-RFN", "OFL-1.1-RFN", "OGC-1.0", "OGDL-Taiwan-1.0", "OGL-Canada-2.0", "OGL-UK-1.0", "OGL-UK-2.0", "OGL-UK-3.0", "OGTSL", "OLDAP-1.1", "OLDAP-1.2", "OLDAP-1.3", "OLDAP-1.4", "OLDAP-2.0", "OLDAP-2.0.1", "OLDAP-2.1", "OLDAP-2.2", "OLDAP-2.2.1", "OLDAP-2.2.2", "OLDAP-2.3", "OLDAP-2.4", "OLDAP-2.5", "OLDAP-2.6", "OLDAP-2.7", "OLDAP-2.8", "OLFL-1.3", "OML", "OpenPBS-2.3", "OpenSSL", "OpenSSL-standalone" , "OpenVision", "OPL-1.0", "OPL-UK-3.0", "OPUBL-1.0", "OSET-PL-2.1", "OSL-1.0", "OSL-1.1", "OSL-2.0", "OSL-2.1", "OSL-3.0", "PADL", "Parity-6.0.0", "Parity-7.0.0", "PDDL-1.0", "PHP-3.0", "PHP-3.01", "Pixar", "pkgconf", "Plexus", "pnmstitch", "PolyForm-Noncommercial-1.0.0", "PolyForm-Small-Business-1.0.0", "PostgreSQL", "PPL", "PSF-2.0", "psfrag", "psutils", "Python-2.0", "Python-2.0.1", "python-ldap", "Qhull", "QPL-1.0", "QPL-1.0-INRIA-2004", "radvd", "Rdisc", "RHeCos-1.1", "RPL-1.1", "RPL-1.5", "RPSL-1.0", "RSA-MD", "RSCPL", "Ruby", "Ruby-pty", "SAX-PD", "SAX-PD-2.0", "Saxpath", "SCEA", "SchemeReport", "Sendmail", "Sendmail-8.23", "Sendmail-Open-Source-1.1", "SGI-B-1.0", "SGI-B-1.1", "SGI-B-2.0", "SGI-OpenGL", "SGP4", "SHL-0.5", "SHL-0.51", "SimPL-2.0", "SISSL", "SISSL-1.2", "SL", "Sleepycat", "SMAIL-GPL", "SMLNJ", "SMPPL", "SNIA", "snprintf", "SOFA", "softSurfer", "Soundex", "Spencer-86", "Spencer-94", "Spencer-99", "SPL-1.0", "ssh-keyscan", "SSH-OpenSSH", "SSH-short", "SSLeay-standalone", "SSPL-1.0", "SugarCRM-1.1.3", "SUL-1.0", "Sun-PPP", "Sun-PPP-2000", "SunPro", "SWL", "swrule", "Symlinks", "TAPR-OHL-1.0", "TCL", "TCP-wrappers", "TermReadKey", "TGPPL-1.0", "ThirdEye", "threeparttable", "TMate", "TORQUE-1.1", "TOSL", "TPDL", "TPL-1.0", "TrustedQSL", "TTWL", "TTYP0", "TU-Berlin-1.0", "TU-Berlin-2.0", "Ubuntu-font-1.0", "UCAR", "UCL-1.0", "ulem", "UMich-Merit", "Unicode-3.0", "Unicode-DFS-2015", "Unicode-DFS-2016", "Unicode-TOU", "UnixCrypt", "Unlicense", "Unlicense-libtelnet", "Unlicense-libwhirlpool", "UPL-1.0", "URT-RLE", "Vim", "VOSTROM", "VSL-1.0", "W3C", "W3C-19980720", "W3C-20150513", "w3m", "Watcom-1.0", "Widget-Workshop", "Wsuipa", "WTFPL", "wwl", "X11", "X11-distribute-modifications-variant", "X11-swapped", "Xdebug-1.03", "Xerox", "Xfig", "XFree86-1.1", "xinetd", "xkeyboard-config-Zin oviev", "xlock", "Xnet", "xpp", "XSkat", "xzoom", "YPL-1.0", "YPL-1.1", "Zed", "Zeeff", "Zend-2.0", "Zimbra-1.3", "Zimbra-1.4", "Zlib", "zlib-acknowledgement", "ZPL-1.1", "ZPL-2.0", "ZPL-2.1")
spdx <- read.csv("license_spdx.csv")$Identifier
results <- data.frame( SPDX = spdx, R = spdx2r(spdx)) |>
sort_by(~R)
cat(sum(is.na(results$R)), "licenses not found by spdx2r\n")
print(na.omit(results))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment