开源即责任

小Hub领读:

为什么开源即责任?因为一个好的软件项目是为了服务好用户,选择开源模式,本身就是选择了一个为解决复杂问题提供通用(高市占率)解决方案的途径。

--- 引自文中的话


作者:掘金作者阴明

https://juejin.im/post/6844903746946744333

一开始只想写篇短文,没想到写了很多,希望可以帮助开发者稍微多了解一点软件行业吧 @kalasoo

因为 GitHub 的盛行,“开源”成为了当下开发者非常 “政治正确” 的一个行为。每天在掘金里,我都会看到很多用户写文章说自己开源了这个、开源了那个,同时每年 GitHub 年度总结里不断飙涨的 Repo 数据和 Commit 数据好像昭示着开源生态和文化已经深入人心。然而,事实并非如此,甚至大家对于开源的理解,本身就是让人心寒的。就好像,我们生活在如此便捷的互联网时代中,却并未因此而创造更多。开发是一群有很强判断能力的人,我希望借由此文章帮助大家稍微多理解一些开源。

今日事件:Ant Design 圣诞彩蛋

今天一大早就听到掘金的用户群里很多人在讨论,早晨看掘金上用户就在传播这个事情。我先把信息简单的聚合一下:

情况是 Ant Design 项目在 9 月 10 日的一个 commit 中增加了 button 的圣诞彩蛋样式(见下图)

也就是说在这次 commit 后下载或更新此项目的用户都会在 isChristmas 12 月 25 日的 button 会自动变成 christmas 样式

而这样突如其来的变化,让诸多开发者 “一脸懵逼”。因为 Ant Design 项目本身已经有非常大量的用户,在 GitHub 上有超过 3.7 万的 Star,而 NPM 上也展示每周有超过 30 万次下载。

  • #13098: ???? Christmas easter egg ????

  • #13818: Please remove Christmas Easter Egg for Ant Design framework

  • 知乎讨论

我这里就不再展示更多的关于 Ant Design 的争论了,大家去知乎、GitHub 看就好。从大家表达和批评之中,我看到的是大家对于开源理解的偏差,这又引发了我每天看掘金上这么多开发者学习、分享内容背后的动因,感受到了一种对于开源误解的巨大偏见,甚至忽略了其背后沉淀的社会意义。

开源即责任

Free Software Movement 与 Open Source(开源)

Free Software Movement (FSM) 是一个社会运动,而非仅仅是一个软件行业的运行模式。而且背后的推动者是 Richard Stallman 即 GNU Project、Free Software Foundation (FSF) 建立者,开发了 GNU Compiler Collection 及 GNU Emacs 等等诸多知名软件作者。他在 1983 年创立的 GNU Project 以及他长期强势推动的 Free Software 精神成为了 FSM 的开启的标志。

而其中对于 Free Software 的官方定义是:

A program is free software if the program's users have the four essential freedoms:

  • The freedom to run the program as you wish, for any purpose (freedom 0).

  • The freedom to study how the program works, and change it so it does your computing as you wish (freedom 1). Access to the source code is a precondition for this.

  • The freedom to redistribute copies so you can help others (freedom 2).

  • The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.

翻译成中文为:

一个程序是 Free Software 需要让其用户满足如下的 4 个自由条件:

  • 用户可以自由地以任何目的来运行此程序(自由条件 0)

  • 用户可以自由地学习和了解程序是如何运行的,并可以根据需求加以修改。可以获得源代码是这个自由条件的前提(自由条件 1)

  • 用户可以自由地分享和传播原软件来帮助他人(自由条件 2)

  • 用户可以自由地分享和传播你修改后的软件,进而所有用户可以得益于你的修改。可以获得源代码是这个自由条件的前提(自由条件 3)

简言之可以总结成:The users have the freedom to runcopydistributestudychange and improve the software.

FSM 之所以称之为一个社会运动,是因为其背后的价值驱动并非只是技术和效率,而是对于社会理解的不同。其逻辑推断如下:

搜索公纵号:MarkerHub,关注回复[ vue ]获取前后端入门教程!

  • 数字时代软件行业提升社会效率和价值,即社会发展需要更好的软件

  • 开放协同下生产出的软件质量高于商业闭源软件

  • Free Software 开放了软件的自由,会创造出更多好软件,会推进社会更好的发展

