文|三易生活
2022年剛開始沒幾天,開源社區就發生了一件大事,一個知名開源庫Faker.js的作者Marak Squires,選擇主動惡意破壞自己的這個項目,并且不僅“刪庫跑路”、還注入了導致程序死循環的惡意代碼,使得全球大量使用該項目的個人與企業都受到了不小的影響。
作為GitHub上的知名開源庫,Faker.js的主要作用是能快速為項目生成可用于測試的假數據,包括用戶名、密碼、郵件、日期、地址、文章等內容。對于開發者而言,在實際的軟件開發過程中使用假數據進行測試是一個必要環節,其同時也能夠幫助開發者驗證前端設計的合理性。
如今打開GitHub上的Faker.js頁面,所有配置文件最后的提交信息都是“endgame(游戲結束)”。并且耐人尋味的是,Marak Squires在Readme中寫下了“What really happened with Aaron Swartz”這句話。據悉,Aaron Swartz是傳記電影《互聯網之子》的主角,作為Reddit的聯合創始人,他用生命捍衛了互聯網的開放、自由和共享。
發生在Faker.js這個項目上的故事,簡單來說,就是這一項目的開發者Marak Squires去年因為公寓失火,導致各種貴重物品丟失、無家可歸,因此他提供了自己的PayPal賬號尋求捐贈。但顯然依靠網友捐款并不是長久之計,因此他還選擇了在Faker.js的基礎上,探索付費增值服務Faker Cloud,而這也是開源軟件的一種重要商業模式。
然而意想不到的事情發生了,Marak Squires開發的Faker Cloud是提供在線“假數據”生成的云服務工具,而作為Faker.js的第二大捐助者,Retool.com在每月捐出500美元后,隨即也以Faker.js為基礎開發了與Faker Cloud一模一樣的工具,并且還完全免費。更絕的是,Retool.com引用的CDN域名是cdn.fakercloud.com,簡直是“殺人還要誅心”。
事實上,Retool.com是一家已融資7500萬美元的公司,這也使得Marak Squires的Faker Cloud在商業競爭中幾乎是毫無勝算的。不過Marak Squires也很“識時務”,直接就給Retool.com的CEO寫了封郵件,表示既然你們如此喜歡這個項目,要不就把Faker.js與Faker Cloud直接買了。而Retool.com隨后做的,則是嘴上說著這個提議我們會認真考慮,然后就沒有然后了。
這一操作就相當于是把Marak Squires當成了猴耍,所以難怪他會心態“爆炸”,最終不但刪庫“跑路”,還要往庫里注入惡意代碼,實實在在地惡心使用者。
而現在的情況也已經十分明了,結果是開源項目的參與者盡管嘴上喊著支持、在實際行動上卻并非如此。更何況,Faker.js也并不是沒價值,其在GitHub上一共獲得了3.4萬顆star、全球有近千萬的開發者在使用、共計2萬余個項目依賴它,并且每周下載量超過250萬次、總計被下載了超過1.21億次。
上億的下載量以及千萬級的活躍用戶群體,這樣的數據即便是放到消費級市場都是相當出色的,更遑論Faker.js屬于生產力工具。如今對于Marak Squires的這一操作,開源社區的風向則是相當分裂,有人認為“開源就是這樣的,玩不起別玩,放惡意代碼屬于惡意破壞”,但也有認為“代碼是人家的,人家有權在開源協議的范疇內任意處置”。
顯然,這兩種說法都有一定的正確性。畢竟開源代表的開放包容,是互聯網精神在現實中的投射,開源追求是的降低技術門檻、避免重復造輪子、用價值回饋社區,是一種開放和共享的軟件開發方式。開源精神講究的是“人人為我,我為人人”,所以一旦將代碼開源后,自己作品的命運可就不完全掌握在自己手中,變為了屬于所有開源參與者或社區的了。
具體到Faker.js這個項目,Marak Squires所使用的開源協議是MIT License,并且其應該是所有開源協議里最寬松的,除了必須包含許可聲明外、再無任何限制,也就意味著開發者和使用者各自自行承擔一切的責任和后果。開發者不需要肩負為社區提供可信引用源的責任,使用者也沒有為開發者付費的義務。
但之所以會造成開源社區里對Marak Squires這一行為的態度分裂,其實也是開源軟件先天性的缺陷所導致。開源軟件帶有鮮明的烏托邦色彩,然而現實卻是“人人為我,我為人人”,并且這一切在利益面前也變得極為脆弱。對于商業公司而言,開源是展示技術實力、對行業產生影響力的一種方式,是服務于公司戰略,屬于實現商業利益中的一環。
而對于個人開發者而言,開源軟件則更像是屬于程序員的自媒體。在過去的很長一段時間里,有不少程序員因為開源獲益,主要途徑都是用開源軟件在社區里打響名聲、獲得聲望,然后借助聲望來獲得高薪的工作,或者是去創業。但做一個出色的開源項目與掙大錢之間并沒有因果關系,個人開發者直接借助開源軟件來掙錢也是少之又少。
并且開源與商業化也并不沖突,其中最著名的例子,應該算是Red Hat Linux(紅帽)了。他們免費提供Linux發行版,企業也可以通過付費訂閱來獲得技術支持,最終其更是在2018年被IBM以340億美元的價格收購。然而問題就在于,依靠Linux掙大錢的紅帽并不是Linux的創始團隊,Linux的創始人Linus Torvalds也只是在紅帽上市時被贈送了50萬美元的期權而已。所以這就是問題所在了,并非所有的開發者,都有著如同Spring框架創始人Rod Johnson一樣出色的營銷能力。
發生在Faker.js作者Marak Squires身上的悲劇,就在于換取影響力是開源的核心收益,但在影響力的變現上,個人開發者甚至還不如自媒體,畢竟自媒體的受眾是讀者,而開源的受眾卻是同行。自媒體將流量賣給廣告主等甲方,而開源軟件作者的同行就是一個個的甲方,這就很尷尬了。
當然,發生在Marak Squires身上的事情,其實對于開源本身的影響并不大。畢竟開源軟件能夠存在數十年,自然是有著可取之處的,開源軟件作者與社區之間的相互成就關系還是能維持的,但其對Faker.js所使用的MIT許可證協議,卻可能帶來很大的影響。
前文中曾提及,Faker.js項目采用的MIT協議是所有開源許可中最寬松的一個,基本上等于開發者將自己的知識產權提供給所有人免費使用。因此這件事勢必會讓許多開發者意識到,如果Faker.js使用的是GPL協議來開源,情況則可能會大有不同。
由于MIT協議對雙方都毫無約束力,導致Retool.com復制Faker Cloud也完全任何阻礙。而自由軟件基金會(FSF)發行的GPL協議中,則是這樣規定的,如果你使用了GPL協議發布的代碼后,在法律上你的代碼也得依據GPL開源出來,這就是在軟件開發領域中GPL許可證擁有“傳染性”的來源,也就是所謂“我開放了我的代碼,所以也要求你開放的代碼”。
GPL的“傳染性”導致了相當多的商業公司,會在自己的項目中想方設法隔離GPL,例如當初谷歌為了將Android隔離GPL,直接重寫了作為Linux系統中最底層API的glibc。所以GPL協議的意義,就在于開源軟件的作者在向社區付出善意的同時,還可以避免商業公司利用開源獲益、卻不回報社區。
但不管怎么說,為眾人抱薪者、不可使其凍斃于風雪。