魏永明: MiniGUI的涅槃重生之路
本文系转载,著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者: 魏永明
来源: 微信公众号linux阅码场(id: linuxdev)
本文背景
MiniGUI是最负盛名的开源Linux图形用户界面支持系统之一。本文是魏永明老师于公元2017年9月1日最新原创的讨论MiniGUI的涅槃重生之路的文章。
作者简介
魏永明,获清华大学工学学士、硕士学位。其主持的 MiniGUI 项目,是早期国内最知名的几大开源软件项目之一,曾广泛应用于功能手机、数码相框等嵌入式产品中。魏永明于2002年创立北京飞漫软件有限公司,成功实践了围绕开源软件的双许可证商业模式;于2015年10月联合创办北京玖柏图技术股份有限公司并担任 CEO。魏永明为 Linux 及开源软件在中国的普及和应用做了大量工作,翻译或编著若干技术著作(《Linux 实用教程》、《Linux 设备驱动程序》等);2013年,鉴于他在开源软件领域做出的突出贡献,被“中国开源软件推进联盟”评选为“开源软件杰出贡献人物”。
前段时间去深圳出差,约了几个飞漫的前同事一起吃饭喝酒,其中高总目前供职于深圳一家数控系统开发厂商。2000年开始,高总就在 TCL 和创维力推 Linux + MiniGUI 的智能电视方案,甚至还基于 MiniGUI 开发了自己的浏览器。然而大家都知道,智能电视这一类产品在十年之后(2010年)才获得了市场的认同并得到了大的发展和普及,其中 Android 从技术上保证了智能电视这类产品的成功,高总力推的方案在当时得不到产品部门的认同,其实无关技术,而是市场还不成熟。大家谈起这些往事,各个唏嘘不已。
MiniGUI 作为生长于国内土壤的一款开源软件,1999年发布了第一个版本,2003年左右成熟起来,并在嵌入式产品类型蓬勃发展的 2000年到2010年之间获得了大量的应用,广泛应用于工业控制系统、功能手机、数码相框等类型的产品中,其中尤以华为的数码相框、联芯的功能手机方案、RDA 的功能手机方案为代表。本人于 2002 年成立了飞漫软件,尝试利用开源和商业并举的方式(双许可证模式)运营 MiniGUI 及其产品,获得了一定意义上的成功,期间也有很多经验教训。有关详情,大家可以在网上搜索本人在 2009 年发表的《MiniGUI 十年回顾》这篇文章:
http://www.fmsoft.cn/zhcn/about/blog/minigui/
自上面这篇文章发布以来,又有八年时间过去了,斗转星移,AI 成为下一个高科技领域的竞争焦点。在操作系统及基础软件领域,Android 已经占据了除苹果之外的所有智能手机的市场份额,但并没有完全替代所有基于 Linux 的智能设备以及其他更多的嵌入式实时系统,仍然有很多客户在使用 MiniGUI 开发各类智能设备;另一方面,MiniGUI 当年的竞争对手 Qt 几易其主,但仍然在顽强生存着。当年时兴的“嵌入式系统”字眼,已被“物联网”取代,华为的 liteOS以及其他本土开发人员发展起来的 RT-Thread、SylixOS 等 RTOS(实时操作系统)产品,获得了政府部门甚至资本市场的支持,从而获得了新的发展契机。
作为 MiniGUI 的原创者,本人对这款软件的感情自不必说。但是,除了我本人之外,还有更多的飞漫软件同事(包括高总这些 MiniGUI 的早期用户及开发者)为 MiniGUI 的发展倾注了诸多心血。
万目前供职于深圳一家明星企业,是当年飞漫深圳研发团队的负责人,侯是架构师,现在珠海创业。2007年,飞漫深圳团队在万和侯的领导下,开始负责 MiniGUI 的维护工作。在2009年左右,这个团队为 MiniGUI 开发了一整套的动画支持框架和界面开发技术。若没有 Android 的横空出世,这些技术本可以应用于功能手机的升级改造中,为功能手机提供优秀的 UI/UX 解决方案。但 Android 的开源免费,Google 的大力推广,却让这些技术丧失了应用和发展的机会。
董目前供职于小米,是 miniStudio 产品的主要开发者。miniStudio 是一个基于 Eclipse 的集成开发环境,提供了“所见即所得”的 GUI 界面编辑工具。为了实现GUI 应用的编程便利性,董改造了 MiniGUI 控件的编程框架,开发了 mGNCS(新控件集)组件,并且引入外观渲染器这样一种高级的 UI 定制体系和方案,领导团队开发了 miniStudio 产品。时隔多年的今天,当我从服务器找到 miniStudio 1.0.8 for Windows 版本,安装到电脑上并运行时,我仍然惊讶于这款软件提供的可视化编程能力,就算在今天,也是难能可贵的!但飞漫软件并没有花精力推广和发展 miniStudio,也没有基于 miniStudio 发展出可以良性循环的商业模式出来,不禁令人扼腕叹息。
mDolphin 是基于 WebKit的浏览器产品,张、吕为前后两名主力开发人员,该产品的开发历时多年持续演进,甚至成功应用于联芯的功能手机方案当中。mDolphin 是 MiniGUI 上的一款典型的大型应用软件,除了其本身的应用价值之外,也有力地证明了 MiniGUI 产品的成熟性。目前,张作为技术专家供职于阿里巴巴,吕在互联网领域创业。
上面提到的这些曾供职于飞漫软件的前同事,为 MiniGUI 的发展付出了自己的青春年华,他们的技术能力也得到了极大的提升和锻炼。不论他们后来从事什么行业,或打工或创业,在飞漫软件围绕 MiniGUI 所做的开发工作,仍然是其履历中重要的一笔。除了他们之外,在长达十多年的发展历程中,飞漫软件前后为业界培养了近百名优秀的高级软件工程师,限于篇幅不能一一列举。他们有的供职于腾讯、阿里等大型互联网公司的关键技术岗位,有的在移动互联网等领域创业,他们围绕着 MiniGUI 所做的开发和维护工作,让他们受益一生。
上周去深圳,当万在其供职的企业熟练地向他当前的同事演示和讲述 MiniGUI 之上的动画框架和相关技术时,我才深切感受到,高、万、侯、董以及其他为 MiniGUI 的发展倾注过精力的开发人员对 MiniGUI 的感情并不比我差多少。
和高总他们吃饭的时候,高总提到 MiniGUI 仍然有很旺盛的需求,仍然可以继续发展。其实就这个问题,几乎每次到深圳和高、侯他们吃饭喝酒,都会拿出来争论一番。他们认为 MiniGUI 仍然有旺盛的市场需求,应该继续发展,就这么丢下不管实在可惜;我则认为每个产品都有自己的生命周期,MiniGUI 从 1999 年到现在都已经十多年了,生命周期差不多到头了。
本人从 2010 年开始,领导原飞漫软件的团队开发过 Android 上的工具类 App(领航桌面、锁屏等),定制过智能电视方案,现在则另起炉灶在智能硬件和移动互联网领域创业。大概从2012 年开始,MiniGUI 的开发处于停滞状态,除了将万、侯他们开发的最新版本以及 mDolphin 开源发布之外,几乎没有再做过大的更新。但从2015年开始,MiniGUI 的需求又变得旺盛起来,每年都会有客户主动找飞漫软件获得 MiniGUI 的商业授权。
折腾多年以后,回过头来反思 MiniGUI 和飞漫软件走过的路,我之所以认为 MiniGUI 的生命周期已到,大致是由于飞漫软件未能取得心目中的成功。换句话说,我把技术和生意搞混淆了。一个生意可能无法持续按照单一的模式去运营,但技术却不会轻易过时。
举个典型的例子 MySQL。MySQL的早期运营公司使用双许可证模式,获得了一定程度上的商业成功,后来被 Oracle 收购,双许可证模式基本已经完成了它的历史使命,但 MySQL 的应用却随着互联网、移动互联网、云服务的发展而越发普及,就算后来出现了诸多 NoSQL 数据库,但 MySQL 仍然展现着其旺盛的生命力。
再比如 OpenGL 这类规范或者基础设施,发展了几十年,从未见过其过时。Apache、X Window 等等技术或开项目,几乎是开源世界的常青树,Linux 内核就更不用说了。
显然,只要是有市场需求和用户基础的基础软件,持续发展才是其主旋律;容易过时的是生意,而不是技术本身。
作为一款开源软件作品,MiniGUI 在技术上是成熟的,成功的;失败的只是生意:飞漫软件并没有因为 MiniGUI 而获得大的发展。我相信抛开生意,仍然有可能找到一种方法可以让 MiniGUI 继续发展下去。
就如何发展 MiniGUI 的问题,最近集中思考了几天。后来在宋宝华老师(知名 Linux 内核专家)的微信群里,宋老师找我约稿,我才确定了本文的题目:《MiniGUI 的涅槃重生之路》。
一、先谈最容易谈的:技术方面
技术方面,在围绕 MiniGUI 的软件栈当中,应重点做好如下三方面的工作:
- 在底层,为适配最新的硬件和 Linux 内核技术(主要指 GPU、OpenGL ES、Open VG 和 Direct Rendering Manager),做一些相关的工作。MiniGUI 3.0 当中,以窗口为单位,MiniGUI 支持虚拟缓冲区渲染,以进程为单位,通过使用特定的图形引擎,可以将单个进程显示在单独的显示平面(Surface)上。在这两点基础上结合 GPU 渲染,就可以实现 Android、iOS 等智能手机操作系统的 UI 效果了。
- 为方便MiniGUI应用的开发,需要发展集成开发环境,可以探索更高级的编程接口封装,甚至使用脚本语言来编写 MiniGUI 应用程序甚至一般的嵌入式应用程序。董在飞漫工作期间发展的 mGNCS 和 miniStudio 是一个非常好的尝试,可以作为继续发展的基础。但由于这几年移动互联网的大力发展,导致 C/C++ 开发者越来越稀缺,如果新的编程框架仍然使用 C/C++ 作为编程语言,则会对产品或技术的推广造成很大的影响。作为工具,需要考虑降低开发者的入门门槛。另外,新的编程接口封装,不应该仅仅限于 GUI 编程,而应该在一个统一的应用开发模型下,将嵌入式、物联网设备开发的其他部分也有机整合起来。这方面,近几年发展起来的服务器端 JavaScript 框架 Node.js 是一个可以参考的成功案例。当然,嵌入式或者物联网设备的开发有资源受限的问题,在开发效率和程序性能方面需要作出一些权衡,这有难度,但这也许就是可以创新的地方。
- 和其他开源项目合作,将 MiniGUI 作为其原生支持选项,比如 WebKit。此举可一方面发展 MiniGUI 之上的关键应用软件,另一方面可以扩大 MiniGUI 的生态体系,得到更多人的关注。
以上技术方面的未尽事宜,只要有开发者,假以时日,都是可以做出来的。但最麻烦的是谁来养这些开发者,或者,说白了钱从哪儿来?
二、如果是生意,该如何做?
这么多年靠技术创业,我发现单纯靠技术做生意是最难的,要难过任何一种传统的生意模式,比如开饭馆,做代理等等。大家都知道,在中国市场,软件的价值往往会被低估,通过卖软件副本来赚钱的时代也已经一去不复返,所以中国这篇土壤上从来没有孕育出微软这样的巨头。在这样的一个大环境下,飞漫之所以能够依靠 MiniGUI 这样一个单一业务坚持十多年,在 MiniGUI 停止更新后还能有一些收入,可以说完全是因为运气。但任何事情都有双面性,中国企业在互联网商业模式方面的探索,促进了腾讯、阿里等企业的飞速发展。所以,这里我可以探讨一个假设:假如能够重来,我会选择什么样的模式来做 MiniGUI 这个生意?
首先,我不会天真地认为 MiniGUI 这个生意可以做到每年上亿的营业收入,我认为一千万元的年收入规模对这样一个软件来讲就已经很好了。
其次,我认为 2010 年之前飞漫软件采取的双许可证商业模式是正确的,是当时条件下的正确选择,为飞漫软件的进一步发展积累了资金。但在 2010 年或更早,应该作出商业模式上的调整(当然,前提是本人不认为 MiniGUI 的生命周期已结束,这是眼界的局限性问题)。
最后,围绕 MinIGUI 的生意模式,正确的做法应该是:利用开源软件优势,持续扩大用户(开发者)群体,维持一个小规模(10到15人左右)的软件公司,在确保公司可以长期生存的情况下,静候市场发生变化,寻找爆发的机会或者被收购。
就我目前的状况,我的精力不允许再组建一个完整的团队来运营MiniGUI,将其作为一个生意来做。但在这里,我可以给出一个供参考的商业模式,当然,这个商业模式亦可供 RT-Thread、SylixOS 等基础软件创业团队参考:
A. 使用 Apache许可证发布基础软件(比如操作系统、函数库等),不要再使用 GPL/LGPL 等条款发布。这样可以迅速获得最大程度的商业应用,扩大市场占有率。要知道,假如 Android 使用 GPL 许可证发布,是绝对不可能获得如此大的成功的。
B. 提供收费的开发工具,比如 MiniGUI 的集成开发环境miniStudio,并按开发人员数量及使用年限提供许可。开源这类工具软件的意义不大,但这类工具软件运行在桌面电脑上,所以可以通过云端来控制其许可证,还可以通过云端来分发一些收费的模块或者提供技术支持服务。这样的模式下,工具软件的销售成本就会变得非常低,用户甚至可以在网页上实现在线下单,并通过邮件获得许可证。
假如采取以上的商业模式,通过适当推广,每年在全球范围内发展和保持 500 名付费开发者,则基本上可以养活一个 15人规模的小软件公司。假如推广得力,达到一千万元的年销售规模也是可能的。
更多精彩更新中……欢迎关注账号:linux阅码场(id: linuxdev)
魏永明: MiniGUI的涅槃重生之路的更多相关文章
- 飞漫魏永明:从MiniGUI看嵌入式十年得与失
日前,飞漫软件创始人魏永明,在飞漫成立十周年之际,回顾了公司发展这十年,同时也回顾了嵌入式发展的这十年.魏永明以自身涉及嵌入式产业的方方面面,创新.人员管理.工程管理.教育培训.经营策略等多方面,并且 ...
- Pandoanload涅槃重生,小白羊重出江湖?
Pandoanload涅槃重生,小白羊重出江湖? 科技是把双刃剑,一方面能够砸烂愚昧和落后,另一方面也可能带给人类无尽的灾难. 原子物理理论的发展是的人类掌握了核能技术但是也带来了广岛和长崎的核灾难, ...
- 垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
Delphi 是一个基本上被我遗忘的工具, 要不是在使用RapidSql , 我是收不到Embarcadero 公司发出的邀请来參加Delphi XE5的公布会的. 有人可能要问为什么是Embarca ...
- 垂死或涅槃重生 -- Delphi XE5 我们将宣布感情的回归
Delphi 在很大程度上是一个被遗忘我的工具. 无论是在使用RapidSql , 我还没有收到Embarcadero 本公司发行参与邀请Delphi XE5该公告将. 可能有人会问,为什么Embar ...
- SCTL 涅槃重生:投入 RAL 的怀抱
在<DistSQL:像数据库一样使用 Apache ShardingSphere>一文中,PMC 孟浩然为大家介绍了 DistSQL 的设计初衷和语法体系,并通过实战操作展示了一条 SQL ...
- Linuxer-"Linux开发人员自己的媒体"第五月稿件和赠书名单
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/juS3Ve/article/details/78859630 Linuxer已经从一个单纯的读者服务 ...
- 新塘ARM平台交叉编译minigui界面库
简介 MiniGUI 是一款面向嵌入式系统的高级窗口系统(Windowing System)和图形用户界面(Graphical User Interface,GUI)支持系统,由魏永明先生于 1998 ...
- minigui交叉编译整理
简介 MiniGUI 是一款面向嵌入式系统的高级窗口系统(Windowing System)和图形用户界面(Graphical User Interface,GUI)支持系统,由魏永明先生于 1998 ...
- (转) Android的Window类
Android的Window类 2011-03-25 10:02 by Keis, 110 visits, 网摘, 收藏, 编辑 Android的Window类(一) Android的GUI层并不复 ...
随机推荐
- 《Java核心技术卷1》读书笔记
一.基础 数据类型 Java是一种强类型语言,一共8种基本类型,没有无符号类型 整型:int(正负20亿).short(正负3万).long(巨多).byte(正负127) 浮点类型:float(正负 ...
- Kylin配置Spark并构建Cube
HDP版本:2.6.4.0 Kylin版本:2.5.1 机器:三台 CentOS-7,8G 内存 Kylin 的计算引擎除了 MapReduce ,还有速度更快的 Spark ,本文就以 Kylin ...
- 卷积层后连接LSTM层的报错(InvalidArgumentError (see above for traceback): Incompatible shapes: [128] vs. [384])
三通道编译通过但无法训练 报错 InvalidArgumentError (see above for traceback): Incompatible shapes: [128] vs. [384] ...
- 搭建第一个node服务器
1.在项目文件夹根目录创建app.js: (1)先引入模块 const http = require('http');//http是安装好node就有的一个模块,是用来创建http服务器的 (2)创建 ...
- Centos 7 配置tomcat服务器
1.首先查看当前系统版本 uname -a 2.安装之前查看系统是否安装了java rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 如果没 ...
- 接口是什么?接口长什么样?java的Interface
今天来看看java接口长哪样.接口是特殊抽象类. 一个子类只能继承一个抽象类(父类),所以就有接口这个特殊抽象类. 下面以一个电脑的USB为例: 定义接口标准 public interface USB ...
- ajax跨域访问数据
通过json发送和接受数据,数据以json的格式在服务器端和前台进行传递,什么是json数据?这里就不进行详细阐述,轻自行百度解决. 在html5 中利用ajax 异步请求时,会遇到跨域的问题,如果域 ...
- 有了 CompletableFuture,使得异步编程没有那么难了!
本文导读: 业务需求场景介绍 技术设计方案思考 Future 设计模式实战 CompletableFuture 模式实战 CompletableFuture 生产建议 CompletableFutur ...
- JQuery 源码解析 · extend()详解
前言:最近想重写一个dropdown插件,于是想到了使用jquey实现插件,于是重温了一波$.extend()的知识,然后总结了这篇笔记 正文: $.extend(src) jQuery.exten ...
- 设计时数据源: 在ActiveReports中直接连接PostgreSql 数据库
在之前的博客中,我们学习了如何在运行时绑定PostgreSql 数据库,今天我们学习,如何直连PostgreSQL 数据库. 1. 安装PostgreSQL 的ODBC驱动程序 https://www ...