Enthalpy
27th January 2009 - 05:24 PM
Hi there!
Again, a topic I published here has disappeared. Same title as now, posted on 11th of December 2008 in the Technology forum, as one may see by googling for
"Determine Software Compatibility Automatically"
and then clicking on "in cache".
But never mind, I have timestamped copies of it, and here is the copy.
Enthalpy
27th January 2009 - 05:26 PM
Hello everybody!
Here is again the description of a software I would like to have. So if it already exists, I would appreciate to know its name and address. If it doesn't, maybe someone feels interested in programming it - it should be useful to many people.
You probably noticed that telling if an application can run on a particular OS installation - or what should be added to the current installation to run the application - isn't obvious. When you download the application from a website, the OS (= Operating System) requisites are generally false. At installation time, the application should determine by itself if it can run in the given environment, but many applications don't do it properly. And things get worse with an older OS like Win95, for which applications aren't tested at all: just a matter of luck then. The worst case was with Win98-98se, where applications changed the OS dll in an uncontrolled way, making the OS incompatible with itself.
Though, a relatively simple software could determine this compatibility quickly and with a reasonable certainty. It would essentially look at what entry points of what libraries the application calls, and compare them to the ones available in the current OS installation.
In a simpler version, the software would do nothing more than compare entry points. Nothing special: existing softwares, like FileAlyzer and many others, already extract the import and export tables of executable files. So the only addition would be to find the location of the exporting file and check whether it exists and has the requested entry points.
I wrote only "a reasonable certainty" because some applications call certain entry points if they run on a recent OS but refrain from calling them if they detect an older OS. In such a case, the analyzer may tell "XP probably requested" despite the application includes perfect workarounds to run on Nt4.
A refined version - which can be programmed later based on the simpler one - would bring built-in knowledge of which library exports what entry point. This would have the huge advantage of telling the user "you need to add WMI to run this application" (or dX9.0c or mdac 2.5sp3 or DotNet3.0 or mfc42 or vbscript5.6 or Gdi+ etc). Or even better, "give up, this applications needs dX8 which doesn't fit on your Nt4".
The number of existing libraries and successive editions is amazingly large for Windows (less for Mac OS and as big for Linux?) and they evolve quickly, so the built-in knowledge is a bit heavy and must be flexible - I imagine a text file for each version of each library. However, it can be simplified a bit.
For instance, the last Service Packs are the best ones for Nt4 and W2k, so the analyser only needs to compare the application's import table with the last possible SP (or the best possible Internet Explorer for Win95 and Win98, as IE serves as a SP there) and with the installed one. Similarly, knowing dX6 and dX8.0a and dX9.0c and the current dX10 is enough, intermediate versions would bring little.
This makes still many libraries (100?) but on the other hand, extracting the export list from each one will be done automatically. It could even be done by the users in the co-operative development of a free software.
Further refinements are possible, like "the language of your ComCtrl.dll doesn't match" (don't laugh, this is no fun) or "the application can run only from an administrator session" or "you should try the Win98se compatibility mode".
Programming such an analyser isn't very complicated. The amount of work is a bit much for one single person, but it could be a nice collective project for a school or university: one group programs the entry point extraction and comparison, another investigates all versions of Java+JScript+Vbscript, another all SP and IE versions, yet another all OpenGL and dX and video driver versions...
So, does someone know such an analyser or is willing to program one?
Marc Schaefer, aka Enthalpy
Enthalpy
27th January 2009 - 05:42 PM
An example of a tool that looks for library calls: Dependency Walker.
Available for free at
http://www.dependencywalker.comHowever, it isn't quite what I'm looking for, as it checks for libraries available
in the current OS only - but when browsing with my online Win 2000, I want to know if a software will run on my offline Win 95. And it doesn't seems to
check the entry points of the libraries against the application's needs neither - if I got it properly.
Imagine
typical uses: you get a patch for Mdac2.53, will it fit on Win95b? Or you find an older version of Foxit or 7-zip or XnView, their installers don't check the Windows version, they seem to run on Windows Me, but is it safe? And does the free game for Xp run on Win 2000? Or even better: yes, Aida would run on your Win95b, but you have to add Wmi.
That's something I'd enjoy to have. It could be useful to developers as well, for instance: O yes, my application needs Msvcrt60, shall I distribute it for older Windows or do they all have it?
Enthalpy
1st March 2009 - 11:36 PM
I didn't search that much, but it seems that the piece of software I'd like to have isn't immediately available.
I did see programs that check compatibility of applications with OS at Microsoft, but...
- They only search for applications known to be incompatible
- Guess what? They only check if and how you can upgrade your OS, not if and how an application can run on your older OS.
Which isn't that big a surprise, after all.
So maybe we really need someone willing to program such a software. I feel it would be really useful, both to software users and to authors.
Granouille
1st March 2009 - 11:42 PM
Watch out! Philip347 will accuse you of something!
On my Linux system, dependencies are checked automatically when using the package manager.
Microsoft's stuff is a crap-shoot at best... Best luck!
Enthalpy
12th May 2009 - 04:58 PM
A check-at-installation is nice, and application installers were supposed to do it on Windows as well (they didn't, especially in the Win95 era), but it won't cover every use I hope from the desired programme.
For instance, when surfing with Win2000, I'd like to download an older version of an application or a driver, and check immediately if I picked the version that will fit on my offline Win95. So the compatibility checker shall work for an unavailable machine, not just on the current one.
This is important for software developers as well, though they already have other tools.
-----
A nice extra working mode for the compatibility checker could be to parse all software on a particular machine - OS and applications - and detect all incompatibilities. For instance between the Dll of Win98...
In such a mode, I'd appreciate a synthetic diagnostic, like "VBRun is missing" or "you need a newer DirectX" or "impossible on your Win Nt4", or at least "many entry points are missing in Advapi32.dll", instead of a list of 200 missing entry points in a Dll.
For that again, the compatibility checker would better have some knowledge about existing bits and pieces of Windows.