Why Linux, and why not linux?

這個問題真的是講到爛了. 不過我不打算評論Linux的好壞, 只說說自己的感想.

熟人都知道, 我是FreeBSD的愛好者, 但是大概很少人知道, 我第一個碰的Unix是AIX, 其次是IRIX, 再來是Linux(Slackware), FreeBSD算是晚期才碰的.

剛好最近兩個案子, 客戶都選擇在Linux上放他們的服務, 一個是Fedora, 一個是RedHat, 一邊痛苦於「怎麼這麼麻煩」的同時, 也驚訝於在我荒廢了Linux這些久的日子以來, Linux有著這麼長足的進步.

若單論Server(其實Desktop環境也能談一談, 但是可能要寫到另一篇去)來說, 我的觀點是, 不管選擇什麼OS都是沒問題的, 或者說問題不是OS. 不管是被人詬病的Windows, 或是便宜的x86 Unix, 昂貴的IBM AIX與Sun Solaris, 都各有長處與短處, 真正的差別是管理人員的心態與能力問題! (這或許又要開另外一個thread來談) 一個好的管理員可以把安全性被詬病到人人喊打的Windows Server管的安全穩定, 一個差勁的管理員也能把號稱最安全的OpenBSD管到後門洞開.

對於個人環境, 那只有簡單四個字: 「各安天命」! 只要自己搞的定, 要裝什麼詭異的系統都沒關係. 但是對於企業環境, 選擇一個長治久安的Server OS就是很大的學問. 往往很多技術決策者只看到局部, 例如只考慮硬體成本, 或是只考慮管理難易度, 而做出錯誤的選擇. 但是事實上選擇各種技術環境都要從整體層面來規劃, 可惜的是台灣的網管並不受到重視, 系統分析也不是個被重視的行業.

不過這也不全然是決策者的問題, 畢竟很少人能夠全盤瞭解所有的系統有哪些優缺點, 更不可能讓純粹的技術人員來主導這方面的決策.

首先, 在錢的方面, 要考慮的包含硬體成本(包括Server, Network Device, Storage等等), 軟體成本(OS License, AP License), 與人事成本(網管, 開發人員), 軟體成本因為盜版猖獗所以常常被忽略, 人事成本也會因為不了解人的技能可以處裡的問題而被低估. 例如或許買一套Oracle要花500萬, 但是很少人會願意每年花個兩百萬聘請一位專職的Oracle DBA, 可是在大型的環境, 兩百萬年薪的專業DBA其實一點也不貴. 一個更普遍的例子是, 很多人會選擇使用Windows Server是因為Windows Server「看起來」比較好管, 也比較容易找到「Paper Engineer」來管理, 但是事實上能夠把Windows Server管的好管的安全, Tunning到極致效能的工程師, 不但難找而且價位也不低.

接著是OS部分. OS本身有各種特性, 例如Linux的效能不錯, Filesystem很快, 但是很少人知道Linux在Multithread環境很弱勢; FreeBSD效能也不差, 各種AP很容易標準化配置, 可惜Filesystem有點虛弱; Solaris 很肥大, 通常性的benchmark都是輸家, 可是完整支援Multithread的Kernel讓Solaris非常適合當Database Server. 當然以上說的都是個人看法, 各個OS的支持者可能會想反駁, 不過我要表達的只是, 不能忽略這些特性造成的龐大影響.

所以回到主題, 主題應該改成「Why xxx, and why not xxx?」. 在做出選擇之前, 千萬要廣泛的徵詢各方意見以及收集資料, 最好是能夠有專業的系統分析師或是顧問來提出完整的報告, 才能避免一個錯誤的技術抉擇影響了一家公司的永續發展.

最後聊聊為什麼我以FreeBSD作為我「個人使用」上的首選.

首先是FreeBSD有相當好相當完整的Upgrade procedure, 不管是Kernel部分的svc跟AP上的ports系統, 若能配合Jumpstart Installation Server, 要規格化非常輕鬆. 其次是FreeBSD在各種x86 hardware上的支援度不比Linux差, 新舊硬體都可以配合無間. 再加上效能超高的Network Subsystem, 十分適合做為網路服務的OS. 最後還有一個很個人情緒的因素, 那就是BSDL與GPL的問題, 我討厭GPL那種「偽自由」的版權宣告, 雖然GPL的限制是為了提供更多人自由使用的權力, 抑制商業的非法利益, 但是我還是喜歡BSDL那種真正的自由, 讓市場機制說話的精神.

有機會再聊聊Desktop環境, 以及開發環境, 程式語言, 資料庫等等的議題.

  • Post a comment

    Threaded commenting powered by interconnect/it code.