热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

可持续开源

可持续开源是指能够支撑自身发展的开源项目。从软件开发组织的角度来看,可持续开源项目是指有能力及时发布改进代码并修复产品中存在的各种问题的项目,也是有充分理由能够持续发展期的项目。从

可持续开源是指能够支撑自身发展的开源项目。

从软件开发组织的角度来看,可持续开源项目是指有能力及时发布改进代码并修复产品中存在的各种问题的项目,也是有充分理由能够持续发展期的项目。

从项目本身的角度来看,可持续性,简单地说就是项目可以负担本身的支出,这一点对由志愿者推动的项目意义重大。

本文将从项目及其发起者的角度来探讨开源项目可持续性的几种模式。有关如何从采购或重用的角度来评估可持续性,请阅读随附简报如何评估开源项目的可持续性。

可持续开源

(提图来自:themindfulword.org)

实现可持续性

要实现可持续性,项目必需能够负担自身的各项成本。成本包括基础设施成本(如托管和配套服务),以及开发、更新和维护代码库的成本。成本还包含项目产生的治理成本、营销成本和沟通成本。

很多项目的初始成本是由上级机构、赞助商、投资商或者创始开发者的初始投资来支付的。

但当这些钱和资源都用完了,会怎么样呢?

初期资金作为一种可行的选择并不是无限期的。到了某个阶段,就必须要开源或者节流。一个可持续的开源项目,其收入或节约的成本必须超过持续支持和开发的成本。

在软件开发方面的残酷现实,绝大多数项目不能实现可持续性。开源和闭源项目都是这样的。实际上,任何需要资金支持的活动都是如此。现实证明,绝大多数的创意都无法实现可持续性,而只有少数能够做到。

因此,我们有必要探究为何项目没能实现可持续性。某些情况下,这是因为项目未能达到它所设定的目标。所以,人们便期望能够撤销项目。然而,令人担忧的是,很多项目就算达到了最初的目标,却仍然会无法延续。公共资金支持的项目尤其如此。这类失败通常是由规划不当引起的。也就是说,一开始人们并没有就项目初期资金用完时如何维持项目制定计划,因此也就没有为实现可持续性分配资源。

所以,结论是显而易见的:要实现可持续性,项目的初始目标必须包括实施可持续性计划。其意味着,可持续性计划应该在项目周期的最开始阶段制定出来。而要制定这一计划,您必须了解自己有哪些选择。

这里无法列举所有可持续性选择,因为可用的模式和项目创意一样多。以下将简单介绍常见开源软件的可持续模型。

注意,只有极少数项目可严格归为以下某种模型。大多数项目能够实现可持续性,是因为它们将各种模型的要素进行了不同方式的组合;同样,各种模型之间也有共通之处。以下部分仅为您开始制定可持续性计划时提供参考。这些信息使您能够接触到像 OSS Watch 这样了解您所面临的机遇的顾问。

产品开发

一个从事开源产品业务的公司和其它公司并没有什么区别。就是说,它必须将一部分收入投入到产品研发中。四大类公司有能力从事商业性开源软件开发: 

  • 为最大限度扩大其付费产品市场而开源软件的服务公司,如支持、培训、定制、搜索引擎和电子商务公司等
  • 想拓展潜在硬件市场的硬件公司,如打印机或手机制造商
  • 使用开源组件的软件公司
  • 采用双重授权模型,同时发行产品的专有版本和开源版本的软件公司 

一个公司的活动不仅限于以上某一种;同样,每个开源项目的商业化也可由多个公司参与完成。

对于服务或硬件公司来说,主要营利方式不是出售软件本身。这样,这些公司就有可能发行受开源许可控制的软件,以便从第三方的贡献中受益。

对于服务型公司来说,开放软件源代码的动机是相同的。提供咨询和定制服务的公司希望尽可能扩大对其服务的需求,因此发布核心产品的开源版本是一种市场培育方法。此外,提供软件驱动的服务(如搜索引擎、Web 2.0服务或电商运营)的公司有充分的理由来开源他们的软件套件中不具竞争性的部分。这样就可以通过共享开发成本的形式,在初期开发、运营开发和持续维护中节约成本。例如,亚马逊、IBM、雅虎、易趣、Facebook和越来越多的公司在使用 Apache HTTPD Web服务器和GNU/Linux,并为它们作出贡献。

至于硬件公司,开源的动力可能来自于拓展硬件市场或降低产品开发成本。例如,打印机制造商可能会开源驱动程序,允许驱动程序被定制到不同的平台,以便扩大其硬件市场。又如,手机制造商可能将开源软件作为核心操作系统,以便与其它制造商共享公共功能的开发成本。

通过销售软件营利的软件公司有两种可用模型。但每种模型只在特定的开源许可下有效。希望在专有产品中嵌入开源软件的公司可使用所谓“宽松”开源许可(一般称为BSD许可)来实现这一点。与此相反,其它公司对其软件产品采用双重许可授权模式,即采用所谓“公共”许可(如GPL),同时在专有许可方式下销售软件。

非营利性开放开发

很多时候,由某一组织开发的软件其本身并不创造收益。在这种情况下,该组织可通过开放源代码来降低开发成本。此时,可以考虑成立非营利性组织来管理软件的开发。这样做有两种作用:首先,基础设施成本和管理成本的很大一部分可被此非营利组织吸收。这些成本由使用非营利性组织管理的产品的公司出资维持。其次,这将鼓励更多的组织参与到项目中来,因为他们相信,他们始终可以使用项目产品,并以符合所有贡献者利益的方式管理项目产品。就是说,不存在与项目战略相“冲突”的商业利益,也没有被“买断”的席位能够掌控开发。

