aboutcode-org / aboutcode-org/scancode-toolkit

GPL-2.0-only detected in GPL-2.0-or-later

オープン
#3,128 コメント 20 件 リアクション 0 件 担当者 0 名 GitHub で見る
bug
主要言語
Python
スター
2.6k
フォーク
791
平均マージ
1日 12時間
マージ済み PR(30日)
5

説明

### Background

I am currently working on copyleft license compatibility rules for [ORT](https://github.com/oss-review-toolkit/ort). For this I created a [test repository](https://github.com/pepper-jk/compatibility_test) containing `GPL-2.0-or-later` and `GPL-3.0` (later I added some CC licenses as well, but those are not relevant to the issue). Both license texts were copied from [spdx.org](https://spdx.org/licenses/).

ORT issue: https://github.com/oss-review-toolkit/ort/issues/5967

### Description of Bug

When scanning said [test repository](https://github.com/pepper-jk/compatibility_test) with ORT, scancode detects both `GPL-2.0-only` and `GPL-2.0-or-later`, even though only `GPL-2.0-or-later` was added to the repo:

```yaml
- license: "GPL-2.0-only"
location:
path: "license-gpl-2.0-or-later.txt"
start_line: 3
end_line: 110
score: 98.02
- license: "GPL-2.0-or-later"
location:
path: "license-gpl-2.0-or-later.txt"
start_line: 110
end_line: 114
score: 100.0
```

As you can see [scancode](https://github.com/nexB/scancode-toolkit) gives `GPL-2.0-only` a `98.02` score, even though it ignores the last 4 lines of the license text. And `GPL-2.0-or-later` only is detected in the last four lines.

Later I ran a scan directly with scancode, getting the same results:

complete json

```
{
"headers": [
{
"tool_name": "scancode-toolkit",
"tool_version": "31.2.1",
"options": {
"input": [
"."
],
"--copyright": true,
"--info": true,
"--json-pp": "report-scancode.json",
"--license": true,
"--package": true,
"--verbose": true
},
"notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.",
"start_timestamp": "2022-10-19T140338.813472",
"end_timestamp": "2022-10-19T140353.061902",
"output_format_version": "2.0.0",
"duration": 14.248444318771362,
"message": null,
"errors": [],
"warnings": [],
"extra_data": {
"system_environment": {
"operating_system": "linux",
"cpu_architecture": "64",
"platform": "Linux-5.15.0-50-generic-x86_64-with-glibc2.35",
"platform_version": "#56-Ubuntu SMP Tue Sep 20 13:23:26 UTC 2022",
"python_version": "3.10.6 (main, Aug 10 2022, 11:40:04) [GCC 11.3.0]"
},
"spdx_license_list_version": "3.17",
"files_count": 5
}
}
],
"dependencies": [],
"packages": [],
"files": [
{
"path": "compatibility_test",
"type": "directory",
"name": "compatibility_test",
"base_name": "compatibility_test",
"extension": "",
"size": 0,
"date": null,
"sha1": null,
"md5": null,
"sha256": null,
"mime_type": null,
"file_type": null,
"programming_language": null,
"is_binary": false,
"is_text": false,
"is_archive": false,
"is_media": false,
"is_source": false,
"is_script": false,
"licenses": [],
"license_expressions": [],
"percentage_of_license_text": 0,
"copyrights": [],
"holders": [],
"authors": [],
"package_data": [],
"for_packages": [],
"files_count": 5,
"dirs_count": 0,
"size_count": 94469,
"scan_errors": []
},
{
"path": "compatibility_test/CC-BY-NC-SA-3.0.txt",
"type": "file",
"name": "CC-BY-NC-SA-3.0.txt",
"base_name": "CC-BY-NC-SA-3.0",
"extension": ".txt",
"size": 21448,
"date": "2022-10-18",
"sha1": "7295cb93cd11ad9912bbc495a3ef6d7a91cdb44c",
"md5": "666f6d1f58d456548a3156f86e7a3146",
"sha256": "0abe2645856e5e739bf858bbedc527bb58d053f628880c9e9a26ef85d2f7c713",
"mime_type": "text/plain",
"file_type": "ASCII text, with very long lines",
"programming_language": null,
"is_binary": false,
"is_text": true,
"is_archive": false,
"is_media": false,
"is_source": false,
"is_script": false,
"licenses": [
{
"key": "cc-by-nc-sa-3.0",
"score": 100.0,
"name": "Creative Commons Attribution Non-Commercial Share Alike License 3.0",
"short_name": "CC-BY-NC-SA-3.0",
"category": "Source-available",
"is_exception": false,
"is_unknown": false,
"owner": "Creative Commons",
"homepage_url": "http://creativecommons.org/licenses/by-nc-sa/3.0/",
"text_url": "http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode",
"reference_url": "https://scancode-licensedb.aboutcode.org/cc-by-nc-sa-3.0",
"scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc-by-nc-sa-3.0.LICENSE",
"scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc-by-nc-sa-3.0.yml",
"spdx_license_key": "CC-BY-NC-SA-3.0",
"spdx_url": "https://spdx.org/licenses/CC-BY-NC-SA-3.0",
"start_line": 3,
"end_line": 63,
"matched_rule": {
"identifier": "cc-by-nc-sa-3.0_47.RULE",
"license_expression": "cc-by-nc-sa-3.0",
"licenses": [
"cc-by-nc-sa-3.0"
],
"referenced_filenames": [],
"is_license_text": true,
"is_license_notice": false,
"is_license_reference": false,
"is_license_tag": false,
"is_license_intro": false,
"has_unknown": false,
"matcher": "1-hash",
"rule_length": 3360,
"matched_length": 3360,
"match_coverage": 100.0,
"rule_relevance": 100
}
}
],
"license_expressions": [
"cc-by-nc-sa-3.0"
],
"percentage_of_license_text": 100.0,
"copyrights": [],
"holders": [],
"authors": [],
"package_data": [],
"for_packages": [],
"files_count": 0,
"dirs_count": 0,
"size_count": 0,
"scan_errors": []
},
{
"path": "compatibility_test/CC-BY-NC-SA-4.0.txt",
"type": "file",
"name": "CC-BY-NC-SA-4.0.txt",
"base_name": "CC-BY-NC-SA-4.0",
"extension": ".txt",
"size": 19066,
"date": "2022-10-18",
"sha1": "c7b58be452219bd8b74710dd9e6e7ed449517da0",
"md5": "4a206eed80a3482b8fbf26350ead4538",
"sha256": "f5992db54c7473dcda6f16a40679d305aa31440489fdcb1eaca84d7da6290ee4",
"mime_type": "text/plain",
"file_type": "UTF-8 Unicode text, with very long lines",
"programming_language": null,
"is_binary": false,
"is_text": true,
"is_archive": false,
"is_media": false,
"is_source": false,
"is_script": false,
"licenses": [
{
"key": "cc-by-nc-sa-4.0",
"score": 100.0,
"name": "Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License",
"short_name": "CC-BY-NC-SA-4.0",
"category": "Source-available",
"is_exception": false,
"is_unknown": false,
"owner": "Creative Commons",
"homepage_url": "http://creativecommons.org/licenses/by-nc-sa/4.0/",
"text_url": "http://creativecommons.org/licenses/by-nc-sa/4.0/legalcode",
"reference_url": "https://scancode-licensedb.aboutcode.org/cc-by-nc-sa-4.0",
"scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc-by-nc-sa-4.0.LICENSE",
"scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc-by-nc-sa-4.0.yml",
"spdx_license_key": "CC-BY-NC-SA-4.0",
"spdx_url": "https://spdx.org/licenses/CC-BY-NC-SA-4.0",
"start_line": 3,
"end_line": 117,
"matched_rule": {
"identifier": "cc-by-nc-sa-4.0_23.RULE",
"license_expression": "cc-by-nc-sa-4.0",
"licenses": [
"cc-by-nc-sa-4.0"
],
"referenced_filenames": [],
"is_license_text": true,
"is_license_notice": false,
"is_license_reference": false,
"is_license_tag": false,
"is_license_intro": false,
"has_unknown": false,
"matcher": "1-hash",
"rule_length": 2861,
"matched_length": 2861,
"match_coverage": 100.0,
"rule_relevance": 100
}
}
],
"license_expressions": [
"cc-by-nc-sa-4.0"
],
"percentage_of_license_text": 100.0,
"copyrights": [],
"holders": [],
"authors": [],
"package_data": [],
"for_packages": [],
"files_count": 0,
"dirs_count": 0,
"size_count": 0,
"scan_errors": []
},
{
"path": "compatibility_test/license-gpl-2.0-or-later.txt",
"type": "file",
"name": "license-gpl-2.0-or-later.txt",
"base_name": "license-gpl-2.0-or-later",
"extension": ".txt",
"size": 18229,
"date": "2022-10-18",
"sha1": "040cfa18ce31bbc2748537fe3f8aedfb25af6165",
"md5": "d736fb04757076bd90e1677e9aa37230",
"sha256": "1cc9cfdb6b5d3737e3c672d938c0e1ed7070ed1ed631b4e881076e1eabaafccf",
"mime_type": "text/plain",
"file_type": "ASCII text, with very long lines",
"programming_language": null,
"is_binary": false,
"is_text": true,
"is_archive": false,
"is_media": false,
"is_source": false,
"is_script": false,
"licenses": [
{
"key": "gpl-2.0",
"score": 98.02,
"name": "GNU General Public License 2.0",
"short_name": "GPL 2.0",
"category": "Copyleft",
"is_exception": false,
"is_unknown": false,
"owner": "Free Software Foundation (FSF)",
"homepage_url": "http://www.gnu.org/licenses/gpl-2.0.html",
"text_url": "http://www.gnu.org/licenses/gpl-2.0.txt",
"reference_url": "https://scancode-licensedb.aboutcode.org/gpl-2.0",
"scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0.LICENSE",
"scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0.yml",
"spdx_license_key": "GPL-2.0-only",
"spdx_url": "https://spdx.org/licenses/GPL-2.0-only",
"start_line": 3,
"end_line": 110,
"matched_rule": {
"identifier": "gpl-2.0.LICENSE",
"license_expression": "gpl-2.0",
"licenses": [
"gpl-2.0"
],
"referenced_filenames": [],
"is_license_text": true,
"is_license_notice": false,
"is_license_reference": false,
"is_license_tag": false,
"is_license_intro": false,
"has_unknown": false,
"matcher": "3-seq",
"rule_length": 2931,
"matched_length": 2873,
"match_coverage": 98.02,
"rule_relevance": 100
}
},
{
"key": "gpl-2.0-plus",
"score": 100.0,
"name": "GNU General Public License 2.0 or later",
"short_name": "GPL 2.0 or later",
"category": "Copyleft",
"is_exception": false,
"is_unknown": false,
"owner": "Free Software Foundation (FSF)",
"homepage_url": "http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html",
"text_url": "http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html",
"reference_url": "https://scancode-licensedb.aboutcode.org/gpl-2.0-plus",
"scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0-plus.LICENSE",
"scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0-plus.yml",
"spdx_license_key": "GPL-2.0-or-later",
"spdx_url": "https://spdx.org/licenses/GPL-2.0-or-later",
"start_line": 110,
"end_line": 114,
"matched_rule": {
"identifier": "gpl-2.0-plus_420.RULE",
"license_expression": "gpl-2.0-plus",
"licenses": [
"gpl-2.0-plus"
],
"referenced_filenames": [],
"is_license_text": false,
"is_license_notice": true,
"is_license_reference": false,
"is_license_tag": false,
"is_license_intro": false,
"has_unknown": false,
"matcher": "2-aho",
"rule_length": 113,
"matched_length": 113,
"match_coverage": 100.0,
"rule_relevance": 100
}
}
],
"license_expressions": [
"gpl-2.0",
"gpl-2.0-plus"
],
"percentage_of_license_text": 98.94,
"copyrights": [
{
"copyright": "Copyright (c) 1989, 1991 Free Software Foundation, Inc.",
"start_line": 6,
"end_line": 6
},
{
"copyright": "copyrighted by the Free Software Foundation",
"start_line": 69,
"end_line": 69
}
],
"holders": [
{
"holder": "Free Software Foundation, Inc.",
"start_line": 6,
"end_line": 6
},
{
"holder": "the Free Software Foundation",
"start_line": 69,
"end_line": 69
}
],
"authors": [],
"package_data": [],
"for_packages": [],
"files_count": 0,
"dirs_count": 0,
"size_count": 0,
"scan_errors": []
},
{
"path": "compatibility_test/license-gpl-3.0.txt",
"type": "file",
"name": "license-gpl-3.0.txt",
"base_name": "license-gpl-3.0",
"extension": ".txt",
"size": 35405,
"date": "2022-10-18",
"sha1": "579b08f7066f9491391a5eb2e9f238a71f4d4981",
"md5": "2103bb15c50dc81f64b2315ab249ad3d",
"sha256": "44d90a331f505bd19b626cef0e3ae59da08830cf8b9efbde5f71025faa3c463b",
"mime_type": "text/plain",
"file_type": "UTF-8 Unicode text, with very long lines",
"programming_language": null,
"is_binary": false,
"is_text": true,
"is_archive": false,
"is_media": false,
"is_source": false,
"is_script": false,
"licenses": [
{
"key": "gpl-3.0",
"score": 99.96,
"name": "GNU General Public License 3.0",
"short_name": "GPL 3.0",
"category": "Copyleft",
"is_exception": false,
"is_unknown": false,
"owner": "Free Software Foundation (FSF)",
"homepage_url": "http://www.gnu.org/licenses/gpl-3.0.html",
"text_url": "http://www.gnu.org/licenses/gpl-3.0-standalone.html",
"reference_url": "https://scancode-licensedb.aboutcode.org/gpl-3.0",
"scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-3.0.LICENSE",
"scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-3.0.yml",
"spdx_license_key": "GPL-3.0-only",
"spdx_url": "https://spdx.org/licenses/GPL-3.0-only",
"start_line": 3,
"end_line": 211,
"matched_rule": {
"identifier": "gpl-3.0_466.RULE",
"license_expression": "gpl-3.0",
"licenses": [
"gpl-3.0"
],
"referenced_filenames": [],
"is_license_text": true,
"is_license_notice": false,
"is_license_reference": false,
"is_license_tag": false,
"is_license_intro": false,
"has_unknown": false,
"matcher": "3-seq",
"rule_length": 5612,
"matched_length": 5610,
"match_coverage": 99.96,
"rule_relevance": 100
}
}
],
"license_expressions": [
"gpl-3.0"
],
"percentage_of_license_text": 99.95,
"copyrights": [
{
"copyright": "Copyright (c) 2007 Free Software Foundation, Inc. ",
"start_line": 6,
"end_line": 6
}
],
"holders": [
{
"holder": "Free Software Foundation, Inc.",
"start_line": 6,
"end_line": 6
}
],
"authors": [],
"package_data": [],
"for_packages": [],
"files_count": 0,
"dirs_count": 0,
"size_count": 0,
"scan_errors": []
},
{
"path": "compatibility_test/pipeline.txt",
"type": "file",
"name": "pipeline.txt",
"base_name": "pipeline",
"extension": ".txt",
"size": 321,
"date": "2022-10-18",
"sha1": "1901cb60d897ee69d8dd4aba036b4927e5b2ae41",
"md5": "3c20a2c7f064715557f4706f5ba997ab",
"sha256": "ce1a94fde580caa420d2a6517cf0ed4197a8a16d123f30afc6391bd86ca8ae64",
"mime_type": "text/plain",
"file_type": "ASCII text",
"programming_language": null,
"is_binary": false,
"is_text": true,
"is_archive": false,
"is_media": false,
"is_source": false,
"is_script": false,
"licenses": [],
"license_expressions": [],
"percentage_of_license_text": 0,
"copyrights": [],
"holders": [],
"authors": [],
"package_data": [],
"for_packages": [],
"files_count": 0,
"dirs_count": 0,
"size_count": 0,
"scan_errors": []
}
]
}
```

### How To Reproduce

```
$ cd /path/to/compatibility_test
$ scancode --license --package --copyright --verbose --info --json-pp report-scancode.json .
```

### System configuration

* Linux
* scancode-toolkit-31.2.1
* Python 3.10.6
* installed via **pip** in an otherwise clean **venv**

Also occurs with ORT, which uses `ScanCode 30.1.0` or older (the ort-image we use in the pipeline is older then the current ORT master).

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。