精华内容
参与话题
问答
  • 开源软件

    千次阅读 2016-07-10 15:13:44
    简述开放源代码软件(Open Source Software),简称:OSS或开源软件。这种“公开”正是促使人们使用它的原因,因为这意味着用户可以自由的使用、复制、散发以及修改源码(补充漏洞,按具体需求定制功能)。与其相对...

    简述

    开放源代码软件(Open Source Software),简称:OSS或开源软件。

    这种“公开”正是促使人们使用它的原因,因为这意味着用户可以自由的使用、复制、散发以及修改源码(补充漏洞,按具体需求定制功能)。与其相对是私有/专属软件,如:来自微软和苹果的软件,这类软件的源代码是保密的,只有公司的开发人员才可以改动代码。

    | 版权声明:一去、二三里,未经博主允许不得转载。

    为什么会有开源软件

    广义上讲,开源软件指所有公开源代码的软件,包括某些商业软件也可能是开源的。但我们通常所说的开源软件,是狭义上的,指任何人可以通过极低的成本 (如仅仅访问互联网而无需其它额外费用)获得该软件源代码的软件,也就是其源代码向公众开放。和狭义上的开源软件相对应的,就是那些不向公众公开源代码的软件,通常就是商业软件。

    实质上,在计算机出现的最初年代,几乎所有的软件都是开源的。那时的计算机企业,主要是以销售硬件产品为主,软件几乎都是附送的,加上那时的软件规模都不大,以源代码形式提供给用户还可以缓解一定的技术支持压力 - 有问题由用户自己修改解决。所以,最初的软件几乎都是以开源的方式提供的。因此,对着迷于计算机编程的工程师来讲,获得软件的源代码几乎是天经地义的事情。这样,当以微软为代表的企业开始实践纯软件产品的商业模式(核心思想是提供二进制可执行程序的使用许可,而不提供源代码),就引起了许多计算机编程爱好者的不满:给我一堆二进制程序,我如何才能按我自己的想法改进程序?在这种背景下,真 正意义上的开源软件就自然而然地产生了。

    开源软件的发展历程

    开源软件的发展,和互联网的发展密不可分。真正有规模的开源软件,应该是从上个世纪90年代开始进入公众视线,也就是互联网开始兴起的年代。我们大致可以将开源软件的发展分为如下三个阶段:

    1. 萌芽阶段(上世纪九十年代之前)。这个阶段主要以个人和大学为主,因为发布条件受限,大多数开源软件无法得到有效传播,而仅仅流传于互相熟悉的程序员和老师、学生之间。这个阶段的典型开源软件为BSD操作系统。
        
    2. 以非盈利组织为主的阶段。这个阶段应从上个世纪九十年代算起,说起这个阶段,我们不得不提到Richard Stallman发起的自由软件基金会,还有Apache基金会等。前者发起的GNU项目(1983年发起,九十年代后随Linux普及),成就了Linux操作系统;后者维护的Apache Web服务器,在互联网上几乎占据了统治地位。
        
    3. 以大型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耻辱柱名单:

    1. 暴风影音
    2. POTPLAYER
    3. GOM PLAYER
    4. KMPlayer
    5. QQ影音

    由于FFmpeg是在LGPL/GPL协议下发布的(如果使用了其中一些使用GPL协议发布的模块则必须使用GPL协议),任何人都可以自由使用,但必须严格遵守LGPL/GPL协议。目前有很多播放软件都使用了FFmpeg的代码,但它们并没有遵守LGPL/GPL协议,没有公开任何源代码,所以被列入FFmpeg耻辱名单。

    更多参考

    • 关于开源软件:你不知道的那些事儿
    展开全文
  • 知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对...

    知乎高赞:中国有什么拿得出手的开源软件产品?

    在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?”

    事实上,还不少呢~

    本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下:


    分布式计算、云平台相关工具类

    1.SkyWalking,作者吴晟、刘浩杨 等等

    skyWalking

    仓库地址: apache/skywalking

    更多详情请看: SkyWalking毕业成为Apache顶级项目 - InfoQ


    2.Apache ShardingSphere(Apache顶级项目 + CNCF云原生计算基金会全景图项目)

    在这里插入图片描述

    仓库地址: apache/incubator-shardingsphere

    更多详情请看: 快讯!Apache ShardingSphere进入CNCF全景图


    3.TiKV, PingCap公司

    img

    tikv/tikv: 分布式的事务型键值数据库,最初是作为TiDB 的功能的补充而创建的

    仓库: tikv/tikv


    4.阿里巴巴 Dragonfly

    dragonflyoss/Dragonfly: Dragonfly是一个基于P2P的智能图像和文件分发系统。

    img
    仓库: dragonflyoss/Dragonfly


    5.阿里巴巴 dubbo (主要语言是Java)

    apache/dubbo: Apache Dubbo 是一个基于Java的高性能的开源RPC框架。

    img

    仓库地址: apache/dubbo


    6.携程 阿波罗配置管理

    在这里插入图片描述

    仓库: https://github.com/ctripcorp/apollo


    面试干货类:

    1.MisterBooo/LeetCodeAnimation: 用动画的形式呈现解LeetCode题目的思路

    img

    仓库地址: MisterBooo/LeetCodeAnimation


    2.CyC2018/CS-Notes: Tech Interview Guide 技术面试必备基础知识 等,作者 郑永川

    img

    仓库地址: CyC2018/CS-Notes


    Web前端类

    1.百度Echarts

    Echarts

    仓库地址: apache/incubator-echarts


    2.阿里巴巴ant-design系列

    ant-design/ant-design: A UI Design Language

    仓库地址: ant-design/ant-design

    Ant

    相关的代码仓库:
    Ant Design like a Pro!
    ant-design/ant-design-pro


    App类

    1.腾讯微信WeUI

    img
    仓库地址: Tencent/weui


    2.WeiXinMPSDK, 作者: 苏震巍Jeffrey Su

    JeffreySu/WeiXinMPSDK: 微信公众平台SDK Senparc.Weixin for C#,支持.NET Framework及.NET Core。已支持微信公众号、小程序、小游戏、企业号、企业微信、开放平台、微信支付、JSSDK、微信周边等全平台。 WeChat SDK for C#.

    img
    仓库地址: https://github.com/JeffreySu/WeiXinMPSDK


    3.Android相关

    a. daimajia/AndroidViewAnimations: Cute view animation collection.
    img
    仓库地址: daimajia/AndroidViewAnimations


    b. daimajia/AndroidSwipeLayout: The Most Powerful Swipe Layout!
    img
    代码仓库: daimajia/AndroidSwipeLayout


    下载工具

    1.you-get下载器 (开发语言: Python)

    soimort/you-get: 傻瓜式网络抓取下载器
    img
    仓库地址: https://github.com/soimort/you-get

    官网: https://you-get.org/


    游戏相关

    cocos2d/cocos2d-x: Cocos2d-x是一套开源的跨平台游戏开发工具,被全球数百万开发人员使用。
    img
    仓库地址: cocos2d/cocos2d-x


    其他工具

    1.Wox (快速启动工具,类似于Mac中的Alfred,支持Win7, Win 8, Win10)

    Wox-launcher/Wox: Windows中的快速启动器,是Alfred和Launchy的替代产品。

    仓库地址: Wox-launcher/Wox
    img

    2.Chatie/wechaty: WeChat Bot SDK (主要语言是 Typescript)

    img
    仓库地址: Chatie/wechaty


    作者简介:Bravo Yeung,计算机硕士,知乎干货答主(获81K 赞同, 38K 感谢, 235K 收藏)。曾在国内 Top3互联网视频直播公司工作过,后加入一家外企做软件开发至今。

    原创不易,你的支持和认可将让我写出更好的文章,更多干货可关注公号「大白技术控」,持续输出优质的技术文章~

    展开全文
  • 推荐开源软件

    千次阅读 2012-12-19 13:05:33
    前段时间调研了一些开源的软件,主要是server端的一些开源软件,便于建站的。门户系统joomla很不错。基于php做的,功能很丰富,有各种部件可以选择。放些新闻、介绍、图片、下载,作为小公司的门户是最合适的。随便...

    前段时间调研了一些开源的软件,主要是server端的一些开源软件,便于建站的。

    门户系统

    joomla很不错。基于php做的,功能很丰富,有各种部件可以选择。

    放些新闻、介绍、图片、下载,作为小公司的门户是最合适的。随便找个php空间就能部署。

    在线商店

    opencart很不错。非常简单易用。

    它当然不是淘宝或者京东,但是稍微修改一下,当个在线订餐的小网站还是没问题的。随便找个php空间就能部署。

    远程授课

    openmeetings很不错。部署非常简单,而且功能会超出你的预期。

    缺点是对硬件的要求比较高,要完整的虚拟机(请百度下云主机),而且要1G以上内存,还需要有一定的带宽。

    其他

    一两千块钱租个虚拟机,找点开源软件,就可以架设你自己的网站了。门槛真的很低。



    展开全文
  • 开源软件和开源社区的反思

    千次阅读 2016-03-31 10:48:10
    由于开源软件存在局限性,近来学术界 开始对开源软件和社区的发展进行反思,认为 :开 源软件的使用比开发更重要 ;要重视发展开源软件 工程技术 ;在大数据和云平台的环境下,应该建立 新的软件工程,包括软件的...

    蔡维德 李 磊 
    北京航空航天大学

    引言

    当前,许多新型技术凭借开源方式推广。开源 软件的发展由来已久,目前已有数以万计的开源社 区和模型。由于开源软件存在局限性,近来学术界 开始对开源软件和社区的发展进行反思,认为 :开 源软件的使用比开发更重要 ;要重视发展开源软件 工程技术 ;在大数据和云平台的环境下,应该建立 新的软件工程,包括软件的需求、设计、测试、整合、 部署和监测。

    开源软件和开源社区的发展

    一个流行的开源软件拥有一群高效率的开发者和数量庞大的用户群,在通常情况下,用户无须 支付费用。这些“免费”的开源软件往往由拿着高 薪的工程师完成。为什么这些工程师愿意无偿从事 开发?以Linux为例,以前很多人虽然反感微软的 Windows系统,但由于没有其他操作系统,只能选 择Windows。当Linux系统开源项目一出现,许多 软件开发组织自愿加入进来。再如,OpenStack的 开发也是如此,许多公司愿意付薪水给员工,并将 其组成团队进行开发,期望OpenStack能取代市场 的主导产品。如果市场上出现了能够主宰市场的产 品,而其他公司却没有足够的资源能在短时间内开 发出自己的产品与其竞争,这些公司就会结成联盟 使用开源软件开发来改变竞争态势。安卓系统也存 在同样的情形。该系统一直在利用开源软件系统与

    其竞争对手苹果iOS系统对抗。 由于每个参与开发的组织都有自己的管理方 式、企业文化及软件开发流程,因此他们只能以开 源的方式合作,通过社区交换代码进行交流。这是 开源软件和开源社区的驱动力。 比尔·盖茨说过: “市场占有率是最重要的”[1]。 一旦占领市场,以后开发出来的软件就不得不依靠 之前拥有市场主导地位的软件,所以软件公司以占 领市场为首要任务。由于人们可以免费或低价获取 开源软件,所以开源成为占领市场的利器。 从许多开源软件的事例可以发现以下几个事实:
    1. 虽然大多数开源项目没有成功,但是成功的 开源软件占据了绝大多数市场份额,例如Hadoop、 Linux、Spark和OpenStack。
    2. 成功的开源软件大多是被“赞助”的(意指 多个公司结成联盟进行软件开发),而“独立”的 开源项目则大多失败。
    3. 成功的开源项目也可能走向失败,其原因有: 出现了新一代产品,开源软件领导核心离开以及企 业改变了经营策略等。
    4. 许多新的软件技术也经常使用开源软件来进 行推广。例如作为当前金融学领域炙手可热的区块 链技术 [2]。 “开源社区”的核心是“开源”,社区是“果”, 而不是“因”。“赞助”往往是“因”,有了大量的赞助, 才有了大量的开发人员。此外,社区这个“果”并 不意味着其相应的软件已经成为“产品”。软件产 品和项目是不同的,一个软件成为产品要花费大量的工程与测试。所以如果有人认为软件放在开源社 区开发,就会有工程师免费参与,那是不切实际的。如果没有赞助,相信大多数工程师都没有兴趣来开 发,愿意无偿开发的工程师毕竟是少数。
    斯蒂芬·瓦利斯(Stephen Wallis)在其著作中提 到了开源社区和顾客的不同 :社区是一群开发者, 对软件有兴趣,有大量的时间却缺乏资金 ;顾客正 好相反,没有时间但有钱。在一个社区里,开发者 也可能是顾客,但不是每一个开发者都是顾客,也 不是每一个顾客都是开发者。社区活动的要素包括 :社区辨识与认同 (identify community)、社区的 使命(mission)、平台工具、参与机制(architecture of participation)、行为准则、知识产权和治理结构等。 开源社区需要顾客发现软件和使用软件,培训 顾客使其了解软件并产生购买欲望。开源社区与顾 客的关系如图1所示。
    图片描述
    成功的开源社区形成的模式通常经历以下过程 :
    1. 项目开始于一些开发者对问题的讨论 ;
    2. 开发者讨论要发展的项目 ;
    3. 把软件放在开源社 区,让其他的开发者共同参与 ;
    4. 建立说明文档及 FAQ1,让众人参与讨论 ;
    5. 建立一个非盈利的基金会。基金组织确认知识产权管理的制度,使投资人从上述生态系统中获益。

    开源软件的开发和应用

    开源软件技术分为软件“开发”及“应用和采 购(adoption and acquisition)”两部分。人们往往谈 论软件开发多一些,但是,通过了解美国国防部对 开源软件的方针就会发现,他们更重视“采购”和 “使用”[3]。早期美国卡内基梅隆大学软件工程研 究所(SEI2)曾提出软件能力成熟度模型(Capability Maturity Model, CMM)理论,其重点是“软件的开 发遵循着一定的流程”,流程在一定程度上保障了软 件的开发质量。这在过去是正确的,但后来美国国 防部的软件开发项目几乎全部采用了外包策略,这 才有了软件采购技术的研究。采购技术是一种关于 设计软件需求以及验证外包商开发的软件是否能够 被采纳的新兴技术。 “采购”与“开发”技术有所关联。“开发”是 源于“生产者”的观点,目的是用最高效的方法研 发软件; “采购”是源于“消费者”的观点,目的是 用最低的费用来快速地得到和使用有质量的软件。 例如,生产者(工程师)关注设计和制造软件,消 费者(用户)则更关注软件的质量、维护以及使用。 采购技术是为了收集、批准和使用软件。对于 那些有开发进度数据的软件系统,采购者需要检验 开发进度中的数据,以判定开发者或者项目管理者 是否存在欺骗。如果已经偏离了规定的进度,或者 明显落后于计划,管理者就可以采取措施来改正或 取消项目。 如果没有可利用的进度数据,则采购者需要检 验产品来判断软件质量。因此,采购者关注的是测 试和评价数据,根据需要获取足够的此类数据,来 确保系统符合质量标准、安全性和可靠性标准。这 项工作通常包含端对端测试和集成检测 [4]。采购者 还需要确保所需的项目能够集成到现有系统中。因此,采购技术包括计划、承包、进度管理(包括规范、 控制、跟踪和审计) 、测试和评价以及最终政策和 指向。 在开源软件时代,采购的一个重要目标是创造 可信赖的软件库,库中只存有通过严格测试和用户 验证的软件。虽然国内外的开源社区非常多,也提 供了大量的开源软件,但只有极少数的开源软件能 通过严格的测试而放在可信赖的软件库中 [5]。美国 国防部开发Forge.mil社区就采取了这个策略。 表1比较了开源软件的 “开发” 与 “应用和采购”。
    图片描述

    应用社区的探索

    Forge.mil社区

    Forge.mil与软件开发社区有许多不同,主要有 以下几个特点 [6] : (1)需要用户提前、持续地参与系 统开发 ; (2)软件开发者必须经常发布不同版本的软 件 ; (3)所提交的软件必须可以持续升级 ; (4)开发 者必须使用一种可模块化、开放的流程。社区包括 软件库、协作开发/测试的环境、软件过程管理与 方法、软件工具与资源这四个部分。 其软件开发的方法是敏捷开发方式加上开源 软件。要实现这个方法不仅需要社区有许多的开源软件,还需要对这些开源软件的使用提供大量的支 持,包括传统的软件开发工具、社交网络以及大数 据。可以利用大数据方法搜集每个开源软件的元数 据,并利用云计算上面的快速运算来帮助搜寻开源 软件。开源软件元数据是SEI所做的工作 [7],正是 得益于他们的软件支持以及云计算平台的联合,才 有了持续集成 (continuous integration)、持续测试 (continuous testing)以及持续部署(continuous deployment)等技术。

    其他软件社区

    其他具有代表性的开源软件社区有Black Duck (黑鸭软件)、Stackoverflow以及CSDN(中国程序 员大本营)。Black Duck是开源代码审计和管理领域 的领导者,软件包含Protex、Codecenter和Export 三个工具。Protex用于代码扫描,可以帮助用户发 现自己的源代码中是否含有开源软件代码,如果有, 则帮助用户判断其是否有触犯开源软件知识产权法 律的风险。Codecenter是帮助用户在软件开发生命 周期中管理和有效使用开源代码的工具。Export能 够帮助用户发现源代码中是否含有加密算法等。
    Stackoverflow是一个与程序相关的技术问答网 站。用户可以在网站免费提交问题,浏览问题,检索相关内容。
    CSDN创立于1999年,目前是中国最大的信息 技术社区和服务平台,为信息技术从业者提供服务。

    开源软件工程教育

    开源软件改变了软件工程。当前由于人们已拥 有大量的开源软件,并可以利用一些方法搜寻元数 据,再加上能够获得持续集成、持续测试、持续部 署等工具的支持,使得软件开发模型开始发生根本 的改变。例如,软件需求被改变。在传统的需求中, 不论是瀑布模型或是敏捷模型,都需要先与顾客讨 论需求细节。而在开源软件的环境下,则是先查看 相关的开源软件,再了解开源软件的需求,这是因 为很多开源软件已经包含80%的新软件需求。在此情形下,可以把开源软件的需求当作新软件需求的初稿。同样,设计软件的时候,不是先设计软件,而是先在开源社区里查看是否有可重用的设计。同理,开源软件程序代码以及测试方法也可以重用。
    本文第一作者在美国从事软件工程教育多年, 最近开始用开源软件进行软件工程方面的教学。起 初,对学生的要求是可以在开源软件或传统方法进 行软件开发之间进行选择,结果许多学生选择了传 统方法,而不愿意使用开源软件,原因是害怕或者 不愿意花时间去学习开源软件,而且教科书上也没 有开源软件的使用方法。所以在授课的第二年,笔 者强制要求学生必须使用开源软件。由于项目较大, 开源软件的利用使得开发时间较之前缩短了许多, 取得了不错的效果。如果项目不采用开源软件,则 几乎不可能完成任务。作为额外的要求,学生还需 要做三个星期的测试。结果大部分学生既完成了代 码,也完成了测试。他们的软件还具有不同环境下 的可扩展性(scalability)。在互联网以及大数据的环 境下,若软件没有可扩展性,则基本上不会有人使用。
    在开源的环境下,通常会要求工程师必须在 很短的时间内开发大量的软件,这在以前被认定 是错误的。旧的观点认为软件开发必须耗费大量 时间才能保证质量和数量。这是30年前软件工程 之父布鲁克斯(F. Brooks)在其著名的文章《没有 银弹》中提出的,其核心思想就是软件开发非常 复杂,任何宣称能够快速发展新软件的技术都是 荒谬的。这种观念今天仍然正确。但开源软件重 点不是在于“创造”新软件,而是“重复利用” 已被开发过的软件。因为有大量的开源软件,所 以重复利用、集成大量的软件比重新开发软件效 率要高得多。表2是传统与现代两种软件开发思 想的对比。
    我们曾经在课堂上讲过一个有启发的软件开发 实例 : Instagram软件 [9],它是由3个人在两年半 的时间内开发出来的,并创造了10亿美元的市价。 软件的92%使用了开源软件,自行开发的部分只占 8%。他们的原则是: (1)“永远不重新‘发明’设计 轮子”(do not re-invent the wheel)。即任何已经存在的东西,都不重新开发。如果碰到问题,就先在网 上搜寻看看有没有解答;如果有就用,如果找不到, 就到社交网络上询问那里的大师,大师们通常都乐 意解答。(2)软件要有可扩展性。他们列举了软件开 发过程中的许多重大改变都是为了满足可扩展性的 要求。(3)注重软件用户的体验。
    图片描述

    “开源”的开源软件工程教育

    我们需要一个新的软件开发环境来开展新的软 件工程教育。这个开发环境是一个为教育学生而设 计的软件搜寻工具,能够搜索开源软件,支持持续 集成,保证持续测试、持续部署。学生们可以在系 统中自由交谈,讨论设计和问题。只有通过严格测 试和检验的软件才允许被放进来。
    我们还需要一个新的开源软件工程的教材。像 开源软件一样,公开的、共享的资源可以充分激励 人参与,创造价值。因此,我们可以设计“开源”的开源软件工程教材,任何人都可以参与教材的制 作。孔子曰“三人行必有我师”。在这个大数据、 云计算以及开源软件的环境中,每一个人都可以当 老师。即使是软件工程教师也并非对每个软件都了 解,事实上对于某些软件,学生可能了解得更多。 所以,那些懂得多的学生可以把知识分享给他人。 这种教育的原则是“人人为我师”。使用开源软件 案例也要经过评审。由一组专家先把样本做出来, 他们随时监督、检验所提交的教材,以保证“开源” 教材的质量。因为开源软件是在不断进步、可扩展 的,所以软件工程的材料必须能够得到持续扩展且 随时更新。
    这种开源软件的教育方式还可以与国外软件公 司进行合作,一起开发。此外,中国有大量的软件 工程师、学生以及开源软件产品,如果中国师生共 同参与,“开源”的软件工程教育还能在世界产生 重大的影响。
    最近出现了许多新型的教育方式和新学说,例 如慕课(MOOC)、知识地图(concept map or knowledge map)、在做项目中学习(边做边学)、群体学 习(crowd learning)和数字出版(digital publishing)[10]、 小规模在线课程(SPOC)等。这些都可以在开源的 软件工程教育上使用。在软件工程教学方面,老师 的课程并非最重要的,学生参与软件开发才是核心, 学生需要做到以下几点。
    1. 在开源软件项目上学习(边做边学):传 统的软件工程是在小项目上做练习学习,这种方式 在现在的环境下需要补充加强。学生们应该在大学 时代就接触大型的、可扩展的及有质量的开源软件, 并学习开发高手是如何设计软件的。虽然不需要初 学的学生就能够开发开源软件,但是他们要学会如 何了解、寻找、使用、评估和测试开源软件。由此 出发再学会开发开源软件。
    2. 在社区中学习(群体学习):在开源的社区 里需要学习如何做一个有所作为的参与者,如何和 其他人一同工作。而且在这个开源的环境中,还会 有许多外国人参加,要学会通过英语进行交流。有 问题不耻下问,向社区里的大师询问。
    3. 自主学习“开源”软件材料(知识地图、 慕课、小规模在线课程和维基百科):学生可以自 主选择某些材料来学习。不过这些材料必须事先以 教学的方式组织起来,以便自学。学生们可以进行 在线讨论,听在线的讲座,在博客上交流,学习和 编写维基百科相关内容。
    4. 自主发表学习材料(数字出版):学生在 自主学习后,可以把相关的资料包装成一个学习模 块,发表在开源软件工程教育社区,以便让其他老 师、学生学习。在这个社区中,允许一个题目上让 多个团队发表他们的学习材料,使用者也可以评论 和参与。
    5. 在社区发表软件(数字出版):在开源社区 里发表软件是学生学习的一个重要的里程碑。学生 甚至可以创立一个新的开源软件项目。学生不只是 学习软件开发的方法,更重要的是学习开发有质量 的软件(边做边学)。传统的软件工程教给学生各 种技术,例如需求分析、设计模板、编码标准、测 试脚本以及文档编写。但是这些都聚焦在软件工程 技术而不是在软件本身。敏捷开发方式创始者的“敏 捷宣言”(Agile Manifesto)[11] 中讲到“软件才是有价 值的,而软件开发过程、软件需求、软件设计都是 创造价值的工具或者过程”。
    软件工程教育的最终目的是让学生能够开发有 质量的软件,而不只是让他们明白软件工程技术。 所以,对软件工程学生的评估不能只看考试成绩, 更应该注重学生是否能在社区中开发软件,能否通 过严格的社区测试,以及用户对他们所开发软件能 否给予正面的反馈。

    结论

    大量的开源软件造福了许多公司,也改变了软 件工程的发展。虽然开源软件的发展是市场的自我 选择,但它也在一定程度上促成了开放、共享的软 件工程,包括软件开发、采购和应用。不仅如此, 它还改变了软件工程教育。这些都必须通过公开的、 分享的且持续不断的更新来实现。

    展开全文
  • 在开源的世界里,研究与开发是分离的,二者由不同的实体完成。社区或志愿者进行研究活动,发布研究成果——源...2005年8月3日,以Firefox浏览器而闻名的开源软件领军组织之一Mozilla基金会,宣布成立一家名为Mozilla
  • 开源软件License汇总

    万次阅读 2017-02-14 21:52:55
    开源软件License汇总
  • conda 使用清华大学开源软件镜像

    万次阅读 2017-01-09 18:18:16
    conda 使用清华大学开源软件镜像Anaconda的安装步骤不在本文的讨论中,我们主要是学习一下如何配置conda的镜像,以及一些问题的解决过程配置镜像在conda安装好之后,默认的镜像是官方的,由于官网的镜像在境外,我们...
  • 开源软件的盈利模式

    千次阅读 2019-08-20 11:33:15
    开源软件在发展历程中,已经不仅仅是开放源代码的免费软件。开源软件与商业并不冲突,它是一种新兴的商业模式。与传统的商业软件相比,开源软件采用了开放源代码、免费分发等形式,减少了营销与销售成本,更易于广泛...
  • 最受欢迎的开源软件

    千次阅读 多人点赞 2020-10-14 14:34:32
    1、Nginx ...其特点是占有内存少,并发能力强,Nginx的并发能力在同类型的网页服务器中表现较好,很多人使用Nginx来做负载均衡器和web...是一个轻量级的开源Web服务器软件,其根本的目的是提供一个专门针对高性能网站,
  •  很多人经常把开源软件和自由软件混为一谈,也常常会有人把开源软件和免费软件这两个概念混淆在一起,其实当我第一此站在HUSA的讲台上的时候,自己对开源的了解,也只是狭隘的定位为:免费的,公开源代码的。...
  • 开源问答系统开源软件

    千次阅读 2014-12-13 23:59:21
    开源问答系统 OSQA OSQA是一款免费且开源的问答系统,采用Python的Django开发框架,基于中国优秀的问答系统CNProg,非常类似国外著名的技术问答网站http://stackoverflow.com。更多OSQA信息 ...
  • 医学图像处理开源软件

    万次阅读 2015-09-27 05:29:42
    通用: VTK  VTK (the visualization toolkit)是一款免费开源的用于三维计算机图形学、图像处理以及可视化的... ITK是一个开源、跨平台的,提供了大量的图像处理功能的软件工具。可用于多维图像的分割与配准。 FSL
  • 开源软件与开源协议

    2016-07-27 11:34:30
    要谈开源协议,首先要明确开源定义(Open Source Definition),不仅可以开源软件,也可以是硬件。在绝大多数情况下,我们所说的开源还是指开源软件 我们软件程序员接触最多的就是开源软件,另外,这几年开始...
  • 公司如何使用开源软件

    千次阅读 2018-05-07 18:16:00
    本篇文章的内容来自于Hadoop元老级人物(也是Cloudera首席架构师)Doug Cutting对于公司如何使用开源软件来提升公司商业价值的一个分享。其中分享了很多与公司和开源有关的一些内容,本文对其做了简单的小结和概括(第...
  • 开源软件如何盈利?

    万次阅读 2009-08-08 19:02:00
    开源软件在发展历程中,已经不仅仅是开放源代码的免费软件。开源软件与商业并不冲突,它是一种新兴的商业模式。与传统的商业软件相比,开源软件采用了开放源代码、免费分发等形式,减少了营销与销售成本,更易于广泛...
  • 几款黑莓开源软件

    千次阅读 2012-07-11 14:41:28
    http://www.onmoso.com/黑莓截屏软件,iCapture通话记录生成器条码扫描开源的WebWorks应用...
  • 什么叫开源软件

    千次阅读 2005-11-17 22:32:00
    1997春天,自由软件社团的一些领导者聚集到加利福尼亚州。这个社团包括EricRaymond,TimO’Rerlly,VA Research的总裁Larry Augustin等人,他们所关心的是一种寻找方式,来向以前躲避自由软件思想的人们推广这种...
  • 开源软件简介

    千次阅读 2019-01-27 22:02:42
    ECharts 一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的矢量图形库ZRender,提供直观,交互...
  • 开源软件的使用

    万次阅读 2020-03-23 12:25:59
    https://www.kernel.org/ 下载各版本的内核源码及工具 http://vault.centos.org/ 下载各版本的CentOS安装镜像及配套的软件包源码 https://elixir.bootlin.com/linux/latest/ident/ 在线阅读... 练习内核定制、编...
  • 开源软件版权

    千次阅读 2018-12-07 16:54:33
    将自己的协议声明文件 (LICENSE) 放在根目录 将其他上家的声明文件统一放在一个子目录,比如 ./3rd_party_licenses/ 依照不同上家的名字继续建立子目录,然后将其声明文件放入。 在 README / NOTICE 文件中清楚...
  • 嵌入式开源软件的十大弊端

    千次阅读 2018-03-08 00:00:00
    俗话说得好,“得来全不费功夫”,免费当然是个好事情了。既然是免费的, 开源的实时操作系统(RTOS)看起来是个不错的选择。 但是对于嵌入式设备和物联网设备的开发者来说, 有时并不愿轻易涉足, 比如家居...
  • 干货阿里巴巴 开源软件列表

    千次阅读 2016-06-01 09:14:52
    阿里的开源项目很多,这也跟@淘宝正明的开源态度密不可分。有很多重量级的项目,例如LVS、Tengine,或者很有实践价值的中间件,今天小编为大家汇总了阿里开源的项目,快来看看吧! 服务框架 Dubbo ...
  • GIS开源软件

    千次阅读 2017-01-16 10:27:10
     谈到GIS软件,首先让我们想到的是GIS界的龙头大哥ESRI公司旗下的ArcGIS产品,从最初接触的...同时也使用过国内的SuperMap软件,MapGIS软件等,个人感觉还是强大的ArcGis产品有一段距离的,希望国内的GIS产品
  • 开源软件收集

    万次阅读 2006-08-05 11:47:00
    http://www.7-zip.org/7-Zip 4.16 Beta : 文件压缩工具,可与Windows资源管理器集成 http://a-note.sourceforge.net/A Note 4.2.1 : 可在Windows桌面放置便笺,并可提供闹钟提醒功能 http://www.xs4all.nl/~...

空空如也

1 2 3 4 5 ... 20
收藏数 84,099
精华内容 33,639
关键字:

开源软件