GPLV2协议重点F&Q整理与总结

0. 本文概述与导读

本文是对GNU官网上GPLV2 F&Q重要问题的整理,特别关注基于GPL协议源码做二次开发的厂商或同学比较关心的问题,以及使用GPL协议产品的甲方客户可能关心的问题。参考信息见文章末尾。
每个二级标题是一个关键结论,二级标题下的内容是对F&Q的引用,带下划线的是问题,之后的是回答。

1.关于源码传播形式

1.1.受GPL协议影响的程序并不要求必须在网络上开源

I just found out that a company has a copy of a GPL’ed program, and it costs money to get it. Aren’t they violating the GPL by not making it available on the Internet?
No. The GPL does not require anyone to use the Internet for distribution. It also does not require anyone in particular to redistribute the program. And (outside of one special case), even if someone does decide to redistribute the program sometimes, the GPL doesn’t say he has to distribute a copy to you in particular, or any other person in particular.
What the GPL requires is that he must have the freedom to distribute a copy to you if he wishes to. Once the copyright holder does distribute a copy program to someone, that someone can then redistribute the program to you, or to anyone else, as he sees fit.

1.2.源码和二进制程序一起分发符合协议要求

I want to distribute binaries via physical media without accompanying sources. Can I provide source code by FTP instead of by mail order?
You’re supposed to provide the source code by mail-order on a physical medium, if someone orders it. You are welcome to offer people a way to copy the corresponding source code by FTP, in addition to the mail-order option, but FTP access to the source is not sufficient to satisfy section 3 of the GPL.
When a user orders the source, you have to make sure to get the source to that user. If a particular user can conveniently get the source from you by anonymous FTP, fine—that does the job. But not every user can do such a download. The rest of the users are just as entitled to get the source code from you, which means you must be prepared to send it to them by post.
If the FTP access is convenient enough, perhaps no one will choose to mail-order a copy. If so, you will never have to ship one. But you cannot assume that.
Of course, it’s easiest to just send the source with the binary in the first place.
If you distribute binaries via FTP, you should distribute source via FTP.

1.3.可以使用written offer和相同下载位置的方式进行源码分发

I want to make binaries available for anonymous FTP, but send sources only to people who order them.
If you want to distribute binaries by anonymous FTP, you still have to provide source through one of the options listed in section 3. This should not be hard. You can provide a written offer for source if you want; section 3(b) allows this. But if you can find a site to distribute your program, you can surely find one that has room for the sources.
No matter how you distribute the source, the sources you provide must correspond exactly to the binaries. In particular, you must make sure they are for the same version of the program—not an older version and not a newer version.
You can make the sources and binaries available on different machines, provided they are equally easy to get to, and provided that you have information next to the binaries saying where to find the sources.

1.4.客户自用的GPL软件可以不开源。

Does the GPL allow me to develop a modified version under a nondisclosure agreement?
Yes. For instance, you can accept a contract to develop changes and agree not to release your changes until the client says ok. This is permitted because in this case no GPL-covered code is being distributed under an NDA.
You can also release your changes to the client under the GPL, but agree not to release them to anyone else unless the client says ok. In this case, too, no GPL-covered code is being distributed under an NDA, or under any additional restrictions.
The GPL would give the client the right to redistribute your version. In this scenario, the client will probably choose not to exercise that right, but does have the right.

1.5.可以拒绝第3方的程序拷贝要求(无written offer情况下)

If I know someone has a copy of a GPL-covered program, can I demand he give me a copy?
No. The GPL gives him permission to make and redistribute copies of the program if and when he chooses to do so. He also has the right not to redistribute the program, when that is what he chooses.

1.6.第3方可以直接拿一个written offer来要求源码

What does this “written offer valid for any third party” mean? Does that mean everyone in the world can get the source to any GPL’ed program no matter what?
If you choose to provide source through a written offer, then anybody who requests the source from you is entitled to receive it.
If you commercially distribute binaries not accompanied with source code, the GPL says you must provide a written offer to distribute the source code later. When users non-commercially redistribute the binaries they received from you, they must pass along a copy of this written offer. This means that people who did not get the binaries directly from you can still receive copies of the source code, along with the written offer.
The reason we require the offer to be valid for any third party is so that people who receive the binaries indirectly in that way can order the source code from you.

My friend got a GPL-covered binary with an offer to supply source, and made a copy for me. Can I use the offer myself to obtain the source?
Yes, you can. The offer must be open to everyone who has a copy of the binary that it accompanies. This is why the GPL says your friend must give you a copy of the offer along with a copy of the binary—so you can take advantage of it.

1.7.母子机构间的拷贝是否构成GPL定义上的分发传播

Does moving a copy to a majority-owned, and controlled, subsidiary constitute distribution?
Whether moving a copy to or from this subsidiary constitutes ‘distribution’ is a matter to be decided in each case under the copyright law of the appropriate jurisdiction. The GPL does not and cannot override local laws. US copyright law is not entirely clear on the point, but appears not to consider this distribution.
If, in some country, this is considered distribution, and the subsidiary must receive the right to redistribute the program, that will not make a practical difference. The subsidiary is controlled by the parent company; rights or no rights, it won’t redistribute the program unless the parent company decides to do so.

2.关于收费

2.1.允许对程序进行售卖,并且价格没有限制,只限制了源码传播的价格

Does the GPL allow me to sell copies of the program for money?
Yes, the GPL allows everyone to do this. The right to sell copies is part of the definition of free software. Except in one special situation, there is no limit on what price you can charge. (The one exception is the required written offer to provide source code that must accompany binary-only release.)
但关于源码的传播费用GPL协议做了约定,不能超出传播成本:
b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

