星期六, 9月 29, 2007

BSD版權真正的敵人是GPL吗?

我下的果然是聳動的標題 :X

不過這陣子來Theo de Raadt (正反評價兩極化的openbsd hacker)對GPL的抨擊可以說是將沈睡已久的聲音再吶喊出來.
關於這件八卦有興趣的人其實可以在網上搜索一下,應該可以查到不少消息. 所以我只發表一下我無聊的感想.

一直以來信仰GPL的人們對於BSD license的評價就是以BSD-like版權放出的程式有機會被大企業給偷盜,然後變成close sourced的商業軟體. 所以最好自由軟體都使用GPL license才不會有問題.

簡而言之以GPL信仰者的觀點就是:

GPL --> 正義的一方
商業公司,closed source --> 邪惡的一方
BSD --> 爛好人,鄉愿

不過以BSD版權使用者的觀點來看, 似乎就不是這樣了.

大部份使用BSD版權釋出的軟體, 在實務上即使是被公司當作是closed source軟體販賣, 這些公司經常仍會回報patch給原本的團隊或作者. 此外, 增加使用的人數並真實的在商業上運用也有助於程式的測試改進.

所以公司或商業化的軟體 就算沒有幫助 基本上對BSD版權的危害並不如GPL的信仰者們所說的大.

而如果有人將軟體做了一些改進, 並用GPL版權釋出, 結果會變成怎樣呢?

今天舉個例子,比如說如果某個原本是用BSD版權開發的blog軟體,被某個GPL信仰者做了一些改進,並且改用GPL版權釋出. 這會造成原本都是自由軟體的使用族群分散之外, 另外如果新的修正是基於GPL版本的blog做的修正, 原本的BSD軟體就不再能拿回來用了. 因為新的修正會受到GPL的影響. 不得不變成一個GPL patch.(任何基於GPL衍生的程式碼均得為GPL授權), 知道這樣的嚴重性了吧, 也就是說GPL比封閉軟體還狠, 作完自己的修正之後不僅要奪走BSD版權的軟體現在的顧客,還要剝奪未來原本BSD可參考改進的程式碼, 變成只剩GPL-only授權釋出的程式有做修正. (當然 可以請求每個patch的原作者再用BSD版權釋出,然後再基於這個patch再做修改,不過在實務上似乎很少能做到如此)

Theo事件的導火線也在於此, linux people將BSD/GPL dual license的driver版權宣告拿掉, 然後re-license成GPL. 拿掉別人原本的版權宣告沒有任何問題吗? GPL people認為是沒有的, 總而言之 為了GPL people相信的正義 是可以犧牲BSD people的, 即使以後所有在linux上的driver的code patch都不得不為GPL, BSD版權的人們一點都不能拿來用也無所謂, 非我族類, 其心必殊.....

所以說... 就算theo過去怎樣怎樣 這次我覺得他講的倒有點道理... gpl 信仰者們, 也許BSD對於你們是異教徒, 但, 所謂自由軟體的正義真的是只有一條道路吗? 刪掉別人的雙版權宣告, 然後改成GPL only 真的是那麼的正義那麼理所當然吗? 我想值得再思考思考.

星期一, 9月 24, 2007

很有想法的gimp !?



看了Digg上這篇文章之後, 才發現gimp建圖檔時可以選衛生紙這個選項~~
試了一下還真的哩...

喔 這個概念真不錯 不過我家印表機可能印不出來吧....
還是美國的衛生紙現在改用 Double A材質了 ??? XD

星期五, 9月 07, 2007

[rant] 下禮拜要教招了~~

不知道國家找我這種沒戰鬥力的文官去幹嘛~~ 我當兵都在寫公文跟當客服處理客訴啊~~
哪會作啥戰...
還要去屏東某營區一個禮拜~~ 禮拜天早上就得出發~~
唉唉~~ 真不想去~~
我是很愛好和平的啊~~ (其實是不爽錯過一個禮拜的新番 Arrrrrgh~~ XD)

祝我平安歸來吧~~

[link] A Taste of Haskell 觀後小感

Part I
Part II
Slide

這兩部影片是在OSCON2007裡Simon Peyton-Jones的Haskell演講, 其實已經隔了一段時間, 今天晚上才一時興起去看,

因為知道是Microsoft Research裡的Haskell創造者之一,
原本是預期一個長得鬍鬚長長的老頭 然後開始講一些誰都聽不懂的玄學...
不然應該至少要長得像星際大戰的尤達吧~~

