zoukankan      html  css  js  c++  java
  • 从阿里云os和Google之争看开源协议【转】

    最近IT界比较大的事件就算是阿里云os和Google之争,里面的细节没有人知道,但是通过这个事情,我对目前常用的开源协议有了一些了解,也借此机会梳理和总结一下。

    自从自由软件之父理查德·斯托曼(Richard Stallman)发起的GNU(GNU's not uinix:说实在的,我也不知道他想表达什么) 运动,开源运动如火如荼的发展起来,现在开源已经成为常态了。至少开发人员应该或多或少的知道一点,但是基本上所有的开发都应该使用过开源产品,例如我们最常用的apache。

    由于理查德·斯托曼的认知,认为软件应该就是应该自由和开放的,开发人员应该很容易获得源代码以及进行改动,再把改动之后的源代码发布出来,就这么简单的一个想法,在加上Linus Torvalds 等牛逼黑客的加入,GNU影响力越来越大。GNU发布了GPL协议,这个协议和当初创世人的理念有关。

     

    GPL(General Public License)协议主要特点:

    • 所有的源代码都是公开的,可以自由使用。但是是有版权的
    • 如果对GPL的开源代码进行修改,就必须把修改之后的代码进行开源
    • 如果引用了GPL的代码库,就必须开源你引用部分的代码。相当于你的代码中如果有一行代码引入了GPL协议的库函数,就必须把整个代码开源。就是所说的传染性
    • 如果使用的是GPL产品,没有上面的限制。这个说实在的,我觉得真不好界定。例如java中的openjdk,如果你只是使用他的编译器编译你的java程序,是没有必要开源你的java程序
    • GPL是free(自由的),但是是可以收费的。我们经常认为开源的就是免费的,这个是不对的。

    从上面的限制来看,GPL开源协议还是有很大的传染性的。如果一个商业公司引用了开源代码或者库函数,就必须开源引用它的整个代码。有一些公司不愿意开源咋办,就不能用了。毕竟对于商业公司来说,代码是我的资产,我没有必要开源,所以这个协议对商业公司不是很友好

    LGPL(GNU Lesser General Public License):是GPL的变种,这个是宽松的GPL,对于商业公司比较友好,如果使用了LGPL的库,可以不开源的你的代码。与GPL的最大不同是,可以私有使用LGPL授权的自由软件,开发出来的新软件可以是私有的而不需要是自由软件。所以任何公司在使用自由软件之前应该保证在LGPL或其它GPL变种的授权下。

     

    BSD(FreeBSD Copyright Information):这个算是宽松的协议了,你可以使用和修改它的源代码,注明使用了他就可以了,你自己的代码是可以私有的。只要别侵权就可以,比如直接copy了源代码,说是你自己写的,这样就不对了。

     

    Apache Licene:这个和BSD差不多,但是要注意几点,如果修改了源代码,要注明修改了什么。开源代码的商标,专利,所有权都要保留的,不能说修改了开源apache 协议的开源代码,就直接把代码的作者写成你,这样是不对的。发布产品的时候,对于自己修改的apache 开源代码,不能够变成其他的开源协议。

     

    MIT:这个说实在的,我个人见的比较少,这个算是最自由的协议了,和BSD一样,但是修改了MIT源码,可以加入自己的授权。 

    常用的也就上面几种

     

    下面来看看 android的问题

    由于android 使用linux的代码库,按照道理来说,android必须以GPL的协议进行开源,但是考虑到GPL对商业上非常不友好,一旦有公司想优化andorid,对android进行定制,也必须开源这一部分代码。但是google怎么做的了,这个是另外一个篇文章分析里面的一部分

    “Linux kernel 的版权是 GPL。

    这下问题来了:如果你是硬件厂商,希望你的硬件能在 Linux kernel 下运作,那么就必须要有驱动程序。如果驱动程序的程序代码公开,等于硬件规格也公开的差不多了。许多厂商不愿意这么做,所以就提供编好的驱动程序,但不提供原始码。

    Android 的重点就是商业应用,Google采用了一些手法来绕过这问题。他们把驱动程序移到 "userspace",也就是说,把驱动程序变成在 Linux kernel 上头跑,而不是一起跑的东西,这样就可以避过GPL。然后,在 kernel 这边开个小门,让本来不能直接控制到硬件的 "userspace" 程序也可以碰得到,这样只要把"开个小门"的程序代码公布就行啦。”

    所以阿里云OS也应该避免不了,至少要公开这个后门部门的源代码,所以按照道理来说,阿里云要公开这一部分代码,貌似没有公开,好奇它是怎么绕开的。

     

    下面是一些常用的开源产品的授权协议:

    tomcat:Apache Licene

    android:Apache Licene

    spring:Apache Licene

    openjdk:GPL

    Mysql:GPL

    Jquery:MIT(貌似是最近改的)

    JBoss:LGPL

    Nginx:BSD

     

    发现通用的代码库和开发框架,大多是Apache Licene 授权的,开源的产品大多数是LGPL授权的,apache的产品多是apache license。

    爱公司的程序员 
    博客园blog地址:http://www.cnblogs.com/aigongsi/ 
    本人版权归作者和博客园所有,欢迎转载,转载请注明出处。

  • 相关阅读:
    yolo_to_onnx ValueError: need more tan 1 value to unpack
    yolo_to_onnx killed
    C++ 实现二维矩阵的加减乘等运算
    Leetcode 1013. Partition Array Into Three Parts With Equal Sum
    Leetcode 1014. Best Sightseeing Pair
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 219. Contains Duplicate II
    Leetcode 890. Find and Replace Pattern
    Leetcode 965. Univalued Binary Tree
    Leetcode 700. Search in a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/xsmhero/p/2703376.html
Copyright © 2011-2022 走看看