如何为你的代码选择一个开源协议
相信很多剛踏入軟件這個行業(yè)的小伙伴一如當(dāng)初的我,對開源軟件的各種協(xié)議不甚了解被搞昏了頭腦。畢竟對于一個新生程序員來說,如何寫好代碼才是亟待解決的問題,無暇了解這些。隨著你項(xiàng)目做得多了代碼寫得多了,你會發(fā)現(xiàn)編碼過程中會不時用到其他人的成果,一個項(xiàng)目下來多少會引入一些優(yōu)秀的庫,別人放在公網(wǎng)上開源的DLL,以及一些算法等等。細(xì)心的你會注意到即使只是一小段代碼,優(yōu)秀的作者都在最開始會簡單地附上一段關(guān)于許可的聲明,或者說是協(xié)議比如"Licensed under the MIT license",并且一些博客也會標(biāo)明"此文章發(fā)表在CC協(xié)議下"。而如果我們Copy了別人的代碼或者文字同時沒注意這些的話,在國外法律意識特別強(qiáng)的環(huán)境下,我們的作品會因觸犯別人的權(quán)益而違法。因?yàn)楹枚嚅_源協(xié)議最低要求是使用者需要保留原作者對代碼的聲明,不聲不響地就拿來用了必然導(dǎo)致惡果。
所以開源不等于免費(fèi),開源也不等于沒有約束。
何為License
License是軟件的授權(quán)許可,里面詳盡表述了你獲得代碼后擁有的權(quán)利,可以對別人的作品進(jìn)行何種操作,何種操作又是被禁止的。軟件協(xié)議可分為開源和商業(yè)。當(dāng)然本文要討論的當(dāng)然是開源協(xié)議。
對于商業(yè)協(xié)議,或者叫法律聲明、許可協(xié)議,每個軟件會有自己的一套行文,由軟件作者或?qū)iT律師撰寫。這是什么驚為天人的東西嘛還得請專門的律師。因?yàn)樯婕暗揭院笄謾?quán)打官司這種事情,這種商業(yè)條款的行文是非常嚴(yán)謹(jǐn)而講究的,記得以前看到句調(diào)侃的話:'如果法律文件不寫得那么生澀難懂,律師們就沒飯吃了',就是說任何文字一旦上升到法律的層次,不要說你接受完了九年義務(wù)教育,就是考了個專八也會覺得英語白學(xué)了,直接的法律協(xié)議什么的那不是給常人看的。而至于法律條款緣何會晦澀難懂,這個偏題有點(diǎn)偏遠(yuǎn)了,可以查看這里了解??蠢哿?#xff1f;下面是歡樂時刻,奉上一個協(xié)議相關(guān)的Joke(笑崩!蘋果iOS7升級協(xié)議條款中員工神吐槽)。
你丫知道么?這已經(jīng)是46頁,肯定沒人讀的。我敢打賭大概只有5個人點(diǎn)了"條款和協(xié)議",所以我們想扯點(diǎn)啥就扯點(diǎn)啥吧。 Apple總部5樓的那個tony總是渾身一股沙丁魚味 有人給我們寄點(diǎn)啥2b向的郵件,我們都得很文藝的用"i笑了"的方式回復(fù)。這是我們的工作規(guī)定 還記得當(dāng)年關(guān)于Apple Studio的版權(quán)合法性爭議么?想知道我們怎么擺平的?我們把披頭士樂隊(duì)買下來了。他們中活著的現(xiàn)在沒事來給我們唱兩曲解解悶,死了的,我們想辦法像Miku的3D投影那樣,設(shè)法在二次元給他們來個復(fù)活 我們餐廳永遠(yuǎn)只賣蘋果東西:蘋果,蘋果汁,蘋果煎餅,蘋果棒糖。。。不想丟工作的話我們只能吃這些,而哥恰好對蘋果過敏,哥現(xiàn)在正處于餓的神志不清亂敲鍵盤的節(jié)奏。 我們偽造了登月真相。其實(shí)美國人登月是2008年的事情,我們向你們洗腦它發(fā)生在1969,我們絕對有這種洗腦的本事。如果有人發(fā)現(xiàn)我知道的太多了,我就會被查水表,但是沒關(guān)系,沒人會看這頁。 |
?
所以對于大多數(shù)人來說,不用自己花大把時間去寫許可協(xié)議,選擇一分廣為流傳的開源協(xié)議是個不錯的選擇,如果你的作品是開源的話,這樣省時又省心。
選擇一分協(xié)議的好處
你的作品如果不是定性為全商業(yè)性質(zhì),可以考慮選擇一分流行度比較高的開源協(xié)議。具體來說的話,你肯定希望作品能夠被多數(shù)人分享查閱吧,不但提高自己業(yè)界的知名度,同時也方便了需要的人為開源做出了貢獻(xiàn)。換句話說,你不分享出來的話你的作品的意義何在呢(當(dāng)然,自己搗騰的私人東西還是自己保留吧)?可是一旦你把你的代碼貼出來,這就表示任何人都可以看到并獲取,之后發(fā)生的事情你無法控制,有的人或許稍微修改一下放進(jìn)自己的代碼中,有的把你的軟件改個名字拿去販賣,有的甚至?xí)萌グ炎髡呙指臑樽约喝缓竽萌フ夜ぷ魇裁吹?#xff0c;而不會有人知道這個作品的原作者,背后辛勤付出了的人。所以為了公開分享你的代碼,同時又讓你對代碼保留一定權(quán)利,在作品中聲明一個許可協(xié)議是非常有必要的,這是很多新人所忽略的問題,同時很多人在使用別人的勞動成果時也會忽視協(xié)議的存在,這樣不好。所以你會看到我的博客里面時不時會給出連接指向來源頁面,同時文末也會列出所有參考過的文章。我相信我做到了這點(diǎn),別人在轉(zhuǎn)載我的文章的時候,也可以做到這點(diǎn),這樣營造出來的氛圍一定會非常和諧,互相尊重/Show Respect。
多說一句,一個事實(shí)讓你了解國外開發(fā)者在尊重他人勞動成果方面做得是如何的到位,如果A的作品是因?yàn)锽的作品的啟發(fā)而來,A甚至都沒有使用B任何一句代碼,但A會在他的作品里面指明是受到了B的啟發(fā)"Inspired by XXX link :http://www.blah.com"。
當(dāng)然有人會覺得,有了一分協(xié)議聲明在那里,我就需要鳥你么,我拿來用了把作者名字去掉同時還要加上我的名字,你咬我?!這是后話,只是在利益很小的情況下,或者作者不知情的情況下,作者不會追究什么責(zé)任,但如果你的產(chǎn)品做成功了,那就不一定了。另外就是,有協(xié)議和沒聲明協(xié)議的裸代碼是有非常重要區(qū)別的,一般作品當(dāng)中沒聲明協(xié)議的默認(rèn)為Copy right的,也就是版權(quán)保留。此種情況表明他人沒有任何授權(quán),不得復(fù)制分發(fā)修改使用等等,但一如上面所討論的,這樣的話還何來開源,何來分享呢。有了協(xié)議的聲明,在未來你的維權(quán)上面會方便很多,讓你的作品在分享的同時保留了自身的一些權(quán)利。
快速選擇
目前流行的開源協(xié)議有很多,并且同一款協(xié)議有很多變種,比如你或許看到過' CC Attribution-NoDerivs',' CC Attribution-NonCommercial'同屬CC協(xié)議(后面會有介紹)。如此紛繁的協(xié)議該如何選擇?協(xié)議太寬松會導(dǎo)致作者喪失對作品的很多權(quán)利,太嚴(yán)格又不便于使用者使用及作品的傳播。所以除了協(xié)議多之外,你還要考慮你對作品想保留哪些權(quán)利,放開哪些限制。
如果你不想了解太多,只是想要一個簡直直接的答案,下面給出的建議或許適合你。下方關(guān)于協(xié)議的選擇及表格來自GitHub?choosealicence項(xiàng)目。
簡單寬松的協(xié)議
如果你只想要一個簡單點(diǎn)的協(xié)議不想太麻煩的話。
MIT協(xié)議相對寬松但還是抓住了要點(diǎn)的。此協(xié)議允許別人以任何方式使用你的代碼同時署名原作者,但原作者不承擔(dān)代碼使用后的風(fēng)險(xiǎn),當(dāng)然也沒有技術(shù)支持的義務(wù)。jQuery和Rails就是MIT協(xié)議。
考慮有專利的情況
如果你的作品中涉及到專利相關(guān)。
Apache協(xié)議也是個相對寬松與MIT類似的協(xié)議,但它簡單指明了作品歸屬者對用戶專利上的一些授權(quán)(我的理解是軟件作品中含有專利,但它授權(quán)你可以免費(fèi)使用)。Apache服務(wù)器,SVN還有NuGet等是使用的Apache協(xié)議。
代碼分享與促進(jìn)
如果你在乎作品的傳播和別人的修改,希望別人也以相同的協(xié)議分享出來。
GPL(V2或V3)是一種版本自由的協(xié)議(可以參照copy right來理解,后者是版本保留,那copyleft便是版權(quán)自由,或者無版權(quán),但無版權(quán)不代表你可以不遵守軟件中聲明的協(xié)議)。此協(xié)議要求代碼分發(fā)者或者以此代碼為基礎(chǔ)開發(fā)出來的衍生作品需要以同樣的協(xié)議來發(fā)布。此協(xié)議的版本3與版本2相近,只是多3中加了條對于不支持修改后代碼運(yùn)行的硬件的限制(沒太明白此句話的內(nèi)涵)。
各協(xié)議授權(quán)詳情
下面是更多開源協(xié)議的一個表格任君選擇,總有一款是你的菜。
不過先來了解一些下方表格中出現(xiàn)的用詞的解釋:
- 協(xié)議和版權(quán)信息(License and copyright notice):在代碼中保留作者提供的協(xié)議和版權(quán)信息
- 聲明變更(State Changes):在代碼中聲明對原來代碼的重大修改及變更
- 公開源碼(Disclose Source):代碼必需公開。如果是基于LGPL協(xié)議?下,則只需使用的開源代碼公開,不必將整個軟件源碼公開
- 庫引用(Library usage):該庫可以用于商業(yè)軟件中
- 責(zé)任承擔(dān)(Hold Liable):代碼的作者承擔(dān)代碼使用后的風(fēng)險(xiǎn)及產(chǎn)生的后果
- 商標(biāo)使用(Use Trademark):可以使用作者的姓名,作品的Logo,或商標(biāo)
- 附加協(xié)議(Sublicensing):允許在軟件分發(fā)傳播過程中附加上原來沒有的協(xié)議條款等
協(xié)議 | 描述 | 要求 | 允許 | 禁止 |
Apache | 一個較寬松且簡明地指出了專利授權(quán)的協(xié)議。 |
|
|
|
GPL | 此協(xié)議是應(yīng)用最為廣泛的開源協(xié)議,擁有較強(qiáng)的版權(quán)自由( copyleft )要求。衍生代碼的分發(fā)需開源并且也要遵守此協(xié)議。此協(xié)議有許多變種,不同變種的要求略有不同。 |
|
|
|
MIT | 寬松簡單且精要的一個協(xié)議。在適當(dāng)標(biāo)明來源及免責(zé)的情況下,它允許你對代碼進(jìn)行任何形式的使用。 |
|
|
|
Artistic | Perl社區(qū)尤為鐘愛此協(xié)議。要求更改后的軟件不能影響原軟件的使用。 |
|
|
|
BSD | 較為寬松的協(xié)議,包含兩個變種BSD 2-Clause?和BSD 3-Clause,兩者都與MIT協(xié)議只存在細(xì)微差異。 |
|
|
|
Eclipse | 對商用非常友好的一種協(xié)議,可以用于軟件的商業(yè)授權(quán)。包含對專利的優(yōu)雅授權(quán),并且也可以對相關(guān)代碼應(yīng)用商業(yè)協(xié)議。 |
|
|
|
LGPL | 主要用于一些代碼庫。衍生代碼可以以此協(xié)議發(fā)布(言下之意你可以用其他協(xié)議),但與此協(xié)議相關(guān)的代碼必需遵循此協(xié)議。 |
|
|
|
Mozilla | Mozilla Public License(MPL 2.0)是由Mozilla基金創(chuàng)建維護(hù)的。此協(xié)議旨在較為寬松的BSD協(xié)議和更加互惠的GPL協(xié)議中尋找一個折衷點(diǎn)。 |
|
|
|
No license | 你保留所有權(quán)利,不允許他人分發(fā),復(fù)制或者創(chuàng)造衍生物。當(dāng)你將代碼發(fā)表在一些網(wǎng)站上時需要遵守該網(wǎng)站的協(xié)議,此協(xié)議可能包含了一些對你勞動成果的授權(quán)許可。比如你將代碼發(fā)布到GitHub,那么你就必需同意別人可以查看和Fork你的代碼。 |
|
|
|
Public domain dedication | 在許多國家,默認(rèn)版權(quán)歸作者自動擁有,所以Unlicense協(xié)議提供了一種通用的模板,此協(xié)議表明你放棄版權(quán),將勞動成果無私貢獻(xiàn)出來。你將喪失對作品的全部權(quán)利,包括在MIT/X11中定義的無擔(dān)保權(quán)利。 | N/A |
|
|
?
非代碼類作品的協(xié)議
上面各協(xié)議只是針對軟件或代碼作品,如果你的作品不是代碼,比如視頻,音樂,圖片,文章等,共享于公眾之前,也最好聲明一下協(xié)議以保證自己的權(quán)益不被侵犯。針對非代碼的數(shù)字作品的協(xié)議,最通用的莫過于Creative Commons(也是你經(jīng)常在別人博客下面可以看到的CC協(xié)議)協(xié)議。所以現(xiàn)在你見到博客園別人文章下面的簽名就不會感到陌生了。
?
無協(xié)議
你沒有義務(wù)也沒人非要你必需在自己的代碼作品里面加上一個開源協(xié)議。但一如上文所討論過的優(yōu)點(diǎn),如果你想把代碼分享出來,最好還是選擇一個適合的開源協(xié)議,這樣別人用著放心。
?
Reference
https://github.com/github/choosealicense.com
http://choosealicense.com/
http://www.smashingmagazine.com/2011/06/14/understanding-copyright-and-licenses/
from:?http://www.cnblogs.com/Wayou/p/how_to_choose_a_license.html
總結(jié)
以上是生活随笔為你收集整理的如何为你的代码选择一个开源协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MessagePack, Protoco
- 下一篇: ClassPool CtClass浅析