久未更新的老化工具,遍佈在 82% 的開源項目裡

摘要:現代開源項目的維護永無休止,但不同於項目剛發佈時的重視,許多維護人員在之後的更新工作中總有疏忽,那麼究竟有多少開源項目中還在使用老舊的工具版本呢?

連結:https://blog.trunk.io/82-of-open-source-projects-suffer-from-tool-rot-e766bdf449a2

作者 | Eli Schleifer

譯者 | 彎月 責編 | 鄭麗媛

軟體項目的保質期很短。

在提交落到 main 分支上的那一刻,軟體就變質了:運行時和編譯器發佈了新版本,依賴項發佈了錯誤修復以及新功能,相關 API 棄用等等。

優秀的工程組織會盡可能使用最新版本的工具,畢竟隨著使用的語言發展和工具改進,運行已棄用的版本意味著放棄了很多自動化的可能性。

維護現代項目是一項永無休止的工作,如果不加以管理就會出現問題。每個維護不善的項目最終都將深受工具「腐爛」的困擾,久而久之,我們使用的工具會逐步老化,並出現各種問題。

各種開發工具在剛被程式碼庫採用時,都是新發布且閃閃發亮的,但一旦設置好,就會被遺忘在角落。通常開發工具都沒有明確的所有者或負責人,無法得到及時的更新,直至工具老化出現問題。

為了掌握開源世界中工具過時的普遍程度,我快速調查了一下整個 GitHub 開源程式碼庫中老版 ESLint 的使用情況。我之所以選擇 ESLint,是因為它無處不在,也是最容易升級的工具之一,你可以直接利用 npm 更新,非常簡單。

下面,我們就來看一看這款更新工作量近乎零的工具在實踐中的老朽程度。為了方便分析,我使用了 GitHub 仍處於技術審查階段的程式碼搜尋工具。

31,000 多個程式碼庫仍在使用 ESLint 7

ESLint 是一個很方便分析的目標,因為你可以利用 package.json 檔案檢查版本。首先,我想了解有多少個程式碼庫甚至連 ESLint 主版本都處於落後狀態,仍在使用版本 eslint:7.x.x。所以,我進行了如下搜尋:

path:**/package.json "\"eslint\": \"7"

如上所示,有 31,000 多個程式碼庫仍在使用 ESLint 7。最新主版本 ESLint 8 發佈已經一年多了,但仍有大量項目在使用舊版本。這意味著,在過去的一年中他們都沒有享受到工具和規則集的重大改進。

此外,我們發現還有其他大量使用過時版本的項目,甚至還有程式碼庫使用零版本的 ESLint。以下是各個開源項目使用 ESLint 的版本分佈詳情:

圖:使用舊版本 ESLint 的項目數,以及每個版本的發佈年份

這裡必須指出,ESLint 4.x 及之前的版本都很容易受到正規表示式拒絕服務攻擊(Regular Expression Denial of Service attack,即 ReDoS)。

如你所見,我們發現在使用 ESLint 的開源項目中,有 9500 個很容易受到該攻擊的影響。誠然,很多人在很久以前創建程式碼庫後就放棄了,但上述列表中不乏一些大型科技公司,他們也在使用不安全的工具版本。

工具腐爛無處不在

工具腐爛無處不在

此外,我還深入其他主流生態系統中工具腐爛的情況,特別是 Python 格式化程序 black 以及通用格式化程序 prettier。

prettier 目前最新的版本是 v2.7.1,black 是 v22.10.0。上圖中顯示的資料量遠低於實際情況,因為我們可以通過多種方式引用 prettier,而這個結果只是通過 package.json 設置直接運行 prettier 的項目。

如何保持工具最新

如何保持工具最新

技術人員喜歡創建產品並解決問題。我們可以藉助一些機器人保持工具最新,但這些機器人也需要手動配置,而且還有可能引入大量的拉取請求垃圾郵件。機器人解決方案只是自我管理開發工具中很小的一部分,我個人更喜歡使用 trunk check。

所有自動發佈解決方案都需要使用最好的工具,還需要編寫這些工具的腳本並維護它們。當然,你可以將所需的開發工具拼湊在一起,也可以使用 trunk 等現成的解決方案。

相關文章

八個不容錯過的 GitHub Copilot 功能!

八個不容錯過的 GitHub Copilot 功能!

GitHub Copilot是一款AI結對程式設計工具,可以幫助開發人員更快地編寫程式碼。這款工具採用了AI技術,能夠根據項目的上下文和風格...