nw.js作者Roger:找到正確方向比怎麼做更重要

2009年,Node.js橫空出世,JavaScript終於突破了瀏覽器,可以在不同的平臺上處理各種各樣的任務,但當時,人們還只是拿它作爲Web服務器或者前端開發工具來使用。到了2011年,有個人突發奇想,既然Node可以運行在不同的桌面上,爲什麼不拿它來開發桌面應用呢?於是,node-webkit(後改爲nw.js)誕生了。到今天,用JS開發桌面應用已經是從創業公司到巨頭的共同選擇。

這個人就是Roger,今天,我想和你聊聊他的故事。

從中科大到英特爾

Roger原名王文睿,老家在遼寧大連,1996年進入中科大後一直讀到博士畢業。在上課和研究期間,他第一次接觸了Linux,第一時間就產生了濃厚的興趣。最開始,他只是在學校BBS的Linux版面上活躍,在上面交流和回答其他人的問題。和其他熱衷Linux的同學熟悉以後,他開始組織線下的活動,包括一些現場的講座和交流,以及LUD(Linux User Diner)聚會。當時學校向他們提供了定期場地,後來,在2003年他和其他小夥伴們註冊成爲了學校正式的社團,這就是中科大LUG(Linux User Group)的由來。

2005年,Roger博士畢業,進入了英特爾,並且一待就超過了十年。

很多人可能以爲英特爾就是個做芯片的公司,但實際上,英特爾的軟件和服務部門有幾千名員工,加上其他部門從事軟件開發工作的人員,規模和一個大型的軟件公司相當。所以在內部可以爲工程師提供各種領域的工作機會。

在英特爾,Roger待過不少的項目組,從開發虛擬化和應用移植的方案,之後在開發者工具產品部門和開源技術中心任職,參與Java XML性能庫、MeeGo和Tizen操作系統等多個系統和軟件開發項目。

Roger很喜歡英特爾的工程師文化的工作氛圍,英特爾會不斷追求前沿的技術以保證自己業界領導者的地位,因此員工都有機會學習和參與到業界最新技術當中。


(業餘時間裏,Roger除了研究業界技術動態以外,還喜歡美劇、遊戲和足球等活動。最近喜歡研究廚藝,他說,做菜和喜歡的編程有很多相似之處。)

現在,Roger的工作很大一部分與開源相關,他每天仍然會寫代碼,也一直在維護知名開源項目nw.js。他認爲如果樂於不斷學習新知識,並且樂於以更聰明的方式工作,編程會是一項非常理想的工作。

NW緣起:MeeGo和Tizen的Web Runtime

MeeGo和Tizen是基於Linux的移動操作系統,它們是英特爾、諾基亞和三星帶頭髮起,曾試圖作爲Android和iOS的挑戰者,類似的操作系統還有Mozilla發起的Firefox OS。它們的特點是基於html5等web技術編寫應用,鼓勵跨平臺的開發生態環境。

但是,這些嘗試都失敗了,Web技術編寫移動應用在當時還不成熟,功能和性能都有所欠缺,移動設備和網絡的性能低下,也無法給Web應用提供良好的體驗。

從2009年開始,Roger所在的團隊當時的工作是給這些移動操作系統開發Web Runtime,即讓這些Web應用跑起來的核心引擎。其中一項主要的任務就是拓展它的本地API,比如操作本地文件、使用GPS傳感器等,以實現和原生應用同樣的功能。

對於如何實現這個功能,項目裏的同事有不同的想法。Roger在會議上和同事討論時,他起初是想利用Mozilla的js-ctypes這樣的項目,可以讓JavaScript方便的調用任意C語言的代碼。不過這個想法並沒有被採納。

後來英特爾開源部門開展了創新計劃活動,工程師可以花10%的時間投入在自己的項目上,Roger又想起了這個想法。那時候Roger正好瞭解到node.js這個項目,感覺用它來擴展本地的API是最好的選擇——它擁有足夠的能力,而且JavaScript開發者很熟悉Node.js的API,它正好也處於起步階段(當時的Node.js平臺上有大概4000多個軟件包),很受歡迎。Roger想到了將兩個項目集成在一起,這樣web開發者就可以在web頁面中直接調用Node.js平臺的衆多庫。

