那些台灣軟體產業所缺少的 – 開放源始碼

标签: 中文文章 作品 嘴砲 開源 License | 发表时间:2011-11-25 23:43 | 作者:victor votis
出处:http://blog.ez2learn.com

前面幾篇談到了台灣軟體產業界常見的毛病,除了工具以外,還有一項令我感到相當意外的,就是我發現台灣業界對於開放源始碼的認知真的很有問題,例如我曾有和別人討論過,跟他們你們可以使用open source的現成資源來減低成本,但是得到的回應很常是

那不是讓你用但之後就要付錢嗎?

從這類的回應就可以大略知道,其實有很多人對於開放源始碼都有一些錯誤的認知,到底什麼時候該付錢、什麼情況可以使用都搞不清楚,因此這回我大算介紹一下一些常見的開源授權的常識

免責聲明

在讀本文前我得先聲明,我不是律師,這不是提供專業的法律見解,只是試著用較易懂的方式解釋授權,以我自己的經驗來說明,其中多少可能會有錯誤,請自行判斷,也歡迎指出錯誤,如有需要請洽詢專業的法律諮詢,在本文末會提到

認識授權 (License)

首先要從授權(License)的概念開始談起,開放源始碼通常不是只是單純把程式碼公開出來,而是一般都會搭配某種授權,而授權的意思,以白話來說,就是寫了一份聲明,裡面這樣提到

此程式任何人可以免費使用,但是使用前你必需遵守以下條款….

有了這樣的聲明,使用開源的人就可以放心使用,當然前提是要遵守授權所提出的條款,基本上因為已經授權出來,所以就算是原作者反悔,也沒辦法控告你什麼,除非你違反他當初訂出來的條款,而一般人看見落落長的條款項目可能就怕了,更何況是用英文寫的,但是別擔心,事實上要注意的要點只有幾樣,都大同小異,同一類條款的性質都很類似

散佈(Redistribute)

在理解授權之前,首先要理解散佈,這是授權裡面一定會提到的重要關鍵動作,那麼什麼是散佈呢? 簡單的來說,就是將軟體轉交給其它人,不管你是以原始碼的形式,或是編成二進制執行檔後,只要是轉交給其它法人,就算是散佈,舉個例子

把原始碼上傳供人下載

把原始碼拿來販售

把原始碼編成執行檔供人下載

把原始碼編成執行檔販售

以上都算是散佈的行為,所有的授權條款裡面都會提到散佈開源程式時你應盡的義務,當然,也有很多行為是稱不上散佈的,例如

將原始碼交給公司內部某個單位

將原始碼編譯成執行檔自己使用

在伺服器上以開源程式執行提功服務給使用者

像這樣沒有法人的經手,都不算是散佈的行為,對於散佈的行為介定是很重要的,等一下會解釋

授權(License)的種類

授權有(License)非常多種,我們在此大略將其分成三大類,第一類是GPL,第二類為BSD,而第三類為商業授權,是較為特別且少見的,其中GPL最不自由,而BSD最自由

 

在這裡自由與不自由主要是指你在使用這些開源軟體時所要盡的義務的多和少

GPL

GNU General Public License主要是由Linux陣營的開源軟體開發者為主在使用的,它有幾個特色

  • 散佈要連修改的部份一起開源
  • 病毒的感染性
  • 排它性

散佈與修改

如同我們前面提到的散佈,最重要的重點是,如果你改了程式,而又要散佈程式,那麼你在散佈的同時也要把你修改的部份也公開出來,例如

修改了原始碼後拿來販售

修改了原始碼後編成執行檔供別人使用

上列行為都扯到了散佈,因此如果你程式有修改,你不能只給別人執行檔,要連改的部份一起開源出來,這條款的目的主要是在於GNU的社群,希望強迫使用者能回饋社群,因為一但你改了程式,想拿來賣錢,就得公開出來,避免有人改進了程式,拿來販售,但沒有公開程式的問題

當然,如果你的程式只是自己使用,或是公司內部使用,那麼你修改了程式但因為沒有散佈的問題,所以修改的部份也不用因此公開,還有一種情況是,你使用GPL授權的程式放在伺服器上提供服務,因為這過程沒有重新散佈,所以也不會有問題

