注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

勇敢的劳尤条

 
 
 

日志

 
 

在基于GPL发布的软件中,可以调用闭源库吗(续1)  

2014-01-20 16:11:11|  分类: 开源的困惑与诱惑 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这里,还是继续读GNU的FAQ,更多的了解一些。【重点】(8)(9)(12)(14)(18)
(1)链接了别人的GPL程序,那么我一定要GPL我的程序吗?不准确,其实只要与GPL兼容的许可即可。
You have a GPL'ed program that I'd like to link with my code to build a proprietary program. Does the fact that I link with your program mean I have to GPL my program? (#LinkingWithGPL)

Not exactly. It means you must release your program under a license compatible with the GPL (more precisely, compatible with one or more GPL versions accepted by all the rest of the code in the combination that you link). The combination itself is then available under those GPL versions.


(2)如果这样,那我可以向你的程序要来LGPL许可吗? 你可以去问,但是大多数作者不会同意。
If so, is there any chance I could get a license of your program under the Lesser GPL? (#SwitchToLGPL)

You can ask, but most authors will stand firm and say no. The idea of the GPL is that if you want to include our code in your program, your program must also be free software. It is supposed to put pressure on you to release your program in a way that makes it part of our community.

You always have the legal alternative of not using our code.


(3)发布一个非开源的驱动,链接了linux内核,是否意味着侵犯了GPL?   是的!!!内核是GPLv2发布的,因为驱动会导致一个更大的联合作品。所以,驱动要开源。
Does distributing a nonfree driver meant to link with the kernel Linux violate the GPL? (#NonfreeDriverKernelLinux)

Linux (the kernel in the GNU/Linux operating system) is distributed under GNU GPL version 2. Does distributing a nonfree driver meant to link with Linux violate the GPL?

Yes, this is a violation, because effectively this makes a larger combined work. The fact that the user is expected to put the pieces together does not really change anything.

Each contributor to Linux who holds copyright on a substantial part of the code can enforce the GPL and we encourage each of them to take action against those distributing nonfree Linux-drivers.


(4)我写了一个应用,链接到了许多不同的部分,每个部分有不同的许可证。我的程序应该使用哪种许可证呢?
I have written an application that links with many different components, that have different licenses. I am very confused as to what licensing requirements are placed on my program. Can you please tell me what licenses I may use? (#ManyDifferentLicenses)

To answer this question, we would need to see a list of each component that your program uses, the license of that component, and a brief (a few sentences for each should suffice) describing how your library uses that component. Two examples would be:

  • To make my software work, it must be linked to the FOO library, which is available under the Lesser GPL.
  • My software makes a system call (with a command line that I built) to run the BAR program, which is licensed under “the GPL, with a special exception allowing for linking with QUUX”.

(5)我想要将GPL软件加入到我的专有系统,可以吗?不可以!!!
I'd like to incorporate GPL-covered software in my proprietary system. Can I do this? (#GPLInProprietarySystem)

You cannot incorporate GPL-covered software in a proprietary system. The goal of the GPL is to grant everyone the freedom to copy, redistribute, understand, and modify a program. If you could incorporate GPL-covered software into a non-free system, it would have the effect of making the GPL-covered software non-free too.

A system incorporating a GPL-covered program is an extended version of that program. The GPL says that any extended version of the program must be released under the GPL if it is released at all. This is for two reasons: to make sure that users who get the software get the freedom they should have, and to encourage people to give back improvements that they make.

However, in many cases you can distribute the GPL-covered software alongside your proprietary system. To do this validly, you must make sure that the free and non-free programs communicate at arms length, that they are not combined in a way that would make them effectively a single program.

The difference between this and “incorporating” the GPL-covered software is partly a matter of substance and partly form. The substantive part is this: if the two programs are combined so that they become effectively two parts of one program, then you can't treat them as two separate programs. So the GPL has to cover the whole thing.

If the two programs remain well separated, like the compiler and the kernel, or like an editor and a shell, then you can treat them as two separate programs—but you have to do it properly. The issue is simply one of form: how you describe what you are doing. Why do we care about this? Because we want to make sure the users clearly understand the free status of the GPL-covered software in the collection.

If people were to distribute GPL-covered software calling it “part of” a system that users know is partly proprietary, users might be uncertain of their rights regarding the GPL-covered software. But if they know that what they have received is a free program plus another program, side by side, their rights will be clear.


(6)我想要将GPL软件加入到我的专有系统。我可以给GPL软件加一个”包装“,然后对这个包装以GPL兼容的更宽松的许可证发布吗?不行!!!X11与GPL兼容,所以可以在GPL项目中增加X11模块。但是,如果要将X11和GPL都合并到一个更大的软件中,整个软件包含了GPL部分,所以它整体要以GPL发布。
I'd like to incorporate GPL-covered software in my proprietary system. Can I do this by putting a “wrapper” module, under a GPL-compatible lax permissive license (such as the X11 license) in between the GPL-covered part and the proprietary part? (#GPLWrapper)

No. The X11 license is compatible with the GPL, so you can add a module to the GPL-covered program and put it under the X11 license. But if you were to incorporate them both in a larger program, that whole would include the GPL-covered part, so it would have to be licensed as a whole under the GNU GPL.

The fact that proprietary module A communicates with GPL-covered module C only through X11-licensed module B is legally irrelevant; what matters is the fact that module C is included in the whole.


(7)关于运行时库的例外。
Where can I learn more about the GCC Runtime Library Exception? (#LibGCCException)

The GCC Runtime Library Exception covers libgcc, libstdc++, libfortran, libgomp, libdecnumber, and other libraries distributed with GCC. The exception is meant to allow people to distribute programs compiled with GCC under terms of their choice, even when parts of these libraries are included in the executable as part of the compilation process. To learn more, please read our FAQ about the GCC Runtime Library Exception.


(8)如果我修改了GPL程序,并链接到XX公司的可移植库。我不能发布这些库源码,因为属于XX公司,用户只能自己获取。GPL为什么不允许这样的行为?有两个原因。第一,如果我们允许A公司编写专有文件AA,B公司发布GPL软件,链接到AA。结果是会导致GPL漏洞。相当于全权委托A公司管理和修改GPL代码。让所有用户都能得到源码是GPL的目标,这种现象要避免。
更具体,链接到A公司AA文件的程序版本,将不会是真正自由的软件。
I'd like to modify GPL-covered programs and link them with the portability libraries from Money Guzzler Inc. I cannot distribute the source code for these libraries, so any user who wanted to change these versions would have to obtain those libraries separately. Why doesn't the GPL permit this? (#MoneyGuzzlerInc)

There are two reasons for this. First, a general one. If we permitted company A to make a proprietary file, and company B to distribute GPL-covered software linked with that file, the effect would be to make a hole in the GPL big enough to drive a truck through. This would be carte blanche for withholding the source code for all sorts of modifications and extensions to GPL-covered software.

Giving all users access to the source code is one of our main goals, so this consequence is definitely something we want to avoid.

More concretely, the versions of the programs linked with the Money Guzzler libraries would not really be free software as we understand the term—they would not come with full source code that enables users to change and recompile the program.


(9)Q独自发布的时候,有要求与GPL不兼容,当Q在更大的项目中,就不会。请问,这样算GPL兼容吗?Q能和GPL程序联合吗? 
If the license for a module Q has a requirement that's incompatible with the GPL, but the requirement applies only when Q is distributed by itself, not when Q is included in a larger program, does that make the license GPL-compatible? Can I combine or link Q with a GPL-covered program? (#GPLIncompatibleAlone)

If a program P is released under the GPL that means *any and every part of it* can be used under the GPL. If you integrate module Q, and release the combined program P+Q under the GPL, that means any part of P+Q can be used under the GPL. One part of P+Q is Q. So releasing P+Q under the GPL says that Q any part of it can be used under the GPL. Putting it in other words, a user who obtains P+Q under the GPL can delete P, so that just Q remains, still under the GPL.

If the license of module Q permits you to give permission for that, then it is GPL-compatible. Otherwise, it is not GPL-compatible.

If the license for Q says in no uncertain terms that you must do certain things (not compatible with the GPL) when you redistribute Q on its own, then it does not permit you to distribute Q under the GPL. It follows that you can't release P+Q under the GPL either. So you cannot link or combine P with Q.


(10)工具的许可证,以及工具的使用,不影响源代码的许可证。如果链接了非自由库。。。
Can I release a program under the GPL which I developed using non-free tools? (#NonFreeTools)

Which programs you used to edit the source code, or to compile it, or study it, or record it, usually makes no difference for issues concerning the licensing of that source code.

However, if you link non-free libraries with the source code, that would be an issue you need to deal with. It does not preclude releasing the source code under the GPL, but if the libraries don't fit under the “system library” exception, you should affix an explicit notice giving permission to link your program with them. The FAQ entry about using GPL-incompatible libraries provides more information about how to do that.

 
(11)发布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? (#CompanyGPLCostsMoney)

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 of the program to someone, that someone can then redistribute the program to you, or to anyone else, as he sees fit.

 
(12)修改版以GPL发布,但是原版不以GPL发布,这样可以吗?不可以。这样的许可是自相矛盾的。
Can I release a program with a license which says that you can distribute modified versions of it under the GPL but you can't distribute the original itself under the GPL? (#ReleaseNotOriginal)

No. Such a license would be self-contradictory. Let's look at its implications for me as a user.

Suppose I start with the original version (call it version A), add some code (let's imagine it is 1000 lines), and release that modified version (call it B) under the GPL. The GPL says anyone can change version B again and release the result under the GPL. So I (or someone else) can delete those 1000 lines, producing version C which has the same code as version A but is under the GPL.

If you try to block that path, by saying explicitly in the license that I'm not allowed to reproduce something identical to version A under the GPL by deleting those lines from version B, in effect the license now says that I can't fully use version B in all the ways that the GPL permits. In other words, the license does not in fact allow a user to release a modified version such as B under the GPL.


(13)我能使用GPL软件代码片段到我的文档中吗?文档以GPL不兼容许可发布。如果片段足够小,可以。否则不行。
Can I use snippets of GPL-covered source code within documentation that is licensed under some license that is incompatible with the GPL? (#SourceCodeInDocumentation)

If the snippets are small enough that you can incorporate them under fair use or similar laws, then yes. Otherwise, no.


(14)GPLv3和GPLv2兼容吗?不。GPLv3里面的一些要求,比如安装信息,在v2中没有,所以不兼容。如果两个许可证下的作品要联合起来,那么会违反GPLv2的第六部分。如果是以GPLv2以及之后版本发布的,那么兼容。因为GPLv3包含在其中的一个部分。
Is GPLv3 compatible with GPLv2? (#v2v3Compatibility)

No. Some of the requirements in GPLv3, such as the requirement to provide Installation Information, do not exist in GPLv2. As a result, the licenses are not compatible: if you tried to combine code released under both these licenses, you would violate section 6 of GPLv2.

However, if code is released under GPL “version 2 or later,” that is compatible with GPLv3 because GPLv3 is one of the options it permits.


(15)同事之间互给GPL程序,不算发布。因为程序属于整个公司。
If I give a copy of a GPLv3-covered program to a coworker at my company, have I “conveyed” the copy to him? (#v3CoworkerConveying)

As long as you're both using the software in your work at the company, rather than personally, then the answer is no. The copies belong to the company, not to you or the coworker. This copying is propagation, not conveying, because the company is not making copies available to others.


(16)GPLv3里面的”convey“和GPLv2里面的”distribute“是一样的吗?是的,几乎一样。
Is “convey” in GPLv3 the same thing as what GPLv2 means by “distribute”? (#ConveyVsDistribute)

Yes, more or less. During the course of enforcing GPLv2, we learned that some jurisdictions used the word “distribute” in their own copyright laws, but gave it different meanings. We invented a new term to make our intent clear and avoid any problems that could be caused by these differences.


(17)预链接不算修改,预链接是编译的一部分,不会产生许可证的要求。
Does prelinking a GPLed binary to various libraries on the system, to optimize its performance, count as modification? (#Prelinking)

No. Prelinking is part of a compilation process; it doesn't introduce any license requirements above and beyond what other aspects of compilation would. If you're allowed to link the program to the libraries at all, then it's fine to prelink with them as well. If you distribute prelinked object code, you need to follow the terms of section 6.


(18)两个公司一起规避GPL的要求,一个公司发布签署软件,另一家发布用户产品,只运行第一个公司的签署软件。他们试图规避GPL的要求,这是侵犯版权的的。
Suppose that two companies try to circumvent the requirement to provide Installation Information by having one company release signed software, and the other release a User Product that only runs signed software from the first company. Is this a violation of GPLv3? (#TwoPartyTivoization)

Yes. If two parties try to work together to get around the requirements of the GPL, they can both be pursued for copyright infringement. This is especially true since the definition of convey explicitly includes activities that would make someone responsible for secondary infringement.

Tivoization /?ti?vo???ze???n/ is the creation of a system that incorporates software under the terms of a copyleft software license (like the GPL), but uses hardware restrictions to prevent users from running modified versions of the software on that hardware.

(19)各种GNU许可证之间的兼容性。(有链接矩阵)你不能将两个不同许可证下  的代码  联合起来的唯一可能是,一份代码在一个旧版本许可下,另一份代码在一个新版本许可下。
How are the various GNU licenses compatible with each other? (#AllCompatibility)

The various GNU licenses enjoy broad compatibility between each other. The only time you may not be able to combine code under two of these licenses is when you want to use code that's only under an older version of a license with code that's under a newer version.

Below is a detailed compatibility matrix for various combinations of the GNU licenses, to provide an easy-to-use reference for specific cases. It assumes that someone else has written some software under one of these licenses, and you want to somehow incorporate code from that into a project that you're releasing (either your own original work, or a modified version of someone else's software). Find the license for your project in a column at the top of the table, and the license for the other code in a row on the left. The cell where they meet will tell you whether or not this combination is permitted.

When we say “copy code, we mean just that: you're taking a section of code from one source, with or without modification, and inserting it into your own program, thus forming a work based on the first section of code. “Use a library” means that you're not copying any source directly, but instead interacting with it through linking, importing, or other typical mechanisms that bind the sources together when you compile or run the code.

参考资料:
http://www.gnu.org/licenses/license-list.html (GNU许可证兼容性列表)
  评论这张
 
阅读(391)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017