利用 Apache-2.0 程式所應遵守的義務規定

這篇文章是與Lucien一起完成的,透過鑄造場的法律專欄發布。Apache-2.0是一款很寬鬆的授權條款,所以我原本很天真地以為這樣的主題不會太困難,等到真正著手撰寫之後,才發現正是由於寬鬆的授權特性,讓Apache-2.0在實際應用上呈現出非常多樣化的型態,因此反而在處理實際範例的部份花了很多的時間,果真是大意不得啊!謝謝Lucien花了許多時間來處理實際範例的內容。

~~~~~~~~~~ 本文開始 ~~~~~~~~~~

Apache License 2.0(簡稱 Apache-2.0)是 Apache Software Foundation(簡稱 ASF)在 2004 年所發布的授權條款(註一),雖然從數據上來看,Apache-2.0 被社群專案應用的程度遠不如 BSD、GPL 等授權條款,不過由於 Apache HTTP、Android 平台核心部份與 ASF 旗下所有專案均採用 Apache-2.0 來授權,因此近兩年來,筆者在工作上發現,有較以往為多的人詢問 Apache-2.0 條款的內容,這些問題中,又以詢問應該要如何遵守 Apache-2.0 義務規定佔了大部分。為此,本文特別針對 Apache-2.0 的義務規定加以說明,並且模擬常見應用狀況,提供實際應用的著作權聲明範本,希望可以便利開發者了解 Apache-2.0 的義務規定(註二)。

【Apache-2.0 義務首重智財權與貢獻者聲明的保留】

Apache 授權條款與 BSD、MIT 等授權條款非常相近,都是基於使用者自由利用程式的精神所制定出來的,不過相對於 GPL 類的授權條款來說,Apache、BSD、MIT 對於自由的概念是著重開發者可以自由利用程式碼,也不會拘束衍生程式的授權內容(註三),因此 Apache-2.0 義務規定的重點不是在於程式源碼的散布,而是在於強調與程式相關的智財權資訊必須標示清楚,並且同時要彰顯第三方元件著作權人的聲譽。因此 Apache-2.0 除了規定三項十分基本的義務之外,最後在第四項義務中,透過強制使用者必須散布 NOTICE 檔案中的資訊,來強化其標示智財權資訊與彰顯第三方元件著作權人聲譽的目的。  

Aapche-2.0 的義務規定在第 4 條,以下針對其中的四項義務分別加以說明:

1、附上 Aapache-2.0 全文。

使用者散布 Apache-2.0 程式的時候,必須要附隨一份 Apache-2.0 的全文內容,讓後手可以閱讀授權條款全文,有機會了解在利用程式的同時享有哪些權利以及必須負擔哪些義務。

2、標示修改檔案。

使用者若是有修改檔案的話,必須在修改檔案中加上明顯的標示,讓拿到衍生程式的後手可以了解到使用者修改過哪些檔案,以及修改者是誰。

3、保留各項聲明 (notices)。

使用者以源碼形式散布衍生程式的時候,必須保留原程式中所有的著作權、專利、商標與署名聲明 (attribution notice)。不過,若聲明中的部份內容並不屬於衍生程式的話,使用者必須將這些無關的內容刪除,也就是這些附隨著衍生程式源碼的聲明,應該與衍生程式相關,與衍生程式無關的聲明內容,無需附上。

4、讓後手閱讀到 NOTICE 檔案中的資訊。


▲ 圖1:Apache HTTP 源碼中的 NOTICE 檔案中標示了 Apache HTTP 包括了、衍生自哪些著作權人的程式碼。

顧名思義,這個 NOTICE 檔案原則上是一個儲放各種聲明與標示內容的檔案,例如跟程式相關的著作權、專利權或貢獻者聲明或標示文字,除了散佈在程式中的其他檔案中以外,也可以集中放在 NOTICE 檔案裡。而根據 Apache-2.0 的規定,使用者在散布衍生程式的時候,都必須隨之一併散布 NOTICE 檔案的內容。所以,只要有任何資訊是著作權人/開發者想要讓使用者與後手了解,都可以放置在這個檔案中。因此簡單來說,NOTICE 檔案是著作權人/開發者將資訊傳遞給使用者與後手的一個重要媒介,即使使用者修改了程式,在散布衍生程式的時候,也不能捨棄 NOTICE 檔案中的資訊。

