.NET基金会讨论 .NET 开源事业之路
【編者按】從閉源走向開源,.NET 背后都發(fā)生了哪些有趣的故事。本文采訪了 6 位微軟 .NET 團(tuán)隊(duì)成員,分享他們?cè)?GitHub 以及建立 .NET 開源項(xiàng)目的經(jīng)歷。
作者 | Richard Lander? ? ? ?
譯者?| 彎月
出品 | CSDN(ID:CSDNnews)
當(dāng)?shù)谝淮慰紤]在 GitHub 上共享 .NET Core 時(shí),我們覺得開源是一個(gè)富有吸引力且令人興奮的想法。同時(shí),我們很多人都不太了解 GitHub,只知道這是一個(gè)很大的平臺(tái),至于如何利用這個(gè)平臺(tái),我們都有很多疑問。“如果第一天就有人在我們的運(yùn)行時(shí)上建立分叉,該怎么辦?是不是說我們的項(xiàng)目就完了?”我們知道應(yīng)該虛心學(xué)習(xí)開發(fā)人員建立的模式,并了解他們對(duì)我們的期望。話雖如此,我們還是建立了項(xiàng)目和組織,而且項(xiàng)目的發(fā)展速度超出了我們的預(yù)期。截止到目前,我們已經(jīng)度過了數(shù)個(gè)春秋,而且已經(jīng)擁有了多個(gè)版本,而其他的都已成為歷史。這是一段有趣的旅程,我們將與各方工作人員一起分享。
此次,我們將通過談話的形式,與以下幾位 .NET 工程師一起分享他們嘗試 GitHub 以及建立 .NET 開源項(xiàng)目的經(jīng)歷。
Claire Novotny:.NET 基金會(huì)執(zhí)行董事,?.NET 團(tuán)隊(duì)的 PM
Dan Moseley:.NET 庫(kù)團(tuán)隊(duì)的項(xiàng)目經(jīng)理
Immo Landswerth:.NET 團(tuán)隊(duì)的項(xiàng)目經(jīng)理
Kevin Pilch:ASP.NET Core、Entity Framework 和 Winforms 的工程經(jīng)理
Matt Mitchell:.NET 工程師
Stephen Toub:.NET?工程師
Q:為什么開源對(duì) .NET 項(xiàng)目如此重要?
Immo:現(xiàn)代開發(fā)技術(shù)棧需要跨平臺(tái)。在操作系統(tǒng)和架構(gòu)不斷變化的大環(huán)境中,開源是最具可持續(xù)性的、構(gòu)建一個(gè)擁有廣泛支持的技術(shù)棧的方式。我們可以通過開源與消費(fèi)者實(shí)時(shí)互動(dòng),而這從很多方面改變了我們計(jì)劃、構(gòu)建和迭代 .NET 的方式。最后,人們都希望開發(fā)技術(shù)棧這類的基礎(chǔ)技術(shù)能夠在開源許可下開放。
Claire:開源之后,任何人都可以查看和調(diào)試用于構(gòu)建應(yīng)用程序的運(yùn)行時(shí),甚至為之做貢獻(xiàn)。以前有些問題對(duì)他們來說很重要,但不會(huì)被優(yōu)先考慮,而如今他們可以自行解決這些難題了。開源之后, .NET 項(xiàng)目已不再由微軟一家提供。
Kevin:我認(rèn)為開源對(duì) .NET很重要,原因如下:
開源語(yǔ)言和運(yùn)行時(shí)的實(shí)現(xiàn)很常見,所以如果不開源的話,倒顯得我們格格不入。
.NET 涉及的范圍很廣,盡管我們盡了最大的努力來編寫文檔,但還不如讓人們來親眼看一看這些實(shí)現(xiàn),甚至動(dòng)手調(diào)試。
我們可以通過開源,與個(gè)人和其他公司展開合作,這種合作比在閉源系統(tǒng)上進(jìn)行的一次性協(xié)議更直接。
Stephen:原因有很多,但最讓我心動(dòng)的是任何人都可以找到對(duì)他們很重要的東西,并加以改進(jìn)。在 .NET Core 出現(xiàn)之前,任何改進(jìn)請(qǐng)求都要與其他請(qǐng)求一起經(jīng)過整理和分類后,才會(huì)到達(dá)合適的微軟工作人員手中,然后再安排開發(fā)人員處理改進(jìn)要求,可能需要經(jīng)過幾年的時(shí)間才能發(fā)布出來。如今,如果有人發(fā)現(xiàn)希望修復(fù)的問題,他們只需提出 PR,然后經(jīng)過審查、迭代、合并,通過每晚的構(gòu)建,第二天就可以上線了。這是一個(gè)完全不同的世界。
Dan:開源是實(shí)現(xiàn)跨平臺(tái)的最佳方式,尤其在面向 Linux 時(shí),開源是最自然的做法。
Matt:我認(rèn)為,微軟必須通過某種方式表現(xiàn)對(duì)開源軟件社區(qū)的投入,這一點(diǎn)很重要。我們采用了開源軟件的開發(fā)方式,并將開源作為產(chǎn)品的一部分發(fā)布出去。如今,開源軟件是整個(gè)軟件生態(tài)系統(tǒng)的重要組成部分。微軟的參與和回饋也非常重要。
Dan:由于有更多的人關(guān)注我們的工作,因此可以幫助我們?cè)诋a(chǎn)品發(fā)布之前確保產(chǎn)品的正確性。此外,社區(qū)的規(guī)模意味著其中有許多來自各個(gè)領(lǐng)域的專家,其規(guī)模遠(yuǎn)遠(yuǎn)超過了我們的工程團(tuán)隊(duì),這也可以幫助我們更好地完成工作。
Q:.NET團(tuán)隊(duì)直接在 GitHub 上開展工作,是嗎?早先有一些代碼炸彈(JIT 和 GC)。現(xiàn)在沒有了,是嗎?
Immo:只有 StephenToub 長(zhǎng)期休假就沒問題。
Matt:我們幾乎全部轉(zhuǎn)移到了GitHub 上。安全補(bǔ)丁的確會(huì)先在代碼庫(kù)中構(gòu)建,但等到代碼發(fā)布的時(shí)候就會(huì)合并到開源庫(kù)中。除此之外,我們的開發(fā)、討論和議題跟蹤幾乎都在 GitHub 上。
Stephen:如今代碼炸彈已經(jīng)很罕見了。有時(shí),有一些額外的已有組件會(huì)被移動(dòng)到 dotnet/* 代碼庫(kù)中,但是這種情況很少見。我能想到的過去一年中出現(xiàn)此類情況是一個(gè)名叫 System.Speech 的庫(kù)。
Kevin:實(shí)際上,我認(rèn)為我有最大的一個(gè)代碼炸彈,因?yàn)橄?roslyn 項(xiàng)目提交代碼的第一個(gè)人是我(當(dāng)初我們還沒有使用機(jī)器人來完成此類工作)。如今我們的大部分工作都是直接在 GitHub 上進(jìn)行的,而且你可以看到這個(gè)過程是逐步建立的。但也有可能我們決定發(fā)布一些新項(xiàng)目的代碼,或者在我們決定是否開源之前先在原型上進(jìn)行試驗(yàn)。
Dan:我們十分關(guān)心公開我們的工作,除了作為一種承諾之外,還能讓更多人關(guān)注我們的工作。所以一般來說,開發(fā)重大的非公開項(xiàng)目有違于微軟的慣例。
Q:分享一個(gè)有關(guān) .NET Core 1.0 開源項(xiàng)目的故事
Kevin:在 .NET Core1.0 開發(fā)期間,我一直在研究 Roslyn,但讓我們非常高興的一件事是,當(dāng) Anders 宣布編譯器發(fā)布到了 CodePlex 上之后,我們與運(yùn)維人員一起觀看服務(wù)器上的負(fù)載增加狀況。幸運(yùn)的是,負(fù)載一直保持不變,但如果我沒記錯(cuò)的話,那是他們迄今為止看到過的最高的負(fù)載。
Immo:我們創(chuàng)建了一個(gè) .NET 專用賬號(hào)(dotnet bot),而且這個(gè)賬號(hào)還成了第一批代碼的提交者。我們之所以這樣做,是為了表明所有這些提交都是已有的代碼,而不是由某個(gè)人編寫的。可以想象,第一批提交包含大量的代碼。時(shí)至今日,dotnet bot 收到了大量工作邀請(qǐng)函,因?yàn)橛腥送高^ GitHub 的統(tǒng)計(jì)數(shù)據(jù)挖掘到了 dotnet bot。
Stephen:多年前,我在從倫敦起飛的飛機(jī)上編寫了一個(gè)數(shù)獨(dú)應(yīng)用,用于生成游戲和玩游戲。這個(gè)應(yīng)用成為了我嘗試新平臺(tái)的媒介,最初是在 Windows Forms 上編寫的。后來,我把它移植到了 WPF。后來在研究并行計(jì)算時(shí),我利用這個(gè)應(yīng)用來演示并行計(jì)算。等到 Windows 8 發(fā)布以后,我將其移植到了 WinRT。后來,我們發(fā)布了平板設(shè)備,我又一次將其移植了上去。而等到我們?cè)?Linux 上啟動(dòng) .NET Core 后,這個(gè)應(yīng)用是除了“Hello, world”之外,在 .NET Core 上運(yùn)行的第一批 Linux 應(yīng)用之一(移植后的版本提供了文本界面)。
Matt:早先時(shí)候,我們的公共 CI 系統(tǒng)采用了 Jenkins。我們不知道應(yīng)該使用哪種工具。我們采用了一個(gè)舊版的 Jenkins 單體版本,而且它的設(shè)計(jì)并不適合處理我們的規(guī)模(數(shù)以萬計(jì)的作業(yè),需要大量的編排)。好在一切還算順利,但是很難管理穩(wěn)定的安裝版本。最終,我們不得不創(chuàng)建了一個(gè)又一個(gè)越來越大的虛擬機(jī),而且占據(jù)的內(nèi)存也越來越大(數(shù)百 GB),但我們?nèi)匀恍枰腥藭r(shí)刻監(jiān)視,一旦系統(tǒng)崩潰,就按下重啟鍵。
Dan:社區(qū)的參與度和專業(yè)知識(shí)總是讓我感到驚喜。此次開源在很大程度上是一種合作伙伴關(guān)系,令人欣慰的是,如此之多的開發(fā)人員對(duì) .NET 充滿熱情,他們貢獻(xiàn)的功能和變更如此重要,可以讓 .NET 變得越來越好。
Q:.NET開源項(xiàng)目最令人驚訝的是什么?
Immo:多年來我們一直在談?wù)撻_源。我非常驚訝的是我們的心態(tài)轉(zhuǎn)變速度之快:前一天我們還在擔(dān)心,結(jié)果沒過幾天就完全變了:“為什么還沒完成”。整個(gè)團(tuán)隊(duì)的文化都發(fā)生了變化。從使用 TF VC 的內(nèi)部 TFS 轉(zhuǎn)變到使用 Git 的 GitHub,并公開開發(fā)工作,我們幾乎只用了幾周的時(shí)間。我很震驚,也很自豪能夠成為一支適應(yīng)速度如此之快、幾乎沒有任何猶豫的團(tuán)隊(duì)的一員。
Kevin:雖然在微軟從事了七年的開源技術(shù)工作,.NET 開源的一切在我眼里都很正常,但我仍然對(duì)這份工作感到興奮。如果回到 2002年,我很難想象這樣的事情。
Matt:這個(gè)項(xiàng)目的發(fā)展速度總是讓我感到驚訝,而且如今似乎還在不斷加速。以前,我總是能夠清楚地記住當(dāng)前正在進(jìn)行的一系列工作,各個(gè)代碼庫(kù)的狀況以及它們之間的關(guān)系。然而在過去的一年里,我經(jīng)常會(huì)恍惚:“等等,我們現(xiàn)在就要做嗎?”但話說回來,可能只是因?yàn)槲疑狭四昙o(jì)。
Dan:自從 .NET 開源以來,內(nèi)部團(tuán)隊(duì)已經(jīng)聯(lián)系了我們很多次,希望我們能夠幫助和指導(dǎo)開源他們的項(xiàng)目。而他們又會(huì)成為微軟其他團(tuán)隊(duì)的榜樣。令我驚訝的是,人們對(duì)我們公開自己的工作非常感興趣,他們希望能夠從我們身上汲取經(jīng)驗(yàn)。
Immo:我沒有預(yù)料到的一件事是,在與合作伙伴團(tuán)隊(duì)的內(nèi)部互動(dòng)中,開源竟然起到了如此大的作用。回想起來,這也不是很意外。微軟是一家大公司,擁有各種各樣的工程系統(tǒng)、發(fā)布周期和業(yè)務(wù)目標(biāo)。我們希望團(tuán)隊(duì)之外的人員也能夠接觸我們的代碼庫(kù),包括微軟的不同團(tuán)隊(duì),而在開源的幫助下,這個(gè)問題非常容易解決。
Q:.NET開源項(xiàng)目似乎非常受歡迎,而且非常活躍。你覺得是什么原因??
Immo:.NET 以高效著稱,尤其是與 C# 結(jié)合使用。在開源之前,我聽很多人說,有些人堅(jiān)持認(rèn)為“微軟非常邪惡”,雖然 C# 非常棒,但他們?nèi)匀痪芙^使用 C#,因?yàn)樗情]源的,并且只支持 Windows。開源之后,很多人終于有機(jī)會(huì)在項(xiàng)目中使用了 C#了,即便他們的工作根本不涉及 Windows。
Kevin:我認(rèn)為這在一定程度上表明 .NET 已深入客戶的日常工作。他們每天都會(huì)用到. NET,因此能夠讓工程師和客戶直接接觸我們的項(xiàng)目是非常有價(jià)值的。團(tuán)隊(duì)中還有很多人在思考如何與社區(qū)展開合作,以及如何讓我們的開源軟件更具包容性,更容易接納別人。在這個(gè)問題上,我們都要感謝 Dan 付出的努力。
Matt:多年以來,.NET 的“核心”已得到鞏固。如今,我們有機(jī)會(huì)進(jìn)一步擴(kuò)展,并嘗試新事物和創(chuàng)新。與早些年相比,我們的工程系統(tǒng)越來越好,而我們的發(fā)展速度也越來越快。
Stephen:C# 是一門非常容易上手且發(fā)展成熟的語(yǔ)言,.NET 的庫(kù)非常健壯且龐大,運(yùn)行時(shí)堅(jiān)如磐石。你可以編寫非常高效且可擴(kuò)展的應(yīng)用和服務(wù),而且編寫這種代碼的效率非常高
Claire:在我看來,C#、.NET 和 Visual Studio 一直都是值得信賴的平臺(tái)。我可以快速投入工作,快速地編寫代碼,然后開始調(diào)試,而無需考慮類路徑等復(fù)雜的配置,或手動(dòng)指定垃圾收集器的設(shè)置。
Dan:.NET 開發(fā)人員的群體非常龐大,而且由于大多數(shù) .NET 平臺(tái)是用 C# 編寫的,因此向這個(gè)項(xiàng)目做貢獻(xiàn)相對(duì)比較容易,而且很容易出成果。通過開源,我們與所有開發(fā)人員建立了聯(lián)系,而不僅僅是 Windows 開發(fā)人員,無論你使用何種平臺(tái),都可以考慮 .NET。
Q:在你看來,人們對(duì)這個(gè)項(xiàng)目滿意嗎?開源是明智之舉嗎?
Immo:根據(jù)我與 .NET 開源社區(qū)其他成員的交談,感覺我們做了許多正確的事情。特別是在剛開始的時(shí)候,我們告訴所有人,我們可能會(huì)犯錯(cuò),我們非常期待誠(chéng)懇的反饋。我認(rèn)為,這件事奠定了社區(qū)參與的基調(diào)。盡管如此,我們也明白,取得開源的成功并不是目標(biāo),而是過程。還有許多東西值得我們從其他社區(qū)學(xué)習(xí)。
Dan:從 GitHub 社區(qū)的調(diào)查問卷中我們了解到,大多數(shù)情況下人們都很高興。不同的代碼庫(kù)的結(jié)果也不一樣,也有許多我們需要改進(jìn)的地方,我們應(yīng)當(dāng)更積極、更加透明地響應(yīng),降低貢獻(xiàn)代碼的難度。我們可以學(xué)習(xí)一些成功的開源項(xiàng)目。我們已取得了進(jìn)步,但前面還有很長(zhǎng)的路要走。
Matt:我認(rèn)為核心開發(fā)人員對(duì) .NET 開源項(xiàng)目基本滿意。至少,我沒有看到任何開源的反對(duì)意見。從 .NET 組織的文化來看,這種情況非常自然,也是我們的目標(biāo)。現(xiàn)在的反對(duì)意見主要集中在如何提高各個(gè)部分的工作效率。怎樣才能更好地管理議題?PR 的測(cè)試標(biāo)準(zhǔn)是什么?
Kevin:我認(rèn)為我們一直在嘗試改進(jìn)。總會(huì)有人因?yàn)樗麄兊膯栴}沒有得到解決而不滿,但目前來看,在我們的代碼庫(kù)中進(jìn)行構(gòu)建、調(diào)試并運(yùn)行測(cè)試并非易事。有時(shí)候,就問題能否解決、何時(shí)解決,我們并沒有管理好人們的期望。因此,我認(rèn)為我們做得還不錯(cuò),但依然有可以改進(jìn)的地方。
Dan:舉一些我們讓 .NET 變得更加包容的例子:我們?cè)贕ithub上公開了 .NET 6 的計(jì)劃,并在Github 上管理該計(jì)劃;我們還積極利用 dotnet/designs 代碼庫(kù),這樣社區(qū)就可以幫忙分享和改進(jìn)我們的設(shè)計(jì)和計(jì)劃。
Q:項(xiàng)目的維護(hù)人員經(jīng)常討論超負(fù)荷的問題,他們都是在業(yè)余時(shí)間維護(hù)開源項(xiàng)目。但 .NET 開源項(xiàng)目是你們的本職工作,所以你們的感受可能不一樣。你們經(jīng)歷的最大難題是什么?
Dan:由于代碼庫(kù)一直都非常活躍,我們不得不放棄事必躬親的想法,也不能逼迫自己在業(yè)余時(shí)間隨時(shí)做出響應(yīng)。相反,對(duì)于喜歡靈活工作的人,這種情況反而很好,例如,無論何時(shí)都會(huì)有人執(zhí)行代碼審查。
Kevin:對(duì)于我來說,關(guān)注一切會(huì)讓人感覺不堪重負(fù)。我管理的幾個(gè)代碼庫(kù)每個(gè)月都有幾百甚至幾千個(gè)議題,更不用說 PR 和評(píng)論了。就算是全職工作,給予一切方面應(yīng)有的關(guān)注,時(shí)間也遠(yuǎn)遠(yuǎn)不夠。我看到有人通過延長(zhǎng)自己的工作時(shí)間來解決這個(gè)問題,但最終還是會(huì)面臨精力耗盡的局面。
Stephen:我的時(shí)間根本不夠,無法完成所有的工作。例如,我很希望能審查 dotnet/runtime 中的大部分PR,但量太大,最后我只能優(yōu)先處理一部分。
Matt:挑戰(zhàn)之一就是避免讓自己成為救火隊(duì)員。由于 .NET 的發(fā)展速度非常快,光是回復(fù) PR 審查請(qǐng)求、幫助受阻的開發(fā)人員或修改基礎(chǔ)設(shè)施的錯(cuò)誤,就占據(jù)了我所有的時(shí)間。困難就在于專心解決根本問題,并從戰(zhàn)略層面上思考怎樣解決一類問題,而不是一整天都為個(gè)人服務(wù)。
Dan:團(tuán)隊(duì)中有許多人非常善于保持工作的邊界。我們認(rèn)為這樣完全沒問題,甚至可以說這是最理想的做法。
提交者人數(shù)是固定的,但潛在的貢獻(xiàn)者是無限的。因此,我們不可能關(guān)注所有的議題和 PR 審查。我們會(huì)盡可能關(guān)注一切,但同時(shí)也會(huì)嘗試找出一個(gè)正確的模型來管理這項(xiàng)工作。我們希望社區(qū)能幫我們解決這個(gè)問題。
Claire:由于項(xiàng)目是全球性的,貢獻(xiàn)者也來自五湖四海,因此新的議題永無止境。工作之外的時(shí)間里,我會(huì)想盡各種“請(qǐng)勿打擾”的方法,來保持工作和生活的平衡。
Q:很顯然,該項(xiàng)目的開源已經(jīng)遠(yuǎn)遠(yuǎn)超出了授權(quán)的范圍,其中社區(qū)的因素更多。團(tuán)隊(duì)為了提高社區(qū)參與度做了哪些努力?
Clarie:我們一直在努力確保團(tuán)隊(duì)與社區(qū)的友好交流,讓每個(gè)人都能參與進(jìn)來。
Dan:有很多例子。我們主導(dǎo)了“社區(qū)分類”行動(dòng),好幾個(gè)代碼庫(kù)都由社區(qū)成員負(fù)責(zé)給議題添加標(biāo)簽,或者關(guān)閉重復(fù)的議題。在代碼方面,有時(shí)我們會(huì)讓社區(qū)貢獻(xiàn)者參加我們的每日會(huì)議。去年我們?cè)诰W(wǎng)絡(luò)性能問題上也嘗試過同樣的實(shí)踐,而且非常成功。只要有可能,只要社區(qū)成員愿意實(shí)現(xiàn)某個(gè)功能,我們非常愿意放手。例如,Web 套接字壓縮和 PriorityQueue 就是這樣實(shí)現(xiàn)的。
Kevin:Dan 等人的調(diào)查已經(jīng)持續(xù)了一段時(shí)間,我們?cè)趪L試從調(diào)查中汲取經(jīng)驗(yàn)。如上所述,我們?cè)谂o議題的狀態(tài)設(shè)置更為清晰的期望,方便大家訪問代碼庫(kù),降低構(gòu)建的難度,確保社區(qū)PR得到更快的審查,等等。
Immo:以前,我們?cè)鴩L試過“代碼開放”,就是將代碼扔給開源社區(qū),而我們躲在門后繼續(xù)制造代碼炸彈。從 .NET Core1.0 開始,我們的工作全部轉(zhuǎn)移到了 GitHub 上。這樣人們就可以看到團(tuán)隊(duì)的代碼審查,也能看到問題的跟蹤。我們中的許多人都加入了社交網(wǎng)絡(luò),更積極地宣傳 .NET 和我們的 GitHub 項(xiàng)目。我們還在 YouTube 上直播了設(shè)計(jì)討論會(huì)議。現(xiàn)在我們有好幾個(gè)網(wǎng)站可以與社區(qū)分享更多信息,比如issuesof.net、apisof.net、apireview.net和 themesof.net 等。
Matt:在基礎(chǔ)設(shè)施方面,我們的理念一直是為微軟之外的 .NET 貢獻(xiàn)者提供與微軟開發(fā)人員相同的工具和流程,以及同樣的 PR 檢查工具,并公開檢查結(jié)果,同樣的編程工具,等等。
Dan:補(bǔ)充一句,這樣做也為團(tuán)隊(duì)中不在辦公室辦公的成員提供了方便,他們不需要VPN就能工作。
Q:想象一下,你決定跳槽到一個(gè)新項(xiàng)目(或工作)。開源會(huì)成為你的選擇標(biāo)準(zhǔn)之一嗎?在你看來,開源有多重要?
Stephen:這個(gè)想法太悲觀了,我為什么要跳槽?但是,沒錯(cuò),開源非常重要。
Dan:縱觀整個(gè)職業(yè)生涯,我一直在從事閉源項(xiàng)目,直到遇到 .NET。如今的我無法想象在一個(gè)非開源或注定會(huì)開源的項(xiàng)目上工作。開源的工作更有意思,我們能獲得更多的能量,接觸到更多的觀點(diǎn),而且還可以認(rèn)識(shí)更多人。而且開源非常高效。
Claire:能夠參加開源項(xiàng)目,并為開源做出貢獻(xiàn),對(duì)我來說非常重要。能夠與社區(qū)互動(dòng)、獲取新想法的反饋,并公開迭代過程,這一點(diǎn)至關(guān)重要。
Immo:作為項(xiàng)目經(jīng)理,我非常重視與客戶實(shí)時(shí)互動(dòng)的能力,包括讓他們直接接觸工程團(tuán)隊(duì)的工作成果。我很難接受失去這一切。即便將來離開微軟也沒有關(guān)系,因?yàn)樗械墓ぷ鞫脊_了。
Kevin:我從事開源項(xiàng)目已經(jīng)七年多了,我從大學(xué)開始就想從事開源項(xiàng)目。我很難想象自己加入一個(gè)非開源團(tuán)隊(duì)。
Matt:我認(rèn)為,對(duì)我來說開源并不是一個(gè)硬性要求。但是某些開源的“思維方式”很重要。例如透明度、多樣性、完整性、社區(qū)、公共標(biāo)準(zhǔn)和辯論,還有開源工具,這些對(duì)我來說都很重要。
Q:.NET 的采用率會(huì)不會(huì)因?yàn)殚_源而增加?
Claire:毋庸置疑。在開源之前,.NET 僅限于 Windows。如今 .NET 開源了,可以在更多地方運(yùn)行了。
Immo:我相信答案是肯定的,但我認(rèn)為跨平臺(tái)支持(包括設(shè)備)給 .NET Core 帶來了很多變化。很難說這些成功的主要因素是什么,但我認(rèn)為開源軟件是我們成功構(gòu)建 .NET 的關(guān)鍵。
Dan:在開源的幫助下,我們更容易地實(shí)現(xiàn)了跨平臺(tái),因?yàn)槲覀兛梢耘c Linux 的社區(qū)合作。而支持 Linux(以及 Mac)讓我們成為了 Linux 開發(fā)人員的備選之一。當(dāng)然,也有一些開發(fā)人員單純因?yàn)橄矚g開源技術(shù)棧。此外,開源還讓人們更容易信賴 .NET,因?yàn)槊總€(gè)人都可以閱讀源代碼。
Matt:我覺得應(yīng)該會(huì)。我認(rèn)為,我們很難將 .NET的采用率與開源直接聯(lián)系起來,但我認(rèn)為在某些方面開源增加了項(xiàng)目的可見性,而且還讓.NET 在原本不可能的地方(例如紅帽)得到了應(yīng)用。
Q:縱觀歷史,微軟提供的產(chǎn)品主要以閉源為主。長(zhǎng)期使用 .NET 的微軟客戶是否愿意接納開源?
Kevin:肯定有一些客戶不太愿意。在我看來,這個(gè)問題主要在于支持。雖然大多數(shù)人都知道,微軟發(fā)布的產(chǎn)品都提供支持,比如 gRPC-dotnet,雖然絕大多數(shù)代碼是微軟編寫的,但是實(shí)際上該項(xiàng)目由 CNCF 負(fù)責(zé),也由他們負(fù)責(zé)發(fā)布。那么,我們提供支持嗎?(答案是這個(gè)問題剛剛得到了解決,我們提供支持)。但是我們推薦或貢獻(xiàn)了代碼的第三方庫(kù)也經(jīng)常出現(xiàn)這個(gè)問題。
Dan:以前許多 .NET 客戶構(gòu)建應(yīng)用都會(huì)使用微軟提供的庫(kù)(以前都是閉源代碼),再結(jié)合自己編寫的代碼,他們不太習(xí)慣依賴微軟之外的庫(kù),而這些庫(kù)通常是開源的。我們希望讓他們明白,他們也可以信任來自 .NET 團(tuán)隊(duì)之外的庫(kù),而開源更容易讓他們信任這些庫(kù)。
Matt:至少在內(nèi)部,經(jīng)常有人不太了解開源項(xiàng)目的開發(fā)方式,開源項(xiàng)目之間的關(guān)系以及開源項(xiàng)目如何才能滿足需求(服務(wù)、新功能等)。有時(shí),他們有點(diǎn)不太習(xí)慣 .NET 之類的微軟傳統(tǒng)項(xiàng)目中包含微軟以外的開發(fā)人員編寫的代碼。但我認(rèn)為這主要是因?yàn)?NET 的發(fā)展歷史,而不是他們真的不喜歡開源。
Q:介紹一下微軟對(duì)開源的承諾
Immo:我覺得打從第一天起,我們對(duì)此就非常透明。微軟整個(gè)公司都在向云遷移。許多微軟的客戶都在使用 .NET,我們認(rèn)為 .NET 與云計(jì)算的結(jié)合至關(guān)重要。而且我們相信開源是 .NET 向云轉(zhuǎn)變的最佳方式。
Dan:為了回答這個(gè)問題,我們可以看一看近年來發(fā)生的事情。微軟維護(hù)的開源項(xiàng)目數(shù)量持續(xù)增長(zhǎng),包括幾個(gè)頂流的 Github 代碼庫(kù)。這些都是最有力的證據(jù)。
Q:.NET項(xiàng)目 與 .NET 基金會(huì)有什么關(guān)系?
Claire:人們經(jīng)常將 .NET 項(xiàng)目與 .NET 基金會(huì)混為一談。該項(xiàng)目的知識(shí)產(chǎn)權(quán)歸 .NET 基金會(huì)所有,但 .NET 基金會(huì)沒有項(xiàng)目控制權(quán)。.NET 項(xiàng)目的控制權(quán)在微軟手中。作為 .NET 基金會(huì)的執(zhí)行董事和 .NET 團(tuán)隊(duì)的項(xiàng)目經(jīng)理,我同時(shí)擔(dān)任兩項(xiàng)職務(wù),我清楚什么場(chǎng)合下應(yīng)該承擔(dān)起哪項(xiàng)職務(wù)。我認(rèn)為,剛開始的時(shí)候 .NET 項(xiàng)目和 .NET 基金會(huì)之間的界限很模糊,在過去的幾年里,我們一直在努力更清晰地區(qū)分二者。
結(jié)束語(yǔ)?
在 GitHub 上公開辦公,徹底改變了團(tuán)隊(duì)和產(chǎn)品。雖然我們從事 .NET 的開發(fā)已經(jīng)很多年了,但項(xiàng)目和產(chǎn)品本身仍在不斷增長(zhǎng)。這是一個(gè)振奮人心且令人滿意的結(jié)果。很明顯,開源是開發(fā)應(yīng)用程序平臺(tái)的最佳方式,而且也更有趣。感謝所有為該項(xiàng)目做出貢獻(xiàn)的人。
感謝Stephen、Matt、Kevin、Immo、Dan 和 Claire 與我們分享 .NET 開源項(xiàng)目的情況,以及參與其中的感受。
原文鏈接:?https://devblogs.microsoft.com/dotnet/conversation-about-the-net-open-source-project/
聲明:本文由CSDN翻譯,轉(zhuǎn)載請(qǐng)注明來源。?
總結(jié)
以上是生活随笔為你收集整理的.NET基金会讨论 .NET 开源事业之路的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术分享 | 业务模板的技术实践
- 下一篇: C#多线程开发-处理子线程中的异常