{"id":"GPL-2.0-or-later-with-Classpath-exception-2.0","title":"GNU General Public License v2.0 or later with Classpath exception 2.0","reviewed_on":"2026-09-22","reviewer":"Giray Havur","text_source":"https://raw.githubusercontent.com/spdx/license-list-data/main/text/GPL-2.0-or-later.txt","text_retrieved":true,"verdict":"created","summary":"The record models GPL version 2 or later with the Classpath exception 2.0, the combination GNU Classpath and much of the Java world use. It keeps every statement of the GPL-2.0-or-later record and adds one permission for an independent module that is linked with the library. The share-alike duty still reaches the library itself, which dalicc:reciprocityScope states.","findings":[{"rubric":1,"severity":"info","field":"spdx:licenseId","description":"File name, record identifier, IRI local name and title agree. spdx:licenseId carries the SPDX expression \"GPL-2.0-or-later WITH Classpath-exception-2.0\": the base identifier, one space, WITH in capitals, one space, the exception identifier. No record in the library carried an expression before, so the SPDX mapping and the spdx route have to accept the space and the keyword.","action":"applied"},{"rubric":1,"severity":"info","field":"cc:legalcode","description":"cc:legalcode points at the text of the base licence, https://www.gnu.org/licenses/old-licenses/gpl-2.0.html, because that is the licence the record models. dct:source points at the SPDX page of the exception, https://spdx.org/licenses/Classpath-exception-2.0.html, because that is where the additional permission is published.","action":"applied"},{"rubric":2,"severity":"info","field":"odrl:target","description":"odrl:target is the one the base record carries: an odrl:AssetCollection of dct:type dcmitype:Software. The exception is about program files, so nothing changes.","action":"applied"},{"rubric":3,"severity":"major","field":"odrl:permission","description":"The exception reads: \"As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module.\" The independent module and the executable are material the share-alike condition no longer reaches, which is the permission dalicc:exceptedCombination.","action":"applied","change":"odrl:permission [ a odrl:Permission ;\n        odrl:action dalicc:exceptedCombination ] ;\n"},{"rubric":3,"severity":"info","field":"odrl:permission","description":"Every permission of GPL-2.0-or-later is kept, in the same place and with the same duties. An exception adds an additional permission to a licence; it never takes a granted right away.","action":"applied"},{"rubric":4,"severity":"info","field":"odrl:prohibition","description":"The exception lets the combined result travel under other terms, and the vocabulary cannot say that of a part of a work. The exception says of the executable: \"to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module\". A dalicc:ChangeLicense permission would say the licence of the covered work itself may be replaced, which is false and would contradict the whole-work share-alike duty. The record therefore keeps the prohibition, states the narrowed reach in dalicc:reciprocityScope and quotes the clause. Proposed term: dalicc:combinedWorkRelicensing, a permission for putting a larger work that contains the covered material under other terms.","action":"applied"},{"rubric":5,"severity":"info","field":"odrl:duty","description":"The licence-wide cc:ShareAlike duty stays on the odrl:Set. The first paragraph of the exception says why it has to: \"Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.\" The exception then lifts that result for independent modules only.","action":"applied"},{"rubric":6,"severity":"info","field":"dalicc:additionalClauses","description":"The exception text is quoted verbatim as one literal, taken from https://raw.githubusercontent.com/spdx/license-list-data/main/text/Classpath-exception-2.0.txt. Line breaks and the indentation of the source file are collapsed to single spaces, which is how every clause literal in the library is written; the wording is untouched. The warranty disclaimer and the liability limitation are the ones the base record quotes from the base licence.","action":"applied"},{"rubric":7,"severity":"info","field":"cc:jurisdiction","description":"cc:jurisdiction stays dalicc:worldwide and dalicc:validityType stays dalicc:perpetual: the exception names no territory and no term. The termination clause of the base licence still applies, and the record says no more about it than the base record does.","action":"applied"},{"rubric":8,"severity":"gap","field":"dalicc:exceptedCombination","description":"The exception carves the combination out of the condition of the licence, not out of its grant. dalicc:exemptedMaterial says the opposite and is prohibited on OGL-UK-1.0, OGL-UK-2.0 and NLOD-2.0, where it means material the licence never granted. The vocabulary defines dalicc:exceptedCombination for this side of it since 2026-09-23, and the record carries it as a permission.","action":"applied"},{"rubric":8,"severity":"gap","field":"dalicc:additionalClauses","description":"The exception is optional for a modified version of the library: \"If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.\" The vocabulary cannot say that an additional permission travels only as far as each licensor carries it. Proposed term: dalicc:exceptionRemovable.","action":"none"},{"rubric":9,"severity":"info","field":"record","description":"app.services.composer.consistency_check with the default dependency graph reports 0 conflicts for this record. dalicc:exceptedCombination takes part in no dependency relation, so it neither creates nor hides one.","action":"applied"},{"rubric":10,"severity":"major","field":"dalicc:variantOf","description":"The base record of this variant is GPL-2.0-or-later, which this same addition creates. The model is copied from it statement for statement, so dalicc:orLaterVersionOption stays true for the clause GPL version 2 section 9 states: \"If the Program specifies a version number of this License which applies to it and \"any later version\", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation.\" dalicc:variantOf points at GPL-2.0-or-later and not at GPL-2.0-only, although the two carry the same deontic model. Both records are new, so a second reader should read them together.","action":"applied"},{"rubric":10,"severity":"info","field":"record","description":"The nearest sibling is GPL-2.0-only-with-Classpath-exception-2.0, the same exception on the version without the option, which this addition creates in another set of records. The two records must differ only in the identifier, the title, the alternatives, dalicc:orLaterVersionOption and dalicc:variantOf.","action":"applied"},{"rubric":4,"severity":"minor","field":"odrl:prohibition","description":"dalicc:promote was prohibited and no sentence of this text supports it. The statement was the library's reading of a legal default, that a copyright licence which says nothing about endorsement grants no right to it, and it sat in 519 of 581 records as a house convention. That reading is now an adopted dalicc:DefaultRule of the core dependency graph, which supplies it to every licence that is silent about the action, so a compatibility check reaches the same answer and the record states only what the text states. Removed on 2026-09-23; see section 13 of docs/LICENSE_REVIEW.md.","action":"applied","change":"# removed\nodrl:prohibition [ a odrl:Prohibition ;\n        odrl:action dalicc:promote ] ;\n"}],"family":"GNU copyleft family (GPL, LGPL, AGPL, FDL)","port_of":null,"variant_kind":"exception","variant_of":"GPL-2.0-or-later","notes":"The exception defines what stays outside it: \"An independent module is a module which is not derived from or based on this library.\" That sentence and the first paragraph, which says that linking makes a combined work, are the source of dalicc:reciprocityScope."}