另外,如同本文首段已經說明過的,Apache-2.0 注重彰顯第三人元件著作權人的聲譽,所以針對散布衍生程式的情況,Apache-2.0 進一步規定使用者必須要做到下列幾點:

    (1) 同樣地,與衍生程式無關的資訊,使用者必須要從 NOTICE 檔案中刪除;

    (2) 此外,使用者必須要在 NOTICE 檔案中加上署名聲明。關於署名聲明應該有哪些內容,Apache-2.0 條款中並沒有規定,但是從 ASF 網頁上的說明與範例可以得知,這邊的署名聲明是指一份類似第三方元件的清單,不過聲明的重點不在於元件名稱,而是這些元件的著作權人。ASF 以 Apache HTTP 所附隨的 NOTICE 檔案作為範例,提供給予開發者作為參考,而這個 NOTICE 檔案中就羅列了 Apache HTTP 包含有哪些第三方著作權人的程式碼(註四)。因此使用者在散布衍生程式的同時,必須將衍生程式所利用到的第三人元件著作權人的資訊納入到 NOTICE 檔案中,最簡單的方式,可以依照 ASF 的範例,將這些第三方元件的著作權聲明照貼一份到 NOTICE 檔案中即可。此外,使用者當然也可以在衍生程式中加上自己的署名聲明,用來表彰自己的聲譽,不過額外加上署名聲明並非是使用者的義務,使用者可以依照自己的需求來決定,只要所增加的署名聲明內容不會讓他人誤以為這是屬於 Apache-2.0 授權條款的一部份即可;

    (3) Apache-2.0 規定了三種將 NOTICE 附隨於衍生程式的方法,使用者可以自由選擇其中一種方式來放置 NOTICE 的內容:

        (a) 將 NOTICE 內容納入成為衍生程式的一部份,例如在有圖形化介面的應用程式中,就可以將 NOTICE 內容放在「關於 (About)」之下;
        (b) 在散布源碼的狀況下,可以將 NOTICE 內容納入成為源碼的一部份,例如將 NOTICE 純文字檔放置在源碼的第一層目錄中,此外,若是附隨源碼有說明文件的話,也可以將 NOTICE 內容放在說明文件中;
        (c) 又或者可以將 NOTICE 的內容,放置在任何通常這種第三方聲明會出現的地方,例如在安裝衍生程式的過程中,若是會出現顯示第三方元件清單的畫面,就可以將 NOTICE 的內容放在這個畫面中,又或者衍生程式是嵌入式裝置韌體的一部份,許多嵌入式裝置都又紙本說明書,此時也可以將 NOTICE 的內容印製在紙本說明書裡面。

【義務規定在實際應用上應該有所調整】

上述這四項義務規定看似簡要清楚,不過在實際散布程式的時候,筆者以為使用者還需要調整一下作法,才能真正達到標示清楚、避免糾紛的目的。

Apache-2.0 是一份允許使用者轉授權(sublicense,註五)程式的授權條款,這可以從 Apache-2.0 第 2 條與第 4 條第 2 項的規定明確得知(註六)。透過轉授權來散布程式的時候,使用者可以替未經修改的原程式或衍生程式選擇一份新的條款來授權,只要新條款內容不與 Apache-2.0 產生衝突即可。由於這個時候,轉授權散布出去的新程式在外觀上已經不再透過 Apache-2.0 授權,著作權人也不相同,因此若使用者完全依照上述第一項義務的規定,在散布新程式的同時仍然附上 Apache-2.0 全文的話,會產生一個程式同時附有新條款與 Apache-2.0 條款的狀況,對於收到程式的後手來說,反而不易辨識這個程式所必須依據的授權是哪一份,容易產生混淆與誤解。所以在轉授權的狀況下,筆者認為使用者只需要附上新條款即可,而不需要再附上 Apache-2.0 全文。

另外,上述第三項關於保留各項聲明的義務,若依照 Apache-2.0 的原文進行文意解釋(註七),這項義務應該僅適用在散布衍生程式源碼的情況,而不及於散布衍生程式目的碼的情況,不過筆者以為,在散布衍生程式目的碼的時候,使用者也應該至少附上智財權相關的聲明,讓後手可以清楚了解所利用程式的智財權狀況,因為這些智財權資訊可能會間接產生法律上的效果。