而这背后的思维逻辑本身就是资本主义(生产资料私有化)与共产主义的价值碰撞。当然,Richard Stallman 与他的信徒们因为对于绝对 Free Software 的追求也常被人安以 “极端” 的头衔。但是,社会的推动者哪一个不极端呢?

Open Source 的诞生

而我们熟知的开源其实与最早的 FSM 并非同一个概念,而 Richard Stallman 已经在多次的公开场合表达了其对于 Open Source 的反感,甚至认为 Open Source 破坏了软件行业,并用了 Amoral(不道德)这样的严厉词汇。

而追溯 Open Source 的发展,就一定要提到由 Linux 核心开发者 Eric Steven Raymond 所著作的书 The Cathedral and the Bazaar(大教堂与市集),书中详细讲述了开发者合作的文化,并分析了自上而下的大教堂模式(如 GNU Emacs)与自下而上的市集模式下共享协同的价值(也就是后来被大家熟知的开源开发模式)。而彼时 Netscape 发布的 Netscape Communicator Internet Suite 也同样是被 Raymond 的书籍影响开始不断地开放其源代码,但是 FSF 成员并不喜欢类似于 Netscape 这样的商业公司来作为 Free Software 项目。

因而 Netscape 需要寻求另外一种方式去表达基于开源共享源代码的软件同样具有潜在的商业价值,而最终,他们选择了 Open Source 这个词汇。而后 Open Source(开源)被 Bruce Perens、Tim O'Reilly(O'Reilly 出版社的建造者)以及诸多项目的开发者(如 Linus Torvalds)使用。

1988 年,Open Source Initiative(OSI)正式成立并建立了与 FSM 完全不同的价值定义,而其中最重要的就是一个开源项目应该包含一个 License,而这个 License 在不违背开源基本精神要求的情况下,可以有多种应用方法,甚至可以商用甚至修改后可以闭源。

而 Free Software 下的 GNU General Public License (GNU GPL) 则是其中对软件自由度要求最高最严格的一种。

Free Software vs. Open Source

我们总结一下:

Free Software 与 Open Source 都在推进源代码共享开放所带来的价值,但是:

  • Free Software:一种社会运动,要求完全的自由软件赋予用户的精神追求

  • Open Source:一种分享协同的方法论,帮助开发者在实际的软件开发中与他人协作

而其中最大的冲突来源于,Free Software 的拥趸相信这种精神追求是的,而他们批评 Open Source 只是协同的一种方法,没有价值取向,不关注对错,更有甚者将开源作为其追逐成功、名誉的手段。

开源是为了更好地协作开发出解决用户需求的软件

开源的偏见

行文至此,我们在后续的内容中不再深诉 Free Software 与 Open Source 的区别,都以 Open Source(开源)为统一表达。

借由上面的讲述,大家明白了 Free Software 其实从一开始就与是否免费无关,而是一种对于自由的追求,而开源也绝非仅仅是开放源代码这么简单。可惜的是,开源的价值在高速的软件行业发展中已经发生了理解的偏差,很多人对开源的理解成为了上传、分享、下载代码,而这个偏见的影响对于整个行业都是巨大的。

首先,在理解软件共享这件事情上我们要跳出开放代码这个层面,软件本身的价值是满足需求,让程序解决问题。而是否选择开源的本质是能否基于这种开源的方式让软件更好地解决问题,解决更大的问题。换言之,开源不是目的,更好地建立一个可以解决巨大问题的软件系统是目的,而开源则是在这短暂的软件行业发展史上成为了开发者筛选出的最 “好” 的协作模式。即,将源代码共享,多人协同,共建实现成为了当下主流软件(尤其是最广为人使用的项目,如 Linux、Android、MySQL、Ubuntu、WordPress 等等)服务用户的开发方式。

因此,开源开发模式,本身是过去数十年软件行业沉淀下来的一个聚合智慧的开发方式,它的价值也只与这种开放方式下创造的软件价值相关。无论多么追求 “开源”,如果软件本身没有给用户带来充足的价值,则开源与否并不重要。

