看了值得關注的開源軟件推薦,感受很不錯,做者接觸開源軟件十幾年,協做開發了10多個開源項目,對開源軟件的認識和實踐確實讓人大開眼界。html
應用類:框架、企業應用、編輯器前端
數據類:數據科學、大數據、機器學習、汽車機器人java
服務類:雲計算、數據庫、消息隊列、服務器linux
系統類:操做系統、編譯器、虛擬機、編程語言git
做者按上面四類介紹了45個開源軟件的特性和要點,包括目前工做中經常使用到的JVM、Nginx、Tomcat、Kafka等,估計是工做技術棧緣由,裏面沒有講到Spring、Spring Boot、SpringCould、Redis等也很經常使用的開源項目。github
看過文章才感受我的技術視野的狹窄,工做中主要關注框架應用層的技術,對如今流行的數據類、雲計算基礎實施類的技術瞭解大少。之後在加深工做中應用技術深度的同時,也要注意擴展本身技術的廣度才行。數據庫
https://github.com/huihoo/wiki有相關開源技術的資料索引,有時間要學習一下。編程
最後摘錄一下做者列出的45個開源軟件的特性要點,感興趣的朋友建議看原文更精彩。vim
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/二、HTTP/1.一、WebSocket、HTTP/1.0、SPDY/3.一、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#做爲一門適合於金融和計算密集型的語言而聞名。