以專利為例,侵害專利權之人,若是因為故意或過失造成侵害的話,專利權人可以請求損害賠償,不過由於專利是一種不容易證明他人是否真有故意或過失的智財權,所以許多國家的專利法均規定,專利產品本身、標籤或包裝上應該標示有專利證號,在標有專利證號的情況下,他人還是未經授權應用專利技術的話,那就有故意或過失,專利證號的標示可以減輕訴訟過程中為了確認被告是否有故意或過失而耗費的時間(註八)。若是一個 Apache-2.0 程式有應用到專利技術,原程式中也附有專利聲明,不過這個專利聲明是標示在一個獨立的檔案中,並非是在 NOTICE 檔案裡面,若使用者修改程式之後,以目的碼形式散布出去,依照 Apache-2.0 的規定,使用者沒有附上專利聲明的義務,之後他人觀察修改程式的運作,推敲出了其中所應用到的專利技術,並且在自行開發的程式中應用了這項專利技術,未來專利權人將不容易證明,這項專利侵權行為是因為侵權人的故意或過失所導致,也因此難以向侵權人索取損害賠償。因此在散布程式目的碼格式的時候,若沒有附上相關的智財權資訊,是可能會導致侵權機率的增加,而在真正發生侵權案件的時候,也可能會造成證明上的困難,因此筆者認為,使用者在散布衍生程式目的碼的同時,也應該將所有相關的智財權聲明一起散布出去,讓後手也有機會接觸到這些資訊。

【著作權與授權聲明範例】

Apache-2.0 是一份相容性蠻高的授權條款,因此 Apache-2.0 程式碼很容易跟其他不同授權條款的程式碼結合成為一個新專案。不過這個新專案的授權條款不見得仍然採用 Apache-2.0,因此對於一般使用者來說,如何清楚標示授權資訊是一個蠻困擾的問題,而若是再加上檔案經過修改的話,那麼在希望尊重原著作權人的前提下,應該如何透過文字來適當呈現 Apache-2.0 檔案是被修改過的,也困擾不少開發者,因此接下來筆者將針對不同衍生程式的態樣,來範例說明如何標示著作權與授權聲明。不過由於程式碼結合的型態多變,散布的管道也可能大不相同,所以著作權與授權聲明也因此會有許多不同的變化,囿於篇幅,筆者僅選擇三種基本態樣來說明,並分別提供範例供讀者參考之用。

1、利用 Apache-2.0 程式開發新專案,新專案整體採用其他自由開源條款來授權。

Apache-2.0 允許轉授權,因此使用者可以將 Apache-2.0 程式納入到新的自由開源專案中,若新專案採用其他自由開源條款來授權,原本採用 Apache-2.0 授權的程式,在外觀上也因此改採新專案的條款來授權。以新專案採用 GPL-3.0 授權為例,建議可以在 README 或 LEGAL 等純文字檔案中,加上如下的文字,來說明專案整體著作權與授權的資訊。這樣的文字也可以放在專案網站中,當作簡要的著作權與授權聲明:

—-
2013 (c) BBB Software 1.1
Developer Mr. B <bbb@example.org>
URL: http://BBB.org/

BBB Software 1.1 is licensed under GNU General Public License v3.0 as published by the Free Software Foundation.

This project is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

See the GNU General Public License v2.0 for more details. You should have received a copy of the GNU General Public License v3.0 along with this program. If not, see <http://www.gnu.org/licenses/gpl-3.0.html>.

BBB Software 1.1 contains AAA Library 2.2 under Apache License 2.0. Please see the THIRDPARTY file distributed with this Software for related notices of AAA Library 2.2.
—-

這邊的 THIRDPARTY 純文字檔,是專門用來放置第三方元件資訊的檔案,因此可以將 AAA 函式庫 NOTICE 檔案中的資訊儲放在這裡。而由於 NOTICE 檔案中的資訊已經整合到 THIRDPARTY 檔案中,所以聲明中並沒有請後手再去瀏覽 NOTICE 檔案。

由於新專案仍是自由開源的專案,專案源碼會提供給予後手利用,而被修改過的個別 Apache-2.0 源碼檔案,也必須加上適當的標示。關於這部份,ASF 直接在網頁上表示可以參考軟體自由法律中心 (Software Freedom Law Center, SFLC) 所發佈的《在 GPL 專案中維護寬鬆授權的檔案:開發者指南》(Maintaining Permissive-Licensed Files in a GPL-Licensed Project: Guidelines for Developers,以下簡稱「轉換指南」,註九),轉換指南中建議保留原本的著作權與授權聲明,然後再加上新專案的著作權與 GPL 授權聲明。筆者參考該轉換指南的內容後,改寫其中的範例如下供參考(註十):

—-
/* 2013 (c) BBB Software 1.1
 * Developer Mr. B <bbb@example.org>
 * URL: http://BBB.org/
 *
 *  This file is free software: you may copy, redistribute and/or modify it  
 *  under the terms of the GNU General Public License v3.0 as published by the  
 *  Free Software Foundation.  
 *  
 *  This file is distributed in the hope that it will be useful, but  
 *  WITHOUT ANY WARRANTY; without even the implied warranty of  
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 *  General Public License v3.0 for more details.  
 *  
 *  You should have received a copy of the GNU General Public License v3.0  
 *  along with this program. If not, see <http://www.gnu.org/licenses/gpl-3.0.html>.  
 *  
 * This file incorporates work covered by the following copyright and  
 * permission notice:  
 *  
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */
—-

