在開源社區(qū)的強(qiáng)烈抗議下 微軟逆轉(zhuǎn)了有爭(zhēng)議的.NET變化
在開源社區(qū)的公開抗議下,微軟正在改變從其即將發(fā)布的 .NET 6 中刪除一個(gè)關(guān)鍵功能的決定。本周早些時(shí)候,微軟因?yàn)樯虡I(yè)利益原因在即將發(fā)布的 .NET 6 中刪除了 Hot Reload(熱重載)的一個(gè)關(guān)鍵部分,從而激怒了 .NET 開源社區(qū),該功能允許開發(fā)者在應(yīng)用運(yùn)行時(shí)修改源代碼,并立即看到結(jié)果。
這是一個(gè)許多人一直期待在 Visual Studio Code 和多個(gè)平臺(tái)上使用的功能,直到微軟在最后一刻做出了一個(gè)有爭(zhēng)議的決定,將其鎖定在 Visual Studio 2022,這是一個(gè)僅限于 Windows 的付費(fèi)產(chǎn)品,據(jù)透露,最后一刻的改變是由微軟開發(fā)者部門的負(fù)責(zé)人 Julia Liuson 做出的,是一個(gè)以商業(yè)利益為考量的舉措。
"微軟承認(rèn)它犯了一個(gè)錯(cuò)誤"
在引起反響后,微軟現(xiàn)在已經(jīng)推翻了這一改變,微軟自己的許多員工在公司內(nèi)部也很憤怒。"我們?cè)趫?zhí)行我們的決定時(shí)犯了一個(gè)錯(cuò)誤,花了比預(yù)期更長(zhǎng)的時(shí)間來(lái)回應(yīng)社區(qū),".NET 項(xiàng)目管理主任 Scott Hunter 解釋說。微軟現(xiàn)在已經(jīng)批準(zhǔn)了社區(qū)的拉動(dòng)請(qǐng)求,重新啟用這一功能,它將在 .NET 6 SDK 的最終版本中提供。
媒體要求微軟對(duì)一位高管下令改變這一事實(shí)進(jìn)行評(píng)論,但該公司不想討論這一有爭(zhēng)議的決定。"我們已經(jīng)采取措施來(lái)解決我們的一些 OSS 社區(qū)成員遇到的問題,"微軟發(fā)言人在一份聲明中說。"熱重載功能將出現(xiàn)在 11 月 8 日提供的 .NET 6 SDK 的一般可用性構(gòu)建中。"
不過,微軟的博客文章并沒有談到這個(gè)有爭(zhēng)議的決定。相反,它表明刪除代碼而不是簡(jiǎn)單地禁用它只是一個(gè)錯(cuò)誤,而不是一個(gè)商業(yè)決定。亨特說:"在我們努力擴(kuò)大范圍的過程中,我們無(wú)意中最終刪除了源代碼,而不是僅僅不調(diào)用該代碼路徑,"。
雖然對(duì) .NET 社區(qū)來(lái)說,這種逆轉(zhuǎn)是值得歡迎的,但對(duì)那些重視這種決策透明度的人來(lái)說,圍繞這一事件的解釋和情況不會(huì)讓他們感到輕松。
亨特說:"就像許多公司一樣,我們正在學(xué)習(xí)平衡開放源碼軟件社區(qū)的需求和作為 .NET 的企業(yè)贊助商,有時(shí)我們不能正確地處理這個(gè)問題。當(dāng)我們沒有做到這一點(diǎn)時(shí),我們能做的就是從我們的錯(cuò)誤中學(xué)習(xí),并更好地向前邁進(jìn)。"
這一事件發(fā)生在 .NET 社區(qū)因微軟參與 .NET 基金會(huì)而產(chǎn)生的數(shù)周動(dòng)蕩之后。該基金會(huì)是在 2014 年微軟將 .NET 開源時(shí)創(chuàng)建的,它應(yīng)該是一個(gè)獨(dú)立的組織,其存在是為了改善 .NET 的開源軟件開發(fā)和合作。一位辭職的董事會(huì)成員最近對(duì) .NET 基金會(huì)的作用提出質(zhì)疑,他問道:"在這里是為了執(zhí)行微軟對(duì) .NET 開源的意志,還是為了幫助培養(yǎng)和促進(jìn)一個(gè)健康的社區(qū)?"
最近的一場(chǎng)爭(zhēng)論也導(dǎo)致了 .NET 基金會(huì)執(zhí)行董事 Claire Novotny 最近辭職,還有人質(zhì)疑鑒于微軟在其中的特權(quán)以及 .NET 基金會(huì)的獨(dú)立性。微軟的這一轉(zhuǎn)折無(wú)疑損害了它十年來(lái)所建立的一些開源工作,該公司在改善與 .NET 社區(qū)的關(guān)系以及圍繞其對(duì) .NET 基金會(huì)的影響的問題上仍有許多工作要做。
相關(guān)閱讀
微軟在最后一刻砍掉 .NET 6 熱重載代碼,結(jié)果惹惱開源社區(qū)
在薩蒂亞·納德拉接管了微軟 CEO 的職務(wù)之后,這家軟件巨頭一直在過去 10 年里積極擁抱開源,并且主動(dòng)傳達(dá)了對(duì) Linux 和開源社區(qū)的熱愛。五年前,該公司更是加入了 Linux 基金會(huì),且官方對(duì)此表示了贊許。然而由于 .NET 社區(qū)正在醞釀的一場(chǎng)風(fēng)暴,所有這些善意,都正處于一觸即潰的危險(xiǎn)邊緣。
據(jù)悉,微軟內(nèi)部的一項(xiàng)有爭(zhēng)議的商業(yè)決策,讓許多人都開始質(zhì)疑該公司對(duì)開源的承諾。多個(gè)消息來(lái)源向 TheVerge 透露,此舉同樣激怒了微軟自家的許多開發(fā)者,但他們卻被壓著不許公開抱怨。
具體說來(lái)是,在本周即將發(fā)布的 .NET 6 中,這家雷德蒙德軟件巨頭悄然刪除了 Hot Reload 的一個(gè)關(guān)鍵部分。該功能基本上允許開發(fā)者在創(chuàng)建項(xiàng)目時(shí)獲得即時(shí)反饋、并更改代碼以立即查看結(jié)果。
與競(jìng)爭(zhēng)對(duì)手 Google 家的 Dart 編程語(yǔ)言和 Flutter 開發(fā)工具包來(lái)說,這是微軟 .NET 框架的一個(gè)極大賣點(diǎn),且該公司一直在積極將它引入 .NET 和 Visual Studio 集成開發(fā)環(huán)境。
微軟最初的計(jì)劃描述,是將 Hot Reload 帶給盡可能多的 .NET 開發(fā)者。然而最后一刻的更改,又將它局限在了 Windows 平臺(tái)上的 Visual Studio 開發(fā)人員,而不是走向開放與跨多個(gè)平臺(tái)使用。
微軟一直在測(cè)試接近最終版本的 .NET 6 候選發(fā)布(RC)版本,其允許開發(fā)者通過 dotnet watch 在各種環(huán)境和平臺(tái)上使用熱重載,包括流行的 VS Code 開發(fā)環(huán)境。
候選發(fā)布通常意味著功能完好、做好了投入生產(chǎn)的準(zhǔn)備、且盡可能修復(fù)了測(cè)試期間發(fā)現(xiàn)的各種錯(cuò)誤。
然而本周早些時(shí)候宣布的最后一分鐘修改,又僅在 Visual Studio 2022 中啟用了熱重載功能。負(fù)責(zé)該功能的微軟項(xiàng)目經(jīng)理 Dmitry Lyalin 給出的理由是,其旨在為大多數(shù)用戶提供最佳體驗(yàn)。
但是在 GitHub 上,還是有大量開發(fā)者對(duì)此表達(dá)了嚴(yán)重的挫敗感,Hacker News 和微軟官方播客文章下的評(píng)論也是一篇罵聲。曾在微軟 F# 團(tuán)隊(duì)工作的 Phillip Carter 在評(píng)論中寫道:
在查看了源碼之后,我發(fā)現(xiàn)了一個(gè)更讓人感到失望的事實(shí) —— Hot Reload 的支持代碼只有 1~2 千行左右,但它們還是在最后一刻被撕票了。
作為一項(xiàng)起初并不局限于 Visual Studio 的功能,這是一個(gè)明顯的倒退,我真不希望微軟就此走上回頭路。
The Verge 了解到,從 .NET 6 中刪除該功能的決定,是由微軟開發(fā)部門負(fù)責(zé)人 Julia Liuson 做出的。消息人士稱,此舉是一項(xiàng)以業(yè)務(wù)為主導(dǎo)的決定。
(傳送門:GitHub)
顯然,微軟本想著偷偷引入這項(xiàng)變化,且預(yù)計(jì)不會(huì)引發(fā)強(qiáng)烈的反對(duì)。
但是對(duì)于長(zhǎng)期在開源社區(qū)從事 .NET 相關(guān)工作的微軟自家工程師看來(lái),連他們都感到了深深的傷害與背叛,甚至擔(dān)心這一決定會(huì)對(duì)微軟后續(xù)的開源工作產(chǎn)生持久不利的影響。
最初在 GitHub 上曝光此事的獨(dú)立開發(fā)者 Reily Wood 寫道:
如果你想獲得良好的開發(fā)體驗(yàn),Visual Studio 無(wú)疑是最佳的選擇。但 .NET 團(tuán)隊(duì)的所作所為,又與所有跨平臺(tái)工作背道而馳。
回顧 2014 年,當(dāng)時(shí)微軟宣布了要將 .NET 開源。之后其本應(yīng)保持獨(dú)立自治,以期改善 .NET 開源軟件的開發(fā)與寫作。
然而近日,一位卸任的董事會(huì)成員對(duì) .NET 基金會(huì)的角色提出了質(zhì)疑,詢問它是否僅代表微軟的意愿行事、還是致力于幫助培養(yǎng)和促進(jìn)一個(gè)健康的社區(qū)?
更讓廣大開發(fā)者感到憤怒的是,微軟還鎖定并限制了一個(gè)查詢請(qǐng)求,以刪除 .NET 6 中用于 dotnet watch 的熱重載功能 —— 這嚴(yán)重阻礙了社區(qū)評(píng)論、以及拒絕最后一分鐘的更改。
即使目前社區(qū)已經(jīng)提交了自己的查詢請(qǐng)求,以撤銷微軟的這項(xiàng)變動(dòng),但現(xiàn)在看來(lái)也是不大可能得到回應(yīng)的。