National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 78 24°C PM2.5 18
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 19

軟體安裝、更新與授權

安裝程式做了什麼、為什麼要更新、授權怎麼看
Interaction 20 minute(s)

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 需要的全部相依套件一起裝好,也記得每個檔案屬於哪個套件,移除時才不會漏。

互動練習:用套件管理員安裝與移除軟體

這是 Ubuntu 的終端機模擬器,每一顆按鈕都是真的指令。依任務操作:先不加 sudo 安裝看看錯誤訊息,更新套件清單、查詢 hello 這個小程式的版本,安裝並執行它;再用 dpkg -L 看安裝程式到底把哪些檔案放到哪裡,最後移除它,再執行一次看看。

為什麼要更新

軟體更新通常為了三件事:

  1. 修正錯誤(bug fix):讓程式不再當掉、算錯
  2. 修補安全漏洞(security patch):漏洞被公開後,攻擊者會去找還沒更新的電腦
  3. 新功能與相容性:支援新的檔案格式、新的硬體

第 2 點最重要。一個真實的例子:2017 年 3 月,微軟發布安全更新 MS17-010,修補 Windows 檔案分享功能(SMB)的漏洞; 同年 5 月,勒索軟體 WannaCry 利用這個漏洞在全球大量擴散,受害的主要是沒有安裝這個更新的電腦。修補程式早已存在,只是沒有被裝上。

版本號常見「主版本.次版本.修訂號」的寫法,例如 2.10.3:修訂號變了通常是修正錯誤,主版本變了可能有不相容的改變。

支援期:每個軟體版本只在一段時間內提供更新。例如 Ubuntu 的長期支援版(LTS)提供 5 年的標準安全維護; 過了支援期的作業系統或軟體不再修補漏洞,繼續用就等於一直帶著已知的漏洞。

更新也有風險(偶爾出現新的錯誤),所以重要的電腦會先備份、在測試環境試過再更新,但不是因此不更新。 在 Ubuntu 上,更新分兩步:sudo apt update 下載最新的「套件清單」,sudo apt upgrade 依清單把已安裝的套件升級。

想一想:安裝與更新

1.

在 Ubuntu 上執行 sudo apt upgrade,卻顯示沒有任何套件可以升級;但你知道幾天前才發布了安全更新。最可能少做了什麼?

2.

套件管理員(例如 apt)比「從網路上隨便下載安裝檔」多做了哪件重要的事?

3.

下面哪一個情況,最需要盡快安裝更新?

第 1 次作答

軟體授權:你被允許做什麼

程式碼和文章、音樂一樣受著作權保護。你買了(或免費下載了)一個軟體,通常得到的不是軟體本身,而是依授權條款使用它的權利。

類型 意思 例子
專有軟體(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。

這裡的表格是幫助理解的簡化說明,不是法律意見;實際權利與義務一律以授權條款原文為準,有商業或法律上的疑問請洽詢專業人士。

互動練習:更新系統並查看授權

先依正確順序更新套件清單、升級已安裝的套件;再到 /usr/share/doc 查看幾個套件的授權檔,用 grep 一次列出它們各用哪一種授權;最後看你自己的專案 ~/myapp 用的授權。注意:這裡的授權檔是教學用的簡化節錄,完整內容以實際系統上的檔案為準。

想一想:授權

1.

一家公司想把一個 MIT 授權的函式庫放進自己要販售的 App 裡(不公開 App 的原始碼)。依 MIT 授權,最主要的義務是?

2.

你修改了一個 GPL 授權的程式,並把修改後的版本放到網站上讓大家下載。依 GPL,你必須?

3.

下面哪一個敘述正確?

第 1 次作答

重點整理

  • 安裝程式會複製執行檔與函式庫、建立啟動方式、寫入設定、處理相依性、註冊服務,並記錄裝了什麼;因為會改動系統,通常需要管理員權限,只安裝可信來源的軟體。
  • 套件管理員從套件庫安裝軟體,自動處理相依性與版本,並用簽章確認來源;Ubuntu 用 apt update 更新清單、apt upgrade 升級。
  • 更新是為了修正錯誤、修補安全漏洞與新功能;安全更新要優先安裝,過了支援期的軟體不再修補漏洞。
  • 專有、免費、共享、自由、開放原始碼是不同的概念;「免費」講價格,「自由/開放原始碼」講你能做什麼。
  • 寬鬆型授權(MIT、BSD、Apache 2.0)主要要求保留聲明;著佐權授權(GPL、AGPL)要求散布時以相同授權提供原始碼。沒有寫授權的程式碼不等於可以自由使用。
  • 授權內容以條款原文為準,這裡只是幫助理解的簡化說明。

想多練習 apt 與套件管理,可以接著上 Linux 軌。

下一課:軟體是用程式語言寫的。CPU 只看得懂 0 與 1,你寫的程式是怎麼變成它能執行的指令?

這一課完成了!
Next lesson:程式語言演進:編譯與直譯
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。