值得关注的开源软件推荐

作者/分享人:龙辉
查看本场Chat

我们每天的学习、工作、生活大多数都基于开源软件完成,或许你也是这样的,只是没注意到。

  • 一、关于这篇文章
  • 二、开源软件很多很多
  • 三、第一类:框架和编程驱动的应用层
  • 四、第二类:数据驱动的大数据、人工智能层
  • 五、第三类:云计算、基础设施层
  • 六、第四类:操作系统、编译器、虚拟机、编程语言
  • 七、45个开源软件特性、要点
  • 八、资源汇总

一、关于这篇文章

文章标题《值得关注的开源软件推荐》这个话题不是很好理,先按着自己的思路试着写些东西。这篇文章有点流水账,大家多包涵。

我们知道值得关注的开源软件实在是太多太多,选择这个题目也让自己有点为难。不过,试着去理一下对自己来说还是有蛮多收获的,不管正确与否,或许也对大家有所启发和帮助。

本Chat所选的45个开源软件,它们可能不是最流行的,但具有一定的代表性,它们是众多开源软件中的很小一部分。

从这么多开源软件中进行筛选有不少困难,需要我们有个好的思路和方法去有步骤、系统化了解和学习,本Chat就是和大家一起交流和探讨这个话题。希望这篇文章起到抛砖引玉的作用,这里我们只交流、讨论一些思路和方法,并不深入到某个具体项目,这个会留在以后的课程与大家一同学习交流。

开源软件在操作系统、云计算、大数据、编译器、数据库、移动、汽车工业等领域取得了巨大成功,已成主流,这篇文章就先围绕着这些内容展开。

二、开源软件很多很多

开源软件的重要性就不用多说了,它是IT工业的基础。它和我们每个人、每天的学习、工作、生活都息息相关,我们使用的互联网、物联网、车联网都广泛的依赖于它们。

先来看看,如何去寻找开源软件,我这里介绍一个可能是最有效的方式:通过GitHub上AwesomeGitHub Topics的方式去获得,它们已对一些流行热门的开源软件做了梳理和筛选,方便你的选择。这里的开源软件数量足够你在整个职业生涯中去了解、学习和实践的,而且还在持续增加中。

这么多开源软件,我们怎么选?

这需要一个有层次、系统化的了解、学习的方法和步骤。

我们先来看看有层次、系统化的了解、学习、搭建软件堆栈和平台的重要性和必要性。

在我们的工作中,或许都有过这样的经历:前一个团队或核心成员使用的是这个框架或那个平台,新来的团队或核心成员因为自身情况将会使用不同的框架和系统重构或替代前面的产品和架构体系。我自己就经历过用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

注意这里的long-term support (LTS),很多开源软件都采用这样的版本支持服务,如:Ubuntu 它在你的版本选择中非常重要。

Django LTS

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值得更多关注。

Qt Automotive Suite

Qt通过整合JavaScript语言,加速用户界面的构建。

QML是种声明式语言(declarative language),它是一个用户界面规范和编程语言,混合JSON语法和JavaScript表达式。

Qt应用目前主流的开发思路是:用QML(Qt Quick)构建交互界面,用C++实现业务逻辑,这也是推荐Qt的一个重要因素。

Meteor是基于JavaScript的框架,用于Web客户端、服务器端以及移动应用。Meteor应用会对数据的变化作出即时响应,因此你将获得即时响应体验,同时,一致的构建过程、前后端统一的包系统以及单个命令的应用部署过程,将在从设计到发布的每一环节上为你节省时间。

这是Meteor简单的堆栈和框架:

Meteor Stack Meteor Framework

Meteor带来的优势有:

  • 全栈通用、统一的单一语言 JavaScript;
  • 内置响应式支持;
  • 代码高度重用,提供一大堆基础Packages
  • 提供强大构建工具,帮助快速构建JavaScript Apps;
  • 拥有近13000个软件包的生态系统。

Meteor的更多了解可从七大原则入手:

  • Data on the Wire. Meteor 不发送 HTML,服务器端只负责发送数据,由客户端渲染;
  • One Language. 前后端都是 JavaScript 语言;
  • Database Everywhere. 前后端都可以直接创建存取修改数据库里的数据,且数据安全;
  • Latency Compensation. Meteor 在前端提前获取数据并模拟数据模型,使其看起来像是从服务器端立即返回了数据;
  • Full Stack Reactivity. 实时响应是 Meteor 的缺省配置。在所有层次,从数据库到模板,都会在需要时自动更新;
  • Embrace the Ecosystem. Meteor 完全开源并集成了很多现有的开源工具和框架。如 Angular,React。Meteor 有自己的 AtmosphereJS 包下载管理平台,也可使用 NPM;
  • Simplicity Equals Productivity. Meteor 简单易上手,API 简洁优雅。

除Meteor和Node.js外,Angular和React可能是大家关注最多的两个JavaScript框架和平台,它们背后是Google和Facebook的推动。鉴于React因为版权专利问题,我们先放一下。Angular2官方推荐语言是TypeScript。有关ECMAScript、JavaScript、TypeScript、CoffeeScript、ClojureScript标准、语言和框架的话题有很多很多,大家可去扩展这部分的知识体系。

同时,这里也贴一张Angular2学习路线图供大家参考。

此图来自:知乎

我想,这幅图对Angular2有用,对Meteor等其它框架的学习也有一定的参考价值。

说到选择哪个框架,涉及的就是各种比较,本篇所列举的45个开源软件和项目也是各种比较的一些总结,所以生活在开源软件的世界里,比较就是家常便饭。若是作为开源软件的开发者和维护者,要做的工作也就更多了,除编程基本功扎实,维护和Bug修复外,不停的学习其它优秀的同类项目也是一门必修课,从别人身上学习优点,但又不能完全照搬,需考虑自身项目的个性和特性,又要兼顾通用功能和特性的整合,在保证项目代码和版本稳定的同时,又要不断调整和平衡新版本的需求和特新,又要很好兼容老版本,其过程想想都觉得难。所以一个成功的开源项目,除了独特的个性外,还要平衡和兼容好共性,在这里给开源软件开发者致个敬。

这节话题结束前,放一个Angular2 相比 Vue 有什么优势?项目对比的分析,是Vue作者写得,挺有趣,大家可看看。

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系统,也是一个完整的企业应用套件和堆栈。

Adempiere

Adempiere衍生自Compiere,因为Compiere越来越封闭和私有,就有了现在的Adempiere,很多开源软件也都是这样产生的。同时,Compiere也失去了可能成为No.1开源ERP/CRM的机会。

