(一)开源是啥
开源,是一种软件开发模式,就是把自己项目的代码放到网上,公开让所有人查看、修改和维护。因为软件这东西,不是固定不变的,需要随着硬件的迭代和用户需求的变化不断升级完善,以使自身的功能匹配使用者的需求。所以,开源就是这种不断完善软件功能的一种工作方式。
开源,是跟闭源相对的。最开始,计算机都是很贵的,一般人用不起,软件功能也很初级,且版权专利都掌握在大公司的手上,因为那个年代懂技术的人不多,只有他们才研发得起。为了保护专利,保护盈利,也保护计算机正常使用(怕被不懂行的外人搞坏了),所以大公司都把软件的代码给保护起来,不开放给外人看。
但其实,代码这东西,并不属于文学艺术等等领域的作品范畴。它就是一个工具,只是为了把软件运行起来而已,换一个人来写,只要能跑起来也是成功的,并没有什么专利一说。
因此,开源的领头人们觉得,你卖产品就应该包含了代码,代码只是其中一个零件而已,为啥不给人看?而且,对于他们这种懂行的人来说,机器哪个零件坏了他都可以修,但要是你不提供代码的话,机器坏了他就没法修了。只是空有一身技能,还得付钱请另外的同行来修,好憋屈。
这不是垄断,什么是啊?
凭什么只卖机器,不卖零件啊?
这算不算挟机要价,不合理收费?
于是,为了公平(以及维护消费者权益),大佬们发起了自由软件运动,倡导软件这种知识产品应该免费共享,反对软件私有,也即反对软件的知识产权、版权,还反对以申请专利的形式将软件产品据为私有。为了表达对Copyright(知识产权)的憎恶,斯托尔曼甚至生造了一个单词Copyleft。
自由软件运动者还创造出GPL(通用公众许可协议)这一许可协议来保证和保护同道中人彼此共享软件产品。GPL的基本原则就是:你可以“自由”地运行、拷贝、修改和再发行使用GPL授权的软件,但你也必须允许别人也能“自由”地运行、拷贝、修改和再发行该软件以及你在该软件的基础上加以修改而形成的衍生软件产品。
我们不难发现,自由软件运动有点太极端、太理想化了,生活在这么一个商品化社会,要完全如此的反商业,还是很有难度的。
于是,发展到了后面,一种“自由软件”和“商业软件”之间的折中——“开源软件”就此诞生了,即要求公司卖产品的时候,也要顺便把代码公开。实际操作起来的话就是,把代码公开托管到一个社区平台上,所有人都能上去看代码,修改代码,提交代码,甚至发起项目,和其他人一起写代码,共创一个产品出来。
开源软件既继承了“自由软件”所提倡的知识共享的理念,同时又允许人们以专利的形式从知识产品中谋取利益,从而保护了人们生产、创造知识产品的积极性。
(二)成功案例
一开始提出开源理念的话没啥人理你,不过后来真的有一个项目成功,让大家看到了这个理念是可以落地的。那就是开源系统 Linux.
Linux 的来源也是说来话长。最开始,是有一个操作系统,叫 UNIX 。有两方的人在改进它,一方是商业公司,一方是 Richard M. Stallman 创立的自由软件基金会(它是反对实验室成果商业化的),不过呢,两方改来改去,都没有拿出什么令人满意的结果。当时还没有开源这一工作模式,大家要搞软件的话,都是找几个精英程序员,关起门来琢磨琢磨,像修大教堂一样,精工细作地搞上几个月,不到工匠们满意了绝不揭幕让人参观。
但作为学生的 Linux Torvalds 没想这么干,他也想改进 UNIX,但他的方式是,在基础上改改,然后就公开出来给大家看,然后让路过的人出谋划策,大家都贡献一点意见和代码,然后一点一点完善。这种模式就像菜市场,走过路过的人顺便搭把手,然后就把这个金字塔给搭起来了。
听起来有点不靠谱,但谁能想到呢,在这种模式下,UNIX 还真的让他们给改造成功了。新的系统就此诞生,取名叫 Linux,并由此不断迭代,发展壮大,成了统治手机市场的 NO.1 操作系统。
现在回过头来看,Linux 的诞生虽然狗血,但成功却是有他的逻辑所在的。
首先,从人力来看:
群策群力总好过单打独斗吧,这从人数上来说,开源社区就比普通的中小型商业公司要强了。开源社区的贡献者很多,这个走了还有下一个,比小公司稳定多了。
而且,来的还不是普通的程序员,而是满怀激情的程序员。因为一般来说,软件的开发者也是它的使用者,甚至就是因为程序员本身有需求,所以才想来自己开发一个的。因此,他们对自己的项目,满怀激情,特别上心,比那些在公司里拿死工资混日子的摸鱼党,积极性要高多了。
等他们开始一个项目之后呢,在社区里总能遇到那些有同样需求和想法的同道中人,觉得你这项目真有意义,愿意加入你一起搞,造福自己造福大家。因为大家都是懂行的程序员,所以有了公开的代码之后,改起来就更快了,避免了像那种在公司里和产品经理撕逼各说各话的情况。大家都是技术人,哪里有bug,群里说一声,自然就能秒懂,大大提高了合作效率,节约时间。
其次,从客观上来说,公开代码,一起写一起看一起讨论的这种模式,不就是一次非中心化的同行评审吗?哪怕你水平不咋地,或者写错了什么地方,社区里这么多人,总会有人看出来的,总会有人有能力改正,大不了就等到下个版本再改呗。反正这么多人在用,就算有什么 bug 也很难藏的,早晚会暴露出来。这就是 Linux 说的,只要眼睛多,bug 容易捉。
于是,Linux 的开发就在 改进——发布——收反馈——再改进 这样的循环里,越变越好了。没有什么领导来施加严格的标准,也没有什么公司来添加赚钱的密门,大家一心只奔着让软件越来越好而去,于无序中创造出了一个有序、开放、好用的新系统。
(三)开源的发展
Linux 的成功确实挺颠覆大家的想象的,原来大家还觉得,开发软件这种高端的事情,就要大公司的专家们关起门来经过严密的组织和研究才能做出来呢,原来这种全凭兴趣、没有工资、没有强力组织的形式,也能做成大事啊。这事儿令很多业界的人开始反思了,也许真的是三个臭皮匠赛过诸葛亮呢?也许人与人之间就是在这种分工互补的合作里面成长的?人类作为群居动物,不就是这样进化的吗。。。?
扯远了。但在此之后,更多的开源项目建立了起来,越来越多的人愿意尝试这种开发方式,也有企业愿意加入进来了。其中最有名的就是火狐浏览器了,它原来是网景公司,为了抵抗微软在浏览器行业的垄断,而新开的项目,采用的就是开源的开发方式。一开始大家确实不适应,各种幺蛾子。但是等到后面,火狐也建成了,简洁又好用,获得了诸多程序员的青睐,果真打破了微软的垄断。
再之后的事情就顺利多了,更多公司加入到了开源世界里,项目也是五花八门,什么都有,包括但不限于系统、语言、工具、各种软件了。
到如今,开源更是在大模型和云原生时代备受期待。因为云原生的技术架构具有分布式的特点,天生有利于开源协作,也反映出,组织架构与软件架构具有一致性。大模型很依赖数据训练,为了数据安全考虑,开源更显公平,也更令人放心。因此,这都成了开源社区进一步发展的机会,倒逼更多的企业加入到合作共享这条道路上来。
反正,打不过就加入嘛。有了好用的开源软件,也没几个人愿意付你高昂的专利费了,还不如想想业务转型,或者搞点新东西。杜绝垄断,才有创新啊。从这个角度来说,开源确实是打破了不少资本家躺赚的美梦,也让个人和企业减少了不少软件成本,促进了计算机软件的竞争和发展。
开源吞噬世界。看来无论在哪里,共产主义都很令人向往。
(四)开源也有烦恼
开源这种活动,看起来就特别的理想主义,反资本,反垄断,要建立一个公平的世界,维护每个人的软件自由balabala的。乍一听没什么问题,但我们都知道,通常人要是只谈理想,就容易没钱。开源也不外乎此。
在以往,商业公司通常会把代码视为产品的一部分,而产品,是申请了专利的,你要使用产品,那就得付费,公司就这样通过卖产品(专利)赚钱。从这一点来看的话,这似乎也就是正常的商业行为,出卖脑力赚钱无可厚非。只不过后期凭借垄断地位卖低质高价的产品,才惹恼了大家。
开源出现以后,这种赚钱方式就被打破了。你都把代码告诉所有人了,那人家分分钟可以复制一个出来啊,为啥还要买你的呢?你没了专利,也就没有收入了,贫穷反而成了开源的福报,这真是闻者伤心听者流泪。
当然,聪明的程序员们倒也不会坐以待毙。不能凭借卖产品本身赚钱了,那我就想别的法子嘛。比方说卖服务、卖硬件,还可以给个人版产品免费开源,给企业版产品收费赚钱,等等等等。这些都是比较积极进取,把开源项目当企业产品来经营的,还有一些比较佛系的项目,直接就靠基金会捐款而活。因为一些企业采用了开源的软件,为了维护这个软件的正常运转和迭代,就会给基金会捐钱,希望能够补贴一下维护项目的程序员们,别用到一半掉链子了。开源基金会本身就是专门为支持开源项目而建的非营利性组织,拿到钱之后会为软件提供技术、运营、法务等等各方面的支持,相当于替代了“公司”这个角色把项目团队给管了起来。有了专人维护,程序员们更能专心搞代码。
(五)开源也有开源的规矩
之前说了,开源社区就像一个菜市场,里面的人乱糟糟的,大家都是自己做自己手头的事,最后合起来变成一个正常运行的项目。不过,虽然看上去很乱,却并不是没有条理、没有规矩的无头苍蝇。相反,程序员们只是不爱服管而已,做事还是喜欢有条理的。于是,在开源工作的发展和演变中,开源社区自己也衍生出了自己的规矩,比方说和平讨论,投票表决,按规则提交代码等等。这些都是对内的,对外,开源通常以协议的形式存在。
协议的版本有很多,可以理解为每个项目组需要你遵守的规则不一样,大家可以选择性加入。以现在最流行、使用最广泛的协议GPL 协议(2.0版本)为例,里面规定了:这个项目如果你要用,那你之后无论把它改成什么样,你都得把改后的版本开源给大家,包括你自己写的部分。也即用了开源的东西,之后它生生世世都得开源。
这种协议的存在,保证了开源的顺利进行。不仅保证了开源产品能够不被商业公司据为己有,也保证了后来者对社区项目的反哺和贡献。长此以往,开源得以不断循环,不断发展下去。
(六)开源的意义
如今,开源已不再单单是为了软件的公平使用而进行的反抗行为了,这场运动声势浩大,如民主平权,席卷了整个互联网界,带来的影响,也远远超出了当初的想象。
对个人和企业来说,开源固然有利于自身技术的提高和企业产品的发展,但眼光放长远的话,你还会发现,在世界格局动荡的今天,开源对国家而言,也有更重要的意义。
一方面,开源有利于国家捍卫技术主权,避免过于依赖特定的服务商,把纳税人的钱全送去巩固美国大厂的垄断地位。另一方面,也能节约大笔的软件版权许可费,让贫困地区的人也能以更低的成本用上计算机,缩小技术鸿沟。再有就是,有开源软件在手,起码不会被美国随意卡脖子,随意砍掉你的服务,或者盗窃你的信息,稍微保障了自身的软件安全。
不过,开源也不是万能的,普通产品开发过程中遇到的幺蛾子开源也会遇到,而且使用开源产品,由于不像企业那样有人专班维护,还有可能遇到以下问题:
1、开源软件使用者更新不及时。
许多组织在使用任何给定的开源组建的最新版本放上面落后得惊人。开源社区对软件的更新更快,但是大量使用开源组件的公司没有应用他们需要的补丁,使得业务面临被攻击风险。
2、开源项目缺乏管理工具。
大多数开源项目的开发缺少 SDL(安全开发生命周期)的流程和工具;许多开源项目关注少,资源有限;开源软件之间的关联依赖,导致开源软件的漏洞管理非常复杂;如果漏洞污染的是基本对象的原型,可能会影响应用程序中所有对象的行为。
3、攻击者对开源生态的攻击,比如向开源库中注入恶意代码、向包管理器仓库投放恶意组件等。
如 2019 年 8 月,开源的系统管理工具 Webmin 被爆存在高风险远程命令执行漏洞,据 Webmin 开发人员透露,该漏洞不是编码错误的后果,而是 “恶意代码注入受损的基础架构中” 导致的。
4、开源项目分发不合规。
如公共注册中心或开源软件市场没有对进入的开源项目进行代码审核,导致安全问题增多。
总之,使用开源产品的时候,也要注意自身的安全,做好资产梳理,建立安全引入和退出机制。其次,要组建专业的团队,有效识别漏洞并警告,避免漏洞被人利用。
最后,开源,说白了就是一种“区块链”式的软件开发方式,它能给软件带来想象力和惊喜,也能提升开发者的效率和见识,还能为企业、为国家降本增效,让更多的人都能使用得起计算机。不过,开源也不是万能的,开源并不能包治百病。如果用了开源的产品,一是要注意安全,二是要注意回馈社区,让开源能够长长久久地玩下去。毕竟,人人为我,我为人人嘛。希望至少在开源这里,世界和平。