加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!
同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注 极市平台 公众号 ,回复 加群,立刻申请入群~
问题:如何看待近几年国内开源的现状?你是如何理解开源的?
https://www.zhihu.com/question/366370371
当我们回想起为什么做开源的时候,也许理由都没有那么的高大上:也许就是单纯想分享一下代码,也许就是觉得社区很有意思,甚至也许不知道什么原因,代码放出去了,有人用了,于是我们开始开心地找同路人。逐渐地,我们发现,开源变成了我们的一个共同的信仰:我们喜欢它,我们用心呵护它,然后我们希望更多的人加入一起培养它。
知乎高质量回答
https://www.zhihu.com/question/366370371/answer/975420094
本文来自知乎问答,仅供学习参考使用,著作权归作者所有
我自己做开源其实并没有很多前辈来得久,基本上就是随着AI这一波,大家有个核心的痛点就是没有好的软件框架可以用(那位说下载matlab zip包的同学请站起来),机器学习框架如雨后春笋,大家从科研界来,自然地就把代码开放出来,包括在知乎的@李沐@陈天奇等几位大牛,于是就入了门了。
入了门以后我们发现,哎还有那么多讲究,license选什么,社区怎么交互,怎么做推广(对的开源也要做推广的),等等。逐渐了解得多了,就越来越觉得敬畏,之前以为开源就是个很酷的事情,但是后来发现其实开源背后的精神,背后的经济学,都有着很深的道理。有兴趣的朋友可以读一读一篇非常有意思的文章,stackoverflow的创始人写的“开源软件经济学”:
https://www.joelonsoftware.com/2002/06/12/strategy-letter-v/
从我自己作为一个工程师的角度来说,我觉得开源是四个层面的东西:
开源是作品展。画家有画展,作家会出书,工程师想展示自己的作品,作品是什么?是代码。怎么展示?开源。
开源是技术沟通的渠道。工程师相互学习,怎么学?怎么讨论?秀代码讨论代码是最自然的途径。当然,这个是需要真心投入的,不是开出去就算了,见光死的开源不是开源。
开源是用户模式的迭代。开源的好处是,用户的尝试意愿高,对于bug的容忍度好(虽然也不是无限的),因此可以很快迭代出适合新的需求的设计。AI框架就是一个很好的例子。
开源是新商业。在商言商,我觉得开源和商业是不矛盾的。和开源非常共生的一个词语是开放生态 - 操作系统,云原生,各种开放标准,大大降低了软件开发、软件生态对接的难度。蛋糕做大了,挖掘出更多的价值,大家都开心,同时也更愿意反哺开源社区发展。
从一个开源开发者开始,到逐渐考虑管理挑战的时候,我问我自己一个问题:人有了,知识有了,意愿有了,缺什么?
这听着是个很像宣传部写出来的词语,你先别笑,我来列一下理由。开源项目要托管,要做CI,要做bug tracking,要定期举行社区活动,怎么有效运转?这个需要做。开源项目多了,怎么有正常的法务CLA流程(CLA其实是保护开发者的),这个需要做。很多公司开源项目都是见光死,这个阿里也有,大家为了晋升而开源,导致质量堪忧,怎么解?要建立内部孵化器机制,开源项目准入机制,开源项目关停并转机制,这些都是很重要的事情。
举个例子,我组里的一位小姑娘办今年的Flink Forward大会,最忙的时候在朋友圈抱怨说,气得大半夜睡不着抹眼泪,一天被几拨人喷,但是事情还得推。这事情让我看到,一方面,开源是热情驱动的,但是另一方面,我们绝对不能饿死雷锋。所以一定要有体系化的能力沉淀,有很好的流程,把大家做开源的阻力做到最小。她和她的团队今年主办Flink Forward Asia,请了头条,快手,Intel,Bilibili,360,滴滴,等一系列社区当中的优秀公司和优秀开发者,办成了一个两千多人的盛会,非常成功,非常不容易。
当然,我们要说,组织保障是保障我们开发者和开源项目,不是给公司吹牛。我们开源委员会考核自己,是以我们开源项目社区的活跃度,健康度,我们做开源的技术团队对于项目的支持程度,这些来考核的。这个初心不会变。
我们要治理什么问题? @phodal的回答一语中的。阿里有没有他提到的这些问题?有,而且很严重,内部讨论的时候我还能举出更多例子。不过我们想不想做好开源?想。解决问题的第一步就是认识问题,所以我们很感谢这些对国内开源社区爱之深责之切的朋友们。
https://www.zhihu.com/question/366370371/answer/975873819
说了好的,我还想说一句不好的。开源不是”我的开源 vs 你的开源“。这个是我看到国内经常容易出现的一个问题。开源代码本身是没有国界的,什么有国界?专家有国界。人才有国界。我们不能因为要培养我们自己的人才,就把开源代码本身给挡在外面,自己造轮子了。
举个AI框架的例子。偶尔会听见人说”AI框架都是美国人做的“。这句话我很费解。非常多的优秀的AI工程师,设计AI框架的工程师,都是华人。不说远的,最近非常有潜力的AI编译框架TVM,作者是 @陈天奇 - 不能说是美国人吧。TensorFlow和PyTorch的代码都放在github上,全世界都是一套,欧洲人为什么没有说不是欧洲的呢?
开源代码本身没有国界。通过狭隘的国界区分,然后划江而治,恰恰会对咱们的开源建设起到反效果。我们要培养的,是我们国内开源的精神,和全球的开源社区互动的能力,和开源的项目、开源的基金会,深入共建的能力,进而最终形成我们在全球开源社区当中的影响力。不是在已有的技术体系里面搞一个我们的开源,是投入到开源社区和项目当中去,打出我们的技术深度和领导力来。
其实我觉得国内最近几年,最让我感到惊喜的就是,开源开放变得非常容易为人所接受了 - 20年前知道sourceforge的工程师,和现在知道github的工程师,绝对数量和相对数量上都不可同日而语。相应地,我在工作当中遇到了非常多热心开源,一起建设开源的朋友们。
我自己现在编程少了,有时候想起来还挺伤心的。所以偶尔周末晚上了没事捣鼓捣鼓代码,放松一下发个PR(是pull request),还是个挺甜蜜的事情。
https://www.zhihu.com/question/366370371/answer/975706246
本文来自知乎问答,仅供学习参考使用,著作权归作者所有
感谢 @贾扬清 提到了我。我还在读硕士的时候尝试的“开源”还是刀耕火种的阶段。直接在个人主页上面挂一个zip包,里面有一些简单的指令。软件的使用者也只包含我们实验室里面的少数几个同学。然后逐渐的学会了上 github,采用统一的代码规范,写测试,做文档和社区的小伙伴一起推动。也认识了逐渐明白了开源并非就把代码挂出来那么简单。
很多小伙伴都说的很好。我想补充一些我从开源社区中学到的几个东西:
开放源代码也是大家所通常理解的开源。开放源代码可以给同学们提供相互交流学习的机会,也可以使得像社区的使用交流,bug report等可以及时得到反应。从机制上,开源其实提供了一种无形的质量评价保障。评价一个工作的好坏,是骡子是马拉,出来溜溜就知道了。对于普通的程序员来说,展示自己作品的一个最好让大家发掘的方式。现在的很多领域如机器学习鼓励开源也是这个道理,实验的结果直接开源复现才让大家相信。而对于整个社会来说,各种创新开放也使得技术的进步更加快速。
如果说开放源代码是让把自己的软件展示出来的话。开放开发则是把一个软件变成社区的。软件不是一个固定的东西,需要维护,增加新特性,不断重构来保持它的生命力。这里面一个比较重要的问题是如何让任何一个对这个软件感兴趣的人可以参与进来。这其中包含了开放文档是否健全,改动的技术决策是否可以让开发者可以搜索获得等等,其他开发者的pull request是否可以被及时review接受等等。
不同的开源软件的开放开发程度其实也是不同的,有的软件主线的开发一直在一个内部机构,定期同步,有的会主要直接在主线开放开发等等。另外开放开发本身也并不是包含了代码实现。其实很多时候高质量的文档,code review, 社区互动等等都需要花费社区志愿者的大量精力。而只有对于这些方面都进行投入之后才会让更多的人来参与开发并且让项目更加健康地迭代下去。
开放开发让大家都可以参与一个软件的开发。而开放管理则是让积极的参与者成为社区的主人。很多成功的开源软件都有比较成功的开放管理机制。对于开放管理的开源社区来说,开源软件本身像是一个股份公司,而获得股份(开发者的信任和对于项目的方向控制)的方式是参与开发。开放的管理模式让更多的企业和高校可以共同参与开发和管理开源项目,把一个项目做的更加持久。而因为大家都可以成为开源项目的主人,也可以鼓励更多的合作。积极参与开发有贡献的个人会获得对于项目的写权限(committer)。许多成功的开源项目都才用开放管理的模式,比较著名的是apache模式,另外独裁模式如python(曾经是),linux也会有committer来共同管理社区。
开源本身是志愿行为,并没有货币交易(当然最近github的打赏功能把货币也加入其中),但是其中却发生了和货币一样的价值交换。开源社区的一种“货币”是时间。参与开源贡献,会有不同的社区同学帮忙代码review和参与讨论,这些行为都需要付出大量的时间。参与开源贡献的同学付出了自己的时间,用来交换别的开发者的时间来进行技术交流和学习。随着时间的积累,很多时候开发者获得的另外一种“货币”是信任。一个人是否靠谱,是否愿意相信一个人的技术决策,是否可以胜任一个方向的tech lead,这些东西都决定了一个开放开发社区里面开发者对于社区本身决策的影响能力。虽然开源可以获得不少“货币”,最重要一点,开源开发者都是带着理想和情怀投入到开发中去,而这些理想和情怀本身才是开源社区里面最重要的东西。
在一开始的时候,我们会觉得开源最重要的是代码。于是很多关于开源软件的争论会集中在代码在哪里,属于谁。实际上因为大部分开源软件许可证允许任意拷贝并且授权代码里面的专利给代码使用人,代码本身在哪里并不是最关键的问题。
软件并不是一个固定不变的东西,需要有不断的升级,维护和新功能的添加。而在其中都会涉及到人 -- 谁来做这些事情。人很多时候比代码重要。假设某一天一个开源软件的主要开发方突然宣布不再开放源代码了了,这个时候要看其他开发者可以集合起来,有能力接着前一天的分支继续进行开发和维护,那么这个软件就会依然可以被大家开发使用,甚至逐渐集合有能力的社区伙伴重构或者重写一份都不会是问题。代码在哪里不关键,关键的是人。一个公司是否有人可以掌握开源软件本身的架构,是否有人可以对社区的方向有所影响,是否有人可以适配开源软件符合自己的需求,是否有人可以在必要的时候继续维护软件,这些才是最需要关心的问题。
活跃的开发者人群是大家使用开源软件的真正保障,也是社会得以快速创新发展的基础。
https://www.zhihu.com/question/366370371/answer/975542311
本文来自知乎问答,仅供学习参考使用,著作权归作者所有
我个人历程就是从在个人主页上挂matlap zip(鄙视链底端) -> 把源文件放到github -> 实验代码一开始就是放在github上 -> 开发工具放github上 -> 创建organization来建设社区 -> 先开源代码然后再进自己公司产品。
新特性新模块能很快让别人用上,并得到及时反馈。反馈进而激励继续开发。相比正常每几个月发布一个版本出来,这种短时激励效果好很多。
开源的参与者一般比闭源项目要多。issue上回复、相互review代码是程序猿的社交。我观察程序猿通常在现实世界中更闷骚一点( 这里可以at 我认识的所有给力码农 ),但开源上的交互能很好的满足社交需求(参见
@贾扬清回答结尾)。我认识一小哥就是持续几年手机一响半夜起来回issue,从而成为大神。
(对不起各位大神,脑海中实在是赶不走下面画面)
享受便利的同时当然也得有额外付出。我觉得最大的一点是得有契约精神:我邀请你来用我新鲜出来的代码,那么我会负责回答你的问题,并帮助合并你的代码提交请求。这个也是好几个回答提到的”开源维护“。
回issue回慢了别人觉得会怠慢。如果回答了,但人家没有关闭issue怎么办?放置久了就积累一大堆,造成这个项目问题多的映像。
虽然绝大部分PR就是改改文档语法错误,但总会有人突然提一个很大的PR,可能从设计上就不对,或者代码品味根本不行。需要不伤人自尊的情况提出改进意见,或者让他们回炉重造。很大情况下帮别人review代码比自己重写花费时间多多了,而且质量可能还不见得更高。但这个不能避免,只有这样才能慢慢建设起社区。
假设社区起来了,人一多背景不同想法也多,大家意见不一致,想做大改动困难重重,从而导致最初开发者荣(沮)誉(丧)退(离)休(开)。如何维持一个活跃的开发者社区就成了一个组织上问题。当前两大组织框架是独裁制(Linux)和民主协商制(Apache)。但绝大部分码农得重新学习和实践。
https://www.zhihu.com/question/366370371/answer/974917039
本文来自知乎问答,仅供学习参考使用,著作权归作者所有
我就是全职在做开源,我们整个公司都是基于我们的开源产品设立的:
https://gitee.com/gaasdev/GAAS
https://github.com/generalized-intelligence/GAAS
GAAS 是一个为飞行器全自主飞行所设计的开源框架,基于 BSD-3 协议。
所以我感觉还是可以回答一下这个问题,因为我不光是开源的使用者、也是开源项目的创造者、更是这整套体系的受益者。
国内和开源世界的融合越来越深,绝大部分开发者离不开开源。
2018 年底我和 @时冰蓝一起去了趟美国,因为我们想知道一家正儿八经的开源公司是怎么运作的。因为当时我们正在纠结要不要完全投入开源。
在伯克利,我俩见到了 Chris Anderson。Chris 是无人机公司 3DR 以及无人机社区 Dronecode 的创始人,他另外一个著名身份是前连线杂志主编,《长尾理论》的作者。我们一起看的是 PX4 飞控的数据库,PX4 是全球最流行的无人机开源飞控,可以帮助无人机进行姿态控制,让人类飞手操作起来起来更轻松。
Chris 对我们说到:「过去几年里有几百人为 PX4 贡献过代码,帮助测试的人更是不计其数。这一切都是因为 PX4 是一个社区主导的开源项目,如果我们是闭源的话,那这一切都不可能发生。PX4 每天收集的测试数据可能比不少公司一年能收集到还多。」
2008 年开源飞控开始流行,然后带火了整个无人机行业。
这样开发者们可以把更多精力放在无人机的感知层和应用层上面,而非处理无人机最基本的控制层。控制完全交给飞控处理。GAAS 和其开发者只需要让机载电脑给飞控发送指令即可。
我相信国内绝大部分开发者都是开源的受益者。任何鼓吹某家公司或某个人可以所有东西都自己搞的,「自主研发」,不是蠢就是坏。不信你就去各个大学里面,985 211 还是二本三本都行,去学生群里面潜伏,再去各个开发者社群里面潜伏。
就能发现绝大部分问题都在于:如何把 XXX 开源项目的环境配出来,如何把 XXX 跑通。
所以我国最近几年开源的第一个现状就是中国越来越离不开开源。我们和开源世界的融合越来越深,当然,我认为这是绝对的好事。
这张图是从阿帕奇基金会截得,阿帕奇基金会是全球最大的开源运行组织。他们从 2018 年到 2019 年最大的访问量来源其实是中国,而不是美国。我们仔细看可以发现,中国的访问人数是美国的一倍,中国并不是一个远离开源的国家。
https://github.com/trending
这个是 GitHub 的 Trending,要是能有一天在上面没有至少一个中国项目,算我输。
随便找了个 2020 年 1 月 15 号的 Trending
其他回答对大公司开源的贡献写的也不少了,大家也可以看看,挺不错的。
但中国开源的问题也不少,之前我还单独和开源之道的负责人适兕录过一期播客聊这个事情:
「
你拿了一个几亿美金的东西,提交了一个补丁,就改了一个字符串拼错,这叫回馈(开源)?这是不成等价的。」
绝大部分开发者,从国内找个网站下不知道什么版本的代码,然后基本功能能跑就完事了。每次都重复同样的过程。这样就导致一个问题:
对比国内使用人数,我们对开源项目的影响完全不成正比。
使用 - 发现问题/做了新功能 - 提交代码给项目 - 更多人用
目前我们就停留在了第一步。我们和开源世界像是一个孤岛面对大陆一样。而其实中国的开发者完全有能力参与的开源项目的进程中,并且去影响这个项目。
你能想象上学的时候有人问你怎么写字吗?我经常遇到类似级别的问题:
啥是 GitHub?为啥我不能从 GitHub 下载?
这也不能完全开发者有问题,毕竟这些东西也不是上学的时候能学到的。
我看到很多国内的开源作者,被这类问题搞得不耐其烦。有些不想受这个气就直接不管了,还有部分完全无视小白开发者。
这样就是个死循环,我国大部分开源社区一直就处于一个菜鸡互啄的水平。
对了,我们开源后遇到最多的问题是:你们开源怎么挣钱?
而且即使是公司层面,也有很多对开源的误解。比如把开源当成 KPI 项目;不知道该如何从头运营一个开源项目;不知道开源如何和业务做结合。
我们在运营自己的项目 GAAS 的时候发现,基本上 80% 的问题都是重复问题。我们和其他开发者交流的时候发现大家都有同感。
有时候我们都纳闷,类似 Ubuntu 咋安装这个问题为啥会不断的被人问呢?网上资料一把抓啊。
后来我想明白了,面对这种事,别去理解,万一我理解了呢?
不是我灭自己志气,我平时打交道的开发者国内、美国、欧盟、日韩和印度都有,这类重复问题我在国内遇见的最多。有时候我就劝自己,说我们毕竟接触开源时间短,啥事咱一步步来。
但还有个问题是,国内开发者非常抗拒是用英文做搜索。可这没办法,这世界上绝大部分开源项目都是用英文写的,要是不想用英文,那永远都会比别人解决问题的能力差不少。
抱怨归抱怨,国内开源环境还是肉眼可见的越来越好。据某个消息源,我国政府也在准备相应的开源基金。
要是我们希望 2025 年我们回答这个问题的时候,可以充满自豪的回答:国内的开源越来越好了——那最好的办法,就是从现在开始,一起为中国开源事业做贡献。
新年假期,极市将为大家分享计算机视觉顶会 ICCV 2019 大会现场报告系列视频,欢迎前往B站【极市平台】观看,春节也学习,极市不断更,快来打卡点赞吧~
https://www.bilibili.com/video/av83388150
CV细分方向交流群
添加极市小助手微信(ID : cv-mart),备注:研究方向-姓名-学校/公司-城市(如:目标检测-小极-北大-深圳),即可申请加入目标检测、目标跟踪、人脸、工业检测、医学影像、三维&SLAM、图像分割、姿态估计、超分辨率、嵌入式视觉、OCR 等极市技术交流群(已经添加小助手的好友直接私信),更有每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流,一起来让思想之光照的更远吧~
△长按添加极市小助手
△长按关注极市平台
觉得有用麻烦给个在看啦~