2008 年,在互联网行业快速发展的背景下,GitHub 上线了,这是一个基于 Git 的代码托管服务。也因为互联网的高速发展,用户通过 GitHub 可以更加高效地执行开源的各项行为,无论是搜索、阅读、下载、使用、贡献代码都变得无比简单,与他人协作成为一种便利。至此,GitHub 取代了 SourceForge、Google Code,“开源” 席卷全球。

开源与商业

开源是 “免费” 的,而 “免费” 往往是最贵的,免费同样不是目的,其背后创造的价值才是。无论是 Free Software 还是 Open Source,其发展也从未脱离开与商业的关系。

在开源运动的早期,Microsoft、Oracle、IBM 都曾经是开源软件的公开反对者,甚至不乏批判的声音。但时间的推移让我们看到了开源模式最终获得了胜利,过去一年中,整个软件行业最大的新闻之一应该就是 Microsoft 收购了 GitHub,前者曾经是开源联盟的头号公敌,而如今,却与 Google, Facebook, Apple, Amazon 等等所有科技巨头公司一起全力开源各个项目。而基于 GitHub Octoverse 2018 的数据,GitHub 上最热门的 10 个项目中只有 2 个项目是由社区驱动的,而其余前 8 个项目皆是隶属于大型科技企业。

开源软件公司

开源绝非仅仅是慈善,开源软件本身的免费传播,却孕育出开源软件之上的服务(如软件服务、书籍、教程、咨询、培训、展会等)都存在商业价值,早期如 VA Linux、Red Hat 的公司也在 1999 年相继上市,当下也有 MongoDB 等企业依然在快速发展。开源软件公司的收入帮助开发者可以继续维护、发展、运营整个社区,并面向企业提供高级定制化软件服务或 SaaS 服务获取收入

开源基金会

另外一个模式,则是开源基金会。成功的软件项目如 Linux, Apache, FreeBSD 等被大量的企业使用,而后这些项目的发展间接影响着诸多行业的发展。因而,基金会模式成立,即大型企业通过现金赞助来帮助基金会持续维护和推进某一、某一组项目的发展。而这背后就是 “赤裸裸” 的商业关系了。以 The Linux Foundaton 为例:

一个企业赞助者可以获得诸多权力,参与到项目开源战略的讨论并有可能在 Board of Directors 中获得席位并对 Linux 基金会直接产生战略影响。也正因为此,当一家企业的众多业务与服务搭载于 Linux 等项目之上,这个权力则变得至关重要!目前在 The Linux Foundation 中,我们能够提到的世界一级企业都是其赞助者,而中国的华为、腾讯是其最高级别的白金会员,而 22 名 Board of Directors 中只有一名中国企业代表:来自华为的 Peixin Hou。

大企业为什么选择开源?

那为什么那些并不以开源软件盈利的大型科技公司依然决绝地拥抱开源呢?诸如 VSCode, React.js, Kubernetes 是出于怎样的目的在运营的?我们都很向往硅谷,向往全世界最优秀的科技企业,他们不断地创造 “影响世界” 的产品和开源项目,帮助所有人提高效率。我总结出其直接原因是:垄断与标准

让我们看一下当下的开源项目,我们可以把项目分为四类:

  1. 高复杂度 / 高市占率:大公司项目,商业公司,基金会,社区

  2. 高复杂度 / 低市占率:科研 => 基金会

  3. 低复杂度 / 高市占率:社区 => 基金会

  4. 低复杂度 / 低市占率:低价值

其中 4. 占据了大多数比例,我们分析了大公司的开源项目,大多数都在解决高复杂度的问题,同时成功的项目也都获得了极高的市占率。当然,大公司同样会产出并不那么高市占率的项目,但是我们的 “假设” 是他们目标是为复杂问题提供究极答案。对于一个大企业来说,开源一个高复杂度的项目是一个高成本的行为,如若项目无法有效地占有高市占率,那么本身无法商业变现的开源行动则得不偿失,背后的逻辑便是:

一但一个高复杂度的项目获得了高市占率,开发者则难以迁移

