值得关注的开源软件
看了值得关注的开源软件推荐,感觉很不错,作者接触开源软件十几年,协作开发了10多个开源项目,对开源软件的认识和实践确实让人大开眼界。
应用类:框架、企业应用、编辑器
数据类:数据科学、大数据、机器学习、汽车机器人
服务类:云计算、数据库、消息队列、服务器
系统类:操作系统、编译器、虚拟机、编程语言
作者按上面四类介绍了45个开源软件的特性和要点,包括目前工作中常用到的JVM、Nginx、Tomcat、Kafka等,估计是工作技术栈原因,里面没有讲到Spring、Spring Boot、SpringCould、Redis等也很常用的开源项目。
看过文章才感觉个人技术视野的狭窄,工作中主要关注框架应用层的技术,对现在流行的数据类、云计算基础实施类的技术了解大少。以后在加深工作中应用技术深度的同时,也要注意扩展自己技术的广度才行。
https://github.com/huihoo/wiki有相关开源技术的资料索引,有时间要学习一下。
最后摘录一下作者列出的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
一套C++开发的大数据处理和分析平台;
ECL (Enterprise Control Language) 和KEL (Knowledge Engineering Language) 是两个High Level的脚本语言;
HPCC比Apache Hadoop历史更加悠久,在并行架构上也有自己的独到之处:Data Parallelism、Pipeline Parallelism、System Parallelism。
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
OpenStack是开源云平台的事实标准;
OpenStack + Kubernetes 开启云计算的新时代;
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
与RabbitMQ实现的AMQP相比,XMPP广泛应用于即时通信领域;
Ejabberd是XMPP Server的首选;
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
FreeBSD从10.0开始,使用LLVM替换GCC作为默认的编辑器,除了一些技术的考量外,GCC的GPL v3与FreeBSD项目的不兼容性,LLVM/Clang的许可协议是BSD,兼容FreeBSD;
Azul Systems推出Falcon,一个基于LLVM的新的Java即时编译器;
Clang是LLVM的前端,用来编译C,C++,Objective-C。
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#作为一门适合于金融和计算密集型的语言而闻名。