本文翻譯自做者 ANDY ORAM 的文章 How the Apache Project Boosted the Free and Open Source Software Movements程序員
不能否認,Apache 項目已經改變了世界。它產生的一些影響包括如下幾點:apache
- 他們的 HTTPD 應用程序是第一個強大且可用於生產的網絡服務器;
- 他們還在法律上產生了使人印象深入的影響,由於 Apache 2.0 是開源世界中最流行的許可協議;
- 隨着 Apache 軟件基金會擴展到其餘計算項目,該基金會成爲了當今許多最受歡迎的軟件的孵化地:如 Hadoop、Spark 和 Kafka 等項目 —— 基金會儼然成爲了一個包含了由官方或孵化器中誕生的 60 個項目所組成的聚寶盆。
除了這些成就,Apache 項目對文化和在線社區的貢獻一樣重要。本文回顧了該項目早期的發展歷程,現在該項目已經有 25 年的歷史了(Apache 軟件基金會是在該項目準備站穩腳跟時成立的,今年 3 月 26 日正式慶祝成立 22 週年)。編程
大多數關於 Apache 早期的描述都集中在他們的技術工做上,因此我但願這篇文章可以幫助人們更好地理解 Apache 是如何幫助創建開源運動的。瀏覽器
Apache 起源於 1995 年初,一羣程序員經過電子郵件彙集在一塊兒,拯救國家超級計算應用中心(NCSA)開發的一臺網絡服務器,而 NCSA 對該項目的支持力度正在降低。在那個歷史階段,經過互聯網進行合做仍是比較新鮮的。一般的模式是由一個單獨的項目負責人或一個小團隊來維持控制,並以此爲一箇中心,其餘人能夠向其提交修改。這些改動被稱爲補丁(patches,這也是 Apache 名稱的由來)。服務器
Linux 和其餘項目正在組建社區,這些社區不只僅是提交補丁,而是容許經過電子郵件參與決策。可是這些社區缺少參與的基本規則,並且可能會表現出粗糙的人際關係,讓許多貢獻者望而卻步。Debian 多是最先將領導權分佈在地理距離上的自由軟件項目之一,但它的溝通風格也是對抗性的(有些觀察家會用更強烈的語言來描述),以致於大多數現代開源項目都不能容忍。總之,自由軟件和開源軟件運動不得不作一些成長的工做。網絡
到了 1992 年,萬維網被網民公認爲是一股重要力量。但支持它的軟件卻處於脆弱的狀態。Tim Berners-Lee 曾爲歐洲核研究組織(CERN,以法文名字命名)開發了一個網絡服務器,但它是爲該組織的需求而設計的,其中涉及共享大型數據集。該服務器並不適合大衆在 20 世紀 90 年代初開始進行的各類活動。架構
NCSA 也是一個科學組織,但它的服務器有更普遍的吸引力。在當時典型的開發模式中,它的開發依賴於一個程序員 Rob McCool,其餘程序員將他們的補丁發送給他。模塊化
在 Marc Andreessen 離開 NCSA 成立網景公司(著名的網絡瀏覽器開發商)後,這種狀況發生了改變。雖然網景已經倒閉,但你極可能正在使用他的做品的衍生品 —— Firefox 網絡瀏覽器來閱讀這篇文章。當時 NCSA 的不少員工都跟着他去了網景,其中也包括 Rob McCool。由於網景公司只關心瀏覽器,忽然間 NCSA 根本沒有人在從事任何網絡服務器的相關工做了。微服務
因此在 1995 年初,程序員們開始注意到,當他們經過電子郵件向 NCSA 發送補丁時,沒有人迴應,也沒有後續更新推出。當他們弄明白髮生了什麼過後,他們經過電子郵件找到了對方,並決定本身來接這個項目。oop
這個以奇特方式造成的社區的關鍵特徵是自願性。沒有人會被告知要作什麼工做。若是他們有興趣,他們就寫代碼,若是不感興趣,他們就去作其餘事情。人們能夠開玩笑地稱這個團隊爲無政府主義公社。
這個項目的基本特徵致使了對尊重、開放交流以及其餘後來被稱爲 The Apache Way 的元素的關注。
Dirk-Willem van Gulik 在爲本文所作的採訪中解釋說,他們必須"將規則偏向於行動而不是不行動"。 換句話說,他們不敢爲提案設置高門檻,由於這會讓人根本不肯意工做。他說,早期的程序員們並無過多地討論社區,但他們確實向互聯網工程任務組(IETF)尋找靈感,IETF 以依賴"粗略的共識和運行代碼"而聞名。
那羣體的凝聚力呢?在這裏,van Gulik 表示,開發者們發現他們有足夠的價值觀和目標,所以能夠很好地合做。從今天的角度來看,這個團隊看起來是同質的(都是男性、都受過教育、並且大部分是白人),但他們來自許多不一樣的國家、有着不一樣的文化,甚至有些人的英語並不流利。此外,根據 van Gulik 的說法,這些開發人員來自各類迥異的項目:主要是 OpenBSD、Linux、Perl 和 Python。所以,可以在漫長的地理距離上造成一個有凝聚力的團隊是一項成就。他們中的大多數人直到 1998 年第一屆 ApacheCon 才見面。
公開討論的一個關鍵影響是,它教育了小組的初級成員,幫助他們在忠於項目目標和文化的同時,站出來承擔更大的責任。正如 Thomas Østerlie 所說:"經過協做和討論,隱性知識被轉化爲顯性知識。"
全部的志願者組織,特別是當它們缺少一個核心的、有凝聚力的團隊時,會面臨一個重大的風險:參與者會中止貢獻。根據 Østerlie 的論文,在項目成立兩個月後,這種狀況就發生了。論文中根據郵件檔案對這一時期的狀況進行了描述,並進行了分析。
一點基本的計算機哲學將幫助咱們更好的理解發生了什麼。計算機領域已經從單體程序,即每個小小的改變均可能拉動某個地方的隱蔽槓桿,對應用程序產生破壞性影響的程序,發展到模塊化程序,即把不一樣的功能分開。模塊化現在在微服務中表現得最爲突出。
就像 1995 年的大多數軟件同樣,NCSA 服務器是單體的。而這是可持續的,由於 McCool 一直在負責整個事情。
但如今想一想,當世界上不一樣地方的十幾我的開始作出改變時,會發生什麼?這樣的多人社區是沒法與單體架構共存的。此外,模塊化將減小關於包含哪些功能的爭論。想要某個功能的人能夠爲它建立一個模塊,而不想要這個功能的人能夠直接跳過模塊的安裝。
可是,將一個大型程序模塊化是使人生畏的。它不能經過 "補丁"來完成。一我的(其實是一個臨時的項目負責人)必須從新架構整個程序。
在沒有模塊化的狀況下,人們感到沮喪,中止了貢獻。幸運的是,一位名叫 Robert Thau 的程序員承擔了建立模塊化服務器的大任,他把這個項目稱爲 Shambhala 項目。每一個人都很喜歡這個變化,Apache 項目又有了轉機。
另外一個給社區帶來一些壓力的大轉折點是 2.0 版本,它也圍繞着一種模塊化的形式。正如 van Gulik 向我解釋的那樣,一些底層庫被證實對 Web 服務器之外的項目有用。許多人但願有一個不須要安裝服務器就能安裝的庫的版本。但因爲將庫分離出來會是一個龐大的項目,對在服務器上工做的人沒有明顯的好處,因此有些人反對。儘管如此,這個版本仍是完成了。
咱們已經看到,該團隊拒絕了項目負責人模式,再也不以負責人爲中心進行代碼提交。但在一我的來人往的項目上,形式上的民主也行不通。這裏沒有演講或選民,只有一羣想來就來的人。
幸運的是,軟件能夠輕鬆知足大多數需求。正如我前面所解釋的,人們能夠選擇他們想要的功能,因此任何人均可以添加他們認爲重要的東西。另外一方面,必須有一個連貫的策略來防止臃腫或考慮不周的變化。
幸運的是,團隊出於純粹實用的緣由而達成的一項政策被證實是有價值的,它能夠防止 van Gulik 所說的 "失控進程"。團隊知道,人們處於許多不一樣的時區,許多人會在不一樣的時間請假幾天去度週末或度假。因此他們制定了一個規則,即在決定任何重要的變動以前,至少要等待48小時。這樣的政策在今天的許多 DevOps、敏捷編程環境中是沒法接受的慢動做。但 Apache 團隊很欣賞它帶來的穩定性。
那麼,如何創造一種情景,即若是一個功能有必定的最低支持率,就能夠添加它?這就是著名的 +1 系統的出現。這幾乎是一個偶然的創新。
1995 年 3 月,在團隊中扮演重要角色的 Rob Hartill 發現,他在審查補丁方面落後了。爲了簡化審查,他自發地發明了一個三級系統(-一、0 和 +1)來評定補丁,並在郵件信息中介紹了這個系統。
如今郵件列表上的人都認識到了 +1 的約定。它在 GitHub 和 GitLab 上的形式化就代表了它的優點。任何在項目中工做的人均可以在一個問題上點擊大拇指向上或大拇指向下的按鈕。
但這個慣例在 Apache 變得更加複雜。根據 van Gulik 的說法,在某些場合數字還體現了具體的承諾:
- +1 —— 我不只支持這個提案,並且會努力維護和修正它;
- -1 —— 我反對這個提案,但若是它被接受,我仍然會努力維護和修正它;
- -0 —— 我反對這項提案,也不會維護它;
- +0 —— 我支持這個提案,但不會維護它。
Apache 仍然是一個相當重要的 Web 服務器,也是該領域中最受歡迎的。對於建設開源社區來講,建立項目的經驗教訓仍然是整個開源世界的共鳴。建議每一個項目都要尊重 Apache "社區高於代碼"的價值觀。
在 21世紀頭十年的後期,社區領袖們彙集在一塊兒,正式肯定了自由軟件開發的最佳實踐。2009年,Jono Bacon 根據本身多年的開源經驗,出版了《社區的藝術》。在 2009 年由他的出版商 O'Reilly Media 舉辦的開源大會上,Bacon 介紹了一個社區領導力峯會,這個峯會在全球不少地方持續了十年。
在我看來,這十年間,開源社區在對社區和文化的關注上有了巨大的成長。在個人記憶中,在最初的幾回社區領導力峯會上,參加的都是項目成員,他們自發地承擔了建設和指導社區的非正式角色。自 1995 年以來,咱們都學到了不少東西。就像世界永遠不會容許互聯網基礎設施的一個關鍵部分被忽視同樣,開源社區將愈來愈優先考慮如何對待人們。而這也將引導軟件更好地知足人們的需求。