除了修改以外,還有一個特性,就是病毒的感染性,除了修改程式,如果GPL的原始碼是函式庫,而你的程式連結了GPL授權的程式,不管是靜態連結或動態連結,都會因此被GPL感染,一但你要散佈你的程式,因為用了GPL的函式庫,因此你的主程式也被感染,變成你要把你的主程式一起開源出來,就因為這特性替GPL贏得了「病毒授權」的美名,就跟T病毒一樣,被感染了就會變成殭屍

就因為這樣病毒的特性,讓很多人又愛又恨,很多商業軟體想用某些開源的函式庫,但因為那些函式庫如果是GPL授權,會導至他們的產品本身也受到感染,而因此無法使用,變成非GPL和GPL這兩種可能性,除此之外,有些廠商為了避免被GPL感染,會用一些比較特別的手法來避開

因為這樣感染的特性,加上如此不自由的特質,使得很多可以用上GPL的場合卻因為感染性而無法達成,為了能解決感染的問題,它有推出另一種弱化版的GPL,叫LGPL (Less Generic Public Licence),這個授權大致上和GPL是一樣的,差別就在於上面提到的連結受感染的問題,連結LGPL的函式庫並不會受到感染,如此一來就算是商業軟體也能安心地使用LGPL的函式庫

接著還有它的排它性,因為授權有很多種,GPL規定它的授權條款不能被修改,這表示你修改了程式要散佈被強迫要開源的話,你也只能選擇GPL的授權,除非你是原作者

你覺得GPL很不自由嗎? 事實上他們覺得GPL還不夠嚴格,正因為GPL陣營的人認為像Google之流的廠商,用了GPL的程式提供服務,不用公佈修改的部份,因此覺得心癢癢的,為此甚至增加了AGPL,更加嚴格的GPL,他的重新散佈的定義,擴增為包括提供服務,因此即使你用了AGPL的程式提功服務,沒有轉交程式給他人,就AGPL的定義,這就算是重新散佈,然而使用AGPL授權的程式其實非常少,像是MongoDB就是使用AGPL授權,正因為LGPL/GPL/AGPL強烈的限制特性,反而使它成為商業軟件開源的最愛授權,對手要修改販授的話也得公開,不想公開的話就得買另外的授權,這就是常見的雙授權商業模式,因此我個人喜歡戲稱GPL為 "商業友善授權"

類BSD

如果說GPL是邪惡的病毒授權,那麼類BSD就是自由又開放的授權,相較於GPL相當害怕別人用了GPL的程式不回饋,類BSD就大方許多,它最主要的條款就是,當你散佈修改過的類BSD授權下的程式,一樣不管是二進制的執行檔或原始碼,你要盡的義務就只有記得要把類BSD的授權一起轉交給別人就可以了,包含原作的姓名你也得一併加進去,不能自行亂改

舉個例子,你改了一個BSD授權的應用程式,你想編譯好成執行檔放到網路上供人下載,可以,只要連著當初的BSD授權一起散佈即可,不必把你改的部份也公開出來,因此你可以安心的用BSD授權的函式庫來寫商業軟體

下面的例子都是不違反BSD授權的做法

修改BSD授權的程式編譯成執行檔來賣,只提供執行檔而非原始碼給使用者,原始的BSD授權條款也得一併給使用者

連結BSD授權的函式庫,主程式只提供執行檔進行販售,原始的BSD授權條款也得交給使用者

而下面這些例子可能會違反BSD授權

重新散佈BSD授權的程式,竄改並宣稱自己才是原作者

散佈BSD授權的程式,但不附帶BSD授權條款

那你可能會問附帶BSD授權條款是怎樣辦到,很簡單,通常都只是一個LICENSE.txt檔案夾在壓縮檔裡之類的即可

而類BSD在此只是通稱,因為有很多授權都有這類主要的特性,大約列出常見的,像是

  • MIT
  • Apache
  • zlib

其中zlib最為自由,只要求不能亂改作者,不能聲稱修改的版本才是原始版本,以及不能移除授權,也就是散佈時一樣要附帶zlib授權,除此之外還有很多非常多種的授權,這只是常見的幾種,只要你看見他有寫 "BSD-like",通常就是指它的特色跟上面描述的差不多,有些專案會特別量身訂作他們自己的授權,但精神大多都會跟這些主流授權差不多

商業授權和其它授權

除了類BSD和GPL,其實還有很多授權,是一些基於商業考量定出來的授權,通常較為少見,所以不多做討論

常見的謎思 – MySQL要錢嗎?

