[譯] npm 的經濟風雲 —— 上半部分

npm 的經濟風雲 —— 上半部分

譯者注:html

我想給大家講一個故事,講講誰是 JavaScript 語言的公共資源的擁有者,講講咱們是如何陷入了公共資源受制於人的局面,講講爲什麼咱們須要改變這個局面。這是一個關於金錢、全部權和控制權的故事,一樣也是一個關於 JavaScript 的故事。前端

我要講的這個故事,是我所知道的版本。我是一個知識和觀點都不完善的人,所以個人故事可能會稍有主觀色彩。但我講述的內容是這個故事的精華,由於我曾親歷其中。我曾處於故事的核心,由於直到去年我仍是 npm 公司的首席技術官,該公司運營着 JavaScript 代碼包註冊中心。這個身份讓我知道了一些世人鮮知的內幕,也使我懷有一種觀點,我但願大家在聽這個故事的時候記住這個觀點。node

這個關於 npm 的故事,大家也是其中的角色。我敢說大家並無意識到這點。等我講完,大家就會知道爲何大家也是故事的一部分,以及爲何大家的存在乎義重大。android

這個故事涉及到金錢、資本家,以及那些利用開源軟件賺錢卻未曾貢獻過代碼的人。在這個故事裏,大家無意插柳,我有意栽花,這是一個關於全部權、操縱與最終結果的故事。ios

這也是一個關於權力的故事 —— 誰掌控着權力、大家的權力有多大,以及咱們能夠用這種權力作什麼。git

耳朵洗乾淨了嗎?故事要開始了。程序員

故事開始於 2000 年代的中期,也就是 Yahoo 最後的光輝歲月。Yahoo 是那時候衆多 JavaScript 活動的核心。它招納了許多 JavaScript 領域的意見領袖(例如 Douglas Crockford),推進着 JavaScript 藝術的繁榮發展。或許當時的 Yahoo 尚未一套完善的商業計劃,但其技術棧已足夠優良。github

而 Yahoo 的技術棧中的一項就是 ypm,一種軟件包管理工具,這個東西着實是慧心巧思。數據庫

得益於愈發流行的 jQuery 和遵循標準開發的瀏覽器,JavaScript 開始成爲一種引人關注的編程語言。服務端 JavaScript 在當時是煊赫一時的話題,不少項目都在努力實現它。npm

JSConf EU 盛會見證了服務端 JavaScript 的成功。就是在 2009 年的 JSConf EU 上,Ryan Dahl 宣佈了 Node.js 的誕生。

Node.js 正是人們渴求的服務端 JavaScript 平臺。早期的 Node 社區吸引了一羣有趣的人,他們喜歡嘗試前沿技術,喜歡開墾無人涉足的處女地。這羣人中有幾位參與了 Node 的早期研發,他們一開始就發現軟件包管理在 Node 領域將會很是有用武之地,因而他們就開始各自開發包管理工具。沒錯,不止一人,那是羣雄逐鹿的時代。

羣雄之中有一位是個癡迷於 Node.js 的 Yahoo 員工。他辭掉工做,便於專心開發包管理工具,他受到 ypm 的啓發,但與 ypm 不一樣的是,他的包管理工具是開源且專用於 Node.js 的。這位特殊的程序員有得天獨厚的優點:他深度參與了 Node 項目的開發,而這又讓他能夠在 Node 中實現 CommonJS 模塊標準。爲了戰勝其餘包管理工具,他作了不少努力,例如給不少開源項目提 PR,吸引開發者來使用他的包管理工具。

這款包管理工具足夠優秀,獲得了 Node 官方的大力支持,它贏了。這款 Node 包管理工具,或者說 npm,開始和 Node 安裝包捆綁打包,它可不是一個單獨的第三方插件,不須要你裝完 Node 再去下載包管理工具。這塊 Node 官方認證的金字招牌一直掛到今天。

大概就是這個時候,Joyent 用不多一筆錢從 Ryan Dahl 手中買走了 Node。

你會注意到,咱們的故事已經發展到了有趣的經濟領域了。數百萬人天天用 Node.js 作爲 JavaScript 開發的工具,而發明 Node.js 的人只用它賺了幾萬美圓。現在,不管是誰在靠 Node.js 賺錢,那我的毫不是 Node.js 的發明者 Ryan Dahl。但至少 Ryan Dahl 還能夠借 Node.js 維生,由於 Joyent 將 Ryan Dahl 招致麾下了。(提示:我聽某些知情者說,Ryan Dahl 賣出的價格不止幾萬美圓,因此短時間內他還高枕無憂。但比起 Node.js 產生的價值,這個賣價仍是九牛一毛。)

