區塊鏈技術資源分享
追尋中本聰先生的腳步
?

開源軟件和閉源軟件區別差別?代碼是核心競爭力嗎?開源軟件一定比閉源軟件好嗎?@c4pt0r

代碼并非軟件產品的核心競爭力,開源軟件的生命力來自于人才的壟斷與不斷的更新迭代。

原文標題:《大教堂終將倒下,但集市永存》

撰文:Ed Huang,PingCAP CTO 與聯合創始人

作為一個在中國的數據庫軟件從業者,最近被不少朋友在微信上詢問業內某廠商「團隊整合」的新聞,我其實并不想對這個事情發表什么評論。

我始終堅信:基礎軟件,未來只有開源一條路。如果不開源,或者說內核不開源的話,產品的生命力是有限的。所以,在這里想分享一些我個人有關開源與閉源的看法,希望大家看完這篇文章后能夠有些自己的思考。

順便提一下,看到這個標題,熟悉開源運動的朋友肯定會心一笑,沒錯,作為 ESR 的門徒,我從不掩飾對于《大教堂與集市》這篇著作的喜愛。

另外作為從事開源的創業者,這幾年的實踐讓我們對于 ESR 的這本書的理解更加的深入,我會試著在這篇文章總結一些我們經常被問到的問題,最后一部分我斗膽給 ESR 的理論在當今云時代的背景下做一些修訂,另外我們討論的軟件范圍僅限于基礎軟件(數據庫,編譯器,操作系統等)。

代碼是核心競爭力嗎?

我和一些閉源軟件項目的作者聊過,大多數選擇閉源的原因不外乎以下幾種:

  1. 覺得自己的核心算法非常厲害,不希望競爭對手模仿。
  2. 擔心用戶拿到代碼,就不給錢了。
  3. 沒有找到或者建立自己的護城河。
  4. 代碼太丑,不好意思開源。
  5. 怕被人找到 Bug。

其中以前三種答案居多,我非常能理解,這些回答也都是非常正當的理由,只是這篇文章我們好好的就事論事的挨個分析一下,對于第四第五個理由,其實我不想過多展開,未來有機會再聊聊,我們聊聊前兩種,先看第一種,我在后邊會聊聊第二種。

對于第一種原因,我們再深入思考一下,一般可能有下面兩種情況:

  1. 我的核心代碼很短,可能是一個很巧妙的算法,或者一套很巧妙的參數。
  2. 我的工程上的設計和實現得很優秀,系統架構是領先的。

對于第一種情況,我一直以來的觀點是:如果在同一個行業里面,除非你達到了徹徹底底的人才壟斷,那么在一個充分競爭的環境,如果這個問題是一個高價值問題,那么你能想到的短短的 「核心算法」,別人也同樣能想得到。

天下沒有銀彈,計算機科學就是在無數種妥協和不完美中尋找平衡的藝術(當然,圖靈獎級別的 idea 或者量子計算機這種現象級的東西另說,但是這種機會是很少見的),即使通過閉源創造出短期的壟斷優勢,但是這個平衡一定會被另一個競爭對手打破,最終也一定會出現一個優質的開源替代品全部吞掉(這個開源事實標準短期看甚至不一定是更好的)。

其實多數的產品優勢是體現在工程實現上,也就是上面的第二種,一群優秀的工程師,在正確的設計下,構建出優質的軟件。

對于這種情況,無論開源還是不開源,競爭對手都沒有辦法很好的模仿,就像一個學霸,考了一個 100 分的答卷,把這個答卷給一個學渣看,學渣朋友肯定也沒法馬上變成學霸,因為代碼只是結果,是什么樣的思考和選擇得到了這個結果,這個過程是沒法開放的,所謂知其然不知其所以然。

當然,就算你也很厲害,也有一批優秀工程師,短時間也做出了一個不錯的產品,但是沒關系,結局和前面提到那種情況也是一樣的:

只要你是閉源的,這個問題又足夠普遍且高價值,那么長遠來看一定會有一個開源的解決方案吞掉一切。

