Hey Richard, Thanks for looking at this.
> -----Original Message----- > From: Richard Fontana <[email protected]> > On Thu, Jun 11, 2026 at 10:54 PM Tim Bird <[email protected]> wrote: > > > > I believe the nls files were previously assigned a MODULE_LICENSE > > of "Dual BSD/GPL" incorrectly. At no time in the history > > of the files in the kernel source tree is there mention or reference > > to the BSD license being applicable to these files. > > > > The license "BSD without advertising clause" was introduced in a > > set of changes for Linux version v2.4.10.2, in September of 2001 > > (right as MODULE_LICENSE was being introduced into the kernel). > > > > I have searched lore and other lkml archives to see who was originally > > responsible for the assignment of the 'BSD...' license string, > > and I cannot find any stand-alone patch or any reference to this > > string or to the nls files for this time period, nor any justification > > for this license assignment. At this point, the nls files had > > been in the kernel tree for 4 years, with few modifications from > > their original submission in 1997. > > > > Later in 2001, because this license string tainted the kernel, > > the license in the MODULE_LICENSE macro was changed to "Dual BSD/GPL". > > However, I believe the original "BSD without advertising clause" was > > assigned by mistake. > > > > Correct this mistake and use what I believe is the correct license > > of "Dual Unicode/GPL" for these files. Also, add that string > > to the list of acceptable licenses for loading kernel modules in > > both the kernel and checkpatch.pl. > > I haven't attempted to try to understand this nonsuperficially but I > understand the "Dual BSD/GPL" tradition here to mean something > corresponding to what SPDX would call `BSD-3-Clause OR GPL-2.0`, i.e. > "Dual" refers to a disjunctive dual license, the module can be > regarded as licensed under either BSD or GPL, but you've characterized > the license of these files as `Unicode-3.0 AND GPL-2.0`, i.e. a > conjunctive license (meaning "some of this stuff is under Unicode-3.0 > and some of this stuff is under GPL-2.0"). I.e. from my admittedly > naive perspective this looks wrong, or else sort of arbitrary. I.e. it > feels to me like you're taking the conclusion you reached as to the > license of the file - let's just say "Foo AND Bar" -- and then > shoehorning that into the MODULE_LICENSE macro in a context that ought > to mean "Foo OR Bar". Yeah, I thought about making the license string be: "Both Unicode/GPL" or something that expressed this. I could still be talked into it, as I recognize that all other uses of the word "Dual" in the MODULE_LICENSE strings refer to 'OR' situations, and this is an 'AND'. The reason I didn't go that route was that "Dual" semantically could go either way, and I wanted this string to conform to the established pattern. But if it's misleading, maybe I should change it. I believe and OR clause means that the entire file can be used, copied, etc. under either of the mentioned licenses. That is, one of the licenses could be dropped in subsequent usages outside of Linux kernel context. I went with AND because I don't think that's the case here. > > Also, I'm not actually sure why you took the source files that had the > old Unicode license and concluded that they should be represented as > 'Unicode-3.0 AND GPL-2.0' instead of just 'Unicode-3.0'. What are you > asserting is under the GPL in these files that is not (purportedly) > under the Unicode license? All of these files have both source code and data elements. I believe that the source code is GPL-2.0 and the data elements are Unicode-3.0. I didn't see any source that was obtained from the www.unicode.org web site - only data points. Some of the source has been filled in by other parties (e.g. case-handling functions). It was added to existing code that was without an explicit license (except for the mistaken BSD attribution in the MODULE_LICENSE line), and copied from file to file after that. As extensions to the original source, which I interpret as GPL-2.0 given that was the default license for the kernel, I believe this additional code would be GPL-2.0 also. > > Not sure whether this ultimately matters, to be sure. It might not. The MODULE_LICENSE macro was originally created to allow the kernel to signal that a module that did not have source available had been loaded into the kernel, and the 'tainted' flag was intended to allow upstream developers to avoid support work for such modules. I might be wrong, but I don't think the MODULE_LICENSE string should be treated as dispositive of the license for the file. That, in my view, is the role of the SPDX-License-Identifier line. Even so, I changed these because I didn't want there to be a conflict between those two elements of the file. It will be confusing in the future in the SPDX line says one thing, and MODULE_LICENSE says something else. -- Tim

