微軟欲閉源 VS Code 的 C# 擴充套件惹眾怒

語言: CN / TW / HK

6 月 16 日,微軟專案經理 Tim Heuer 公佈 了 VSCode C# 擴充套件的路線圖更新,新的路線圖引入語言伺服器協議(LSP) 作為 VSCode C# 擴充套件的基礎通訊機制,並計劃建立一個新的“LSP Tools Host”元件作為新版 C# 擴充套件的基礎,以引入更多實用功能。但微軟在公告中稱 “LSP Tools Host”元件 將不開源 ,該決定隨即引發了大量批評。

八年前,OmniSharp 團隊用當時的 API 和協議開發了 VS Code 中的 C# 擴充套件。如今語言伺服器協議 LSP 已成為現代開發工具(編輯器、IDE 等)相互交流的標準機制,因此微軟打算將 C# 擴充套件切換為完全使用 LSP 進行通訊,並計劃更新現有的 OmniSharp 元件,使它們也以 LSP 進行通訊:

(這裡要提一句,建立 C# for VSCode 擴充套件的 OmniSharp 團隊雖然有很多微軟的員工,但該團隊由社群驅動,並不屬於微軟,也就是說微軟正在收編由社群開發的 C# 擴充套件,把它的發展路徑掌握在自己手中。)

利用 LSP ,將使我們能為 C# for VS Code 擴充套件帶來創新的功能。包括提供高階功能,以及在某些情況下提供 閉源體驗 ,例如 IntelliCode。

我們計劃建立一個新的“LSP Tools Host”元件,它將 Roslyn 和  Razor 等開源元件 與閉源元件整合在一起 ,提供了更廣泛的功能。

“LSP Tools Host” 將成為 C# for VS Code 擴充套件的 預設體驗, 現有使用者可以在現有的開源 OmniSharp 驅動系統和新的“LSP Tools Host”之間進行選擇,後者將提供一些額外功能(比如閉源功能)的訪問許可權。

“LSP Tools Host”不會開源,但我們計劃在此過程中與社群進行溝通,以幫助指導我們未來的計劃。

簡而言之,採用 LSP 通訊機制之後,這個新的 LSP Tools Host 元件將是新的 C# for VS Code 擴充套件的預設功能包,會捆綁更多“開箱即用”的功能。也許是因為這個元件引進了一些閉源的功能模組,所以社群使用者可以幫忙開發,但它不能開源。

這則公告毫無疑問地被衝了,使用者紛紛質疑為什麼新的元件不能開源,指責微軟“回到過去那個封閉的、利益至上的微軟”:

面對眾人對閉源的質疑,微軟專案經理 Tim Heuer 更新了公告,進一步解釋了 “LSP Tools Host” 元件不開源的原因:

Razor 和 C# 的 LSP 實現將保持開源(Roslyn 和 Razor)。VS Code  的 C# 擴充套件 (ms-dotnettools.csharp) 本身也將保持開源。

這個新的 “LSP Tools Host” 元件只是 開源和閉源功能之間的橋樑 ,讓我們可以同時提供這兩種功能。

但有一說一,這個說法似乎不太能服眾,畢竟路線圖寫得明明白白: “LSP Tools Host” 將成為 C# for VS Code 擴充套件的預設體驗,現在則稱其只是一個“橋樑”......

前車之鑑

其實,在 C# 擴充套件之前,微軟對 VSCode 的語言擴充套件就有過收編再閉源的操作 。使用者 Pradyun Gedam 指出:此前 VSCode 的  Python 擴充套件在開源解決方案 Jedi 的支援下普及,然後微軟將其收編,並 構建了一個基於 LSP 的閉源 Python 擴充套件 pylance ,承諾提供更好的使用者體驗。

然後微軟就將閉源的 pylance 設為 Python for VS Code 擴充套件的預設方案(甚至推送提示,讓使用者切換到該擴充套件),同時不斷地減少對開源部分的資源投入。如今,使用 Pylance 的 Python 擴充套件比 Jedi 多太多功能,以至於使用者只能選擇閉源的 pylance 擴充套件。

使用者 Gerard Smit 對此進行了總結:“ 擁抱、延伸和熄滅。 ”這三個詞指先擁抱開源,讓社群力量為其提供更完善的功能;然後再對該功能進行“延伸、擴充套件和改善”,隨後再閉源並強推“延伸”之後的新功能,“熄滅”原有的由社群驅動的開源功能。