選擇商業庫而不是開源庫的 8 個理由

oschina發表於2013-05-02

  本文是Third Party Products and Tools 章節,本文旨在分享並不是用來商業推廣或者廣告,歡迎指出任何出現在本文中任何形式的廣告和垃圾資訊。

  開源軟體(備註:免費獲得許可和原始碼)日益流行,很明顯的原因是——為事先很難投資現金到軟體開發的最終軟體使用者降低了成本。使得在有限的IT預算中,程式設計師選擇使用了質量不明的程式碼。不管怎樣,在使用開源庫和程式碼片段的時候似乎是0成本,在整個軟體生命週期中,你可能消耗更多的資源。而商業軟體可以提供給你更多意想不到的。

  我將專注於專業化的商業開發解決方案:在你的程式碼段上貼上價格標籤不會神奇地把程式碼轉變成產業級商業產品。商業庫必須進行詳盡的評估來說明這個庫專業在哪裡。不是每個要收費的庫都是好的,這個很明顯。但是,如果是商業庫,獲得開源庫中缺少的東西的機會就會很大。

  讓我們審視下商業軟體(和給軟體開發人員的特殊的模組和類庫)到底能夠提供什麼,然後再討論到底選擇商業庫還是開源庫。

  文件和例項

  隨之現代APIs文件越來越複雜並且例項變得更容易和更快的程式碼重用。你僅僅需要從例項中複製一段程式碼就可以正常執行。如果你需要指導,你可以檢視文件找出下一段如何執行或者函式為什麼會呼叫失敗。

  牛X的開源軟體卻聲稱原始碼是最好的文件,只有在詳細註釋和高質量的程式碼情況下(正確的格式和規範的變數 函式名),原始碼才可以作為文件使用。在大部分情況下,閱讀程式碼不是一件很有趣的事情。

  研究表明,現存的原始碼有時有助於診斷的各種各樣的問題,但沒有多大幫助使用該軟體因為你不知道要尋找什麼。

  同樣文件應該由技術作家來編寫而不是程式猿。——程式猿不喜歡而且不知道如何編寫合適的文件。讓程式猿寫程式技術作家編寫文件,個安天命。

  (譯者注:擦,我實在無法忍受這邊文章對開源軟體的吐槽,本文以下內容我不翻譯了,誰愛翻譯誰翻譯)

  精雕細琢的APIs

  任何作為複雜工程的軟體都需要在真正實施前做好設計和開發。使用scratch編寫1000行的程式碼,與事先設計好再編寫1000行程式碼是完全不一樣的。合適的設計可以使1000行程式碼變成200行,而壞的設計可能導致需要多編寫10K行的程式碼。

  對於開源庫,很多都是逐步被開發出來的,例如,一些小的功能,然後不斷在上面新增新功能,就像一個在新年樹上的新增新的玩具。最後,這個新年樹的結構會變得複雜而且脆弱。

  相反,商業APIs在很多情況下,設計時綜合考慮了使用的方便性和擴充套件性。通常它們會有多個層次的APIs,對於底層的操作(你可以得到最大程度的控制)還有對高層次的任務(你可以最快程度的完成工作)。

  最後,開源庫主要是通過程式設計師開發的,而專業的商業解決方案是通常通過軟體架構師和分析師設計的,並由程式設計師編碼。

  獨一無二的特性

  開源開發者的目標是釋出一些功能,並且快速的完成任務,通常在這個應用中只包含一些主要的流行的功能。

  而商業庫的開發者,必須超越在大眾使用者之前,實施一些擴充的功能。

  擴充套件性方面的問題(例如,獲取你需要的功能)在開源軟體很難獲得,除非你自己去開發這些特性,但是,通常這不是一個好的選擇,尤其面對一些我們不熟悉的領域。而對於商業軟體,你可以和供應商協商,並基於你的需求擴充套件應用,新增到你的軟體版本中。

  商業軟體供應商的動力來自於他們想讓他們的公司運營下去,這是最有效的推動力。而對於開源開發者,即使你願意去一次性支付他們,也未必讓他有足夠的動力去擴充套件他們的產品(可能在很久之前已放棄更新,對於開源世界,這是很平常的事情)。

  由元件供應商提供的獨一無二的特性,其中一個得益是,這個特性可以讓你建立一個USP(獨特的賣點)的終端軟體。並且,當你在做內部開發時,這些特性可以讓你取悅你的上司,並展現你的對於幫助你的同事的積極態度,還有讓商業流程更加有效的工作。換而言之,這些特性體現了你對你的客戶的關注。

  可靠性

  對於每一個行業中,最重要的一個資產是得到客戶的信任。你不可能長期維持你的商業,而一直得不到使用者的信任。而在商業軟體,與客戶的關係是長期的,所以信任是必須的。

  當一個缺陷出現後,對於商業供應商會很熱衷於解決它,否者信任就會流失。並且使用者需要得到保證,每個缺陷都要在最短的時間內得到解決。

  對於開源庫,即使你提交了一個缺陷(當開發者向你提供了這個錯誤報告),你通常不會覺得到這個缺陷會很快得到解決。相反,開源開發者收費去修復錯誤的成本往往超過同類商業軟體的商業許可費用。

  現在,你碰到過多少回,一個開源產品沒有再被開發(或者已經過時了),因為開源軟體的作者已經對它失去興趣?事實上,對於開源庫,這是很常見的。對於商業軟體,有一個合理的組織去管理,不單單屬於一個人,而是有很多相關人員和管理人員來支援。金錢是其中一個重要的支柱,但並非是唯一一個。義務,責任,合法的需求同樣是有效的動機。所以,你可以安心,這個產品不會過時或者被拋棄。並且,你可以基於這個負責人的商業軟體供應商,來開發你的專案。

  維護

  IT世界就是一個不同使用者,伺服器,商業服務,客戶端系統,手機服務之間的連線或者橋樑。對於擁有這麼多的參與者,修改和更新會變得很頻繁,並且你必須保證你的應用能與時俱進。否則,你的應用出現相容問題,得不到使用者的滿意,並且被使用者所抱怨,最終導致生意的丟失。

  當你的軟體中使用第三方的元件,他們也必須得到同樣的適應能力。對於新的功能,採用第三方元件和庫通常比較容易,因為他們的作者也有這樣的動機。

  同樣,軟體的維護和相容性的更新也是一個很好的途徑,告訴你的使用者,你的軟體是可信賴的。那麼,這裡會有一個很大的可能行,你的供應商會不斷的更新軟體,即使你沒有告訴他們這麼去做。

  專業知識

  對於你知道如何解決的問題,你通常不會去採用第三方的程式碼,而是自己來編寫。這對於通常的程式碼,是合理的,但是你在做底層的程式設計或者神經網路程式設計,OCR或者密碼相關程式設計的時候,需要承受相應的風險。

  任何一個人都不能是各方面的專家,所以我們才有這麼多專注於不同領域的教授和專家。

  商業供應商,尤其那些提供特殊的軟體和元件的,僱傭那些頂尖的技術專家,提供高質量的軟體。供應商擁有該領域的專家(例如OCR或者網路),軟體設計的專家,程式設計的專家。這些專家們的合作,讓你得到的是值得信賴的產品。但對於開源軟體,很少有這樣的例子。擁有某個領域的專業知識的專家通常只會為人民幣服務,在業餘時間陪陪家人,還有他的愛好。很難會到找一個軟體架構專家(雖然不是完全不可能),同時也是一個程式設計專家。

  所以,對於商業軟體,你通常能得到一個高質量的軟體(不單單是高質量的程式設計,而且是該領域的高效能),相對於開源的軟體。

  協助

  開發開源軟體的初衷,往往是好奇心,或者宣傳的慾望,還有其他類似的情感因素。對於短期來說,這個非常好,對於軟體的雛形的開發已經足夠了,但是對於長期的維護和尤其幫住你去使用軟體方面,卻遠遠不夠。換而言之,如果你需要幫助,你需要到處去搜尋它相關的資料,或者支付軟體的開發者。

  對於缺陷的修復的成本往往超出同類商業軟體的許可費用。這個原因很簡單 – 商業軟體供應商是基於風險模型,對於所有的開發和支援開銷都會伴隨許可的銷售,不管你是否需要使用他們的支援(通常提供更多的技術支援,但總體的方案就如許可上面所說的)。對於開源軟體,補償開發和支援的唯一資金來源是,想方設法的讓你去支付他們。

  原因8

  每個人都有自己的理由,我把我的放到個人部落格中

  缺陷

  有很多開源專案都提供卓越的品質。是的,的確存在很多開源卻提供極大價值的軟體產品(主要是終端使用者和伺服器軟體,很少是庫)。但如果你仔細觀察的話,它們大部分是(a)只是由大公司或機構贊助的商業軟體;(b)僅對非商業用途免費但誰會讀那些使用者許可協議呢;(c)並不像起初感覺的那麼優秀,伴隨著內部管理問題、程式碼臃腫已經設計和實現缺陷從而必須時不時重寫。

  開源是免費的且沒任何價格可以挑戰它。是的,在滑鼠陷阱裡的乳酪也是免費的。但不像滑鼠陷阱,免費軟體是一個涉及每個滑鼠的陷阱。參與維護、bug修復以及如果移植到其他解決方案後開源產品突然不能工作時都需要成本。而這些成本可能大大超過商業解決方案的初始成本,特別是試圖依賴免費方案的業務流程。即便當你繼續使用開源解決方案時,援助要麼需要付費要麼希望程式設計社群裡有人會無償幫助你(絕對沒有保證)。

  開源專案提供原始碼。是的,大多數商用庫也提供。商業終端使用者軟體很少提供原始碼,這是事實,但正如上面提到的,很少有人使用這些程式碼(除滿足好奇心外)。

  開源專案有文件記錄。是的,伴隨著令人困惑的註釋以及不可讀和格式混亂的程式碼。相對於專業的書面文件來說,維基和公開維護的知識庫也是一個薄弱的替代品。

  我可以在程式設計社群尋求樣板。你可以發問但並不能保證有答案,也不能保證所提供的答案的質量。事實上,一個在特定情況下可以工作的東西,在真實環境中不一定能保證方案的可靠性。

  開源專案跟商業軟體有同樣的特性。是的,可能起初它們的特性一樣,雖然這需要證明:商業庫必須脫穎而出而提供特性是一個很好的方法。在任何情況下可擴充套件性的開源軟體是較低的,因為缺少實現可擴充套件性的主動力以及糟糕的設計。

  * 開源軟體有很大的API嗯,巫師有時可以提供良好的“醫療服務”。但還有一個更好的主意——“去醫院”。

  * 我可以自己修改開源了產品嗯,你可以做同樣的商業庫的原始碼。

  *  開源還可以提供獨特的功能。嗯,它可以,但只在一段時間內。簡單和廉價的獨特功能成為普遍功能相當快。真正獨特的功能,需要資源來實現。

  * 由於有更多讀者,所以可以更好地測試開放原始碼 “這是更好地測試”並不意味著更好的質量。這意味著只是在bug跟蹤系統有更多的bug。並且bug修復一般較慢,開放原始碼與商業軟體相比,後者有更好機會和更高質量。

  * 開源庫對於我來說一直都用的挺好的。的確是,在封閉的環境和麵對簡單任務的時候,只測試過一次的程式碼可以正常工作幾年。但是,如果這些程式碼與其他軟體和網路互動時,外部程式的修改就會讓你的系統停止服務,而當這個情況發生時,你只有很短的時間來應對。

  * 有時候一些簡單的任務,不需要專家,這個時候開源軟體對我來說是非常好的選擇。匹配是一件繁瑣的事情。不是嗎?匹配的元件是幾十年前,很多來自化學,生物學和物理學的科學家發明的。你現在覺得繁瑣的東西是以前的科學家經過多年研究的成果。在軟體領域,沒有繁瑣的任務和繁瑣的解決方案。

  * 我可以得到來自社群的幫助,我不需要付服務費。並且,你還可以向社群獲取保健方面的支援,法律援助,汽車維修等等。但是,這個途徑並不高效,並且就像玩火一樣 – 一個不完整的建議,可能會給你帶來很大的麻煩。在現代的生活中,專業的服務是必須的。

  * 你有偏見。每個人都是。

  * 你不喜歡開源軟體。我個人也使用開源軟體,並且在過去幾年,我的公司在某些產品上獲取到開源的許可(MsgConnect, VoxPopuli等等)。我看到了來自開源軟體的大麻煩。

  * 開源軟體會統治世界。這就是我所擔憂的,因為,就如上面所述,開源缺乏很多特性(尤其是質量相關的),這樣會傷害我們。

  * 你不瞭解開源軟體。在這個行業中(開發面向公眾的可重用元件和庫)工作超過15年,我學習到所有可以替代的軟體和商業模型,並且我嘗試跟蹤在這個領域的修改和改進(包括授權和商業模型)。

  * Linux和其他開源軟體已經改變了世界每個角落,除了個人電腦桌面,並且桌面將會是下一個目標。我們已經聽說這個說法很多年了。Windows伺服器變得越來越受歡迎,Azure是一個優秀的PasS, 很多人從OpenOffice/LibreOffice回到Microsoft Office。實際上,Linux在智慧手機和類似裝置上是個佼佼者,但是微軟的錯誤導致丟失這麼好的勢頭。我本身並不是微軟的傳道者,但是我並不希望Linux壟斷這個市場。

  * 我與商業軟體供應商之間有些傷心的經歷,而用開源庫,卻從來沒有任何問題。正如我所提到的,明碼標價不會神奇地把程式設計師變成一個可靠的商人。但使用商業軟體,對於你花的錢,得到與之相符的價值和服務的機會要大得多。而對於你耗費在使用開源庫的時間,很可能 你 什麼也得不到。

  *商業軟體供應商不能被信任。這是一個 觀念和信心 的 問題 。如果你認為你不能相信任何人,那麼,我們也沒什麼辦法讓你相信。

  *我怎樣才能確保供應商可以信任?這是一個很好的問題,說明你從完全否定,轉變到有點好奇心了。 因為對於任何產品( 順便提一下 , 不一定是商業的),制定投資決策時,都有許多因素要考慮,所以 我打算 單獨 釋出一篇文章來解釋 問題 。

  英文原文:8 reasons to choose commercial library instead of open-source one

相關文章