乍看之下,採用開源軟體似乎是個不錯的辦法,但歸根究底,開源軟體有幾個特性可能會使其變得「邪惡」...
開發軟體——尤其是嵌入式軟體,是人類最複雜且最耗成本的活動之一。因此,許多團隊希望盡量藉由重覆使用軟體(包括免費的開源軟體)來降低複雜度和成本。根據《2019年嵌入式市場調查》(2019 Embedded Market Survey)發現,24%的受訪者重覆使用了開放來源(open-source)程式碼。乍看之下,採用開源軟體似乎是個不錯的辦法,但歸根究底,開源軟體有幾個特性可能會使其變得「邪惡」。
首先,每個開源程式碼庫都附帶一項軟體授權。軟體授權要求開發人員們如何使用以及什麼情況下不能使用該軟體。如今,許多開源專案都使用MIT授權,讓該軟體幾乎已能免費用於任何專案,而且完全不附帶任何條件。遺憾的是,並不是所有的程式碼庫都能如此。儘管有些軟體授權可以不受限制地用於個人專案。然而,如果將該程式碼作為商業用途,任何更改或有時甚至是新的相關程式碼也必須開源。如果開發人員或經理人員等稍微不留意,很可能就必須合法地開放其智財權(IP)。是不是很邪惡?
其次,「免費」的軟體難道不違背資本主義存在的核心嗎?我們都推崇發明家、企業家以及成長為業界領導廠商和巨擘的公司。但如果說有想為軟體付費的想法可能會讓工程師笑掉大牙。為什麼我們拒絕為商業軟體付費,反而依賴於開源軟體?我在許多公司中看到的情形是,推廣使用免費的開源軟體並不是因為它的品質更好、上市時間更短或客戶體驗更佳。據我所見,最大的推動力量似乎是企業對利潤最大化的貪婪。當公司不願意支付、捐贈或作出貢獻時,為什麼卻指望每個人都為其軟體付出高昂的代價?這不是很邪惡嗎?
最後,開源軟體通常功能強大,但不一定十分穩健可靠或經過全面測試,甚至不一定適合每一位開發人員想要的使用方式。例如,業界最喜歡的開源工具庫是FatFS。FatFS提供了一個由許多微控制器(MCU)供應商整合的易用檔案系統,因而可說是讓開發人員擁有一個開箱即用的檔案系統。然而,選擇FatFS卻讓我覺得痛苦,因為它雖然在功能上非常完善也很有用。但是,如果您開始深入了解,就會發現許多潛在的品質問題。
圖 1:基本 FatFS程式碼分佈函數的McCabe循環複雜度範圍計數。
例如,如果您分析FatFS的函數複雜度(Cyclomatic Complexity),您會發現函數的複雜度分佈如圖1所示。整體而言,大多數函數都比較簡單,如果進行任何更改後出現bug 或注入bug的可能性較低。但是,它有17個函數的複雜度大於10,其中有5個函數的複雜度甚至大於20!你認為那些是什麼功能?開發人員最常使用的那些如表1所示。是不是很邪惡?
表1:循環複雜度為20或更高的FatFS函數。
那麼,開源軟體真的邪惡嗎?我可能會爭辯說不;但是,我想提醒想要衝往GitHub以及儘量利用每一個已知開源軟體的團隊,請先暫停腳步想一想再小心謹慎地繼續前進。因為你永遠不知道最終會得到什麼,你或你的客戶最終也可能會變得更糟。至少請預先安排時間來分析您的開源軟體並對其進行測試,以確保它能滿足您的需求。只是因為有人免費提供給您並不表示它能夠滿足您的要求。
您認為呢?開源軟體邪惡嗎?
編譯:Susan Hong
(參考原文:Is open-source software evil?,by Jacob Beningo)
加入LINE@,最新消息一手掌握!