說幹就幹,Roger很快開始了編寫代碼,第一個實現的版本是基於webkit和Node.js,命名爲node-webkit,經過了公司內部的開源流程後於2011年底在GitHub上發佈,並在Node.js社區的郵件列表裏宣佈。由於它實現了一種新的編程方式,並且開發者不需要學習新知識就可以直接開始使用,在社區裏得到了很好的反響。

公司的其他部門也對這個項目產生了興趣,甚至有些人開始用它開發產品,後來公司也表示了進一步的支持,同意他用50%的時間來開發這個項目,過了一段時間以後又同意他招收一個實習生來一起工作,他在項目的郵件列表裏發佈了職位,不久後他收到了趙成的簡歷。

趙成以前曾經把gtk庫的一些功能包裝給Node.js使用,毫無疑問這是一個能力很強的小夥子,Roger很快接納了他,兩人一起對NW做了改進,後來趙成成爲當年的英特爾最佳年度實習生之一。

趙成本有機會留下來,但他最終還是選擇離開,在2012年12月,他給GitHub做外包開發,嘗試將Atom從嵌入式Chromium框架和原生JavaScript遷移到NW上來,由於項目的特殊性,移植困難重重,並導致最終誕生了Atom Shell項目(即後來的Electron),這是和NW類似,同樣用Web技術開發跨平臺桌面應用的工具。

隨着NW和Electron的推動,使用Web技術開發桌面應用的技術終於徹底流行開來。

NW的現在

NW上一次最重要的改進是在2016年發佈的0.13版本,它的內部進行了一次重構。經過這個版本以後,NW的軟件質量有了不少提高,並且也能按時跟隨Chromium發佈新版本。對於這類項目來說,升級Chromium代碼非常重要,因爲NW發佈的軟件代碼中,99%都來自Chromium項目。每次Chromium升級都會修正大量錯誤,包括幾十個安全補丁,同時提供最新的Web標準、新功能、新硬件支持和性能改進。這次重構也是以後很多的工作的基礎。

NW的大部分代碼來自於Chromium和Node.js兩個項目,Roger和其他貢獻者編寫的那部分採用了MIT授權,加上Chromium和Node.js項目的開源授權,所以任何人在這些授權下都可以將這個項目商業化。對商業化的友好,導致後來出現了一些下游的商業化項目,例如 tint,以及集成和重新發布了NW的其他開發工具,例如Construct2。
 
現在,NW能夠定期跟隨Chromium和Node.js發佈最新的版本,軟件質量也有了不少提高。使用NW開發的軟件也越來越多,典型的有微信小程序開發者工具。

NW創立了使用Web技術開發本地應用的一種新模式,應用程序使用Web技術開發,容易開發出漂亮的用戶界面,並藉助Node.js平臺的強大功能;同時對想開發本地應用的公司來說也比較容易找到開發者;已有的網站代碼也易於複用。未來希望借這個項目推廣這種開發模式,讓越來越多的應用使用這種技術開發。或許它會成爲Java runtime或者 .NET runtime這樣應用廣泛的技術。

但同時Roger也認爲,NW這類技術仍然有很長的路要走:首先是性能需要進一步優化,如果能佔用更少的內存、對用戶輸入響應更快的話,體驗會更接近原生應用;另外Web平臺的快速演進和穩定性對應用開發者也是一大挑戰:目前,依賴Web運行時的應用需要不斷維護以應對瀏覽器升級,例如Chrome 66版本中 autoplay 策略的變更就使很多網站不能正常工作,直到 Chrome 71 中才採納開發者的意見實行了一個折衷方案。

Roger樂於看到Electron的發展,他希望Electron能夠和NW一起,推動這個領域不斷的擴大和發展。對應用開發者來說,同時有兩個選擇,並且它們之間相互促進發展是比較理想的情況。

經歷了MeeGo和Tizen的失敗,以及NW的成功,讓Roger認識到:知道什麼是正確的事,比知道如何高效的做某件事重要的多。它會讓你少走許多彎路,效果遠高於延長工作時間和提高工作效率。雷軍有句名言也表達了類似的意思,只要不走到只知道空談的另一個極端,找方向值得你花更多的時間。技術人在選擇技術和規劃職業道路時也同樣適用,希望Roger的經歷和他的感悟能給讀者一些參考。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章