Linux 核心
/ LIN-uuks /
Linux 核心是地表使用最廣的作業系統正中央的引擎——它驅動著大多數網頁伺服器、每一支 Android 手機、超級電腦、汽車、路由器,以及你今天打開的那個 app 背後的雲端。它由學生 Linus Torvalds 於 1991 年起步,作為當時商用 Unix 系統的免費、開放原始碼替代方案而寫成。開放原始碼意味著任何人都可閱讀、修改與分享程式碼,數十年來,數以千計的人與公司一同打造它,使它成為史上規模或許最大的協作軟體專案。
技術上,Linux 是單核心(monolithic kernel):排程、記憶體管理、檔案系統、網路與裝置驅動程式全都一起執行於同一個具特權的核心位址空間,彼此以普通的函式呼叫而非訊息傳遞溝通。這種設計很快,因為跨子系統的代價很低;但這也表示某個驅動程式的錯誤原則上可能拖垮或危及整個核心。Linux 以可載入核心模組(loadable kernel module)緩解此問題——這些是可在執行期載入與卸載的核心程式碼片段(通常是某特定裝置的驅動程式),使核心保持精簡,只長出某台機器所需的部分。所以 Linux 在結構上是單核心,在封裝上卻是模組化的。
兩點誠實的釐清很重要。第一,嚴格說 Linux 只是核心;一套可用的系統還需要系統程式、函式庫與工具(其中許多來自 GNU 專案等),這正是有人堅持稱之為 GNU/Linux 的原因。第二,單核心不代表原始——Linux 能從只有幾 MB 記憶體的微小嵌入式板,擴展到擁有數千個 CPU 核心的伺服器,正是因為人們投入了大量工程,讓它的鎖、排程與記憶體管理在每一種規模下都運作良好。
你插上一個 USB Wi-Fi 介面卡。核心偵測到這個新裝置,查出對應的驅動程式,並把它當成核心模組載入——你甚至能用 lsmod 之類的指令看到它出現。核心中既有的網路堆疊隨即用這個剛載入的驅動程式收發封包,完全不需重開機。
單核心、模組化驅動:核心只長出每台機器所需的部分。
人們常說 Linux 卻指的是整套發行版(Ubuntu、Android、Debian)。精確地說,Linux 只是核心;其餘的——外殼、套件管理器、桌面——是圍繞它打包的另外的軟體。