結果看了影片之後發現根本就大錯特錯... 大師不僅可以把玄學講成簡單的道理,
長得還比較像歐比王跟魁剛金...
連我都似乎開始有點聽懂了 @@ (雖然說這肯定是大師的催眠術)

Haskell最大的賣點不僅在於他是一個純粹的functional programming language,
更重要的是Haskell還帶有非常多在其他語言看不到的高等特性,包括惰性(laziness),型態類別(type classes), monads等等, 而這些特性將有可能會強烈的影響到我們下一個世代的程式設計語言.
也因此在諸多語言裡面也慢慢可以看到Haskell的色彩, 包括Simon Peyton-Jones所提到的C# 3.0, (LINQ據說是受到monads的直接影響), 還有python2之後的list comprehension等等都是例子,我覺得這些特性應該會慢慢的從Haskell中被帶出來讓世人所熟知.

(對了 講到python, lambda,map,filter都還在python 3.0a的builtin/keywords裡面,
只有reduce被移到functools裡. 之前map filter說要被降級好像是誤傳?(未查證))

Simon一開始講的是xmonad, 主要是一個haskell寫的
window manager, 非常的小所以他拿來作說明, 然後就開始講一些functional programming的基礎特性, 我主要注意到他說Haskell的types跟UML一樣是用來表示High level design, 這倒很有意思, 我是個python user/advocators我會喜歡duck typing跟lisp這種dynamic types的語言是很自然的, 但是像Haskell這樣的static typing語言不僅有type inference可以減少累贅感, 另外還可以透過compiler檢查高階設計, Data types的construct語法看起來其實也很接近BNF, 倒是讓我覺得static typing也沒有那麼壞了起來.

不過type classes有點複雜, 這是連Simon這種神人都覺得未來仍有發展空間的東西 我並沒有完全跟上, 改天還要再深入研究.然後就開始講到I/O跟scripting, IO的部份, 並不是很直觀, 網路上對於monad的討論也多到暴 所以我也是聽得很霧 另外也提到了Haskell library的現狀(就我以前try過的一些經驗, Haskell的library不算多, Cabel比較像是python的distutils, 可以裝一些3rd party的module, 不過dependency的部份有點麻煩, 似乎現在有人在發展一些工具在處理不過還是沒有很成熟), 這部份其實我目前比較沒有那麼大的興趣, 所以聽得有點散, 其實python就目前實務使用(套件,標準庫...等等)來說還是比Haskell成熟的多,並沒有很急著要學太多實務部份, 但我覺得Haskell是非常具未來性的語言, 所以現在多花點時間了解一些更基礎的特性或許也是對的.

之後開始聽到有關laziness跟first-class control structures, 這很有趣, 如果有學過lisp的話肯定知道lisp有所謂的special form跟macro, 因為lisp是一種語言的語言(meta language), 可以透過macro來無限制的擴展語言, 所以雖然是在1990年代的OOP風潮前就有的語言但卻可以不改變語言的本身特性而發展CLOS這樣的物件系統, 這也是為甚麼lisp之所以吸引人並且長久有穩定支持族群的原因, Haskell的laziness就是讓function跟data constructors不在第一時間就被evaluate, 直到真正需要的時候才去eval, 而這讓Haskell靠著laziness來取代lisp透過macro來支援special form的方法, 只要單純的撰寫函式就可以更動control structure, 這真是非常酷的特點.

最後simon講到Haskell跟其他語言採取完全不同的方法設計, 其他語言主要是一開始先想辦法讓語言有用(Useful)而慢慢的再來加一些限制讓語言更安全(safe), 而Haskell則是採取一開始是Useless(無用處)但是Safe的設計,然後慢慢的讓語言更加具有功能性.


之後simon也講了一些工具跟網站 畢竟這個演講也只是粗淺的導引, 還是有很多深入的內容要多看多玩才會了解 不過之前也看過一些Haskell的介紹跟導引, 他的演講對於個人提高興趣及指點迷津上我倒覺得成效還不錯.

看完演講總算比較有信心覺得這是個正常人可以玩的程式語言了, 知道玩這個語言沒那麼容易變成瘋狂數學家總是安心不少 ;) 不知道為啥突然想起研究所唸過的Kiyoshi Itō這個超神的家伙,記得聽以前的教授說Ito calculus是他的碩士論文發明了之後, 讓我真是想去再生兩個腦袋, 不過還好haskell裡的lambda caluli沒那麼困難, 只要知道\在haskell裡面是代表lambda, 其他只要lisp學好的話搞不好會更欣賞haskell滿直覺的表示法, 型別的理論我比較少接觸看起來還要多摸, 比較困難的是monad, 有時間的話繼續努力玩玩. (話說大師的催眠術果然是無敵的, 看來只要一直想著這很簡單這很簡單終究會變得..感覺..簡單起來 XD)