前一陣子常見到很多台灣資訊業界的人瘋狂轉貼MySQL要開始收費的消息,如果懂得上面提到的授權條款就會覺得這很好笑,以MySQL的例子來說,它的程式碼已經用GPL的形式開放出來了,就像潑出來的水收不回去了,即使他們想收錢都沒辦法了,MySQL官網上的授權費用,還有授權說明,都說得不清不楚,即使你打過去問他們到底什麼情況要收錢,他們也只會給你閃爍不清的說法,其目的就只是要騙不懂開源授權的笨蛋去買他們的商用授權,如果你的公司真的有過多預算當做贊助他們是不錯,但都已經被Sun之後又被甲骨文買下來事實上他們也不缺錢了

有興趣可以參考 探討 MySQL 授權

常見的謎思 – 開源軟體找不到商業支援

很多人也有個想法就是開源軟體找不到商業支援,但事實上這是錯的,正因為開源軟體免費的特質,它很多的商業模式其實都是在提供商業支援,例如 Percona,他們提功的是強化版的MySQL InnoDB引擎,因為MySQL的GPL授權,導致他們修改的部份也得開源,因此他們當然不可能靠賣軟體獲利,而是靠商業諮詢和技術支援、專業訊練等等項目

因此,事實上很多開源軟體的商業資源遠比商業軟體還來得豐富,因為商業軟體的支援就只有他們提供,他們不幫你你就沒折,然而開源軟體因為是開放的,反而很多人可以解決同樣的問題,最糟的情況不過是自己下海解決而已,至少還不是商業軟體的無解

關於開源軟體的商業模式其實是一個很有趣的議題,有空的話可以另外寫一篇來介紹

免費的開源授權諮詢

好吧,講了這麼多,如果你問我你們公司有X專案,要用到Y授權的Z套件是否可行? 請別問我,請問中研院的自由軟體鑄造場免費開源法律問題諮詢吧,有免錢的程式可以用就算了,還有免錢的諮詢可以問,好諮詢,不問嗎?

除此之外還可以參考他們比我更專業一百倍的法律源地部落格

小結

常常看見很多單位都在花大錢買商用軟體,但是一看卻發現這些功能遠比不用錢的開源軟體還差,像是以資料庫為例,就有看見某間學校買了某家公司的資料庫,限制連線人數,功能殘缺不齊,連稱得上現代的資料庫都有困難,然而授權都動不動數十萬數百萬,就覺得很好笑,有免錢的不用,要花大錢去買垃圾來用,使用開源的軟體,並不只是省錢而已,用現成的函式庫與軟體兜出需要的系統更是提升競爭力與減少開發成本的關鍵,台灣如果不能掌握開源的相關知識會比現在更加落後世界的腳步

而授權雖然條款很多看起來很嚇人,實際理解了之後其實也不會太難懂,陣營也很清楚,如果要比喻的話,GPL陣營認為人性本惡,把大家都當成是會開發後就不想把東西公開,每人都是自私的,所以條款強制性很重,而BSD則是相反,要不要開放是你自己的決定,而我認為如果要開源就不怕別人用,怕別人用的話就別開源

最後,我們這裡談到的只是從使用層面來看開源授權而已,台灣大多廠商目前的狀況是連使用上的認知都有困難,更別說是貢獻開源,以後有機會再來寫一些相關的文章

相关 [中文文章 作品 嘴砲 開源 License ] 推荐:

你沒遇過的編譯器鬼打牆,許功蓋問題

- mrluanma - 程式設計 遇上 小提琴
我想在前面的文章裡很多人可能都沒遇過所謂的鬼打牆,大學四年中我遇到最多鬼打牆的狀況全是Dev C++引起的,其實如果都一一記下來應該是個很長的列表,只是問題解決通常我自己也忘記了,其中一個我印相最深刻的鬼打牆問題不是由Dev C++引起的,而是Visual C++ 6.0引起的,程式碼大略像這樣. // 此函數會被呼叫以通知連線成功.

我的open source專案整理列表

