竭诚为您提供优质文档/双击可除
nginx,开源协议

  篇一:开源协议
  一.每个协议分别出一个使用该协议的开源软件
  1.gpl,全称gnugeneralpubliclicense。它的主要内容为:只要在一个软件中使用(“使用”指类库引用或者修改后的代码)gpl协议的产品,则该软件产品必须也采用gpl协议,既必须也是开源和免费。这个协议就不太适合商用软件,或者准备使用gpl开源组件的商用项目。基于这个协议的项目,极大的提高了开源软件的数量。
  采用这个协议的开源软件有:linux、mysql。
  2.lgpl,全称gnulessergeneralpubliclicense次通用公共许可协议。lgpl允许商业软件通过引用类库的方式使用lgpl组件(不直接使用源代码),这样可以不需要开源商业软件的代码。但是如果要修改原始组件的代码,则涉及修改部分的代码和基于原来代码衍生的代码都必须采用lgpl协议。lgpl不适合以lgpl协议为基础的代码进行二次开发的商业软件,但是商用软件可以采
用编译后的类库引用就不需要公开源代码了。
  采用这个协议的开源软件有:jboss、Fckeditor、hibernate。3.bsd,全称berkeleysoftwaredistribution。这个协议允许使用者修改和重新发布代码,也允许使用或在bsd代码基础上开发商业软件发布和销售,因此是适用于商业软件的。
  使用时还必须做到满足三个条件:
  1)如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的bsd协议。
  2)如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的bsd协议。3)不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
  适用bsd协议的开源软件有:nginx、cruisecontrol、Redis。
  4mit,源自麻省理工学院(massachusettsinstituteoftechnology,mit),又称x11协议。mit与bsd类似,但是比bsd协议更加宽松,是目前最少限制的协议。这个协议唯一的条件就是在修改后的代码或者发行包包含原作者的许可信息。适用商业软件。使用mit的软件项目有:jquery、node.js。
  5.apachelicencevesion2.0,这个协议除了为用户提供版权许可之外,还有专利许
  可。与bsd协议权限类似,允许代码修改,再发布,适用商业软件
  使用apachelicencevesion2.0协议的开源软件有:hadoop、apachehttpserver、springFramework、mongodb。
  6.creativecommons知识共享协议
  creativecommons(cc)许可协议并不能说是真正的开源协议,它们大多是被使用于设计类的工程上。cc协议种类繁多,每一种都授权特定的权利。一个cc许可协议具有四个基本部分,这几个部分可以单独起作用,也可以组合起来。下面是这几部分的简介:
  署名
  作品上必须附有作品的归属。如此之后,作品可以被修改,分发,复制和其它用途。
  相同方式共享
  作品可以被修改、分发或其它操作,但所有的衍生品都要置于cc许可协议下。
  非商业用途
  作品可以被修改、分发等等,但不能用于商业目的。但语言上对什么是商业的说明十分含糊不清(没有提供精确的定义),所以你可以在你的工程里对其进行说明。例如,有些人简单的解释非商业为不能出售这个作品。而另外一些人认为你甚至不能在有广告的网站上使用它们。还有些人认为商业仅仅指你用它获取利益。
  禁止衍生作品
  这意味着你可以复制和分发它们,但你不能以任何方式修改它们,或基于它们进行二次创作使用该协议的开源软件有mission
  二.如果自行开发一个软件,允许别人在你的基础上继续衍生,但不能被商用,我会选择gpl协议。
  如果能被商用,我会选择用mit协议。这个协议唯一的条件就是在修改后的代码或者发行包包含原作者的许可信息。适用商业软件。
  篇二:使用高性能web服务器nginx实现开源负载均衡
  internet的快速增长使多媒体网络服务器,特别是web服务器,面对的访问者数量快速增加,网络服务器需要具备提供大量并发访问服务的能力。对于提供大负载web服务的服务器来讲,cpu、i/o处理能力很快会成为瓶颈。简单的提高硬件性能并不能真正解决这个问题,因为单台服务器的性能总是有限的,尤其是网络请求具有突发性,当某些重大事件发生时,网络访问就会急剧上升,从而造成网络瓶颈,必须采用多台服务器提供网络服务,并将网络请求分配给这些服务器分担,才能提供处理大量并发服务的能力,因此服务器的负载均衡技术就成为建立一个高负载web站点的关键性技术。
  (一)nginx及负载均衡介绍
  1.高性能web服务器ngnix
  nginx(“enginex”)是俄罗斯人igorsysoev(塞索耶夫)编写的一款高性能的http和反向代理服务器,也是一个imap/pop3/smtp代理服务器。nginx已经在俄罗斯最大的门户网站──Ramblermedia(*.domain;
  location/
  {
  proxy_passservername;
  proxy_set_headerhost$host;
  proxy_set_headerx-Forwarded-For$remote_addr;
  }
  access_logoff;
  }
  其中:proxy_passservername用于指定反向代理的服务器池;proxy_set_headerhost$host当后端web服务器上也配置有多个虚拟主机时,需要用该header
