近几年开源项目越发普及,很多商业软件都逐渐引入开源项目。由于我负责的产品线采用了不少开源项目(主要是C++、Java、Python),这几年
就经常会碰到开源项目选型的问题(从几个具有类似功能的开源软件项目中进行抉择)。今天我就大概聊一下自己的几点看法,供大伙儿参考。<!--program-think-->
★License(授权协议)
License是很多人容易忽略的一个问题,所以我们先来聊一下License的问题。因为公司里面开发的软件基本上都属于商业软件,根据开源协议和商业的冲突程度,可以分为三种:非常友好、不太友好、很敌对。下面分别介绍一下:
先说说“很敌对”的协议:GPL。GPL和商业软件是严重冲突的。通俗地说,如果某个软件产品使用了某个基于GPL协议的库,则这个产品必须也使用
GPL协议发布(这就是大名鼎鼎的GPL传染性)。因此,一旦发现某个开源项目是遵从GPL协议的,即使功能再强再好用,也只好忍痛割爱了。在此郑重提醒
大伙儿,切莫抱侥幸心理,偷偷使用。一旦被雪亮的群众眼睛所发现,不光害了自己的名节,公司的名节也不保。
由于GPL对于商业软件太不友好,估计当年很多开源库的作者怨声载道。GNU组织为了缓和一下矛盾,搞出了一个折衷的LGPL协议。这个协议相对GPL来说,宽松了一些:商业软件在不修改代码的前提下,可以在产品中使用LGPL的开源库。所以LGPL属于商业“不太友好”的协议。
最后来说一下“非常友好”的协议,比较出名的有这几种:BSD、MPL、Apache、MIT。这些协议不但允许项目的使用者使用开源库,还允许对开源库进行修改并重新分发。因此用起来特别爽。上述这几个协议在细节上有些小差异,大伙儿可以去它们官网瞧一下。
另外,有些开源软件使用公共域授权(Public Domain,具体定义详见这里)。简单说,就是不作任何限制,软件的使用者可以为所欲为 :)
上面提到的几种协议都是知名协议。还有少数开源项目不是采用知名协议,而是自己搞了一套协议。如果你碰到这种情况,就得硬着头皮认真读一遍协议上的洋文,看看它对于使用者有些什么限制了。
★技术层面的因素
由于技术层面的考量和你所开发的软件密切相关,因此这方面的评判依据千差万别。我只能挑几个比较通用的说一下。
假如你开发的是跨平台的项目,那么你选择开源项目就得考虑它支持哪些平台(操作系统、数据库等)。如果你想支持的平台它不能支持,那就赶紧另找一个。
有时候编译器的支持也是考虑的指标之一。比如我在“C++的可移植性和跨平台开发”里面提到的老式编译器问题。再比如我曾经实施一个Java项目,用户的环境是JDK1.4。那么有些用了Java 1.5新语法的开源库就不能使用。
假如你开发的软件是性能敏感的,那选型的时候就要测试一下几个候选项目的性能指标。
现在安全问题越来越严重。如果你比较在意安全性的话,还得顺便调查一下候选项目是否有安全问题(比如缓冲区溢出的bug、比如跨站脚本注入等)。
★普及程度(用户的人气)
所谓的普及程度,就是看开源项目的用户占有率。当然大伙儿不是搞市场调查的,花钱请市场调查公司也不现实。简单的办法就是用搜索引擎大致搜一下,就能看出几个候选项目使用的广泛度了。
还有另外一个判断普及程度的方式,就是看某个开源项目是否被知名的软件或者公司采用。比如Firefox(算是知名软件)采用Sqlite来存储页面缓存,这至少可以从侧面反映出Sqlite项目的优秀程度。
对于若干个候选项目,显然要优先考虑普及度高的那个。因为某个项目普及度高,至少说明(但不绝对)它比较成熟、稳定、安全。而且用的人多了之后,相应的文档也会多一些,碰到问题也容易找到人咨询。
★活跃程度(开发的人气)
这里说的"活跃",是指开发层面。一般来说,一个项目越活越,则新功能的推出越快,对提交bug的响应也越快。有些项目,由于开发人员不再继续开发(可能开发人员厌倦了、可能开发人员太忙了),从而导致活跃度很低。
不过也有例外。有些项目由于已经非常完善了,因此反而活跃程度很低。我印象当中bzip2最近几年就很少有更新。
★其它的风险
最后来说说一些其它的风险。一般来说,只有当前几个因素都差不多的时候,才会来考虑其它风险。
有些项目过于依赖个人英雄主义,靠1-2个大牛完成整个项目。一旦大牛出现意外,导致整个项目受到严重影响。典型的例子就是ReiserFS文件系统的创始人Hans Reiser。这位老兄由于谋杀妻子的罪名成立,被判入狱15年(对IT八卦有兴趣的同学可以看这里)。导致ReiserFS项目受到严重影响。
还有些开源项目被商业公司收购后,由于种种原因(商业、管理、政治等)导致该开源项目受到不利影响。比如上星期听说Michael
Widenius(MySQL共同创始人)和Marten Mickos(MySQL前CEO)从Sun离职。再加上去年10月走掉了的David
Axmark(MySQL共同创始人)。估计对MySQL的影响不小。
上述提到的几个考量指标,越前面的,权重越高。你在选型时需要综合考虑这几个因素。
转载必须包含本声明、保持本文完整。并以超链接形式注明作者编程随想和本文原始地址:
http://program-think.blogspot.com/2009/02/how-to-choose-opensource-project.html
分享到:
相关推荐
... 但并不是一个真正的应用软件,但由其中的模块组合及再通过二次开发就...MYOIS的目标是成为中小企业开发管理软件的最佳选择开源项目。 目前MYOIS正处于开发阶段,使用PHP程序语言,Mysql数据库,extjs作为UI组件
最近项目需要一个时间选择器,github找了个开源项目,然后自己抽出来改了背景,分享下,背景颜色什么的可自己修改
本项目二次开发基于Zend Framework的企业管理开源项目CMS,Zend Framework 开源代码的框架的好资料。这为PHP 开发者学习提供几乎无限的选择。
用开源项目RangBar实现有范围的选择,相关博文:http://www.cnblogs.com/tianzhijiexian/p/4044086.html
一个电子血压计的开源项目 单片机的选择 最开始我们选择的是ESP8266。ESP8266 HDK (Hardware Development Kits) 包括芯片ESP8266EX、模组 ESP-WROOM-02 和开发板 ESP-LAUNCHER等。 我们在设计时预计在单片机上...
用开源项目DataTimePicker实现时间日期选择功能,相关博文:http://www.cnblogs.com/tianzhijiexian/p/4049240.html
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
原文地址:教你用开源项目在自己服务器搭建一个个人博客 本教程使用的开源项目为github上的:Halo 。仓库地址:https://github.com/halo-dev/halo 1.Halo简介 Halo 是一款现代化的个人独立博客系统,给习惯写博客的...
为什么选择 pyminer? pyminer 是一款基于Python的统计分析工具,它...使用Python语言代码和插件,与开源软件集成。 通过灵活的部署选项,更轻松地选择和管理您的软件。 pyminer 可用于 Windows 和 Linux 操作系统。
原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件...
这里分享一下我们编写的android游戏引擎和编辑器以及示例代码! 引擎源代码、示例Demo以及L9Editor编辑器在附件中! 可以直接下载使用,方便那些没有安装 SVN的同学或者还没用过版本控制得同学使用!...
在java世界,到处充斥着开源,这无论对于知识的学习还是对于项目的建设都是大有裨益的,但同时,由于过多的开源资源,也使得我们在学习及项目使用的抉择上往往会陷入一种彷徨状态,我们到底要舍弃谁保留谁?...
再谈开源项目:如何选择、使用以及二次开发?
文章目录前言一、开源项目还香吗?二、现实的好处1.技术能力提升2.社交3.经济上的好处4.求职、跳槽5.为开发者社区做贡献下一步 前言 各位朋友大家好,为了让自己的生活充实起来,我决定再开一套新的教程。选这个主题...
android hawk 数据库 github 开源项目 Hawk 是一个非常便捷的数据库 . 操作数据库只需一行代码 , 能存任何数据类型 . github 地址: https://github.com/orhanobut/hawk Hawk 是一个简单的 key-value 数据库 它使用...
开源项目-cch123-elasticsql.zip,通过sql获取elasticsearch dsl的另一种选择
Spring框架相比于HTML文件更加支持jsp文件,因此服务器的选择上选择了Tomcat进行开发。数据库需要本地安装并且配置好Mysql。 Eclipse有专门针对java web开发的版本,因此选用Eclipse Java EE IDE for Web Developers...
专业的微信管理框架并加入小程序商城,是用来学习和实际项目的不二选择 前端采用Vue、Element UI、Avue。 后端采用Spring Boot、Spring Security、Redis & Jwt、Mybatis Plus、WxJava。 小程序端采用原生框架+Color ...
开源分享,博客地址:http://blog.csdn.net/gao_chun/article/details/48202847
恩布企业IM是一款基于安卓手机平台的开源项目,旨在提供高效、稳定的即时通讯服务。该项目具有开放源代码的特点,可以根据用户的需求进行定制和扩展。以下是对恩布企业IM开源项目进行扩写的一些想法: 首先,可以...