npm 的做者也被 Joyent 聘來開發 Node.js,但(劃重點)他保留了 npmjs.org 域名、npm 源碼以及源碼中的任何專利的全部權,這些都是他本身的知識產權。他並無像 Ryan Dahl 賣 Node.js 源碼那樣,把這些一股腦地賣給 Joyent。這個決定會對後世產生深遠影響,因此大家要記在小本本上。

在 2012 年,Ryan Dahl 離開了 Node 項目組,而 npm 的擁有者接替他登上了項目組的領導崗位,到了這個時候,npm 是笑到最後的那個包管理工具。

就在此刻,大家各位(或者說,至少大家中的一部分人吧)就絡繹登場了。大家是 JavaScript 開發者,大家喜歡 JavaScript 語言。若是能用 JavaScript 實現某個工具,大家絕對不會看其餘語言一眼!所以大家開始用 Javascript 開發 Node 程序,而且樂在其中。與此同時,人們(好比我)發現用 Node.js 開發多路 I/O 服務很是駕輕就熟,由於 Node 內置的 Reactor 模式簡直棒極了。耶!媽媽不再用擔憂個人多線程!從 2013 年開始,更多的人加入了咱們的行列,共同在 JavaScript 的快樂旅程上前行,Node 風靡一時。而 npm 天然也隨之流行。

一派太平盛世,是否是?嗯。

npm 的閃光點在於,它不僅是一個腳手架工具而已,它的功能不限於找到代碼包而後「咣噹」一聲下載到本地的 node_modules 文件夾裏。事實上,儘管你們如此頻繁地使用 npm 的腳手架功能,但那多是 npm 這套「機甲」最無足輕重的功能。npm 更主要是一箇中心化的代碼包註冊中心倉庫。這個註冊中心從一開始就存在,運行在一個 CouchDB 數據庫中,綁定的就是現在用的這個域名。「註冊中心」就是一個列有大量 JavaScript 代碼包及其名稱、做者以及版本號的清單。註冊中心使得 Node 代碼包易於查找,安裝起來快速可靠

npm 中有數量浩繁的代碼包,值得咱們花時間去探索。

如今來看看中心化的優勢。npm 註冊中心就是中心化的。中心化有一些顯而易見的可用性優點 —— 它能夠一站式地爲你提供所需代碼包。這個中心站點會用特定規則來管理其中的代碼包 —— 它們形式統1、提供一樣種類的信息,而且不會因做者一時之念而憑空消失。

對用戶來講,中心化有諸多好處。當這個源頭老是能提供你想找的東西,你就能夠免於踏破鐵鞋之苦,大大縮短工做時間。我最近常常要作 Go 語言開發工做,而處處搜索 Go 語言代碼包讓我感受很是彆扭,由於它們散落的滿世界都是,別無他法,要麼靠 Google 面向搜索引擎編程,要麼去翻手動維護的文字清單 —— 你懂的,就是 Yahoo 原來那種傳統的方式。並且你得從 GitHub 倉庫裏下載安裝,要知道你可能下次就找不到這個倉庫了,我簡直要被逼瘋了。8 年來 npm 帶給個人溫馨體驗拉高了個人心理預期。Go 語言生態裏沒有註冊中心可用,才讓我意識到 npm 有多體貼。

近來,中心化概念在互聯網上捲起狂潮。例如,博客已經將陣地轉移到中心化的託管平臺上了,像 Tumblr、Medium 這樣的平臺早已屹立起來了。社交媒體自己就是中心化的。開源領域中,GitHub 是中心化的表明,即使 Git 存在的使命是去中心化。

總之,npm 是一個託管全部的 Node 代碼包的註冊中心,這很棒,但是到了 2013 年,Node.js 開始崛起時,這一切就開始變味了。中心化的劣勢就是,開銷也是中心化的。npm 註冊中心的短板就是,它須要運行在一臺帶有數據庫的服務器上。

而服務器是要花錢買的。

那這筆錢從何而來?

這些年來,npm 一直靠着捐助的主機維持。Node 的開發者一部分來自 CouchDB 的團隊,所以 npm 選用了 CouchDB 做爲數據庫。很長一段時間裏,npm 都被 IrisCouch 團隊用做 CouchDB 等自家服務產品的活廣告。後來 NodeJitsu 收購了 IrisCouch,npm 仍舊沒有擺脫被人用做廉價廣告的命運。

