2015年6月27日 星期六

從MoPtt事件認識自由軟體

前些陣子發生了現稱的MoPtt事件,大抵就是手機Ptt瀏覽器MoPtt會過濾掉對手JPtt的簽名檔'Sent from JPTT on',也有鄉民把MoPtt的Java 嘔吐物打開來檢視,發現的確有過濾的程式碼,只要是該文字開頭該行(還是該文?)就會直接消失:
if (!flag && !s.trim().startsWith("Sent from JPTT on")) goto _L5;
else goto _L4
_L4:
return;
_L5:

其實這件事整體來看沒什麼大不了的,會鬧大比較像是MoPtt作者危機處理的問題,大部分人擔心的,都是所謂的「見微知著」:如果今天可以屏蔽一行,明天能不能屏蔽特定詞彙?

我們可以從這個事件來認識一下所謂的自由軟體(Free Software)的理念。

自由軟體是Richard Stallman 這位Hacker所創立(我還記得在黑客列傳:電腦革命俠客誌他被列在最後一章:最後的真正黑客),最重要的GPL授權,大抵上保障了每個使用者可以自由取得軟體和它的原始碼、複製、修改、再發行的權利

現今大部分的軟體都是直接包裝執行檔,這樣的情況是可以隱藏一些實作的細節。
例如,如果我們天天使用的M$ word,裡面其實有一個監控子程式,會在存檔的時候把你打的文件保留下來,在你連網的時候傳送給政府?或者你的瀏覽器會像中國的防火長城一樣擋掉關鍵字,把你的瀏覽歷史記錄下來送給警察局?

古老一點的信件審查,我們可以透過朋友轉送;禁止公開演講我們可以選擇私下演講;可是軟體不同,它已經深入我們的生活,軟體本身隱誨、編譯過後的特性又讓逆向工程、替代方案、注意到被監控不像實體生活這般簡易,這次的MoPtt事件也是在偶然之間被糾出才會爆發,事實上這樣的行為持續了多久根本未知。
為了防止這樣的權利被軟體工程師壟斷,編輯、編譯軟體的權利應該釋放到每一位大眾的手中,所謂「陽光是最好的消毒劑」,軟體的實作應該公開在所有人面前,使用者可依自己的需要去編譯自己合用的軟體,如果MoPtt會擋掉特定詞彙,我們應該要有能力修改它,弄一個YAMoPtt(應該有人知道這什麼梗XD)
這也是為何Richard Stallman開始了gcc計劃,讓每個人都有自由的編譯器可以使用

我的同學盈志大神對這個事件的看法是這樣的:「這種程度的言論過濾我認為是可以接受的,這就跟某些電視台不報其他家電視台的新聞一樣沒什麼大不了的,況且又不是完全沒有其他的程式可以看ptt……如果只是商業利益考量我認為完全沒問題」
我的看法正好相反,這樣的行為其實跟過去報紙審查或是把書本關鍵頁面塗黑其實是類似的,而且更加可怕,以前你會看到書本是黑的,你會知道有某些東西不見了,軟體的審查卻是無影無蹤,除非,軟體自由開放大家檢驗。
誠然我們有其它軟體可以選擇,但難道我們可以說老三台時代的人們都有選擇,所以他們都有言論自由?又如何去定義「只是商業利益考量」呢?想要進入中國市場而擋掉特定文章算不算「只是商業利益考量」?我支持所謂「防微杜漸」說,自由該是努力守護的目標,而非苟且接受已有的現實,如果我們要一個理想的自由社會,我們就需要能夠讓人人守護自由的環境,無從妥協。
一個對照組就是我同學qcl做了它的qclean 插件,它會擋掉Facebook廣告,但它會公告周知實作方式:
https://github.com/qcl/QCLean
這確保了,雖然被屏蔽,我們還是能夠選擇的自由。就如在NSA事件爆發時,有人資疑windows跟openBSD裡面可能藏了FBI的後門,FreeBSD的原始碼立即被開發者們檢視,但windows的使用者卻無從選擇,他們的言論自由可能正受威脅,如果我們無法接受書籍審查、任意登門搜察,就應無法接受非自由軟體。