说到这,也说说Solaris和OpenSolaris,在Sun被Oracle后,因为Oracle的封闭,现在的它们也基本走向死亡,Oracle同时也玩死了NetBeans和OpenOffice,基于OpenOffice的LibreOffice代表着未来。

类似的故事还有很多很多,当前是个开放开源的时代,封闭自嗨的基本都会走向衰败。就连很封闭的苹果和腾讯也在不断调整自己的开源、开放战略,并陆续推出一些开源软件。

好了,现在说说Moqui。

Moqui的作者是Apache OFBiz的设计者和开发者,在企业数据模型和流程上有非常深的造诣。Moqui基于OFBiz十多年来的项目实施经验以及作者的设计、开发和方法论,包括纯粹的关系 数据层以及面向服务的逻辑层。Moqui框架的核心代码只有OFBiz核心框架代码的15%左右,提供了更多有意义的功能和更多的高级工具,使用Groovy和Java语言。

Mogui是一个企业ERP/CRM的生态系统,一个类似地球:地核、地幔、地壳的的构造结构。

Moqui

  • 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应用中通用部分以及构件之间的关系:

Mouqi add-ons

Mouqi先了解到这,让大家对它有一个总体认识,后续我们再深入下去。

3. 编辑器:Emacs、Vim、Atom

编辑器是所有计算机系统上最普遍的应用之一。

除了开发者日常使用的一些大块头IDE外:Eclipse、Visual Studio、Xcode等,这类小巧、轻盈的编辑器也备受程序员喜爱,它们是Emacs、Vim、Atom。

这篇文章由Emacs和Markdown Model编写,在macOS(基于XNU/Dawnin)上完成,呵呵。

  • Emacs:神一般的编辑器,一个不折不扣的“操作系统”,一个终极工具!
  • Vim:改进的vi,命令行编辑器的标准。
  • Atom:用户友好的编辑器,照顾IDE用户的鼠标使用习惯。

Emacs和Vim都鼓励减少鼠标使用,强迫使用键盘,熟练使用键盘编程是进阶和高效编程的必由之路,想想看在整个工作中,没碰过鼠标,全部用键盘完成是不是感觉有点酷。

Vim有自己的语言Vimscript,Emacs有Emacs lisp。

Emacs的设计目标就是,你装了个Unix或者Linux系统,不需要装任何其它软件,只要装一个Emacs就够了,它能帮助你完成所有的任务。也就是说,除了编程,你还可以用它写论文、做幻灯片、浏览网页、收发邮件、聊天、听歌、看照片、玩游戏……目前,好像除了直接在Emacs里看电影还不行,其它的都实现了。(ps:这一段是直接引用,因为太赞同)

通过使用Emacs,接触Emacs社区,让自己感受和学习更多的黑客文化,通过Emacs接触Emacs Lisp,这也是乐趣的开始!

Vim比较适合前端开发,其它语言,如:Java,还是使用IDE比较好。

Vim主要特点有:

  • Vim有多种模式:普通模式,插入模式,可视模式,命令行模式;
  • 使用Vim的主要精力在定位操作上;
  • 常见定位命令如:上下左右的操作,k 上行、j 下行、h 左、l 右;
  • 定位后就是操作,Vim操作命令是原子性的,可随意组合操作命令,如:daw(delete a word)、caw(change a word)。

除了Vim外,Vi家族还有几个其它的克隆项目:

  • nvi:新vi,vi官方的伯克利版本
  • elvis
  • vile:类Emacs的Vi

Atom 是一款基于 Electron framework、node.js 构建的跨平台编辑器。它是 Emacs 和 Vim 之外推荐的开源编辑器,非常适合前端、Web开发,也支持广泛的编程语言。

基于Atom和Electron framework构建的还有微软的Visual Studio Code和Facebook的Nuclide

Visual Studio Code是我很喜欢的,它非常强大和易用,拥有庞大的插件库和资源。

四、第二类:数据驱动的大数据、人工智能层

大数据热了好多年,这几年是人工智能,它们的核心是数据和算法,这是一个数据驱动的时代,我们每天都在产生大量的数据,对数据来说,有个庞大的知识体系:数据科学。

数据科学

4. 数据科学:Jupyter、Pandas、Anaconda

Juypter是一款面向数据科学和人工智能的前端交互工具,基于IPython构建,是IPython的未来发展方向。

Anaconda Python 是自由使用的面向大规模数据处理、预测分析和科学计算的企业级Python发行版。Anaconda 以 Red Hat 和 Debian Linux 发行版的方式来分发 Python企业版。

Anaconda

Anaconda是个大的数据科学软件堆栈和平台,当然,你也可以选择自己去搭建。

使用Python进入数据科学领域的同学就可从Anaconda入手,主要是方便。它提供GUI和命令行两种方式,使用包管理工具Conda,如安装pandas、Jupyter:

conda install pandas

>>> import pandas as pd
>>> pd.show_versions()

conda install jupyter

Pandas是非常重要的数据科学Python软件包,基于NumPy构建,简化了以NumPy为中心的应用开发。NumPy的基础是数组和矢量计算,NumPy的ndarray是一种多维数组对象,利用数组进行数据处理。

Pandas的优势也体现在它的数据结构上,两个主要的数据结构:

  • Series
  • DataFrame

写个简单的例子感受下

Jupyter

总之,进入数据科学领域的同学,这三个开源软件都绕不过。

5. 大数据:HDP、CDH、HPCC

HDP和CDH都是Apache Hadoop分发版,HPCC是一个C++开发的大数据处理和分析平台。

  • HDP:100%开源,零锁定;
  • Hortonworks解决方案包含HDF和HDP;
  • Hortonworks DataFlow(HDF)收集、组织、整理和传送来自设备、传感器、点击流、日志等的实时数据;
  • Hortonworks Data Platform(HDP)用于创建安全的企业数据湖,为企业提供实现快速、实时商业洞察力所需的分析信息。

HDP是一个开源大数据的生态系统

Apache Metron实时大数据安全

CDH除没有HDP那样开放开源外,其它都很类似。Cloudera有很强的商业化解决方案和服务能力,取得了很好的商业价值,应该是目前最赚钱的Hadoop商业化公司,同时也开源了众多优秀的开源软件,如:Impala

HDPCDH文档都组织、整理的不错,可作为了解、学习大数据、Apache Hadoop的一个重要资源。

ODPi: the open ecosystem of big data

在这里提一下ODPi项目,这是Linux基金会下的一个项目,成员包括HDP的开发商Hortonworks。

