本文系转载,著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。

作者: 魏永明

来源: 微信公众号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 的软件栈当中,应重点做好如下三方面的工作:

  1. 在底层,为适配最新的硬件和 Linux 内核技术(主要指 GPU、OpenGL ES、Open VG 和 Direct Rendering Manager),做一些相关的工作。MiniGUI 3.0 当中,以窗口为单位,MiniGUI 支持虚拟缓冲区渲染,以进程为单位,通过使用特定的图形引擎,可以将单个进程显示在单独的显示平面(Surface)上。在这两点基础上结合 GPU 渲染,就可以实现 Android、iOS 等智能手机操作系统的 UI 效果了。
  2. 为方便MiniGUI应用的开发,需要发展集成开发环境,可以探索更高级的编程接口封装,甚至使用脚本语言来编写 MiniGUI 应用程序甚至一般的嵌入式应用程序。董在飞漫工作期间发展的 mGNCS 和 miniStudio 是一个非常好的尝试,可以作为继续发展的基础。但由于这几年移动互联网的大力发展,导致 C/C++ 开发者越来越稀缺,如果新的编程框架仍然使用 C/C++ 作为编程语言,则会对产品或技术的推广造成很大的影响。作为工具,需要考虑降低开发者的入门门槛。另外,新的编程接口封装,不应该仅仅限于 GUI 编程,而应该在一个统一的应用开发模型下,将嵌入式、物联网设备开发的其他部分也有机整合起来。这方面,近几年发展起来的服务器端 JavaScript 框架 Node.js 是一个可以参考的成功案例。当然,嵌入式或者物联网设备的开发有资源受限的问题,在开发效率和程序性能方面需要作出一些权衡,这有难度,但这也许就是可以创新的地方。
  3. 和其他开源项目合作,将 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的涅槃重生之路的更多相关文章

  1. 飞漫魏永明:从MiniGUI看嵌入式十年得与失

    日前,飞漫软件创始人魏永明,在飞漫成立十周年之际,回顾了公司发展这十年,同时也回顾了嵌入式发展的这十年.魏永明以自身涉及嵌入式产业的方方面面,创新.人员管理.工程管理.教育培训.经营策略等多方面,并且 ...

  2. Pandoanload涅槃重生,小白羊重出江湖?

    Pandoanload涅槃重生,小白羊重出江湖? 科技是把双刃剑,一方面能够砸烂愚昧和落后,另一方面也可能带给人类无尽的灾难. 原子物理理论的发展是的人类掌握了核能技术但是也带来了广岛和长崎的核灾难, ...

  3. 垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想

    Delphi 是一个基本上被我遗忘的工具, 要不是在使用RapidSql , 我是收不到Embarcadero 公司发出的邀请来參加Delphi XE5的公布会的. 有人可能要问为什么是Embarca ...

  4. 垂死或涅槃重生 -- Delphi XE5 我们将宣布感情的回归

    Delphi 在很大程度上是一个被遗忘我的工具. 无论是在使用RapidSql , 我还没有收到Embarcadero 本公司发行参与邀请Delphi XE5该公告将. 可能有人会问,为什么Embar ...

  5. SCTL 涅槃重生:投入 RAL 的怀抱

    在<DistSQL:像数据库一样使用 Apache ShardingSphere>一文中,PMC 孟浩然为大家介绍了 DistSQL 的设计初衷和语法体系,并通过实战操作展示了一条 SQL ...

  6. Linuxer-&quot;Linux开发人员自己的媒体&quot;第五月稿件和赠书名单

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/juS3Ve/article/details/78859630 Linuxer已经从一个单纯的读者服务 ...

  7. 新塘ARM平台交叉编译minigui界面库

    简介 MiniGUI 是一款面向嵌入式系统的高级窗口系统(Windowing System)和图形用户界面(Graphical User Interface,GUI)支持系统,由魏永明先生于 1998 ...

  8. minigui交叉编译整理

    简介 MiniGUI 是一款面向嵌入式系统的高级窗口系统(Windowing System)和图形用户界面(Graphical User Interface,GUI)支持系统,由魏永明先生于 1998 ...

  9. (转) Android的Window类

    Android的Window类 2011-03-25 10:02 by Keis, 110 visits, 网摘, 收藏, 编辑 Android的Window类(一)  Android的GUI层并不复 ...

随机推荐

  1. 删除mac开机启动项

    1、开“系统偏好设置”窗口,选择“用户与群组”,进入用户与群组窗口.选择登录项选项卡,再解锁,最后删除开机启动的应用.   2、分别在以下6个目录中检查是否有与anydesk相关的plist文件 ~/ ...

  2. 教你用java统计目录下所有文档的词频

    本文是统计目录下所有文档的词频top10,非单个文档,包含中文和英文. 直接上代码: package com.huawei.wordcount; import java.io.BufferedRead ...

  3. Vue基础项目配置

    一,使用Vuejs搭建项目需要一些基础配置,这样能使的编程过程事半功倍 1.首先下载nodejs,然后使用nodejs使用NPM命令下载VueCli3.0以上的Vue脚手架.通过脚手架可以使用Vue  ...

  4. 细谈Redis五大数据类型

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 上一篇文章有提到,Redis中使用最频繁的有5种数据类型:String.List.Hash.Set.SortS ...

  5. SQL Server 内存优化表的索引设计

    测试的版本:SQL Server 2017 内存优化表上可以创建哈希索引(Hash Index)和内存优化非聚集(NONCLUSTERED)索引,这两种类型的索引也是内存优化的,称作内存优化索引,和基 ...

  6. loadrunner12录制手机app

    今天第一次使用LR12录制app,遇到了录制不上的问题,最终解决了,记录一下 我安装的版本是12.02社区版   HP_LoadRunner_12.02_Community_Edition_T7177 ...

  7. 【django】ajax,上传文件,图片预览

    1.ajax 概述: AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味 ...

  8. 使用apache的poi来实现数据导出到excel的功能——方式二

    此次,介绍利用poi与layui table结合导出excel.这次不需要从数据库中查询出来的数据进行每一行的拼接那么麻烦,我们这次将标题定义一个id值,对应从数据库中查找出来的字段名即可. 1.po ...

  9. 【爬虫小程序:爬取斗鱼所有房间信息】Xpath(多线程版)

    # 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正 from queue import Queue import requests from lxml import etree ...

  10. C语言I博客作业02

    这个作业属于那个课程  C语言程序设计I 这个作业要求在哪 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/8656 我在这个课程的目标 ...