JavaScript物聯網編程:Peter Hoddie和Lizzie Prader訪談

本文要點:

  • 經優化的JavaScript引擎現在可運行在內存低至32KB的低配置嵌入式設備上。
  • JavaScript等腳本語言屏蔽了內存管理等一些容易導致軟件缺陷的底層細節問題,提升了開發人員的效率。此外,JavaScript有龐大的開發人員羣體,使物聯網開發人員的招聘和培訓工作更加輕鬆。
  • Ecma TC53專委會致力於爲嵌入式系統建立標準API。標準化API搭建了各種嵌入式系統硬件間互操作的橋樑,將使硬件製造廠商和開發人員都從中受益。
  • TC53正在推進對輸入輸出、傳感器、網絡、通信、能源管理和顯示等方面的標準API制定。
  • Moddable公司致力於爲開發人員提供工具,支持在低規格微控制器上使用標準JavaScript創建開放式物聯網產品。

鑑於互聯的嵌入式物聯網設備已廣泛用於解決實際問題,軟件架構師和開發人員已逐漸認識到,構建高效的物聯網解決方案需要硬件、固件和軟件的精巧結合。近些年,微控制器已經發展強大到足以運行JavaScript。另一方面,經優化的JavaScript引擎已可運行在內存低至32KB的低配置嵌入式設備上。雖然通常性能最高的做法是使用C語言等對設備進行原生編程,但在許多情況下,生產效率和可維護性上的考慮要勝過對速度的要求。

在比利時Ghent大學研究人員Robbert Gurdeep SinghChristophe Scholliers論文中提出:

“編寫正確高效的微控制器程序,是非常困難和耗時的……使用C語言等底層語言編寫微控制器程序,存在難以調試和維護的問題。”

針對使用JavaScript編程微控制器中存在的機會和挑戰,InfoQ採訪了Moddable公司的Peter HoddieLizzie Prader。Moddable致力於爲開發人員提供工具,支持在低成本微控制器上使用標準JavaScript創建開放式物聯網產品。

InfoQ:請介紹一下Moddable。InfoQ先前曾報道了XS JavaScript引擎,但在我看來Moddable還有更豐富的產品線。

Peter Hoddie:是的,大家已經很熟悉XS了,它是當前唯一針對微控制器設計和優化的現代JavaScript引擎。但XS只是一個出發點,一個引擎還需要考慮運行時。我們爲Moddable SDK創建的運行時中,對包括圖形、網絡、安全在內的每個組件都針對微處理器做了優化,非常適合物聯網產品的軟件開發。

InfoQ:Moddable的未來願景是什麼?在Moddable官網上提到,使用低成本微控制器實現開放性物聯網產品,你們爲什麼考慮聚焦於低端微控制器?請解釋一下你們提出的“開放性”及其重要性。

Hoddie:我們所作的一切,都是以物聯網產品負責人爲出發點。這聽上去很奇怪,畢竟我們的工作是爲開發人員提供工具。

關注產品負責人的表現之一,就是我們聚焦於低端微控制器。我們希望每個設備都能運行很好的軟件,這樣的軟件安全、可靠並易於使用。如果一個產品需要數百美元的硬件才能運行軟件,那麼一切都毫無意義。

“開放性”在我們的行業中已被濫用。我們堅信開放性的基本原則,並基於FOSS(自由開源軟件,Free and open-source software)許可發佈了Moddable SDK。但凡可能之處,我們均做到了開放,並通過ECMA TC39和TC53對開放標準做出了貢獻。所有一切均有利於產品負責人,因爲基於標準構建的產品更加可靠、安全,具有更好的互操作性。

但Moddable的願景並不侷限於此。我們認爲,物聯網產品同樣可以像計算機、電話和服務器那樣對第三方軟件(即App)開放。如果這一理念得以落地,那麼用戶可以輕鬆地更改其產品的功能和行爲。例如,用戶可以更改設備所連接的雲服務,或是選擇完全隔離互聯網的方式運行。要實現該理念,在技術上依然存在許多挑戰。JavaScript解決了其中許多問題,它是一種正被數百萬開發人員使用的開放標準語言。而且在網絡上運行的經歷表明JavaScript具有很好的可移植性,可以運行在照明、冰箱、鎖、手錶等各種設備上。通過安裝App爲用戶的物聯網設備提供更多選項和控制,將改變物聯網領域的遊戲規則。