鉴于Linux基金会的成功运作和治理能力,ODPi可关注,以生态系统的思考方式去了解整个大数据市场,国内已有大数据公司来此占位。

ODPi ODPi大数据生态系统

在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)

HPCC

HPCC在安全、身份和风险管理有众多成功案例。

6. 机器学习(深度学习):Caffe、MXNet、TensorFlow

选择TensorFlow、Caffe(caffe2)、MXNet,一方面是软件很好,另外一个重要因素是背后有Google、Facebook、Amazon等巨头在推动,并在自己的产品服务线广泛部署,其可靠性、可伸缩性得到最大规模和严格的验证。

TensorFlow在GitChat人工智能板块已有了最多的课程和介绍,它的重要性就不多说。

TensorFlow官方文档中文版可作为你学习TensorFlow的重要参考,英文好的直接跳过。

编程语言入门有Hello World,机器学习入门有MNIST。MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片。它也包含每一张图片对应的标签,告诉我们这个是数字几。你可从MNIST开始你的机器学习,熟悉神经网络和MNIST数据集,去构建一个深度卷积神经网络。

ps:一个小道消息:MS因为内斗严重很难发力,所以用CNTK,Torch,TensorFlow,MXNet,Caffe的都有,自家的CNTK很难形成规模。

相对于TensorFlow这种重量型的后端,MXNet的轻量化路线使得可以我们在花费Google brain 1/10的人力的情况下做到类似TensorFlow技术深度的系统。(MXNet开发者李沐)

那到底选择哪个深度学习框架呢?或许贾杨清同学的这段话会给你个答案,他是Caffe(Caffe2)的作者,同时也是TensorFlow的开发者和贡献者。

另外我还要强调的是我最近每个演讲都会提到的“unframework”,或者说“unix philosophy”的观点:framework不重要,重要的是技术,这也是我一直主张把核心软件比如说Gloo,NNPACK,FAISS这些单独放出来,不放在框架里面的原因 - 每个框架都可以拿这些软件来优化,这才是做community的道理。老实说,Caffe我也参加了,TensorFlow我也参加了,C2我也参加了,最重要的是大家开心,能学到技术,能用得方便。

说到机器学习、深度学习,我想表达自己的一个观点。当前,我们都在关心机器学习,其实,我们也应该更多关心一下如何让我们自己更高效的学习,成为一个学习机器。当然,这里的学习机器是有更多思考和创造力的那种。未来是机器学习和学习机器相互学习、共同促进的世界,谁更聪明,谁就有更多支配和主导权,大家相辅相成,共同进化。

7. 汽车机器人:Automotive Grade Linux(AGL)、ROS、Apollo Auto

汽车、机器人是大数据和人工智能重要的应用领域,机器人装上人工智能的大脑将更多从事人的工作,未来很多工作将被人工智能机器人取代,而给机器人喂食的就是大数据。

首先,基于AGL的丰田佳美(Toyota Camry)将于2018亮相北美市场。

AGL是Linux基金会项目,基于Tizen项目构建,最初由韩国三星主导,现在为Linux基金会项目。

美日韩三国高科技公司主要在推动这个项目,其System Architecture Team(SAT)包含5-10个核心成员:Denso, Fujitsu TEN, Microchip, Panasonic, Intel, Renesas/IoT.bzh, Toyota

这张图很重要,它把AGL、Tizen和GENIVI三者以AGL UCB的方式融合在了一起。

AGL UCB

在汽车工业使用LTS: Long Term Stable Kernel,这点很重要,这两份文档可参考。

不知道到百度阿波罗计划的Linux核心是如何评估选择的?

百度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方程式

ROS 提供了 C++ 和 Python 两种主要的编程接口,也可集成 Arduino,ROS 2.0 采用了DDS(数据分发服务)。

ROS & Arduino

随着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

IaaS,PaaS

OpenStack是开源云平台的事实标准。

OpenStack使用Python语言编写,使用了Django、Tornado和Twisted等框架,使用AMQP消息协议和Redis分布式K/V存储。

OpenStack可以说是Linux之外最大规模的开源项目,有大量公司和开发者参与构建这个开源云平台生态系统,也有很多OpenStack发行版可供用户选择,国内用户可关注这几家OpenStack供应商:

Google加入OpenStack基金会推动着Docker/Kubernetes与混合云加速融合;EasyStack联合创始人&CTO刘国辉谈到:

”Google加入OpenStack体现了对于数据中心控制平面的争夺已经结束,以容器为代表的应用形态与以虚拟化为代表的系统形态将会完美融合于OpenStack之上,并与软件定义网络和软件定义存储一起统治下一代数据中心。“

OpenStack+K8S

OpenStack、Ansible、SaltStack等开源软件也极大奠定了Python在数据中心的地位。

OpenShift是RedHat推出的基于Docker和Kubernetes构建的PaaS开源容器云平台。

OpenShift能给用户带来什么?可参考红帽OpenShift的业务价值

OpenShift业务价值亮点有:

  • 5年平均投资回报率:531%
  • 每年每100名开发人员实现的年度平均效益:129 万美元
  • 应用程序开发生命周期加快:66%
  • 开发每个应用程序所需的IT员工时间减少:35%
  • 每个组织增加的收入:742万美元
  • 每个应用程序的IT基础架构和开发平台成本降低:38%

OpenShift

总结起来:加快产品、服务研发和交付时间,减少研发成本,增加企业收入,降低基础架构投资,获得更高的投资回报率。

为什么在这里把这个提出来说说,也是出于自己的一些经历。

在我们运作开源软件商业化服务时,开源软件需要有个好的商业包装。开源软件对我们开发人员很熟悉,但很多最终用户和客户却不了解,他们可能根本就不知道什么开源软件,你给他们大谈开源软件,他们会一脸茫然。若你把开源软件以类似这样的方式讲给他们听,效果可能会更好,也更容易成交业务,所以基于开源软件做商业化服务的同学很有必要建立起这样的思维模式,将好用、强大的开源软件做更好的商业包装。这方面的成功公司有很多,你可更多跟进Red Hat、Ubuntu、MongoDB、Hortonworks等开源软件公司,它们把开源和商业融合都做得相当出色。

此白皮书也可作为开源软件商业价值分析的参考,大家基于开源软件做商业化公司和运营时可参照这样的思路思考下去。

Docker容器和Kubernetes容器编排已成为企业交付软件和服务的行业标准,OpenShift可直接作为企业DevOps & CI/CD的基础设施, 成为部署微服务的多租户平台。

