有一部安潔莉娜裘莉主演的動作片 SALT 正在電視上重播, 原本我看到 SALT 就只會想到鹽, 現在又多了一個聯想. 而前陣子看到的 NaCl 則是另外一個.
NaCl 不就是鹽巴嗎?嗯, 只怪老外喜歡搞頭字語, NaCl = Na + Cl = Native Client. 不過 NaCl 這個詞太基本了, 不用 NaCl + Native Client 幾乎 Google 不到它技術名詞的這個版本. 換言之, 不知道它原來的意思就 Google 不到, 這真是太有趣了.
NaCl 是由 Google 提出的技術, 類似 Microsoft 的 ActiveX, 使得瀏覽器 (的 Client) 能夠直接執行一些機器碼 (Native) 來加速. 大家還記得 ActiveX 有時是病毒偽裝而成的, 所以瀏覽器只得常常跳出一個視窗來問我們是否允許執行這個 ActiveX.
NaCl 的作法是採用固定長度的指令集, 比方說只用 16 或 32 bits 長度的指令, 不是這個長度的指令就不准用. 這樣一來, 短短的 b (branch) 或是其他控制流程的指令就不合 NaCl 的規則, 而無法被執行. 在 CISC 指令集中只採用類似 RISC 的指令, 當然會拖慢執行的效率. 不過據說影響不太大. 畢竟 Native 表示該電腦的機器碼, 本來就比較快.
此外, NaCl 刻意選用記憶體區段的方法, 把 NaCl 的程式碼侷限在一塊獨立的記憶體中運行, 就像用 Visual Studio debug code 一樣, 在沙盒 (or 沙盆, 原文是sand box)中怎麼玩, 都不會影響到主記憶體的行為. 這也是防毒軟體常用的技術, 把某個有嫌疑的程式放到沙盒裡面執行看看, 如果它有不軌的行為, 就可以判斷它是病毒.
至於為何叫做 sand box 技術, 令人不得不聯想到貓咪. 貓咪只會在沙盆裡面便便, 具有隔離的效果, 哈!
[Ref]