開源軟體授權應用管理 === ###### tags: `III` `FLOSS` ### 術語 * Commercial Open Source Software (商業公司提供的開源軟體) * Third Party (商業授權軟體) * Open Source Project (開源授權軟體) 案例: * 保加利亞政府 - 公部門使用的軟體若涉及民眾使用,一定要使用open source,不然那家公司倒了就完了。 * Core Infrastructure Initiative - The Linux Foundation下,負責處理共同基礎專案的資安問題(例如OpenSSL),有漏洞24小時內會發patch,所以使用者要隨時更新。 * 工程會 > 廠商依本契約提供機關服務時,如使用開源軟體,應依該開源軟體之授權範圍,授權機關利用,並以執行檔及原始碼共同提供之方式交付予機關使用,廠商並應交付開源軟體清單(包括但不限於:開源專案名稱、出處資訊、原始著作權利聲明、免責聲明、開源授權條款標示與全文) > -- <cite>資訊服務採購契約範本第16條第3項第6款</cite>    * The OpenChain Project - 提出*開源軟體授權條款合規的一般公眾指南*,例如晶片廠商提供的軟體,就要經過合規認證。 ### IPR (Intellectual Property Rights) 1. 商標 Trademark * 商標法 - 可以拿別人公司的商標做事情性的描述,但是廣告、背書、產品宣傳就不行。 * **OSS** * 商標通常是不授權的。 2. 專利 Patent * 可專利性 * 技術性 (經得起反覆科學驗證) * 創新性 (原來沒有發明過的、我的跟原來的發明有什麼不一樣) * 商用性 (要跟各國的權責單位說,我的專利要用在哪個商業模式、商業手段) * 軟體專利 - 專利是透過步驟來實踐技術方法,若這個步驟是透過軟體演算,這就叫軟體專利,例如FFmpeg解壓縮MP3/MP4的演算法。 * **OSS** * MPL 1.1/2.0、EPL 1.0/2.0、GPL 3.0、LGPL 3.0、Apache 2.0 有提到怎麼處理專利。 * Prior Art Database * Linux Defenders - 協助開源社群寫 prior art,把不想申請專利的演算法公開在技術資料庫,後來有人想申請這個演算法的專利就不行。 * ip.com * Patent Pool 3. 著作權 Copyright * 著作人格權 - 公開發表權、姓名表示權及禁止他人損害著作人名譽的權利。 * 著作財產權 - 重製權、公開口述權、公開播送權、公開上映權、公開演出權、公開傳輸權、公開展示權、改作權、散布權、出租權。 * 創作保護主義 - 軟體作品於創作完成時,自動取得著作權,無需申請與登記,網路上的程式碼,都受著作權保護,若沒有授權條款,只能看不能用。 * 術語 * Public Domain - 不受著作權保護,可以直接用。 * All Rights Reserved - 軟體沒有額外標示說明的話,著作人就保留所有權力,除非得到書面或足資證明的授權文件,才可以用。 * **OSS** * 通常有商業授權或開源授權。 ### OSS授權特性 * 商業授權 - 有受權對象、時間、範圍限制。 * 開源授權 1. 非專屬授權 (non-exclusive) - 可向不特定多數人進行授權動作,不能限定誰才能用。 2. 不可撤回 (irrevocable) - 開源的著作權受權是不會撤回,版本控制很重要,要把原版本的受權留下來。 3. 容許再授權 (sub-license) - 可以前手MIT,後手GPL,只要受權不相斥。 4. 不能對專利和著作權收費 (royalty free)。 5. 不附隨擔保 - 如果軟體是無償取得,原來的創作者免責條款會發揮最大效力。 6. 目的、時間、地域不受限 7. 對著作權會稍微限制使用 (重製、修改、發布) 的形態。 ### 開源授權獲利模式 * 服務性收費模式 - 販售客服、教育訓練等。 * 嵌入式收費模式 - 販售搭載嵌入式 (Linux kernel)系統的消費性電子產品。 * 商標與服務綜合模式 - 定期訂購 (subscription model),例如RedHat。 * 術語 * Open Source Assurance - 如果顧客用了開源商品之後,被該商品依賴的OSS條款罰款,可以從這筆保險支付。 * Long-Term Support Initiative - 每個公司各出幾個人長期維護某個Linux kernel,這專案底下的交流不受商業秘密保護限制。 ### 各類開源授權方式 * 開源專案絕對可以商用,但是要遵守開源條款 (Apache、MIT、BSD 做好相關標示,GPL 提供原始碼)。 * Permissive License 與 Copyleft License 專案,皆可保障軟體被任何人秘密地自由修改與使用,但是一旦被**轉發**: * Permissive License 的衍生專案必須標示原專案出處,例如MIT、BSD、Apache 2.0。 * Copyleft 著作傳 (ㄔㄨㄢˊ) License 的衍生專案不可以添加比原專案更多的使用限制,例如 GPL、MPL、EPL。 ![](https://image.slidesharecdn.com/20160923-161121141412/95/20160923-ccodp-208-638.jpg?cb=1479737731 "https://image.slidesharecdn.com/20160923-161121141412/95/20160923-ccodp-208-638.jpg?cb=1479737731") #### BSD類 * BSD/MIT 若有使用 BSD/MIT OSS,則要標示著作權聲明 (Copyright Notice) 和免責聲明 (Disclaimer),往後是可以閉源的。 * Apache 2.0 若有使用 Apache 2.0 OSS,其條文比 BSD/MIT 多了軟體專利授權內容,但不可以用它來提告上游貢獻者或下游使用者專利侵權。 #### GPL類 * GPL GPL 的衍生程式也必須要採用 GPL,對他人散佈目的碼之後,也必須提供他人衍生程式原始碼。 ![](https://i.imgur.com/iDm4ccf.png) :::warning * 提供程式原始碼,不是要公開程式原始碼,可以跟客戶說不能公開。 * 衍生程式究竟要提供到多少原始碼,是更深的議題。 ::: * LGPL 若只是連結利用LGPL的函示庫或軟體,則可以自行決定是否提供衍生程式原始碼。 :::warning * 條文沒指定是動態還靜態連結。 ::: * AGPL 若有修改到AGPL OSS原始碼,再拿去提供網路服務,就要提供所有網路服務的使用者衍生程式的原始碼。 #### 其他類 由於GPL提到的**改作**是抄著作權法,但是各國著作權法對**改作**解釋很模糊,所以產生其他類license各自解釋怎樣算**改作**。 * 衍生程式可以重新用自己名義授權,但是原來的授權要列表揭示出來。 * 若有改作,要提供衍生程式的原始碼。 * 怎樣算改作? * MPL/CDDL (file based copyright) - 衍生程式有改動到原本 MPL/CDDL OSS 的檔案,才要提供衍生程式的原始碼;若只是另外寫plugin,則不算。 * EPL/CPL (module based copyright) - 衍生程式做了模組化,是透過 interface 與 EPL/CPL OSS 做溝通的話,則不算改作。 ### 開源授權相容性 ![](http://www.linuxvoice.com/wp-content/uploads/2015/10/coverfeat-large.png "http://www.linuxvoice.com/wp-content/uploads/2015/10/coverfeat-large.png") * MPL 2.0 / EPL 2.0 * 自動更新授權條款 - 若有更新的License版本被發布,就自動升級為該版本。 * 可融入GPL大專案 - MPL 2.0 自動可與 GPL 相容;EPL 2.0 一定要原來的開發者有寫可以相容 GPL 才行。 ### 授權布局 - FUD(Fear, Uncertainty, Doubt ) - 這種行銷手法現在經常用於電腦業界,使顧客誤以為除了該公司的產品外,他們別無其他選擇。 - OSI (Open Source Initiative) - 核定 open source license 的單位,license 要遵守 [Open Source Definition](https://opensource.org/osd). - No Discrimination Against Fields of Endeavor - license 不能限定軟體用途,否則只能說這是 source available,而不是 OSS。 - 放寬條款的例子 - Oracle - MySQL - the Universal FOSS Exception 說衍生程式使用其 interface 可以不用採用 GPL。 - OpenJDK - 衍生程式要用連結jar的方式,並且要加註 the Classpath Exception。 > Oracle facilitates your further distribution of this package by adding the Classpath Exception to the necessary parts of its GPLv2 code, which permits you to use that code in combination with other independent modules not licensed under the GPLv2. ### 如何合法吸納他人貢獻 * 著作權讓與 (Copyright Assignment) - 永久式買斷 * 專屬授權 (Exclusive License) - 定期式買斷 * 非專屬授權 (Non-exclusive License) - 平行、非獨占的協作關係 ### Creative Commons 授權 * **改作**是指去修改在文章裡不能被抽換的圖片,**編輯**是指去修改在文章裡可以被抽換的圖片。 * CC 對圖片的保護為**可編輯**,但**不可改作**。 * CC BY-SA 可轉成 GPLv3。 ### 程式源碼掃描工具 #### Inside Organizations * Getting started with SPDX https://github.com/nexB/license-expression * Reuse https://reuse.software/ * Open Source License Checklists https://www.osadl.org/?id=2525 * Debian’s License Check https://packages.debian.org/stretch/licensecheck #### Checking Licenses * FOSSology https://www.fossology.org/ https://github.com/fossology/fossology * ScanCode https://github.com/nexB/scancode-toolkit https://github.com/nexB/scancode-server * AboutCode http://www.aboutcode.org/ https://github.com/nexB/aboutcode-manager https://github.com/nexB/aboutcode-toolkit * Ninka (Jninka as a fork) http://ninka.turingmachine.org/ https://github.com/dmgerman/ninka https://github.com/whitesource/jninka * Apache Rat (part of Apache Creadur) – Audits License Headers http://creadur.apache.org/rat/ * WhiteSource Comment Analysis Tool https://github.com/whitesource/cat-core #### Checking Dependencies / Creating BoMs * License-Compatibility-Checker https://www.npmjs.com/package/license-compatibility-checker https://github.com/HansHammel/license-compatibility-checker * Licensee.js (check dependency licenses against SPDX-based rules) https://www.npmjs.com/package/licensee https://github.com/jslicense/licensee.js * jslicense http://jslicense.org/ * OSS Review Toolkit https://github.com/heremaps/oss-review-toolkit * Apache Tentacles (part of Apache Creadur) http://creadur.apache.org/tentacles/ #### Creating Software Catalogs * SW360 https://projects.eclipse.org/projects/technology.sw360 https://sw360.github.io/ * OSS Review Toolkit https://github.com/heremaps/oss-review-toolkit #### CI/CD Support * Quartermaster http://qmstr.org/ * SPDX Maven Plugin https://github.com/spdx/spdx-maven-plugin #### Checking Contributors * Cregit https://github.com/cregit/cregit * OSS Attribution Builder (Amazon) https://github.com/amzn/oss-attribution-builder #### Tracking of Software Packages * Sparts https://github.com/Wind-River/sparts/