来区分反向代理哪个主机名;proxy_set_header
  x-Forwarded-For$remote_addr;如果后端web服务器上的程序需要获取用户ip,就从该header头获取。
  3.nginx负载均衡的双机热备
  nginx处理所有流量受限于机器i/o和配置;本身的bug也还是难以避免的;nginx没有现成的双机热备方案,所以跑在单机上还是风险较大,单机上的事情全都很难说。因此,可以通过keepalived来实现nginx负载均衡的双机热备。正常情况下,两台nginx负载均衡服务器全部处于活动状态,对外提供服务。通过两台服务器之间的互相检测机制,当主服务器上的检测程序发现自身的nginx无法访问时,停止绑定虚拟ip,改由备用服务器绑定虚拟ip,同时由主服务器给网关发送arping包,保证了网关上ip、mac地址对应关系能够马上更改,能够做到强行接管虚拟ip。
  4.在nginx负载均衡服务器上设置缓存,加快服务器响应速度
  nginx从0.7.48版本开始,支持了类似squid的缓存功能,缓存把uRl及相关组合当作key,用md5编码哈希后保存。对于修改实时性要求不高的图片、Flash、css样式文件、javascript文件,可以在nginx反向代理(负载均衡)服务器上设置缓存,不用每次请求都转发到后端web服
务器,加快了响应速度。同时也可以减少nginx与后端web服务器的连接数,提高了nginx处理性能。
  篇三:aplgpl等协议
  许可协议bsdgplmpllgplapl、mit
  开源许可协议很多,这里说说他们的区别,以及使用相关代码需要考虑的协议约束。、
  开源软件的授权许可都是基于开源许可协议的,常见的开源许可协议有gpl、lgpl、apl、bsd、mit、mozillapubliclicense、creativecommons、eclipsepubliclicense1.0等。它们之前有很多相同的地方,也有很多不同的地方,本文将分析一下这些协议之间的区别。
  gpl(gnugeneralpubliclicense),使用源软件的类库引用(源代码)、改变(修改了源代码)的新软件,也必须采用gpl进行授权。就是说,只要使用了gpl开源软件的源代码或拿它的源代码进行了修改而编写的新的软件,也必须加入到gpl的阵营。很明显,不能拿gpl授权的开源东东来做商业软件。这个协议有个好处,就是极大增加了使用gpl的软件的数量。采用gpl授权的软件有:linux、mysql等。
  lgpl(lessergpl),相比gpl的严格,lgpl要温和很多。可以通过引用类库的方式(不是直接使用源代码)拿lgpl授权的东东来重新开发商业软件。如果是要修改源代码,是相应的修改
和衍生出来的代码都要使用lgpl开放源代码。采用lgpl的软件有:jboss、hibernate、Fckeditor等。
  apl(apachelicencevesion2.0),适用于商业软件,允许修改代码后再发布(不用开放源代码)。采用apl的软件有hadoop、apachehttpserver等。
  bsd(berkeleysoftwaredistribution),这个协议的要求很宽松,允许他人修改和重新发布代码,可以在此基础上开发出商业软件进行销售。所以,此协议适用于商业软件。采用bsd协议的软件最著名的有nginx。
  mit(massachusettsinstituteoftechnology),又称x11协议。mit与bsd类似,但是比bsd协议更加宽松,算是目前限制最少的协议了。这个协议唯一的条件就是在修改后的代码或者发行包包含原作者的许可信息。适用商业软件。采用mit的软件有:jquery、node.js
  此外,还有mozillapubliclicense、creativecommons、eclipsepubliclicense1.0等协议。大家可以详查相关资料。
  下面详细说说我的一下看法和注意事项提示。
  gpl
  1gpl许可证研究和扩展
  1.1下面是我看过gpl许可证后的几点看法
  1.2关于软件的修改权我认为下面的说法是比较全面的
  1.3和gpl许可条款相比
  1.4这个gpl条款是关于原始作者权利部分
  1.5我的关于作者权利的想法
  1.6关于gpl兼容许可的问题
  1.7引伸
  1.7.1关于各种开放源代码许可讨论
  1.7.2关于开放源代码的商业模式
  2sd和gpl的比较
  2.1商业化开发和社区开发的比较
  3开放源代码软件授权盘点
  4建议尽量使用apl授权,不使用gpl授权
  5gpl问答
  6各种开源软件授权方式的选择
softwaredistribution
  6.1各种开源软件授权方式的介绍
  6.2开源软件的好处
  7关于gpl的一些话
  7.1各种软件授权的优缺点及适用范围和变种(增订版)
  8对gpl的最新认识
  9商业软件公司对开源软件应该采取的措施
  10gpl条款的一些漏洞
  gpl许可证研究和扩展
  gpl许可证是自由软件的应用最广泛的软件许可证。但是我最近看过gpl许可证内容后,却发现gpl许可证的条款有很多不明确的地方,因为它的发布时间已经太久了,现在自由软件和开放源代码软件的发展规模已经比gpl许可证发布的时候大了很多,出现了大量的新问题。在gpl中都没有体现。gpl是不是该出新版本了?(这样说可能有夸张的嫌疑,但这只是我的一个提议。)
  下面是我看过gpl许可证后的几点看法
  这是gpl公共许可证的第二条,关于软件的修改权的条款:2.您可以修改程式的一个或几个
副本或程式的任何部分,以此形成基於这些程式的衍生作品。只要您同时满足下面的所有条件,您就可以按前面第一款的要求复制和发布这一经过修改的程式或作品。您必须在修改过的档案中附有明显的说明:您修改了此一档案及任何修改的日期。您必须让您发布或出版的作品,包括本程式的全部或一部分,或内含本程式的全部或部分所衍生的作品,允许第三方在此许可证条款下使用,并且不得因为此项授权行为而收费。如果修改的程式在执行时以交谈方式读取命令,您必须使它在开始进入一般的交谈使用方式 
时列印或显示声明:包括适当的版权声明和没有担保的声明(或者您提供担保的声明);使用者可以按此许可证条款重新发布程式的声明;并告诉使用者如何看到这一许可证的副本。(例外的情况:如果原始程式以交谈方式工作,但它通常并不列印这样的声明,那麽您基於此程式的作品也就不用列印声明)。这些要求适用於整个修改过的作品。如果能够确定作品的一部分并非本程式的衍生产品,且可以合理地单独考虑并将它与原作品分开的话,则当您将它作为独立的作品发布时,它不受此许可证和其条款的约束。但是当您将这部分与基於本程式的作品一同发布时,则整个套件将受到本许可证条款约束,因为本许可证对於其他许可证持有人的授权扩大到整个产品,也就是套件的每个部分,不管它是谁写的。因此,本条款的意图不在於剥夺您对完全由您自身完成作品的权利,而是履行权利来控制基於本程式的集体作品
或衍生作品的发布。
  此外,将与本程式无关的作品和本程式(或本程式的衍生作品)一起放在贮存媒体或发布媒体的同一卷上,并不导致将其他作品置於此许可证的约束□围之内。
  关于软件的修改权我认为下面的说法是比较全面的
  你可以以下面的四种方式修改自由软件作品:
  第一种方式:如果只是对原始程序进行局部修改,那么应该使修改以补丁文件的形式进行修改,以使修改和原始程序完全脱离。并且,有修改的说明文档,包括每项修改的说明和修改者的联系方法和修改时间。这样,首先当用户使用你的修改版软件出现问题时,可以明确地知道问题应该原始程序作者还是修改者解决,以免原始程序作者为修改内容负责。另外,当原始程序升级时,也方便使用者同时使用修改内容和升级程序。并且,也方便修改者把修改代码和修改文档反馈给原始程序作者,以便融入原始程序中使修改内容被更多的人使用。建议尽量反馈给原始程序作者,但不是强迫的。
  第二种方式:并不修改原始程序代码,但增加程序文件,使原始程序的功能得到增强和扩展。如增加更多的库函数,增加更多的软件功能模块。如果增加程序要和原始程序同时发行,那么,gpl许可应该应用于软件整体,这就是gpl许可中说明的同时发布的相关程序,只