InfoQ:給我們介紹一些使用Moddable構建的產品實例吧。

Lizzie Prader:如果您最近瀏覽過百思買或Home Depot的家用電器部分,則可能會在無意識情況下感受到Moddable的產品。一些洗衣機、烘乾機、冰箱、烤箱以及更多電器中,已經內置了我們的軟件,爲用戶在顯示屏上提供操作接口、配置運行邏輯、控制運作方式和雲通信。

救護車消毒系統是我們最近正開發的一款產品。該產品使用了六個傳感器,確定何時需要對救護車的內部消毒。一旦救護車處於空置狀態,系統會自動激活紫外線進行消毒。我們的軟件控制着包括傳感器和雲通信在內的整個系統。

我們也正在研究監控設備製造的控制面板,這是我們的首個涉及工業物聯網產品的項目,對我們而言是全新的和有趣的挑戰。我們正在構建的彩色觸摸屏用戶界面,將取代七段式顯示器及各種按鈕和轉盤。這種類型的界面非常便於用戶上手,可以更輕鬆地設置系統和開展操作。

InfoQ:嵌入式系統編程中常使用C/C++,部分原因是出於性能上的考慮。你們爲什麼選擇JavaScript構建Moddable?

Hoddie:根據我們的經驗,使用腳本語言可更輕鬆地構建複雜的項目,包括物聯網產品。腳本語言爲程序員處理了許多細節。一個高效的運行時是與編程語言密切相關的,因此我們必須專注於一種語言。之所以選擇JavaScript,是因爲許多開發人員都瞭解JavaScript。其標準明晰,並且得到測試套件的良好支持。在構建項目時,我們儘可能使用JavaScript。

正如你所提到的,在性能等場景下需要C語言。我們提供了稱爲“XS in C”的API,有效地連接JavaScript和C語言。出於可移植性和安全性上的考慮,用戶安裝的App是完全使用JavaScript實現的。但是設備製造廠商提供的對象則可以按廠商自身的喜好,例如使用C語言爲App提供高性能服務。這類似於在網絡瀏覽器內置了許多原生服務,網頁中的腳本可使用這些服務。

InfoQ:安全性對物聯網用戶是一個重要特性。安全意味着使用該產品不會對用戶或其周邊環境造成有害的影響。Moddable如何爲開發人員應對因引入低規格設備而帶來的風險提供幫助? 我能想到的程序運行問題包括程序超出內存、電池壽命等設備限制,以及一些由於錯誤所導致的程序行爲中斷,例如著名的“undefined is not a function error”錯誤消息。

Hoddie:資源受限系統本身就比較大的系統更安全,雖然這看起來似乎有悖直覺。原因在於較小的系統通常是也是較簡單的系統,因此往往更加魯棒。出錯隱患處越少,開發人員就更容易掌控。

JavaScript的使用也提高了安全性。許多在C語言中常見的編程錯誤,例如忘記釋放內存、緩衝區末尾寫入溢出等,並不會發生在JavaScript中。JavaScript的單線程執行模型也對安全性有一定裨益,它避免出現易於出錯且難以調試的多線程代碼。當然,Moddable SDK仍然可以使用Web Workers API利用多核SoC(如ESP32微控制器)的優勢。

我們對處理異常同樣採取了非常保守的態度,包括你提到的“undefined is not a function error”錯誤。這些異常會導致設備處於不穩定的、類似殭屍的狀態。Moddable SDK設置在發生內存不足、堆棧溢出等意外錯誤時重啓設備。Moddable SDK經優化可在重啓後立刻開始執行JavaScript,這樣設備可在幾毫秒時間內回到安全狀態,使得設備恢復正常。

爲了檢測內存不足和堆棧溢出等資源耗盡問題,我們提供了xsbug調試器,實時顯示資源的使用情況圖。這有利於開發人員可視化地查看產品在開發過程中的行爲,在問題出現之前及時發現。

