.NET項(xiàng)目被曝缺錢,微軟兩難!
譯文?編譯丨千山、布加迪
審校 | 云昭
日前,AWS軟件開發(fā)經(jīng)理Saikat Banerjee在2022 re:Invent大會(huì)上稱:“我們發(fā)現(xiàn).NET開源項(xiàng)目資金嚴(yán)重不足?!?/p>
在外界看來,這一說法多少令人吃驚。畢竟微軟成立了.NET基金會(huì),聲稱這是“一個(gè)獨(dú)立的非營利性組織,旨在支持圍繞.NET平臺(tái)發(fā)展起來的一個(gè)創(chuàng)新、對(duì)商業(yè)友好的開源生態(tài)系統(tǒng)?!盇WS是僅有的10家企業(yè)贊助商之一。
不可否認(rèn),微軟的.NET團(tuán)隊(duì)在這個(gè)平臺(tái)上投入了大量精力,在技術(shù)層面上也歡迎包括AWS在內(nèi)的外部貢獻(xiàn)者付出的努力,但.NET項(xiàng)目的開源生態(tài)建設(shè)之路卻并不如預(yù)想中那么順?biāo)臁?/p>
盡管如此,AWS依舊表示將一如既往支持.NET,包括:為項(xiàng)目提供資金;對(duì)社區(qū)中出色的.NET項(xiàng)目給予積分獎(jiǎng)勵(lì);積極參與.NET跨平臺(tái)的代碼開發(fā)工作,努力致力于.NET去Windows/跨平臺(tái)化。
1、擺脫微軟,AWS正加速.NET的跨平臺(tái)開發(fā)
“在過去的兩年里,我們花了大量時(shí)間讓客戶從.NET Framework轉(zhuǎn)向.NET Core,那樣客戶可以擺脫Windows和SQL Server許可證,并使用Linux和云原生技術(shù)?!盇WS高級(jí)產(chǎn)品經(jīng)理Mayur Dewaikar如是說。
.NET Core(現(xiàn)在正式稱為.NET)是開源跨平臺(tái)版本,于2016年首次發(fā)布,其前身是.NET Framework。AWS之所以如此專注于.NET跨平臺(tái)開發(fā)的實(shí)現(xiàn),正是因?yàn)?NET Framework出自Windows平臺(tái),導(dǎo)致調(diào)用COM或其他原生Windows API的應(yīng)用程序?qū)o法在Linux上運(yùn)行。
另一方面,.NET Framework的一些部分(包括ASP.NET WebForms和Windows Communication Foundation即WCF的許多組件)不是.NET Core的一部分,這讓很多.NET應(yīng)用程序更適合Windows或Azure云環(huán)境,移植到其他環(huán)境變得異常困難。
為解決這些問題,AWS進(jìn)行了多項(xiàng)嘗試。
首先,改進(jìn)WCF。據(jù)Banerjee聲稱,AWS在努力“改進(jìn)WCF,不讓其墨守成規(guī)”。這項(xiàng)工作包括對(duì)HTTP綁定提供聯(lián)合身份支持,以及擴(kuò)展WFC消息隊(duì)列支持,除了微軟消息隊(duì)列(MSMQ)外,還支持其他消息代理,比如RabbitMQ和Amazon SQS(簡單隊(duì)列服務(wù))。
然后,開發(fā)實(shí)現(xiàn)從Linux容器連接Active Directory的代碼。在Windows AD中,組管理服務(wù)帳戶(gMSA)常常用作應(yīng)用程序服務(wù)的帳戶。這是一種可以移植到Linux的出色架構(gòu)。AWS開發(fā)了一個(gè)名為憑據(jù)獲取器(credentialsfetcher)的組件,這是位于Linux實(shí)例上的守護(hù)進(jìn)程。這允許用戶在Linux容器中使用gMSA。
另外,Serverless NET(尤其是在Lambda上)是另一個(gè)棘手的問題。根據(jù)用戶反饋,用.NET啟動(dòng)Lambda時(shí)經(jīng)常出現(xiàn)冷啟動(dòng)問題。問題不僅在于每次函數(shù)運(yùn)行時(shí)都需要加載.NET運(yùn)行時(shí)環(huán)境,而且JIT(及時(shí))編譯器每次都要啟動(dòng),才能將.NET中間代碼編譯成原生代碼,這也需要很長時(shí)間。最近的.NET7版本中的解決方案是AOT(運(yùn)行前)編譯。因此,AWS為.NET開發(fā)了Lambda工具,將原生AOT編譯添加到Lambda函數(shù)中。
據(jù)Dewaikar介紹,.NET在AWS是從事應(yīng)用程序開發(fā)的人氣第三高平臺(tái),僅次于Python和Java。即使微軟的Azure云更適合.NET應(yīng)用程序,已統(tǒng)一采用AWS的企業(yè)也可能希望與部署的其他云系統(tǒng)一起運(yùn)行其.NET代碼。
從這一點(diǎn)來看,AWS對(duì).NET開源工作的支持與投入主要是為了讓.NET擺脫對(duì)Windows的依賴,更易于使用其Linux VM和云原生技術(shù),從而獲取更多云服務(wù)客戶。
2、微軟的矛盾:.NET開源的曲折路程
回顧.NET本身的發(fā)展史,20年間一路走來有驚喜、也有質(zhì)疑。
將時(shí)間回?fù)艿?002年2月,微軟正式發(fā)布Visual Studio .NET,時(shí)任CEO的比爾·蓋茨將其描述為“第一個(gè)用于構(gòu)建XML Web服務(wù)和下一代互聯(lián)網(wǎng)應(yīng)用程序的完全集成的開發(fā)環(huán)境”。彼時(shí),它被寄予厚望,以創(chuàng)新的技術(shù)體系阻擊當(dāng)時(shí)如日中天的Java。
但事實(shí)上,在.NET初出襁褓的那幾年,微軟的決策層雖然曾在宣傳中打出“開放牌”,但行動(dòng)上依舊堅(jiān)持閉源,致力于捍衛(wèi)自身的專利護(hù)城河,這讓.NET在很長一段時(shí)間里只能用于Windows平臺(tái),跨平臺(tái)能力的缺失讓.NET在非Windows用戶群體中的推廣天然受阻。
直到2014年,微軟新CEO納德拉上任。在發(fā)布會(huì)上,他釋放出了明確的信號(hào):Windows未來將不再具備從前的重要地位,云和移動(dòng)才是微軟未來的核心。自此,微軟才開始真正從閉源時(shí)代的殘照中走出,真正開始“擁抱開源”。而官方支持.NET的跨平臺(tái)工作就是他們邁出的標(biāo)志性一步。
.NET能發(fā)展至今,很大程度上歸功于微軟對(duì)于開源的態(tài)度轉(zhuǎn)變。不過.NET在開源社區(qū)中一直以來仍存在很多爭議。比如,和微軟、Windows的深度捆綁,讓社區(qū)遲遲難以壯大,生態(tài)也很難繁榮,也讓很多項(xiàng)目維護(hù)者對(duì)其中立性保持質(zhì)疑。
網(wǎng)友評(píng)論@知乎
而且即使是發(fā)展至今,微軟內(nèi)部對(duì).NET的開源方面依舊持有矛盾心理,甚至可以說是存在資源的博弈。
2021年10月,微軟在即將發(fā)布的.NET6中悄悄刪除了熱重載功能,宣稱僅在Visual Studio中支持該功能,強(qiáng)制用戶改用昂貴的Visual Studio 2022,就曾引發(fā)了一眾批評(píng)。雖然微軟方面很快恢復(fù)了這一功能并公開道歉,但這一事件確實(shí)“違背了項(xiàng)目維護(hù)者的信任”,而這一裂縫的彌合又不知需要多少時(shí)間。
3、寫在最后
.NET作為開發(fā)平臺(tái)的熱門選手,其開源進(jìn)程的每一個(gè)動(dòng)作都會(huì)影響到開發(fā)者的工作日常。此次曝出開源資金不足的問題,難免會(huì)讓人質(zhì)疑微軟對(duì)于.NET開源的決心和力度。
可以肯定的是,微軟不再視開源為洪水猛獸,甚至在逐步重視開源社區(qū)的發(fā)展和力量。不過作為一家商業(yè)公司,其真正關(guān)注的從來不是某個(gè)項(xiàng)目開源與否,而是這個(gè)項(xiàng)目是否有商業(yè)價(jià)值,是否能幫助微軟的平臺(tái)產(chǎn)品獲取更多的市場占有率。這才是這一巨頭的生存本能。
參考鏈接:
https://www.theregister.com/2022/12/01/net_open_source_heavily_underfunded/
https://blog.csdn.net/farway000/article/details/123143983
https://www.zhihu.com/question/547001632/answer/2613170001