diff --git a/.gitignore b/.gitignore
index ad735c2d..bb66858a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,13 +35,10 @@ libft0cc/build
libft0cc/build_ms
Testing/Temporary
-distribute/*
-
-# ignore submodules
-Dn-help/*
-
# this should be automatically generated at build
+distribute/*
hlp/HTMLDefines.h
+Dn-FamiTracker.rc_status.txt
# generated headers
/Source/drivers/*.h
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d9c69d9b..46263c2d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,11 +6,11 @@ Written by D.P.C.M.
Version 0.5.2.9
-Last updated: January 07, 2026
+Last updated: January 11, 2026
---
-## Unreleased - 2026-01-07
+## Unreleased - 2026-01-11
### Important changes
@@ -18,7 +18,7 @@ Last updated: January 07, 2026
### Improvements
-- ...
+- Clarify NSF driver licensing (@Gumball2415 #401)
### Bug fixes
@@ -42,8 +42,9 @@ Last updated: January 07, 2026
- Refactor custom build commands in `.vcxproj`s (@Gumball2415 #398)
- Update CMake build scripts (@Gumball2415 #398)
- Update CMake source list in `exe.cmake` (@Gumball2415 #398)
-
-
+- Update NSF driver licensing (@Gumball2415 #401)
+ - Add MIT-0 license for NSF driver license
+ - Fix `LICENSE.md` links
## Dn0.5.2 - 2025-08-18
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 65b08e6e..20eba795 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -46,7 +46,7 @@ find_package(Python 3.10)
# update version in Dn-FamiTracker.rc
add_custom_command(
- OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/Dn-FamiTracker.rc
+ OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/Dn-FamiTracker.rc_status.txt
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/version.h
COMMAND ${Python_EXECUTABLE} resource_version_update.py
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
@@ -75,11 +75,14 @@ add_custom_command(
# update changelog
add_custom_command(
OUTPUT ${DNHELP_SRC_DIR}/changelog.htm
- DEPENDS ${DNHELP_SRC_DIR}/changelog-shell.htm
+ ${DNHELP_SRC_DIR}/license.htm
+ DEPENDS ${DNHELP_SRC_DIR}/changelog-template.htm
+ ${DNHELP_SRC_DIR}/license-template.htm
CHANGELOG.md
+ LICENSE.md
WORKING_DIRECTORY ${DNHELP_SRC_DIR}
- COMMAND call ${DNHELP_SRC_DIR}/update-changelog-htm.bat
- COMMENT "Updating changelog.htm."
+ COMMAND call ${DNHELP_SRC_DIR}/update-htm-templates
+ COMMENT "Updating templated pages."
VERBATIM)
# builds the NSF driver
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c81de4a9..b50e3bd3 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -12,14 +12,15 @@ To edit and/or build the source, you may use Visual Studio 2022, or alternativel
- Note that HTML Help Workshop is no longer supported and thus no longer available to download on Microsoft's website.
- [Link to archived download.](https://web.archive.org/web/20200720082840/http://download.microsoft.com/download/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe)
- [Pandoc](https://pandoc.org), for markdown document conversion.
- - Currently used for HTMLHelp manual changelog compiling.
-- For NSF driver compiling:
- - [CC65 build tools](https://cc65.github.io/), make sure `ld65` and `ca65` is available in environment path.
+ - Currently used for templated pages for the HTMLHelp manual.
+- [CC65 build tools](https://cc65.github.io/)
+ - Used for NSF driver compiling.
+ - Make sure `ld65` and `ca65` is available in environment path.
- For miscellaneous custom build scripts:
- [Python 3.10+](https://www.python.org/)
- For any IDE that supports building via CMake:
- CMake version 3.16+
- - The latest MSVC build tools
+ - The latest MSVC build tools
- may be installed by VS Installer or by other sources
- Windows 11 SDK (10.0.26100.0)
- may be installed through VS Installer or by other sources
diff --git a/Dn-FamiTracker.vcxproj b/Dn-FamiTracker.vcxproj
index 3245f3b4..a1391c46 100644
--- a/Dn-FamiTracker.vcxproj
+++ b/Dn-FamiTracker.vcxproj
@@ -693,7 +693,6 @@
Generating map file for help compiler.
call $(SolutionDir)generate-helpmap.bat
Dn-help\hlp\HTMLDefines.h;%(Outputs)
- $(SolutionDir)Dn-help\hlp\changelog_shell.htm;%(AdditionalInputs)
true
@@ -847,7 +846,8 @@
python $(SolutionDir)resource_version_update.py
Updating version info in resource file.
- $(SolutionDir)Dn-FamiTracker.rc;%(Outputs)
+ $(SolutionDir)Dn-FamiTracker.rc;
+ $(SolutionDir)Dn-FamiTracker.rc_status.txt;%(Outputs)
true
diff --git a/Dn-help b/Dn-help
index d4ef985d..b893c34a 160000
--- a/Dn-help
+++ b/Dn-help
@@ -1 +1 @@
-Subproject commit d4ef985d9e418ff357404a704e315c69d4db538c
+Subproject commit b893c34a4b31f7f37e091d022b7fda287188f30e
diff --git a/LICENSE-MIT-0.txt b/LICENSE-MIT-0.txt
new file mode 100644
index 00000000..afe849d1
--- /dev/null
+++ b/LICENSE-MIT-0.txt
@@ -0,0 +1,18 @@
+MIT No Attribution
+
+Copyright 2020-2026 D.P.C.M.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/LICENSE.md b/LICENSE.md
index 67f599f4..49f34b4a 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,12 +1,14 @@
# Licenses
+---
+
The application is distributed under the
[GPLv3+ license](https://www.gnu.org/licenses/gpl-3.0.en.html), or any later
version.
-```_
+```text
Dn-FamiTracker - NES/Famicom sound tracker
-Copyright (C) 2020-2025 D.P.C.M.
+Copyright (C) 2020-2026 D.P.C.M.
FamiTracker Copyright (C) 2005-2020 Jonathan Liss
0CC-FamiTracker Copyright (C) 2014-2018 HertzDevil
@@ -27,7 +29,7 @@ along with this program. If not, see https://www.gnu.org/licenses/.
## Tracker source code and libraries
The tracker source code is distributed under the
-[GPLv3+ license](https://www.gnu.org/licenses/gpl-3.0.en.html), or any later
+[GPLv3+ license](https://www.gnu.org/licenses/gpl-3.0.html), or any later
version.
- FamiTracker
@@ -40,50 +42,36 @@ version.
- Licensed under
[GPLv2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html), or any
later version.
- - Copyright (C) 2006 Brezza, 2012-2025 Brad Smith
- - Used under an [informal license](Source/APU/nsfplay/readme.txt).
-- VRC7/OPLL sound emulator from emu2413 v1.5.9
- - Copyright (C) 2001-2019 Mitsutaka Okazaki
+- NSFPlay
+ - Copyright (C) 2006 Brezza, 2012-2026 Brad Smith
+ - Used under an [informal license](https://github.com/bbbradsmith/nsfplay/blob/master/readme.txt).
+- VRC7/OPLL sound emulator from [emu2413](https://github.com/digital-sound-antiques/emu2413) v1.5.9
+ - Copyright (C) 2001-2022 Mitsutaka Okazaki
- Licensed under the [MIT license](https://mit-license.org/).
-- FDS and N163 sound emulator from Mesen
- - Copyright (C) 2014-2024 Sour
+- FDS and N163 sound emulator from [Mesen](https://github.com/SourMesen/Mesen2)
+ - Copyright (C) 2014-2025 Sour
- Licensed under
- [GPLv3](https://www.gnu.org/licenses/old-licenses/gpl-3.0.en.html), or any
+ [GPLv3](https://www.gnu.org/licenses/gpl-3.0.html), or any
later version.
-- Blip_buffer 0.4.1
+- [Blip_buffer](https://www.slack.net/~ant/libs/audio.html#Blip_Buffer) 0.4.1
- Copyright (C) 2003-2006 Shay Green
- Licensed under
[LGPLv2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html)
- modified by nyanpasu64
-- Free FFT and convolution (C++)
+- [Free FFT and convolution](https://www.nayuki.io/page/free-small-fft-in-multiple-languages) (C++)
- Copyright (C) 2017 Project Nayuki
- Licensed under the
[MIT license](https://mit-license.org/).
-- JSON for Modern C++
+- [JSON for Modern C++](https://github.com/nlohmann/json/)
- Copyright (C) 2013-2024 Niels Lohmann
- Licensed under the [MIT license](https://mit-license.org/).
-- libsamplerate
+- [libsamplerate](https://github.com/libsndfile/libsamplerate)
- Copyright (C) 2012-2016, Erik de Castro Lopo .
All rights reserved.
- Licensed under the
[BSD-2-Clause license](https://www.freebsd.org/copyright/freebsd-license/).
-## NSFs, Exported music, modules, etc.
-
-The licenses mentioned for the NSF driver and the tracker source do not apply to
-exported media made with the program that does not contain executable code that
-resembles any source file, such as exported `.wav`s, `.txt`s, `.json`s, or `.csv`s.
-
-[jsr's comment on music created with FT.](http://forums.famitracker.com/viewtopic.php?f=4&t=122&p=741#p741)
-
-However, NSFs/ROMs contain machine code that more or less corresponds to the NSF
-driver source, and thus the software licenses may apply. More details can be
-found [in the NSF source's license](./Source/drivers/asm/LICENSE.md).
-
-This does not apply to exported assembly or binary music data, as they do not
-include the NSF driver data.
-
## NSF driver source code
-Dn-FT NSF driver changes are under GPL v2 due to 0CC-FT. More details can be
-found [in the NSF source's license](./Source/drivers/asm/LICENSE.md).
+Dn-FT NSF driver modifications are under [MIT-0](LICENSE-MIT-0.txt). More details can be found
+[in the NSF driver source's license](https://github.com/Dn-Programming-Core-Management/Dn-FamiTracker/blob/main/Source/drivers/asm/LICENSE.md).
diff --git a/Source/drivers/asm/LICENSE.md b/Source/drivers/asm/LICENSE.md
index 7d4900d5..dc7aa1b0 100644
--- a/Source/drivers/asm/LICENSE.md
+++ b/Source/drivers/asm/LICENSE.md
@@ -1,8 +1,14 @@
+```text
+Dn-FamiTracker NSF Driver Copyright (C) 2020-2026 D.P.C.M.
+0CC-FamiTracker NSF Driver Copyright (C) 2014-2018 HertzDevil
+FamiTracker NSF music driver Copyright (C) 2005-2015 Jonathan Liss
+```
+
The original FT NSF driver's source code is explicitly *not* under the
GPL.[^1][^2][^3]
It is instead source-available, under no explicit license. Based on its usecase,
-and jsr's comments [^4], I presume that distribution and modification is
+and jsr's comments [^4], it is presumed that distribution and modification is
permitted, and attribution is recommended.
[^1]:
@@ -10,12 +16,15 @@ permitted, and attribution is recommended.
[^3]:
[^4]:
-0CC-FamiTracker's NSF driver code modifications is licensed under GPL v2,
-which may restrict anyone sharing compiled NSFs and binaries without sharing the
-assembly source, as they contain machine code that directly correlates to the
-NSF driver source.
+0CC-FamiTracker's modified NSF driver source comes with a
+[GPL v2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) license
+file. Although
+[the output of the program is not covered by the GNU GPL](https://www.gnu.org/licenses/gpl-faq.en.html#WhatCaseIsOutputGPL),
+the NSF/ROM output might be considered as an executable binary, which in theory
+may restrict anyone sharing compiled NSFs and binaries without sharing the
+assembly source, according to section 3.
-0CC-FT NSF driver modifications are under GPL v2.
+Dn-FamiTracker's modifications are under [MIT-0](../../../LICENSE-MIT-0.txt).
-Dn-FT NSF driver modifications are under the same license as 0CC-FT NSF driver
-modifications.
+Dn-FamiTracker NSF driver source as a whole is effectively under the
+[GPL v2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) license.
diff --git a/resource_version_update.py b/resource_version_update.py
index fff3662f..e07c758a 100644
--- a/resource_version_update.py
+++ b/resource_version_update.py
@@ -57,4 +57,12 @@ def overwrite_rc(key_str: str, val_str: str):
)
-print(f"Resource versions updated as {ver_api}.{ver_maj}.{ver_min}.{ver_bld}")
\ No newline at end of file
+print(f"Resource versions updated as {ver_api}.{ver_maj}.{ver_min}.{ver_bld}")
+
+# TODO: Copy Dn-FamiTracker.rc to a temp file first before executing this
+# annoying; Visual Studio Custom build requires that we have an output
+# but during rebuilding or cleaning, it deletes that output
+# we can't just delete Dn-FamiTracker.rc!
+# so instead, we indicate that this is the output it can scapegoat
+with open("Dn-FamiTracker.rc_status.txt", mode="w") as output:
+ output.write("all good!")