星期二, 8月 21, 2007

[tip] xorg裡改用滑鼠右鍵貼上

同事跟我說他想把x.org裡滑鼠中鍵貼上的功能改成用滑鼠的右鍵貼上, 雖然我搞不懂為啥會有人想這麼作,但還是有辦法的...

在xorg.conf裡:

Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "IMPS/2"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5"
.....
Option "ButtonMapping" "1 2 2 4 5 6 7 8 9"
EndSection

只要加上ButtonMapping這個選項, 就可以把實體的按鍵跟
邏輯上的按鍵分開來定義,而這個選項的定義方式就是將邏輯上按鈕照實體上的順序排列,而實體上的1通常代表滑鼠左鍵 2代表滑鼠中鍵3代表滑鼠右鍵.

像上例中 "ButtonMapping" "1 2 2 4 5 6 7 8 9"
就是表示將邏輯上的1 2 2 定義到實體上的 1 2 3
也就是將滑鼠實體上的右鍵現在定義了原本滑鼠中鍵貼上的功能
如果要把滑鼠實體中鍵的功能完全取消, 也只要拿一個原本邏輯上未定義的按鈕替換掉即可,
如: "ButtonMapping" "1 9 2 4 5 6 7 8 9"
這樣即可將原本中鍵的功能取消, 並將右鍵變成貼上的功能.

星期六, 8月 11, 2007

[link] Gouge Found on Shuttle Endeavour's Underside

update:
Space shuttle Endeavour lands safely in Florida 十數天後平安歸來了! 可喜可賀!

http://science.slashdot.org/science/07/08/11/0110236.shtml

NASA的奮進號太空梭於日前發射, 執行第118號太空任務, 不過根據最新的消息, 似乎發射過程中有被冰塊擊中機腹,
造成機腹有一塊三平方英吋凹槽的情形發生.

也許聽起來不嚴重, 但這也不禁令人想起就在四年前, NASA發射的哥倫比亞號, 也是在發射時被泡棉擊中機翼,
經NASA技師判定無問題, 管理階層開會數次且判定為不處理的情況下,
再兩個禮拜後回到地球地表時過熱而解體爆炸導致全部太空人死亡的悲劇.

這次發射任務眾所矚目的焦點是自從二十年前挑戰者號搭載教師卻在發射過程中爆炸後,
第一次搭載教師上太空梭, 這次上太空的女教師芭芭拉摩根, 其實就是跟二十年前挑戰者號不幸罹難的女教師克莉絲塔在Teacher_in_space計畫裡一起受訓,也名列在挑戰者號太空任務的候補名單, 自從挑戰者號失事之後, 計畫被迫中斷, Barbara繼續回去教書, 而這期間為了替代挑戰者號建造了奮進號, 因此到了1998, Barbara才重新回到nasa.Teacher_in_space計畫也才得以重新繼續, Barbara也直到今日才能升空一圓夢想彌補遺憾.

話說為啥我這麼關心這段故事咧... 話說前幾個月才剛看完歡樂收場的"Rocket Girl",對於這種現實發生而被變調過的故事橋段特別的有愛...:P 祝福這次Endeavour飛航成功順利啊... 不, マツリ, 你一定要成功啊~~~ XD

就在三四年後, NASA的太空船也將全部退休, 改由新一代的可拋式Orion宇宙飛船接替, 希望接下來的這幾次飛行任務都不要出甚麼大狀況才好. 加油吧 NASA. 奮鬥吧 太空人們... :D

星期四, 8月 09, 2007

Benchmarking SCMs via import linux kernel source.

Maybe someone would interested, so I posted the results here:

(Benchmarking on a p4 3.4G SMP debian stable-etch, 2giga ram machine, all SCM software use packages from debian stable, checkout/branch occurs on localhost)

conclude:

initial speed: hg==git(3Min) >> bzr(15Min) >> svn(71Min)

checkout/clone speed: hg == git(3Min) >> svn(11Min) >> bzr(21Min)

space effiency: hg==git(123Mb) >> bzr (230Mb) >> svn(repo:82Mb+workingdir:573Mb = 655Mb)

