Learning Objectives
- 說明安裝程式實際做了哪些事,以及套件管理員如何處理套件庫、版本與相依性
- 說明軟體更新的理由(修正錯誤、修補安全漏洞、新功能)與支援期的意義
- 區分專有軟體、免費軟體、共享軟體、自由軟體與開放原始碼軟體
- 比較 MIT、Apache 2.0、GPL 等常見授權的主要義務,知道使用他人程式碼前要看授權
這一課要回答的問題
每天都會碰到這些畫面:
- 手機通知「有 12 個 App 可以更新」,電腦跳出「重新啟動以完成更新」
- 安裝軟體時出現一大段授權條款,你直接按了「我同意」
- 網路上找到一段很好用的程式碼,不確定能不能放進自己的作品,甚至拿去賣
這一課要回答:安裝一個軟體時電腦做了什麼?為什麼更新不該一直按「稍後提醒我」?授權條款到底允許你做什麼?
安裝程式做了什麼
一個軟體不只是一個執行檔。安裝程式(installer)通常會做這些事:
| 動作 | 例子 |
|---|---|
| 把檔案複製到系統的固定位置 | 執行檔、它需要的函式庫、圖示、說明文件、授權檔 |
| 建立啟動方式 | 開始功能表、桌面捷徑、應用程式清單 |
| 寫入設定 | 預設值、檔案關聯(雙擊 .pdf 用哪個程式開);Windows 有些設定寫在登錄檔(registry) |
| 處理相依性 | 安裝它需要的其他元件,例如某個版本的執行環境 |
| 註冊背景服務 | 開機自動啟動、自動更新檢查 |
| 記錄「裝了什麼」 | 日後才能完整解除安裝 |
複製到系統目錄、註冊服務都會影響整台電腦,所以安裝時常要輸入管理員密碼(Windows 的使用者帳戶控制、Linux 的 sudo)。
這也是一道安全關卡:只安裝來源可信的軟體,因為你同時給了它修改系統的權限。
不同平台的安裝方式:
| 平台 | 常見方式 |
|---|---|
| Windows | 執行 .exe/.msi 安裝程式、Microsoft Store、命令列的 winget |
| macOS | 把 .dmg 裡的 App 拖進「應用程式」、.pkg 安裝程式、App Store |
| Linux | 套件管理員(Ubuntu 的 apt、Fedora 的 dnf),從官方套件庫安裝 |
| 手機 | App Store、Google Play 等應用程式商店 |
套件管理員(package manager)與應用程式商店的想法相同:軟體集中放在套件庫(repository),每個套件標明版本、需要哪些其他套件, 並附上數位簽章讓系統確認沒有被竄改。你只要說「我要裝 X」,它會找出 X 需要的全部相依套件一起裝好,也記得每個檔案屬於哪個套件,移除時才不會漏。
為什麼要更新
軟體更新通常為了三件事:
- 修正錯誤(bug fix):讓程式不再當掉、算錯
- 修補安全漏洞(security patch):漏洞被公開後,攻擊者會去找還沒更新的電腦
- 新功能與相容性:支援新的檔案格式、新的硬體
第 2 點最重要。一個真實的例子:2017 年 3 月,微軟發布安全更新 MS17-010,修補 Windows 檔案分享功能(SMB)的漏洞; 同年 5 月,勒索軟體 WannaCry 利用這個漏洞在全球大量擴散,受害的主要是沒有安裝這個更新的電腦。修補程式早已存在,只是沒有被裝上。
版本號常見「主版本.次版本.修訂號」的寫法,例如 2.10.3:修訂號變了通常是修正錯誤,主版本變了可能有不相容的改變。
支援期:每個軟體版本只在一段時間內提供更新。例如 Ubuntu 的長期支援版(LTS)提供 5 年的標準安全維護; 過了支援期的作業系統或軟體不再修補漏洞,繼續用就等於一直帶著已知的漏洞。
更新也有風險(偶爾出現新的錯誤),所以重要的電腦會先備份、在測試環境試過再更新,但不是因此不更新。
在 Ubuntu 上,更新分兩步:sudo apt update 下載最新的「套件清單」,sudo apt upgrade 依清單把已安裝的套件升級。
想一想:安裝與更新
在 Ubuntu 上執行 sudo apt upgrade,卻顯示沒有任何套件可以升級;但你知道幾天前才發布了安全更新。最可能少做了什麼?
套件管理員(例如 apt)比「從網路上隨便下載安裝檔」多做了哪件重要的事?
下面哪一個情況,最需要盡快安裝更新?
軟體授權:你被允許做什麼
程式碼和文章、音樂一樣受著作權保護。你買了(或免費下載了)一個軟體,通常得到的不是軟體本身,而是依授權條款使用它的權利。
| 類型 | 意思 | 例子 |
|---|---|---|
| 專有軟體(proprietary) | 原始碼不公開;授權條款(例如使用者授權合約 EULA)限制安裝台數、禁止修改與再散布 | 多數商業作業系統、辦公軟體、遊戲 |
| 免費軟體(freeware) | 不用付錢,但不一定可以修改、再散布或看原始碼 | 許多免費工具程式 |
| 共享軟體/試用版(shareware) | 可以先試用,之後要付費才能繼續使用或解鎖功能 | 試用 30 天的軟體 |
| 自由軟體(free software) | 使用者有四項自由:為任何目的執行、研究並修改(要能取得原始碼)、再散布、散布修改後的版本;「自由」指的是自由而不是價格 | GNU 專案的軟體、Linux 核心 |
| 開放原始碼(open source) | 原始碼公開,授權符合開放原始碼促進會(OSI)的定義:允許自由使用、修改與再散布 | Python、Firefox |
「免費」和「開放原始碼」是兩件事:免費軟體可以完全不給原始碼,開放原始碼軟體也可以拿來賣。
開放原始碼授權大致分兩類:
| 授權 | 類型 | 主要義務(簡化說明) |
|---|---|---|
| MIT | 寬鬆型 | 可以使用、修改、散布、拿來賣,條件是保留著作權聲明與授權條款全文;作者不提供任何擔保 |
| BSD | 寬鬆型 | 和 MIT 相近;部分版本另外規定不得用原作者名義替你的產品背書 |
| Apache 2.0 | 寬鬆型 | 和 MIT 相近,另外明確授與相關專利的使用權,並要求修改過的檔案要標示有修改 |
| GPL | 著佐權(copyleft) | 散布修改後的版本或包含它的作品時,必須以 GPL 授權,並提供原始碼;只在自己或公司內部使用、不散布時,沒有公開原始碼的義務 |
| LGPL | 較弱的著佐權 | 常用於函式庫:只使用(連結)這個函式庫的程式可以不採用 LGPL,但修改函式庫本身時仍要公開修改 |
| AGPL | 著佐權 | 和 GPL 相近,另外規定:把修改後的版本架成網路服務讓別人使用時,也要提供原始碼 |
著佐權(copyleft)的想法是:你可以自由使用與修改,但散布時要把同樣的自由傳下去。
實務上的提醒:
- 授權條款常用簡短代號標示,例如
MIT、Apache-2.0、GPL-3.0-or-later(SPDX 識別碼),寫在專案的LICENSE檔或每個原始碼檔案的開頭。 - 網路上找到的程式碼沒有寫授權,不代表可以隨便用;預設是作者保留全部權利。
- 創用 CC(Creative Commons)授權是給文章、圖片、音樂等內容用的,創用 CC 官方不建議用在軟體上。
- 在 Linux 上,每個套件的授權寫在
/usr/share/doc/套件名稱/copyright。
這裡的表格是幫助理解的簡化說明,不是法律意見;實際權利與義務一律以授權條款原文為準,有商業或法律上的疑問請洽詢專業人士。
想一想:授權
一家公司想把一個 MIT 授權的函式庫放進自己要販售的 App 裡(不公開 App 的原始碼)。依 MIT 授權,最主要的義務是?
你修改了一個 GPL 授權的程式,並把修改後的版本放到網站上讓大家下載。依 GPL,你必須?
下面哪一個敘述正確?
重點整理
- 安裝程式會複製執行檔與函式庫、建立啟動方式、寫入設定、處理相依性、註冊服務,並記錄裝了什麼;因為會改動系統,通常需要管理員權限,只安裝可信來源的軟體。
- 套件管理員從套件庫安裝軟體,自動處理相依性與版本,並用簽章確認來源;Ubuntu 用
apt update更新清單、apt upgrade升級。 - 更新是為了修正錯誤、修補安全漏洞與新功能;安全更新要優先安裝,過了支援期的軟體不再修補漏洞。
- 專有、免費、共享、自由、開放原始碼是不同的概念;「免費」講價格,「自由/開放原始碼」講你能做什麼。
- 寬鬆型授權(MIT、BSD、Apache 2.0)主要要求保留聲明;著佐權授權(GPL、AGPL)要求散布時以相同授權提供原始碼。沒有寫授權的程式碼不等於可以自由使用。
- 授權內容以條款原文為準,這裡只是幫助理解的簡化說明。
想多練習 apt 與套件管理,可以接著上 Linux 軌。
下一課:軟體是用程式語言寫的。CPU 只看得懂 0 與 1,你寫的程式是怎麼變成它能執行的指令?