微軟全球開發平臺事業部資深副總裁潘正磊

圖片來源: 

iThome

 微軟全球開發平臺事業部資深副總裁潘正磊是微軟核心開發工具Visual Studio和.NET平臺開發團隊的領導人,1992年加入微軟,從一位工程師做起,歷練過多項微軟全球性技術和管理職務,3年前也兼任微軟亞太研發集團伺服器與開發平臺事業部總經理,同時管理美國與中國兩地的微軟研發團隊,就連C#之父Anders Hejlsberg都是她的部屬。

潘正磊一手主導微軟Visual Studio開發團隊導入敏捷開發,擁抱DevOps思維,甚至她還是決定.NET開源的關鍵人物。

Q:你何時得知.NET要開源?

 A  這是我的決定,而不是被告知。

Q:為何微軟需要這麼大的變革?

 A  原本大多是新創公司擁抱開源,但現在有越來越多大企業將開源視為戰略的一環。開源商業模式也越來越完善,可以透過提供服務的方式來建立獲利模式。軟體的程式碼只是軟體其中一小部分的價值,更大的價值要靠服務(意指雲端服務)來實現。

我們的市場競爭者Java也因開源而受到歡迎。比只靠內部.NET開發團隊的腳步,大量開源社群參與的創新速度可以更快,我們也有類似Java社群規模的.NET開發人員在微軟之外,只是我們沒有善加運用。

Q:你如何說服老闆,例如微軟新任執行長Satya Nadella?

 A  有次和我的老闆也就是微軟雲端和企業部門執行副總裁Scott Guthrie一對一面談時,我提出.NET開源的計畫,他也看到了上述類似的趨勢相當認同我的決定,甚至要求我提前3個月完成.NET開源釋出的工作。至於Satya Nadella,我根本不需要說服他,他完全支持。

Q:決定開源之後,先做哪些事?

 A  沒辦法在決定的第一天就開源,因為不是將所有的程式碼開源,傳統桌面程式碼還沒有開源,這是很大的剝離工程。另外,改用開源GitHub來管理程式碼之後,如何確保全世界任何開發人員都可以使用,不論是編譯、組建、測試等工作流程都要重新考慮,等於是整套微軟軟體開發工程的重建。所以,我們花了很多時間研究Java的作法,才發現JDK也不是完全開源,例如得和Oracle簽署使用授權後才能取得程式碼。

微軟第一個開源的程式是TypeScript,從中開始學習開源經驗,了解如何和社群共事,但還沒真正學到釋出後的商業模式。後續才將C#編譯器(Roslyn)開源釋出,然後再擴大到將.NET核心釋出。採取漸進式一步步開源的策略。

Q:在微軟推動開源,最大的挑戰為何?

 A  一開始最困難的是跟所有人解釋為何要這麼做。例如得說服法務部門,如何避免微軟的智慧財產,得向市場部門解釋,開源的必要性,什麼樣的成功情境,才是開源的成果等。

另外,微軟有一套嚴格的智慧財產權規範,這個規範結構不適合採取開源,因此也有很大的調整,讓產品部門未來很容易可以開源。第一次想要釋出TypeScript時的挑戰最大,等到了.NET開源時已經非常順利了。

另外在軟體架構上也需要調整,能將要開源的程式碼單獨抽離,若釋出的程式碼還需要其他未開源的相依元件才能組建,就等於無法開源。

Q:會擔心智慧財產權的問題嗎?

 A  早在2010年時,微軟就開始嘗試將開源軟體放入自家產品中,但會盡可能採取最安全的方式,斥資進行智慧財產權來避免發生問題,甚至還會考慮,萬一有問題,多快能把開源軟體從產品中移除。

但是,現在,沒有人會再擔心這類的問題。倘若是在對外的服務中使用開源軟體,部署在後臺環境中就不會有任何智慧財產權的風險。但若要放入盒裝軟體還是會有風險,因此,我們不會考慮任何Copyleft的授權,如GPL。

Q:開源後,對微軟工程師有什麼影響呢?

 A  3年前,微軟工程師若要看一眼開源程式碼,都得經過3道申請程序,得獲得我的同意,他們才能看。因為微軟經歷過很多侵權官司,為了避免工程師犯錯,因而設置了很多壁壘。

現在微軟工程師要「看」開源程式碼,不用獲得任何人的同意。只有要將開源程式碼放入產品時才需要批准。

當我們第一次將程式碼放上GitHub時,工程師們都非常緊張,還將程式碼中所有的註解都看過一遍,深怕寫過什麼罵人的話或隱私要趕快刪除,後來就習以為常了。

Q:開源對微軟開發流程上又有什麼影響?

 A  過去微軟設計產品只需和內部溝通,現在得和社群合作,這是一個全新的工作模式。開源社群貢獻的程式碼如何和套裝產品整合,也需要新的流程。擁抱開源最需要的不是調整組織,而是要改變工作方法。

Q:為什麼需要改變工作方法?

 A  因為這是一個全新的模式。倘若微軟仍然採取傳統的瀑布式開發流程,就不可能開源。瀑布式開發流程是一個全權控制的模式,可以自行決定程式碼開發完成的時間點,再來安排後續測試團隊的工作排程。

過去,微軟開發工作是計畫性的,但在開源之後,無法預估有多少人有興趣貢獻程式碼。開發社群貢獻的程式碼越多,就得投入愈多人力來審視提交出來的程式碼品質。

程式碼開源之後,不論是誰貢獻的哪一段程式碼,儘管是完成度很高的程式碼,幾次開源經驗來看,都需要進一步檢查如程式碼一致性或相依性等。

Q:在這種非計畫性的開源工作模式下,要如何確保產品的品質?

 A  開源釋出的程式碼任憑社群使用,但是,要成為微軟的產品,會有另一個我們認證過的發行版本,就像RedHat Linux也會發行不同的版本一樣。

或者像Google的Chromium和Chrome的作法一樣,作為產品發布者,我們有權決定哪些社群貢獻的程式碼能放入最終產品。

Q:程式碼開源後,對微軟帶來哪些好處?

 A  跨平臺是未來的大趨勢,能讓Runtime跨平臺,對所有開發人員都是福音,因為只要寫一套程式碼就能在多個平臺上使用。

若.NET沒有釋出,只有微軟自己能進行跨平臺支援,但微軟不可能支援所有的Linux平臺,開源釋出後,可以讓其他人針對不同平臺修改。

這也是一種變相的群眾外包,讓開發需求靠社群快速得到解決,而不用依賴廠商解決。

Q:微軟長期開源策略是什麼?會將所有產品都開源嗎?

 A  我覺得,微軟不需要將所有程式都開源,而應該是選擇性地開源。首選是Runtime開源,其他則是要看需求程度來釋出。例如.NET開源之後,在GitHub上受歡迎程度比C#編譯器高很多。

長遠策略是來自當下所知,目前,我認為,開源最重要的是Runtime開源,從開發過程來看,工程師能夠知道底層Runtime的程式碼怎麼撰寫,有助於調校程式碼,改善軟體效能。但是,對於工具軟體的程式碼,軟體工程師不一定有興趣。工程師傾向於使用一個好用的工具,而不一定會要求工具也要完全開源。

就像小孩成長過程,要先會爬之後才會走,能走之後才會跑。在開源之路,微軟才剛剛學會走路,但距離會跑能跳還有很長一段路。

 

相關報導請參考:「她,讓.NET走向開源」


Advertisement

更多 iThome相關內容