但到了 2013 年,到了大家你們開始使用 Node.js 的時候,npm 真正獲得了用武之地,再也不是那個廉價廣告了。隨着使用量激增,npm 中大量的代碼包帶來了沉重負擔。在 2013 年的 10 月,npm 的服務器頻頻宕機,看來是時候採起措施了。

npm 須要更好的服務器。npm 須要一個全職的維護者。歸根結底,npm 須要錢。

這是個任何一個編程語言生態都會面臨的日常問題。就好像 RubyGems 也須要資金來運營同樣。Perl 好久之前就經過 CPAN 網絡鏡像解決了這個問題。

npm 的擁有者決定要作一些其餘語言的包管理工具沒作過的嘗試:接受風險投資,把 npm 包裝成一家公司。他親眼目擊過 Joyent 給 Ryan Dahl 出的價格是多麼低廉,也知道 Node.js 的價值到底應該值多少錢(即便 Joyent 也沒靠 Node.js 賺多少錢)。他保留着 npm 的全部權,因此即便他運營着 Node.js 這樣的開源項目,他仍決定讓 npm 走商業路線。

所以,他向 Joyent 遞交了辭呈,成立了一家公司 —— npm 公司,從一家風投公司得到了創業基金。

Node 項目組決定支持這一舉措,並保留 npm 做爲 Node 官方御用包管理工具的特權。關於這一點,我不知道 Node 項目組內部是否意見一致,由於我沒有參與這件事。Node 項目在 2013 年年末進入了瀕死期,因此這可能也是不得已而爲之。總之,Node 項目組容許一傢俬企將其產品捆綁在自家的 Node.js 上。他們對此安之若素。

大家(JavaScript 開發者)也是支持此舉的一方。大家各位,連同整個 JavaScript 生態,大家的決定相當重要。大家連腦子都沒過就贊成了,只顧着享受 npm 帶來的便利,對於 npm 的質變睜一隻眼閉一隻眼。

「Ceej,我懂你的意思,但那時候咱們尚未用過 npm 呢!咱們並不知情!」沒錯!大家大多數確實不知情!但大家瓜熟蒂落地接受了這個決定。大家可能都沒有意識到這是一種支持。npm 公司就在那,而大家歷來沒有質疑過。或許大家沒意識到它是私企性質的機構,或許大家根本就不在意。

但在當時,那是一項有爭議的決定。一直免費託管 npm 的 Nodejitsu 公司對此非常不滿。Nodejitsu 一直在本身籌劃的 #scalenpm 活動,在 npm 的擁有者籌集風投資金的同時,他們也籌到了一筆錢。這涉及到一些法律上的漏洞,對於這些,我知之甚少。我只知道 npm 迅速而潦草地和 Nodejitsu 一拍兩散,由於兩家公司已經處在糾紛之中,產生了法務層面的較量。隨後,npm 迅速脫離了 Joyent 的公司,由於兩者一樣起了糾紛。

當利益之爭擺上檯面,昔日的情誼也就煙消雲散。曾經因開源而創建的友情,在金錢競爭的壓力下土崩瓦解。

在這種關頭,我也作出了抉擇:對於風投公司佔有 JavaScript 的公共資源,我決定接受。但個人真實想法並不是如此。我告訴我本身,這麼作是爲了把 Node 發展壯大。我真的很喜歡 Node 編程,而 npm 是我首次參與開源開發的地方。一想到要把 Node 社區建設好,我就熱血沸騰。我深信 npm 的 全部者所言,咱們會讓 npm 公司自力更生,咱們的服務器會快樂地嗡鳴着把代碼包分發給廣大開發者。

就這樣,時間的腳步來到了 2014 年,npm 公司成立了,手握風投資金,開始招兵買馬。一號員工是 Raquel Vélez,大家或許在 JSConf 上聽過他的演講。而二號員工就是我。

我最終成了 npm 開發團隊的領導,而後,怎麼說呢,後來的事大家都知道了。咱們確實「誤打誤撞」地把 npm 作大作強了。咱們的運營工做如此成功,讓 Node.js 的普及率爆炸性增加。全部 JavaScript 開發者都開始用 Node.js 作開發,而 npm 則成爲每一個 JavaScript 開發者平常工做中不可或缺的一部分。你們都把 npm 問世以前不能實現的 Web 項目拿出來從新啓動。形勢一片大好!那是一段傑出職業生涯中的高光時刻,我頗引覺得豪。

