BSD

**柏克萊軟體套件**（英語：**B**erkeley **S**oftware **D**istribution，縮寫：**BSD**；也被稱為**柏克萊 Unix** 或 Berkeley Unix）是一個衍生自 Unix（類 Unix）的作業系統，1970 年代由柏克萊加州大學的學生比爾・喬伊開創，也被用來代表其衍生出的各種套件。

BSD 授權條款非常地寬鬆，因此 BSD 常被當作工作站級別的 Unix 系統，許多 1980 年代成立的計算機公司都從 BSD 中獲益，比較著名的例子如 DEC 的 Ultrix，以及 Sun 公司的 SunOS。 1990 年代，BSD 大幅度被 System V 4.x 版以及 OSF/1 系統所取代，但其開源版本被用在網際網路的開發。

## 歷史

### PDP-11 開始

最初的 Unix 套件源自 1970 年代的貝爾實驗室，作業系統中包含原始碼，這樣研究人員以及大學都可以參與修改擴充。1974 年，第一個柏克萊的 Unix 系統被安裝在 PDP-11 機器上，計算機科學係而後將其用作擴展研究。

其他大學開始對柏克萊的軟體感興趣，在 1977 年，柏克萊的研究生比爾・喬伊將程式整理到磁帶上，作為 First Berkeley Software Distribution（**1BSD**）發行。 1BSD 被作為第六版 Unix 系列，而不是單獨的作業系統。主要程式包括 Pascal 編譯器，以及比爾・喬伊的 ex 行編輯器。

Second Berkeley Software Distribution（**2BSD**）於 1978 年發布，除了對 1BSD 中的軟體進行升級，還包括了比爾・喬伊寫的兩個新程式：vi 文字編輯器（ex 的可視版本），以及 C Shell。這兩個新添的程式，在 Unix 系統中至今仍被使用。

2BSD 以後的版本逐漸從 PDP-11 結構向 VAX 計算機移植。最新的 **2.11BSD** 於 1992 年發布，更新維護一直持續到 2003 年。

### VAX 版本

1978 年，柏克萊安裝了第一台 VAX 計算機，但將 Unix 移植到 VAX 構架的 UNIX/32V，並沒有利用 VAX 虛擬記憶體的能力。柏克萊的學生重寫了 32V 的大部分核心，以實現虛擬記憶體的支援。1979 年，**3BSD** 誕生了，這個新系統完整包括了一個新核心、從 2BSD 移植到 VAX 的工具，還有 32V 原來的工具。

3BSD 的成功使得美國國防高等研究計劃署（DARPA）決定資助柏克萊的電腦系統研究小組（CSRG），以開發一個 Unix 標準平台，供 DARPA 未來研究。1980 年 10 月，該小組發布了 **4BSD**，此版本對 3BSD 有許多改進。

相較於 VAX 機器的主流系統 VMS，使用者對 BSD 時有批評。1981 年 6 月，**4.1BSD** 發布，比爾・喬伊大幅度提高了該版本核心的效能，使之在多個平台上與 VMS 相媲美。為了避免與 AT&T 的 UNIX System V（UNIX 第五版）混淆，這個版本沒有取名為 5BSD。

**4.2BSD** 歷經兩年後才得以問世，實現了多項重大改進。之前有三個中間版本相繼推出：4.1a 引入了 BBN 科技預試中的 TCP/IP 協定棧的修改版；4.1b 引入了由馬紹爾・克爾克・麥庫錫克實現的新型檔案系統（Berkeley Fast File System，FFS）；4.1c 是 4.2BSD 開發最後幾個月的過渡版。

1983 年 8 月，**4.2BSD** 正式發布。這是 1982 年比爾・喬伊離開小組、前去建立 Sun 公司後的第一個版本，自那時起馬紹爾・克爾克・麥庫錫克和 Mike Karels 和一直負責領導該項目。值得一提的是，這次 BSD 小惡魔正式出場，最初是馬紹爾・克爾克・麥庫錫克的畫作，出現在列印好的文件封面上，由 USENIX 發行。

### BSD 版本

1986 年 6 月，**4.3BSD** 發布。該版本主要是將 4.2BSD 的許多新貢獻作效能上的提高，原來的 4.1BSD 沒有很好地協調。在該版本之前，BSD 的 TCP/IP 實現已經跟 BBN 的官方實現有較大差異。經過數月測試後，DARPA 認為 4.2BSD 更合適，所以在 4.3BSD 中作了保留。 （參見網際網路歷史）

4.3BSD 後，BSD 逐漸拋開老式的 VAX 平台。 Computer Consoles 有限公司開發的 Power 6/32 平台（代號為 "Tahoe"），當時看來大有可為，但不久即被他們的開發員所遺棄。然後，1988 年 6 月移植的 **4.3BSD-Tahoe** 卻表現不俗，BSD 將依賴於機器跟不依賴於機器的代碼分離，為未來系統的可移植性打下了良好的基礎。

