最近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。