第一個理由:FreeBSD 是一個免費的開源的操作系統(tǒng)
Linux 也是一個免費的開源的操作系統(tǒng)。不過 Linux 是基于 GNU General Public License 的,而 FreeBSD 是基于 BSD License 的。BSD License 比 GNU General Public License 更加寬松。
FreeBSD 的系統(tǒng)源碼可以通過各種方式免費的得到。系統(tǒng)源碼包括內(nèi)核源代碼和基本系統(tǒng)源 代碼,如果你在安裝系統(tǒng)的時候選擇了安裝源碼,那么它就在 /usr/src 目錄底下。如果你經(jīng)常更新系統(tǒng)源代碼,那么 經(jīng)??纯?/usr/src/UPDATING 是個很好的習慣。同理, 如果安裝了 Ports 系統(tǒng),經(jīng)常看看 /usr/ports/UPDATING 可以了解很多有用的信息。
源代碼的作用有很多。如果你是一個系統(tǒng)軟件或者應用軟件開發(fā)者,你可以改進源代碼為 FreeBSD 作出貢獻,或者你參考系統(tǒng)源代碼寫出很棒的應用軟件,或者你通過閱讀源代碼掌 握了很多知識、取得了經(jīng)驗。如果你是一個普通用戶,可以通過從源代碼配置編譯系統(tǒng)獲得 更高的系統(tǒng)性能??傊?,開放的源代碼不僅給用戶提供了很多好處,也為 FreeBSD 系統(tǒng)的 開發(fā)者提供了一個可能性,就是不同的人都可以通過源碼找出系統(tǒng)中可以改進的地方并及時 反饋給系統(tǒng)開發(fā)者。
第二個理由:FreeBSD 是一個完整的系統(tǒng)
Linux 這個詞指的是內(nèi)核。當我們提到操作系統(tǒng)的時候,嚴格的用詞應該是 GNU/Linux 或 者某個發(fā)行版的名字,比如:SUSE Linux,Debian GNU/Linux,CentOS, Fedora, Ubuntu Linux,Mandriva Linux 等。這些發(fā)行版使用的都是相同的 Linux 內(nèi)核,可能只是內(nèi)核的 版本有差異而已。各個發(fā)行版的系統(tǒng)結構可能都是不同的:比如系統(tǒng)啟動的腳本,文件系統(tǒng) 的布局,系統(tǒng)和軟件升級的方式方法,默認桌面環(huán)境等。
而 FreeBSD 這個詞指的是一個完整的系統(tǒng),包括內(nèi)核,系統(tǒng)環(huán)境,應用軟件,各種文檔等。 不嚴格地說,Ubuntu 和 RedHat 之間的關系就有點像 FreeBSD 和 NetBSD,OpenBSD。但是,后面這些 BSD 系統(tǒng)都是 從 4.4BSD 發(fā)展來 的,而 4.4BSD 本身就是一個完整的操作系統(tǒng),不是一個孤單的內(nèi)核。
(FreeBSD被認為是自由操作系統(tǒng)中的不知名的巨人。它不是Unix,但如Unix一樣運行,兼容POSIX。作為一個操作系統(tǒng),F(xiàn)reeBSD被認為相當穩(wěn)建可靠。)
FreeBSD 有一個 Core Team 來管理這個項目。這些 Core Team 成員是從為數(shù)眾多的 Committer 中選舉出來。這些 Committer 有權力對 FreeBSD 的內(nèi)核代碼進行維護,改進,升級等。 Core Team 和 Committer 對 FreeBSD 的內(nèi)核代碼質量有嚴格的把關。FreeBSD 的人經(jīng)常說: 有問題的代碼不能在這里生存。而 Linux 的內(nèi)核掌握在 Linus Torvalds 手 里。所有有能力的人都可以對 Linux 內(nèi)核作貢獻。也就是 Eric S. Raymond 所說的 市集開發(fā)模式。 從管理模式來說,Linux 內(nèi)核的代碼質量相對要低一些。因此,如果是求穩(wěn)定的話, FreeBSD 肯定是不二的選擇。
FreeBSD 的應用軟件要通過 Ports 系 統(tǒng) 來安裝管理。所有的軟件都經(jīng)過特殊的設置來配合 FreeBSD 系統(tǒng)。這 些特殊的配置包括編譯的參數(shù),安裝的路徑,文檔的存放等。這樣可以方便的管理,安裝, 卸載應用軟件,而不需要太多人工的參與。而 Linux 系統(tǒng)的應用軟件管理則比較混亂,各 種發(fā)行版都不相同。不過越來越多的 Linux 發(fā)行版都在向 Ports 系統(tǒng)學習。典型的比如 Debian/GNU Linux 的 APT。FreeBSD 的 Ports 系統(tǒng)更新是相當快的。隨著系統(tǒng)的每次升級,Ports 系統(tǒng)都會有活躍的更新,以便使 各種應用軟件跟上系統(tǒng)的升級。
第三個理由:FreeBSD 有清晰的目錄結構
Linux 下目錄結構有一個為人詬病的大缺點,就是文件存放的隨意性。各種發(fā)行版可能都有 不同的選擇。比如系統(tǒng)庫,就有可能在 /usr/lib,或者 /lib 里面。比如 X (XFree86 或者 Xorg) 應用軟件有可能放到 /usr/lib 里面。當一個 Linux 用戶想要從源碼編譯安裝 軟件的時候,往往沒有明確的標準來確定自己編譯的軟件到底應該安裝在什么地方。他有可 能會作很多 symbolic link 把文件鏈接來鏈接去。系統(tǒng)里面經(jīng)常留下很多失效的鏈接。而 FreeBSD 的目錄結構是相當清晰的,我們可以看看一些目錄作用的解釋:
/bin/ user utilities fundamental to both single-user and multi-user environments
/boot/ programs and configuration files used during operating system bootstrap
defaults/ default bootstrapping configuration files; see loader.conf(5)
kernel/ pure kernel executable (the operating system loaded into memory
at boot time).
modules/ third-party loadable kernel modules; see kldstat(8)
/etc/ system configuration files and scripts
defaults/ default system configuration files; see rc(8)
mail/ Sendmail control files
mtree/ mtree configuration files; see mtree(8)
namedb/ named configuration files; see named(8)
pam.d/ configuration files for the Pluggable Authentication
Modules (PAM) library; see pam(8)
periodic/ scripts that are run daily, weekly, and monthly,
via cron(8); see periodic(8)
ppp/ ppp configuration files; see ppp(8)
ssl/ OpenSSL configuration files
/usr/ contains the majority of user utilities and applications
compat/ files needed to support binary compatibility with
other operating systems, such as Linux (created by
sysinstall(8))
include/ standard C include files
lib/ shared and archive ar(1)-type libraries
aout/ a.out archive libraries
compat/ shared libraries for compatibility
aout/ a.out backward compatibility
libraries
local/ local executables, libraries, etc. Also used as the
default destination for the FreeBSD ports framework.
以上是 FreeBSD 系統(tǒng)下命令 # man hier 的輸出的節(jié)選。
基本上每個目錄都有特定的作用,什么東西放到哪里都有明確的規(guī)定。系統(tǒng)管理員在管理系 統(tǒng)的時候將從清晰的目錄結構中得到很多益處。BSD 學院風格的嚴謹作風在這里體現(xiàn)得非常明顯!
第四個理由:FreeBSD 可以方便的安裝升級
Linux 各種發(fā)行版的用戶肯定都有在網(wǎng)上到處尋找 rpm 的經(jīng)歷。而且很多用戶都不敢貿(mào)然 升級自己的內(nèi)核。如果要升級整個基本系統(tǒng),對于很多 Linux 用戶來說就是一個浩大而繁 雜的工程了。對于 FreeBSD 來說,升級只是一件很簡單的事情。
從升級基本系統(tǒng)來說,F(xiàn)reeBSD 可以使用各種方式來升級。比如 Anonymous CVS、CVSup 等。或者也可以二 進制升級。比如,如果我要升級我的系統(tǒng),可能我只需要如下的幾個命令就可以輕松的完成:
#cvsup stable-supfile
#cd /usr/src
#make buildworld
#make buildkernel
#make installkernel
#reboot
... ...
#mergemaster -p
#cd /usr/src
#make installworld
#mergemaster
#reboot
這些命令做了四件事情:第一是更新你的系統(tǒng)源碼、第二是重新編譯系統(tǒng)源碼,第三是編譯 安裝新內(nèi)核、第四是更新你的系統(tǒng)配置文件。這篇 The Cutting Edge 詳細的解說了怎么更新你的系統(tǒng)。當然,我省略了內(nèi)核的配置以及 mergemaster 這個命令的使用方法等??赡茱@得有點復 雜吧,不過與 Linux 相比,我覺得還是很簡單容易上手的。
要安裝升級應用軟件,在 FreeBSD 下就更加簡單了。如果你在安裝系統(tǒng)的時候選擇了安裝 Ports 系統(tǒng),那么你 只需要到 Ports 下相應的目錄輸入幾個命令就可以輕松完成。比如,你要安裝 Nvidia 的官方顯卡驅動,那么你只 要:
#cd /usr/ports/x11/nvidia-driver
#make install clean
就可以自動完成驅動的安裝和配置。當然,還有更加快捷的安裝方法,使用命令 pkg_add -r nvidia-driver 可以從網(wǎng)上自動下載已經(jīng)編 譯好的驅動然后自動安裝。FreeBSD 的官方文檔 Using the Packages System 詳細解說了 packages 的使用方法。如果是升級已經(jīng)安裝的驅動程序,則可以:
#cd /usr/ports/x11/nvidia-driver
#make deinstall reinstall clean
或者你可以使用 portupgrade 來升級已經(jīng)安裝的程序。
第五個理由:FreeBSD 的文檔十分齊全
到目前為止,Linux 的文檔在很多方面還比不上 FreeBSD 的文檔。Linux 因為發(fā)行版的原因, 各種文檔都紛繁復雜,難于尋找。而 FreeBSD 的文檔幾乎涵蓋了系統(tǒng)的各個方面。對于 FreeBSD 的初學者來說,仔細閱讀文檔應該是必修的功課。國內(nèi)的 FreeBSD 用戶甚至翻譯 了一個中文版本,這對 閱讀英文有困難的 FreeBSD 中國用戶來說是一個福音。
FreeBSD 的文檔不僅包含最重要的 Handbook 和 FAQ,還有 專門給軟件開發(fā)人員的 Developer's Handbook 和 Porter's Handbook。而且這些文檔還只是所有 FreeBSD 文檔的一個部分。Unix 系統(tǒng)的傳 統(tǒng) man 文檔, GNU 的 Texinfo 文檔等在 FreeBSD 中都很完整而詳細。另外,F(xiàn)reeBSD 還有很多系統(tǒng)配置的例子 (一般這些例子都在 /usr/share/examples 和 /usr/local/share/examples 目錄下)。這些例子對新手 系統(tǒng)管理員和普通用戶是很好的幫助。
第六個理由:FreeBSD 很穩(wěn)定而且性能優(yōu)異
Linux 很穩(wěn)定而且性能也很優(yōu)異。在性能方面甚至要超過 FreeBSD ,比如文件系統(tǒng)的性能。 在 FreeBSD 的文件系統(tǒng)默認使用 softupdates 之前, FreeBSD 的磁盤性能一直是低于 Linux 的。雖然如此,Linux 的磁盤高性能是以犧牲系統(tǒng) 的穩(wěn)定為代價的。在沒有使用日志文件系統(tǒng) 之前,Linux 的文件系統(tǒng)使用會使用 async 模式將數(shù)據(jù)寫入磁盤。而 FreeBSD 默認是使用 sync 模 式將數(shù)據(jù)寫入磁盤。什么是 async 模式和 sync 模式?簡單地講, async 模式下系統(tǒng)往往把不太重要的數(shù)據(jù)寫入內(nèi)存或者 磁盤緩沖,等一段時間之后再把數(shù)據(jù)真正的寫入磁盤。這樣做的好處就是磁盤的讀寫效率比 較高,但是不安全。萬一在數(shù)據(jù)真正寫入磁盤之前系統(tǒng)突然掉電,那么那些你以為已經(jīng)真正 寫入磁盤的數(shù)據(jù)就會丟失。sync 模式是把所有應該寫入 磁盤的數(shù)據(jù)都立即寫入磁盤,這樣的好處是數(shù)據(jù)比較安全,但是因為大量的讀寫操作導致磁 盤性能下降。FreeBSD 在版本 4 之前一直使用 sync 模 式來寫入數(shù)據(jù),安全是比較安全了,但是在文件系統(tǒng)性能方面就比不上 Linux 了。
Linux 開始使用日志文件系統(tǒng)之后,文件系統(tǒng)的穩(wěn)定和安全通過日志系統(tǒng)得到了彌補。而 FreeBSD 沒有采用日志文件系統(tǒng),而是走了另一條道路,也就是 softupdates。softupdates 的原理就是強制 metadata 更新時的依賴檢查。所謂 metadata 就是,比如磁盤的 i-node 和 v-node 之類的數(shù)據(jù)。這些數(shù)據(jù)描述了文件數(shù)據(jù)在磁盤上存儲狀態(tài),不是一般的數(shù)據(jù),所以叫 元數(shù)據(jù)。有了 softupdates 之后,F(xiàn)reeBSD 的磁盤性能有了很大的提高,而且在穩(wěn)定性方面更加出色。FreeBSD 從版本 5 開始支持后臺 fsck,就是后臺文件系統(tǒng)檢測。后臺文件系統(tǒng) 檢測可以讓你在系統(tǒng)崩潰后重新開機時迅速恢復服務,而不需要像其他不支持這個特性的系 統(tǒng)那樣,要等待 fsck 執(zhí)行完畢之后才能進入到系統(tǒng)。 對于有海量硬盤的系統(tǒng),這是一個非常吸引人的特性。
另外,在網(wǎng)絡方面。FreeBSD 的性能也是相當優(yōu)異的。在很重的負載之下,F(xiàn)reeBSD 仍然可 以穩(wěn)定的運行。這也是很多網(wǎng)絡服務器采用 FreeBSD 的原因之一。