這背后的原因其實和代碼沒有什么關系,因為代碼在這里其實并不是核心競爭力。

關于前面提到的第三種理由,我認為是和第一種類似,作者可能認識到代碼并不一定是核心競爭力,但是沒有構建好護城河的情況下,只能選擇將代碼作為護城河。

代碼不是核心競爭力,那什么才是?

在聊真正的核心競爭力之前,我們來聊聊閉源軟件的局限性。

我們看看一個閉源的軟件的一生:

  • 立項的動機可能是某個公司或者個人對于一個市場機會的洞見找到了一個高價值的場景,通過開發一個軟件能夠很好的提高效率或創造價值,甚至可能就是一張來自甲方的合同,總之這個公司招募了一伙程序員,設計師,產品經理,開始項目的開發。
  • 一切順利的情況,順利的滿足了甲方的需求,甲方也很開心的付錢了,然后這個公司發現,好像這個軟件改一改(甚至不用改)也就能夠在同行業另一個客戶那邊賣出去,這就太好了,感覺找到了一條致富路。
  • 可是好境不長,客戶這邊的場景和需求在變化,原來的軟件可能不一定能夠滿足新的需求了,但是開發團隊就這幾桿槍,稍有不慎一個方向判斷錯誤,可能時間和機會窗口就錯過了。
  • 這就意味著,對于項目領頭人的要求就很高,要求持續能夠引領行業的方向。

還有一種方式是挑選一個相對狹窄或迭代不快的領域,存活時間能夠延長一些。對于甲方也很難受,總是感覺需求的滿足慢半拍,甚至對于有些有著研發能力的甲方,因為受限于沒有源碼,就算知道如何改進,也只能干瞪眼。

其實這個問題的本質在于:閉源軟件開發商雖然可能是技術的專家,但是并不一定是業務或者場景的專家,軟件進化的速度受限于開發團隊和產品經理自己的認知和見識的進化速度,除非開發商強大到能夠持續引領整個行業的進化方向,否則無解。

其實這個問題,教員早就給出了答案:

「…凡屬正確的領導,必須是從群眾中來,到群眾中去。這就是說,將群眾的意見(分散的無系統的意見)集中起來(經過研究,化為集中的系統的意見),又到群眾中去作宣傳解釋,化為群眾的意見,使群眾堅持下去,見之于行動,并在群眾行動中考驗這些意見是否正確。然后再從群眾中集中起來,再到群眾中堅持下去,如此無限循環,一次比一次地更正確、更生動、更豐富…」

—— 《關于領導方法的若干問題 130》, 1943

要我說教員放在當代,就算是當個程序員,也能是一個大師級別的。教員的這段話,包含兩個關鍵的點,完美的解釋了開源軟件的生命力的來源,我下面的詳細講講。

開源軟件一定比閉源軟件好嗎?

第一點,開源軟件的生命力來自于場景的壟斷,而背后更本質的壟斷是人才壟斷。

為什么強調從群眾中來?回顧剛才我們閉源軟件的那段,其實一個關鍵的點是,軟件的初始動機雖然來自于少數人的洞見,但是持續保持洞見并不是一件容易的事情,這就是為什么很多技術團隊或者產品團隊容易「自嗨」,一旦脫離用戶,極易出現這樣的問題。

閉源軟件廠商觸及用戶的手段不外乎于傳統的商業宣傳和銷售,用戶從感興趣到使用起來的門檻很高,實施的周期也很長,另外通常銷售會站在產品團隊和客戶中間,通過一些信息不對稱來獲取超額的利潤,其中最大的信息不對稱就是封閉的源代碼本身或者定制化。

這導致的問題是,相比流行的開源軟件,閉源軟件沒有辦法高效的獲取,吸收和理解更多的場景,這對于一個通用的基礎軟件產品來說通常是一個致命的問題,如果見過的場景不夠多,更沒有辦法判斷產品那些需求該做是普遍需求,哪些是偽需求堅決不做,我認為這就是做產品的「觸感」。

對于一個流行的開源軟件,本身不會有上面提到的問題:

