微軟欲閉源 VS Code 的 C# 擴展惹眾怒
6 月 16 日,微軟項目經理 Tim Heuer 公布?了 VSCode C# 擴展的路線圖更新,新的路線圖引入語言服務器協議 (LSP) 作為 VSCode C# 擴展的基礎通信機制,并計劃創(chuàng)建一個新的 “LSP Tools Host” 組件作為新版 C# 擴展的基礎,以引入更多實用功能。但微軟在公告中稱 “LSP Tools Host” 組件將不開源,該決定隨即引發(fā)了大量批評。
八年前, OmniSharp 團隊用當時的 API 和協議開發(fā)了 VS Code 中的 C# 擴展。如今語言服務器協議 LSP 已成為現代開發(fā)工具(編輯器、IDE 等)相互交流的標準機制,因此微軟打算將 C# 擴展切換為完全使用 LSP 進行通信,并計劃更新現有的 OmniSharp 組件,使它們也以 LSP 進行通信:
(這里要提一句,創(chuàng)建 C# for VSCode 擴展的 OmniSharp 團隊雖然有很多微軟的員工,但該團隊由社區(qū)驅動,并不屬于微軟,也就是說微軟正在收編由社區(qū)開發(fā)的 C# 擴展,把它的發(fā)展路徑掌握在自己手中。)
利用 LSP ,將使我們能為 C# for VS Code 擴展帶來創(chuàng)新的功能。包括提供高級功能,以及在某些情況下提供閉源體驗,例如 IntelliCode。
我們計劃創(chuàng)建一個新的 “LSP Tools Host” 組件,它將 Roslyn 和 Razor 等開源組件與閉源組件集成在一起,提供了更廣泛的功能。
“LSP Tools Host” 將成為 C# for VS Code 擴展的默認體驗,現有用戶可以在現有的開源 OmniSharp 驅動系統(tǒng)和新的
“LSP Tools Host” 之間進行選擇,后者將提供一些額外功能(比如閉源功能)的訪問權限。“LSP Tools Host” 不會開源,但我們計劃在此過程中與社區(qū)進行溝通,以幫助指導我們未來的計劃。
簡而言之,采用 LSP 通信機制之后,這個新的 LSP Tools Host 組件將是新的 C# for VS Code 擴展的默認功能包,會捆綁更多 “開箱即用” 的功能。也許是因為這個組件引進了一些閉源的功能模塊,所以社區(qū)用戶可以幫忙開發(fā),但它不能開源。
這則公告毫無疑問地被沖了,用戶紛紛質疑為什么新的組件不能開源,指責微軟 “回到過去那個封閉的、利益至上的微軟”:
面對眾人對閉源的質疑,微軟項目經理 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 對此進行了總結:“擁抱、延伸和熄滅?!?這三個詞指先擁抱開源,讓社區(qū)力量為其提供更完善的功能;然后再對該功能進行 “延伸、擴展和改善”,隨后再閉源并強推 “延伸” 之后的新功能,“熄滅” 原有的由社區(qū)驅動的開源功能。