04_开源文化的兴起与Github生态系统

内容摘要: 开源在近十年来逐渐形成了一种趋势,开源让技术更迭更加快速,各种开源协议五花八门。现在想学编程技术,有看不完的代码,各种优秀的项目层出不穷,这一篇文章,让我仔细聊一聊开源文化和最值得一提的Github生态系统。

1、开源的意义

开源软件是一种源代码免费向公众开放的软件,任何团体或个人都可以在其License的规定下对其进行使用、复制、传播及修改,并可以将该修改形成的软件的衍生版本再发布。

很多科研软件专业性强,涉及到学科众多,由于其科研的属性,决定了这些软件需要不断的创新与发展,而软件开源无论在激发用户创新动力方面,还是在促进软件不断成熟方面都具有重要的意义。

开源不仅有利于继承性创新,还有利于促进科研成果价值的体现,同时开源社区的不断壮大也是大势所趋。

维护开源软件生态是一项艰巨的任务,但做好了会对整个行业的发展起到推动作用。

  • Unix开源后,对PC操作系统产生了深远的影响
  • Android开源后,对手机操作系统产生了深远的影响
  • 著名的Github社区,对开源代码管理标准化产生了深远的影响

我是一个坚定的开源支持者,但对于开源还有一些事情你必须要知道。

2、开源协议有哪些

开源软件的有点是可自由使用、享有版权、特定License、可获得源代码、无许可费、无任何担保。而且开源软件及源代码可以免费获取;大多都有开源社区支持,可保证软件质量,协助问题解决及特性开发

但每种开源软件在具体使用的License并不完全一样,如果不遵守License会被投诉甚至起诉,还可能引入安全漏洞;此领域知识产权纠纷频频发生;若自行修改,可能形成“私有开源代码”,需自行维护全部开源代码,需有外部或内部团队掌握相关关键技术及获取社区支持。

另一方面,如果你要开源自己的代码,最好的选择是采用国际通用的开源协议。这样既有利于开展国际交流时保护版权,也有利于促进国际同行之间的交流。

现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http://www.opensource.org/licenses /alphabetical)。我们在常见的开源协议如BSD,GPL,LGPL,MIT等都是OSI批准的协议。

BSD,Apache,GPL,MIT是最常用的开源协议,每种都有它们的适用范围,准备开源或者使用开源产品的开发人员应该对每种协议特点有一个了解。

BSD开源协议是一个给予使用者很大自由的协议.基本上使用者可以“为所欲为”可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布.但“为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

  1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议.
  2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议.
  3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广.

BSD协议鼓励代码共享,但需要尊重代码作者的著作权.BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议.而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发.

MIT协议是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的.

Apache Licence是著名的非盈利开源组织Apache采用的协议.该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件).需要满足的条件也和BSD类似:

  1. 需要给代码的用户一份Apache Licence
  2. 如果你修改了代码,需要再被修改的文件中说明.
  3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明.
  4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence.你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改.

Apache Licence也是对商业应用友好的许可.使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售.明,无论你是以二进制发布的还是以源代码发布的.

图1 开源协议类型

上图是各种开源协议的区别,无论是你用别人的开源代码还是日后也想开源自己的成果,都可以参考一下呦!

3、Github是什么

在最开始的开源阵营中,很多人都是凭借爱好和热情来工作的,没有公司愿意把自己的成果拿出来免费个人用。更没有现在的所谓开源商业模式,仅靠一些开源组织的项目资助,并不富裕,所以,远程协作,拼凑基础设施都非常普遍。

这种情况下,面临的首要问题就是开源项目的代码或者数据放在哪里?还有各种不同版本怎么管理。以云为中心的技术和应用程序部署,对开源项目提出的新问题:

  • 竞争项目,通常有多个开源项目在相同的应用程序上工作,可能结果是注意力的分散。
  • 变化率,开源项目通常每年都会有2个、3个甚至4个版本,通常会对API和行为进行重大更改。使用这些版本费时费力,同时还要考虑下一个版本的变化问题。
  • 版本兼容性,版本之间可能不会向后兼容,造成迁移和升级操作复杂化
  • 长期支持,开源项目的成功取决于广泛的社区支持,如果指定的项目失去社区支持,该项目可能会逐渐消亡,剩余的用户会被搁浅。

以上这些问题,不光是开源会遇到,但是对于开源软件来讲,更需要做好这些才能赢得用户的信任。这时候GIT工具(什么是GIT工具?)提供给了开源者非常大的帮助,在版本管理和多人协同方便都很大程度上改善了开发者的工作模式,围绕GIT工具加上云的不断发展,这时候出现了很多相关的服务提供商。

Github这是这一轮竞争中的优胜者,该公司自2008年以来,收入一直以每年300%的速度增长,2018年以75亿美元被微软公司收购。

Github提供给开发者们一套完整的生态工具,从代码托管,质量控制,可持续集成与部署,与自动化文档,都提供了很好的解决方案。所倡导的理念就是:“只要你开源,我的服务就免费”。目前,Github上面的开源软件仓库已经超过1亿个。

但Github的缺点是服务器在国外,国内有些地区访问速度很慢,不过后面我们会讨论这个问题以及相关的加速方案。

2018年起,我们团队的也正式入住Github,近年来为了推动地球物理软件方面的教学和科研,计划通过5年时间,初步建立起一套从科研到应用的实用化生态链条

图2 面向地球物理学的Geoist开源软件包

以服务社会公益事业的美国地质调查局(USGS)为例,他们也全部采用Github平台完成团队协作和软件开发管理。

图3 美国USGS项目的开源化管理

结语:

Github将社会化编程的概念演绎到了极致,为全球开发者提供了空前的资源,从一个软件Stars数量,到更新频率,让用户可以足不出户,直接了解当前最新国际前沿发展趋势

你可能感兴趣的:(04_开源文化的兴起与Github生态系统)