我的朋友目前正准备分发他的软件,并希望清理他使用的软件许可证。策略是他收集提供许可文本的所有文件。
他收集了所有“明显”的许可证,例如他使用的Qt库的Qt许可证。但是,他还使用了Windows附带的一些Windows DLL,例如kernel32.dll
和advapi32.dll
。
他在哪里可以找到许可证文件,以便他可以用他的软件发布?第一个DLL文件kernel32
似乎基于http://en.wikipedia.org/wiki/Auto-linking指令自动链接到他的软件。第二个文件advapi32.dll
明确链接到他的软件,他希望通过收集提供许可证的文件来清理该文件的情况。
例如对于debian linux,他知道文件低于/usr/share/doc/<package of the library>/copyright
。
答案 0 :(得分:3)
不是一个选项,分发这些Windows组件是行不通的。不同的Windows版本具有这些DLL的非常不同的实现。即使具有相同版本的计算机可能具有不同的DLL版本,这些运行时组件通常也由Windows Update更新。强行覆盖它们通常是灾难性的,但Windows中的文件系统保护功能可以恢复损坏。
根本不需要分发这些DLL。只要程序员在代码中正确设置_WIN32_WINNT宏,每台Windows机器都已经拥有它们,并且微软承诺它们将与程序兼容。它选择了他选择支持的最低Windows版本,它可以防止意外地依赖于仅在更高版本中可用的winapi功能。出错只会阻止程序启动。
答案 1 :(得分:1)
由于您在评论中提到了GPL,您需要知道GPL有关于系统库的特殊语言。
GPL的两个版本都有他们的copyleft的例外,通常称为系统库例外。如果您要使用的GPL不兼容的库符合系统库的标准,那么您不必做任何特殊的使用它们;即使您分发包含它们的链接可执行文件,分发整个程序的源代码的要求也不包括这些库。
当然,您应该依赖许可证的实际法律语言,而不是常见问题解答。希望任何具有传染性的非GPL许可都采取类似的方法。
适用于Windows系统DLL的许可证是他们随附的桌面或服务器操作系统的最终用户许可证。这些有许多变体,例如批量许可证或开发订阅许可证。因此,您的朋友需要将这些内容视为系统库,不可分发,源不可分发,受操作系统许可证管理&#34;。
与Alex在评论中的断言相反,除了重新分发之外,Windows许可证确实(或至少试图)管理使用。在例如WINE中运行应用程序,可能没有某些所需系统库的有效许可证会出现问题,即使在安装/修补Windows的许可副本期间将系统库放置到硬盘驱动器上也是如此。我不是律师,但我很确定WINE环境的管理员会导致加载这些DLL,而不是第三方应用程序开发人员。
答案 2 :(得分:0)
您可能无法重新分发Windows系统DLL。其中包括kernel32
,ntdll
,advapi32
和其他几个。确切的列表不是固定的,但基本上,它几乎包含在system32目录中的任何内容。 (This list可能是一个好的开始。)这些文件被认为是Windows的一部分,因此被Windows EULA涵盖。
您可能重新分发的内容取决于您使用的编译器和/或任何第三方(未包含在Windows中)库。对于Microsoft Visual C ++,请参阅安装目录中的redist.txt
。它通常有类似于以下的文本:
Visual C++ Runtime files
Subject to the license terms for the software, you may redistribute the .EXE files (unmodified) listed below.
These files can be run as prerequisites during installation.
vcredist_x86.exe
vcredist_x64.exe
vcredist_IA64.exe
Subject to the license terms for the software, you may redistribute MSM files listed below unmodified as a part of your installation package:
[...]
有关重新分发MS C运行时的详细信息,请参阅here。
对于其他编译器/库,您需要查阅他们的文档。