到此為止，所有的 BSD 版本都混合了專屬的 AT&T UNIX 代碼，這樣繼續使用就需要從 AT&T 獲得授權條款。原始碼授權條款當時非常地昂貴，幾個其他組織對單獨的網路代碼版感興趣，完全獨立於 AT&T，這樣就可不受授權條款的支配。 1989 年 6 月，**Networking Release 1**（**Net/1**）誕生了，沒有 AT&T 授權也能使用，可遵照 BSD 授權條款進行自由再發布。

1990 年初，推出了 **4.3BSD-Reno**。該版本是 4.4BSD 早期開發的過渡版，使用該版本被戲稱為是一種賭博，因為 Reno 就是內華達州的賭城雷諾。

### Net/2 以及法律問題

Net/1 以後，Keith Bostic 提議，BSD 系統中應該有更多的非 AT&T 部分，以 Net/1 的協定發布。隨後，他開始一個項目，著手重新實現一些 Unix 標準工具，其中不使用原來的 AT&T 代碼。例如，Vi，也就是基於最初 Unix 上 ed 的編輯器，被重寫為 nvi（new vi）。 18 個月後，所有 AT&T 的工具被替換，剩下的只是存留在核心的一些 AT&T 檔案。殘余檔案被剔除後，1991 年 6 月，**Net/2** 誕生了，這是一個全新的作業系統，並且可以自由發布。

Net/2 成為 Intel 80386 構架上兩種移植版的主要組成部分，包括由威廉・喬利茨負責，自由的 386BSD；以及專屬的 BSD/OS，由 Berkeley Software Design（BSDi）負責。386BSD 本身雖然短命，但在不久之後成為了 NetBSD 和 FreeBSD 原始代碼的基礎。

BSDi 很快就與 AT&T 的 Unix 系統實驗室（Unix System Laboratories，USL）附屬公司產生了法律糾紛，後者將擁有 System V 著作權，以及 Unix 商標。 1992 年，USL 正式對 BSDi 提起訴訟，這導致 Net/2 發布被中止，直到其原始碼能夠被鑑定為符合 USL 的著作權。

由於最後判決懸而未決，這樁法律訴訟將 BSD 後裔，特別是自由軟體後裔的開發，延遲了兩年，這導致沒有法律問題的 Linux 核心獲得了極大的支援。Linux 跟 386BSD 的開發幾乎同時起步，其作者林納斯・托瓦茲曾說，當時如果有基於 80386 平台的自由類 Unix 作業系統，他就可能不會創造 Linux。儘管無法預料這給以後的軟體業究竟造成了什麼樣的影響，但有一點可以肯定，Linux 更加豐富了這塊土壤。

### 4.4BSD 及其後裔

這樁訴訟在 1994 年 1 月了結，更多地滿足了柏克萊的利益。柏克萊套件的 18,000 個檔案中，只有 3 個檔案被要求刪除，另有 70 個檔案被要求修改，並顯示 USL 的著作權說明。這項調解另外要求，USL 不得對下面的 4.4BSD 提起訴訟，不管是使用者還是柏克萊代碼的分發者。

1994 年 6 月，**4.4BSD** 以兩種形式發布：可自由再發布的 **4.4BSD-Lite**，不包含 AT&T 原始碼；另有 **4.4BSD-Encumbered**，跟以前的版本一樣，遵照 AT&T 的授權條款。

柏克萊的最終版本是 1995 年的 **4.4BSD-Lite Release 2**，而後 CSRG 解散，在柏克萊的 BSD 開發告一段落。在這之後，幾種基於 4.4BSD 的套件（比如 FreeBSD、OpenBSD 和 NetBSD）得以繼續維護。

另外，由於 BSD 授權條款的寬容，許多其他的作業系統，不管是自由還是專屬，都採用了 BSD 的代碼。例如，Microsoft Windows 在 TCP/IP 的實現上引入了 BSD 代碼；經過重新編譯，在當前 Windows 版本中，還採用了許多 BSD 命令列下的網路工具。

## 技術

BSD 率先包含了支援網際網路協定棧（Stack）、柏克萊通訊端（sockets）的函式庫。通過將通訊端與 Unix 作業系統的檔案描述子相整合，庫使用者通過計算機網路讀寫數據，跟直接在磁盤上操作一樣容易。AT&T 最後也發布了他們的 STREAMS 庫，在軟體棧中引入類似的功能，雖然結構層有所改進，但此時通訊端庫已經廣泛使用。由於 STREAMS 少了對開放通訊端的輪詢功能（類似於柏克萊庫中的 select 調用），使得將軟體移植到這個新的 API 很困難。

時至今日，BSD 仍在學術機構，乃至許多商業或自由產品的高科技實驗中，繼續被用作試驗平台，甚至在嵌入式裝置中，其使用也在增長。由於 BSD 設計出眾，代碼編寫清晰，包括它的文件（特別是參考文件，常被稱為「man pages」），使得這樣的系統，幾乎成為程式員眼中的樂土。

