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

前面幾篇談到了台灣軟體產業界常見的毛病,除了工具以外,還有一項令我感到相當意外的,就是我發現台灣業界對於開放源始碼的認知真的很有問題,例如我曾有和別人討論過,跟他們你們可以使用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則是相反,要不要開放是你自己的決定,而我認為如果要開源就不怕別人用,怕別人用的話就別開源

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

This entry was posted in 中文文章, 作品, 嘴砲 and tagged , , , , . Bookmark the permalink.

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

  1. aeneas says:

    私以为一般开放原始码的产品都不是软件公司做的而是社区的作品
    所以因此认为开放源代码并不是台湾软件业所缺少的?

  2. victor says:

    @aeneas 歐,忘了提,我在這裡主要的意思是台灣的產業不懂得利用開源的資源,他們常常花大把鈔票去買又貴又難用的商業軟體,除此之外,在開發上也常常自己重新刻輪子,既浪費時間品質又不好,而不是去使用現成開源的函式庫

    其中有很大原因是他們不瞭解開源函式庫,光法律上問題一堆人就都不知道到底什麼情況是可以,什麼不可以,所以不敢用

    至於要台灣的廠商能夠靠開源賺錢,那是還很早的事情,至少他們得先學會如何用開源的資源

  3. Ferrisky says:

    的確是如此,很多公司(特別是中小企業)對於開源的東西都極度害怕,認為它們完全保障而且不穩定。對於開放源碼軟體的認知還停留在就是一群人拼拼湊湊打造出來,丟在網路上的東西;或者是用了之後,商品就不能販售等錯誤認知。我想在台灣要讓大家普遍接受開放源碼軟體是具有高利用價值,能夠提高商業競爭力的事實,真的有很長一段路要走!

  4. Bear says:

    我想除了對授權的認知不足以外, 還有一大部份是因為服務支援的問題
    open source 有時候省下了前期資源, 卻會付出很大的後期成本
    因為缺少維護和支援

    當然, 身為小型創業團隊或中小型企業, 這些省下的成本就像你說的, 是巨大的.
    所以有很大的誘因使用這資源

    但別忘了在手頭現金較足夠的組織來說, 他們要的是安全和保障
    有一個公司在服務的產品或專案會”讓人感到安全”, 尤其是越大型的產品

    這沒有一定的準則, 開源不表示資源短少, 有bug修得慢, 或有bug因為作者說 it works for me所以不修
    有些開源的水準比商業水平還高, 但注意, 這通常不是全部, 選擇好的開源需要一定的經驗和水平
    而商業產品也不表示它就穩定, 支援良好, 不會求助無門, 買東西總有爛貨

    可作為一個技術型的人才, 像作者這樣精良的人, 很容易忘記一件事
    人性!
    很多經理工程師是情願花公司錢, 但使用一個出了事有人負責的商品, 而不要裝會, 用開源的, 出了bug自己修的要死也找不到人處理

    還有, 產品和開源專案一樣會演進的, 你必須在同一個比較基礎上看這件事, 拿一個不成熟的產品和成熟的開源比較, 而認為商業產品是爛得要死都不值得投資, 讓可能會錯失一些真的可以讓人省下幾百萬成本的好東西

    供參考, 人在玩的世界並不總那麼完美的

  5. victor says:

    @Bear

    我同意你的說法,但那些都是政治的問題,台灣軟體產業很大的問題之一,就是非專業的在領導專業,管理階層很多都不是技術出身的,而且他們在替專案做決定,這是很糟糕的事情,為了出事情誰負責這種事情來決定要用什麼技術,表示這樣的公司有很糟的官寮文化,不管做什麼事都一樣

  6. joke says:

    您大概沒經歷wintel壟斷或類似軟體專利這類黑暗期.
    不知道copyleft的可貴

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>