開源中的 “胖虎效應”
今天我們來聊一個非常有意思的現象:“胖虎效應”。
胖虎是經典動漫《哆啦 A 夢》中的 “反派角色”,常年對主角大雄實施校園霸凌,一副豬皮惡霸的形象深入人心,是很多小朋友厭惡的對象。然而在一些《哆啦 A 夢》劇場版的作品中,胖虎偶然間做了一件好事,就會給人一種 “這小子其實也不是那么壞” 的感覺,使得觀眾對其好感直線上升。
反之,一個平日里一直做好事的正人君子,突然被曝出做了一件壞事,那么這個人在人們心中 “壞” 的形象則會倍增,甚至會把他此前做過的所有好事全盤否定,給人一種 “這個人一直以來的好都是裝出來的” 感覺。也就是俗話說的,“偽君子比真小人更可怕”。
“胖虎效應” 最初出自漫畫《銀魂》的一句惡搞臺詞,雖然該定律并沒有什么靠譜的理論依據,但通過胖虎這個簡單的例子,直觀地反映了一種常見心理現象。這種現象映射到現實生活中,我們能看到很多例子與之相符,其中開源領域尤為契合。
開源中的 “胖虎效應”
“胖虎效應” 在開源領域最經典的例子就是微軟的轉變。
眾所周知,微軟曾是開源世界最大的敵人,這個專有軟件巨頭在 20 年前公然宣稱以 Linux 為代表的開源軟件是業界毒瘤,并通過媒體輿論、法律威脅等手段對開源社區進行了長達十余年的無情打壓:開源經歷了什么樣的打壓?
在很長一段時間里,微軟在開源社區中的風評是這樣的:
微軟之所以(名聲)那么臭,歷史原因。可見,壞事不能做多了,做多了壞事,想做好事都很難。—— 2012-10-02
微軟、開源這兩個詞怎么可能放在一起。—— 2014-06-11
M$ 啥時候會對開源有好感?應該說從來沒有過。—— 2014-06-12
而在 2014 年更換 CEO 以后,微軟順應市場潮流轉向支持開源,并將旗下 .NET 技術棧中的大量技術開源出來,積極投身開源社區建設,贏得了開源業界的諸多好感。哪怕其背后的核心邏輯仍然是從商業利益考量,通過開源來開拓開發者市場。如今,微軟在開源界的一舉一動都受到社區朋友們的廣泛關注,開源的 .NET 技術體系也在國內外獲得了大量的支持者,積累了不錯的口碑。
微軟這次走對了,轉向 .NET —— 2014-11-13
建議去看看去年的 Linux 內核源碼企業貢獻榜,微軟已經在前二十,還癌癥…… 早就是陳芝麻爛谷子的事了。—— 2014-11-15
微軟我愛你。—— 2014-11-16
微軟總算是開放些了,轉性了 —— 2015-02-04
“胖虎效應” 在開源領域的反面案例則更為常見。
去年我們曾報道了 Qt 從 5.15 版本開始將 LTS 轉入商業化運營模式,即 Qt 官方長期支持的 LTS 穩定版二進制文件需要用戶付費才可下載使用。此舉一出 Qt 官方立刻遭到社區用戶的強烈抗議,這個受眾廣泛的開源跨平臺開發工具似乎在一夜之間口碑崩塌。
Qt 已死,不會再用了。—— 2021-01-06
向逐漸閉源走商業化的 Qt 說再見,期待社區版 Qt 面世。——2021-01-06
與之類似的還有紅帽公司停止維護 CentOS,轉而推出滾動更新的 CentOS Stream 的事件。
之前市場大,可以通過開源擴大影響力,現在競品都死差不多了,開始要準備收割,商業化公司來主導這個事情,特別是上市公司,必然會以盈利為目的。大家都散了吧,白嫖之路越走越窄。—— 2020-12-10
我最厭惡的就是 Stream 這個單詞 —— 2020-12-10
穩定版變成滾動更新版,這樣看,在服務器領域 CentOS 的確是要死了。—— 2020-12-10
雖然這些開源項目曾在很長一段時間里為無數用戶提供了優質、免費的服務,但當其背后的決策者最終 “圖窮匕見”,邁出商業化的一步時,被社區 “正義的” 輿論吞噬似乎是一種必然的結果。
近來比較典型的案例就是在前端圈子鬧得沸沸揚揚的 “開源投毒事件”。
先是 vue-cli 的依賴項 node-ipc 包的作者米勒(@RIAEvangelist)為聲援烏克蘭,在項目最新版本中加入了名為 “Peacenotwar” 的文本文件,此外,如果用戶的計算機是俄羅斯或白俄羅斯的 IP 地址,米勒會將惡意代碼插入到程序包中以覆蓋用戶的文件系統。該事件對大量 node-ipc 項目的下游用戶造成了惡劣影響,許多服務器和個人電腦在更新到最新代碼時出現故障,部分涉及俄羅斯 IP 的用戶系統文件受損。
后來又有周下載 60 萬的 npm 包 “event-source-polyfill” 作者在新版本中偷偷加入反戰代碼的事件。一時間導致前端圈人人自危,各行各業開始排查自己的開源項目引用情況。
事件一出,不僅是這些項目的原作者在業界的聲譽跌入谷底(哪怕他們曾為開源社區貢獻了很多優秀的代碼,并兢兢業業地無償維護數年),更要命的是,這些開源作者在此次事件中的激進做法還連帶著讓很多企業用戶開始對開源軟件本身的安全性產生疑慮。
正如 GitHub 上一位開發者的留言所說,“這次事件將導致與俄羅斯或政治完全無關的其他公司意識到,免費和開源軟件可以被作為供應鏈攻擊的一種途徑來導致他們的業務癱瘓,并開始在他們的公司內禁止自由和開源軟件,注意,是所有的自由和開源軟件。”
理智看待 “胖虎效應”
無論是前文提到的 Qt、CentOS 的商業化轉變,還是 node-ipc 、event-source-polyfill 項目投毒事件,都讓很多人對這些開源項目的好感急轉直下。究其本質,“胖虎效應” 的產生源自人們原有期望出現落差。
包括 Qt、CentOS 在內的大部分開源軟件,在推廣階段通常會以 “開放、自由、共享、免費” 等標簽進行包裝,在受眾群體心中樹立了很高的期望,以至于現在仍然有很多人將開源與免費劃等號。因此當這些開源軟件突然轉向商業化時,必然會被冠以 “割韭菜” 之名,遭到眾多用戶的唾棄。
由 npm 包投毒事件引申出的開源軟件供應鏈安全問題同樣如此。“只要眼睛多,BUG 容易捉” 為我們樹立了開源軟件代碼透明、安全、可靠的期望;崇尚奉獻、共享精神的大部分優秀開源項目作者也在人們心中樹立了可靠的榜樣。然而當開源項目作者往一個廣泛流行的 npm 包中 “投毒” 的極端個例真的發生時,勢必會對開源軟件在人們心中積累的美好印象造成劇烈沖擊。
另一方面,“胖虎效應” 很容易讓人們陷入一種 “非黑即白” 的誤區。
事實上,無論是微軟、Qt 還是紅帽,他們的本質都是以盈利為目的的商業公司,開源則是一種軟件推廣的手段。從閉源轉向開源,或是改變開源的方式以促進收費業務的增長,都是這些公司的決策者在特定時期出于公司利益考量而做出的商業決策 —— 如果開源能讓產品吸引更多用戶,并且對公司主營業務的盈利沒有影響,那我就積極擁抱開源;如果這個產品或功能改為收費能增加公司的營收(只要能承受由此造成的部分用戶流失),那我就推出對應的付費服務。
而作為用戶的我們,只需要判斷這個產品好不好用(值不值得我們花錢用商業版,值不值得我們花時間精力去 rebuild 社區版),再選擇繼續支持或是瀟灑轉身即可,順帶感謝他們曾經給我們提供過的免費服務。
延申到 npm “投毒” 事件導致的企業用戶對開源軟件安全的疑慮。一方面,閉源軟件事實上也會存在不同程度的安全性問題,也有被注入惡意代碼的可能;另一方面,很多開源軟件背后也有基金會、商業公司等組織進行維護(不會憑借某個人意愿輕易作惡)。因此,無論是開源還是閉源軟件,代碼安全性的審查和測試都是每個企業都需要重視的環節。
所謂的 “胖虎效應” 說到底只是一種圖一樂的說法,這提醒我們面對開源時也要保持辯證思維,避免陷入 “非黑即白” 的思維陷阱,開源與否和軟件本身的好壞無關。不論是面對開源項目、開源作者還是開源項目背后的商業公司,都無需道德綁架,只要選擇能夠滿足我們自己需求的軟件即可。