值得关注的开源软件推荐

向作者提问
我是Allen,灰狐创始人,连续创业者。爱好广泛,喜欢自由开放、电音电竞、书籍电影等。接触开源已有17年的时间,协作开发了10多个开源项目,在工作中也大量使用开源软件,一直学习研究开源项目。灰狐,一个开放式组织,提供开源软件解决方案和咨询服务,微信号:huihoo ;知识星球:灰狐的朋友们,欢迎添加。
查看本场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作者写得,挺有趣,大家可看看。

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