views:

888

answers:

8

Does anyone know of a good software development framework or similar that has the following properties?

  • Cross platform: it should be runnable on XP, Vista, OSX and common versions of Linux (such as Ubuntu and Kubuntu).
  • No installation: Be able to run the software from a USB stick without having to copy anything to the host machine.
  • Have good GUI support (this is why this question doesn't give a suitable answer, as far as I can tell).
  • Permissive licensing such as LGPL or BSD or such.

Among the softer requirements are having a set of abstractions for the most common backend functionality, such as sockets, file IO, and so on (There is usually some platform specific adaptations necessary), and supporting a good language such as Python or C++, though it is usually fun to learn a new one (i.e. not perl).

I think possible candidates are Qt 4.5 or above (but IFAIK Qt software will not run on Vista without any installation(?)), some wxWidgets or maybe wxPython solution, perhaps gtkmm. The examples I have found have failed on one or another of the requirements. This does not mean that no such examples exist, it just means that I have not found any. So I was wondering if anyone out there know of any existing solutions to this?

Some clarifications;

  • By "framework" I mean something like Qt or gtkmm or python with a widget package.
  • This is about being able to run the finished product on multiple platforms, from a stick, without installation, it is not about having a portable development environment.
  • It is not a boot stick.
  • It is ok to have to build the software specifically for the different targets, if necessary.

The use case I am seeing is that you have some software that you rely on (such as project planning, administration of information, analysis tools or similar) that:

  • does not rely on having an internet connection being available.
  • is run on different host machines where it is not really ok to install anything.
  • is moved by a user via a physical medium (such as a USB stick).
  • is run on different operating systems, such as Windows, Vista, Ubuntu, OSX.
  • works on the same data on these different hosts (the data can be stored on the host or on the stick).
  • is not really restricted in how big the bundled framework is (unless it is several gigabytes, which is not really realistic).

It is also ok to have parallel installations on the stick as long as the software behaves the same and can work on the same data when run on the different targets.

A different view on the use case would be that I have five newly installed machines with Vista, XP, OSX, Ubuntu and Kubuntu respectively in front of me. I would like to, without having to install anything new on the machines, be able to run the same software from a single USB stick (meeting the above GUI requirements and so on) on each of these five machines (though, if necessary from different bundles on the stick).

Is this possible?

Edit: I have experimented a little with a Qt app that uses some widgets and a sqlite database. It was easy to get it to work on an ubuntu dist and on osx. For windows xp and vista I had to copy QtCored4.dll, QtGuid4.dll, QtSqld4.dll and mingwm10.dll to distribution directory (this was debug code) and I copied the qsqlited4.dll to a folder named "sqldrivers" in the distribution directory.

A: 

Well, it depends on what you mean by 'package'. Kylix came close to being such a thing. It was QT based, and it allowed you to write once and compile for Windows + Linux. However, it was not an open source solution.

sybreon
Ok, I mean "package" as in "framework", I think. I'll change it.
FeatureCreep
A: 

This might not be crossplatform, but is maybe even better, it dont even use the platform : linux on a stick :-)

The subtitle is

Take your Java workspaces wherever you go on a USB key

Here with java and eclipse, but nothing stops you there of course.

http://knol.google.com/k/inderjeet-singh/installing-a-ubuntu-hardy-heron-java/1j9pj7d01g86i/2#

Peter
Thanks. I have added some clarifications to the question.
FeatureCreep
+2  A: 

You can look at Mono it cross platform, has GUI (GTK+, or Winforms 2.0) and I can execute code without installing.

Shay Erlichmen
Thanks. Do you know of any examples of such a no-install software? I.e. that does not need a mono runtime to be installed on the target and does not link the runtime statically (since this seems to require different licensing)?
FeatureCreep
The reason I ask is that I've been googling but not found any examples.
FeatureCreep
FeatureCreep
+4  A: 

You mention wxWidgets but dismiss it as failing at least one of the requirements.

I don't know what your requirements are and in what way wxWidgets wouldn't work for you, but IMO it does fulfill them:

Cross platform: it should be runnable on XP, Vista, OSX and common versions of Linux.

It does run on those platforms, but "common versions of Linux" isn't good enough, as you can never be sure that the necessary GUI libraries for wxGTK (which should not be linked to statically) will be installed. This is however a problem for other solutions as well, unless you plan to put everything onto the stick.

