* [PATCH] fs/nls: Change MODULE_LICENSE to use Unicode in place of BSD
@ 2026-06-12 2:53 Tim Bird
2026-06-12 4:31 ` Richard Fontana
0 siblings, 1 reply; 3+ messages in thread
From: Tim Bird @ 2026-06-12 2:53 UTC (permalink / raw)
To: gregkh, torvalds, apw, joe, dwaipayanray1, lukas.bulwahn
Cc: tim.bird, linux-spdx, linux-kernel
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.
Signed-off-by: Tim Bird <tim.bird@sony.com>
---
fs/nls/mac-celtic.c | 2 +-
fs/nls/mac-centeuro.c | 2 +-
fs/nls/mac-croatian.c | 2 +-
fs/nls/mac-cyrillic.c | 2 +-
fs/nls/mac-gaelic.c | 2 +-
fs/nls/mac-greek.c | 2 +-
fs/nls/mac-iceland.c | 2 +-
fs/nls/mac-inuit.c | 2 +-
fs/nls/mac-roman.c | 2 +-
fs/nls/mac-romanian.c | 2 +-
fs/nls/mac-turkish.c | 2 +-
fs/nls/nls_ascii.c | 2 +-
fs/nls/nls_base.c | 2 +-
fs/nls/nls_cp1250.c | 2 +-
fs/nls/nls_cp1251.c | 2 +-
fs/nls/nls_cp1255.c | 2 +-
fs/nls/nls_cp437.c | 2 +-
fs/nls/nls_cp737.c | 2 +-
fs/nls/nls_cp775.c | 2 +-
fs/nls/nls_cp850.c | 2 +-
fs/nls/nls_cp852.c | 2 +-
fs/nls/nls_cp855.c | 2 +-
fs/nls/nls_cp857.c | 2 +-
fs/nls/nls_cp860.c | 2 +-
fs/nls/nls_cp861.c | 2 +-
fs/nls/nls_cp862.c | 2 +-
fs/nls/nls_cp863.c | 2 +-
fs/nls/nls_cp864.c | 2 +-
fs/nls/nls_cp865.c | 2 +-
fs/nls/nls_cp866.c | 2 +-
fs/nls/nls_cp869.c | 2 +-
fs/nls/nls_cp874.c | 2 +-
fs/nls/nls_cp932.c | 2 +-
fs/nls/nls_cp936.c | 2 +-
fs/nls/nls_cp949.c | 2 +-
fs/nls/nls_cp950.c | 2 +-
fs/nls/nls_euc-jp.c | 2 +-
fs/nls/nls_iso8859-1.c | 2 +-
fs/nls/nls_iso8859-13.c | 2 +-
fs/nls/nls_iso8859-14.c | 2 +-
fs/nls/nls_iso8859-15.c | 2 +-
fs/nls/nls_iso8859-2.c | 2 +-
fs/nls/nls_iso8859-3.c | 2 +-
fs/nls/nls_iso8859-4.c | 2 +-
fs/nls/nls_iso8859-5.c | 2 +-
fs/nls/nls_iso8859-6.c | 2 +-
fs/nls/nls_iso8859-7.c | 2 +-
fs/nls/nls_iso8859-9.c | 2 +-
fs/nls/nls_koi8-r.c | 2 +-
fs/nls/nls_koi8-ru.c | 2 +-
fs/nls/nls_koi8-u.c | 2 +-
fs/nls/nls_utf8.c | 2 +-
include/linux/license.h | 3 ++-
scripts/checkpatch.pl | 1 +
54 files changed, 55 insertions(+), 53 deletions(-)
diff --git a/fs/nls/mac-celtic.c b/fs/nls/mac-celtic.c
index 852b1d362113..fac1ee9f4004 100644
--- a/fs/nls/mac-celtic.c
+++ b/fs/nls/mac-celtic.c
@@ -566,4 +566,4 @@ module_init(init_nls_macceltic)
module_exit(exit_nls_macceltic)
MODULE_DESCRIPTION("NLS Codepage macceltic");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/mac-centeuro.c b/fs/nls/mac-centeuro.c
index 62e132f5d4f5..a5ff2e46c66a 100644
--- a/fs/nls/mac-centeuro.c
+++ b/fs/nls/mac-centeuro.c
@@ -496,4 +496,4 @@ module_init(init_nls_maccenteuro)
module_exit(exit_nls_maccenteuro)
MODULE_DESCRIPTION("NLS Codepage maccenteuro");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/mac-croatian.c b/fs/nls/mac-croatian.c
index 3407b3323c0f..84428b22c098 100644
--- a/fs/nls/mac-croatian.c
+++ b/fs/nls/mac-croatian.c
@@ -566,4 +566,4 @@ module_init(init_nls_maccroatian)
module_exit(exit_nls_maccroatian)
MODULE_DESCRIPTION("NLS Codepage maccroatian");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/mac-cyrillic.c b/fs/nls/mac-cyrillic.c
index 15df6d29b533..5d0f1657f27e 100644
--- a/fs/nls/mac-cyrillic.c
+++ b/fs/nls/mac-cyrillic.c
@@ -461,4 +461,4 @@ module_init(init_nls_maccyrillic)
module_exit(exit_nls_maccyrillic)
MODULE_DESCRIPTION("NLS Codepage maccyrillic");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/mac-gaelic.c b/fs/nls/mac-gaelic.c
index db7820b0fb71..5fec194b2ff1 100644
--- a/fs/nls/mac-gaelic.c
+++ b/fs/nls/mac-gaelic.c
@@ -531,4 +531,4 @@ module_init(init_nls_macgaelic)
module_exit(exit_nls_macgaelic)
MODULE_DESCRIPTION("NLS Codepage macgaelic");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/mac-greek.c b/fs/nls/mac-greek.c
index c1f8b97d4d53..04247a5b9bb7 100644
--- a/fs/nls/mac-greek.c
+++ b/fs/nls/mac-greek.c
@@ -461,4 +461,4 @@ module_init(init_nls_macgreek)
module_exit(exit_nls_macgreek)
MODULE_DESCRIPTION("NLS Codepage macgreek");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/mac-iceland.c b/fs/nls/mac-iceland.c
index c239917fb329..43438a7050c5 100644
--- a/fs/nls/mac-iceland.c
+++ b/fs/nls/mac-iceland.c
@@ -566,4 +566,4 @@ module_init(init_nls_maciceland)
module_exit(exit_nls_maciceland)
MODULE_DESCRIPTION("NLS Codepage maciceland");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/mac-inuit.c b/fs/nls/mac-inuit.c
index 4dd1cd19d29b..b797f2cca447 100644
--- a/fs/nls/mac-inuit.c
+++ b/fs/nls/mac-inuit.c
@@ -496,4 +496,4 @@ module_init(init_nls_macinuit)
module_exit(exit_nls_macinuit)
MODULE_DESCRIPTION("NLS Codepage macinuit");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/mac-roman.c b/fs/nls/mac-roman.c
index 9956bd8a42a3..60cb0adc3353 100644
--- a/fs/nls/mac-roman.c
+++ b/fs/nls/mac-roman.c
@@ -601,4 +601,4 @@ module_init(init_nls_macroman)
module_exit(exit_nls_macroman)
MODULE_DESCRIPTION("NLS Codepage macroman");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/mac-romanian.c b/fs/nls/mac-romanian.c
index e954870a3a4f..c01118b3b5f5 100644
--- a/fs/nls/mac-romanian.c
+++ b/fs/nls/mac-romanian.c
@@ -566,4 +566,4 @@ module_init(init_nls_macromanian)
module_exit(exit_nls_macromanian)
MODULE_DESCRIPTION("NLS Codepage macromanian");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/mac-turkish.c b/fs/nls/mac-turkish.c
index c5415f979050..080a66b2e050 100644
--- a/fs/nls/mac-turkish.c
+++ b/fs/nls/mac-turkish.c
@@ -566,4 +566,4 @@ module_init(init_nls_macturkish)
module_exit(exit_nls_macturkish)
MODULE_DESCRIPTION("NLS Codepage macturkish");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_ascii.c b/fs/nls/nls_ascii.c
index 3c8d1c17b12f..a3c8651450f7 100644
--- a/fs/nls/nls_ascii.c
+++ b/fs/nls/nls_ascii.c
@@ -165,4 +165,4 @@ module_init(init_nls_ascii)
module_exit(exit_nls_ascii)
MODULE_DESCRIPTION("NLS ASCII (United States)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_base.c b/fs/nls/nls_base.c
index 94fb554bfaf9..606179188212 100644
--- a/fs/nls/nls_base.c
+++ b/fs/nls/nls_base.c
@@ -558,4 +558,4 @@ EXPORT_SYMBOL(load_nls);
EXPORT_SYMBOL(load_nls_default);
MODULE_DESCRIPTION("Base file system native language support");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp1250.c b/fs/nls/nls_cp1250.c
index 68ee1c927a99..f09f5cc6d601 100644
--- a/fs/nls/nls_cp1250.c
+++ b/fs/nls/nls_cp1250.c
@@ -345,4 +345,4 @@ module_init(init_nls_cp1250)
module_exit(exit_nls_cp1250)
MODULE_DESCRIPTION("NLS Windows CP1250 (Slavic/Central European Languages)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp1251.c b/fs/nls/nls_cp1251.c
index c6e03b7cf75f..250df897dc1e 100644
--- a/fs/nls/nls_cp1251.c
+++ b/fs/nls/nls_cp1251.c
@@ -300,4 +300,4 @@ module_init(init_nls_cp1251)
module_exit(exit_nls_cp1251)
MODULE_DESCRIPTION("NLS Windows CP1251 (Bulgarian, Belarusian)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp1255.c b/fs/nls/nls_cp1255.c
index d8506d6c9631..6b6ed9ad5272 100644
--- a/fs/nls/nls_cp1255.c
+++ b/fs/nls/nls_cp1255.c
@@ -382,5 +382,5 @@ module_init(init_nls_cp1255)
module_exit(exit_nls_cp1255)
MODULE_DESCRIPTION("NLS Hebrew charsets (ISO-8859-8, CP1255)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
MODULE_ALIAS_NLS(iso8859-8);
diff --git a/fs/nls/nls_cp437.c b/fs/nls/nls_cp437.c
index 1bd7901656c2..366499121cdd 100644
--- a/fs/nls/nls_cp437.c
+++ b/fs/nls/nls_cp437.c
@@ -386,4 +386,4 @@ module_init(init_nls_cp437)
module_exit(exit_nls_cp437)
MODULE_DESCRIPTION("NLS Codepage 437 (United States, Canada)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp737.c b/fs/nls/nls_cp737.c
index 7d8da4e529a0..8d1ae4d423e9 100644
--- a/fs/nls/nls_cp737.c
+++ b/fs/nls/nls_cp737.c
@@ -349,4 +349,4 @@ module_init(init_nls_cp737)
module_exit(exit_nls_cp737)
MODULE_DESCRIPTION("NLS Codepage 737 (Greek)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp775.c b/fs/nls/nls_cp775.c
index 312d7314bfb3..7b466a2b4da8 100644
--- a/fs/nls/nls_cp775.c
+++ b/fs/nls/nls_cp775.c
@@ -318,4 +318,4 @@ module_init(init_nls_cp775)
module_exit(exit_nls_cp775)
MODULE_DESCRIPTION("NLS Codepage 775 (Baltic Rim)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp850.c b/fs/nls/nls_cp850.c
index 56ad1f8cf5ef..7aa62b2cd102 100644
--- a/fs/nls/nls_cp850.c
+++ b/fs/nls/nls_cp850.c
@@ -314,4 +314,4 @@ module_init(init_nls_cp850)
module_exit(exit_nls_cp850)
MODULE_DESCRIPTION("NLS Codepage 850 (Europe)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp852.c b/fs/nls/nls_cp852.c
index 2bfdf8d11e4e..0c47e12a58f7 100644
--- a/fs/nls/nls_cp852.c
+++ b/fs/nls/nls_cp852.c
@@ -336,4 +336,4 @@ module_init(init_nls_cp852)
module_exit(exit_nls_cp852)
MODULE_DESCRIPTION("NLS Codepage 852 (Central/Eastern Europe)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp855.c b/fs/nls/nls_cp855.c
index 2dba2441bd83..be8775503643 100644
--- a/fs/nls/nls_cp855.c
+++ b/fs/nls/nls_cp855.c
@@ -298,4 +298,4 @@ module_init(init_nls_cp855)
module_exit(exit_nls_cp855)
MODULE_DESCRIPTION("NLS Codepage 855 (Cyrillic)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp857.c b/fs/nls/nls_cp857.c
index 5ca9b9e11b92..a69dc1a7ae66 100644
--- a/fs/nls/nls_cp857.c
+++ b/fs/nls/nls_cp857.c
@@ -300,4 +300,4 @@ module_init(init_nls_cp857)
module_exit(exit_nls_cp857)
MODULE_DESCRIPTION("NLS Codepage 857 (Turkish)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp860.c b/fs/nls/nls_cp860.c
index 5909c33d737b..150699e838ba 100644
--- a/fs/nls/nls_cp860.c
+++ b/fs/nls/nls_cp860.c
@@ -363,4 +363,4 @@ module_init(init_nls_cp860)
module_exit(exit_nls_cp860)
MODULE_DESCRIPTION("NLS Codepage 860 (Portuguese)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp861.c b/fs/nls/nls_cp861.c
index 7d10d1e165fa..e16ab9043eff 100644
--- a/fs/nls/nls_cp861.c
+++ b/fs/nls/nls_cp861.c
@@ -386,4 +386,4 @@ module_init(init_nls_cp861)
module_exit(exit_nls_cp861)
MODULE_DESCRIPTION("NLS Codepage 861 (Icelandic)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp862.c b/fs/nls/nls_cp862.c
index 0e037e00b300..e99ccb191d17 100644
--- a/fs/nls/nls_cp862.c
+++ b/fs/nls/nls_cp862.c
@@ -420,4 +420,4 @@ module_init(init_nls_cp862)
module_exit(exit_nls_cp862)
MODULE_DESCRIPTION("NLS Codepage 862 (Hebrew)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp863.c b/fs/nls/nls_cp863.c
index edf0599b3efd..cfcec84eff9f 100644
--- a/fs/nls/nls_cp863.c
+++ b/fs/nls/nls_cp863.c
@@ -380,4 +380,4 @@ module_init(init_nls_cp863)
module_exit(exit_nls_cp863)
MODULE_DESCRIPTION("NLS Codepage 863 (Canadian French)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp864.c b/fs/nls/nls_cp864.c
index 165dba92978b..4f746553cff9 100644
--- a/fs/nls/nls_cp864.c
+++ b/fs/nls/nls_cp864.c
@@ -406,4 +406,4 @@ module_init(init_nls_cp864)
module_exit(exit_nls_cp864)
MODULE_DESCRIPTION("NLS Codepage 864 (Arabic)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp865.c b/fs/nls/nls_cp865.c
index ba41cbc5c11e..ec414e43408f 100644
--- a/fs/nls/nls_cp865.c
+++ b/fs/nls/nls_cp865.c
@@ -386,4 +386,4 @@ module_init(init_nls_cp865)
module_exit(exit_nls_cp865)
MODULE_DESCRIPTION("NLS Codepage 865 (Norwegian, Danish)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp866.c b/fs/nls/nls_cp866.c
index a44cceaf9001..985d10e4d44c 100644
--- a/fs/nls/nls_cp866.c
+++ b/fs/nls/nls_cp866.c
@@ -304,4 +304,4 @@ module_init(init_nls_cp866)
module_exit(exit_nls_cp866)
MODULE_DESCRIPTION("NLS Codepage 866 (Cyrillic/Russian)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp869.c b/fs/nls/nls_cp869.c
index 76eae5653cba..c0f29b41b759 100644
--- a/fs/nls/nls_cp869.c
+++ b/fs/nls/nls_cp869.c
@@ -314,4 +314,4 @@ module_init(init_nls_cp869)
module_exit(exit_nls_cp869)
MODULE_DESCRIPTION("NLS Codepage 869 (Greek)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_cp874.c b/fs/nls/nls_cp874.c
index 474764c354da..8a82ecfd177c 100644
--- a/fs/nls/nls_cp874.c
+++ b/fs/nls/nls_cp874.c
@@ -273,5 +273,5 @@ module_init(init_nls_cp874)
module_exit(exit_nls_cp874)
MODULE_DESCRIPTION("NLS Thai charset (CP874, TIS-620)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
MODULE_ALIAS_NLS(tis-620);
diff --git a/fs/nls/nls_cp932.c b/fs/nls/nls_cp932.c
index ec14c7290057..cdf5707fddb1 100644
--- a/fs/nls/nls_cp932.c
+++ b/fs/nls/nls_cp932.c
@@ -7931,5 +7931,5 @@ module_init(init_nls_cp932)
module_exit(exit_nls_cp932)
MODULE_DESCRIPTION("NLS Japanese charset (Shift-JIS)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
MODULE_ALIAS_NLS(sjis);
diff --git a/fs/nls/nls_cp936.c b/fs/nls/nls_cp936.c
index 179de27f9dbd..78098515463e 100644
--- a/fs/nls/nls_cp936.c
+++ b/fs/nls/nls_cp936.c
@@ -11109,5 +11109,5 @@ module_init(init_nls_cp936)
module_exit(exit_nls_cp936)
MODULE_DESCRIPTION("NLS Simplified Chinese charset (CP936, GB2312)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
MODULE_ALIAS_NLS(gb2312);
diff --git a/fs/nls/nls_cp949.c b/fs/nls/nls_cp949.c
index 47ea5145310b..e9435a2286c9 100644
--- a/fs/nls/nls_cp949.c
+++ b/fs/nls/nls_cp949.c
@@ -13944,5 +13944,5 @@ module_init(init_nls_cp949)
module_exit(exit_nls_cp949)
MODULE_DESCRIPTION("NLS Korean charset (CP949, EUC-KR)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
MODULE_ALIAS_NLS(euc-kr);
diff --git a/fs/nls/nls_cp950.c b/fs/nls/nls_cp950.c
index bc292e3b21b6..172df6371bd4 100644
--- a/fs/nls/nls_cp950.c
+++ b/fs/nls/nls_cp950.c
@@ -9480,5 +9480,5 @@ module_init(init_nls_cp950)
module_exit(exit_nls_cp950)
MODULE_DESCRIPTION("NLS Traditional Chinese charset (Big5)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
MODULE_ALIAS_NLS(big5);
diff --git a/fs/nls/nls_euc-jp.c b/fs/nls/nls_euc-jp.c
index b1dc36b6a7dc..0a4206bce896 100644
--- a/fs/nls/nls_euc-jp.c
+++ b/fs/nls/nls_euc-jp.c
@@ -579,4 +579,4 @@ module_init(init_nls_euc_jp)
module_exit(exit_nls_euc_jp)
MODULE_DESCRIPTION("NLS Japanese charset (EUC-JP)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_iso8859-1.c b/fs/nls/nls_iso8859-1.c
index eb085a11023a..b64a140dcb26 100644
--- a/fs/nls/nls_iso8859-1.c
+++ b/fs/nls/nls_iso8859-1.c
@@ -256,4 +256,4 @@ module_init(init_nls_iso8859_1)
module_exit(exit_nls_iso8859_1)
MODULE_DESCRIPTION("NLS ISO 8859-1 (Latin 1; Western European Languages)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_iso8859-13.c b/fs/nls/nls_iso8859-13.c
index 9766758c9a2e..09b17f260d11 100644
--- a/fs/nls/nls_iso8859-13.c
+++ b/fs/nls/nls_iso8859-13.c
@@ -284,4 +284,4 @@ module_init(init_nls_iso8859_13)
module_exit(exit_nls_iso8859_13)
MODULE_DESCRIPTION("NLS ISO 8859-13 (Latin 7; Baltic)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_iso8859-14.c b/fs/nls/nls_iso8859-14.c
index 482ac2388f26..cb06720ab70a 100644
--- a/fs/nls/nls_iso8859-14.c
+++ b/fs/nls/nls_iso8859-14.c
@@ -340,4 +340,4 @@ module_init(init_nls_iso8859_14)
module_exit(exit_nls_iso8859_14)
MODULE_DESCRIPTION("NLS ISO 8859-14 (Latin 8; Celtic)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_iso8859-15.c b/fs/nls/nls_iso8859-15.c
index c7527653f36d..2ff1aac3dd04 100644
--- a/fs/nls/nls_iso8859-15.c
+++ b/fs/nls/nls_iso8859-15.c
@@ -306,4 +306,4 @@ module_init(init_nls_iso8859_15)
module_exit(exit_nls_iso8859_15)
MODULE_DESCRIPTION("NLS ISO 8859-15 (Latin 9; Western European Languages with Euro)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_iso8859-2.c b/fs/nls/nls_iso8859-2.c
index c50e4a27137b..79c8b837424e 100644
--- a/fs/nls/nls_iso8859-2.c
+++ b/fs/nls/nls_iso8859-2.c
@@ -307,4 +307,4 @@ module_init(init_nls_iso8859_2)
module_exit(exit_nls_iso8859_2)
MODULE_DESCRIPTION("NLS ISO 8859-2 (Latin 2; Slavic/Central European Languages)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_iso8859-3.c b/fs/nls/nls_iso8859-3.c
index 4ad6172051ea..8be16a8faaba 100644
--- a/fs/nls/nls_iso8859-3.c
+++ b/fs/nls/nls_iso8859-3.c
@@ -307,4 +307,4 @@ module_init(init_nls_iso8859_3)
module_exit(exit_nls_iso8859_3)
MODULE_DESCRIPTION("NLS ISO 8859-3 (Latin 3; Esperanto, Galician, Maltese, Turkish)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_iso8859-4.c b/fs/nls/nls_iso8859-4.c
index 85743b2125de..8dde16ec0cc8 100644
--- a/fs/nls/nls_iso8859-4.c
+++ b/fs/nls/nls_iso8859-4.c
@@ -307,4 +307,4 @@ module_init(init_nls_iso8859_4)
module_exit(exit_nls_iso8859_4)
MODULE_DESCRIPTION("NLS ISO 8859-4 (Latin 4; old Baltic charset)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_iso8859-5.c b/fs/nls/nls_iso8859-5.c
index da8ce2e87329..4f25ab389b33 100644
--- a/fs/nls/nls_iso8859-5.c
+++ b/fs/nls/nls_iso8859-5.c
@@ -271,4 +271,4 @@ module_init(init_nls_iso8859_5)
module_exit(exit_nls_iso8859_5)
MODULE_DESCRIPTION("NLS ISO 8859-5 (Cyrillic)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_iso8859-6.c b/fs/nls/nls_iso8859-6.c
index 73a25c3f814e..832c3fed9532 100644
--- a/fs/nls/nls_iso8859-6.c
+++ b/fs/nls/nls_iso8859-6.c
@@ -262,4 +262,4 @@ module_init(init_nls_iso8859_6)
module_exit(exit_nls_iso8859_6)
MODULE_DESCRIPTION("NLS ISO 8859-6 (Arabic)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_iso8859-7.c b/fs/nls/nls_iso8859-7.c
index 0d6210823bed..65a18953d9c0 100644
--- a/fs/nls/nls_iso8859-7.c
+++ b/fs/nls/nls_iso8859-7.c
@@ -316,4 +316,4 @@ module_init(init_nls_iso8859_7)
module_exit(exit_nls_iso8859_7)
MODULE_DESCRIPTION("NLS ISO 8859-7 (Modern Greek)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_iso8859-9.c b/fs/nls/nls_iso8859-9.c
index 35db1163bc5d..cabfae48eeb1 100644
--- a/fs/nls/nls_iso8859-9.c
+++ b/fs/nls/nls_iso8859-9.c
@@ -271,4 +271,4 @@ module_init(init_nls_iso8859_9)
module_exit(exit_nls_iso8859_9)
MODULE_DESCRIPTION("NLS ISO 8859-9 (Latin 5; Turkish)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_koi8-r.c b/fs/nls/nls_koi8-r.c
index 4203158f6912..ccfb22744326 100644
--- a/fs/nls/nls_koi8-r.c
+++ b/fs/nls/nls_koi8-r.c
@@ -322,4 +322,4 @@ module_init(init_nls_koi8_r)
module_exit(exit_nls_koi8_r)
MODULE_DESCRIPTION("NLS KOI8-R (Russian)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_koi8-ru.c b/fs/nls/nls_koi8-ru.c
index 1eef891c5428..69f2076d8e28 100644
--- a/fs/nls/nls_koi8-ru.c
+++ b/fs/nls/nls_koi8-ru.c
@@ -81,4 +81,4 @@ module_init(init_nls_koi8_ru)
module_exit(exit_nls_koi8_ru)
MODULE_DESCRIPTION("NLS KOI8-RU (Belarusian)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_koi8-u.c b/fs/nls/nls_koi8-u.c
index df2a05a932ca..9b3966b2ca8f 100644
--- a/fs/nls/nls_koi8-u.c
+++ b/fs/nls/nls_koi8-u.c
@@ -329,4 +329,4 @@ module_init(init_nls_koi8_u)
module_exit(exit_nls_koi8_u)
MODULE_DESCRIPTION("NLS KOI8-U (Ukrainian)");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/fs/nls/nls_utf8.c b/fs/nls/nls_utf8.c
index db3065bb4a3e..457d18db7dbf 100644
--- a/fs/nls/nls_utf8.c
+++ b/fs/nls/nls_utf8.c
@@ -66,4 +66,4 @@ static void __exit exit_nls_utf8(void)
module_init(init_nls_utf8)
module_exit(exit_nls_utf8)
MODULE_DESCRIPTION("NLS UTF-8");
-MODULE_LICENSE("Dual BSD/GPL");
+MODULE_LICENSE("Dual Unicode/GPL");
diff --git a/include/linux/license.h b/include/linux/license.h
index 7cce390f120b..4a026445043b 100644
--- a/include/linux/license.h
+++ b/include/linux/license.h
@@ -9,7 +9,8 @@ static inline int license_is_gpl_compatible(const char *license)
|| strcmp(license, "GPL and additional rights") == 0
|| strcmp(license, "Dual BSD/GPL") == 0
|| strcmp(license, "Dual MIT/GPL") == 0
- || strcmp(license, "Dual MPL/GPL") == 0);
+ || strcmp(license, "Dual MPL/GPL") == 0
+ || strcmp(license, "Dual Unicode/GPL") == 0);
}
#endif
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 0492d6afc9a1..1fbbb430dd86 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -7753,6 +7753,7 @@ sub process {
Dual\ BSD/GPL|
Dual\ MIT/GPL|
Dual\ MPL/GPL|
+ Dual\ Unicode/GPL|
Proprietary
}x;
if ($extracted_string !~ /^"(?:$valid_licenses)"$/x) {
--
2.43.0
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] fs/nls: Change MODULE_LICENSE to use Unicode in place of BSD
2026-06-12 2:53 [PATCH] fs/nls: Change MODULE_LICENSE to use Unicode in place of BSD Tim Bird
@ 2026-06-12 4:31 ` Richard Fontana
2026-06-12 5:25 ` Bird, Tim
0 siblings, 1 reply; 3+ messages in thread
From: Richard Fontana @ 2026-06-12 4:31 UTC (permalink / raw)
To: Tim Bird
Cc: gregkh, torvalds, apw, joe, dwaipayanray1, lukas.bulwahn,
linux-spdx, linux-kernel
On Thu, Jun 11, 2026 at 10:54 PM Tim Bird <tim.bird@sony.com> 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".
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?
Not sure whether this ultimately matters, to be sure.
Richard
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: [PATCH] fs/nls: Change MODULE_LICENSE to use Unicode in place of BSD
2026-06-12 4:31 ` Richard Fontana
@ 2026-06-12 5:25 ` Bird, Tim
0 siblings, 0 replies; 3+ messages in thread
From: Bird, Tim @ 2026-06-12 5:25 UTC (permalink / raw)
To: Richard Fontana
Cc: gregkh, torvalds, apw, joe, dwaipayanray1, lukas.bulwahn,
linux-spdx, linux-kernel
Hey Richard,
Thanks for looking at this.
> -----Original Message-----
> From: Richard Fontana <rfontana@redhat.com>
> On Thu, Jun 11, 2026 at 10:54 PM Tim Bird <tim.bird@sony.com> 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
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-06-12 5:25 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-12 2:53 [PATCH] fs/nls: Change MODULE_LICENSE to use Unicode in place of BSD Tim Bird
2026-06-12 4:31 ` Richard Fontana
2026-06-12 5:25 ` Bird, Tim
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®