Red Hat也在积极推动区块链技术在OpenShift的应用部署,与BlockApps的合作,为其提供区块链平台的PaaS基础设施。

BlockApps on OpenShift

BlockApps

OpenShift生态系统已初具规模,这可增强大家选型的信心。不过,因为OpenShift的平台规模也比较大,定制化和扩展的难度也会加大。这也是我们常碰到的问题,选个大块头的开源平台堆栈,还是选择自由装配和维护各种小软件的融合方式。这是两种不同的思路,团队Leader和技术团队要仔细评估和做出平衡。

SaltStack是 Python开发的开源配置管理和自动化工具,SaltStack提供了一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度快,服务器之间秒级通讯。

关于SaltStack,大家可从以下几点去加深了解:

  • 理解Salt的动机,以及它们将影响运维人员的使用方式;
  • 更好地使用云服务,包括EC2、Azure及OpenStack等,支持更大规模云计算平台部署;
  • 学习新的RAET协议,并了解它如何改变自动化工作方式;
  • 使用ZeroMQ消息队列,管理端Master,客户端Minion,如何进行数据交换和消息传递的。

Ansible基于SSH协议传输数据,Saltstack使用消息队列zeroMQ传输数据,MQ通讯和SSH通讯,速度相差大约几十倍。

我们推崇使用消息队列MQ来进行数据传输和通讯。

与Ansible的比较,SaltStack 与 Ansible 选择?供大家选型参考。

9. 数据库(数据仓库):Riak、OrientDB、Apache Kylin

Erlang驱动的数据库,在分布式、消息、并发、可伸缩、容错方面有天然优势,Riak数据库天生就拥有这些能力。

Riak数据库以Riak Core、Riak KV、Riak TS、Riak S2的方式提供了构建分布式系统、键值存储、时序存储、对象存储的核心软件基础设施。

Riak公司在数据库对比选型上做了充分的工作,把几乎主流的开源数据库都对比了一下

  • Riak Compared to Cassandra
  • Riak Compared to Couchbase
  • Riak Compared to CouchDB
  • Riak Compared to HBase
  • Riak Compared to MongoDB
  • Riak Compared to Neo4j
  • Riak Compared to DynamoDB

其实,每个选型的开源软件都可能涉及这样的广泛比较,所以工作量是比较大的,大家可参考。

多范式、多流派(面向对象、模版、函数式、过程式)的混合式语言设计方法帮助C++成为解决复杂、多样性问题的编程语言首选。

多模型数据库OrientDB(对象模型、键值模型、文档模型、图模型)让其集多种数据库类型于一身,使其能应对多种应用场景,减少多种数据库部署运维带来的开销和成本,OrientDB这样的多模型设计是否也能像C++这样被大多数开发者所认可与接受?

strong text对象模型

Relational Model Object Model OrientDB Object Model
Table Class Class or Cluster
Row Object Document or Vertex
Column Object property Document field or Vertex/Edge property
Relationship Pointer Link

键/值模型

Relational Model Key/Value Model OrientDB Key/Value Model
Table Bucket Class or Cluster
Row Key/Value pair Document
Column not available Document field or Vertex/Edge property
Relationship not available Link

文档模型

Relational Model Document Model OrientDB Document Model
Table Collection Class or Cluster
Row Document Document
Column Key/value pair Document field
Relationship not available Link

图模型

Relational Model Graph Model OrientDB Graph Mode
Table Vertex and Edge Class Class that extends "V" (for Vertex) and "E" (for Edges)
Row Vertex Vertex
Column Vertex and Edge property Vertex and Edge property
Relationship Edge Edge

再说说Kylin是什么?

  • 可扩展、超快OLAP引擎:Kylin是为减少在Hadoop上百亿规模数据查询延迟而设计;
  • Hadoop ANSI SQL 接口:Kylin为Hadoop提供标准SQL,支持大部分查询功能;
  • 交互式查询能力:通过Kylin,用户可以与Hadoop数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能;
  • 多维立方体(MOLAP Cube):用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体;
  • 与BI工具无缝整合: Kylin提供与BI工具,如Tableau,的整合能力,即将提供对其他工具的整合。

Apache Kylin已成功部署于百度、美团、网易、京东、唯品会、中国移动、中国电信、国泰君安、华泰证券、联想、OPPO、魅族、去哪儿等公司,支撑着用户行为分析、流量日志分析、电商分析,广告效果分析,实时分析等基于数据仓库及多维分析(OLAP)技术的数据服务。是传统数据仓库、商业智能技术在互联网企业大规模应用的真实案例。

Apache Kylin有健康发展的生态系统

Kylin

在这篇文章中,我们多次提及生态系统。这个大家多重视,逐步建立起层次化、系统化、平台化的思考方式。

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。

Kafka

由阿里巴巴捐赠给Apache基金会的RocketMQ也在健康的发展着,和Kafka很类似,大家下来可做些对比评估和选型。

此外,ZeroMQ大家也可多关注,上面介绍的SaltStack就使用ZeroMQ作为传输机制,且大量的开源软件中也包含了ZeroMQ的使用。

OpenMessaging项目由阿里巴巴发起,与雅虎、滴滴出行、Streamlio公司共同参与创立的分布式消息中间件、流处理领域的应用开发标准,目前已正式入驻Linux基金会。

消息队列是重要的基础设施,因为它解耦、连接各种数据、应用和服务,充分体现互联网连接一切的本质。

11. 服务器:Nginx、Jetty、Cowboy

Nginx是轻量级、高性能 Web Server的首选,几乎部署在所有主流的互联网公司。

除了Nginx官方版本外,大家也可关注Nginx两个分发版本:

Apache Tomcat和Eclipse Jetty是Java Web Server的默认选择。

  • Jetty更轻量、更容易定制;Jetty架构基于Handler,扩展更容易,而Tomcat是基于容器设计,不易扩展;
  • Google GAE选择Jetty,定制足够小的Java Web Server支撑GAE业务;
  • Apache Tomcat和Eclipse Jetty背后是两大开源基金会的合作与竞争。

Cowboy是比较另类的,它使用Erlang开始,是一个小型、快速和模块化的HTTP服务器,常用Cowboy构建嵌入式Web Server。

个人很倾向使用Erlang开发通用的Web Server,因为Erang分布式、消息、并发、可伸缩、容错方面的天然优势,有兴趣的同学可尝试基于Cowboy构建。

六、第四类:操作系统、编译器、虚拟机、编程语言

好了,现在我们来到最底下的一层:系统层,它包含操作系统、编译器等核心软件,是每台计算设备不可或缺的组成部分。

