LGPL规定是必须公开库源代码,编译方法,并给用户relink的权利。
也就是严格意义上用户必须能用他们喜欢的库版本替换掉你软件里的库版本。
理论基础
以Windows为例
如果你动态链接了一个LGPL库,并且延迟加载(使用LoadLibrary等),用户可以随时替换掉你的dll文件,那么你只需要公开你修改的LGPL dll的源代码。如果你没修改源代码,那么你什么都不需要做。
如果你静态链接了一个LGPL库/静态链接了一个dll,那么你需要提供链接方dll/exe的obj文件,以及被链接的LGPL库源代码,这样用户可以修改LGPL库后,重新链接到你的程序上。
这是LGPL FAQ里的内容,加上部分我自己的理解。如有任何问题请指正。
实际问题
在开放的平台上(如Windows,Linux,Mac OS X等桌面操作系统),平台本身不限制用户修改程序,只要你拥有管理员/root权限,你可以替换任何程序的任何部分。只要软件开发者遵守LGPL,用户就可以享受LGPL所带来的权利。
但如果目标平台是一个封闭环境,比如Windows (Phone) Store,苹果App Store,那么用户不借助一些ugly workaround(如改Windows权限,越狱iPhone/WP),实际上是没有办法享受LGPL规定的这些权利的。
这种情况下,开发者在Store app中使用LGPL库是否算违反了使用协议?