故事發展到了 npm 輝煌歷程的頂峯,而咱們要在這裏暫停一下,

咱們要說說「金錢」這個詞。

爲何 Ryan Dahl 沒能在一座熱帶小島上愜意地生活?

爲何 James Halliday 沒能在他的熱帶小島上圓滿地退休?

爲何 Dominic Tarr 沒能擁有一艘遊艇,只有一艘帆船?

爲何 Jan Lehnardt 還要辛辛苦苦作一份全職工做?

這些人名大家聽過嗎?他們就是大家筆記本電腦裏的 Node.js 的開發者,而 Node.js 就是大家天天使用的成千上萬個開源程序的靈魂所在。不僅僅是大家,每一個世界五百強企業都在用他們開發的軟件,還有另外幾十人是 Node 和 npm 的早期貢獻者。儘管他們開發的軟件創造了巨大的價值,他們卻並未所以而富有。

從中獲利的資本家本該給這些默默無聞的開發者予以報酬,然而遍身羅綺者,不是養蠶人。

我相信,絕大多數爲 JavaScript 公共資源作貢獻的開發者都是不求回報的。他們或許也但願擁有熱帶小島,但他們從未期望用開源貢獻來實現金錢夢想。在 Node.js 發展史的初期,npm 的使用者不多,都是圈裏人,他們在開發那些模塊、創造 Node.js 生態時,本意根本不在於賺錢。

他們作的還不止這些。他們互相交換禮物,這種氛圍與金錢沒有任何關係。

在美國和加拿大的太平洋西北沿岸,當地的美洲土著居民有一種贈送禮物(而非收受禮物)的習俗。他們將這種習俗稱爲 Potlatch。Potlatch 這種社會習俗被西方殖民者暴力廢除了,但這個詞語流傳了下來,由於這種對分享的渴望是人類的天性。Potlatch 正是讓咱們彙集在一塊兒的動機,由於它激勵着參加大會和登臺演講的每個人。Node 早期的社區文化正是這種 Potlatch 文化,那時候,人們以本身的我的意願爲出發點,彼此共享軟件庫,以使每一個人的 Node 程序愈發強大。

每個由開發者自發發起、與商業無關的開源項目,都或多或少傳承着 Potlatch 精神。而這種對 Potlatch 文化的現代詮釋沒有遭到暴力鎮壓。資本家愛它還來不及呢!爲何?由於他們發現能夠藉此來武裝本身,對付咱們。而對付咱們的武器,就是 Eric Raymond 式的開源。

大家可能都知道免費軟件(Richard Stallman 式開源)和開源軟件(Eric Raymond 式開源)的區別。Stallman 的 GNU 協議旨在讓用戶把使用共享源代碼構建的軟件也免費地共享出來。或者至少把源代碼免費共享出來。暫且不論 GNU 協議是否實現了其目標,而人們確實對此爭論不休。我不打算在此老生常談。我只想說說 ESR 風格的開源,這種開源形式是你分享的源代碼帶有許可協議,這種形式目前佔據上風。就好像大家你們平時作的那樣 —— 大家可能在本身的軟件中使用「許可性質的」 MIT 和 BSD 協議,而對 GPL 協議棄若敝屣。

資本家喜歡 ESR 式開源,由於這樣企業就能免費得到許多好處。資本家甚至得寸進尺,告訴你說要想找到工做,就必須支持 ESR 式開源。他們告訴你「GitHub 就是你的簡歷」,他們攤開手掌向你索要免費的源代碼,再包裝成本身的產品去賣個好價錢。

Dominic Tarr 開源了推流(pull-stream)技術,每一個世界五百強企業都在免費使用他的勞動成果,而獲利卻與 Dominic Tarr 無關。這就式赤裸裸的現實。

在咱們的故事中,偏偏是不曾開源其知識產權的人最能賺得腦滿腸肥。固然了,這我的賺到的錢不會像爲這一切買單的風投資金那麼多 —— 真正富得流油的人是那些手握原始資本的人。而這些掌控着 JavaScript 公共資源的人,卻和 JavaScript 沒有半毛錢關係。

如今讓咱們來聊聊我反覆說到的這個詞 —— JavaScript 公共資源。這個詞是什麼意思?

公共資源啊!這是一個單數名詞,意思是全部社會成員都能享受的資源的集合。它能夠是天然資源,好比咱們全部人都在呼吸的空氣。它也能夠是咱們共同放牧的草場。

歡迎繼續閱讀本系列文章的下半部分:

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索