12. 操作系统:GNU/Linux、XNU/Darwin、FreeBSD

首先简单回顾下UNIX/BSD操作系统的历史

UNIX-like

我们只关心图中上面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。

macOS架构

Darwin和macOS

macOS核心架构

GNU/Linux的分发版很多,除了两大主流Debian/Ubuntu和RedHat/CentOS外,大家可更多关注下:NixOS Linux

它包含几个很有特色的项目:

  • Nix:包管理器,也可用于macOS平台。
  • NixOps:云部署工具
  • Hydra:基于Nix的持续构建系统
  • Disnix:分布式服务部署工具集

GNU/Linux驱动的Android现在已成为移动操作系统的主导,基于它的生态系统会逐渐放大。此外,以OpenWrt、ROS为代表的嵌入式、机器人操作系统也在GNU/Linux的生态系统的驱动下逐渐壮大。

OpenWrt是适合于嵌入式设备的一个Linux发行版,国内主流的路由器:如极路由、小米路由器、魅族路由器、魔豆路由器等都基于OpenWrt构建。相比Android系统,OpenWrt被认为是更加适合智能设备和机器人的软件平台,被誉为下一个时代的Android,值得更多关注。

在操作系统环节,我想聊一下虚拟化和容器技术。

虚拟机技术在操作系统、程序设计语言和计算机体系结构中占据了重要位置,它是系统与进程的通用平台。

在“进程级“ 虚拟机技术可用于实现动态二进制翻译、平台无关的网络计算等能力;而在“系统级",可以在同一个硬件平台或一个服务器集群上同时提供多个操作系统环境。

可以说,Solaris Zone是操作系统虚拟化做得最出色的解决方案,只可惜。

最近,阿里巴巴也宣布开源它的容器技术:Pouch

13. 编译器:GCC、LLVM、Babel

GCC(GNU Compiler Collection,GNU编译器集合)是最重要的开源软件,因为其它几乎所有开源软件都在某种层次上依赖于它,核心编程语言是C语言。

LLVM(Low Level Virtual Machine)底层虚拟机,是一个开源(BSD)编译器的基础设施,使用C++编写。

LLVM

GCC和LLVM是编译器领域的两大巨头。

GCC和LLVM的体系很庞大,其内容、细节和知识点太多太多,留在后续的课程我们学习交流,后面有推荐的编译器书籍大家可参考。

Babel 是一个通用的多用途 JavaScript 编译器。更确切地讲是源码到源码的编译器,通常也叫做“转换编译器(transpiler)”,简称转译。

Babel 能把用最新标准编写的 JavaScript 代码向下编译成当前可用的老版本,Babel 能够让你提前使用 JavaScript新标准。

Babel 插件体系让其拥有庞大的生态系统。

Babel 三个主要处理步骤是:解析(parse),转换(transform),生成(generate):

  • 解析代码并输出抽象语法树(AST)含词法分析和语法分析;
  • 转换接收AST并对其进行遍历,对节点进行添加、更新及移除等操作, 这是最复杂的过程,同时也是插件将要介入工作的部分;
  • 代码生成把AST转换成字符串形式的代码。

Babel是下一代JavaScript编译器,说到Babel,也会提及TypeScript。TypeScript是JavaScript超集,是JavaScript的强类型版本,通过TypeScript Compiler API,开发者可以自己实现编译器。

可简单理解为:TypeScript = Type + ES6

Babel Handbook可作为你学习Babel的入门参考。

14. 虚拟机(运行时):JVM、.NET Core、BEAM(Erlang)

在前面操作系统章节我们提到过虚拟机,这一节我们也将了解一些有关编程语言虚拟机的技术。

虚拟机技术极大的丰富和繁荣了编程语言的生态系统,我们知道JVM平台有很多编程语言,可能你不知道有超过200多种编程语言运行在JVM平台上,它们共同繁荣了JVM生态系统。

JVM

JVM的实现也有很多,大家可关注以下几个:

  • HotSpot Oracle官方实现
  • IBM最近开源了OpenJ9Java虚拟机项目
  • Kaffe
  • Jikes RVM Java开发的虚拟机,可作为研究项目

常见语言也有很多JVM实现版本:

  • Erlang: Erjang A JVM-based Erlang VM (多关注)
  • JavaScript: Rhino
  • Python: Jython
  • Ruby: JRuby
  • PHP: Caucho Quercus

此外,.NET平台也托管了很多编程语言:C#, F# ...

JVM和.NET两大平台外,值得大家更多关注的是Erlang及其虚拟机生态系统。

这三类平台,个人倾向选择将其用于不同的领域,如:

  • JVM平台更多用于企业应用,如:电商ERP、大数据平台等;
  • .NET平台更多用于泛娱乐、游戏等,当前最火的王者荣耀就基于.NET的Unity平台构建,且微软几十年个人电脑操作系统的使用和广泛普及;
  • Erlang平台主攻消息、通信、电信基础设施、软件基础架构。

15. 编程语言:Erlang、Clojure、F#

基于这三大虚拟机的三门主流语言:Erlang、Clojure、F#,它们也是函数式编程语言的代表。

JSR-335(Lambda Expressions for the Java TM Programming Language)中定义的Lambda对Java语言语法产生深远影响,函数式编程将成为主流。

在上面,Erlang被多次提到在Riak数据库、RabbitMQ消息中间件、Cowboy web server中的应用,Erlang的天然优势就是:分布式、消息、并发、可伸缩、容错。你可以在笔记本上轻松创建300万个进程。 300万Erlang进程

Clojure 是一种运行在 Java平台上的 Lisp 方言,Lisp 是一门可编程的编程语言 (Lisp is a programmable programming language) Clojure将这门函数式编程语言带到了JVM生态系统。

Java、Scala、Clojure是JVM平台上三种主流的编程语言,它们的定位是怎么样:

Clojure is about Data, Scala is about Types, Java is about Objects.

先了解几个Clojue的成功应用:

  • Apache Storm 是 Twitter 开源的大数据实时处理引擎,采用 Clojure、Java 语言开发,大概一半 Clojure、一半 Java;在进程之间,Storm采用ZeroMQ进行通信;
  • 花旗信用实时风险估值系统Java/Clojure后端(1500节点分布计算)花旗投资信用部实时风险计算系统,逻辑使用Clojure;
  • 沃尔玛: “Our Clojure system just handled its first Walmart black Friday and came out without a scratch.” - Walmart Labs

此外,ClojureScript: Clojure to JavaScript compiler 大家多关注。

F# = Objects + Functional

Mixed OO/Functional Programming Has Won