2.2.允许对程序下载行为收费

Does the GPL allow me to charge a fee for downloading the program from my distribution site?
Yes. You can charge any fee you wish for distributing a copy of the program. If you distribute binaries by download, you must provide “equivalent access” to download the source—therefore, the fee to download source may not be greater than the fee to download the binary.

3.关于基于GPL源码编程

3.1.动态库链接导致的GPL传染

If a library is released under the GPL (not the LGPL), does that mean that any program which uses it has to be under the GPL?
Yes, because the program actually links to the library. As such, the terms of the GPL apply to the entire combination. The software modules that link with the library may be under various GPL compatible licenses, but the work as a whole must be licensed under the GPL. See also: What does it mean to say a license is “compatible with the GPL”?

3.2.Run-time library例外(没看懂)

I’m writing a Windows application with Microsoft Visual C++ (or Visual Basic) and I will be releasing it under the GPL. Is dynamically linking my program with the Visual C++ (or Visual Basic) run-time library permitted under the GPL?
The GPL permits this because that run-time library normally accompanies the compiler or interpreter you are using. So it falls under the exception in GPL section 3.
That doesn’t mean it is a good idea to write the program so that it only runs on Windows. Doing so results in a program that is free software but “trapped” (in this case, trapped by Windows instead of by Java, but the effect is the same). (Historical note: As of December 2006 Sun is in the middle of rereleasing its Java platform under GNU GPL.)

3.3.Plugin的方式通常难以避免GPL传染

When are a program and its plug-ins considered a single combined program?
It depends on how the main program invokes its plug-ins. If the main program uses fork and exec to invoke plug-ins, and they establish intimate communication by sharing complex data structures, or shipping complex data structures back and forth, that can make them one single combined program. A main program that uses simple fork and exec to invoke plug-ins and does not establish intimate communication between them results in the plug-ins being a separate program.
If the main program dynamically links plug-ins, and they make function calls to each other and share data structures, we believe they form a single combined program, which must be treated as an extension of both the main program and the plug-ins. If the main program dynamically links plug-ins, but the communication between them is limited to invoking the ‘main’ function of the plug-in with some options and waiting for it to return, that is a borderline case.
Using shared memory to communicate with complex data structures is pretty much equivalent to dynamic linking.

3.4.可以将源码放入自有独立的非gpl协议的lib库中,并被GPL协议程序所调用。前提是自有且提供一个被GPL协议调用的例外申明

Can I write free software that uses nonfree libraries?
If you do this, your program won’t be fully usable in a free environment. If your program depends on a nonfree library to do a certain job, it cannot do that job in the Free World. If it depends on a nonfree library to run at all, it cannot be part of a free operating system such as GNU; it is entirely off limits to the Free World.
So please consider: can you find a way to get the job done without using this library? Can you write a free replacement for that library?
If the program is already written using the nonfree library, perhaps it is too late to change the decision. You may as well release the program as it stands, rather than not release it. But please mention in the README that the need for the nonfree library is a drawback, and suggest the task of changing the program so that it does the same job without the nonfree library. Please suggest that anyone who thinks of doing substantial further work on the program first free it from dependence on the nonfree library.
Note that there may also be legal issues with combining certain nonfree libraries with GPL-covered Free Software. Please see the question on GPL software with GPL-incompatible libraries for more information.

4.客户端GPL传染性

4.1. 使用Oracle GPL协议的客户端驱动对于应用的传染性是可规避的

应用程序有合理规避GPL风险的手段,即便使用Oracle官方驱动。应用程序基于JDBC或ODBC协议,也可以合法使用Oracle官方驱动包而不被传染。基本逻辑是应用与oracle的驱动之间是ODBC/JDBC manager,而ODBC/JDBC manager本身不是GPL协议的。如下是MariaDB官网给的说明,参见https://mariadb.com/kb/zh-cn/licensing-faq/#using-a-database-source-independent-framework。

The reason the GPL in the MySQL client library would not affect your application in this case is that the GPL client is supporting a standard interface and is thus merely an optional component among many. Your application could just as easily use the framework to connect to a RDBMS other than MariaDB or MySQL.

Any software can be connected to the GPL v2 licensed MySQL Connector/ODBC, without the need for that software to be GPLed. This is because there is a piece of general management software, the ODBC manager, between the GPLed MySQL Connector/ODBC and your software. If any logic would require the software which interfaces with MySQL Connector/ODBC to be GPL, then that would apply also to the ODBC manager itself. Yet, the ODBC manager is not GPL, neither on Windows nor on Linux. By consequence, no one would be allowed to use MySQL ODBC driver for anything.

4.2. 可以使用LGPL协议的mariadb客户端驱动,完全不会传染应用

同时除了Oracle官方驱动外,还有MariaDB的驱动可以使用。MariaDB的客户端驱动基于LGPL协议发布,同样遵守MySQL通信协议,可以用来链接MySQL数据库,对客户端没有任何GPL协议影响的可能,具体参考https://mariadb.com/kb/zh-cn/licensing-faq/ 和 https://mariadb.com/kb/en/client-libraries/。

5.参考资料

https://www.gnu.org/licenses/old-licenses/gpl-2.0-faq.html
https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
https://jxself.org/translations/gpl-2.zh.shtml
https://mariadb.com/kb/zh-cn/licensing-faq/#using-a-database-source-independent-framework

转载请注明转自高孝鑫的博客

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值