要其中有gpl许可程序,那么gpl许可扩大到全体相关程序。如果以这种形式修改,那么那么第一种方式的修改方法是适用的。
  第三种方式:在自己创作的软件中引用gpl程序的代码,如果创作的软件也是gpl许可覆盖的软件那么,这种引用是许可的,但要在版权说明中说明参考了那些程序的代码,并尽可能在程序源代码中注释出那些是引用的代码及引用代码的作者和联系方法。这种引用可以不用征得被引用代码作者得同意。
  第四种方式:在原始程序的基础上进行修改并重新发布,那么修改内容可以不必和原始程序脱开,但也要有说明文档说明修改内容,原始程序的作者和联系方法,及修改的日期和作者。并且如果能够对原始程序有贡献,那么尽量通知原始程序作者,以便原始程序的作者也享受修改带来的好处。在这种情况下,修改者应该对用户发现的问题负全部责任,而不要麻烦原始程序作者解决。以这种方式修改的结果就是建立了一个原始程序的分支,以实现更自由的修改,但对于享受原始程序的升级的好处则带来了困难。这是修改者的很大的权利,即建立分支的权利。这样的选择适于不满意原程序发展方向和进度或满足特定需要的情况。由于这种方式引入了竞争,这要求补丁程序能够共享,任何人都有权获得和原始程序作者同样多的补丁程序的反馈的拷贝,这样才能避免补丁程序的浪费。可能被抛弃的补丁正是某些用
户需要的。提倡开放的补丁的发布方式,更有利于软件的进步。
  和gpl许可条款相比
  我说的修改条款更详细规定了在不同的情况下,修改者应该采取的方式和必须承担的义务。比gpl的条款要详细很多,可以更明确地指导修改者的工作。比如第一种方式,修改应该以补丁的方式修改,这种方式已经是现在开放源代码的惯例,对使用者和原始程序的升级都带来了极大的方便。应该属于强制执行的条款。又比如,第三种方式的做法给了被引用代码作者更大的尊重,也明确了修改者究竟带来了多大的创新。第四种方式,也减少了原始程序作者的额外烦恼,并且带来了相互竞争的软件发展模式,避免软件发展的独裁,多样化正是开放源代码的特,另外,如果带来了开发接口不一致的情况,建立一个标准组织是一个更好的方法。竞争才能带来更强大软件,就像html格式一样,给用户带来最大利益。另外,命令行的版权提示的强制要求没有道理。
  这个gpl条款是关于原始作者权利部分
  10.如果您愿意将程式的一部分结合到其他自由程式中,而它们的发布条件不同,请写信给作者,要求准予使用。如果是自由软体基金会加以版权保护的软体,请写信给自由软体基金会,我们有时会作为例外的情况处理。我们的决定受两个主要目标的指导,这两个主要目标
是:我们的自由软体的衍生作品继续保持自由状态,以及从整体上促进软体的共享和重复利用。
  我的关于作者权利的想法
  gpl给了原始程序作者使用多个许可证的权利,这样可以保证作者的最大权利,但如果加上“不允许原始程序作者撤销或改变gpl许可”的语句,则这个表述更严密。另外,作者是否有权利将其他人的修改代码应用于其他许可是一个问题,因为这样带来了gpl程序代码泄漏的问题,如果修改者又引用了其他的gpl代码则带来了更大的泄漏。我的建议是作为严格的gpl许可,应该禁止这种权利,这样才能维护gpl社区的整体利益。但这个权利可以被其他形式的许可采用。是不是现在有人用这种方法进行gpl代码的泄漏?
  关于gpl兼容许可的问题
  我看在的主页上有关于gpl兼容许可的论述。事实上应该没有gpl兼容许可的说法。gpl应该自由软件的唯一许可。更多或更少的限制条件的许可应该都没有权利引用gpl代码。lgpl除外,因为它只是提出了一个链接权的问题。
  现在,只有公共域软件这种没有版权的软件,才能作为gpl软件的组成部分。因为,可以稍做修改变为gpl许可软件。
  任何其他许可除非由于lgpl这样特殊的应用领域,都不应该作为gpl组成部分。都应该发展gpl软件去代替。如果是比gpl许可限制更少的许可,则可能泄漏gpl代码。如果比gpl许可限制更多的许可,则会现在自由软件的自由。
  至于其他许可是不是可以和gpl同时发行,则是发行商的问题,和gpl社区无关。不用以此判断是否是gpl兼容软件。
  但是,gpl软件也没必要完全白手起家,象gcc就是先在unix上实现的。gpl软件可以建立在任何软件的基础上,因此qt上建立kde根本不应该成为争论的问题。只是在其他许可上建立gpl软件要经过慎重考虑,因为,这样毕竟限制了一些修改代码的自由。如果,软件建立在其他许可上,那么就会出现更多的gpl孤岛,切断了gpl世界的联系。
  引伸
  关于各种开放源代码许可讨论
  在人们编制软件的时候可以选择各种许可形式。如果要有最大量的使用用户而完全没有私利考虑的话,那么可以选择公共域软件的形式。如果要保证最大的源代码共享的话,gpl许可是最佳选择。gpl许可的含义就是在捐献代码的同时可以获得其他人的捐献的意思。gpl保证了在代码面前人人平等。如果有更多的考虑的话,可以建立自己的软件许可。一般都是集中
