2010-05-01 95 views
3

我一直在用Java編寫軟件已有很多年了,但它始終用於部署到服務器的內部應用程序。我想現在開始編寫桌面應用程序,但我不知道從哪裏開始。我已經寫了幾個Java/Swing應用程序,但它們又一次用於內部使用。microISV應該使用什麼語言編寫商業軟件?

我的理解是,Java和其他半編譯和解釋語言太容易反向工程,使它們不適合商業軟件。我知道有編譯器爲Java和一些其他解釋型語言,但我也聽說它們昂貴和/或不可靠。

假設我開始使用microISV並希望開發和向廣泛的受衆銷售應用程序,我最好的選擇是什麼?我更喜歡可以接近寫一次的東西,並針對不同的操作系統進行編譯,但如果其他語言會在Windows中損害體驗(安裝緩解&用戶體驗),我不反對.NET和僅限Windows的觀衆。我唯一的問題是,我沒有一個大的起始預算,並且爲所需的開發工具支付wazoo並不是真正的問題。

回答

0

那麼,如果你想成爲獨立服務供應商而不是軟件供應商 - 那麼從某種意義上說,如果你使用像Java這樣的語言可以被反編譯,這並不重要。因爲你會把自己當成最好的人來爲你的客戶整合和定製軟件。該軟件是實際上會讓你賺錢的東西的交付機制:你和你的技能。許多公司通過免費贈送他們的軟件並將他們的服務承包給他們的客戶來獲利。您可以通過使用混淆器來緩解Java反編譯問題,但這有點與錯誤的戰鬥作鬥爭。

如果你打算讓你的錢出售軟件而不是服務,那麼Java將是一個相對危險的路線。

這一切都取決於您的業務計劃。

+1

對於我來說,銷售服務似乎與爲傳統僱主安排正規工作並無不同。 – Wal 2010-05-01 21:25:44

0

如果你開始一個人的公司,那麼你正在銷售你的個人專長。所以你使用的語言必須是你最熟悉和熟悉的語言(或者兩個)。我很驚訝你覺得有必要問這個問題。

+0

因爲我打算出售一個程序而不是支持,所以如果一些使用「Java Decompiler」的孩子在完成所有工作後無法與我競爭,我寧願這樣做。 – Wal 2010-05-01 21:16:30

+1

@Wal Code現在沒有任何價值,並且總是可以被撕掉。您正在處理的市場中的商業知識確實如此。 – 2010-05-01 21:26:45

+0

@Neil由於ISV的目標是利基,並且如果某個特定應用的重複業務不適用,我不會看到除源代碼之外的任何東西是有價值的。除了營銷,口碑等。如果兩個供應商銷售具有兩個不同名稱的完全相同的代碼,那麼消費者如何知道供應商A具有商業知識而B是小偷? – Wal 2010-05-01 21:29:58

3

爲什麼人們想要逆向工程軟件?他們可能會盜用它,但無論您使用何種語言,都無法防止盜版。我懷疑你有一個絕密算法,你試圖隱藏,在這種情況下,逆向工程可能是一個問題。

你應該選擇你最瞭解的東西,Java可以很好地工作。

如果你打算轉換到另一種語言,我建議看看Qt。 Qt是一個免費的開放源代碼C++跨平臺工具包,允許您編寫應用程序,以最少的工作量在Windows,Mac和Linux上編譯和運行。您可以使用LGPL許可證免費使用Qt編寫商業軟件。

編輯:GCJ將Java編譯爲本地代碼,但僅支持Java 1.4。

+1

我很驚訝,到目前爲止,每個人都絕對否認源代碼的價值。如果一個人可以出去找一個他們喜歡的競爭程序並對這些困難的部分進行反向工程,那麼從頭開始寫一個程序有什麼意義呢? – Wal 2010-05-01 21:23:07

+2

源代碼是任何業務中最不有價值的部分。 – bmargulies 2010-05-01 21:25:39

+0

@bmargulies我同意這種說法。但是,源代碼是特定應用程序中最有價值的部分。 – Wal 2010-05-01 21:31:30

0

任何代碼都可以反編譯到一定程度。我認爲你可以將Java混淆到一定程度,從而阻止臨時用戶......但我認爲其他人碰到了頭部。在不使用Java的所有原因中,反編譯的難易程度應該在列表中非常低。如果這就是阻止你的一切,那就去吧!谷歌Java混音器,你會發現一些東西。

0

我對用Java編寫的一個複雜的軟件進行逆向工程的風險持懷疑態度,但爲了您的問題的目的,我願意對其進行規定。我假設相同的問題排除了僅在JVM上實現的任何其他語言。

爪哇的最顯着方面是

  • 靜態類型系統
  • 基於類的對象系統
  • 自動內存管理
  • 的類/接口系統之外沒有獨立的功能或模塊
  • 泛型

這種組合可以用像C#這樣的語言來複制,但我假設你對分發JVM字節碼的反對意見同樣適用於MSIL字節碼。

我很難想出一種具有所有這些功能的語言。這裏有一些附近的語言:

  • C++有不同的自動內存管理的一切,再加上它允許獨立的功能。然而,C++泛型機制(模板)並不適合心臟,它還不支持模塊化類型檢查。比Java更具靈活性,但也有更多的方法可以讓你脫穎而出。謹慎使用。

  • Modula-3具有上述所有功能,但它本質上是一種死語言,再加上像C++一樣,沒有對泛型進行模塊化類型檢查。

  • 我對埃菲爾不夠熟悉,能夠做出很好的比較,但我認爲這值得深入研究。

  • 德爾福也可能值得研究。除了泛型以外,它似乎具有一切以上的內容。它主要是一個專有的Windows環境(以前稱爲Object Pascal),但似乎存在支持Delphi的開源「Free Pascal」編譯器。

  • 有許多面向對象的語言具有自動內存管理和動態輸入,其中可能會突出顯示ruby,Python和Smalltalk。這些都沒有很好地和可靠地編譯成獨立的本地機器代碼,儘管所有這些都試圖進行某種形式的實驗性編譯。而且它們都是動態輸入的,這與您以前的習慣完全不同。

如果我處於您的位置,我可能會繼續使用Java並承擔一定的逆向工程風險。反編譯器並不像你想象的那麼美妙,而且它們也不會生成可以大大維護的代碼。但是如果你真的想要生成本地機器代碼,我會調查Delphi和Eiffel。 (I  我自己會使用Modula-3,但那是因爲我曾經投入了大量的精力來學習它,它是一個設計良好的語言,但用戶社區已經消失,我認爲這是一封死信。

相關問題