开源是用户写给用户的软件

简介:

开源最初被定义为“黑客写给黑客的软件”,因为早期的计算机环境资源很奇缺,软件开发的基础成本很高,能参加软件开发的都是大公司的,并且是多人团队共同完成的事情,管理也很复杂,软件当然是收费的,源代码更是“知识产权”而受到严格保护,想拥有自己可以随意改写的软件很不容易,想要定制自己需求的软件,更是难以想象的高成本投入。最早希望自己能随意删改软件、探求软件奥秘的就是黑客了,所以那时的黑客被人定义为是有些酷爱喜欢编程的人,不愿意服从领导意愿,喜欢自己创新的人。为了能有“自己的”软件,开源成了大家彼此共享的最佳选择。
开源社区是以公约的形式来组织大家,彼此合作,有人把它定义为“自由软件”:
1.          源代码必须与软件一起发布,或者能够以不超过发布成本的方式获得
2.          任何人都可以自由地重新发布软件,无须向作者支付版权费或者授权费,但必须在软件与代码的前面声明源代码的作者与社区
3.          任何人都可以修改软件或者从中衍生出其他软件,然后按照相同的条款发布经过修改的软件
    可见开源方式是以一种“社会大同”的形态出现,与版权保护有天生的对抗意识。后来随着各种软件开源社区兴起,有人添加了“允许他人从开源软件中衍生出商业软件”的条款,这样就允许了有人用开源软件(自己增加的代码功能)去获取商业利益。相反,也有人增加了“病毒条款”,限制商业软件从开源中牟利,就是任何从开源软件衍生的软件,必须把新增加的代码也全部开源给社区,否则视为违反开源“契约”,甚至有这样的官司案例(社区赢了)…
 
更多的人认为:开源社区只不过是编程爱好者的俱乐部,大家交流编程技巧,编些小工具软件还可以,大型的软件必须有严格的团队组织、统一的架构设计LinuxMySQLApache等大型软件的成功开发,人们开始重新审视开源社区的能力:在互联网流行的今天,开源可以成为新型、低成本的软件开发模式,并且足可以与私人软件公司的大佬们抗衡,这无疑是中小企业、个人编程等软件编程的弱势群体们的福音。
究竟是什么原因,让开源社区,这个松散的、彼此不认识的、甚至只知道网名的“虚拟”团队,就可以合作开发出优秀的、大型的、复杂的软件呢?真的是“我为人人,人人为我”互联网思想的体现吗?

我总结了几点自己的看法,供大家参考:

1、              KISS设计:“Keep It Simple and Stupid”的缩写,即“务求简约”。这是丹尼斯.里奇(Dennis Ritchie)和肯.汤普森(Ken Thompson)在开源开发Unix时使用的开发原则。这种思路是把复杂问题简单化、层次化,使得复杂系统可以简单管理。在一个开源社区内,核心的组织人员建立一个开放的软件架构,提供并管理软件运转的核心部件,开发者们就可以象在新选的一个城市地址上,在总体规划的架构下,任意发挥自己的想象,建设各式各样的建筑、街区、广场、公园

2、              没有门岗的“戏院”:开源社区的公约是一种约定,而不是法律,虽然也有开源社区为知识产权与私人公司打官司(并且还赢了,当然那是在美国),但开源的方式就是自由进出,进入社区的任何人都可以“免费”获得软件与全部源码,即使你不做出任何“贡献”,也没有人说你不对。好象我们可以去星巴克、麦当老坐着聊天,而不吃东西,他们也不会来“赶”你走,而去中国的饭店与茶馆,好象都没有这种待遇。

开源社区的这种方式让人“好进好出”,没有会担心自己“成果”会被人抢劫,这里的成果都是大家的,用自己的努力换来更多人的加入。正是有了这种“开放”体制,“社员们”热情高涨,尽情发挥自己的想象,不仅软件的质量很高,而且功能丰富而实用。开源社区就是一个没有门岗的戏院,任何人都可以展示自己的才能,并且你不担心没有观众。

对于那些刚进入软件行业的人来说,开源无疑是一个最好的学习、锻炼基地,你不用担心你编码的“不职业”,因为有很多专业的人会很快修复它、重写它,这种“优化”的对比教学,对学习者来说是梦寐以求的。这种培训不仅没有收你的“学费”,而且还让你可以获得现成的软件与代码,作为年轻人“自我创业”的资本。

3、              用户为自己开发软件:开源与私有软件公司的最大区别是公司开发软件是为了别人用,开发就意味这投入,回报就需要收费,“天下没有免费的午餐”。而开源社区开发的软件则不同,首先是开发者自己就需要,自己就是用户,开发Linux的人们是需要适应自己的硬件环境,而得不到私有软件公司的支持,或支持得不好,所以才自己做操作系统、驱动程序;开发Apache的人们是因为互联网发展迅速,很多人希望建立自己的网站,而昂贵的WebServer商用软件是个人负担不起的,大家合伙开发自己的免费webServer,各种漂亮的、富有创意的网站雨后春笋般地出现了;MySQL更不用说了,数据库是大家常用的,但Oracle的价格,你问问价格就不敢接着谈了,人家压根就没有想过给你这样的穷人用。

既然自己是用户,投入本身就已经体现价值,再开源给其他人用,不过是增加一份价值,多一个人帮你验证软件的可用性,需要收费吗?不是还有很多人花钱请人测试自己的软件吗?这就是开源软件免费的真正原因。