在修改权方面的条款。比如“所有的修改都要寄一份给原作者”、“所有的修改都要和原始程序脱离”、“不允许有非原始作者允许的修改公开发行”这些都是为了原始程序的作者有最大的利益。这些许可方式虽然属于开放源代码的范畴,但只保证了软件个性化和学习的目的,却对修改权做了最大的限制,失去了源代码共享的好处。这种许可满足了原作者的利益,但是它不配开放源代码的光环,完全不能和自由软件相提并论。如apl、mpl、qpl等,因为许可证条款太复杂,我没能真正理解,但现在我暂时认为完全不能和gpl相提并论。只是
  满足了用户免费和知情权的要求。(如果从知情权的角度来说,现在的封闭软件都是对用户利益的侵犯,但由于和保守商业秘密矛盾,也没有办法。)
  关于开放源代码的商业模式
  最普遍的是开放源代码后,满足gpl许可,然后通过发行、咨询、增加用户定制功能来收费。另一种是将开放源代码和有版权的软件捆绑发行,这样,赚取版权费用。一种是通过开放全部或部分源代码,收集补丁程序,并满足用户知情权的要求。作为商业软件的补充。通过发行多许可证的方式,从其他许可证赚钱。通过开放源代码和免费使用赚取垄断标准的地位。
  sd和gpl的比较
  最概括性的一句话就是“bsd保证了开发者的自由,gpl保证了使用者的自由”。gpl保证了使用者对程序及其今后的升版的修改和免费使用的自由,bsd不能保证基于bsd开发的程序今后的所有改进版都能够允许修改和免费使用。bsd保证了开发者能够任意处置程序代码,包括封闭代码和商品化。也就是说gpl是基于用户的角度设计的授权,bsd是基于开发者的角度设计的授权。
  商业化开发和社区开发的比较
  商业化开发
  一、能够保证充足的人力和资金来推进一个软件项目的开发,保证软件的用户友好、稳定、高性能。能够满足用户从基本到高级的各个方面的要求。二、也能够使开发人员能够在开发中获益,获得金钱和股票等。三、但商业化开发也有很多被批评的地方。商品化软件如果不能满足用户的要求或存在问题,只能等待软件公司恩赐式的补丁和升级,使软件公司能够从用户口袋里源源不断的掏钱。并且使软件越来越庞大,迫使用户不断的升级硬件。在这个过程中,用户完全没有自由。并且如果软件公司倒闭或放弃了这个软件,那么用户只能改换门庭,原来的投资和学习全部白白浪费。
  而社区式的开发
  一、保证了用户能够自助式的改进软件的功能,不必等待其它人的恩赐,并且社区式的软件很可能开发更活跃,能够更快速的推出补丁和升级,能够探索对软件多方面的扩展。二、但社区开发是以个人兴趣和业余时间决定的,它一般不可能提供象商业软件那样的豪华级的功能,一般只提供基本功能。用户友好性和功能的高级性和商品软件不能相比。三、并且,也常常不能迅速启动一个庞大的项目,因为庞大的项目常常需要大量的人力和资金,需要严密的组织,和必要的统一的决定。而社区中的开发是比较随意的,并且经常会为开发的方向争论,谁也不会为自己不同意的项目出力。因此,在社区开发中,大的项目以模仿已有商品化软件为目标,这样,不容易产生争执,也不需要大量的沟通和开发方向的判断。四、社区软件的开发进度也是不能保证的,软件开发的快慢要看志愿者的人数,并且在起步阶段常常因为人员问题影响进度,而商业软件没有这个问题,当然,象linux那样成规模的软件,开发人员投入的人力可能会比单个的软件公司更多。五、社区化的开发吸引开发人员的原因就是