sydMobile 为开源世界贡献一份力量

几个程序员必须知道的小概念

2017-11-03
sydMobile

文章最早发布于我的微信公众号 Android_De_Home 中,欢迎大家扫描下面二维码关注微信公众获取更多干货资源。 本文为sydMobile原创文章,可以随意转载,但请务必注明出处!

Apache软件基金会(Apache Software Foundation,简称ASF)

是专门为支持开源软件项目而创办的一个非盈利性组织。在它所支持的Apache项目与子项目中,所发行的软件产品都遵循Apache许可证。

发展历史

软件基金会1999年正式创建,创建者:自称“Apache组织”的群体,这个组织在1999年以前就存在了很长时间了,这个组织的开发爱好者们聚集在一起,在美国的伊利诺伊大学超级计算机应用程序国家中心(National Center for Supercomuting Application简称NCSA)开发的NCSA HTTPd服务器的基础上开发维护了一个叫做Apache的HTTP服务器。

最初NCSA HTTPd服务器是由Rob McCool开发出来的,但是它的最初的开发者们逐渐对此失去了兴趣,造成了没有人对这个服务器软件提供更多的技术支持。而这个服务器的功能又是非常强大的,代码可以自由下载修改发布,于是这个服务器软件的爱好者与用户开始自发起来自己修改,不断的改善其功能,为了更好的相互沟通Brian Behlendorf自己创建了邮件列表,用它来交流技术维护软件。逐渐这个群体就成为了“Apache组织”,把这个经过不断修改并并改善的服务器软件命名为Apache服务器(Apache Server),这个命名是根据北美当地的一支印第安部落而来的,这支部落以高超的军事素养和超人的忍耐力著称,19世纪后半期对侵占他们领土的入侵者进行了反抗,为了对这支印第安部落表示敬仰之意,取该部落名称为服务器的名字。这个命名还流传着一段很有意思的流传,因为这个服务器是在NCSA HTTPd服务器基础上,通过大家不断的修正、打补丁(Patchy)的产物,被戏称为“A Patchy Server”(一个补丁服务器)。因为”A Patchy”与“Apache”是谐音,故命名为“Apache Server”

与我们Android紧密相关的就是 Apache Harmony项目,这个项目就是Apache软件基金会主导的开放源代码项目,是自由Java实现计划的一部分,基于Java SE5与6,目标就是以开放源代码的方式,实现出Java SDK。J2SE 5.0的完整性99%,J2SE6.0完成97%,我们知道我们开发的Android是使用Java作为开发语言的,Google就是在开发Android的时候雇佣了Sun的一些程序员,利用Harmony中的开源java库实现了Java程序的转换,从而避开了授权费用。使得开发者可使用Java语言在不是Java平台(在Android的平台上)上开发程序。不过由于纠纷授权问题,Android Nought后依赖OpenJDK库,将专利的JDK替换为开源方案的OpenJDK,以彻底解决Java的专利问题。

开源项目

开源项目(open source software OSS 也称为开放源代码软件)是一种源代码可以任意获取的计算机软件,版权在软件协议的规定下保留一部分权利允许用户学习、修改、增进提高这款软件的质量。
有些软件的作者只将源代码公开,却不匹配“开放源代码”的自定义以及条件,因为作者可能设置公开源代码的条件限制,诸如限制可阅读源代码的对象、限制派生产品等,这种称为公开源代码的免费软件,(Freeware,知名的模拟器软件MAME)因此公开源代码的软件并不一定可以称之为开发源代码软件。

开发源代码的定义是由Bruce Perens定义的:
自由再散步:允许获得源代码的人可以自由的将此源代码散布
源代码:程序的可执行文件在散布的时候,必需随附完整的源代码,或者让人方便的事后获取源代码
派生著作:让人可依此源代码的修改后,在依照同一许可协议的情形下再散步,原创作者程序源代码的完整性:修改后的版本,需要用不同的版本号码与原始的代码分别,保障原始代码的完整性不得对任何或者团体有差别待遇,但如果因为法律规定的情形则可以例外不限制商业使用。
散布许可协议:如果软件再次散步,必需以同一条款散步

开放源代码有时候不仅仅指开放源代码软件,它同时也是一种软件开放模式的名称。使用开放源代码开放模式的软件代表就有 Linux操作系统 严格地说:开放源代码软件与自由软件是俩不同的概念,只要匹配开源软件定义的软件就能称为开放源代码软件

自由软件是在电脑为个人或为公共利益,而非私人公司或政府等企图限制或者监事我们工作时,我们在家、学校、公司使用 时,我们具有其控制权。

关于开发语言的知识

编程语言实际上都不能说是什么做出来的,编程语言实际上 是一种规范,一种协议。
编程者遵循一定的规则(语法)来写代码(符合语法规则的文本),然后该语言的编译器把你的代码转化成CUP可以执行的单条指令序列。 比如英文,26个字母的组合,有了词法语法之后组合起来就有了一定的意思,就形成了语言。如果你按照自己的想法制定一套规定,还是用26个字母,然后取名叫 英文++,这也就是一门新语言了。你自己 定义的那一套规定就叫做语法,别人必须按照你的规定才能理解你的语言。在让别人理解你的语言之前你需要解释给他听,翻译成它所懂的语言,如果别人懂的语言是机器语言,你在解释给他的时候所扮演的角色。
一个语言的编译器理论上可以用任何语言来编写实现。
参考:维基百科

AndroidInterviewQuestions
关注微信公众号,更多知识发布


目录
关注微信公众号,获取更多干货
微信公众号:Android开发者家园