| 作者:莊表偉
| 編輯:王皓月
從穿越小說聊起
我非常喜歡看各種網絡小說,其中最大的一類,自然是穿越小說。其中又可以細分為很多類型。按照穿越回到的時代,從遠古到近現代的都有,這其中有一個很小的分類,是回到大約20世紀70年代末、80年代初的。那些主人公,大機率都是要搭上改革開放的順風車,賺取巨額紅利的了。比如搶先去上海,購買股票認購證之類。
不過,有一本我個人非常喜歡的穿越改革工業文《大國重工》,非常硬核,主人公馮嘯辰沒去賺那種投機取巧的暴利,卻一心一意的想要幫助咱們國家的工業,尤其是重大裝備製造業,獲得更好的發展。
事實上,所有穿越回到過去的人物,手頭最大的兩個武器,無非是超越於時代的知識技能,以及對於歷史發展方向(甚至某些歷史大事的關鍵線索)的把握。
於是我常常會想:作為一個軟體工程師,我非常了解軟體開發、軟體工程、開源軟體等等相關知識和技術。如果我穿越回到 IBM PC 剛剛發明的1981年,或者是穿越到GPL 首次發布的1989年,再或者是穿越到 Linus 剛剛開始寫 Linux 的1991年,我可以(能夠、應該)做些什麼呢?如果我不僅希望自己個人發財,還希望咱們國家的軟體產業更好的發展,還希望咱們國家的開源能夠有更好的發展,我又可以(能夠、應該)做些什麼呢?
追趕曲線與距離的關係
說實話,在各類穿越小說中,越是靠近現代的穿越,就越是難寫。重生到30年的改革穿,自然是最難的。個人 YY 式奮鬥的模式還好寫一些,妄圖用現代思維,改造歷史,推動歷史發展進程的小說,就更加難寫。
具體到改革開放這40年,為什麼更加難寫呢?因為,在這40年里,中國的發展思路已經很難更加正確了。積極學習西方發展的先進經驗,積極引進西方先進的科學與技術,努力在認清現實,理解差距的前提下,奮力追趕。
為啥西方可能走彎路,而我們卻能夠走直線呢?因為西方領先了我們100~200年,他們走過的彎路,我們不必再走。
問題在於,有不少新興產業,比如軟體產業,西方也不過是出現了60年(1959年正式提出),軟體工程至今不過51年(1968年提出),個人計算機以及相關軟體產業的爆髮式增長,至今不到40年,開源軟體的概念(1998年提出),至今不過21年。
追趕成熟產業,我們可以不走彎路。而追趕新興產業,我們多半就會跟在後面走彎路,要想追上去,何其困難?
經驗曲線與人月神話
軟體產業作為一個新興產業,與傳統產業,尤其是製造業,有哪些區別呢?最近我在讀的另一本書《戰略簡史》,其中提到了「波士頓經驗曲線」,給了我深刻的啟發。
1960年,波士頓諮詢公司(Boston Consulting Group)的布魯斯·亨得森(Bruce D. Henderson)首先提出了經驗曲線效應(Experience Curve Effect)。簡單的描述是:當生產的累積數量增加後,相對應的平均成本下降。一般而言,形成經驗曲線的原因有三項,分別是:
學習效果:由於重複工作所帶來的學習效果。
科技進步:從事一項工作一段時間後,較容易進行生產製程改善。
產品改善:生產產品一段時間後可以清楚了解顧客偏好,經過設計改善,可以在不影響功能下,使零件減少。
這個經驗曲線,能不能應用於軟體產業呢?一家軟體公司,開發第一個軟體,到開發第10個軟體,他的生產成本,是不是能夠逐漸下降呢?
作為業內人士,我們經常聽到的卻是這種說法:
「大多數大型軟體項目都沒有達到預期的目標,交付推遲,預算超支,功能不完善。許多軟體項目徹底失敗了。」 — —FDD
「當前,軟體開發的情況並不理想。很多系統最終不能交付,或者最終交付的系統經常性地發生延期或者超出預算;系統常常不能滿足用戶的需要,其結果是不得不一遍又一遍地開發。」 — —AM
「許多軟體項目,或許應該說大部分軟體項目實際的開發周期比預期的要長,實際的花費比預期的要多,實現的功能比預期的要少。這造成了嚴重的質量問題。 — —某一本 CMM 的書籍
在1974年出版的《人月神話》這本書里,我們可以看到這種論斷,甚至在40年之後出版的紀念版本中,這些論斷依然正確!
「沒有銀彈」:沒有任何技術或管理上的進展, 能夠獨立地許諾十年內使生產率、 可靠性或簡潔性獲得數量級上的進步。
「不要相信人月神話」:當你向一個複雜的項目投入更多的人力時,反而會進一步延長工期!
如果不能正確認識軟體這個行業的本質,我們將永遠陷在「焦油坑」之中,就別再奢望什麼成本逐步下降的經驗曲線了。
《大教堂與集市》的觀點
回顧行業的發展,似乎情況並沒有那麼糟糕。我們的確在開發越來越複雜的軟體,我們的開發效率也越來越高了。
在《大教堂與集市》這本開源聖經中,作者 Eric S·Raymond 更是自豪的宣稱:有一種與傳統軟體開發模式(大教堂模式)截然不同的全新的模式:集市模式。如果開發的協調者有一個至少和網際網路一樣好的通訊媒介,而且懂得如何不通過強迫來領導,多個頭腦不可避免地優於單個頭腦。
這一論斷,與人月神話的觀點,看起來正好相反啊!怎麼解釋呢?社區開發固然可以選擇集市模式,企業開發,也可以選擇集市模式嗎?好的通訊模式容易實現,不通過強迫來領導,在一個企業里,現實嗎?
2000年,Tim O'Reilly 就發明了一個新的詞彙:Inner Source。按照 Wikipedia的說法:InnerSource is the use of open source software development best practices and the establishment of an open source-like culture within organizations. The organization may still develop proprietary software, but internally opens up its development.
將開源的開發模式應用於企業內部,並且在企業內部營造類似於開源社區的文化。這樣會帶來眾多的益處,這就是:內源。
參考:
https://en.wikipedia.org/wiki/Inner_source
開源對於軟體產業的貢獻
必須承認,真正在企業內部踐行內源的企業,還是非常罕見的。不過,開源對於軟體產業,也不僅僅是在開發模式方面,更加重要的貢獻,還是得回到經驗曲線來談。
在此,我想提出一個假說:在一個行業的早期發展階段,是很難有穩定的經驗曲線的,原因在於這個行業還非常的不成熟,沒有摸索出一套行之有效的,積累經驗,持續改進的方法。即使到了今天,我們依然可以認為,軟體開發這個行業,雖然已經有了很多激動人心的重大進展,但是卻還沒有成為一個成熟的,能夠穩定發展的行業。在這40~50年的時間裡,軟體開發使用各種隱喻來套用在自己的工作實踐中:比如建築工程,比如手術團隊,比如流水線,比如工匠作坊。
所有這些隱喻,都可以算作是盲人摸象的心得,用來指導軟體開發的實踐改進,往往只是緣木求魚。到了今天我們回看過去的進展,也許只有3個方向的改進,是切實有效的:
- 敏捷疊代式的開發(本質上就是小步試錯,以降低試錯成本,快速逼近正確答案)
- 可復用的原始碼(本質上就是減少重複勞動,不必每個項目都重頭開始寫代碼)
- 有工具支撐的 DevOps(本質上就是在軟體開發的每一個環節,都不斷改進工具,提高效率)
在這三個方向之後,第二、第三條事實上都是靠開源支撐起來的。開源項目,開源框架,開源組件,開源模板,開源的項目管理工具,開源的開發工具,開源的測試工具,開源的運維工具,甚至誇張一點說,現在軟體行業的眾多基石,幾乎全都是開源的。
這正是軟體行業,積累經驗的方式。開原始碼與開源工具,凝聚了軟體開發、系統架構,項目管理等諸多經驗,使得企業不用付出高昂代價,不用自行摸索,不用從零開始。
現在,我們已經很難想像一家公司,完全不採用任何開源的技術,不引入任何的開原始碼,完全靠自己公司的員工,一行一行的寫出自己的軟體來了。
開源極大的提升了軟體產業的生產效率,極大的降低了軟體產業的生產成本。所以人們才會斷言:軟體正在吞噬世界,而開源正在吞噬軟體。
開源為何能夠走到今天?
如果用這個問題,去問美國政府:你們是如何發展美國的開源產業的?估計他們會一臉懵。或者更加困難的是:我們都不知道該去問美國政府的哪個部門。咱們還是只能回顧歷史,去看看當年究竟發生了哪些重要的事件,以及這些事件的前因後果。
目前最方便找到的線索,還是英文的 Wikipedia :
https://en.wikipedia.org/wiki/History_of_free_and_open-source_software
1.在開源出現之前,美國商人之間,就已經有了分享技術的做法(1911年起)
1911年,亨利·福特發起成立了一個新的協會,後演變為汽車製造商協會。該協會使得美國所有汽車製造商之間的專利,得以免費公開共享,到二戰前,這些製造商之間共享了92項福特專利和其他公司的515項專利。
簡評:通過分享技術,建立的商業聯盟
2.在學術界,長期存在開放與合作的文化,後來這些文化被進一步發展為:黑客文化(1950~1960年代)
軟體的原始碼,通常被視作在「公共領域共享的成果」,就像所有其他的學術成果一樣,在企業界與學術界之間,共享流通。更多信息,可以參考《黑客——計算機革命的英雄》一書。https://book.douban.com/subject/6860890/
簡評:正是這種學院派文化,為後來 Richard Stallman 反對閉源軟體的自由軟體運動,埋下了伏筆。
3.在版權與專利領域的重大進展,使得基於軟體的商業模式,得以出現
- 1976年2月3日,比爾·蓋茨發表《致愛好者的公開信》,譴責軟體盜版行為
- 1976年10月19日,美國國會修改《版權法》,把計算機軟體納入版權保護範圍
- 1978年1月1日,新《版權法》生效
- 1981年,美國最高法院對《Diamond v. Diehr》案件的宣判,確立了軟體專利合法,肯定了軟體智慧財產權
簡評:也許很多人會覺得,這是歷史在開倒車。但是在我看來,如果沒有版權和專利對於軟體的保護,計算機軟體這個行業都不會出現,因為沒有任何人能夠賺到錢,全世界的程式設計師總數,可能到現在都不會超過幾萬人。但是,在這些法律設施具備之後,的確有越來越多的商業公司,宣布將自己的軟體閉源了。
4.Richard Stallman 發起自由軟體運動
- 1983年9月27日,發起 GNU 計劃,
- 1985年10月,建立自由軟體基金會
- 1989年1月,發布 GPL,提出 Copyleft 概念
簡評:乍一看,Copyleft 當然要比 Copyright 「高尚」,但事實上,如果一個國家沒有嚴格執行保護 Copyright 的政策,Copyleft 也不會那麼有價值。這是一個硬幣的兩面。
5.Open Source 運動興起
- 1991年,Linus 開始開發 Linux 作業系統內核
- 1997年,Eric S. Raymond 首次發表《大教堂與集市》
- 1998年1月,Netscape 公司宣布將 Navigator 瀏覽器的原始碼開源,在加利福尼亞州帕洛阿爾托舉行的戰略會議上,Open Source 這個詞彙,首次出現
- 1998年4月,Tim O'Reilly將原本計劃召開的《Freeware Summit》改名為《Open Source Summit》,在此次峰會上,Open Source正式定名
- 1998年,開源軟體促進會正式成立
簡評:從自由軟體,到開源軟體,這其中的變化,使得技術分享的文化與商業利益之間,有了更多妥協/調和的可能性。
6.開源組織,各種非營利組織,尤其是是開源基金會的興起
- 1999年3月,Apache 軟體基金會
- 2000年,Linux 基金會
- 2000年8,GNOME 基金會
- 2003年7月,Mozilla 基金會
- 2004年2月,Eclipse 基金會
- 2005年2月,軟體自由法律中心
- 2005年11月,圍繞Linux的專利聯盟,開放發明網絡(Open Invention Network)成立
參考:
https://opensource.com/resources/organization
簡評:開源興起背後,其實是一批企業的興起,比如 VA Linux 和 Red Hat 於1999年進行的 IPO,股價大幅飆升,使得開源有利可圖,成為現實。在此之後,開源技術與商業正式攜手,基金會和專利聯盟,則是企業間技術協作的「正確姿勢」。
國家應該做些什麼?
簡單的梳理過去幾十年開源發展的歷史,我們可以發現三個關鍵詞:
教育,尤其是高校教育,更重要的是,支撐高校教育背後的「學術傳統」。
法律,尤其是保護智慧財產權的法律,更重要的是,能夠保護技術、保護創新的法律執行力,才能凸顯出分享的可貴,與奉獻的偉大。
基金會,尤其是企業間因為共同的利益而自發成立的基金會,才能使企業更好地支持和扶植開源技術。
話不多說,點到為止吧。