Docker 開源的歷史
目前服務的公司主打開源軟體為核心,透過公開程式碼來吸引使用者、創造社群的聲量以及獲得回饋。我們相信軟體必須要有更多人使用才能創造更高的價值。然而開源軟體的精神雖然很好,但是公司為了生存還是得有生財之道,我們總是為了如何制定商業策略、如何營利所困擾。因此,我開始研究市場上到底其他以開源軟體為主體的公司是如何生存的。
開源軟體的概念存在已久,一開始是理想主義者希望擁有自由修改軟體的基本權力,到現在已經更多成為一種商業手段。大部分的開源專案沒有商業公司在背後支持都無法長久,而公司在商場這個殘酷的叢林中依然需要遵循適者生存的法則。
因此,生存是目的,開放是手段。這完全體現在著名軟體公司 Docker 的成長背景中。
Docker 這家公司最一開始的名字是 DotCloud,在那時雲端概念如日中天時,主打提供平台即服務 (PaaS) 的業務。然而這個產業競爭十分激烈,因此他們決定在 2013 年開源內部所使用的容器技術 Docker 來吸引社群的目光。這種方式也是一個為何要開源的常見理由,開源的專案相對於閉源比較能吸引開發者注意,而有了流量就類似於打廣告,開發者們更有可能採用他們的 PaaS 解決方案。
沒有想到的是,這個技術比想像中更受歡迎。儘管人們都可以在 Linux 上採用 cgroup 和 namespace 等來做到類似容器化的功能,但是設定實在太複雜了。Docker 的出現能夠隱藏 Linux 上複雜的設定,用簡單的映像檔打包了容器,讓使用者可以輕易使用容器。
這時 DotCloud 也順應趨勢把重心改放到 Docker 上面,推動其生態成長,並且改名為 Docker Inc.。Docker 為了統一生態系,在 2015 年成立了 OCI (Open Container Initiative) 這個組織來定義容器的規範。在那時 Docker 可以說是容器的等義詞,就像 Google 與網路搜尋的關係一樣。不過也因為這樣,當 Docker 限制這個名稱的商標使用時,社群也有反彈聲浪,認為他們利用開源捧紅了 Docker 卻又將其納為商標。
事情並非一帆風順,Docker 很快就面臨了一系列的挑戰者,其中最著名的就是 Google 提出鼎鼎大名的 Kubernetes。
Kubernetes 是為了企業容器部屬與管理所產生的開源專案,功能完整且擴充性高。儘管 Docker 也有提出類似的解決方案 Docker Swarm,但是開發速度太慢,而且它比較偏向給開發者入門簡單的管理功能,因此眾多企業紛紛選擇使用 Kubernetes。由於 Docker 的商業產品 Docker Enterprise 深度綁定 Docker Swarm,而沒有在發現社群轉向時趕緊與 Kubernetes 整合,也因此慢慢喪失了競爭力。
我們可以看出在開源的世界裡,為了維持頭部玩家的地位必須不斷推陳出新,不然隨時會被其他競爭者超越。當社群的目光不再集中在自己身上時,就開始失去開源的種種好處,例如使用者的回饋、開發者的貢獻以及生態系的活躍(各種圍繞自己的套件與工具)。我也曾經親眼見證這段歷史,當初 Kubernetes 崛起時,我正在讀研究所,實驗室討論的熱門雲端關鍵字從 Docker 轉移到 Kubernetes,大家都在想怎麼有效利用這個新技術。
當在開源領域的品牌逐漸遭受侵蝕,Docker 不再是唯一呼風喚雨的公司了。它意識到不能繼續把核心的底層技術握在手裡,不然市場上的玩家遲早會開發出另外一套技術。因此,Docker 捐贈了它容器技術的核心 containerd 到 CNCF (Cloud Native Computing Foundation) 這個第三方機構,讓其他依賴這個技術的人更安心,Kubernetes 也能持續使用 containerd 作為其核心。
在 2019 年時,Docker 判斷自己再也無法與 Kubernetes 競爭,因為後者更加受如 Google、Redhat 等大型公司所青睞。於是便把自己的商業解決方案 (Docker Enterprise) 出售給 Mirantis。瘦身之後的 Docker 則是專注於工具以及平台服務上。
目前 Docker 有兩個主要產品:
• Docker Desktop: 在 Windows 和 MAC 下的圖形化工具,一定規模以上的企業要付費。這也是目前的最大宗收入來源。
• Docker Hub: 提供雲端託管平台,可以存放 Docker Image,一般使用者可以免費使用,但也提供企業更好的加值服務。這與 GitHub 的策略相似。
從 Docker 的歷史可以看出,他每一次的轉變和開放都與商業考量息息相關。最一開始為了推廣自家 PaaS 而開源 Docker,再來因為受競爭對手的壓力而放棄 containerd 的所有權,最終放棄商業方案並專心提供工具和平台給開發者。儘管開源可以吸引大量使用者,但當發現某項技術有用的時候,其實也沒有足夠的護城河防止其他競爭者的進入。先行者仍必須要持續進步,維持在社群中的話語權。一旦不再是舞台的中心了,其價值也就大幅度滑落。
Docker 是一家曾經站在時代巨浪上的公司,乘著雲端和開源浪潮而起,卻也因開源的激烈競爭而落。這讓人不禁懷疑開源專案的最佳策略是否是納為大型企業的其中一部分。大型企業不缺養活這些專案的錢,但是這些專案卻能為其提供新的增長點,就像是 Google 的 Kubernetes 為其雲端方案 GCP (Google Cloud Platform) 帶來好處一樣。聽說微軟曾經出價 40 億美元要買下 Docker,或許當初接受了,如今的容器化的戰場又是另一種不同的格局吧!