因為有足夠多的用戶,那么一定能看到足夠多的場景,也能看到足夠多的稀奇古怪的用法,這一個個用戶的反饋,修過的一個個 bug,提出的一個個建議,會持續的產生類似「復利」的效果,你的軟件越強壯,見過的場景越廣,會進一步讓你接觸到更大的用戶群,幫助軟件變得更強大,如此循環。實際上開源軟件本質上是通過放棄一部分通過信息不對稱產生的潛在利潤,換取了極其高效的傳播和場景觸及效率,但是有意思的是,實際上犧牲掉的這些潛在利潤大概率也不一定真的犧牲掉。

  1. 可能本身付費能力有限。
  2. 可能實際上這些用戶通過宣傳站臺二次傳播或者代碼貢獻等方式回饋了項目本身。

在上面那個過程中還會產生一個更加厲害的效應:人才的壟斷。

正所謂「事在人為」,上面提到的場景壟斷中種種的技術決策和實踐都是人來操作的。

一個流行的開源軟件在變成事實標準的過程中,一定會培養出大量熟悉這個產品的工程師,用戶,搖旗吶喊的粉絲,代碼貢獻者,甚至挑刺吐槽的人。傳統意義上,大家理解的開源社區只是狹義上的開發者社區,只有貢獻代碼才算參與,但是我認為只要和這個產品發生關聯的人,都算是社區的一部分,「人盡其材」才是構建開源社區的終極目標。這個優勢是會隨著時間的流逝不斷累積,這個很好理解。

舉個例子:A 公司的工程師在 A 公司的工作中學習使用了 TiDB 也很好的解決了問題,然后這個工程師作為數據庫專家跳槽到了 B 公司,遇到同樣的問題時,你猜他會選什么?

第二點,迭代,迭代,迭代,只有高速迭代才能立于不敗之地。

上面教員的話里面有個關鍵的點,關于正向循環,也就是迭代。

這個道理同樣也適用于軟件開發,軟件從來都不是靜止的,隨著市場和競爭環境的變化,你今天的競爭優勢,很可能明天就不是了。

很多人都喜歡用靜態的眼光看待問題,熱衷于各種方案的橫向對比,而忽略了進化速度,在這點上,我可能更看重的是同一個產品的縱向對比,舉個例子:目前有 A, B, C 三個方案,可能當下看這三個方案差距不大,也許在百分之五十之內。

但是如果其中一個開源方案每次和自己半年前比都是在翻倍的提升(背后開源社區推動),但是閉源的方案的進步受限于團隊規模和資源。

這時候的選擇除非是那種火燒眉毛的情況,否則一定應該選擇一個迭代速度更快,增長率更好,更代表未來的方案,這個也很好理解。

這是人的思維的一個慣性,人總是傾向用線性思維去看待問題,于是對非線性增長的事物往往會習慣性的低估。

說一個更加震撼的例子,我粗略統計了一下,從 2018 到現在,也就短短一年多時間,整個 TiDB 的 SQL 層這么一個項目發生了 30000 多次提交,有接近 60% 的源碼被修改。也就是說,每一年的 TiDB 都和上一年是不一樣的,是一個更適應當下的,更加進步的一個 TiDB,而且隨著社區的不斷壯大,迭代的速度會越來越快。我完全不能想象,如果 TiDB 是一個閉源軟件,從第一行代碼開始寫,到現在短短的 5 年時間,如何能夠到達現在這個成熟度,這一切都是得益于開源社區的帶來的加速度和反復迭代。

如何掙錢?未來在云端

剛才我們聊了很多產品哲學上的東西,我們接下來聊聊商業,以及在云時代開源軟件的位置。

讓我們回到開篇提到的那個話題:擔心用戶拿到代碼,就不給錢了。這個觀點背后的一個暗示是,用戶付費買的是代碼,如果有代碼,用戶就沒有其他理由付錢。

其實這個結論是靠不住的,客戶付費買的是解決問題和創造價值,而不是代碼,如果拿到你的代碼自己折騰付出的成本大于給你的錢(如果你能如實交付價值的話),用戶沒有任何理由不付錢。

