microISV应该使用哪种语言来编写商业软件?

时间:2010-05-01 20:46:04

标签: programming-languages

我用Java编写软件已有很多年了,但它总是用于部署到服务器的内部应用程序。我现在想开始编写桌面应用程序,但我不知道从哪里开始。我已经编写了一些Java / Swing应用程序,但它们又是供内部使用的。

我的理解是Java和其他半编译和解释语言太容易逆向工程,使它们不适合商业软件。我知道有Java编译器和其他一些解释语言,但我也听说它们价格昂贵和/或不可靠。

假设我开始使用microISV并希望为广大受众开发和销售应用程序,那么我最好的选择是什么?我更喜欢可以写入一次的内容,并针对不同的操作系统进行编译,但如果其他语言会影响Windows中的体验(安装简便性和用户体验),我不反对.NET和仅限Windows的受众。我唯一的问题是,我没有很大的起始预算,并且为所需的开发工具支付wazoo并不是真正的卡片。

5 个答案:

答案 0 :(得分:3)

为什么人们想要对您的软件进行逆向工程?他们可能会盗版它,但无论您使用何种语言,都无法防止盗版。我怀疑你有一个你要隐藏的绝密算法,在这种情况下逆向工程可能是一个问题。

你应该选择你最熟悉的东西,Java可以正常工作。

如果您打算改用其他语言,我建议您查看Qt。 Qt是一个免费的开源跨平台C ++工具包,允许您编写应用程序,只需很少的工作就可以在Windows,Mac和Linux上编译和运行。您可以使用QPL及其LGPL许可证免费编写商业软件。

编辑:GCJ将Java编译为本机代码,但仅支持Java 1.4。

答案 1 :(得分:0)

好吧,如果您正在尝试成为独立服务供应商 - 而不是软件供应商 - 那么从某种意义上说,使用像Java这样可以反编译的语言并不重要。因为您将自己作为为客户集成和定制软件的最佳人选。该软件是实际上可以让你赚钱的东西的交付机制:你和你的技能。许多公司通过免费赠送软件并签订服务合同为其客户进行设置来获利。您可以通过使用混淆器来缓解Java反编译问题,但它可以解决错误的战斗。

如果您打算出售软件而不是服务,那么Java将是一条相对冒险的路线。

这完全取决于您的商业计划。

答案 2 :(得分:0)

如果您正在创办一家公司,那么您就是在卖自己的专业知识。因此,您使用的语言必须是您最熟悉和熟悉的一种语言(或两种语言)。我很惊讶您觉得有必要提出这个问题。

答案 3 :(得分:0)

任何代码都可以在某种程度上反编译。我认为你可以将Java混淆到可以阻止临时用户的程度......但是我认为其他人的头脑也会受到打击。在不使用Java的所有原因中,您的列表中的反编译容易度非常低。如果这就是阻止你的一切,那就去吧!谷歌Java混淆器,你会发现一些东西。

答案 4 :(得分:0)

我对使用Java编写的复杂软件进行逆向工程的风险持怀疑态度,但出于问题的目的,我愿意对其进行规定。我假设相同的问题排除了仅在JVM上实现的任何其他语言。

Java最突出的方面是

  • 静态类型系统
  • 基于类的对象系统
  • 自动内存管理
  • 类/接口系统之外没有独立的功能或模块
  • 泛型

这种组合可以用C#这样的语言进行复制,但我认为你对分发JVM字节码的相同反对意见也适用于MSIL字节码。

我很难想出一种具有所有这些功能的语言。以下是一些附近的语言:

  • C ++拥有除自动内存管理之外的所有功能,此外它还支持独立功能。然而,C ++通用机制(模板)不适合胆小的人,并且它(还)不支持模块化的类型检查。比Java更灵活,但也有更多的方法来射击你的脚。请谨慎使用。

  • Modula-3具有以上所有功能,但它本质上是一种死语言,加上像C ++一样,没有对泛型的模块化类型检查。

  • 我对埃菲尔不太熟悉,无法进行良好的比较,但我认为值得研究。

  • 德尔福也值得研究。除了泛型之外,它似乎拥有以上所有内容。它主要是一个专有的Windows环境(以前称为Object Pascal),但似乎存在一个支持Delphi的开源'Free Pascal'编译器。

  • 有许多面向对象的语言具有自动内存管理和动态类型,其中一个可能会突出显示ruby,Python和Smalltalk。虽然所有这些都推动了某种形式的实验编译,但这些都不能很好地编译到独立的本地机器代码中。它们都是动态类型的,这与你习惯的完全不同。

如果我在你的位置,我可能会继续使用Java并接受一些逆向工程的风险。反编译器并不像你想象的那么精彩,它们也不会产生可维护的代码。但如果你真的想要能够生成原生机器代码,我会调查Delphi和Eiffel。 (我自己会使用Modula-3,但那是因为我曾经投入大量精力学习它。它是一个非常精心设计的语言,但是用户社区已经消失了,我认为这是一封死信。可惜。)< / p>