此类组织的最好例证可能就是 Apache 软件基金会 (ASF),一个领导着如Apache Web服务器 (HTTPD) 和许多基于 XML 和 Java 的项目的非营利性组织。ASF 由来自公司和个人的慈善资金支持,为 Apache 项目开发人员提供工作所需的基础设施。ASF 的工作由个人来完成,这些人通常是使用 Apache 代码作为内部开发代码或销售定制版本的公司的雇员。

例如,Apache Rave 门户框架最初是由学术界和商业伙伴作为 Apache 孵化器的一个项目提出的,后续又成功吸引了大量开发者,并于 2012 年晋级为 ASF 顶级项目。

非营利基金会的其它例子还包括:

  • 自由软件基金会
  • Eclipse 基金会(注意,该组织最初是一个联合会,见下文)
  • Gnome 基金会
  • Mozilla 基金会
  • Python 基金会

联盟

当组织的核心团队就某一项目合作时,可能形成软件维护联合会。这与创建非营利性组织类似(见上文)。联合会与非营利性组织的主要区别是,联合会成员比非营利性组织发起者对项目拥有更多的控制权。非营利性组织会以有利于所有人的方式管理软件,而联合会则以对其成员(和共同利益者)有利的方式管理软件。

联合会模式的一个优势在于,联合会能够通过决定如何使用资源(时间和金钱)来更密切地控制项目。然而,这一事实将减弱项目对非核心团队成员的吸引力。考虑到今日的用户会成为明日的开发者,因而应鼓励用户早期参与,这一点就显得尤为重要。遗憾的是,联合会模式往往使用户感到被排除在外,因为他们不是项目成员。

有意思的是,许多以种子资金创立的项目常常以贤明君主模式(benevolent dictatorship)或联合会模式启动,而当种子资金用完时不得不转变为其它模式。这种转型非常难于控制。

DSpace 项目是教育系统中一个成功的联合会项目的例子。联合会模式的其它例子还包括 Apereo 基金会和Kuali 基金会。而 DSpace 和 Apereo 都在转向更开放的模式。

对降低成本的贡献

一个组织选择开源软件产品可能出于多方面的原因。某些情况下,他们这样做是为了实施新流程、提高现有流程效率或者降低软件许可费用。已经采用了开源软件产品的组织可能也会选择向开源项目贡献代码,以获得更多的收益。例如,加入新功能以进一步简化内部流程,或者修复 bug 以提高员工的使用效率。

在这种情况下,回馈项目的主要动机有两点。首先,通过回馈项目,该组织可确保所依赖的软件保持活跃。其次,通过回馈项目,该组织可确保未来的升级尽可能顺利,即升级后不必重复进行本地修改。

例如,APLAWS 开源内容管理系统就是为帮助英国地方政府提供在线服务而开发的。

教育和研究资金

英国以及世界许多其他地方鼓励教育机构在开源许可下开发软件。大专院校的开源项目资金可能来自投资机构或学校自身。只要机构可以获得直接利益,投资,即便不是全额,也很可能会一直持续下去。

机构可以多方面受益。最大的好处可能就是,内部成本的降低和在为更广泛的教育界做出贡献方面提升声誉。此类项目的一个例子是剑桥大学的 Exim 项目。菲利普•黑兹尔自 1995 年 Exim 项目开创起即负责此项目,在剑桥大学计算机系任职期间他持续服务此项目,直到 2007 年退休。这类项目的另一个例子是南安普敦大学的 MailScanner 项目,大学雇员朱利安•菲尔德是该项目的“贤明君主”。

开放开发已证明是具有不同利益和专长的各方的有效合作方式,尤其适合于开源软件开发。在商业领域,我们看到人们对“开放式创新”这一理念具有广泛兴趣,认为这是开发新产品和现有产品的有效方法。通过精心规划和管理,开放式创新提供了一种可控、可管理的流程,鼓励商业开发和社会推广,而项目学术研发团队只需专注于局部问题,而非商业计划。例如,Apache Wookie 由博尔顿大学开发,却吸引了大量其它学术外领域的开发者,并于 2012 年成为 Apache 顶级项目。

慈善家和其他基金组织

多个慈善组织是开源项目的重要投资者。这些组织包括:

  • 梅隆基金会 - 主要资助图书馆领域的重要工作
  • Google Summer of Code - 由 Google 运作的项目,用于资助学生参与开源项目
  • 自由软件协会 - 为免费和开源软件项目募集资金的慈善机构

志愿者

参与开源软件项目很有教育意义,更不必说其乐趣了。因此,在业余时间为开源作贡献的人并不少见。除以上模式之外,志愿者的工作也是很重要的,大多数开源项目都有志愿者参与。

目前,项目可通过多种方式使用免费基础设施获得托管和相关功能(如问题跟踪和社区参与),此类资源有 SourceForge 和 GitHub。这意味着,只要项目能得到来自可靠社区的开发和发布支持,便可以零成本可持续发展。

(志愿者)用户对于开源项目同样很重要,因为用户会提出需求并进行测试。只要您能够管理用户对特定版本的期望,就能发行开源软件试用版或早期采用者版本用于测试,这便可以大大降低稳定版本发行前的成本。

OSS Watch 文档如何建立开源社区切实地介绍了如何实际创建一个包容、多元的开源社区。


OSS Watch 团队发布于 2008 年 8 月 5 日,上次更新于 2014 年 4 月 9 日

可持续开源

推荐阅读
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 初探PLC 的ST 语言转换成C++ 的方法
    自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
author-avatar
爱音乐的李雪梅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有