- 主题:寻求一种技术方案
目前手头上负责一个商业软件项目,积累好多年了,纯C代码的。
软件以往给用户的交付方式都是源代码包加说明文档加调试服务的方式,这两年暴露出一些弊端:
(1)源代码配置基本都是以宏定义的方式来做的,即用户直接在我们提供的头文件里面修改宏定义,随着软件规模逐步扩大用户需要修改的点越来越多,出错的概率也随之增加,用户抱怨增多。有一些用户提出使用GUI来配置源代码的要求。
(2)经过多年的积累,源代码本身已经比较完善,举个简单例子,滤波算法提供了几十种,目前源代码包里面可以看到所有的滤波算法源代码。但是具体到用户的应用中,每个项目实际也就用到了两三种滤波算法,这种状况对我们不太有利,暴露得太彻底。
(3)随着用户逐渐增多,产品源代码保密的难度越来越大。我们这个软件是ToB的源代码产品,主要通过合同条款来约束用户的随意传播行为,但是随着用户逐渐增多,失控的风险越来越大。
综合以上情况,产品团队决定将产品转变一种形态:
(1)不再以源代码包的方式交付产品,而是以配置工具的方式交付产品,用户在GUI配置工具上一步步配置自己的需求,然后以自动代码生成的方式生成源代码。
(2)根据用户配置,按需生成文件,比如原来的源代码包里面包含filterA.c/filterB.c/filterC.c/filterD.c四个文件,根据用户配置,实际只需要用到filterC.c,那么就只生成filterC.c,不再生成其它三个文件。
(3)减少源代码中预编译指令的使用,原先因为是以宏定义的方式来配置源代码的,使用了大量预编译指令,代码冗长。改用自动代码生成之后,代码可以根据用户配置按需生成,很多代码就可以不再生成了。
现在需要寻求一种技术方案,实现这个GUI配置工具:
(1)开发语言可以是C++或者C#,python也能接受,产品团队目前没有熟悉JAVA的人员。
(2)最好有现成的轮子可以使用,如果有开源项目可以参考的话更好了。
还请各位版友不吝指教,谢谢。
--
FROM 122.238.143.*
防泄漏这块只是增加一些门槛而已,不是我们的主要目的,毕竟源码类产品从技术原理上讲就已经没法防泄漏了。
用户拿去二次销售倒是没有发现过,产品比较小众,目标客户就那么些。有一种尴尬的情况是,单位A买了一套我们的软件,工程师王工本来是单位A的技术人员,也是我们软件的用户。后来,王工跳槽去了单位B,继续使用我们的软件,但是单位B没有正式购买软件,然后王工还继续找我们技术支持,并以单位B跟我们签了技术服务合同。目前我们是睁只眼闭只眼,因为不想得罪老用户(在用户眼里,我们提供的是收费的开源软件,代码免费,靠服务挣钱)。但是经济损失确实发生了,少掉了一半左右的收入(源代码与技术支持的价格基本是对半开)。这种情况下如果非去追究王工责任的话最后会是双输。
改成配置工具的方式,就不会发生这种情况了,因为我们会通过USB加密狗等方式加密这个配置工具,用户技术人员跳槽换了工作单位还要继续使用我们软件的话自然就会再买一套。
当然,极少数暴力破解软件的人员也会有,但那些人不是我们的目标用户群,不在讨论范围内。
所以,问题的重点是寻求一种技术方案,实现这个GUI配置工具,如果您有合适的技术方案还请推荐,多谢。
【 在 z16166 的大作中提到: 】
: 上面的方案(2),不能解决问题(2),因为只要你的工具能在每个客户那里生成全部滤波算法的源代码,那某个客户就可以想办法全部生成。
: 除非你给每个客户的工具是不一样的,给客户A的工具只能生成a、b、c三种算法,给客户B的工具只能生成d、e、f三种算法,也就是客户没购买的算法的源代码根本就不包含在你给他的工具中。
: 如果客户不是按算法来购买的,一般只能在工具和生成的源代码中加点水印方便跟踪是谁泄露出去的,水印和客户license信息有关。
: ...................
--
FROM 122.238.143.*
我们这套源代码的运行环境是不确定的,包括RTOS、Linux、Windows等,所以得采用源码。
当然,也有一些非技术原因,比如甲方要求必须开源。
【 在 foliver 的大作中提到: 】
: 弱弱的问一下,为啥不采用二进制分发?
--
FROM 122.238.143.*
我们软件大部分用户的电脑是不联网的,这是一个典型的单机软件。
不过您提到的“创建过程用向导方式”正是我们的想法,我们的想法是做成类似于IDE那种,用户点点鼠标配置几下,经过向导就生成一堆源代码文件。
现在的主要问题是我们不懂那种“点点鼠标配置几下,经过向导就生成一堆源代码文件”是如何实现的,还望不吝指教。
【 在 lipp 的大作中提到: 】
: 做个CRM。
: 给每个客户分发一个用户和密码。
: 客户可以自行登录CRM,查看自己的历史源码清单,也可以付款后创建新的源码,创建过程用向导方式。
: ...................
--
FROM 122.238.143.*
我们软件大部分用户的电脑是不联网的,这是一个典型的单机软件。
说出来不怕您笑话,我们很多用户还要求软件升级必须邮寄光盘。
【 在 z16166 的大作中提到: 】
: 联网搞,弄个服务器,服务器能控制账号、IP等等策略。
: 服务端生成源代码,下发到客户端,源代码里的水印和账号/license绑定。
:
--
FROM 122.238.143.*
感谢,目前的技术需求主要是两点:
(1)根据用户GUI配置的选项来选择性的生成文件,您说的方案可以解决这个点;
(2)根据用户GUI配置的选项来修改部分源代码文件,目前还没有想好方案,这一点不知道您有没有建议?
【 在 foliver 的大作中提到: 】
: 类似于制作安装windows程序安装向导,不同的安装选项拷贝不同的文件,文件都事先准备好。
: 源码先按照功能拆分好文件,做好功能源码对应关系,其实就是makefile的制作,加密连同工具一起发布。
: 我能想到的就是这样了。
--
FROM 122.238.143.*
感谢,将单机版转换为网络版确实是我们的长远规划,但目前确实存在较大阻碍,这个是由用户性质决定的,转换观念与开发手段都还需要一些年头。这一点确实是大趋势,我们赞同,用户也赞同,只是还需要几年时间。
关于单机版GUI配置工具生成代码的方案不知道您有没有建议?
【 在 jfgao 的大作中提到: 】
:
: 目前软件行业大趋势都是往云上迁移,SaaS就是靠服务挣钱。
: 我记得以前有一款C语言写的赛车开源软件,作者后来就重写了网上赛车开源版,自己搭建服务器向用户收费。开源软件用license制约商业行为。
: ...................
--
FROM 122.238.143.*
是一种思路,谢谢。
【 在 weihuajiang 的大作中提到: 】
: 我感觉你的要求就是模块化和插件,每个功能做成一个插件,通过配置文件调用相应的插件,就能实现。
:
--
FROM 122.238.142.*
应该可以解决我们的一部分问题,谢谢。
【 在 zephyroops 的大作中提到: 】
: 用cmake和python做配置构建
: - 来自 水木社区APP v3.5.1
--
FROM 122.238.142.*