On Fri, Oct 13, 2017 at 03:56:55PM -0400, Richard Fontana wrote:
> I've been thinking about this because there's been some interest
> among the FSF and OSI in seeing where exactly the lists of
> FSF-recognized-as-free and OSI-approved licenses disagree.

This is definitely something that would be nice to answer
automatically.  It would be nice if the FSF had an API, but we can
scrape out a list of their free IDs using JavaScript [1].  And we can
use the OSI API to pull their list of approved licenses [2].
Comparing the two lists:

  $ diff -yW 40 <(jq -r '.[] | ascii_downcase' fsf.json | sort) <(jq -r '.[] | 
ascii_downcase' osi.json)
  academicfreelice   |    aal
  acdl               |    afl-3.0
  agpl               |    agpl-3.0
  agplv1.0           |    apl-1.0
  agplv3.0           |    apsl-2.0
  apache1            |    apache-1.1
  apache1.1          |    apache-2.0
  apache2            |    artistic-1.0
  apsl2              |    artistic-2.0
  arphic             |    bsd-2
  artisticlicense2   |    bsd-3
  berkeleydb         |    bsl-1.0
  berkleydb          |    catosl-1.1
  bittorrent         |    cddl-1.0
  boost              |    cecill-2.1
  cc0                |    cnri-python
  ccby               |    cpal-1.0
  ccbysa             |    cpl-1.0
  cddl               |    cua-opl-1.0
  cecill             |    cvw
  cecill-b           |    ecl-1.0
  cecill-c           |    ecl-2.0
  clarifiedartisti   |    efl-1.0
  clearbsd           |    efl-2.0
  commonpubliclice   |    epl-1.0
  condor             <
  cpal               <
  cryptixgeneralli   <
  dsl                <
  ecfonts            <
  ecl2.0             <
  ecos2.0            <
  ecos20             <
  eiffel             <
  epl                <
  eudatagrid              eudatagrid
  eupl               |    eupl-1.1
  expat              |    entessa
  fdl                |    fair
  fdlother           |    frameworx-1.0
  freeart            |    gpl-2.0
  freebsd            |    gpl-3.0
  freebsddl          <
  freetype           <
  gnuallpermissive   <
  gnugpl             <
  gnugplv3           <
  gnuplot            <
  gplfonts           <
  gplother           <
  gplv2              <
  hpnd                    hpnd
  ibmpl              |    ipa
  ijg                |    ipl-1.0
  imatix             <
  imlib              <
  informal           <
  intel              <
  ipafont            <
  isc                     isc
  josl               |    intel
  lgpl               |    lgpl-2.1
  lgplv2.1           |    lgpl-3.0
  lgplv3             |    lpl-1.0
  lppl-1.2           |    lpl-1.02
  lppl-1.3a          |    lppl-1.3c
  lucent102          |    liliq-p-1.1
  modifiedbsd        |    liliq-r+
  mpl                |    liliq-r-1.1
                     >    mit
                     >    mpl-1.0
                     >    mpl-1.1
  mpl-2.0                 mpl-2.0
  ms-pl                   ms-pl
  ms-rl                   ms-rl
                     >    miros
                     >    motosoto
                     >    multics
                     >    nasa-1.3
  ncsa                    ncsa
  netscapejavascri   |    ngpl
  netscapejavascri   |    nposl-3.0
  newopenldap        |    ntp
                     >    naumen
  nokia                   nokia
  nosl               |    oclc-2.0
  npl                |    ofl-1.1
  odbl               |    ogtsl
  oldopenldap        |    opl-2.1
  openpublicationl   |    osl-1.0
  openssl            |    osl-2.1
  originalbsd        |    osl-3.0
  osl                |    php-3.0
  perllicense        |    postgresql
  phorum             |    python-2.0
  php-3.01           |    qpl-1.0
  publicdomain       |    rpl-1.1
  python             |    rpl-1.5
  python1.6a2        |    rpsl-1.0
  pythonold          |    rscpl
  qpl                <
  realopl            <
  rpsl               <
  ruby               <
  sgifreeb           <
  silofl             <
  sissl                   sissl
  spl                |    spl-1.0
  standardmlofnj     |    simple-2.0
  unicode            |    sleepycat
  unlicense          <
  upl                     upl
  vim                |    vsl-1.0
  w3c                     w3c
  webm               |    wxwindows
  wtfpl              |    watcom-1.0
  wx                 |    xnet
  x11license         |    zpl-2.0
  xfree861.1licens   <
  xinetd             <
  yahoo              <
  zend               <
  zimbra             <
  zlib                    zlib
  zope               |    jabberpl
  zope2.0            <
  zope20             <

Some of the reported differences are from different IDs (e.g. Expat
vs. MIT and AGPLv3.0 vs AGPL-3.0).  And the OSI may have approved more
licenses than it lists in the API [3].  But that may get you started.

With automated text matching (ideally based on an easy way to get the
approved license text from both the OSI and FSF) you could address the
ID-mismatch issue automatically.

Cheers,
Trevor

[1]: In a developer console on
     https://www.gnu.org/licenses/license-list.html

     Load jQuery:

       var jq = document.createElement('script');
       jq.src = 
"https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js";;
       document.getElementsByTagName('head')[0].appendChild(jq);

     Get the license IDs:

       gplCompatible = [];
       fdlCompatible = [];
       freeIncompatible = [];
       [
         {class: 'green', array: gplCompatible},
         {class: 'purple', array: fdlCompatible},
         {class: 'orange', array: freeIncompatible},
       ].forEach(function(category) {
         $('dl.' + category.class + ' dt a').each(function (_, element) {
           if (element.attributes.id) {
             category.array.push(element.attributes.id.value);
           }
         });
       });
       free = gplCompatible.concat(fdlCompatible).concat(freeIncompatible);
       free.sort();
       console.log(JSON.stringify(free));

     Which produces:

       
["ACDL","AGPL","AGPLv1.0","AGPLv3.0","AcademicFreeLicense","Arphic","ArtisticLicense2",
        
"BerkeleyDB","BerkleyDB","CC0","CDDL","CPAL","CeCILL","CeCILL-B","CeCILL-C",
        
"ClarifiedArtistic","CommonPublicLicense10","Condor","CryptixGeneralLicense","ECL2.0",
        
"EPL","EUDataGrid","EUPL","Eiffel","Expat","FDL","FDLOther","FreeArt","FreeBSD",
        
"FreeBSDDL","GNUAllPermissive","GNUGPL","GNUGPLv3","GPLFonts","GPLOther","GPLv2",
        
"HPND","IBMPL","IPAFONT","ISC","LGPL","LGPLv2.1","LGPLv3","LPPL-1.2","LPPL-1.3a",
        "MPL","MPL-2.0","ModifiedBSD","NCSA","NOSL","NPL","NetscapeJavaScript",
        
"NetscapeJavascript","Nokia","ODbl","OSL","OpenPublicationL","OpenSSL","OriginalBSD",
        
"PHP-3.01","PerlLicense","Phorum","PublicDomain","Python","Python1.6a2","PythonOld",
        
"QPL","RPSL","RealOPL","Ruby","SGIFreeB","SILOFL","SISSL","SPL","StandardMLofNJ",
        
"UPL","Unicode","Unlicense","Vim","W3C","WTFPL","WebM","Wx","X11License",
        
"XFree861.1License","Yahoo","ZLib","Zend","Zimbra","Zope","Zope2.0","Zope20",
        
"apache1","apache1.1","apache2","apsl2","bittorrent","boost","ccby","ccbysa",
        
"clearbsd","dsl","eCos2.0","eCos20","ecfonts","freetype","gnuplot","iMatix","ijg",
        
"imlib","informal","intel","josl","lucent102","ms-pl","ms-rl","newOpenLDAP",
        "oldOpenLDAP","xinetd"]

     I saved that into 'fsf.json'.

[2]: $ curl -s https://api.opensource.org/licenses/ | jq '[.[] | 
select(.keywords | contains(["osi-approved"])) | .id]' >osi.json
[3]: 
https://lists.opensource.org/pipermail/license-discuss/2017-July/019922.html
     Subject: Some formerly-approved licenses not listed under
       opensource.org/licenses/ (was: SPDX License List v1.14 & OSI
       questions)
     Date: Fri, 14 Jul 2017 12:22:48 -0700                                      
                                                                                
                   
     Message-ID: <20170714192248.gx17...@valgrind.tremily.us>

-- 
This email may be signed or encrypted with GnuPG (http://www.gnupg.org).
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Spdx-legal mailing list
Spdx-legal@lists.spdx.org
https://lists.spdx.org/mailman/listinfo/spdx-legal

Reply via email to