== report ==

hg:
/usr/bin/time -o ../hginit.usage hg init
/usr/bin/time -o ../hgadd.usage hg add .
/usr/bin/time -o ../hgcommit.usage hg commit -m "first import"


real 3m25.284s
user 0m34.130s
sys 0m4.868s

git:
/usr/bin/time -o ../gitinit.usage git init-db
/usr/bin/time -o ../gitadd.usage git add .
/usr/bin/time -o ../gitcommit.usage git commit -m "first import"


real 3m20.346s
user 0m23.061s
sys 0m5.032s


bzr:
/usr/bin/time -o ../bzrinit.usage bzr init
/usr/bin/time -o ../bzradd.usage bzr add .
/usr/bin/time -o ../bzrcommit.usage bzr commit -m "first import"

real 15m10.689s
user 1m59.299s
sys 0m9.617s

svn:
svnadmin create --fs-type fsfs /home/tim/test/testsvnrepo/
svn import -m "New import" linux-2.6-2.6.18.dfsg.1 file:///home/tim/test/testsvnrepo/


real 71m3.704s
user 0m53.467s
sys 0m24.998s

#### Checkout/Branch(Clone) time ####


#time bzr clone linux-2.6-2.6.18.dfsg.1/ testbzrclone
Branched 1 revision(s).

real 21m5.351s
user 1m38.898s
sys 0m11.465s

# time hg clone linux-2.6-2.6.18.dfsg.1/ testhgclone
20690 files updated, 0 files merged, 0 files removed, 0 files unresolved

real 3m15.951s
user 0m12.449s
sys 0m4.016s

#time git-clone linux-2.6-2.6.18.dfsg.1 testgitclone
remote: Generating pack...
remote: Done counting 21351 objects.
remote: Deltifying 21351 objects.
remote: 100% (21351/21351) done
Indexing 21351 objects.
remote: Total 21351, written 21351 (delta 2213), reused 0 (delta 0)
100% (21351/21351) done
Resolving 2213 deltas.
100% (2213/2213) done
Checking files out...
100% (20323/20323) done

real 3m27.516s
user 0m59.908s
sys 0m5.132s

#time svn co file:///home/tim/test/testsvnrepo/ testsvnco
Checked out revision 1.

real 11m44.980s
user 0m35.294s
sys 0m15.849s


####SPACE USAGE ####

123M linux-2.6-2.6.18.dfsg.1/.hg
123M linux-2.6-2.6.18.dfsg.1/.git
230M linux-2.6-2.6.18.dfsg.1/.bzr
82M testsvnrepo
573M testsvnco


Note: I've installed bzr 0.18, and results shows no big difference.

星期日, 7月 29, 2007

[link] ozearch 中文最佳化搜尋引擎釋出

來自kalug/www.linux.org.tw的第一手消息:
http://www.linux.org.tw/node/350

kevinwatt在昨天的Kalug聚會中宣布以GPL版權釋出他用 Python 語言撰寫的 ozearch 0.0.1,
主要的特點是融合N-gram 以及 Word-based 這兩種斷詞方法對中文搜尋作最佳化,根據kevinwatt的現身說法是, 目前仍在大幅修改中, 之後的版本會越來越好, 所以如果有對中文搜尋引擎實作有興趣或有時間跟精力對本土自由軟體開發提供協助的朋友可以到官方網站http://ozearch.org/一探究竟. :D

星期六, 7月 28, 2007

[funny] [link] 尤拉會怎麼作? What Would Euler Do?

知名版本控制系統Subversion的作者Karl Fogel本月在他的blog透漏了這則趣事: 他在2004年跟美國數學協會購買了Excursions in Calculus,不過等付完錢拿到書之後, 過一陣子才拿到了帳單. 但是他其實早已付了錢, 美國數學協會寄給他的是一個0元的帳單,可能是作為存根之用. 不過他做了一件非常耍寶的事.


他開了一張eiπ + 1元的支票給美國數學協會.



想當然爾, 被退了回來.

Karl Fogel對這件事的評論則是:
"""
Oh, how I wanted them to deposit it! But they didn't even try; they sent the check back uncashed. Maybe the MAA is using one of those accounts-receivable clearinghouse services, and it isn't really their fault. But if you can't write a check for eiπ + 1 to the Mathematical Association of America, whom can you write one to?
"""

我只能說..... 醒醒吧...阿宅... XD

原文在此: http://www.rants.org/2007/07/14/what-would-euler-do/