也正是因为是自己使用,很多功能不求表面花哨,而是注重实用,因为参加编程的人来自世界各地、各行各业,需求的功能五花八门,设计思路奇特而精巧,每个“用户”都仔细测试,“鞋穿在脚上,只有自己知道是否舒服”,不好用的功能或软件,在开源社区中自然就被淘汰,因为没有人去选择就是意味着大家不喜欢

私人软件公司在软件发布前,都必需进行大规模的测试,巨大人力投入为了渡过软件的“稳定期”;而在开源软件中,这个过程轻松地走过。

当开源软件到了一定的规模,有人看到商机,利用维护安装服务、培训用户等方式建立商业公司,让开源软件成为赚钱的产品,这是开源社区集体创造的价值,因此,如果说开源软件有知识产权的话,应该归开源社区集体所有,其价值应该回报给开源社区,让更多的人从开源中获得益处。

开源社区的成功,让很多商业公司看到了利益,所以,目前出现了很多公司形式开源,为了区别他们的不同,我们把开源进行了分类:

Ø   公司开源:是商业公司以开源方式推出软件产品。主要的目的有两个,一是赚取人气,先开源免费给大家用,等大家觉得好时,再转成收费的(有些软件利用盗版推广方法的嫌疑);二是利用开源让大家试用,降低自己的测试成本,同时利用社会上的免费开发力量与创意,打“搽边球”,降低自己的开发成本;公司开源一般是部分开源,保留核心模块,为了将来的收费准备。

公司开源仍然是为用户编软件,不是自己使用,因此,谋取利润是必然的,软件的版权很明确是归公司所有

Ø   个人开源:自己是用户,工作或生活中就需要这个软件,希望能为自己定制而又低廉成本,利用开源社区的力量,自己得到了软件,同时与同样需求的人进行分享。个人开源不以赢利为目的,免费到底。

个人开源是最初开源者倡导者想法的延续,开源社区的生命力在于人们从开源社区中获得自己想要的软件,成本低廉,功能定制,而不是把开源社区变成赚钱的商业模式。软件的版权归开源社区,或者是无偿给社会,就象我们中国古人的四大发明,首先是我们自己用,更愿意介绍给其他人用,因此推动了人类文明的进步。

 
    互联网的普及,软件的需求呈指数型增长,更让开源社区成为全球编程爱好者的乐园,我个人认为:开源社区已经走过“黑客写给黑客软件”的年代,进入到“用户写给用户软件”的时代。开源的软件不再只是黑客工具,更多的应用软件、业务处理软件、大众工具软件从开源中走出,开源社区已经成为新型软件开发模式,一个与传统的软件版权与专利“说不”的新软件时代的标志。

 




本文转自 zhaisj 51CTO博客,原文链接:http://blog.51cto.com/zhaisj/310286,如需转载请自行联系原作者
目录
相关文章
|
存储 NoSQL 安全
取代微信?RocketChat开源聊天应用搭建教程
取代微信?RocketChat开源聊天应用搭建教程
取代微信?RocketChat开源聊天应用搭建教程
|
1月前
|
SQL JSON 缓存
小说系统方案搭建开发,实现系统的用户登录验证说明
本文总结了小说系统源码中常见的身份认证方式,涉及JWT和Shiro。传统的认证流程包括用户提交凭证、服务器保存Session数据、发送Session_id给客户端,后续请求携带Session_id。但这种方式在多服务器或跨域场景下扩展性差。解决方案有Session数据共享或持久化。作者将服务端维护Session信息的认证方式归类为传统方式,反之为非传统方式,后者扩展性更优。文中还介绍了实例项目的SQL建表结构,用于演示认证流程。
|
3月前
|
JavaScript 小程序 Java
基于Java的大学生平时成绩量化管理系统设计与实现(亮点:点赞评论、上传下载视频资源、多用户论坛交流)
基于Java的大学生平时成绩量化管理系统设计与实现(亮点:点赞评论、上传下载视频资源、多用户论坛交流)
50 0
|
4月前
|
前端开发 JavaScript NoSQL
假如你是一名专业的程序员,你将如何最快开发一个在线网站,并给出相应的代码及部署文档
假如你是一名专业的程序员,你将如何最快开发一个在线网站,并给出相应的代码及部署文档
22 0
求大家鉴定下本人开发的系统平台界面如何,请多提宝贵意见
求大家鉴定下本人开发的系统平台界面如何,请多提宝贵意见
|
9月前
|
XML SQL JSON
程序员开发常用的云在线工具
云在线开发工具:代码格式化,base64/md5加密解密,utf-8转换,时间戳在线生成
173 0
|
SQL 前端开发 Java
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
168 0
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
|
SQL 前端开发 Java
Java开发:实现用户注册登录的功能
在Java开发过程中,实现用户的注册功能是最基本的,用户通过手机号或者邮箱作为注册账号也是非常常见的操作方式,不管是通过手机号注册或者邮箱注册,原理都差不多,那么本文就来分享一下在Java开发过程中的用户注册账号的功能实现。
262 0
Java开发:实现用户注册登录的功能
|
监控 Java API
手把手教会你 | 多用户-服务器聊天室应用软件开发
手把手教会你 | 多用户-服务器聊天室应用软件开发
195 0
手把手教会你 | 多用户-服务器聊天室应用软件开发
|
弹性计算 Linux 数据库
对于啊阿里云提供平台供学生学习的看法
本文主要讲述了,我在阿里云提供的学习平台中学习到的知识,以及我在使用过程中对云平台的操作技巧愈加熟练的收获,当然还有对于平台对我们学生免费提供平台给予我们学习的感谢,本文也讲述我在云平台使用过程中收获的成长,人生的路途遥远,我们还需努力学习,砥砺前行。