15 年开源路,从大厂搬砖到创业挖坑

LogicAetherMaster
• 阅读 890

上个月回蚂蚁做了一场有关开源的分享,让我讲讲离开公司自己做开源创业后的感想。

15 年开源路,从大厂搬砖到创业挖坑

正好借着端午节的时间,也更完整地回顾一下自己职业生涯 15 年来和开源结缘的经历。

邂逅 Cappuccino

15 年开源路,从大厂搬砖到创业挖坑

08 年参加工作后,第一个投入精力的开源项目是 Objective-J 和 Cappuccino 框架,因为我的第一份工作是 Mac 应用开发,使用的是 Objective-C + Cocoa 框架。Objective-J 和 Cappuccino 是 Web 版的 Objective-C,Cocoa。这个对于我这样一个不想再单独学习 JS, CSS 这些,但又想开发 Web 应用的人来说很有吸引力。尤其是项目背后的公司 280 North 还专门做了一个网页版 PPT 软件 280slides.com 来展示他们这套方案的能力。

15 年开源路,从大厂搬砖到创业挖坑

280 North 这家公司的名字取自 280 公路,它是连接硅谷核心地带和旧金山的两条高速公路之一,另一条是 101。但因为 280 沿途风景优美,所以大家更喜欢走 280。

15 年开源路,从大厂搬砖到创业挖坑

我空下来时间就在捣鼓 Cappuccino,那时同事还发起了 CocoaHeads 北京的社区,我也去给大家分享了一下 Cappuccino,这也是我至今唯一一次参加的线下社区分享。后来 280 North 还出了一个 Web 版的 Xcode,虽然要收费,我也立刻去充值了信仰。

15 年开源路,从大厂搬砖到创业挖坑

即使放到今天来看,Cappuccino 的技术和设计品味都不过时,就连它商业化产品采用的名字也和 MongoDB 一样,都叫 Atlas。也后来没过多久 280 North 这家公司就被摩托罗拉以 2000 万美金收购了,而公司就只有 3 个人。

15 年开源路,从大厂搬砖到创业挖坑

去瞄了眼 GitHub 上 Cappuccino 的仓库,居然最近还有活跃。

15 年开源路,从大厂搬砖到创业挖坑

15 年开源路,从大厂搬砖到创业挖坑

虽然项目算是黄了,我购买的 Web IDE 也打了水漂,但还是从项目本身学到了不少,也感受了一把大厂的钞能力。

集成 libcurl

15 年开源路,从大厂搬砖到创业挖坑

工作中第一次深度接触的开源项目是 cURL,更具体的说是它的库 libcurl。因为当时要实现一个通过脚本去调用 Web 服务的能力,而因为我们的产品需要同时支持 Mac, Windows 以及 iOS,所以就需要找一个 C 语言系跨平台的库。调研了一圈,发现了 cURL 以及 libcurl,看着支持各种协议,就决定选它了。

在产品里集成 libcurl 是那时工作以来挑战最大的一个任务,因为是添加一个底层框架组件,然后这个任务据说是 CTO 接到了用户需求,临时加塞进来的,实在没人了,就交给我这个 Junior 做。我还好对 Cocoa 框架熟悉,于是就照着它里面的 NSURL,NSConnection 设计了一版。记得印象很深的是 deadline 最后一晚,还在公司搞交叉编译,弄到半夜才搞定,没人 review,只好先提交完代码,结果开车回去,闯了个小路上的红灯,被埋伏在那里的警察逮个正着,吃了张巨额罚单。第二天到公司,QA 组长群发邮件,说 test build 坏了,一看果然是我干的,交叉编译的环境还是漏了,再给大家回了封致歉的邮件。修好后,QA 刚准备开测又疯了,因为 curl 本身支持各种协议,集成了 libcurl,就天然支持了各种协议,那理论上 QA 就要把各种协议都测一下。

15 年开源路,从大厂搬砖到创业挖坑

所以后来讨论了一下,就缩减到第一版只支持 FILE, HTTP 这两个协议。随着工作年限的深入,我才知道 curl 的影响力之大,几乎所有的技术文档都有它的身影。其实当时做完需求,我只是觉得这玩意真不错,居然能支持那么多协议,这也是我第一次在工作中用开源组件解决问题,算是尝到了开源的甜头。

维护 MySQL & PostgreSQL 分支

13 年去了 Google,做的是数据库云计算服务 Cloud SQL,一开始它提供的是基于 MySQL 的云服务。Cloud SQL 团队自己维护了一个 MySQL 分支,我后来成为了分支的主维护者,负责每次同步上游的新版本。到 Cloud SQL 要推出 PostgreSQL 服务时,我也负责整个研发,第一步先是把当时最新版的 PostgreSQL 在 Google 内部的 Blaze 系统进行编译,而这个过程中最折腾的是 PostgreSQL 的 PostGIS 插件,这个插件是 PostgreSQL 的杀手级组件,一定要有,但是这个插件本身又依赖另外几个处理 GIS 数据的开源项目,所以就又扯上了 Geo 部门。

之后 Google 的 MySQL & PostgreSQL 分支一直就由我在维护着,我们本身提供的是原生的 MySQL & PostgreSQL 服务,所以对于内核的改动不算太大。但这个职责让我和上游社区有了更多的接触,同时和 Google 内部的开源管理团队打了一些交道。

旁观开源

