views:

344

answers:

9

Hi guys,

I had posted a question a few days ago and thanks a lot to those who already responded. I am reposting the question because it seemed like I needed to clarify our requirements. So here it goes in more detail.

I am trying to get a very small desktop app built - something that can be downloaded by people very quickly. I am trying to decide whether i shd build it in .NET or Java. I have two objectives: 1. Very quick download 2. Targeting the largest set of users (IN THAT ORDER)

I know Java will be cross platform, but if a lot of Windows users do not have JRE installed on their computers, I am told they will need to download some 15MB of JRE software to make this app run whereas .NET could be pre-installed in most windows machines.

As mentioned, a small, very quickly downloadable app is more important to me than a cross platform app. So I want to go with the platform that is pre-installed in the highest number of computers, so that my users just download my app without also requiring an additional download of the platform itself (JRE or .NET). From that point of view, which platform is pre-installed in more machines? Java or .NET?

Does anyone know what percentage of Windows users do not have JRE on their machines? And what %age of Windows users have .NET pre-installed?

Thanks.

+7  A: 
  1. Very quick download
  2. Targeting the largest set of users (IN THAT ORDER)

1st, as you know there is what is called java applets, so it is quite common to download small applications from the web, also, jar are allready compressed files (I don't know about CLI exes)

2nd, if you want to target the largest set of users, forget about ".Net", because it is availible to windows only users and not Mac OS X or Linux users... So, automatically you ignore these potential users.

Artyom
But is the absolute number of Windows users not so high that even if you ignore the Mac OS X and Linux users, you could still end up with a higher number of total users? Forgive me if I am asking very basic questions, I am not from the software background..Also, in the java app, will the users who don't have it not need to download JRE which is about 15MB or so in size?
It is not so high, there is about 10% (the actual number depends on how do you count and what are you sources and who counts) of non Windows users. This number is only growing... So do yourself a favor, do not ignore them ;)
Artyom
A: 

How about Silverlight? It will run on Windows, Linux, and Mac and is only about a 4mb download from the web (if they don't already have it). It can run as a web app or a desktop app (Silverlight 3 only) and has much of the power and advantages of using the full .NET framework.

NotDan
-1 for "It will run on Windows, Linux, and Mac" not quite true, the ports of Silverlight with Mono are poor and almost not available for most of users.
Artyom
Also not much you can do when you want to develop an effective Desktop app. Simple Twitter app is difficult to develop in Silverlight as there ios lot of limitations.
Shoban
Everything from .Net is meant to be Windows-only. Strange for a Virtual Machine, but it's a tactic to tie people to Windows. Microsoft owns the technology, so it's their decision. .Net clones in Linux exist, but they are -to say the list- very controversial within the community as they expose Linux to future patent threats from Microsoft for the .Net parts that are kept closed. Besides that, any clone under these rules is just playing catch-up and by definition outdated and incomplete.
+3  A: 

(personal opinion) it will be faster to develop your application in .net (dons armor).

Additionally, the JRE is an important consideration. It depends on who your target audience is. Higher on the tech-scale, the people are more likely to have JRE and/or a non-windows environment. Lower on the tech-scale, people are more likely to have windows, possibly without JRE.

Therefore, if it's a program for 'joe blow' then definitely go .net. If it's for 'techier' people, i'd say it comes down to your personal preference, but java will probably reach a wider audience.

Luke Schafer
+3  A: 

My personal opinion. I would go and do it in .net. This is from my own experience. I developed TweetMyPC in .net (very small desktop app) and almost crossed 3700 downloads in a month but I received only 5 - 10 emails asking me for a Mac APP and very few for Linux App.

Edit: I understand that these emails were sent by people who actually cared about my application. Others would just ignore. I am not against mac or java app development ;-) I just wrote about my exp.

Following are the reasons for which I chose .net

  1. Less head ache in installation (My personal experience - Most of the time installing a Java app is a head ache when you dont have jre. I always get confused) So instaling the application will be easy for a normal PC user.

  2. Faster Development. I would suggest you to target one platform now. One more reason for me to use .net was because the app was mainly targeted for PC (i.e TweetMyPC ;-) ) My application's functionality was to restart/shutdown and I cannot make it cross platform in one single app. So I targeted Windows users.

  3. ClickOnce : This will be a very useful feature if you are planning to add more features to you app in the future. In my case my app became very popular(Which I never expected) but now I have no idea how I will inform my existing 3000+ users about the update.

Shoban
"I developed TweetMyPC in .net (very small desktop app) and almost crossed 3700 downloads in a month but I received only 5 - 10 emails asking me for a Mac APP and very few for Linux App." Interesting that you don't tell us the other differences between the apps (either features or marketing).
Matthew Flaschen
I dint want to use this answer to promote my app ;-) No marketing used. I just tweeted about it in Twitter (i had 200 followers) and it was retweeted a lot (about 1000 times). Went into lifehacker, gizmodo etc. The appis hosted in codeplex which makes project management as well easier.
Shoban
Just for the record. Those emails were from people who cared enough about your app to actually ASK for it. Most mac/Linux people just shrug and say, too bad.
Thorbjørn Ravn Andersen
Several comments about Linux/Mac requests. Most of Mac/Linux users are aware that it is almost impossible to port .Net app to their OS. So they just don't ask.
Artyom
+8  A: 