F#(F sharp)是微软开发的基于.NET语言运行时的程序设计语言,采用 Apache v2 许可协议。这是一门函数式编程语言(FP,Functional programming),函数式编程语言最重要的基础是Lambda Calculus。

F#和OCaml是ML函数式编程语言的两种主要方言,有时F#和OCaml的程序是可以交互编译的。

F#支持高阶函数、柯里化、惰性求值、Continuations、模式匹配、闭包、列表处理和元编程。在早期,F#作为一门适合于金融和计算密集型的语言而闻名。现在,F#既用于算法密集型应用程序,也用于主流业务应用程序。在算法密集型应用程序中,正确性至关重要,而主流业务应用程序则在很大程度上受益于F#支持领域建模并让非法状态不可达。

F#在数据科学领域具有很大优势,基于Atom编辑器的数据编程

F# Data Science

好了,我们走马观花般的过了一遍这45个开源软件,主要让大家大致了解和认识一下它们。

最后,我们把这45个开源软件以核心特新和要点的方式再整理一下。

七、45个开源软件特性、要点

思考、总结、提炼单个开源软件的核心特性和要点,看看它能为团队带来什么帮助,能力有哪些?

1. Django

  • Django和Flask是使用最广泛的Python Web框架;
  • Django提供Web一站式解决方案:会话、缓存、ORM、验证、表单处理、后台管理等,但系统耦合度高,替换内置功能比较麻烦,学习曲线较陡;
  • Django和Flask都基于WSGI,这是同步阻塞接口,不能使用异非阻塞的编程模式,你可考虑使用Klein微框架,用法很像Flask,可以异步方式编写Web应用。

2. Meteor

  • 一个面向Web和App的应用框架和构建平台
  • Meteor 7大原则;
  • 超过12000个包的生态系统。

3. Qt

  • Qt核心:元对象系统、属性系统、对象模型、对象树、信号槽(Signal/Slot),Qt的Signal/Slot很好解决了对象间通讯的问题,被其它语言框架借鉴;
  • Qt使用QML定义用户界面,使用C++编写业务逻辑;
  • Qt在在汽车行业有广泛应用,是GENIVI汽车联盟的推荐技术。

4. odoo

  • odoo不仅仅是开源ERP/CRM;
  • 还是一套伴随企业成长可扩展的商业运营支撑系统;
  • 一个巨大的应用生态系统,有近12500个Apps可供选用。

5. iDempiere

  • iDempiere = OSGi + Adempiere;
  • OSGi是Java模块化一个领先的解决方案;
  • Adempiere是一个世界级的集成的ERP/CRM开源软件。

6. Moqui

  • Apache OFBiz作者的又一力作;
  • 快速的企业应用原型系统开发;
  • 一个框架、一个生态系统。

7. Emacs

  • Emacs是迄今为止功能最为强大的文本编辑器,Emacs是一种信仰,它是神一般的编辑器;
  • Emacs是模块化的,遵循do one thing, and do it well原则,需要什么就安装什么,你可以像搭积木的方式搭建自己的环境和系统;
  • Everything Emacs,你可以在Emacs完成你几乎所有的工作:编程、写作、浏览网页、收发邮件、日程、娱乐游戏、它是个人操作系统。

8. Vim

  • Vim模式:普通模式,插入模式,可视模式,命令行模式;
  • Vim的使用主要放在定位操作上;
  • 常见定位命令如:上下左右的操作,k 上行、j 下行、h 左、l 右;定位后就是操作,vim操作命令是原子性的,可随意组合操作命令,如:daw(delete a word)、caw(change a word)。

9. Atom

  • Atom由GitHub开发维护;
  • Atom使用的Electron framework已有一个庞大的生态系统;
  • 微软Visual Studio Code和Facebook Nuclide都基于Atom/Electron框架构建。

10. Jupyter

  • Jupyter is the new front end for data science and AI.
  • Jupyter的操作过程可存档、传播、分享;
  • Jupyter的核心是IPython,Jupyter是未来。

11. Pandas

  • 在数据科学领域,Pandas是一个非常重要的Python软件包;
  • Pandas基于NumPy构建,让以NumPy为中心的应用变得更简单;
  • Pandas使用的两个主要数据结构:Series和DataFrame。

12. Anaconda

  • Anaconda是一个企业级Python发行版,面向大规模数据处理、预测分析和科学计算;
  • Anaconda 以 Red Hat 和 Debian Linux 发行版的方式来分发 Python;
  • Anaconda 包含近500个最流行的科学、数学、工程和数据分析的Python软件包。

13. HDP

  • Hortonworks公司拥有最多的Apache大数据相关项目开发者和贡献者,开发、发行100%开源的大数据平台;
  • Hortonworks Data Platform (HDP)和Hortonworks DataFlow (HDF)是两大产品;
  • 通过整合、交付统一的 Apache Spark 和 Hadoop,将 Spark 驱动的敏捷分析工作流程与 Hadoop 的海量数据集和经济性相结合,企业可以使用行业最佳安全性、管制和运营能力来部署 Apache Spark。

14. CDH

  • CDH可能是商业化运作最好的大数据平台和解决方案;
  • 开发维护了多个流行大数据开源软件,是HDP最主要的竞争对手;
  • Impala一个C++开发的Hadoop实查询引擎,值得关注。

15. HPCC

16. Caffe(Caffe2)

  • Caffe2 是贾扬清对Caffe的重新思考和重构,目前在Facebook,是Caffe2的核心开发者;
  • Caffe2对移动端的良好支持,15行代码Support WatchOS build 确实够简单;
  • Caffe2可在手机与树莓派上训练和部署模型。

17. MXNet

  • 比TensorFlow更加轻量、高效小巧,更适合自定义需求高的公司和研究者;
  • MXNet允许用户自由把图计算和过程计算混合起来使用;
  • MXNet正在Apache基金会孵化,相信很快孵化成顶级项目。

18. TensorFlow

  • TensorFlow体格庞大,代码量大,抽象层多,深度自定义会很困难;
  • TensorFlow也是一个商业行为,背后是Google,它带来的可行度和高质量;
  • 一个事实:Google内部版的TensorFlow和Google Cloud深度绑定优化与开源的TensorFlow在速度和性能上会又巨大差异,美国的大厂都或多或少的在拒绝它。

19. Automotive Grade Linux(AGL)

  • Automotive Grade Linux(AGL) 是 Linux基金会发布的开源Linux车载系统,AGL 基于 Tizen 构建;
  • AGL + Tizen IVI + GENIVI = AGL UCB(Unified Code Base));
  • Qt Automotive Suite based on GENIVI or Automotive Grade Linux。

