我心目中理想的开源软件
在工作中使用過一些開源軟件,有過一些美好的體驗,也有一些不好的體驗。
對于那些純粹開源,不摻雜任何商業考量的貢獻者,我感激他們的辛苦工作,但仍然希望他們的作品可以更好。
對那些借助開源社區力量,著眼商業的各種組織,我仍然感激他們的辛苦工作,也希望他們的作品可以更好。
我想澄清一件事情,那就是:
并不是因為一個軟件開源,并且沒有直接從我的手里獲得收益,我就不能指責它的缺點和不足:
也許存在一些特別的例子,某些個人和組織,故意把開源軟件的文檔寫的晦澀難懂,以此來逼迫客戶購買技術支持服務。
當節約成本成為強大的壓力,客戶、開發組織需要開發者、使用者使用某些流行開的開源軟件的時候,
開源軟件的不足,需要各方加以重視,如此才能促進其發展。否則,就變成了以勢壓人了。
一個軟件沒有流行開時,它有再多缺點都無所謂。但是流行開來后,如果有人跟我說:
人家是開源的、免費的,你怎么不知感恩,反而挑三揀四呢。我是不贊同的。
誰知道這些開源軟件背后,站著哪些力量呢?
開源軟件開發者也要生存,開源軟件軟件背后的商業組織,也需要生存,
但是,除了用低劣文檔、復雜配置逼迫用戶就范之外,就真的沒有其他生存之道了嗎?
世上軟件千千萬萬,為何使用者要選擇這個而不是那個,都有各種理由,
我認為,長期為普通開發者所不喜的,其前景是黯淡的。
想想也很容易理解:你如果總給別人制造麻煩,還能指望別人感激你,喜歡你嗎?
當然,開源軟件的使用決定,有時候是客戶做出,有時候是公司高層作出。
很多時候作出決定的人和實際使用的人是不同的兩個群體。
但是即便如此,如果一個軟件長期使用不便,配置復雜,甚至常常出錯。如果出現更好的替代者,長期看結局也是可以預知的。
開源軟件也應當與時俱進,在我心目中,它應當是這樣的:
第一:Contributor Open
一套開源軟件,可以由少數核心開發者控制,但不應當被他們所惡意把持,不過這估計很難。
因為,大多數人是自負的,不愿意放棄手中的權利。
所以,可以預計,在不久的將來,git hub 那種沒有核心控制的開源方式將成為主流。
第二:Design OPen
好的開源軟件,不僅僅應當是代碼開放;它為何這樣設計代碼,它的設計意圖如何,應當是有明確的說明。
有的時候,因為后來者對之前的各項參數的意義不熟悉,導致改亂了程序結構,破壞了原有參數的含義。pgpool是其中的典型。
第三:Test Open
無論哪種軟件,不管它是否開源,都受到到工程規律的支配。
如果一個小的組件沒有經過充分測試,那么沒有人可以保證在更大范圍內它會引發意想不到的問題。
打上開源標簽,也不能保證它就是對的,如果出現錯誤,即便是很快出來補丁,也很可能改正錯誤的代碼,由于沒有充分的測試,會再次引入更多的錯誤。最近PostgreSQL的安全補丁事件就是這樣。
所以說一套可以信賴的軟件,理想情況下,應當附帶一整套完整的自動測試套件和測試用例文檔,
當然,還不僅僅是測試,廣義上講,在代碼級別進行良好的檢查,對開源軟件一樣十分必要。
我在這里再特別提出一點:對于內存泄漏方面的檢測,是十分必要的。
應當有相關的測試套件,有測試文檔專門對本軟件的內存泄漏檢測方案加以說明。
例如那種很多國外大型軟件中,西方老程序員們很喜歡用的 strdup,
如果沒有極為特殊的理由,是否應當用代碼檢查工具直接拒之門外?
第四:Architecture Open
現代軟件的體系越來越復雜,就像軟件設計應當遵循低耦合的原則一樣,軟件的各個組合部分應當在體系上易于分割,易于替換。讓好的功能組件,不斷脫穎而出,這樣才能保持一個開源軟件內部良性競爭,保持其旺盛的生命力。MySQL配備各種引擎算是一個例子。
第五:Documentation Open
一個軟件,如果想走上與使用者或者開發者互動的良性循環,文檔的質量是必須加以考慮的。一個開源軟件如果對待文檔如同對待代碼一樣上心,允許大家來共同有序地維護文檔,將會使減少用戶的障礙,降低門檻,使用者更多,這個軟件也將更有分量。
最后回到開源軟件的賺錢模式上來:
恐怕有人會問,如果開源軟件本身十分優秀出色,用戶用起來很容易,它怎么賺錢?
我的看法是:
如果一套軟件非常重要,比如7x24小時需要維護。
無論它使用起來多么方便,恐怕公司也要找服務商來負責支持吧。
現在BSD協議方式,允許進行基于開源軟件的二次開發。
用社區賺取眼球擴大簽字用戶基礎,用高級商業版來賺錢,有是可行之道。Redhat的做法與此類似吧。
開源軟件 不等于 一定是好軟件,它仍然必須遵守軟件工程的規律。所以它需要更加開放以獲得更好的產品質量和用戶體驗。
轉載于:https://www.cnblogs.com/gaojian/archive/2013/05/22/3092145.html
總結
以上是生活随笔為你收集整理的我心目中理想的开源软件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 尝试Razor
- 下一篇: C# 图片缩放放大剪切代码