為何要選擇自由軟體授權你的 JavaScript 等前端程式碼

This content is over 13 years old. It may be obsolete and may not reflect the current opinion of the author.


昨天和人討論事情又提到所謂「HTML5 的安全問題*」這個老梗,整理一下寫下來:

為何要選擇自由軟體授權你的 JavaScript 等前端程式碼所構成的 client-side web app?

答案對我來說很簡單:

  1. client-side web app 活在瀏覽器上,Javascript 等所有程式碼都是明碼下載下去執行,不會被編譯。
  2. 當然你可以用 compressor 做 obfuscation,但 compressor 再厲害也只能做 dead code removal 和重新命名變數。Beautifier 可以很容易的復原除了變數名稱以外的所有東西。程式的邏輯本身是不會被保護的。
  3. 如果程式是用 GWT 等工具撰寫,前端程式碼也會面臨一樣的問題。
  4. 就算人家看不到,天底下哪有什麼不能用 black box testing 重建的程式?假以時日總會有人山寨出來。
  5. 因為技術上做屏蔽不可行,所以在授權上去標示著作權所有抄襲必究只是防君子不防小人。
  6. 而防君子這件事情一點好處也沒有 … 妨礙了自己的技術被認可的機會,也阻礙整體的技術發展。

所以基於商業方法要做什麼技術考量的話,我的建議是:

  • 程式的主體、架構、流程還是可以放在 client-side。現在有很多很棒的 library/framework 可以幫忙這件事情,像是 jQueryModernizrbackbone.js。尤其別忘了善用 History API。
  • 如果有什麼獨家演算法需要保護的話,請用 server-side script 實作,放在 server 上用 API 的方式提供。但代價是伺服器的 CPU 與流量。
  • client-side 的 API wrapper,甚至是完整的 client 程式本身,都可以用自由軟體授權(像是 MIT License)放出去。理由如前述。
  • 如果你的 server 端服務真的如此獨家又有價值的話,把 JavaScript 包成 API SDK 放出去,反過來增加他的價值。公司甚至可以用 API 用量賺開發者的錢!Google 有許多 API 就是用這種方式提供的,免費提供,超過流量收取費用。
  • 其實不算安全問題而是商業方法問題。只是大家都覺得 code 被看光叫做不安全。