If you go the route of .NET Framework, the issue will probably be which version of the framework you'll be targeting.

For example, if you want to target for .NET Framework 3.5, although many people may have it installed via automatic updates, but some probably won't. In my case, when I purchased my Eee PC last summer, it came only with .NET Framework 1.1 installed.

When I wanted to go upgrade to .NET Framework 3.5, the installer was 2.7 MB -- that's nice, except, it's an online installer, and the Microsoft Download Center saids that I may need up to 500 MB of free space. (And the offline installer is 197 MB!) That was a minor problem because the Eee PC's primary partition is only 1.3 GB free in factory-installed condition.

On the otherhand, the newest version of the JRE is 15.5 MB download, which includes everything -- not just the online installer -- it's an offline installer. And the installed JRE takes up about 90 MB on my machine.

With that in mind, yes, it's possible that the .NET Framework may be present, but it's also possible that it will require a fairly large download to get going, if it isn't present, especially if the version present on the target system is very out of date.

With Java, the download is at most 15.5 MB and that's the whole deal. Moreover, with the new Java Kernel, it is possible to get the JRE incrementally via an Download Manager, with the base download at about 2 MB. (Read more about it here, here and here.) The download page for the "Windows Kernel Installation" is listed at 0.22 MB. (Which probably means it'll still need to go online and download up to 2 MB of required files.)

If the difference between the best case and worst case scenario is 0 MB vs. 200 MB, that seems very unpredictable for the experience that the user will face at install time. That's a difference of explaining to the user that "the installation will be complete in a few minutes" to "the installation could take up to an hour."

With the difference between 0 MB or 15 MB, it might not be great, but it isn't very bad, especially with an option for a potential online incremental installer only requiring a 2 MB download to get started.

After answering this question, I'm starting to think that the Java runtime isn't as huge as I used to think, now that I've actually taken the time to look at this issue.

coobird
+2  A: 

No one seemed to answer your question about JRE install base, though many people agreed with your assumption that JRE deployment is very low.

So how about some actual data? According to TheCounter, 92% of browser users have a JRE. Of course, you would be wise to seek as much data as you can. But this indicates your worries may be overblown.

More importantly, though, there are very few users with either the latest version of .NET or the latest version of the JRE. So if you plan to use the latest features, your users will likely have to download something regardless.

Matthew Flaschen
I seriously doubt 92% have a JRE, soemthing is wrong with those numbers. When we used an applet in our latest project we received numerous support calls everyday that they couldnt run it. We switched to Flash/AS3 and we very rarely get anyone that have an issue with running flash.
PQW
+1  A: 

Consider using Flash instead. Extremely large market penetration, easy+small install, and well suited for small programs

Thorbjørn Ravn Andersen
AIR specifically is for desktop apps and has similar functionality to Silverlight On the Desktop.
Soviut
except for the small install :-S
Thorbjørn Ravn Andersen
+1  A: 

I understand that you requirements are:

  1. Very quick download
  2. Target Largest set of users

As others have mentioned, I think it is very difficult to accurately gauge all of the variables involved. Is it targeted at a high- or low-tech audience? What does it do? You indicate that it could be cross-platform, but you do not care if it is. That would indicate that it is not terribly platform-specific. You may could even go a completely Web-based route.

If your requirements were reversed:

  1. Target Largest set of users
  2. Very quick download

I would say go with Java. Specifically, target Java 1.4.2 or Java 1.5 as the lowest version. This would get you on Mac/Windows/Linux and several other platforms for nearly free (depending on the application features, of course). So this would target nearly 99.9% of users out there...which is better than 90-ish%. Again, this was if you were targeting the largest audience possible.

The reason I reversed the requirements, was because I'm not certain that you can confidently say that your choice of platform will always result in a very quick download for most users. I primarily do Java development. When I recently created a Java applet as part of a project, I did run into a surprisingly significant number of users not having Java and needing to install it. But once installed, it was generally pretty smooth sailing. Depending on the version of .NET you intend to target, your results may be similar.

I guess my suggestion would be:

  1. Flash if you need a huge audience and small download
  2. .NET if you do not ever plan to support other platforms
  3. Java if you want to support as many platforms as possible, and Flash isn't able to meet your needs

I have never developed anything in Flash or AIR, but if your app fits within the capabilities it offers, it may be worth looking into.

monceaux
We just hacked together a Java version on a Windows machine, and for the life of me I can't get it to run on my Mac (it is running on Windows). I am not from software background, but I am not sure if I am missing something really basic or do different versions of Java pose as much of a compatibility issue as .NET. Thoughts?
Versions can make a difference. If you compiled the application on a Windows system with Java 1.6 bytecode generation selected, it will generally fail on any Java version below. You would need to specify that it compile it with 1.5 bytecode. There are settings in NetBeans and likely Eclipse for this in the properties of your project. You use the -target option to javac to set it to -target 1.5 for example. Only Mac OS X Leopard officially supports Java 6. If you are still running Tiger, it could be the source of your issue. Just recompile with the target tag and see.
monceaux
A: 

Having been burnt hard with Java on the desktop, I'm going to say stick with .NET or flash. Even the latest javaFX, looking at the demo app (and Sun has done so much work you get a sense of how bad it was before) it still took two security dialogs to play a game of breakout. They just are not there.

But target .NET 2.0 if you go that route, to avoid download issues as much as possible.

Yishai