开源软件
简述
开放源代码软件(Open Source Software),简称:OSS或开源软件。
这种“公开”正是促使人们使用它的原因,因为这意味着用户可以自由的使用、复制、散发以及修改源码(补充漏洞,按具体需求定制功能)。与其相对是私有/专属软件,如:来自微软和苹果的软件,这类软件的源代码是保密的,只有公司的开发人员才可以改动代码。
为什么会有开源软件
广义上讲,开源软件指所有公开源代码的软件,包括某些商业软件也可能是开源的。但我们通常所说的开源软件,是狭义上的,指任何人可以通过极低的成本 (如仅仅访问互联网而无需其它额外费用)获得该软件源代码的软件,也就是其源代码向公众开放。和狭义上的开源软件相对应的,就是那些不向公众公开源代码的软件,通常就是商业软件。
实质上,在计算机出现的最初年代,几乎所有的软件都是开源的。那时的计算机企业,主要是以销售硬件产品为主,软件几乎都是附送的,加上那时的软件规模都不大,以源代码形式提供给用户还可以缓解一定的技术支持压力 - 有问题由用户自己修改解决。所以,最初的软件几乎都是以开源的方式提供的。因此,对着迷于计算机编程的工程师来讲,获得软件的源代码几乎是天经地义的事情。这样,当以微软为代表的企业开始实践纯软件产品的商业模式(核心思想是提供二进制可执行程序的使用许可,而不提供源代码),就引起了许多计算机编程爱好者的不满:给我一堆二进制程序,我如何才能按我自己的想法改进程序?在这种背景下,真 正意义上的开源软件就自然而然地产生了。
开源软件的发展历程
开源软件的发展,和互联网的发展密不可分。真正有规模的开源软件,应该是从上个世纪90年代开始进入公众视线,也就是互联网开始兴起的年代。我们大致可以将开源软件的发展分为如下三个阶段:
- 萌芽阶段(上世纪九十年代之前)。这个阶段主要以个人和大学为主,因为发布条件受限,大多数开源软件无法得到有效传播,而仅仅流传于互相熟悉的程序员和老师、学生之间。这个阶段的典型开源软件为BSD操作系统。
- 以非盈利组织为主的阶段。这个阶段应从上个世纪九十年代算起,说起这个阶段,我们不得不提到Richard Stallman发起的自由软件基金会,还有Apache基金会等。前者发起的GNU项目(1983年发起,九十年代后随Linux普及),成就了Linux操作系统;后者维护的Apache Web服务器,在互联网上几乎占据了统治地位。
- 以大型IT企业为主的阶段。这个阶段出现于2005年之后,以谷歌为代表的大型互联网企业,开始以各种方式发布开源软件,最为著名的是Chrome浏览器以及Android操作系统;当然还有Intel、Nokia等企业主导的Moblin、MeeGo等基于Linux的智能手机操作系统。
开源软件的特点
不得不说Linux,包括很大多数软件为何得以流行,乃至飞速发展,说白了,通俗点就是:花钱少、免费,这是其中很重要的一个因素。
但是需要注意,虽然说绝大多数开源软件是免费的,但是开源和免费并不是等同的。也就是说开源软件可以卖钱,当然,并是不是把编译之后的代码给你,而是源代码。
下面,我们列举开源软件的一些特点:
使用的自由
绝大多数开源软件免费研究的自由
可以获得软件源代码散步及改良的自由
可以自由传播、改良甚至销售
开源大家族
如果不了解开源运动的发展史,也许真的无法领略到它给当今计算机科学所带来的影响有多大。
上图只代表了开源软件的冰山一角。。。下面,我们J简单介绍几种最常见的开源软件:
- 操作系统:Linux
Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
- 浏览器:Firefox
Mozilla Firefox,中文名通常称为“火狐”,是一个开源网页浏览器,使用Gecko引擎(即非ie内核),可以在多种操作系统如Windows,Mac和linux上运行。Firefox由Mozilla基金会与数百个志愿者所开发,原名“Phoenix”(凤凰),之后改名“Mozilla Firebird”(火鸟),再改为现在的名字。到2012年8月,在世界范围内,Firefox占据着23%的使用份额。
- 集成开发环境:Eclipse
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。
- 网页服务器:Apache HTTP Server
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
- 脚本语言:PHP
PHP是一种通用开源脚本语言。独特的语法混合了C、Java、Perl以及PHP自创的语法,利于学习,使用广泛,主要适用于Web开发领域。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其它的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
- 数据库:MySQL
MySQL是全球使用范围最广的数据库系统。2009年,全球的MySQL安装数量已达1千1百万。它是LAMP架构(Linux, Apache, MySQL, PHP)中的M。众多知名网站和产品均使用MySQL,比如:维基百科、Facebook、Google和Wordpress。(Google和Facebook均改造了MySQL,以满足自身需求)。
- DNS服务器软件:BIND
BIND是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS服务器软件,支持各种unix平台和windows平台。
无处不在的开源产品
很多人可能尚未意识到,我们使用的电脑中运行有开源软件,手机中运行有开源软件,家里的电视也运行有开源软件,甚至小小的数码产品(如电子相框)中也运行有开源软件,尤其是互联网服务器端软件,几乎全部是开源软件。毫不夸张地说,开源软件已经渗透到了我们日常生活的方方面面。
你访问的网站,大部分是使用Apache的Web服务器;你访问的网站,大部分操作系统是Linux或BSD;你访问的网站,大部分都是使用MySQL;你提交DNS查询请求由BIND服务器分析处理;你访问的博客很可能就是Wordpress的;你用的手机操作系统大部分是Android的;甚至你现在就是用Firefox在阅读我的的这篇文章。
开源是未来新IT的发展方向,开源让业界更多的优秀人才一起参与到共同的项目中,通过开放促进了技术的创新,通过共享解决了复杂性的问题。
严格遵守协议
除了大家比较熟悉的GPL协议之外,开源界还有很多许可证,如:LGPL许可证、BSD许可证等。
无规矩不成方圆。在使用开源产品的时候我们必须严格遵守相应的开源协议,要么和下面几位一样就尴尬了。
FFmpeg耻辱柱名单:
- 暴风影音
- POTPLAYER
- GOM PLAYER
- KMPlayer
- QQ影音
…
由于FFmpeg是在LGPL/GPL协议下发布的(如果使用了其中一些使用GPL协议发布的模块则必须使用GPL协议),任何人都可以自由使用,但必须严格遵守LGPL/GPL协议。目前有很多播放软件都使用了FFmpeg的代码,但它们并没有遵守LGPL/GPL协议,没有公开任何源代码,所以被列入FFmpeg耻辱名单。
更多参考
- 关于开源软件:你不知道的那些事儿