No installation: Be able to run the software from a USB stick without having to copy anything to the host machine.

See the previous point, you would need to specify which libraries are needed on Linux. Also you could specify at build time not to use some of the system-provided libraries (for example for graphics, compression, regexes) but to use the wxWidgets-internal libraries instead.

Have good GUI support

Check.

Permissive licensing such as LGPL or BSD or such.

Check. You can statically link wxWidgets into your application too.

supporting a good language such as Python or C++

Supports both, and there are bindings to other languages as well.

having a set of abstractions for the most common backend functionality, such as sockets, file IO, and so on

It does have some abstractions like that, but you can link to other cross-platform libraries as well.

We use wxWidgets for FlameRobin, a graphical administration program for the Firebird SQL server. It has active ports to Windows, Linux and Mac OS X, and has been compiled for at least some BSD variant and Solaris as well. It definitely runs from a stick on Windows, I haven't tried with Linux or Mac OS X, but I don't see why it shouldn't there too.

mghie
Thanks. Good info. Actually, I don't mind having "huge" bundles on the stick since they are pretty cheap these days. I am trying to minimize the need/risk of having to install anything on the target. I'll add some sort of use case to the question.
FeatureCreep
I still don't see anything in your requirements that would eliminate a wxWidgets solution. What I mentioned as problematic areas in my answer is most likely problematic with other solutions as well, if you intend to integrate with the Linux desktop. With every solution you will have to define some baseline requirements for the target OS to run on.
mghie
I see. Do you think it possible to bundle the wxGTK libraries to avoid the installation problem? Or am I misunderstanding your argument?
FeatureCreep
Sorry, maybe I'm not clear in my answer. You can link wxGTK statically, but you shouldn't (maybe even can't) statically link the GTK libraries itself. That would be a problem for all frameworks using GTK in order to have native look and feel on GNOME desktop. And anyway, we link wxWidgets statically for MSW and Mac OS X, but don't do so for Linux, as it is more or less part of the OS for distributions like Ubuntu, and you would want to make sure the app uses the latest and most bug-free version. All in all, maybe Java simply is a better fit for your requirements.
mghie
Ok, I think I get what you mean. Though for some applications it is good enough if the software works as intended for that particular release and that, except for pure compatibility issues, there is no need to run the latest and greatest of the libraries. Maybe there is some fallback strategy that can be used.
FeatureCreep
+4  A: 

Java.

  • It has GUI support.

  • It provides your network/file/etc. abstractions.

  • It is cross-platform. Most platforms you can think of have a JRE available.

  • No need to install a JRE. Most users probably already have one, and if not, you can run the appropriate JRE right off the stick.

  • You can provide several startup scripts for various platforms to run the app under the appropriate JRE.

Adam Jaskiewicz
Thanks, this is worth looking into.
FeatureCreep
+1. Only option I can think of really. Mono has some minor issues sometimes (dunno if this applies if you actually DEVELOP the app in mono)
Hugo
I've not played with Mono, but I'm wary of how "compatible" it really is.
Adam Jaskiewicz
+2  A: 

Something else to consider is HTML+Javascript. :D

Fowl
Do you mean some sort of serverless execution i the browser only?
FeatureCreep
Yes. It is *very* widely supported (if varied) platform, but you'll probably have trouble living inside the sandbox. You can do a lot though even without a server. A server helps though :D
Fowl
A LOT of programming requires, but really 100% cross-platform. Good one.
Hugo
A: 

I asked a similar question in this link http://www.24hsoftware.com/DevelopersForum/CrossPlatform-C-Library.html and the best asnswer seems to be QT.

I have started using QT, but it is not as easy as I expected mainly due to deployment problems due to the DLL hell, Winsxs hell and manifest hell.

Mike
I also tried Qt, and my experience is the opposite. For windows I just plopped the relevant Qt dlls into the same directory as the app and the sqlite plugin that I needed had to be placed in a plugin directory. This worked on osx, ubuntu, xp and vista. I'll update the question with some more details when I get the time.
FeatureCreep
A: 

Tclkit is a single-file, self-contained Tcl/Tk system. The mac version I have is about 3.8 megs. You can get a version for just about any modern OS. I carry around a thumb drive that has mac, windows and linux binaries so I can run my scripts on any platform. No install is required, just copy one file wherever you want.

The most recent versions of tcklit use native, themed widgets (though, on *nix there really isn't a single "native" set of widgets...)

Bryan Oakley