http://www.openfoundry.org/images/130326/apacheobligation/lc_201303_img_2.png
▲ 圖2:採用寬鬆授權條款的源碼檔案,若是包含有 GPL 程式碼,SFLC 在轉換指南中建議該如何標示該源碼檔案中的著作權與授權資訊。

在散布專案目的碼格式的時候,可以在相關的著作權與授權聲明中,加上如下的一段文字,後手就可以知道到哪裡去瀏覽 NOTICE 當中的資訊了:

—-
BBB Software 1.1 contains AAA Library 2.2 (http://sourceforge.net/AAA-Library) under Apache License 2.0. For the licensing rule and related notices of AAA Library 2.2, please see <http://BBB.org/licenses/thirdparty>.
—-

2、利用 Apache-2.0 程式開發新專案,新專案中的元件保留各自的授權條款。

除了整體採用新條款授權之外,有時候使用者利用 Apache-2.0 程式的方式,並不會改變原有的 Apache-2.0 授權方式,在這樣所產生的新專案中,除了 Apache-2.0 程式碼外,還並存有其他授權條款的程式碼。假設新專案僅有一個 Apache-2.0 第三方程式的前提下,筆者建議說明專案整體著作權與授權聲明的文字可以如下:

—-
2013 (c) BBB Software 1.1
Developer Mr. B <bbb@example.org>
URL: http://BBB.org/

BBB Software 1.1 is licensed under MIT License. You can read MIT License in LICENSE file.

BBB Software 1.1 contains AAA Library 2.2 (http://sourceforge.net/AAA-Library) under Apache License 2.0. For the licensing rule and related notices of AAA Library 2.2, please see the THIRDPARTY file.
—-

這邊同樣是假設,已經將 AAA 函式庫的著作權與授權詳細資訊、Apache-2.0 全文以及 NOTICE 檔案中的資訊都儲存在 THIRDPARTY 檔案中,因此聲明中並沒有請後手去瀏覽  NOTICE 檔案。

而在個別源碼檔案中的授權聲明筆者建議保留原文,但是在被修改過的 Apache-2.0 源碼檔案中,著作權資訊必須加以適當地修改,讓後手了解到這個檔案是被修改過:

—-
/* 2013 (c) BBB Software 1.1
 * Developer Mr. B <bbb@example.org>
 * URL: http://BBB.org/
 *
 * This file is made change by Mr. B and licensed under Apache License 2.0.
 *
 * This file incorporates work covered by the following copyright and  
 * permission notice:  
 *  
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

而在散布目的碼格式時,則可以在適當的位置加上如下的簡要資訊,這些適當的位置可以是圖形化介面中的「關於 (About)」下拉選單中、嵌入式裝置所附隨的說明書或應用程式安裝過程中所出現的著作權與授權資訊頁面:

—-
2013 (c) BBB Software 1.1
Developer Mr. B <bbb@example.org>
URL: http://BBB.org/

BBB Software 1.1 is licensed under MIT License. You can read MIT License here: <http://BBB.org/licenses/MIT>.

BBB Software 1.1 contains AAA Library 2.2 (http://sourceforge.net/AAA-Library) under Apache License 2.0. For the licensing rule and related notices of AAA Library 2.2, please see <http://BBB.org/licenses/thirdparty>.
—-

3、利用 Apache-2.0 程式開發新專案,新專案整體採用不提供源碼的方式來授權。

這是第1種類型變化而來的,由於 Apache-2.0 並沒有強制規定使用者散布衍生程式的同時也必須提供源碼,所以轉授權的 Apache-2.0 程式,也可以成為封閉源碼專案中的第三方元件。這樣的新專案其實與傳統不提供源碼的商業軟體一樣,所以在著作權與授權資訊的標示上,也與這類商業軟體無異,因此筆者不多贅述。

比較特別的是,在這類專案中,有些專案不提供源碼的政策僅及於自行開發的部份,對於第三方自由開源軟體元件還是會提供源碼,這通常是因為專案僅單純利用第三方元件,並沒有進行任何的修改,又或者即使有修改,修改的質與量均甚微。針對這樣的新專案,筆者建議在散布時可以附上如下的聲明:

—-
2013 (c) BBB Software 1.1, ALL RIGHTS RESERVED.
Developer Mr. B <bbb@example.org>
URL: http://BBB.org/

For the Terms of Users, please see TOU shown during installation process or under ABOUT of BBB Software.

The AAA Library 2.2 is downloaded from http://sourceforge.net/AAA-Library under Apache-2.0, and implemented without modification in BBB Software 1.1 as a separate part. For its licensing rule and related notices, please find AAA-LIBRARY-infos.txt file in root directory of the Installation CD.
—-

【結語】

Apache-2.0 是一份授權範圍廣大、義務規定寬鬆的授權條款,所以 Apache-2.0 在義務規定上著重授權資訊的傳遞、各項聲明的保留以及貢獻者聲明的彰顯,這幾項資訊呈現義務簡單扼要,因此要達成義務規定對於使用者來說並不難。但是 Apache-2.0 不拘束衍生程式的授權條款、不強制必須提供源碼,這讓 Apache-2.0 程式碼在開發應用上有很大的彈性空間,呈現出多樣化的應用型態,而適合每一種型態的資訊呈現方式可能不同,因此這反而讓 Apache-2.0 程式的開發者在資訊呈現上面,必須多花些腦筋。本文在詳細說明之後,列舉三個實際文字範例供參考之用,若是在實際開發時,新專案的狀況與本文所列範例不同,建議可以稍加比較實際新專案與本文範例的差異,應該就可以自行修改出符合 Apache-2.0 義務規定的各項聲明內容!

—-

註一:關於 Apache-2.0 內容的介紹,可以參考下列文章:林懿萱,化簡為繁的 Apache-2.0 授權條款,http://www.openfoundry.org/tw/legal-column-list/8581;葛冬梅,條文解析自由開源軟體的專利授權條款,http://www.openfoundry.org/tw/legal-column-list/8914;林誠夏,簡論「轉授權/再授權」於公眾授權領域的效力與應用方式,http://www.openfoundry.org/tw/legal-column-list/8929

註二:ASF 針對開發者有一篇用字淺顯易懂的 FAQ,來說明利用 Apache-2.0 程式碼時所應該要知道的重要授權資訊:Apache License and Distribution FAQ,http://www.apache.org/foundation/license-faq.html

註三:關於 GPL 類條款拘束衍生程式授權內容的說明,可以參考下面文章:林誠夏,GPL 條款對於衍生程式的判定標準與其授權拘束性的擴散範圍(上),http://www.openfoundry.org/tw/legal-column-list/8446;林誠夏,GPL 條款對於衍生程式的判定標準與其授權拘束性的擴散範圍(下),http://www.openfoundry.org/tw/legal-column-list/8447

註四:ASF 所提供的 NTOICE 純文字範本:http://www.apache.org/licenses/example-NOTICE.txt

註五:關於自由開源軟體轉授權/再授權進一步的說明,請參考:林誠夏,簡論「轉授權/再授權」於公眾授權領域的效力與應用方式,http://www.openfoundry.org/tw/legal-column-list/8929

註六:Apache-2.0 第 2 條:"Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.";Apache-2.0 第 4 條第 2 項"You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License."

註七:Apache-2.0 第 4 條第 1 項第 3 款:"You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works……"

註八:我國專利法第 98 條:「專利物上應標示專利證書號數;不能於專利物上標示者,得於標籤、包裝或以其他足以引起他人認識之顯著方式標示之;其未附加標示者,於請求損害賠償時,應舉證證明侵害人明知或可得而知為專利物。」

註九:ASF 說明 Apache-2.0 與 GPL 類條款相容性的網頁:Apache License v2.0 and GPL compatibility,http://www.apache.org/licenses/GPL-compatibility.html。這個網頁的首段文字,將讀者直接導引到 SFLC 所發佈的轉換指南網頁:Maintaining Permissive-Licensed Files in a GPL-Licensed Project: Guidelines for Developers,http://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html

註十:Apache-2.0 雖然相容於 GPL-3.0 的特性,但是這種相容僅為單向,也就是 Apache-2.0 程式碼可以改以 GPL-3.0 授權,而 GPL-3.0 程式碼卻無法逆向地改為 Apache-2.0 授權。關於自由開源授權條款間的相容性議題,可以參考:Apache License v2.0 and GPL compatibility,http://www.apache.org/licenses/GPL-compatibility.html;林珈宏,從 Copyleft 看自由開源軟體授權相容性,http://www.openfoundry.org/tw/legal-column-list/8710;林誠夏,簡論「轉授權/再授權」於公眾授權領域的效力與應用方式,http://www.openfoundry.org/tw/legal-column-list/8929

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *