作者簡歷:
1964年出生,山西太谷人。1984年畢業於東北工學院,獲得工學學士學位。1991年畢業於北京化工大學,獲工學碩士學位(專業方向:自動控制與人工智能:學位論文:《聚脂過程分子量分布控制中專家系統自學習機制及GPC算法的研究》)。中華人民共和國鐵道部第三工程局高級工程師,"數碼論壇"成員,《計算機世界》專欄作家,並為《中國計算機報》、《信息產業報》、《網絡報》、《微電腦世界》、《國際電子報》撰稿人,累計發表約50萬字。1999年出版《電腦,穿越世紀的精靈》一書。
對於自由軟件,美國自由軟件基金會(FSF)主席Stallman在不同的場合強調,“是自由,不是免費”。因為在他的表述裡,Free Software中所界定的Free,雖然含有“免費”之意,但決不是“自由軟件”所指。
軟件與“自由”相關,在給人一種"崇高"的印象的同時,似乎多少顯得“文不對題”。這也許是兩個方面的原因:對於“崇高”的俗媚已經被俗媚辨認出來,從而失去了感人的前提--時代已經不是“呼喊自由”的時代;其次,將軟件,一個極具工程色彩、功能至上的邏輯語言的序列,以“Free”加以命名的時候,總是讓更多務實的人關心它是否真的“Free(免費)”,而不是獲得精神的解放(Freedom)。
不過,這個問題仍然有足夠的理由讓人繞不過去:即便所有關於“自由”的解說為普通的大眾感到厭倦,感到生命內在的沖動與脹破繭束的疲憊總是與“自由”的任何表述之間,相差“最後一公裡”,“自由”,仍然是一個可以利用的符號。
當“軟件”,這個無論是未來學家們嘴裡的啟示福音,還是技術專家手裡的百變金剛;無論是商人眼裡的搖錢樹,還是普羅大眾耳邊的通俗“新語”,都不可避免這樣的事實:已經沒有誰,或者很快就可以精確到這樣的地步,沒有誰,可以逃脫被互聯網罩起來的生活,這種生活不能說是1971年(第一塊微處理器誕生),或者1975年(微軟成立),或者1993年(互聯網的商業化)才開始,應當說只是在這些年代越來越走向極至。
可以有足夠比例的人知道必須面臨的這次“遷徙”是走向一個叫做“互聯網”的地方--通俗的說法叫“網絡化”,可以有足夠多的人稍許了解這個未來的棲息地只是依賴著硅芯片和成百上億行“語句”構築而成--通俗的說法叫 “數碼化”;但是,並沒有足夠的理由說明,“自由軟件”可以為我們保留的究竟是“自由”,還是僅僅是“免費”。
Stallman非常擔心把自由軟件的理想庸俗化成不勞而獲的“免費午餐”,這本身就說明,自由軟件與蓋茨軟件相比,在承認軟件具有清晰的使用價值方面毫無二致--所不同是只是,自由軟件以較為開放的姿態來看待軟件可以“for sale”這一事實。
對自由軟件,說其是在比較級的層次是“開放”的,是因為構成蓋茨軟件和自由軟件的代碼基因是一致的,區別只在於人為地使其“是否開放”,此其一;自由軟件並不是天才手中的玩具,或者自由軟件已經不可能是60年代黑客們獨自把玩的游戲,而是可以兌換“商業價值”的“魚鉤”,所釣“魚兒”就是“眼球”,Red Hat在紐約上市引發的股市爆漲就是證據,此其二。
那麼,就有必要審視這個案件。從自由軟件所提供的起訴蓋茨軟件的證據,辨認出它存在理由。
自由軟件與互聯網
自由軟件與互聯網之間,已經有了無法割斷的聯系,審視自由軟件,就不可能不審視其賴以生存的環境--互聯網。
然而,自由軟件本身與互聯網之間,需要做很好的區別。從對社會的影響看,作為一種傳播模式,互聯網的作用要超越自由軟件。
自由軟件,以當前的解釋,毋寧看作是一種攜帶了某種“訴求”和“指向”的理念或者精神。“提倡傳播”的意志,使得自由軟件與互聯網獲得了天然的默契,成為互相佐證的理由。
但是,由於軟件的“有用性”或者功能,使得自由軟件無論如何不能抹掉作為一種“工具”的印記。問題就在這裡。
作為工具,自由軟件的可操作性是大可懷疑的。這個問題不屬於自由軟件獨有,而是屬於軟件。
任何編寫過程序的人都承認,閱讀軟件的難度要大於編寫軟件。程序員最頭痛的問題不是對一個實在對象,對一個求解問題編寫軟件,而是閱讀和理解他人的軟件代碼。從理論上講,作為一種“逆向思維”的過程,閱讀軟件是對“源代碼”的重新诠釋而不僅僅是理解。
那麼,自由軟件的“自由”從何談起? 當然,自由地編寫的代碼,在被閱讀的時候造就的诠釋的“不自由”已經是一種反諷;更重要的是,Stallman 堅信的最為充分的理由,即“自由軟件經過‘他人’的閱讀和诠釋,可以獲得更好的安全特性和運行特性”,仍然是一個懸而未決的問題。
自由軟件的一個重要特性被描述成比之蓋茨軟件更具安全性的理由是,“任何人都可以發現一個特定的自由軟件的漏洞,進而為完善這個軟件做出貢獻”。這個想法初看起來很對,但問題也隨之而來:提升軟件的安全性,事實上取決於兩件事,其一,“任何人如何發現軟件的安全性漏洞”?其二,如何判定任何人對軟件的所謂“完善”一定導致安全性的提升?
對自由軟件的運行特性的提升的考察,道理是一樣的。
自由軟件的運行特性的提升
自由軟件比蓋茨軟件優越的假說,與其說在於技術的可實現性,不如說建立在脆弱的自由夢想之上。自由軟件的生態環境,可以獲得軟件安全性提升的的假說,需要預設以下條件:
軟件的缺陷可以被發現
這個過程需要使用“軟件測試”的概念,需要有充分的證據表明,軟件缺陷是“可以發現”的。對於電腦來說,這不但涉及到“發現缺陷的算法”,更涉及到這個算法的有效性問題。後者更為重要。
能不能發現軟件的缺陷,需要在軟件所表征的各種模態之間建立判定算法,這個判定算法將在軟件出現“缺陷”的時候給出恰當的提示。對於一個有限、但足夠長的軟件代碼,這個算法是否存在就是自由軟件首先必須解決的問題。
進而,即便存在這樣的“缺陷判定”算法,並且是可以“計算”,或者可以“運行”的,但並不能保證是“能行”的,即,並不能保證這樣的算法可以在有限的時間內給出所期望的結論。這就是計算機的“能解性問題”,即“NP問題”。(這個問題與圖林測試、哥德爾完備性定理有關,我傾向於猜測,軟件缺陷的判定問題是一個不可解問題)。
再而,雖然程序員的經驗告訴我們,改善軟件的唯一途徑就是不斷“修改”軟件,但這只能說明“修改軟件的前提是知道源代碼”,而不能推證出“知道源代碼就一定能修改軟件,並且一定修改得比原來的軟件要好”的結論。
簡單說,就是如何保證軟件的缺陷可以被發現?並且在發現缺陷的前提下,一定可以做得更好?
當然利用網絡,可以設想為數眾多的高手可以共同關心一個具體軟件的缺陷問題,大家齊手找毛病,這多少有點象“人工的並行處理”,這種“人工的並行處理”是與計算機並行處理完全不同的模式,甚至我想應該(理論上)高於當前的“計算機並行處理模式”。但是,並行理論能否解決“測試的可解性”問題,似乎仍未有定論。
測試一個軟件的功能是否存在缺陷,目前來看,最有效的算法仍然是“窮舉法”。而窮舉法恰恰是一個NP方法,即不能保證“能行”的算法。
對軟件安全的另一個難題是“安全”本身如何定義?
目前軟件安全的處境類似波普爾的證偽說:從實證的角度,只要軟件截止目前沒有出現問題,就認為軟件是安全的。
這個推證體系是實證的,而不是理性的。沒有關於“安全性”的任何全稱判斷。
軟件的優化問題
一個軟件也許可以不認為有缺陷(這需要判定),但存在代碼優化問題。但優化本身又成為難題之一:這就是如何確立軟件優化的判據?或者問:是否存在普適的“優化”判定體系?對此,也許同樣無法獲得一致的見解。(之所以如此,是因為比特化將計算機科學牢牢地栓在了“實用科學”的土地上)
以上3個方面的難題,可以簡略地說明自由軟件與蓋茨軟件相比,處境並沒有本質的改善。或者說,自由軟件與蓋茨軟件在安全問題上,是同級的。
那麼,支持自由軟件的人,如果僅僅利用“自由”的辭藻,在這些問題上閃爍其辭的話,就無法得出自由軟件比蓋茨軟件優越的結論。
但是,這裡沒有為蓋茨軟件辯護。自由軟件,必須考察其存在的其他理由。這個“其他理由”,並不是來自安全的提升--即便自由軟件比蓋茨軟件來得安全,也只能說明蓋茨軟件本身的商業模式,妨害了安全性能的改善,而不能證明自由軟件在安全性方面一定優於蓋茨軟件。
自由軟件的安全性是蓋茨軟件“送”來的機會,而不是自由軟件內禀的特性。
需要從另外的角度審視自由軟件存在的理由。這個理由來自網絡的存在,來自純粹的商業考慮,來自互聯網對軟件產業存在模式的徹底顛覆。
這個問題將在另一篇文章裡加以探討。
(全文完)
——摘自:http://china.cnet.com