InfoQ:對一些物聯網產品而言,安全性是另一個至關重要的非功能性要求。不安全的產品可能被惡意行爲者掌控、篡改或喪失功能。Moddable對開發安全的物聯網產品提供了哪些支持?

Hoddie:安全的重要性是大家的共識。但在安全性中存在許多意義尚不明晰的方面。

和許多其它產品一樣,Moddable SDK支持TLS安全通信。不同之處在於,我們使用JavaScript實現TLS。

安全性的另一方面是如何防止第三方篡改固件。該方面上存在多種措施,例如安全啓動等,這些的確是微控制器提供的功能。我們在此上並未做太多的工作。只要硬件支持,那麼就可在產品中使用。
安全啓動等功能就是要將第三方代碼拒之門外。但應謹記,我們的願景是支持第三方代碼進入。我們希望用戶能夠在自己的物聯網產品中自由地安裝所需的應用。因此,我們需要一種支持輸入非受信任代碼、同時確保全系統安全性的方法。

爲此,我們通過TC39的Secure ECMAScript(SES)提案,將安全執行方式引入JavaScript語言標準。SES允許JavaScript在極其輕量級的隔離專區中做沙盒化執行。這將限制已安裝的應用只能訪問部分系統功能。SES的最重要之處在於,產品負責定義安全策略,SES作爲執行安全策略的工具。XS是第一個實現SES的JavaScript引擎,它證明了SES輕量級到足以在連接Wi-Fi的照明設備上流暢運行。

InfoQ:介紹一下TC53委員會吧。它的作用是什麼?爲什麼要額外成立這樣一個委員會?目前推出了哪些規範?還有哪些規範在制定中?

Hoddie:當Ecma國際(Ecma International)首次就TC53諮詢我們時,我的反應和你所提的問題一樣。這世界根本不需要另立一個物聯網標準嘛。

但是大多數物聯網標準都是關於通信協議的,駐足於產品的物理邊緣之外。我們對TC53採用了不同的做法。我們絕對不是去製造出另一個規範,而是去制定運行於產品內部的標準API。產品製造廠商可以使用這些API實現自身的軟件,而用戶通過App安裝API。這些API必須是標準的,這樣應用可運行在多個製造廠商的照明設備、車庫門開啓器或洗衣機上,類似於網頁可運行在多個廠商的瀏覽器上。

TC53規範的優點在於,我們不必操心具體哪種通信協議將主導物聯網。因爲我們可以編寫運行在產品內部的可移植代碼,因此可以實現產品所需的任何協議。

該委員會的正式名稱是“用於嵌入式系統的ECMAScript模塊”(ECMAScript Modules for Embedded Systems)。我們已經擬出了一份涵蓋輸入輸出、傳感器和顯示器的規範草案。其中輸入輸入涵蓋了網絡Socket,它是實現網絡協議的基礎。爲開展實驗,我們給出了一個基於XS的ESP8266微控制器的原型實現。J5e項目(Johnny Five for Embedded Systems)提供了一個很好的例子,它對流行的Johnny Five機器人使用JavaScript框架做了重構,完全使用TC53 IO API在JavaScript中實現。

InfoQ:嵌入式程序的可移植性是通過何種方法實現的?或者說,如何最小化由硬件模塊變化所導致的程序更改?

Prader:這是完全可行的。JavaScript是一種與平臺無關的語言,進而Moddable SDK中的JavaScript API也是與平臺完全無關的。我們的Commodetto圖形庫、Piu用戶接口框架、網絡協議、藍牙低功耗(BLE)、文件和硬件API都是JavaScript實現的。這意味着,使用我們的API編寫的應用,可以在多個目標平臺上運行,無需更改任何代碼。

我們基於TC53定義的API,也是使用純JavaScript實現的。JavaScript API中封裝了硬件製造廠商實施的所有設備相關代碼,應用開發人員不必關注底層細節,只需使用熟悉的標準API編寫JavaScript應用。例如,如果開發人員已經編寫了一個應用,在屏幕上顯示某個溫度傳感器數據。那麼他們無需更改代碼,或只需最少的更改,就能將該溫度傳感器更換成其它任何符合TC53規範的溫度傳感器,或是將顯示器更換成其它任何符合TC53規範的顯示器。

