上海基诺彩票中奖号码

English [en]   ??????? [ar]   espa?ol [es]   ????? [fa]   fran?ais [fr]   hrvatski [hr]   italiano [it]   日本語 [ja]   lietuvi? [lt]   Nederlands [nl]   polski [pl]   português do Brasil [pt-br]   русский [ru]   укра?нська [uk]   簡體中文 [zh-cn]  

這是針對英文原版頁面的中文翻譯。

JavaScript的陷阱

Richard Stallman

你可能每天都在自己的電腦上運行非自由軟件卻毫不知情——通過使用你的瀏覽器。

網絡管理員:有好幾種方法可以指示網站的JavaScript程序的許可證。

在自由軟件社區,非自由軟件會侵害其用戶的概念大家都很熟悉。有些人會拒絕在電腦上使用任何專有軟件,以此來捍衛自己的自由。還有許多人意識到非自由并拒絕那些程序。

許多用戶知道瀏覽器要求安裝的插件有此問題,因為它們可能是自由軟件,也可能是非自由軟件。但是瀏覽器也會運行不要求你許可的其他非自由軟件,甚至也不告訴你——網頁帶有或鏈接了哪些程序。這些程序多數是用JavaScript編寫的,雖然其他語言也是可以的。

JavaScript(正式名稱是ECMAScript,但是很少有人用了)曾經用于不重要的網頁裝飾,比如可愛但是并不重要的導航和顯示功能。可以認為這些只是HTML標記語言的擴展,而不是真正的軟件,這樣就可以忽略它的問題。

一些網站仍然這樣使用JavaScript,但是有一些網站用它作為完成任務的主要程序。例如,Google Docs會嘗試在你的電腦里下載大約500k字節的JavaScript程序,該程序使用一種我們稱之為模糊腳本(Obfuscript)的緊密格式。這種格式刪除了源代碼里有助閱讀的空格和注釋,并將原來有意義的方法名稱替換為任意的短名稱,這樣人們就無法直接看出這些方法原來的意義。

自由軟件定義的內容包含著用戶可以訪問程序的源代碼。一個程序的源代碼應該是有利于修改程序的形式—包括有利閱讀的空格和分行、解釋性注釋和有意義的名稱。這種緊密格式不是源代碼,而只是毫無用處的源代碼替代品;其源代碼并沒有提供給用戶,因而用戶無法了解該程序;該程序是非自由的。

除了是非自由軟件,許多這種程序是惡意軟件,因為它們嗅探用戶。更惡劣的是,有些站點使用服務來記錄用戶瀏覽該頁面時的所有行為。該服務本來應該“修改”記錄以抹去網站不該獲得的一些敏感數據。但是,即使該功能能夠可靠的實施,該服務的整體目的也是給予該網站它不應該獲得的個人數據。

瀏覽器一般不會告訴你它們什么時候會加載JavaScript程序。有些瀏覽器提供了完全禁用JavaScript的方法,可是即使你知道有問題,你還是需要花很多精力去確認這些非自由軟件并攔截它們。然而,就連自由軟件社區的大多數用戶都不知道這個有問題;而瀏覽器的沉默也好似在掩蓋這個問題。

可以把JavaScript程序發布為自由軟件,使用自由軟件許可證發布其源代碼就行。如果該程序是自給自足的——如果它的功能和目的獨立于它所應用的網站——這就沒問題;你可以將其拷貝到你的電腦,修改它,使用瀏覽器加載它并運行它。但是這并不是其通常的情形。

通常情況下,JavaScript程序會和特定的網頁或網站一起工作,而那個網頁或網站有了這個程序才能正常工作。這就出現了另一個問題:即使有源程序,瀏覽器也無法運行你修改的版本,除非你使用原來的版本訪問特定的網站或網頁。這個效果和tivoization1類似,雖然從根本上不是那么難以解決。

JavaScript不是網站發送到用戶的程序使用的唯一語言。Flash支持用一種擴展的JavaScript語言編程;如果我們有足夠完整的自由Flash播放器,我們就可以對付非自由Flash程序帶來的問題。Silverlight似乎也和Flash一樣創建一些程序,可能更糟,因為微軟使用它作為非自由編解碼器的平臺。自由的Silverlight替代不能為自由世界正常工作,除非它還帶有自由的編解碼替代。

Java小程序2也會在瀏覽器里運行,也就有同樣的問題。一般來說,各種小程序系統都有這樣的問題。創建一個運行小程序的自由環境僅僅是讓我們能夠看到這個問題。

理論上能夠使用HTML和CSS編程,但是實際上它不方便而且受限制;最多只是展示一些令人驚奇的黑客編程技巧。這些程序理應是自由的,不過CSS在2019年還不是影響用戶自由的嚴重問題。

