我应该如何将外部库包含在开源项目中?
我创建了一个从Visual Studio运行的开源项目。但它依靠一些外部图书馆的工作。这些库也是开源的。我想知道的问题是,如果我应该我应该如何将外部库包含在开源项目中?
- 为用户提供这些库,并让他们下载源代码,然后将它们
- 点用户添加到项目中的dll,并让他们直接引用它
- 直接包含该dll到项目
- 包括这些库的源代码,直接进入项目
这是最好的办法或这样的标准呢?
有一些指导原则不是开源的,但我认为它们适用。
我总是在源代码控制中包含所有外部库的二进制文件(System.dll等标准文件除外)。这样,签出源代码的人可以立即构建项目。此外,我可以轻松切换到较旧版本的项目,并立即在用于构建该版本的版本中具有依赖关系 - 这在调试较旧版本的软件时特别有用。
我见过的大多数项目都包含ThirdParty文件夹(或类似的东西)与项目中的dll文件,并且项目引用这些文件。这确保每个人都有相同的版本,并且不需要更改引用。
如果在版本控制中,它也使得如果您需要切换回早期版本,它也更容易进行调试。
(1)对于下载项目源代码的用户来说很好,假设依赖关系列表不会失控并且很容易获取。 (2)基本上与(1)相同,只要您指的是其他人构建的二进制文件即可。我不会在您自己的软件包之外构建和分发dll。
(3)对于二进制发行版,我会做到这一点,包括每一个依赖性,所以我的软件运行“开箱即用”
(4)除非你需要到餐桌的其他库不要这样做由于某种原因(希望这种情况不会发生)
编辑:对于您自己的源代码管理,请做任何最简单的操作。我的建议只针对您的发行版(源代码和二进制文件)。将源代码放在第三方库中并不少见,或者只是放入头文件和二进制库 - 无论哪种方式最适合您的情况。
我想说这取决于图书馆的大小,可用性和波动性。
它们越大,包含它们的越少,并且越想指向它们。
您的用户在获取它们时可能遇到的问题越多,您希望包含的问题就越多。 Sourceforge上的某些内容可能会停留在那里,但Joe的个人网站上的某些内容可能不会。
如果图书馆可能会改变导致问题,你想在你的项目中包括一个版本。
如果图书馆可能改变以改善某些事物而不会破坏事物,那么您希望指向它们。
至少,您应该提供DLL,除非它们太大,并用该版本标记它们。
另外,检查许可证。特别是在像GPL这样的版权许可下,您可能有义务确保所有内容的来源都可用。
你是什么意思标记他们的版本?指定他们应该使用的版本? – sean 2009-07-24 16:51:26
您可以根据自己的喜好简单或复杂。作为用户,我更喜欢将所有库都包含在产品的可下载发行版中。这对于那些只想用最少的大量工具就可以使用你的项目的人来说,尽可能简单。下载外部库对于用户来说确实很难(特别是在.Net世界中),并且给它们一个已知的良好的依赖关系可以是一个真正的帮助。
你应该给他们至少有两个选项:
- 二进制下载,所有可执行文件和库(无源)
- 完整的源代码为您自己的代码(MO外部库源)
除非您修改了外部库,否则您不应提供外部库的源代码,在这种情况下,您必须这样做。提供libarary源只是增加了你可以获得源代码的不同位置,并且增加了你对于什么版本的困惑。
当然,您应该提供指向图书馆主页的链接。如果您使用GPL进行发布,则还必须准备好自己直接提供图书馆资源。
感谢所有回答。基本上,答案几乎相同,我只会选择最快的回答者。 – sean 2009-07-27 06:00:17