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

news2024/11/26 0:24:11

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

file

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

邂逅 Cappuccino

file

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

file

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

file

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

file

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

file

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

file

file

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

集成 libcurl

file

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

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

file

所以后来讨论了一下,就缩减到第一版只支持 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。

file

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

file

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

file

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

大厂和创业做开源的异同

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

以终为始

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

file

大鱼大池

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

无与伦比

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

file

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

file

最后

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

file

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


💡 你可以访问官网,免费注册云账号,立即体验 Bytebase。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/702513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装Home Assistant

文章目录 前言1. 安装Home Assistant2. 配置Home Assistant3. 安装cpolar内网穿透3.1 windows系统3.2 Linux系统3.3 macOS系统 4. 映射Home Assistant端口5. 公网访问Home Assistant6. 固定公网地址6.1 保留一个固定二级子域名6.2 配置固定二级子域名 转载自远程穿透的文章&…

网络安全 | 密码基础知识介绍

概述 密码介绍 安全问题 保密性:对发送的消息进行获取完整性:对发送的消息进行篡改身份伪造:对发送的主体身份进行篡改,a发的消息,篡改为b发的行为抵赖:对发送的消息进行否认,丧失行为的可追…

VulnHub打靶记录——easy_cloudantivirus

靶机下载地址:https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453/ 将靶机设置为NAT模式并启动。 主机发现&信息收集 nmap扫描本地网段 nmap -sn 192.168.50.1/24136是kali,137就是我们的目标靶机。 接着收集靶场信息: n…

【 Android11 WiFi开发 二 】WiFi连接、断开

前言 上篇文章介绍了WiFi列表的获取与展示和WiFi状态改变的广播监听,本篇将介绍介绍对WiFi的操作,连接、忘记,查看已连接的WiFi信息等。 相关文章 1、【 Android11 WiFi开发 一 】WiFi列表获取与展示 说明 老规矩,先把WiFi连接和…

卷积基础知识总结

卷积是卷积神经网络中的核心模块,卷积的目的是提取输入图像的特征,如下图所示,卷积可以提取图像中的边缘特征信息。卷积也称为过滤器,即Filter 1 卷积的计算方法 卷积运算本质上就是在滤波器和输入数据的局部区域间做点积 注意…

MyBatis介绍与安装下载

目录 MyBatis 介绍 MyBatis 主要特点 MyBatis 下载 创建 Maven 工程 IDEA 连接数据库 导入JAR文件到项目 MyBatis 介绍 MyBatis是一种开源的Java持久化框架,用于将SQL数据库访问和映射任务与Java对象之间的映射分离。它提供了一种简单的方式来对数据库进行操…

消息中间件的首选之一:探索RocketMQ的优势和特性

​​​​​​​ 1、简介 RocketMQ 是一款开源的分布式消息队列系统,由阿里巴巴集团开发并开源。它是为了满足大规模分布式系统中的消息通信和异步解耦需求而设计的,具有高吞吐量、低延迟、可靠性强等特点。下面将详细介绍 RocketMQ 的架构、组件和关键特…

【网络进阶】Posix API与网络协议栈(三)

文章目录 1. 网络攻击和POSIX API与网络协议栈的关系1.1 网络攻击的基本概念和它们对协议栈的影响1.2 分布式拒绝服务(DDoS)攻击和网络协议栈1.3 地址解析协议(ARP)欺骗和POSIX API 2. 网络协议栈的理解和划分2.1 OSI七层模型2.2 …

AI 边缘计算控制器GEAC91

1 产品概览 产品概览 GEAC91 AI边缘计算控制器是一款基于 NVIDIA Jetson AGX Xavier处理 器、面向智能边缘计算应用场景的解决方案。 GEAC91控制器具有 控制器具有 GMSL2、 千兆网口CAN总线、 RS232、RS422、 USB3.0、USB2.0、SD卡等丰富的外设接口 ,支持常见激光雷…

记录--不定高度展开收起动画 css/js 实现

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 不定高度展开收起动画 最近在做需求的时候,遇见了元素高度展开收起的动画需求,一开始是想到了使用 transition: all .3s; 来做动画效果,在固定高度的情况下&#xf…

霍尔闭环电流传感器在电动观光旅游车上的应用

摘要:本文介绍了基于霍尔闭环原理,即磁平衡式原理的电流传感器在电动观光旅游车上的使用方法,替代传统的霍尔器件,较好的解决了电动车行业现有霍尔传感器的基本问题,在稳定性上更加优越。 关键词:霍尔闭环…

2022 年首届“钉钉杯”大学生大数据挑战赛B题:航班数据分析与预测——国奖论文代码分享

2023年的钉钉杯挑战赛马上要来了~这里给大家分享一下去年的国奖论文思路与代码 摘要: 随着民航事业的迅速发展 , 飞机出行已成为未来发展的一种必然趋势,然而近年来, 航班延误现象频频发生,成为困扰机场和航空公司的难题。对航班…

Idea项目application.properties配置文件默认GBK,如何设置默认为UTF-8编码

简述:java程序在项目中一般设置都是UTF-8编码格式,但是项目application.properties 文件默认是GBK,需要手工修改默认编码格式 步骤: file->setting->editor->file encodings下,勾选transparent native-to-ascll conver…

AR远程协助平台运用到建筑领域能带来哪些帮助?

随着科技的不断发展,远程协同培训已经成为了一种越来越受欢迎的学习方式。在建筑施工领域中,这种学习方式同样具有很大的应用价值。本文将探讨AR远程协助平台在建筑施工中的应用。 首先,AR远程协助平台可以提高建筑施工的效率和质量。传统的…

Java学习之Varargs机制

概述 Varargs,即variable number of arguments,variable arguments。中文一般译为,可变长度参数,或简称可变参数,参数具体来说是形参。 自JDK5引入,借助这一机制,可以定义能和多个实参相匹配的…

基于Java+SpringBoot+Vue的流浪动物救助平台设计与实现

博主介绍:✌擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案…

【前端|CSS系列第2篇】CSS零基础入门之常用样式属性

欢迎来到CSS零基础入门系列的第二篇博客!作为前端开发的关键技术之一,CSS(层叠样式表)能够为网页添加各种样式和布局效果。对于前端零基础的小白来说,了解和掌握CSS的常用样式属性是入门的关键。本篇博客将带你深入了解…

基本的组合门电路、以及二极管、三极管(详细讲解)

基本门电路、二极管、三极管 1.基本的组合门电路1.1 与门(AND Gate):2.2 或门(OR Gate):1.3 非门(NOT Gate):1.4 异或门(XOR Gate): 2…

chatgpt赋能python:Python面向对象和面向过程编程

Python面向对象和面向过程编程 Python是一种高级编程语言,可以使用不同的编程风格进行开发。本篇文章将讨论Python面向对象和面向过程编程风格的概念、差异和优缺点。 什么是面向对象编程? 面向对象编程是一种编程范式,它将现实世界的概念…

TP6在composer包里写控制器

前提:首先要了解下如何自建composer包。 1.先建一个空包,加一个文件:composer.json {"name": "test/ctrs","type": "library","license": "MIT","autoload": {&quo…