已經有一個強大的運動,它號召網站只使用自由(有的人叫"開放")的格式和協議來通信;就是說,它們的文檔應該公開,而且任何人都有自由來實現。然而,當網頁帶有JavaScript程序時,這個標準就不夠了。JavaScript本身,作為一種格式,是自由的,而且在網站上使用JavaScript并不必然是壞事。然而,正如以上所看到的,它也不必然就是好事——如果JavaScript程序是非自由軟件。當網站將程序轉移到用戶,程序只是由有文檔、不受限制的語言編寫并不足夠;該程序必須也是自由的。“只許把自由軟件轉移到用戶”必須成為網站行為規范的準則。

不動聲色地加載和運行非自由軟件只是"網絡應用"帶來的諸多問題之一。"網絡應用"這一術語就是用來抹殺用戶軟件和服務器軟件的根本區別。它可以指運行在瀏覽器里的特定客戶端軟件;它也可以指特定的服務器軟件;它還可以指和特定服務器軟件緊密協作的客戶端軟件。客戶端和服務器端有不同的道德問題,即使它們如此緊密地協作,以至于可以說它們是一個軟件的不同部分。本文只討論客戶端軟件的問題。我們會分開討論服務器端的軟件。

實際操作中,我們應該如何對付網站上非自由、非平凡的JavaScript程序帶來的問題呢?第一步就是避免運行它。

什么是我們說的"非平凡"呢?它表示的是程度,所以它是指設計一種簡明的標準來獲得好的結果,而不是去尋求唯一正確的答案。

我們目前的標準認為一個JavaScript程序是非平凡的,如果它滿足以下任一條件:

我們如何判別JavaScript代碼是否是自由的?在另一篇文章中,我們提議了一種方法,它指出網頁帶有的非平凡JavaScript程序可以使用風格化的注釋來表達獲得其源代碼的URL,也可以表達其許可證。

最后,我們需要修改自由的瀏覽器,使它們可以探測并攔截網頁上非平凡、非自由的JavaScript。LibreJS程序就可以探測到你訪問的網頁上的非自由、非平凡的JavaScript,并攔截之。LibreJS包含在IceCat瀏覽器中,也可以作為Firefox的附加組件。

瀏覽器用戶還需要方便的工具來指定需要使用的JavaScript代碼,而不是使用網頁上的JavaScript代碼。(指定的代碼可以是完全的替代,也可以是頁面上的自由JavaScript程序的修改版。)Greasemonkey已經快能夠做到這一點,但是還沒有,因為它不能保證在頁面上的JavaScript程序運行之前就做出修改。使用本地的代理可以工作,但是作為真正的解決方案還是太不方便。我們需要構建一個可靠和方便的解決方案,也要構建一個分享修改方法的網站。GNU工程愿意推薦那些只致力于分享自由修改方法的網站。

這些措施使網頁帶有的JavaScript程序變成實際和真正意義上的自由軟件成為可能。JavaScript就不再是阻礙我們自由的特別障礙—就象現在的C和Java那樣。我們將來能夠拒絕、甚至替換掉非自由和非平凡的JavaScript程序,就像我們拒絕和替換那些以通常形式安裝的非自由軟件包一樣。那時,我們就能夠開始讓網站提供自由JavaScript程序的活動了。

與此同時,在一種情形下運行非自由JavaScript程序是可以接受的:使用它來向網站操作員抱怨該網站應該移除JavaScript代碼或者使它自由。請不要猶豫,你可以暫時啟用JavaScript做這件事—之后別忘了再禁用它就好。

網絡管理員:有好幾種方法可以指示網站的JavaScript程序的許可證。

致謝:我感謝Matt LeeJohn Resig,他們幫助我們定義了我們提議的標準,還感謝David Parunakian提醒我關注此問題。

譯注

  1. tivoization,是一種電腦工具,它包含在GPL軟件內但你卻不能修改它,因為一旦發現軟件遭到修改它就會自動關閉。
  2. applet,是一種小程序,可以在特定的環境下獨立運行。
最頂

[FSF 標志]“自由軟件基金會(FSF)是一個非盈利組織。我們的使命是在全球范圍內促進計算機用戶的自由。我們捍衛所有軟件用戶的權利。”

加入 購物

上海基诺彩票中奖号码 太子网站是什么 天津十一选五网上买 易发赌场822 通比牛牛怎么赢 重庆时时采360 中国比特币交易软件 网上ag老虎机怎么一直输 普安县农村干什么赚钱 在县里干什么赚钱 期货分析师是做什么的 免费pk10赛车计划软件官方 重庆老时时采彩开奖 安徽11选5基本走势图彩经网 重庆时时后三走势图 财富半单双中特 红通理财网址