Google 作为开源项目的绝对领导者,同样是体会到了开源模式对于高复杂度、高市占率项目的垄断性,犹如科技产业中的标准一般,成为了相关行业捆绑性的技术选择。而这带来的收益,直接包含着市场、技术搭建成本、商业服务利益。而大企业恰恰是此类项目最佳推动方:

  1. 大企业有高质量的开发者,开启高复杂度的项目

  2. 大企业有能力快速宣传项目

  3. 大企业有成本去持续运营项目,直至垄断

开源在中国

我们互联网发展迅速,紧跟世界潮流,借由 GitHub 的成功(并且没有被墙)中国开发者第一世界学习到了代码共享的服务,我们也一步步脱离了 CSDN、SourceForge 等代码下载平台,开始使用 GitHub,毫无疑问我们都是开源的受益方。但之前在做掘金的时候,我用 GitHub 的 Open API 下载了数万个中国开发者的 GitHub 行为数据,现实是只有 15% 的用户操作过有价值的 commit / pull request,而贡献给他人项目的用户则更是凤毛麟角。

同样,中国的开发者开始持续的上传代码,每天掘金上都会有许多开发者 “开源” 出来的新项目。我一直会以复杂度与市占率两个象限来评判项目价值,最终带来的是不可替代性。这也是我想在此文章最后表达的,当我们决定去上传代码并分享的时候,我们要明白把代码开放出来开源一个项目的区别。我这里也就不再举例,众多开源蛮荒时期的 KPI 项目一个一个地出来后,未能解决问题,企业又无意去供养一个非高复杂度的项目时随时抛弃的现状。

一切的变化起源于重视,我看到了华为对开源的重视、阿里巴巴对开源的重视、腾讯对开源的重视、PingCAP 在利用开源模式建立商业公司。但如果我们的 “开源” 做不出高「高复杂度 / 高市占率」的项目,那我们也终究没有得到开源带来的垄断收益。

开源的责任

不知道为什么,一下子写了这么多字。因为一直在做掘金,每天和这么多中国开发者在一起,莫名地有了一些传播价值地责任感。我这里不再对 Ant Design 这件事进行评价,只是希望大家可以更好地理解开源,和它背后的意义。

而我希望把这篇文章进行最后的总结:

  • 开源是为了更好地协作开发出解决用户需求的软件

  • 一但一个高复杂度的项目获得了高市占率,开发者则难以迁移

为什么开源即责任?因为一个好的软件项目是为了服务好用户,选择开源模式,本身就是选择了一个为解决复杂问题提供通用(高市占率)解决方案的途径。选择开源模式,即提高了普及项目的速度,也就提高了你的软件被更多人依赖的可能。这也就是为什么,开源即责任。当数亿台服务器运行着 Linux 服务的时候,那些躺在 Mailing List 里的一次次为哪怕一行代码的长篇争论,都让人无比敬畏。

如下敬启

Btw, Joseph, you're a quality example of why I detest the github

interface. For some reason, github has attracted people who have zero

taste, don't care about commit logs, and can't be bothered.

The fact that I have higher standards then makes people like you make

snarky comments, thinking that you are cool.

You're a moron.

Linus

Ming

2018-12-25 ????????????


Acknowledgement

  1. Why Open Source misses the point of Free Software

  2. What is free software?

  3. The Cathedral and the Bazaar

  4. History of free and open-source software

  5. Why Open Source? | Google Open Source

  6. Linux Foundation Membership

  7. How Open Source Became The Default Business Model For Software

  8. Open Source Is Woven Into the Latest, Hottest Trends


(完)

MarkerHub文章索引:(点击阅读原文直达)

https://github.com/MarkerHub/JavaIndex
【推荐阅读】
总在说SpringBoot内置了tomcat启动,那它的原理你说的清楚吗?

谈谈在Java中如何优雅地判空

SpringBoot 整合 Quartz 实现 JAVA 定时任务的动态配置

骚操作:不重启 JVM,如何替换掉已经加载的类?

记一次订单号重复的事故,快看看你的 UUID 在并发下还正确吗?

Spring如何实现AOP,请不要再说cglib了!

懵!啥是Java软引用、弱引用、虚引用?


好文章!点个在看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值