c第九章开源技术与开源软件IT服务科学与工程yourfamilysiteyoursitehere本章内容开源软件与自由软件开源技术开源软件许可协议c开源技术与开源软件开源软件与自由软件yourfamilysiteyoursitehere开源软件简单来说,“开源软件”就是源代码开放的软件。1999年,EricS.Raymond在自由软件的范畴下提出了开源软件的概念,并出版了《大教堂和集市》一书,这是开源软件发展的标志事件。著名开源项目网站SourceForge在1999年还只有数百个开源项目,到2008年初,其开源项目数已经超过17万个,几乎覆盖软件应用的所有领域。yourfamilysiteyoursitehere开源软件的意义对普通用户来说开不开源其实意义不是很大,他们更在乎收不收费由于开源软件大多都是免费下载的,所以一提起开源软件,很多人的第一反应就是免费软件。对于商业用户来说可以减少开发周期,因为源代码开放了,只需要稍做修改就可以嵌入到产品中去;可以降低成本;但免费午餐不一定就不好吃(也有些开源软件需要收费,但价格都比较低廉)。yourfamilysiteyoursitehere开源软件成功的原因开源社区的协同模式改变和颠覆了软件业的工作方式,可以创造出高质量的软件产品。商业模式得到了验证:RedHat、MySQL、Asterisk都是非常成功的开源公司。真正释放了软件开发人员的创造力和生产力:全世界有上百万的程序员在参与开源软件的产品开发。国际软件巨头也纷纷加入开源阵营:IBM投资10亿美元支持Linux,Sun也斥巨资收购MySQL…yourfamilysiteyoursitehere自由软件自由软件是指用户运行、拷贝、研究、改进软件的自由,更准确地说,是指三种层次的自由:研究程序运行机制,并根据你自己的需要修改它的自由;重新分发拷贝,以使其他人能够共享软件的自由;改进程序,为使他人受益而散发它的自由。yourfamilysiteyoursitehere自由软件的精神领袖查德·斯托曼他被人称为‘最后的真正黑客’,他认为一个好的软件,便该自由自在的让人取用,而不应该拿来做为相互倾轧、剥削的工具。他起草了GNU通用公共许可证来保障自由软件的自由,并创办了自由软件基金会来贯彻他的理念。yourfamilysiteyoursitehere开源软件vs自由软件严格地说来,开源软件与自由软件是两个不同的概念,只要符合开源软件定义的软件就能被称为开放源代码软件。自由软件是一个比开源软件更严格的概念,因此所有自由软件都是开放源代码的,但不是所有的开源软件都能被称为“自由”。但在现实上,绝大多数开源软件也都符合自由软件的定义。yourfamilysiteyoursitehere开源软件的优势较低的成本大多数开源软件是免费下载的,软件公司并不靠出售软件来取得利润软件后期的维护和支持是需要付费的yourfamilysiteyoursitehere开源带来的可靠性、耐久性和安全性任何人都可以对代码进行检察并发现其中的安全隐患,任何人都可以修改代码中的问题,使用者不需要等待软件提供商对软件bug进行修正成熟的、并且通过长时间同级评审的开源软件是非常可靠的yourfamilysiteyoursitehere开放标准和摆脱供应商依赖开放标准的用户,不论是个人还是政府,都拥有在不同的软件、平台和供应商之中选择的灵活性和自由私有的、保密的标准使得用户只能使用一个供应商的软件,并且因为他们的数据都存储为私有格式,转换代价高昂而在此后继续受供应商的摆布yourfamilysiteyoursitehere开源软件面临的挑战知识产权问题对自由/开源软件性质和特征的界定对开源软件各类知识产权保护法律规定的强度和范围的理解对各种开源许可协议的内容或条款以及其解释的认知对自由软件运动发展中迄今尚存的一些争议问题或在法律上出现的灰色地带在执行中的处置等yourfamilysiteyoursitehere管理和维护问题与使用商业软件相比,使用开源软件往往会带来一些潜在的成本使用开源软件的学习曲线比较长管理方面的成本也会增加,因为使用开源软件要求系统管理人员具有多种技能:熟悉命令行接口、精通脚本语言、能够编写设备驱动程序等等没有完善的技术支持,即使有也需要额外的费用c开源技术与开源软件开源技术yourfamilysiteyoursitehereWEB框架目前流行的Web框架不再仅是一个MVC实现,而是几乎可以满足日常工作中的大多数需求的“一站式”框架,上至表现层,下至持久层,涉及了企业级应用中的方方面面。这些“一站式”框架可以很方便地同其他框架进行整合,比如Struts、Spring与Hibernate的组合就很不错。目前使用频率比较高的WEB框架:Struts、WebWork、Spring和Seam。yourfamilysiteyoursitehere编程语言静态语言:数据类型在编译期间检查,也就是说在写程序时要声明所有变量的数据类型,如C、C++、C#和Java等。优点在于结构规范、便于调试、类型安全缺点是为此需要写更多类型相关的代码,最终导致代码不便于阅读。动态语言:在运行期间才去做数据类型检查的语言,也就是说,在用动态语言编程时,不需要给任何变量指定数据类型,如Python、Ruby和Groovy等。优点是方便阅读,不需要写非常多的类型相关的代码缺点是不方便调试,当命名不规范时会造成对代码的理解困难等。yourfamilysiteyoursitehereAJAX框架AJAX是一种创建交互式网页应用的网页开发技术。使用XHTML+CSS来表示信息;使用JavaScript操作DOM进行动态显示及交互;使用XML和XSLT进行数据交换及相关操作;使用XMLHttpRequest对象与Web服务器进行异步数据交换;使用JavaScript将所有的东西绑定在一起。yourfamilysiteyoursitehere优秀的AJAX框架BuffaloDojoPrototypejQueryDWRyourfamilysiteyoursitehere版本控制软件版本管理系统的功能对软件项目代码和文档进行统一管理;帮助项目开发小组成员进行有效的分工与协调;将团队成员对代码和文档做的修改进行统一汇总;保存历史修改记录,以便随时回馈到之前的版本之中;对开发过程中形成的软件的各个版本分支进行标识和管理;必要的权限和安全机制来保证版本存储库易于管理控制;为代码版本冲突提供有效解决方式。yourfamilysiteyoursitehere常见的存储库管理工具CVSSubversionGitClearCaseStarTeamyourfamilysiteyoursitehere项目管理软件缺陷与问题跟踪系统的功能支持多个项目管理;问题录入和反馈;问题查询和关键词检索;问题更新订阅;问题讨论面板;个人显示和E-mail通知设定;集成版本控制工具;消息发布;统计分析、报表生成和输出;用户分级别管理;自定义的面板;系统设置。yourfamilysiteyoursitehere基于Web的软件缺陷管理工具MantisBugzillaScarabTeamworkTracGNATSITrackerTrackItBugFreeyourfamilysiteyoursitehere面向方面编程(AOP)AOP打破对象层次的界限,将一些共通的关切点集中到一起,让程序的结构更加清晰。AOP为系统在面对某种特定情况时应采取何种行为提供“指示”当触发某个事件时,比如当某个方法调用发生的时候,“指示”就会被自动执行。yourfamilysiteyoursitehereAOP框架的例子:AspectJSpringAOPJBossAOPyourfamilysiteyoursitehere面向服务架构(SOA)SOA实施中遇到的困难SOA的目标非常宏大,但是与之配套的标准规范制定的速度并没有跟上节奏;SOA的实施方法论和一般的软件开发实施的方法论不完全一样,而且尚处于不断的发展完善之中;人的因素尤其突出;缺乏高生产力的工具。yourfamilysiteyoursitehereSOA的开源工具服务基础设施:ApacheCXF、Axis等BPEL引擎:ApacheODE、ActiveBPEL等yourfamilysiteyoursitehere典型开源组合LAMP由Linux、Apache、MySQL和Perl/PHP/Python组成的开放的搭建动态网站的平台,每个组件都是自由或开源软件。LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,受到整个IT界的关注虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的廉价和普遍,这个组合开始流行yourfamilysiteyoursitehere开源网站:SourceForgeyourfamilysiteyoursitehere开源网站:中国开源项目c开源技术与开源软件开源软件许可协议yourfamilysiteyoursitehere通用公共许可协议通用公共许可协议(GPL)是在开源项目中使用最广泛的一种协议,它允许用户对软件进行合法的拷贝,传播和修改。这意味着你可以:随意复制随意传播随意修改收费传播:你必须将一份GNUGPL协议和你卖出的软件一起给买主,以让买主知道这种软件是可以通过其它途径免费获得的要想使用GPL保护下的代码,必须把自己的软件也置于GPL协议之下yourfamilysiteyoursitehere次通用公共许可协议次通用公共许可协议(LGPL)对作品的使用保留了更少的权利LGPL适用于一些类库,它允许这些类库能够被非GPL或非开源软件引用LGPL不要求其它程序也必须使用相同的协议才能使用这些代码程序yourfamilysiteyoursitehereBSD许可协议BSD协议有很多分支,相对其它协议(例如GPL),对软件的传播给予了更少的限制。无任何限制的允许以任何目的二次分发这种软件必须保留拷贝权的声明和协议里的软件权利放弃条款yourfamilysiteyoursitehereMIT许可协议MIT协议应该是在流行的开源协议中最简短的、使用最广泛的一种协议。协议内容如下:特此授权,任何人都可免费获得这个软件以及相关文档(theSoftware)的拷贝,可以无限制的使用这个软件,包括无限制的权利去使用、复制、修改、合并、发布、附加从属协议,以及/或者出售软件的拷贝,同时,为了让软件的提供者有权利做到这些,下面的条件必须遵守:上面的拷贝权声明和许可声明必须包含在所有的这个软件拷贝里和实际分署部分里。yourfamilysiteyoursitehereApache许可协议Apache许可协议授予了用户大量的权利,这些权利可以应用于拷贝权,也可以用于专利权。权利永恒权利无疆界授权无需付费和支付酬劳权利不排他权利不可变更