如何为开源发布组织项目

6
我计划将一个个人项目作为开源发布,主要用于教育目的(如果有的话)。它仅适用于Windows操作系统。
我的代码将在MIT许可证下发布,但我还使用了以下库/组件:
- ODE - Scintilla - Scintilla PJ Naughter 组件 - glaux
除了确保我包含每个库的许可证文件外,我应该如何将它们集成到源代码发布树中?
目前,对于每个库,我都使用手动自定义或构建的特定版本,并将其集成到源代码文件和二进制库文件中。这样做是否足够?我不想使结果包含完整的第三方源代码树,但同时我希望可以从头编译它。
另外,我想包括我的最终已编译可执行文件。这是否会受到反感?我将使用VirusTotal检查生成的exe文件。

1
包含或不包含第三方组件都是有效的选择。您可以仅在二进制文件中包含DLL,但要求用户在编译时下载其源代码。而且,发布二进制文件并不会被“看不起”,特别是对于安装了编译器的用户很少的Windows系统来说。 - Fred Foo
投票者是否愿意解释他们投票的动机? - Tom Anderson
如果这是一个Java项目,我会说你绝对不应该以任何形式包含依赖项,而是应该包含描述它们的元数据,以Gradle、Ivy或Maven脚本的形式。这将使您免于分发它们的需要,同时也允许用户轻松获取它们。在C世界中有类似的东西吗?如果您要发布特定的Linux发行版,可以创建一个源代码包,但是否有任何可移植的东西呢? - Tom Anderson
2个回答

2

至少,您应该添加一个包含所使用许可证的完整文本(例如MIT)的文件。我认为这是唯一必需的文件。

我通常还会包括和。添加一个文件也可能是个好主意。


1
我的代码将使用MIT许可证发布,但我还使用这些库/组件:[...] 目前,我为每个库使用特定的版本/修订版,我手动自定义或构建并集成源代码文件和二进制库文件。这样足够吗?我不想用完整的第三方源树来负担最终的软件包,但同时我希望它可以从头开始编译。
如果您想让其他人调试您的应用程序,除了仅有二进制发布之外,您可能还想提供一种“SDK”发布,其中包含您的代码作为源代码以及库依赖项作为二进制文件。
由于您还希望能够从所有源代码进行编译,因此出于实际原因,您还应为每个发布创建一个完整的源代码包。
创建一个脚本,可以自动构建每个软件包。将您的构建脚本也放入版本控制中。如果您现在没有任何版本控制,请先将您的源代码树放入版本控制中。
这些只是实际建议,以便您可以实现您所寻求的目标,同时也为其他用户提供良好的程序可访问性。
针对你列出的库/组件的许可证问题,我已尝试寻找更多信息。如果适用的话,我从SPDX开源许可证注册表中获取了短标识符。它包含每个许可证的链接,因此是一个很好的工具来分类您的包的许可证情况。
  • ODE (Open Dynamic Engine) - 许可证:{{link3:LGPL-v2.1+}} 或 {{link4:BSD-3-Clause}}
  • Scintilla (Scintilla and SciTE) - 许可证:{{link7:HPND}}
  • Scintilla PJ Naughter component - 许可证Scintilla PJ Naughter component 许可证

    版权 // 当您的产品以二进制形式发布时,您可以在任何产品(商业、共享软件、免费软件或其他)中包含源代码。 // 您可以随意修改源代码,但不能修改每个模块顶部的版权详细信息。 // 如果您想与应用程序一起分发源代码,则只能分发作者发布的版本。这是为了维护源代码的单一分发点。

  • GLAux (OpenGL 辅助库) - 许可证:未知/各种

(我不是律师) 看起来这些都是开放许可证,所以你大多数情况下不需要公开源代码。两点注意:

  1. 我无法获取关于 GLAux 的信息。你可能需要查看你拥有的源文件中适用的许可证。要找到更多信息有些复杂,似乎该库已经过时了。我看到它是OpenGL项目的一部分,但我不知道你使用哪些源文件以及你从哪里获取它们。

  2. Scintilla PJ Naughter 组件 有一个非标准许可证,不允许分发修改后的源代码。但你可以分发未更改的代码。我认为原作者的意图是他不想在自己的源分发旁边有其他源分发(分叉但不更改分叉)。只要你能遵守,我建议你遵守,如果你不能再遵守,请联系原作者并讨论这个问题。如果这不能解决实际问题,你可能需要联系律师,了解你在这种情况下超越原作者版权限制的权利。

我也想包含我的最终编译可执行文件。这样做是否不妥?我会使用VirusTotal检查生成的exe文件。
这样做有什么问题呢?这将使那些不能或不想编译软件的人能够访问它。
如果您正在寻找一个公共源代码存储库,可以接受您按照这些条款进行复制,github是一个好选择。他们唯一的义务是源代码可见,并且存储库可以被分叉 - 因为这并没有涉及到代码和每个分支所赋予的权利,所以请明确您拥有的代码许可证。像谷歌代码这样的其他网站不允许这样做,因为他们只接受OSI批准的许可证下的代码,而这对于Scintilla PJ Naughter component并不适用。
添加rainbru建议的文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接