有了自由軟體,才能往下談資安、隱私、自由,其餘都是免談。

這也是我為何認為自由軟體的理念其實比開放原始碼更為崇高、範圍更廣,它的目的是要確保未來,每個人可以保有珍貴的言論、隱私 ,人類的歷史以成千上萬的人命作祭品召喚了言論自由,不該斷在軟體的執行檔下,如果想要進一步了解自由軟體,歡迎到自由軟體基金會和Gnu官方頁面,我一時之間找不到相關中文文件:
http://www.fsf.org/
或者可以參考洪朝貴教授的網站http://people.ofset.org/~ckhung/a/c_83.php
有更多深入的內容。

MoPtt事件相關記錄:
http://zh.pttpedia.wikia.com/wiki/MoPTT%E5%B1%8F%E8%94%BDJPTT%E7%B0%BD%E5%90%8D%E6%AA%94%E4%BA%8B%E4%BB%B6%E8%88%87Mo%E4%B9%8B%E4%BA%82

2015年6月16日 星期二

駭客與畫家:電腦世紀的大觀念

這本書是當兵前傳說中的 jserv 大神送的,雖然說當兵有很多零碎時間,但能利用的時間不太多,19 天也才差不多看完這本書。
作者paul graham 是位程式設計師,創立了第一個提供網頁端服務的新創公司viaweb ,後來被Yahoo 收購轉變成yahoo store,他同時是Y combinator 的共同創辦人

內容沒什麼主軸,序言也自承各章間沒有關係,比較像作者寫的散文集,介紹他的想法、viaweb 的運作…,可以從字裡行間看出作者對網際網路獨到的眼光,例如本書寫在2004 裡,可是它仍精準的預見了網路應用程式的興起:「『我的電腦』這程概念正在遠去…我們應該能透過任何電腦取得我們的資料」、「用戶端不應該儲存資料,應該像是電話一樣…資料和應用程式都不需保存於用戶端」、「如果微軟的應用程式只能用在某些用戶端,競爭者將能藉由提供其他用戶端所需的版本而取勝」
對照現今的dropbox, chromebook, 行動裝置,幾乎都預測到現今的科技走向,作者也用viaweb 的營運來解釋網站型應用程式的特性,包括滾動式的出貨更新、極低的營運成本、小程式的組合而非單一大程式、為了在競爭中取勝而被迫無時無刻工作,如果是相關領域的人一定會看得猛點頭。

後面有一大部分則用來抒發作者對於「程式」這樣東西的看法,作者本身就是程式語言設計師,專精的語言是Lisp(他甚至設計了一個Lisp 的方言),書中對Lisp 的先進特性著墨許多,他覺得學Lisp就算用不上,也能鍛鍊自己對程式的想法,或許之後應該利用下部隊的閒暇時間來學習一下傳說中的危險剃刀。

依作者的看法,他認為理想的語言應該有下面這幾個特性:
  • 可以很快用很短的原始碼完成雛型產品,不需慢慢堆出成品
  • 可以快速分析原始碼,找到需要最佳化的焦點
  • 夠直覺,可以輕易上手,不需要長篇大論的使用說明
  • 核心夠小而且強大,不對使用者作出額外限制

當然不用說Lisp 應該是作者理想語言的首選;以我個人的觀點,我認為python 是目前最符合這樣描述的語言,但新的語言不斷出世,時時刻刻都要保持學習的心情,就像作者警告的:你學會一種語言,你會用那種語言在思考,於是你只會覺得其他語言只是「多了一些不一樣的語法,可以達到相同功能」的語言,卻會忽視了其他語言的強大之處。

整體來說,這本書還是可以看,不過我覺得不太需要太過認真,選幾章看起來有趣的章節讀就好了,不過話說回來這本書好像已經絕版了,只能看網路上的電子全文了:

相關資料:
paul graham 的個人網頁
viaweb條目:

噢,附帶一提,這本書裡面錯字其實不少,而且依據錯字錯的方式,我認為翻譯的人可能是用嘸蝦米輸入法,像是運算(ZMR)變成運些(ZFR),決定(NEZ)變成決正(EZ)