而且這里的成本包括,比較明顯的成本,例如人力成本,機器成本。

也包括一些經常被人忽略的成本,例如錯失市場機會的沉沒成本,業務改造遷移成本,學習成本,線上出問題沒人懂修帶來的風險成本,這些隱性的成本往往是比顯性的成本高得多的。

上面我的解釋中暗示了一點:軟件的價值取決于它解決了什么問題,創造了什么價值,而不是開源與否。

舉個例子:一個分布式關系性數據庫,一定比一個分布式緩存更加有商業價值,這是由前者的應用場景,存儲的數據以及提供的能力決定的,而不是開源與否。所以這就是為什么我們要做通用數據庫的核心原因,因為價值天花板更高。

還有一點需要強調的,開源并不是一個商業模式,而是一種更好的軟件開發和分發模式。

另外,我認為商業模式和軟件本身一樣,也是需要設計的,這個設計取決于產品特性和公司的屬性,這就意味著適用于 A 產品的商業模式,不一定適用于 B,甚至同一個產品,不同的公司,可能適合的商業模式都是不一樣的。

用我很崇敬的華為公司舉個例子,華為是一個很厲害的通信設備制造商,很成功的手機終端廠商,很成功的硬件廠商。

賣通信設備,賣手機,賣服務器,大家發現共性了嗎?

華為很會賣硬件和盒子,巨大的商業成功帶來了很大的慣性,硬件和通訊設備的市場的特點是:各家產品本身能力差不太多(至少沒有代差),比拼的是滿足客戶其他需求的能力以及低價(例如:服務,更快的響應,充分的定制化)。

所以不難理解,華為軟件的思路會通過低價甚至軟件免費進入客戶場景,然后通過硬件獲取利潤的商業模式。

這個模式的問題在于,客戶不能多,一旦戰線拉得太長,項目的預算和硬件的利潤都沒有辦法的抹平定制化軟件的研發成本和支持成本時,這個模式就會出現問題。

我認為如果想要通過軟件創造可規?;某掷m利潤,需要兩個關鍵點:

  1. 生態,軟件能形成生態或者和現有生態有機整合,由生態補齊單一產品的能力,從而才能進一步能形成解決方案。
  2. 渠道,高效的分發渠道和支持渠道,這確保在用戶規?;?,作為廠商的銷售和售后成本不會隨著客戶的增長而增長(至少成本增長的斜率需要更緩)。

兩者缺一不可。

對于第一點,開源軟件構建生態是很天然的,開發者和解決方案提供商會很自然的通過不同開源軟件的組合做到解決方案的覆蓋,這個效率是閉源定制化軟件很難跟上的,這點不贅述。

第二點,其實理想的渠道就是云。

云標準化了硬件,標準化了計算力,甚至標準化了計算力的交付方式,尤其是公有云。

一切都是標準化的好處就是可以自動化,這個對于軟件供應商來說才是真正的價值。

所以開源 + 云的模式,在開源這端,完成了開發者的心智占領和解決方案的成型,然后在云這端完成極其高效的分發和價值傳遞。

看上去很美不是嗎?理論上確實沒問題,但是一定會有朋友挑戰我說:這個模式里面沒有你們開源軟件廠商什么事情???云為什么不自己提供開源軟件服務?這幾年沸沸揚揚的 AWS 吸血事件逼得一堆開源公司和項目改協議,就是一個例子呀。

關于這個問題,我的看法可能和主流觀點有點不一樣:

Cloud is eating Open-source? No, Open-source is eating the cloud.

云廠商就像當年的運營商一樣,占據著和客戶對接的第一位置,當然很自然的在關鍵路徑上放自家的產品。

但是移動夢網和飛信的故事后來大家都看到了,拿飛信做一個例子,大家還記得作為移動的飛信,當年是沒有辦法和聯通電信的手機號碼互通的,直到后來微信的出現,終于事實上打通了各個運營商,所以市場格局就出現了很明顯的分水嶺,運營商是誰不重要,只要保證網絡通信號好就行。