許多公司都使用 BSD 衍生出的代碼，如此便可以支持他們的智慧財產權。許多自由軟體，如 Linux、GNU 工程都遵照 GNU GPL 協定，與之相比，BSD 許可協定要更加靈活。當然，這也導致人們的機器上運行著一些 BSD 軟體，但自己卻並不知情。有興趣的話，可以試著找找符號「University of California, Berkeley」，比如在產品文件內，二進制代碼中的靜態數據段，或者 ROM 中，還有通過一些產品的使用者介面看看「about」（關於）內容。

有意思的是，通過一個二進制相容層（compatibility layer），在 BSD 作業系統上，可以運行相同構架下其他作業系統上的原程式。這比模擬器要快得多，通過這個方法，針對 Linux 的應用程式，也可以在 BSD 上全速運行。所以，BSD 不僅適合作為伺服器，也可作為工作站來使用，眾所周知，現在針對 Linux 的商業或封閉原始碼軟體越來越多。管理員也可以將一些原本只用於商業 Unix 變種的專屬軟體，轉移到 BSD，這樣在保持原有功能的同時，作業系統更趨現代，可繼續使用這些軟體，直到有更好的替代。

結末，當前的 BSD 作業系統變種支援各種通用標準，包括 IEEE、ANSI、ISO 以及 POSIX，同時保持傳統 BSD 的良好風範。

## BSD 家族

當前衍生自 BSD 的類 Unix 作業系統可應用於多種硬體構架。

* BSD/OS（已倒閉）
* FreeBSD
  * Debian GNU/kFreeBSD
  * DragonFly BSD，一個由 FreeBSD 4-STABLE 分支出來的項目
    * FireflyBSD
  * DesktopBSD
  * TrueOS
    * GhostBSD
  * PicoBSD，為在單張 1.44MB 軟碟執行而設計的 FreeBSD 精簡版本
  * TrustedBSD，非作業系統，而是為 FreeBSD 和 Darwin 構件擴展的一個項目
  * ClosedBSD
  * pfSense（頁面存檔備份，存於網際網路檔案館）
  * FreeNAS，一個基於 FreeBSD 的輕量級 NAS 伺服器
  * FreeSBIE 項目，提供 FreeBSD 各個發行版本的 Live CD，類似於基於 Linux 的 Knoppix 項目
  * Frenzy LiveCD，基於 FreeBSD 的 Live CD 項目，主要針對俄語使用者
  * BSDeviant，一個 FreeBSD 的 Live CD 項目，產生可以存在一張迷你 CD-R 上的系統
  * m0n0wall 是一個基於 FreeBSD 的防火牆項目
* NetBSD
  * Debian GNU/NetBSD
  * OpenBSD
    * ekkoBSD（已倒閉）
    * MicroBSD
    * MirOS BSD
* HPBSD（頁面存檔備份，存於網際網路檔案館）（已倒閉）
* RedBSD：嵌入式系統鏡像，使用 BSD 和 Ruby 核心

## 結構

跟 AT&T Unix 一樣，**BSD** 也採用單核心，這意味著核心中的裝置驅動，在核心態下運行，從而作為作業系統的核心部分。 **BSD** 的早期版本被用作組建 Sun 公司的 SunOS，造就了 Unix 工作站的第一波熱潮。

## 注釋

## 參考文獻

## 外部連結

* BSD.org 組織（頁面存檔備份，存於網際網路檔案館）
* DragonFlyBSD 官方網站（頁面存檔備份，存於網際網路檔案館）
* FreeBSD 官方網站（頁面存檔備份，存於網際網路檔案館）
* NetBSD 官方網站（頁面存檔備份，存於網際網路檔案館）
* OpenBSD 官方網站（頁面存檔備份，存於網際網路檔案館）
* BSD 認證小組（頁面存檔備份，存於網際網路檔案館）
* BSD 以及 UNIX 研究年譜（頁面存檔備份，存於網際網路檔案館）
* UNIX 和 BSD 的歷史（圖表描述）（頁面存檔備份，存於網際網路檔案館）
* Google 對 BSD Unix 的搜尋專頁
* 拉脫維亞的第一個 BSD 使用者群組（頁面存檔備份，存於網際網路檔案館）

## 延伸閱讀

* Marshall Kirk McKusick，《Open Sources: Voices from the Open Source RevolutionOpenSources》（頁面存檔備份，存於網際網路檔案館）（影印版）
* 柏克萊 Unix 二十年 —— 從 AT&T 獨有，到可自由發布 《Twenty Years of Berkeley Unix - From AT&T-Owned to Freely Redistributable（頁面存檔備份，存於網際網路檔案館）》（O'Reilly & Associates ，2003 年，ISBN 7-302-06591-8

## 參見

* Bill Joy
* Marshall Kirk McKusick
* Keith Bostic
* 386BSD
* bug.lv
* BSD 授權條款