二十多年前,PC 時代演變?yōu)榛ヂ?lián)網(wǎng)時代,人類生活的諸多方面進入了虛擬數(shù)字世界。隨著智能設備成本不斷降低,互聯(lián)網(wǎng)時代即將演變成物聯(lián)網(wǎng)時代,人類的互聯(lián)網(wǎng)生活從虛擬世界走向物聯(lián)網(wǎng)虛實結合的世界。
一個有活力的物聯(lián)網(wǎng)生態(tài)需要數(shù)字貨幣作為潤滑劑,數(shù)字貨幣更需要有活力的物聯(lián)網(wǎng)生態(tài)來體現(xiàn)其價值。即在去中心化背景下,物權的流動和數(shù)字貨幣流動的雙向性。說白了,一手交錢,一手交貨。
區(qū)塊鏈技術使得物聯(lián)網(wǎng)去中心化的征信和交易成為可能。畢竟區(qū)塊鏈技術主要體現(xiàn)在不可更改的“記賬”類應用,比如記錄金融交易,記錄物權資產(chǎn)歸屬。
今天的物聯(lián)網(wǎng)應用大多是有中心的,即移動終端需要借助某個中心網(wǎng)站才能訪問物聯(lián)網(wǎng)設備。用物聯(lián)網(wǎng)加區(qū)塊鏈來實現(xiàn)統(tǒng)一的去中心化應用平臺,我們勢必需要搭建統(tǒng)一的去中心化點對點(Peer to Peer)網(wǎng)絡,覆蓋所有移動終端、物聯(lián)網(wǎng)網(wǎng)關(Gateway)及區(qū)塊鏈節(jié)點。
我們知道現(xiàn)實生活中的書籍、音像游戲光盤也是物,消費者可以私下交易,甚至以物易物。然而在今天的互聯(lián)網(wǎng)電商平臺上,消費者不能購買電子書或者影視作品的物權,只能購買其終生使用權,不可私下交易,也不能贈與。
利用區(qū)塊鏈技術我們可以實現(xiàn)多媒體作品的去中心化物權交易。但如何根據(jù)物權來閱讀、播放、運行這些多媒體解決方案就是個非常有挑戰(zhàn)的話題了。
我們知道運行軟件應用的平臺通常被稱之為操作系統(tǒng)。面對物聯(lián)網(wǎng)加區(qū)塊鏈引出的去中心化應用生態(tài),一個新型的去中心化分布式操作系統(tǒng)技術自然就浮出水面。
Elastos (亦來云)開源項目已經(jīng)在網(wǎng)絡操作系統(tǒng)領域耕耘多年,希望趁著區(qū)塊鏈大潮,做一個開源去中心化的數(shù)字資產(chǎn)物流平臺,服務于眾多區(qū)塊鏈創(chuàng)業(yè)團隊。
以上場景與大家熟悉的瀏覽器、網(wǎng)站模式不同,售貨機和周邊設備沒有 IP 地址,移動終端如何通過設備二維碼與其建立直接的數(shù)據(jù)通道?這就需要一個統(tǒng)一的去中心化點對點網(wǎng)絡,而費用直接記錄在區(qū)塊鏈上。
不通過中心網(wǎng)站,售貨機設備直接向移動終端推送 JavaScript 程序,或者移動終端直接從售貨機下載JavaScript 程序,這兩種情況都是去中心化應用的范例。對于 AR 眼鏡游戲而言,也許因為 JavaScript 語言的執(zhí)行效率太低,也許因為物聯(lián)網(wǎng)應用規(guī)模太大、太復雜,其實現(xiàn)語言或許是 Java,也有可能是 CPU原生指令語言,比如 C/C++。
由于互聯(lián)網(wǎng)上魚龍混雜,惡意代碼、網(wǎng)絡攻擊層出不窮,瀏覽器一般僅允許互聯(lián)網(wǎng)應用采用 JavaScript 語言編寫,在權限嚴格受控的 JavaScript 引擎里面執(zhí)行。
早在 1990 年代初期,Java 語言發(fā)明伊始,其作者針對 1992 年電視機頂盒市場及 1995 年的瀏覽器市場,期望 Java 程序在 JavaVM 虛擬機里面“一次編寫,到處運行”。雖然 Java 語言取得了巨大成功,但由于 Java 語言的執(zhí)行效率、代碼粒度等問題,Java 語言一直無法獨立承擔大型高效應用軟件的重擔,而是借助于 JNI(Java Native Interface)調(diào)用 Windows、Linux 等操作系統(tǒng)原生運行平臺。也正因為此,JavaVM 虛擬機有如漏底的容器,無法完成可控可管的目標。二十五年來“一次編寫,到處運行”的宏偉藍圖付之東流。
至于 C/C++編譯出來的原生目標代碼模塊就更經(jīng)不起推敲:通過郵件傳遞,動態(tài)抓取,實時推送二進制代碼模塊倒是不難,但是誰敢在 Windows 或者 Linux 運行這些代碼呢?病毒傳播、隱私泄露和網(wǎng)絡攻擊隨時可能爆發(fā)。
說到這里,大家不難形成共識:如果要用 C/C++類原生語言編寫去中心化應用,采用傳統(tǒng)操作系統(tǒng)作為運行平臺難堪大用,必須另辟蹊徑。
谷歌公司在其 2016 年 5 月的 I/O 大會上曝光了“即時應用”(Instant App)的研發(fā)計劃,預計在未來一至兩年推向市場。應用點擊運行,無需軟件安裝,無論其是否在本地、周邊,還是云里。從此軟件應用也像萬維網(wǎng)的網(wǎng)頁一樣,沒有版本號,隨時更新。所有網(wǎng)站、云盤上的軟件形成綠色生態(tài),生生不息。
大家容易聯(lián)想到即時應用一定是去中心化的:周邊即時發(fā)現(xiàn)的應用,也就是非本地、非云端的應用。
不像傳統(tǒng)的 Windows 應用跑在 Windows 操作系統(tǒng)上,Android 應用跑在 Android 操作系統(tǒng)上,即時應用的目標運行環(huán)境很難預測。
微軟 Windows 10 操作系統(tǒng)的技術路線及編程模型與 Windows XP 截然不同,號稱支持“通用應用”(Universal App)。同一款應用可以運行于手機、電腦、電視、游戲機、HoloLens 眼鏡等硬件設備,不再區(qū)分 CPU 是 X86 還是 ARM,也支持自動適配各種輸入法。借助云盤作為統(tǒng)一永久存儲,各種設備間可以支持無縫連續(xù)的用戶體驗。
Windows 10 還號稱是微軟最后一款大型通用操作系統(tǒng),即未來不會有 Windows 11。我們解釋一下,一款操作系統(tǒng)適配所有通用計算環(huán)境,而且沒有未來分支,也就是說 Windows 10 不會碎片化。相對于微軟曾經(jīng)同時發(fā)布 WinCE、Win XP、XBox OS、Win Server、XP Embedded 等互不兼容的操作系統(tǒng),均碼的 Win10 顯然更容易適配即時應用。微軟也正在雄心勃勃地進入物聯(lián)網(wǎng)和區(qū)塊鏈等領域。
相比之下,今天谷歌、蘋果、Linux 仍然都有多于一個操作系統(tǒng)發(fā)行版,會使即時應用無所適從。
就事論事,針對物聯(lián)網(wǎng)加區(qū)塊鏈的場景,JavaScript、Java、C/C++等各種編程語言自動適配,模塊之間的調(diào)用無遠弗屆的軟件運行平臺必然是即時應用的不二選擇。
然而物聯(lián)網(wǎng)最大的挑戰(zhàn)就是網(wǎng)絡安全問題。假設傳統(tǒng)操作系統(tǒng)做到完美(沒有后門),再假設傳統(tǒng)網(wǎng)絡做到完美(沒有漏洞),物聯(lián)網(wǎng)應用要大量發(fā)送數(shù)據(jù)包到某個 IP 地址仍舊照發(fā)不誤,也就是說發(fā)起 DDoS 攻擊照舊。傳統(tǒng) OS 補丁加補丁杜絕后門,幾十年補不完,誰相信以后會補完?再說了,前些日子網(wǎng)絡攝像頭攻癱半個美國,前幾天攻癱半個德國,那還是廠家預置密碼沒設好。如果惡意山寨幾百萬 IoT 設備,廉價滲透市場,深喉潛伏,那才真是防不勝防。
我們建議的解決方案是:把 IoT 設備的角色限定為“個人云外設”,并嚴格控制外設不允許上網(wǎng)。也就是說,互聯(lián)網(wǎng)二十多年后的今天,網(wǎng)絡時代又轉回到虛擬 PC 時代,這里虛擬 PC 指的是個人云計算環(huán)境(Personal Cloud)。IoT 設備在個人云里作為 Web 服務運行。個人云就像私人網(wǎng)站,視頻等物聯(lián)網(wǎng)設備服務只能被點播,而不允許向外廣播。
移動終端上的物聯(lián)網(wǎng)應用及個人云上的服務之間的所有網(wǎng)絡通訊(IP 數(shù)據(jù)包收發(fā))都唯一由“作為網(wǎng)絡運營商的新型操作系統(tǒng)”來承接。應用及服務不能發(fā)送 IP 數(shù)據(jù)包,就很難泄露隱私,也很難發(fā)起 DDoS 網(wǎng)絡攻擊。應用及服務運行在類似容器的虛擬環(huán)境里,網(wǎng)絡及系統(tǒng)軟件簽名固化,病毒由應用穿透虛擬機滲透到系統(tǒng)和網(wǎng)絡的難度極大增加。
與即時應用配套的網(wǎng)絡操作系統(tǒng)技術細節(jié)就不在這里講了,只是說個結論,相比上世紀八十年代成熟的UNIX 及其衍生 OS 而言,今天的 OS 技術已經(jīng)有了本質的突破性進展。我們相信這類已經(jīng)成熟,不同公司的產(chǎn)品會在未來三年內(nèi)逐步占據(jù)主流市場。
在區(qū)塊鏈領域,尤其是以太坊社區(qū),互聯(lián)網(wǎng)上幾千臺去中心化連接的礦機組成一臺抽象的計算機,稱之為“世界計算機”。其上運行的應用叫“DApp”(Decentralized App)字面翻譯為“去中心化應用”。復述一下:DApp 就是一個名字,特指世界計算機上運行的程序。
以太坊的定義容易導致新接觸區(qū)塊鏈的傳統(tǒng)軟件程序員誤解。細究起來世界計算機這個名字也容易讓人發(fā)懵。畢竟人們可以用以太坊開源代碼搭建不同的公鏈、聯(lián)盟鏈、私鏈的世界計算機。也就是說,這個世界上可以有很多臺世界計算機。我們認為,其實世界計算機叫“區(qū)塊鏈計算機”既簡單又明確。
這里普及一下計算機行業(yè)背景知識:分布式并行計算效率提高的規(guī)律受制于 Amdahl's law 而不是Moore's law(參見 Wikipedia)。幾千臺比特幣礦機組成的甚至都不是并行計算機,而是各自重復運算和記錄的計算機,其運行效率小于一臺礦機。也就是說,利用上千臺礦機組成的世界計算機來完成“去中心化應用計算”效率非常低下。
世界計算機與我們常見的云計算服務器組成的單臺“虛擬云計算機”目的不同,概念也不同,沒有擴容的可能性。以太坊計劃采用分區(qū)并行等方法加速區(qū)塊鏈讀寫速度,目的是為了打造一臺更快的,作為不可更改數(shù)據(jù)庫的世界計算機。云計算擴容是為了增加所謂“彈性”,同時運行更多分布式用戶虛擬機,以提高計算效率。
既然世界計算機概念上是單臺計算機,其上運行的 DApp 雖說是在去中心化的幾千臺礦機上重復運行,但概念上也只是 DApp 一個接一個批量串行執(zhí)行。單臺計算機上運行單個應用,那么“去中心化”概念從何談起?因此“世界計算機上運行 DApp”的說法值得商榷?!皡^(qū)塊鏈計算機上運行智能合約”概念上干凈利落。
兩位普林斯頓大學博士生于 2014 年創(chuàng)建了 Blockstack 項目及社區(qū),該社區(qū)目前號稱是區(qū)塊鏈領域里面非金融類應用最大社區(qū),有六萬粉絲,幾十位開發(fā)者。他們的目標是“打造一個新的去中心化互聯(lián)網(wǎng)”,后面還會有更詳細的介紹。Blockstack 社區(qū)里說的“去中心化應用”(Decentralized App)的涵義并非以太坊社區(qū)的定義,而是更接近谷歌“即時應用”的概念。
即時應用跑在去中心化的分布式計算平臺上,即在區(qū)塊鏈計算機以外的計算機上執(zhí)行,俗稱在鏈外完成。
重復式計算在區(qū)塊鏈計算機上執(zhí)行,俗稱在鏈內(nèi)完成。區(qū)塊鏈計算機的目的起碼有三個:互聯(lián)網(wǎng)標識征信及溯源,人為制造虛擬數(shù)字資產(chǎn)稀缺,智能合約充當“機器人中介”。
目前常見的區(qū)塊鏈礦機運行 Linux 操作系統(tǒng),各自獨立保存一份區(qū)塊鏈總賬的副本。Linux 之上覆蓋一層負責廣播需要記錄交易事物的點對點(P2P)網(wǎng)絡。共識及獎勵算法運行于 P2P 網(wǎng)絡之上;承載智能合約的虛擬機也運行于 P2P 網(wǎng)絡之上。正是這個特殊定制的 P2P 網(wǎng)絡在概念上抽象定義了區(qū)塊鏈計算機。
由此我們聯(lián)想到上世紀九十年代初期,美國升陽(SUN Micro)公司提出的“網(wǎng)絡作為計算機”(TheNetwork is the Computer)的概念——區(qū)塊鏈 P2P 網(wǎng)絡使得多臺礦機形成單臺區(qū)塊鏈計算機。
區(qū)塊鏈計算機支撐去中心化的記賬類(比如金融、保險等業(yè)務等)智能合約應用獨領風騷,但要運行多媒體虛擬數(shù)字資產(chǎn)(比如播放電影)及物聯(lián)網(wǎng)事物處理(比如智能鎖的開關)卻無能為力。
在互聯(lián)網(wǎng)上點對點播放去中心化的數(shù)字媒體技術早就不是新聞——BitTorrent(即常說的 BT 下載)就是典型的代表。視頻直播,互聯(lián)網(wǎng)電話(VoIP),Skype 聊天,個人云盤,家庭監(jiān)控攝像頭等常見互聯(lián)網(wǎng)產(chǎn)品中也普遍采用了點對點的去中心或弱中心(中心只是在連接時輔助)軟件技術。
不論是 ZigBee、藍牙,還是 WiFi 物聯(lián)網(wǎng)設備都需要借助網(wǎng)關(Gateway)或者路由器來訪問互聯(lián)網(wǎng)。這些網(wǎng)關、路由器通常也是運行 Linux 的智能設備。
結合前面提到的“網(wǎng)絡作為計算機”的概念,我們建議利用統(tǒng)一的點對點網(wǎng)絡覆蓋移動終端、家庭網(wǎng)關及區(qū)塊鏈計算機的礦機節(jié)點,形成單臺“物聯(lián)網(wǎng)加區(qū)塊鏈計算機”。去中心化終端上跑的應用,以及去中心化的云盤上、網(wǎng)關上跑的服務等,我們都視其為“物聯(lián)網(wǎng)加區(qū)塊鏈計算機”上支撐的虛擬機里運行的程序,見上圖。
就像互聯(lián)網(wǎng)或者電訊網(wǎng)絡一樣,所謂點對點網(wǎng)絡是由許多不同的 P2P 協(xié)議組成。手機短信、電話、視頻等功能分別由不同網(wǎng)絡協(xié)議完成。公路、電梯、高鐵、室內(nèi)、室外的網(wǎng)絡優(yōu)化也都各有千秋?;ヂ?lián)網(wǎng)上TCP/IP、UDP、HTTP 等協(xié)議就不多說了。去中心化的點對點網(wǎng)絡也會碰到這些狀況,目前區(qū)塊鏈礦機基本雷同,都是通過網(wǎng)線連接,都是發(fā)送特定長度的消息,由此推斷區(qū)塊鏈計算機的網(wǎng)絡優(yōu)化策略不會太復雜。
我們再建議,智能家居網(wǎng)關后面的那些物聯(lián)網(wǎng)傳感器、攝像頭等都作為“物聯(lián)網(wǎng)加區(qū)塊鏈計算機”外設,見《通用應用一節(jié)》的圖示??破找幌?,計算機外設是不能直接上網(wǎng)的智能設備,比如鍵盤、鼠標、打印機、投影儀等。不能上網(wǎng)的設備就安全,不會泄露隱私。運程終端借助家庭網(wǎng)關等結點,通過去中心化的Web 服務來訪問物聯(lián)網(wǎng)“外設”,比如家庭監(jiān)控攝像頭不允許直接發(fā)送 IP 數(shù)據(jù)包到互聯(lián)網(wǎng)(外網(wǎng)),而必須在家庭網(wǎng)關上作為 Web 服務被點播。
提出物聯(lián)網(wǎng)加區(qū)塊鏈計算機概念的目的只有一個:安全。畢竟金融無小事,物聯(lián)網(wǎng)平臺涉及各種千奇百怪的硬件及業(yè)務組合,諸多安全隱患的場景要比區(qū)塊鏈平臺復雜太多了。
OS 運行庫沙箱是安全屏障,網(wǎng)絡托管運營安全保證。
開源才有公信力。不崩潰,自主運行的區(qū)塊鏈計算機是物聯(lián)網(wǎng)生態(tài)的基礎。
目標宏偉,缺了點對點網(wǎng)絡及 OS 運行庫沙箱等兩個必要環(huán)節(jié)。保障即時應用可以溯源,保障應用的虛擬運行環(huán)境可以溯源,保障使用即時應用的消費者(無論是否匿名)的錢包可以溯源。應用溯源包含了虛擬數(shù)字資產(chǎn)和物聯(lián)網(wǎng)硬件設備上的代碼執(zhí)行。
JavaScript 類腳本語言、Java 類中間代碼語言、C/C++類原生 CPU 指令語言之間自動橋接。
類 Android 編程模型方便程序員編程,極大增進去中心化應用的生態(tài)繁榮。
軟件復制成本接近于零,數(shù)字世界物質極大豐富。區(qū)塊鏈輔助人為制造數(shù)字資產(chǎn)的稀缺性,使虛擬數(shù)字商品具有價值,杜絕互聯(lián)網(wǎng)時代的巨無霸操縱價值。
(審核編輯: 林靜)
分享