對于云也是一樣,AWS 肯定不會為 GCP 提供舒服的遷移和打通方案,反過來也不可能,但是對于客戶來說,這個選擇就像逼著用戶選移動的飛信還是聯通的沃友一樣(我猜你可能都沒聽說過沃友吧),用戶肯定說:不好意思,兩個都不要,我選微信。

從另一方面來說,對于在云上提供開源軟件服務這件事情,云廠商本身的投入其實不一定有這個開源項目背后的公司多,一個很好的例子是 Databricks 是 Spark 創始團隊的公司,也是一個 100% 在 AWS 上提供 Spark 服務的公司,相比起 AWS 的官方 EMR,Databricks 完全不占下風甚至客戶和產品都勝過原生的 EMR。就像飛信的開發團隊的質量肯定沒有微信高,是一樣的。

由于開源軟件的中立性,使得開源軟件成為用戶在多個云廠商之間保持統一體驗和統一服務的幾乎唯一選項。

因為開源軟件和開源服務商的存在,市場我相信會進入一個平衡:云廠商會持續優化它擅長的東西,真正的將云基礎能力變成水電煤一樣的規?;?,開源軟件廠商基于云的標準基礎設施構建服務并交付業務價值,開源軟件項目和社區由于廠商的持續持續,不斷的蓬勃發展,占領更多用戶的心智。三者形成一個價值鏈的閉環。

不要著急,讓子彈飛一會兒。

洋洋灑灑寫了幾千字,聊了聊開源,最后我想用一段《大教堂與集市》書里我很喜歡的一句話作為結尾:

「…Often, the most striking and innovative solutions come from realizing that your concept of the problem was wrong…」

「…通常,那些最有突破性和最有創新力的解決方案來自于你認識到你對問題的基本觀念是錯的…」

原文鏈接:https://asktug.com/t/topic/34660

開源軟件和閉源軟件區別差別?代碼是核心競爭力嗎?開源軟件一定比閉源軟件好嗎?

at15:
關于云廠商那里說點我自己的看法。

很多云廠商都有自己設計硬件(e.g. TPU),這樣實現系統就可以有更多的東西 push down/offload,然后也可以有一些設計上的捷徑(e.g. true time)。不過最后應該也都會開放出來或者有開源的實現,只是可能會慢一些。而且硬件廠商肯定還是希望他們能制定標準然后云廠商買他們的硬件 (AMD YES!)。用戶也不希望綁定在某個云上,除非這個賣點是剛性需求。

人才方面我覺得主要云廠商最后活下來的都是大廠,所以或多或少會有大公司的問題。

比如有些職位高的的人并不一定就是真正了解市場/技術的人,可能是來的早或者來的巧。產品多并且之間有重復,人才會分散并且內耗導致人才流失。由于試錯的成本高很多就會采取一些更保守的設計。這樣的話年輕人更多會去一些更有發揮空間和挑戰性的公司。

(當然也有我這種畢業之后甘于每天搬 proto 的菜雞, 快樂咸魚每一天)

一個好的并且一直在更新的開源軟件也可以幫助很多人學習。

很多想法即使發布了文章,跟實際實現還是有很大距離,并且文章也不會日常更新。

書和學校的教學會落后于主流環境,另外工程方面質量較差導致閱讀和理解困難。(附帶給 talent plan 點個贊,不過感覺第二期填格子以及文檔不是很到位… 一期后期停止維護…)

分享到:更多 ()
0
區塊鏈神吐槽
pi幣注冊流程教程圖解中文版

來評論吐槽 搶沙發

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址

區塊鏈資源分享聯系我

區塊鏈資源分享聯系我首頁更多新聞
做滴滴代驾还是开滴滴那个赚钱 什么原因会导致股票涨跌 黑龙江快乐十分麻将玩法 股票行情今天查询 河北11选五 广东快乐十分所有玩法 体彩排列三开奖结果中一个好 东方财富融资可以几倍杠杆 安徽快三输死了多少人 幸运28开奖最快网站 七星彩几个号算中奖