2018 年回国后入职蚂蚁,首先加入的是 OceanBase 的 DBA 团队。OceanBase 现在是开源的,在我加入前也曾开源过,不过我在团队的那段时间正好在闭源阶段。后来我还先后去了研发效能部和体验技术部,但我负责的那块正好也都没有采用或者维护开源项目。不过那段时间海外的几家头部开源公司都跑通了商业化,国内也有像 PingCAP 这样的开源标杆,大厂也越来越重视开源这块,蚂蚁也成立了开源技术委员会,我也代表所在部门参与其中。蚂蚁也是优秀开源项目云集的地方,突出的像前端的 Ant Design,数据库的 OceanBase。可惜在蚂蚁的时候,没有契机参与到开源项目中。而从旁观者的角度看,蚂蚁和 Google 很类似,作为各自地区开源领域的标杆公司,既是开源很大的受益者,也是开源很大的贡献者。不同的是,相比于 Google 有相对充足的开源支持资源,蚂蚁投身开源的同学业务压力更重,经常要用爱发电,殊为不易。

虽然在蚂蚁没有参与过开源项目,但是几个不同部门任职的经验帮我找到了创业的点子,而且我知道最好的路径就是通过开源。

创业做开源

在蚂蚁呆过 3 个团队,也做了 3 块业务:数据库工具平台,开发者工具平台,生产力协同平台。而现在做的开源项目 Bytebase 便是这 3 者的结合,一个围绕数据库开发活动,帮助开发者和 DBA 协同的开发者工具 - Bytebase。

15 年开源路,从大厂搬砖到创业挖坑

也有人会和我讨论,从商业角度考虑,Bytebase 是否并不需要开源,对方的观点也有逻辑,业界也有 Snowflake, Datadog 这样的闭源成功案例。但我从一开始就相信,开源的 Bytebase 是更优的商业选择。或许正好是我接触的开源始终是和商业结合在一起的,第一段提到的 280 North 其实是 YC 早期投的一家公司,也是 YC 历史上第一个比较大的退出回报。贴上当年 YC 掌门人 Paul Graham 在 HN 上的回复:

15 年开源路,从大厂搬砖到创业挖坑

10 年来到硅谷,看到一个叫 Mongo 的开源 NoSQL 数据库在四处布道,看着它连事务都不支持的样子,作为 ACID 原教旨主义派的我是嗤之以鼻。而时至今日,MongoDB 已经是商业上最成功的开源公司了。

15 年开源路,从大厂搬砖到创业挖坑

MongoDB 的官网设计也是开源商业化公司的典范,字体颜色的搭配,既专业也不失亲切。

大厂和创业做开源的异同

在蚂蚁分享了 3 个点,「以终为始」,「大鱼大池」,「无与伦比」。

以终为始

圈内有一个认知是「技术」->「产品」->「商品」这三点不能正着连,而是要以终点「商品」开始往回连。这个对于像 Bytebase 这样的开源商业公司是没错的。但是对于有其他主营业务的大厂来说,则完全就不是这条线。因为即使拿全球最成功的开源商业公司 MongoDB 来说,它一年的营收可能只是蚂蚁这样的公司几周的利润。所以大厂做开源的「终」不是靠开源产品本身挣钱,还是回到赋能自身业务,赋能品牌上。

15 年开源路,从大厂搬砖到创业挖坑

大鱼大池

要么做基础核心软件,要么做全球市场,最好是兼而有之。大厂有资源从一开始就投入基础软件的研发,并且直接面向全球市场。而创业公司资源有限的情况下,尽量能选其一,或者再退一步,有到达其一的实现路径。

无与伦比

开源没有疆界,基本是赢家通吃,一张 SSS 卡 > 一箱 SS 卡。开源有很多的品类可以做,Apache, CNCF 一个品类下也有不少的项目。

15 年开源路,从大厂搬砖到创业挖坑

但基本每一个品类往往只有一家最多两家的机会。Kubernetes 让 Mesosphere 和 Docker Swarm 都消亡了,Prometheus 始终统治着监控的江山,一将功成万骨枯。大厂开源项目多,但却很难孵化出 SSS 级的项目。因为战略的错位,使得无法保证持续的投入,没有持续投入,就很难做出精品。反倒是团队从大厂出来单飞后更能做成,像离开 LinkedIn 后的 Kafka / Confluent,脱离 Uber 后的 Temporal。
无论是在大厂还是创业,投身开源的同学多少都带着点理想主义,去业务线做个纯粹的 CRUD boy/girl 往往晋升更快,拿钱更多。但大家做开源,是因为在帮公司创造商业价值的时候,也想帮自己实现自我价值。希望自己写的代码不只用于营销场景,去套路一个个的用户,也能间接地驱动一个太阳能设备,探索一片空间,灌溉一方水土。

15 年开源路,从大厂搬砖到创业挖坑

最后

蝴蝶扇动翅膀,万里之外飓风。假如 15 年前的我没有通过 Cappuccino 接触到开源社区,很可能现在的我也不会以开源为业。若是当年 Cappuccino 背后的 North 280 没有被摩托罗拉高价收购,成为早期 YC 投资的标杆案例,或许也没有后面出自 YC 的 Sam Altman,以及现在 OpenAI 引发的新一轮技术革命。
而在这一轮的 AI 革命中,开源将扮演更加重要的角色。即使 OpenAI 逐渐不再 Open, AI 领域的开源项目依然欣欣向荣。前有 Auto-GPT,后有 GPT Engineer,各种开源模型每天还在竞相刷新纪录。之前顶尖开源项目的增长趋势在 AI 开源项目下完全不值一提。

15 年开源路,从大厂搬砖到创业挖坑

很可能在自己来到下一个 15 年之前, 开源的 AI 项目们就会吞噬掉整个世界吧。


💡 你可以访问官网:https://www.bytebase.com/,免费注册云账号,立即体验 Bytebase。

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
4年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
4年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
4年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这