我打算编写一个C库,它将充当其他几个库的伞形“包装器”。一些库将是GPL,一些将是专有的。此外,某些库可能在编译时不可用,因此我计划让autotools在配置期间检测它们。我也想知道我是否应该支持这些弱依赖项,然后在运行时检测它们 - 特别是对于专有库。原因如下:
无需详细说明,该库旨在提供用于与各种设备通信的API,其中一些设备没有开源驱动程序。目前很难为这些设备编程,因为没有标准的,易于使用的API。每个供应商都提供自己的。还有一些其他API可以尝试包装它们,但它们基本上都是
因此,我的最终目标是构建一个非常简单直接的C API,它有可能将它变成发行版,这样人们就可以用简单的apt-get
为这些设备编写程序。
我的问题是,我应该如何最好地设计库与GPL兼容和Debian友好,但仍然能够在必要时调用专有库?
理想情况下,我希望用户能够使用此库来获取程序,然后只要供应商的用户级驱动程序安装到预期的位置,一切都应该开箱即用。 / p>
我的担忧是双重的:
其他软件包如何处理链接到专有库并具有运行时弱依赖性的问题? dlopen
是正确的方法吗?我应该dlopen
只有专有的东西吗? Debian可能会拒绝这样的一揽子计划的原因是什么或者是什么原因?
最后,我意识到这可能不是关于Debian政策这个问题的正确论坛,所以有人能指出我更好的地方提出这个问题吗?
感谢。
答案 0 :(得分:0)
我与Debian没有任何关系,也无法谈论他们的政策。但是,对于您的框架,这似乎是一种合理的方法:
libdl
加载主程序(如果您的主程序是GPL,则需要许可例外以允许链接专有插件)重点是你的插件系统应该对自由软件有用,而不仅仅是一个允许加载专有代码的特洛伊木马。
答案 1 :(得分:0)
使用dlopen不会改变您编写程序以同时故意链接到专有库和GPL库的事实,它只是将链接从编译时间转移到运行时。虽然大众之间的共识是,GPL并未以这种方式在运行时动态链接,但依赖这种共同理解并不是安全的法律建议。我解决问题的方法是编写一个带有插件的通用API的程序(可以使用dlopen,但关键是你没有专门编写这个程序来链接到专有库)。该程序必须在免费许可下,该许可与您最终希望与之一起使用的所有插件兼容(即LGPL,或该API除外的GPL)。然后为GPL库和专有库编写单独的插件,并单独分发它们。如果一次只能加载一个插件,那么就没有法律问题。如果有必要同时允许多个插件,那么您需要小心分开您的发行版。由于GPL是分发许可证,最终用户所做的事情并不是一个问题。