“我們的挑戰(zhàn)是如何在飛機(jī)還在空中飛行時(shí)對(duì)它進(jìn)行改造。”這就是Igor Zaika目前的狀態(tài)。Igor Zaika是微軟Office團(tuán)隊(duì)中有名的工程師,他用上述的話闡述了微軟團(tuán)隊(duì)目前的難題。一個(gè)公司要怎么做,才能在重建office核心架構(gòu)使其能夠在其它非Windows操作系統(tǒng)上使用的同時(shí),而不給其超過(guò)10億的用戶帶來(lái)任何不便呢?
在最近舉行的Facebook@Scale發(fā)布會(huì)上,Zaika談到了微軟Office跨平臺(tái)架構(gòu)戰(zhàn)略。在他50分鐘的發(fā)言里,Zaika詳細(xì)闡述了微軟如何打算利用C++打造一個(gè)能夠在Windows,Apple,Android以及網(wǎng)絡(luò)等多個(gè)平臺(tái)上跨平臺(tái)使用的Office軟件。
自30年前Office問(wèn)世以來(lái),至今該軟件的代碼行數(shù)已有千萬(wàn)行。Zaika說(shuō)最開(kāi)始的時(shí)候,Office只是一些用C語(yǔ)言編寫的獨(dú)立應(yīng)用軟件;1990年微軟將這些軟件組合在一起,但它們之間并沒(méi)有什么共享的代碼。1985年微軟推出了在Mac操作系統(tǒng)上使用的Office,那時(shí)整個(gè)團(tuán)隊(duì)認(rèn)為如果能夠給這兩個(gè)版本的Office編寫一個(gè)統(tǒng)一的代碼,將會(huì)是一個(gè)很不錯(cuò)的主意。
Zaika打趣道:“令人吃驚的是,他們沒(méi)有成功。”
盡管這個(gè)團(tuán)隊(duì)挽救了一些能夠在Windows和Mac上共享的Office代碼,但Mac用戶依舊不是特別滿意,因?yàn)镺ffice這個(gè)應(yīng)用看起來(lái)與其它Mac的應(yīng)用不一樣,工作的方式也不太一樣。
Zaika告訴聽(tīng)眾,幾年前,Office團(tuán)隊(duì)意識(shí)到共享代碼這個(gè)主意是不錯(cuò),但共享代碼太多則過(guò)尤不及。于是團(tuán)隊(duì)開(kāi)始嘗試重新構(gòu)架Office。
這一次,Office團(tuán)隊(duì)打造了一個(gè)迷你平臺(tái)抽象層(PALs),并試圖找出如果要支持跨操作系統(tǒng)應(yīng)用,UX代碼要如何編寫才能達(dá)到最佳效果,以及需要共享多少UX代碼。
Zaika解釋道,盡管在微軟內(nèi)部有一些人認(rèn)為微軟應(yīng)該把Office的代碼庫(kù)分開(kāi)處理,針對(duì)不同的操作系統(tǒng),組成相應(yīng)的團(tuán)隊(duì)來(lái)編寫相應(yīng)的代碼,但這并不是微軟現(xiàn)行的處理方案。同時(shí)Zaika承認(rèn)1997年微軟確實(shí)這么干過(guò),當(dāng)時(shí)微軟對(duì)Windows和Mac兩個(gè)版本的Office代碼是分開(kāi)處理的,但這已經(jīng)不是微軟現(xiàn)在的做法了。Office團(tuán)隊(duì)也已經(jīng)決定不會(huì)采用“最小公分母”路線。用戶還是希望盡可能多地利用最新的、針對(duì)每個(gè)操作系統(tǒng)開(kāi)發(fā)的特定平臺(tái)功能。
Office團(tuán)隊(duì)每個(gè)人都盡職盡業(yè)。他們正在打造一些功能清晰,并且可以自由組合的組件,盡可能采用機(jī)械重構(gòu)的方式,如果不行則采用單元測(cè)試的方法。Zaika說(shuō)重點(diǎn)在于要保證所有功能在所有平臺(tái)上都能同時(shí)運(yùn)行。整個(gè)團(tuán)隊(duì)決不能容忍在任何平臺(tái)上出現(xiàn)自動(dòng)化程度上的倒退,我們正在內(nèi)部對(duì)代碼庫(kù)進(jìn)行大規(guī)模跨平臺(tái)十分嚴(yán)格的內(nèi)測(cè)。
Zaika說(shuō):“如果你做對(duì)了,有一個(gè)遺留代碼庫(kù)將會(huì)是一個(gè)巨大的優(yōu)勢(shì),因?yàn)樗軌蚱仁鼓?‘做正確的事’”。
我們的目標(biāo)是為了維持共同核心的知識(shí)產(chǎn)權(quán)——Office的本質(zhì)——所有的代碼都是用C++編寫,并盡可能多地共享核心代碼。這么做能夠降低文件損壞的風(fēng)險(xiǎn)。在這一核心之上,有一組原生UX應(yīng)用編程接口。Zaika表示Office所有版本的UI件都沒(méi)有使用HTML5,所以沒(méi)有涉及到任何中間層或者自定義框架。該團(tuán)隊(duì)還在打造多個(gè)PALs,這并不是僅僅是一個(gè)大的抽象層或者是不同的仿真層。
Zaika說(shuō)一些技術(shù)如Java,F(xiàn)lash和HTML5的設(shè)計(jì),試圖通過(guò)最大可能降低抽象化水平,或者更廣泛地適用程序編程接口(API),實(shí)現(xiàn)“一次編寫,到處運(yùn)行”的目標(biāo),這聽(tīng)起來(lái)確實(shí)十分不錯(cuò),但最終產(chǎn)生阻抗失配。兼容性和互操作性等等問(wèn)題也相繼出現(xiàn)了。
Zaika說(shuō):“要么你瘋掉,要么操作系統(tǒng)瘋掉。”
相反,如果用Office團(tuán)隊(duì)已經(jīng)構(gòu)建的迷你PAL,這家公司可以滿足OSes支持對(duì)于特定應(yīng)用程序在性能和語(yǔ)義方面的要求。他說(shuō)微軟希望隨著平臺(tái)不斷增加新的功能,這些PAL可以不斷進(jìn)化。除努力設(shè)計(jì)這些特定的功能,線程和其他一些每個(gè)操作系統(tǒng)要求的獨(dú)特限制,他們的想法是創(chuàng)建能夠匹配所有平臺(tái)的API。他表示,這就是為什么微軟會(huì)將建立跨平臺(tái)的AirSpace架構(gòu)作為新的Office設(shè)計(jì)的一部分的原因,這也正是他們的設(shè)計(jì)方式。
有了通用的C++內(nèi)核,瘦UX層與不斷發(fā)展的PAL,微軟可以不那么費(fèi)勁地打造一個(gè)適用于不同操作系統(tǒng)的Office應(yīng)用程序。Zaika引用PowerPoint為例,指出在其數(shù)千萬(wàn)行的代碼中,WinRT/Universal(觸摸優(yōu)先Office版本,我們有些人稱之為“Gemini”)版的Office只有大約4%的代碼是不同的。他表示,如果排除XAML代碼,那么共享的代碼占比高達(dá)98.6%。Zaika還表示,安卓版本的PowerPoint代碼庫(kù)中有95%的代碼都是共享的。
微軟有望在未來(lái)幾個(gè)月里推出針對(duì)安卓系統(tǒng)平板電腦的Office軟件。有消息稱微軟正在私下測(cè)試他們?yōu)閃in32準(zhǔn)備的下一代Office桌面應(yīng)用程序(代碼代號(hào)為“Office 16”)。微軟隨時(shí)有可能放出Office 16的公測(cè)版,但最終版預(yù)計(jì)最早可要于2015年春季才會(huì)面世。傳言稱在2015年春季微軟的首款觸摸優(yōu)先Windows商店/Metro風(fēng)格(通用/WinRT)Office產(chǎn)品將會(huì)正式面市。