20. ROS

  • ROS是一个广泛使用的机器人操作系统和软件框架,ROS的基本原理是无需改动就能在不同的机器人上复用代码;
  • 随着ROS 2.0的开发,ROS能够兼容除Linux之外的更多操作,如Windows、Android;能够支持从工业计算机到Adruino开发板等各种硬件;
  • 百度无人车阿波罗平台基于ROS构建。

21. Apollo Auto

  • 百度 Apollo(阿波罗)是一个开放的、完整的的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统,采用Apache v2许可协议;
  • 阿波罗平台基于ROS构建;
  • 阿波罗核心核心基于Linux Kernel 4.4.32构建。

22. OpenStack

23. OpenShift

  • OpenShift is Enterprise-Ready Kubernetes;
  • Docker容器和Kubernetes容器编排已成为企业交付软件和服务的行业标准,OpenShift可直接作为企业DevOps & CI/CD的基础设施, 成为部署微服务的多租户平台;
  • OpenShift是BlockApps区块链平台的PaaS基础设施。

24. SaltStack

  • SaltStack提供了一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度快,服务器之间秒级通讯;
  • SaltStack使用ZeroMQ,带来极高的通讯效率;
  • SaltStack或许是构建、管理、运营云计算基础设施的最佳方式,它支持广泛的云平台。

25. Riak

  • Riak 是使用 Erlang 开发的开源(Apache V2) 分布式 NoSQL 键/值(K/V) 存储数据库系统;
  • 有 Riak Core、Riak KV 键值存储、Riak TS 时序存储、Riak S2 对象存储的完整产品线;
  • Riak拥有Erlang语言带来的分布式、消息、并发、可伸缩、容错方面的天然优势。

26. OrientDB

  • OrientDB 是一个Java开发的开源(Apache v2)NoSQL文档和图形数据库,也通过 OrientDB SQL 支持 SQL;
  • OrientDB是一个拥有对象模型 键/值模型 文档模型 图模型的多模型数据库;
  • 多范式编程语言(面向对象、模板、函数式编程、过程式 )C++带来极高的生产力,多模型数据库OrientDB能否也带来类似效果。

27. Apache Kylin

  • Apache Kylin:商业数据仓库、商业OLAP引擎的替代品;
  • Kylin是为减少在Hadoop上百亿规模数据查询延迟而设计,Kylin为Hadoop提供标准SQL支持大部分查询功能,通过Kylin,用户可以与Hadoop数据进行亚秒级交互;
  • 一个开源数据仓库、商业智能生态系统。

28. RabbitMQ

  • RabbitMQ是Advanced Message Queuing Protocol (AMQP)标准的Erlang语言实现;
  • RabbitMQ是部署最广泛的开源消息代理;
  • 可以把ZeroMQ看作RabbitMQ这类消息队列系统的补充,而不是替代品。

29. Apache Kafka

  • Apache Kafka:下一代分布式消息系统;
  • Apache Kafka 是一个高吞吐量的分布式消息系统,使用 Scala 开发,最初被用于 LinkedIn;
  • Apache Kafka 解耦企业应用的复杂性,是信息和流数据的交换枢纽。

30. Ejabberd