- Charles - 程式設計 遇上 小提琴
HGE以前是一款商用的2D遊戲引擎,後來開源,因為我覺得他的引擎挺簡單好用的,重點是有硬體加速,不像SDL純軟體算圖很慢,所以想說把它移植到Python,於是就用Boost.Python寫了一個專案,完成度大約7~8成,裡面有些比較難處理的部份還沒弄好,但主要功能大多都已經可以使用. Glottony是一個用來分析Python函式庫在PyPi上的相依情況,主要是有一次我安裝TurboGears時遇到其中一個package的伺服器似乎掛掉了,整個進度就因為那個檔案載不了而無法進行,因此我覺得或許這種相依的情況也是選工具時重要的考量,於是就寫了這樣的工具.

那些台灣軟體產業所缺少的 – 版本控制系統

- chitsaou - 程式設計 遇上 小提琴
這幾年來,多多少少接觸了不少業界的人,雖然我自己還不算有真正待過業界太久,但是這期間看到不少業界的現象都令我挺驚訝的,例如在聊天時提到你們公司用的版本控制系統是什麼,有很多人都會回答 「那是什麼?」,一直以來這些在國外的主流開發環境都基本常識或是標準配備的東西台灣業界居然很多都連有那樣的工具存在都不知道,或著是對於某些東西有錯誤的認知,所以我想大略提一下常見的幾個問題.

無用 – 更改Linux SSH登入歡迎畫面為新世紀福音戰士裡的Nerv的logo

- CMGS - 程式設計 遇上 小提琴
不要問我這有什麼用,只是純好玩,如果你的ssh沒有用utf8編碼的話可能會看到亂碼,以下是看起來的效果. 做法很簡單,修改/etc/motd檔即可,如果你想要這個Nerv logo,可以下載這個motd.txt然後解開後覆蓋原本的motd即可. Logo作者為ptt的cfi697,而原始版本因為字型寬度的問題我修正了一下.

無停機服務遷移

- lostsnow - 程式設計 遇上 小提琴
一直以來在營運now.in都有一個令人困擾的問題,就是每當伺服器更新或是出現問題時,就得關掉重開,雖然說大部份的伺服器我在設計上都做成重開也沒有關係,但有少部份一但重啟就會造成使用者斷線,參考下面這張伺服器狀態的圖. 圖中被切斷的山峰都是伺服器重啟的時候,無疑的這對使用者來說是不好的體驗,對於一般網頁HTTP這類stateless的伺服器來說重啟是無所謂,但串流伺服器就不一樣,因此最近我在思考如何解決這樣的問題,首先想到的是伺服器重開的原因,不外乎有幾種.

淺談區域性 (locality)

- chuang - 程式設計 遇上 小提琴
在設計不同的網路服務系統時,為了能夠有擴展性,通常都會設計成分散式的架構,然而除了架構上的設計,如何部署也是很重要的事,其中有個很重要的議題叫做區域性,因為沒有統一或明確的翻譯慣例,所以以英文來說明較為精確,在這裡指的區域性英文為locality,對於這個議題最近有一點心得. 所以,回到主題,到底什麼是區域性.

那些台灣軟體產業所缺少的 – 開放源始碼

- votis - 程式設計 遇上 小提琴
前面幾篇談到了台灣軟體產業界常見的毛病,除了工具以外,還有一項令我感到相當意外的,就是我發現台灣業界對於開放源始碼的認知真的很有問題,例如我曾有和別人討論過,跟他們你們可以使用open source的現成資源來減低成本,但是得到的回應很常是. 那不是讓你用但之後就要付錢嗎?. 從這類的回應就可以大略知道,其實有很多人對於開放源始碼都有一些錯誤的認知,到底什麼時候該付錢、什麼情況可以使用都搞不清楚,因此這回我大算介紹一下一些常見的開源授權的常識.

oracle license计算

- Fenng - eagle's home
Oracle license的计算是基于CPU core的. 用core的数目乘以一个系数core factor就可以得到所需的oracle license的数目. 对于不同的CPU,core factor是不一样的,可以从oracle提供的这张列表中查到 Oracle Processor Core Factor Table.

AWS OpenSearch 1.0 正式開源釋出

- - Tsung's Blog
AWS 和 Expedia、Netflix 等其他公司合作,建立 Elasticsearch 開放版本(100% Open Source),就是 OpenSearch,OpenSearch 最近公開釋出囉~. OpenSearch Release 的官方新聞:. AWS OpenSearch 1.0 正式開源釋出.

Moaan摄影作品

- 林十四 - PADMAG视觉杂志
Moaan,日本摄影师,Getty Images签约摄影师,他的Flickr:http://www.flickr.com/photos/moaan/. 点击阅读全文可见他的更多作品.