我们每天的学习、工作、生活大多数都基于开源软件完成,或许你也是这样的,只是没注意到。
- 一、关于这篇文章
- 二、开源软件很多很多
- 三、第一类:框架和编程驱动的应用层
- 四、第二类:数据驱动的大数据、人工智能层
- 五、第三类:云计算、基础设施层
- 六、第四类:操作系统、编译器、虚拟机、编程语言
- 七、45个开源软件特性、要点
- 八、资源汇总
一、关于这篇文章
文章标题《值得关注的开源软件推荐》这个话题不是很好理,先按着自己的思路试着写些东西。这篇文章有点流水账,大家多包涵。
我们知道值得关注的开源软件实在是太多太多,选择这个题目也让自己有点为难。不过,试着去理一下对自己来说还是有蛮多收获的,不管正确与否,或许也对大家有所启发和帮助。
本Chat所选的45个开源软件,它们可能不是最流行的,但具有一定的代表性,它们是众多开源软件中的很小一部分。
从这么多开源软件中进行筛选有不少困难,需要我们有个好的思路和方法去有步骤、系统化了解和学习,本Chat就是和大家一起交流和探讨这个话题。希望这篇文章起到抛砖引玉的作用,这里我们只交流、讨论一些思路和方法,并不深入到某个具体项目,这个会留在以后的课程与大家一同学习交流。
开源软件在操作系统、云计算、大数据、编译器、数据库、移动、汽车工业等领域取得了巨大成功,已成主流,这篇文章就先围绕着这些内容展开。
二、开源软件很多很多
开源软件的重要性就不用多说了,它是IT工业的基础。它和我们每个人、每天的学习、工作、生活都息息相关,我们使用的互联 、物联 、车联 都广泛的依赖于它们。
先来看看,如何去寻找开源软件,我这里介绍一个可能是最有效的方式:通过GitHub上Awesome和GitHub Topics的方式去获得,它们已对一些流行热门的开源软件做了梳理和筛选,方便你的选择。这里的开源软件数量足够你在整个职业生涯中去了解、学习和实践的,而且还在持续增加中。
这么多开源软件,我们怎么选/p>
这需要一个有层次、系统化的了解、学习的方法和步骤。
我们先来看看有层次、系统化的了解、学习、搭建软件堆栈和平台的重要性和必要性。
在我们的工作中,或许都有过这样的经历:前一个团队或核心成员使用的是这个框架或那个平台,新来的团队或核心成员因为自身情况将会使用不同的框架和系统重构或替代前面的产品和架构体系。我自己就经历过用Java平台全面替代.NET平台的经历,其代价也是巨大的,这样的替换相信大家也都有碰到过。若经常性的因为人员变动或其它因素而导致产品和体系架构总是变来变去,带来的研发成本就会不断上升,且因为没有在稳定框架和基础架构上的持续实践和积累,团队的技术沉淀没有,框架和平台价值的体现也就少的可怜,也不能吸引到优秀的人才聚在一起。
所以层次化、系统化的了解、学习、构建公司的技术体系和平台架构就显得尤为重要,这是公司技术委员会或团队Leader的必修课。
举个简单例子:大家可从Anaconda开始Python数据分析之旅,它减少了安装、维护各种Python软件包和版本的工作量和带来的各种不方便,毕竟它整合好了几百个Python软件包。
好了,找到或选型后,接下来就是学习和实践、不断积累的过程。
- 根据公司发展方向和战略目标,拟定多年计划,不要仅仅只解决眼前问题,要考虑框架、架构、平台的长期有效性和持续发展,不要深度锁定商业服务供应商,尽可能使用开源软件,并可以方便的替换其中部件和重构;
- 从StackOverflow、知乎等专业 站通过搜索的方式迅速了解一下你所关注的开源软件的基本特性和大家讨论的热点;
- 以Ecosystem的方式去思考和组织你所关注的开源软件的知识体系,这里给个参考:Node.js ecosystem
- 在学习和实践的过程中,大家可借助印象笔记或Wiki等方式对不断学习和实践的开源软件做持续的整理。我个人就是通过Wiki的方式不停收集、整理各种开源软件和相关资源的,这个过程持续了11年,有几千个条目,近4000万的浏览量。
本篇文章参考框架涉及的45个开源软件都有Wiki条目进行跟进和维护,不少条目都持续维护了很多年,接下来我们就对它们一一做个大致了解:
- 数据类:数据科学、大数据、机器学习、汽车机器人
- 服务类:云计算、数据库、消息队列、服务器
- 系统类:操作系统、编译器、虚拟机、编程语言
类似这样的工作,你自己或团队都可以经常去理一下。
此外,要紧跟所关注开源软件的Conferencce技术大会,这是了解开源软件最新进展和成功应用的一个非常好的方法。我在这里也整理了一些开源软件历年大会幻灯片资料,很有参考价值,欢迎大家收藏。
三、第一类:框架和编程驱动的应用层
通过框架加快应用的开发和上线。
1. 框架:Django、Meteor、Qt
框架类开源软件太多太多,每种语言、不同应用场景都有很多不同的框架可供选择,这里选择了Python、JavaScript、C++三种主流编程语言框架加以简要介绍。
这三个框架都是比较大而全的,覆盖某个领域的大部分应用场景和技术堆栈,它们带来的好处是快速的开发效率和生产力,但同时与会失去灵活性和自由度。喜欢用很多小软件、小工具解决不同问题的用户通常不会选择这些大块头或者说全堆栈的软件平台。
Django是个全堆栈的Python框架,有严格的开发计划和路线图。
Django的内容和讨论的话题都很多,入门这块可从Django book 2.0 的中文开始,它把Django重点、要点和内容组织的都很好。
这里我列举一些思路和路线供大家参考:
- 先动手构建一个最简单的Django项目;
- 使用Django内置的Admin,再试试一些更好用的Admin解决方案;
- 看看成功Django项目长什么样的:Mezzanine;
- 浏览Django开发的开源 站,有没有自己喜欢的,有的话先部署一个;
- 使用Django REST Framework构建REST API;
- 基于REST API构建一个单页面Web应用(Single Page Application, SPA),这一架构可迅速创建响应式用户交互界面;
- 如何在Django使用其它MVC框架;
- 将WebSockets、Tornado和Django结合起来,提供实时Web特性;
- Django实时服务器除了Tornado外,你也可以使用Erlang等语言编写,这个内容大家自己去扩展下。
Qt是一个跨平台的C++/JavaScript应用框架,是一个桌面、嵌入、移动应用的开发平台,支持Windows、Linux、macOS、Android、iOS、Windows 10操作系统。
2011年,诺基亚出售Qt业务给Digia,该公司将接手Qt商业授权和服务业务,诺基亚也将移交大约3500家商业客户。
Maya、Google Earth、Skype、Telegram、魔兽争霸官方对战平台、 易炉石盒子等都基于Qt构建。Qt在汽车、自动化、医疗、数字电视机顶盒、物联 、移动应用领域都有广泛应用。其中,Qt Automotive Suite值得更多关注。
此图来自:知乎
我想,这幅图对Angular2有用,对Meteor等其它框架的学习也有一定的参考价值。
说到选择哪个框架,涉及的就是各种比较,本篇所列举的45个开源软件和项目也是各种比较的一些总结,所以生活在开源软件的世界里,比较就是家常便饭。若是作为开源软件的开发者和维护者,要做的工作也就更多了,除编程基本功扎实,维护和Bug修复外,不停的学习其它优秀的同类项目也是一门必修课,从别人身上学习优点,但又不能完全照搬,需考虑自身项目的个性和特性,又要兼顾通用功能和特性的整合,在保证项目代码和版本稳定的同时,又要不断调整和平衡新版本的需求和特新,又要很好兼容老版本,其过程想想都觉得难。所以一个成功的开源项目,除了独特的个性外,还要平衡和兼容好共性,在这里给开源软件开发者致个敬。
2. 应用:odoo、iDempiere、Moqui
在这里我们说说三个企业应用,三个开源ERP/CRM开源软件。
说到企业应用,首选Java语言。除了Java语言,这几年因为数据科学和机器学习的热潮,极大的推动了Python语言在企业的普及。此外,XML作为企业应用的数据表示、存储、转换的标准已被广泛采用,而且各行各业的XML规范已经成熟和稳定。
所以简单讲,企业应用 = Java + Python + XML/JSON + RESTful API (当然, .NET也是一个不错的选择)
odoo是近几年发展非常迅猛的开源ERP/CRM套件,使用Python、XML、PostgreSQL构建。之前,写了篇odoo:开源 ERP/CRM 入门与实践的文章,大家可看看,普及一下odoo的基础知识。
iDempiere = OSGi + Adempiere
OSGi是Java模块化的非官方标准,很强大,也复杂。它是很多开源软件的基础架构,如:Eclispe;也在工业界有很多应用,BMW汽车的应用控制系统就采用OSGI作为其底层架构, 这套系统主要用来控制汽车上的音箱、灯光等设备,总共由1000多个Bundle构成,但BMW汽车的应用控制系统启动时间却只需要3.5秒。
OSGi在汽车工业领域的应用可作为大家了解OSGi的重点。
Adempiere是一个很主流的开源ERP/CRM系统,也是一个完整的企业应用套件和堆栈。
- Moqui Framework: 核心 Core,就像 Linux 的 Kernel 内核一样
- Moqui Mantle,地幔业务构件: 一组通用的、可作为你各种场景业务系统的基础业务构件集合,包含:
- 通用的数据模型,Universal Data Model (UDM)
- 通用业务服务库,Universal Service Library (USL)
- 通用业务过程/流程库,Universal Business Process Library (UBPL)
- Moqui Crust,地壳(插件):主题皮肤、 综合的工具集、不同行业的应用支持、大公司规模支持、业务领域支持等
初步体验了Moqui,感觉使用它构建应用很快,大部分工作就是编写XML、脚本和构件,描述数据、业务和流程。介绍它是因为以往大多数企业应用都是硬编码实现、数据、业务、编码紧耦合,而Moqui采用XML定义模型、服务和流程,提高了整个系统的可描述、可维护性。Moqui支持如下的几种类型的构件:
- 实体 entities : 贯穿于整个业务系统中的关系数据模型(直接使用模型,无需复杂的对象关系映射)
- 界面 screens 和 表单 forms : 用于基于 web 的应用界面或者其他用户接口(通用方式是基本构件描述存放在 XML 文件中,或者用户指定扩展存放于数据库中)
- 界面转换 screen transitions : 用于配置页面到页面的流转以及设置页面跳转时,业务处理过程的必要输入
- 服务 services : 远程调用的方式运行内部逻辑交互或者曝露外部的服务
- ECA(事件-条件-行为 event-condition-action)规则 : 用于类似实体、服务操作以及 email 信息接收等系统级事件触发
Mouqi应用中通用部分以及构件之间的关系:
4. 数据科学:Jupyter、Pandas、Anaconda
Juypter是一款面向数据科学和人工智能的前端交互工具,基于IPython构建,是IPython的未来发展方向。
Anaconda Python 是自由使用的面向大规模数据处理、预测分析和科学计算的企业级Python发行版。Anaconda 以 Red Hat 和 Debian Linux 发行版的方式来分发 Python企业版。
Pandas是非常重要的数据科学Python软件包,基于NumPy构建,简化了以NumPy为中心的应用开发。NumPy的基础是数组和矢量计算,NumPy的ndarray是一种多维数组对象,利用数组进行数据处理。
Pandas的优势也体现在它的数据结构上,两个主要的数据结构:
- Series
- DataFrame
写个简单的例子感受下
Apache Metron实时大数据安全
在Apache Hadoop & Spark统治的大数据市场,HPCC显得弥足珍贵,值得更多关注。
HPCC 包括以下核心组件:
- Thor (the Data Refinery Cluster)
- Roxie (Rapid Online XML Inquiry Engine, the Query Cluster)
- ECL (Enterprise Control Language)
- ECL IDE
- ESP (Enterprise Services Platform)
在汽车工业使用LTS: Long Term Stable Kernel,这点很重要,这两份文档可参考。
- LTSI Project updateLong Term Support Initiative
- Linux Kernel selection guide for production use
不知道到百度阿波罗计划的Linux核心是如何评估选择的/p>
百度Apollo托管在GitHub的开源软件:
- Apollo: An open autonomous driving platform
- Apollo Platform: based on Robot Operating System(ROS)
- Apollo Kernel: based on Linux Kernel 4.4.32
因为Apache v2, ROS, Linux Kernel,Apollo Auto也在这介绍一下。
百度Apollo开放平台被称为“汽车界安卓”,我想这个应该在成功后再被称。
Apollo1.5开放五大能力:
- 障碍物感知
- 决策规划
- 云端仿真
- 高精地图服务
- 端到端的深度学习(End-to-End)
金龙客车通过Apollo 1.0的成为首例商用车落地实例。
百度Apollo开放平台通过阿波罗基金专注于汽车行业及自动驾驶领域的人民币股权投资,简单讲就是砸钱和收购,快速形成一定规模。
目前,Apollo基金第一期20亿已到位并在快速运行,目前已完成数个项目的投资。也将在未来3年完成100亿&100+个项目的投资。总之就是有钱,自动驾驶创业的同学们这也是很快变现的方式。
我们都知道自动驾驶这件事是个非常复杂、非常庞大的工程,可有人一个人就干成了,天才黑客George Hotz自己开发了一套汽车自动驾驶系统,而且成立了公司Comma.ai专注这件事,点开 页看实测效果还是很不错的。
百度Apollo和comma.i项目对比 (截止2017.11.8上午10点)
- comma.ai openpilot: 6516 Star
- comma.research: 3488 Star
- 百度Apollo: 6362 Star
我也知道这个对比没什么意思,只是出于对天才的仰视。
Robot Operating System(ROS)是一个应用广泛的机器人系统和开源软件框架,ROS的基本原理是无需改动就能够在不同的机器上复用代码。ROS提供了一个标准的操作系统环境,包括硬件抽象、底层设备控制、通用功能实现、进程间消息转发和软件包管理等。
随着ROS 2.0的开发,ROS能够兼容除Linux之外更多的操作系统,如Windows、Android;能够支持从工业计算机到Adruino开发板等各类型的硬件;能够采集RGB-D摄像头、普通摄像头和各种类型的传感器数据;能够驱动类人形机器人、四轴飞行器等各类型的机器人。新版本的ROS在采用SOA架构的基础上,集成了MVC框架,更加有利于机器人人机交互界面的开发和机器人控制。
由于ROS极大的开放性和包容性,它能够兼容其他机器人开发工具、仿真工具和操作系统,使之融为一体。这使得ROS不断发展壮大,并成为应用和影响力最广泛的机器人软件平台。
学习ROS,掌握一把通往未来的钥匙。(ps: 这部分内容取自《ROS机器人程序设计》(原书第2版))
关于市场份额:作为一家拥有近37年历史的嵌入式操作系统开发商,QNX在车载信息娱乐系统或车联 系统占据超过50%的市场份额,QNX是仪表盘背后的隐形王者,大家可关注下。
五、第三类:云计算、基础设施层
如何支撑上层的数据分析和应用,需要有个强大的软件基础设施,我们以云计算、数据库、消息队列和Web Server来搭建这个基础设施。
云计算对所有的计算资源、存储资源、 络资源进行系统管理,用数据库进行各种各种类型数据的存储和处理。以消息队列作为数据传输和应用交互的机制,Web Server将各种服务以RESTful的方式部署。
8. 云计算:OpenStack、OpenShift、SaltStack
云计算数据中心是一项具有战略意义的基础设施,其重要性和普及知识就不多讲了。
这里主要简单介绍IaaS、PaaS两种主要的云计算服务模型,其代表有:OpenStack、OpenShift
OpenStack、Ansible、SaltStack等开源软件也极大奠定了Python在数据中心的地位。
OpenShift是RedHat推出的基于Docker和Kubernetes构建的PaaS开源容器云平台。
OpenShift能给用户带来什么参考红帽OpenShift的业务价值。
OpenShift业务价值亮点有:
- 5年平均投资回 率:531%
- 每年每100名开发人员实现的年度平均效益:129 万美元
- 应用程序开发生命周期加快:66%
- 开发每个应用程序所需的IT员工时间减少:35%
- 每个组织增加的收入:742万美元
- 每个应用程序的IT基础架构和开发平台成本降低:38%
在这篇文章中,我们多次提及生态系统。这个大家多重视,逐步建立起层次化、系统化、平台化的思考方式。
10. 消息队列(即时通讯):RabbitMQ、Kafka、ejabberd
在介绍RabbitMQ之前,说说 Advanced Message Queuing Protocol (AMQP,高级消息队列协议)
AMQP的愿景是:从任何发布者到任何感兴趣的消费者之间的信息,通过一条软件总线实时动态的连接起来。
RabbitMQ就是要实现AMQP愿景的开源软件,AMQP的就如同电话交换机的架构,选择Erlang也在意料和情理之中。Erlang是一门消息并发编程语言,它为通信而生。
除AMQP标准外,Extensible Messaging and Presence Protocol(XMPP)是开放即时通信标准,其代表产品是Erlang开发的Ejabberd,可以说Erlang支撑起了AMQP和XMPP两大标准的开源软件实现。Erlang是消息队列、即时通信的首选语言。
XMPP是一个有着18年历史的开放消息标准,被广泛应用于物联 、即时通信、 交 络和实时Web领域,支持众多的开发语言和操作系统。
Apache Kafka 是一个高吞吐量的分布式消息系统,使用 Scala 开发,它已是企业应用和大数据生态系统中的核心组件,它是消息、数据、实时流的中心Hub。
我们只关心图中上面BSD和GNU家族的东东,下面的都是商业的UNIX操作系统,我们就不考虑了。
BSD家族最具代表性的就是FreeBSD,它是GNU/Linux之外最可靠的选择。它强大、稳定、坚如磐石,也是苹果操作系统的重要组成部分。
苹果最近开源了XNU项目
XNU是XNU is Not Unix的首字母缩写,类似GNU是GNU’s Not Unix的缩写,我们暂且也以GNU/Linux的方式来称呼XNU/Darwin。
OpenDarwin以前有发布过,但因为一些原因关停,这里有 站存档。
XNU是个混合内核,包含两部分:BSD和Mach。macOS在剥离了Cocoa、Carbon等东西后,剩下的叫Darwin,它包含POSIX兼容、UNIX线程、进程实现。
XNU内核是macOS和iOS的核心,由三个主要部分组成的一个分层体系结构:
- 内核的内环是Mach层,源自卡纳基-梅隆大学开发的Mach内核;
- BSD层;
- I/O Kit。
GCC和LLVM是编译器领域的两大巨头。
GCC和LLVM的体系很庞大,其内容、细节和知识点太多太多,留在后续的课程我们学习交流,后面有推荐的编译器书籍大家可参考。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!