31. Nginx

  • epoll(freebsd的kqueue)网络IO模型是Nginx高性能的根本理由;
  • 与Apache相比较,最核心的区别在于Apache是同步多进程模型,一个连接对应一个进程;Nginx是异步的,多个连接可以对应一个进程;
  • 对于后端动态服务来说,比如Java和PHP。这类服务器(如JBoss和PHP-FPM)的IO处理能力往往不高。Nginx有个好处是它会把Request在读取完整之前buffer住,这样交给后端的就是一个完整的HTTP请求,从而提高后端的效率,而不是断断续续的传递(互联网上连接速度一般比较慢)。同样,Nginx也可以把response给buffer住,同样也是减轻后端的压力。(此条信息来自:知乎叔度

32. Jetty

  • Eclipse Jetty,一个更轻量、更易扩展和定制的Java Web Server;Jetty架构基于Handler,扩展更容易,而Tomcat是基于容器设计,不易扩展;
  • Google GAE选择Jetty,定制足够小的Java Web Server支撑GAE业务;
  • Apache Tomcat和Eclipse Jetty背后是两大开源基金会的合作与竞争。

33. Cowboy

  • Cowboy适合构建嵌入式应用,它没有配置文件,也不会生成日志,一切都由Erlang控制。
  • Cowboy支持的协议有:HTTP/2、HTTP/1.1、WebSocket、HTTP/1.0、SPDY/3.1、SPDY/3;
  • Erlang很适合开发Web server,可基于Cowboy做扩展和定制;

34. GNU/Linux

  • Linux基金会不仅仅有Linux项目,还有众多其它的开源项目,如AGL;
  • 可更多关注类似Robot Operating System(ROS)这样的机器人操作系统和嵌入式系统;
  • 相比Android系统,OpenWrt被认为是更加适合智能设备和机器人的软件平台。

35. XNU/Darwin

  • XNU是XNU is Not Unix的首字母缩写,GNU是GNU's Not Unix的缩写;
  • XNU/Darwin与FreeBSD都有着BSD的血统,苹果会持续投资和推动FreeBSD项目?
  • 更深入的学习、研究iOS和macOS,就从Hack XNU开始吧。

36. FreeBSD

  • FreeBSD TCP/IP协议栈实现是个经典;
  • Facebook的WhatsApp是一个FreeBSD + Erlang 的公司,大量的路由器、交换机、防火墙、金融系统在使用FreeBSD,SONY PS4游戏机操作系统基于FreeBSD构建;
  • 苹果与FreeBSD的关系应该是最密切的。

37. GCC

  • GCC:最重要的开源软件(从1987的1.0到2017年7.2历经30年,对整个自由、开源软件贡献卓著),后来者LLVM(14岁)很出色,前途无量;
  • GCC的基本语言是C语言,整个编译系统由C编程程序开始,然后逐渐加入其它语言的支持;
  • C++是C语言的直接扩展,它是GCC的第一个附加语言。C++能够完成的所有事情C语言都可以做到,所以编译器的后端保持不变,只需在前端加入一个新的语法语义分析器就可以了。一旦产生中间语言,编译程序的其它部分就和C语言完全一样了,其它语言的处理方式也类似。

38. LLVM

39. Babel

  • Babel 下一代 JavaScript 编译器(转译器);
  • 简单讲,Babel 就是把一个版本的 JavaScript 转变为其他版本的 JavaScript;
  • The Super Tiny Compiler可能是最小的编译器,先感受和普及下JavaScript编译器的知识。

40. JVM

  • JVM是最大规模的编程语言虚拟机生态系统,有超过200多种编程语言运行在JVM上;
  • Android Dalvik VM不是一个Java虚拟机,它没有遵循JVM规范,不能直接运行Java Class文件,它执行的Dex(Dalvik Executable)可通过Class文件转换而来;
  • 由John Rose领导的the Da Vinci Machine Project正致力于让JVM成为动态语言的最佳归宿。

41. .NET Core

  • .NET Core 是一个通用目的、模块化、跨平台的 .NET 开源实现;
  • 核心项目:.NET Core Libraries (CoreFX)、.NET Core Runtime (CoreCLR)、.NET Compiler Platform (Roslyn);
  • .NET Core 会包含 .NET Framework 的类库,但与 .NET Framework 不同的是 .NET Core 采用包 (Packages) 的管理方式,应用程序只需要获取需要的组件即可,与 .NET Framework 大包式安装的作法截然不同,同时各包也有独立的版本线 (Version line),不再硬性要求应用程序跟随主线版本。

42. Erlang VM(BEAM)

  • Elixir是一门运行在Erlang VM上的编程语言;
  • 可在Erlang VM创建自己的语言
  • 可关注下Erjang:A JVM-based Erlang VM。

43. Erlang

  • Erlang的世界观是一切都是进程(一个Erlang进程包括PCB进程控制块和堆栈只有几K),进程通过消息传递相互通讯;
  • Erlang是参与者模型(Actor model)最佳实践;
  • 可在一台笔记本上轻松跑出几百万个Erlang进程。

44. Clojure

  • Clojure 是一种运行在 Java 平台上的 Lisp 方言;
  • Clojure is about Data, Scala is about Types, Java is about Objects;
  • ClojureScript: Clojure to JavaScript compiler。

45. F

  • F#和OCaml是ML函数式编程语言的两种主要方言;
  • F# = Objects + Functional ,F#混合面向对象和函数式编程,可“对应”JVM平台的Scala语言;
  • F#支持高阶函数、柯里化、惰性求值、Continuations、模式匹配、闭包、列表处理和元编程,F#作为一门适合于金融和计算密集型的语言而闻名。

八、资源汇总

以开源软件介绍的顺序汇集文档、链接、书籍资源

文档和链接

参考书籍

  • 《轻量级Django》Lightweight Django中文版
  • 《Python Web开发实践》
  • 《Meteor实战》
  • 《JavaScript高级程序设计(第3版)》
  • 《数据模型资源手册 (卷3): 数据模型通用模式》
  • 《C++ Primer(中文版)(第5版)》
  • 《学习GNU Emacs(第二版)》
  • 《学习Vi编辑器(第六版)》
  • 《利用Python进行数据分析》
  • 《Hadoop: The Definitive Guide (4th Edition)》
  • 《数据挖掘概念与技术(原书第3版)》
  • 《机器学习》周志华
  • 《深度学习》
  • 《ROS机器人程序设计》
  • 《视觉SLAM十四讲:从理论到实践》
  • 《概率机器人: Probabilistic Robotics中文版》
  • 《OpenStack设计与实现》
  • 《OpenStack最佳实践:测试与CI/CD》
  • 《Docker:容器与容器云(第2版)》
  • 《SRE Google运维解密》
  • 《精通SaltStack》
  • 《七周七数据库》
  • 《PostgreSQL修炼之道:从小工到专家》
  • 《RabbitMQ实战:高效部署分布式消息队列》
  • 《Kafka: The Definitive Guide》 PDF电子书
  • 《编程语言原理(第10版)》
  • 《七周七语言》
  • 《七周七并发模型》
  • 《七周七数据库》
  • 《OS X与iOS内核编程》
  • 《编译原理(第2版)》著名的龙书中文版
  • 《自制编译器》
  • 《虚拟机--系统与进程的通用平台》《Virtual Machines -- Versatile Platforms for Systems and Processes》
  • 《深入理解Java虚拟机(第2版)》
  • 《虚拟机的设计与实现 C/C++》
  • 《Erlang程序设计(第2版)》
  • 《Scala程序设计(第2版)》
  • 《响应式架构:消息模式Actor实现与Scala、Akka应用集成》
  • 《Clojure编程:Java世界的Lisp实践》
  • 《Real World OCaml(中文版)》

还有一些图书,就不罗列了。

book

内容有些多,还是篇流水账,感谢大家耐心阅读。


本文首发于GitChat,未经授权不得转载,转载需与GitChat联系。

剁椒芋头
不错
谢工
感谢作者的精彩分享!
林玲
看了好久,内容很详细。已经收藏了,可以随时拿出来参考!
楼鸣
已看晕。。。希望在chat中请教下,小企业的架构受限于技术人员已掌握了什么,怎么选一个容易兼容扩展的框架。非常感谢。
张精神
很棒的内容,觉得自己就是井底之蛙。。。。谢谢作者!
武器大师一个挑俩
作者很实在,很详细,收藏了慢慢研究~
All is well~
我交了钱,进不了群,你们应该要看下吧?
天怡: 六点多的时候,公众号又发了进群通知,您按照那个操作也进不了群?
Alpha
开源软件有很多,您对每个开源软件都会了解吗?了解到什么程度,而且开源会跨语言,跨平台,请问您如何学习,解决,应对?
龙辉: 这个问题在Chat交流中已回答,请阅读Chat实录,谢谢。
陈钧桐
刚毕业的新手一枚,想从向开源提 PR 贡献开始,通过改进,最终衍生出自己的版本(协议授权的情况下),从实用的角度看,请问哪些项目比较容易入手改进,又从什么方向去改进好呢?最理想的状况是比如修 bug ,一些源代码里面有得参考,或者加新功能,能从类似的项目得到启发,应该怎样去寻找这样的方向呢?
龙辉: 这个问题在Chat交流多个问题中有涉及和回答,请阅读Chat实录,更多交流,我们在读者圈互动,谢谢。
开源软件遵循开放包容的理念,怎样在开源共享中保护自己的成果?老师怎样看待开源潮流?
龙辉: 开源已成主流,若是企业,在开源软件中可采用双许可证,也是我们常看到的开源软件以社区版和企业版发行的方式。另外许可证的选择也很重要,许可证基本考虑:Apache、MIT、BSD、GPL/LGPL等,这几个许可协议应用非常广泛,大家更容易接受和采纳。
微信扫描登录