InfoQ:物聯網的快速發展正受阻於哪些痛點?更具體而言,哪些痛點阻礙了JavaScript在物聯網環境中的使用?

Prader:物聯網依然存在很多問題。例如用戶隱私未受充分尊重、各企業的產品自成體系、產品間的互操作受限於製造商、某些產品的安全性堪憂,各類問題層出不窮。簡而言之,物聯網仍支離破碎。Moddable和所有的TC53貢獻者正致力於解決這些問題。我們相信JavaScript語言和建立標準的作用。

然而另一個挑戰在於,如何說服他人首選JavaScript進行嵌入式開發。在過去的幾年中,我在商貿展會、學術會議和技術聚會上與數百人做過交流,大家的反應各異,興奮、冷漠甚至敵對。一些JavaScript開發人員很高興看到自身的編程技能可應用於新的平臺,而其他一些開發人員則不希望開發運行於瀏覽器之外的應用。有一些嵌入式開發人員對學習嵌入式開發的新方法躍躍欲試,而另有部分開發人員則對有人會考慮使用JavaScript之類的語言感到不可思議。我們的嵌入式開發方法相對較新,與經典技術大相徑庭。可以理解它並不會立刻得到所有人的認同。

Hoddie:總而言之,物聯網步入正軌需要很多人的共同努力。我們的工作是爲衆多開發人員創建一種可用於每種物聯網產品軟件開發的普適方法。爲實現擺脫專用API和突破不開放固件的侷限這一目標,JavaScript語言和制定中的TC53規範是很好的工具。

InfoQ:對於那些想要了解更多物聯網相關知識、着手實現第一個嵌入式程序、甚至只是想了解其他人工作的開發人員來說,您能推薦一些好的教學資源嗎?

Prader:大家可以立刻動手開始編寫嵌入式應用。Moddable SDK在GitHub上開源提供,其中給出了150多個應用例子詳細的API文檔。適用於各種硬件平臺的例子不勝枚舉。初學者無需顧慮硬件問題,有支持Mac、Windows和Linux的硬件模擬器可用。

Moddable團隊也在企業博客Twitter上發佈了一些使用Moddable SDK的最新項目。這些項目並非我們一家獨有。

Peter和我剛完成了一本面向開發人員學習的圖書!書名定爲《使用JavaScript開發ESP32和ESP8266微控制器物聯網》(“物聯網 Development for ESP32 and ESP8266 with JavaScript”),現在已可購買。該書不僅適用於着手使用JavsScript編寫嵌入式應用的開發人員,也適用於考慮使用自身現有技能實現嵌入式產品的Web開發人員。

當然,還有很多相關資源。Twitter和博客上有很多專業開發人員和愛好者的工作分享,在視頻網站和會議網站上分享了一些演講者的視頻,還有一些電子郵件通信組和播客。我個人推薦Stacy Higginbotham的電子郵件通信組,她在其中分享了物聯網的方方面面,從芯片到消費產品,從初創企業到行業巨頭,內容詳盡。

受訪者簡介

Peter Hoddie是一位致力於客戶端軟件的工程師和企業家。他以編寫可突破消費類硬件上用戶體驗界限的緊湊高效代碼而聞名於衆。他和團隊開發的軟件已賦能蘋果、惠而浦、Palm、Sling、HP和Sony等公司的大衆消費類產品。Peter認爲,任何產品的首個用戶就是創建該產品的開發人員,他們無法在不穩定、複雜甚至令人困惑的基礎上構建出可吸引用戶的消費類產品。他在上世紀90年代年代領導了Apple的QuickTime開發,併爲MPEG-4文件格式標準的開發做出貢獻。他是Moddable的共同創始人,ECMA TC39代表(delegate),曾任ECMA TC53主席(Chair)。

Lizzie Prader是一位任職於舊金山灣區Moddable的軟件工程師。她致力於使消費物聯網產品對終端用戶更加開放和可定製,是一位從事物聯網領域工作的物聯網懷疑論者(IoT Skeptic)。她專長於爲嵌入式系統開發觸摸屏用戶界面,併爲開發人員創建了多種資源。

原文鏈接: Programming Microcontrollers with JavaScript – Q&A with Peter Hoddie and Lizzie Prader

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