How do you handle DLLs? Put a copy of every DLL that your app links with in the app directory? How about the DLLs that they link to? Oh, you want to have a common place to keep system DLLs so they don’t have to be in every app dir? What do you do about apps that need different version of a system DLL? (It’s called DLL Hell).
–Point: How about letting the admin user decide? A properly written dynamically linked application doesn’t -care- whether the DLLs it uses are in the application folder or elswhere in the path. So let the -user- make the choice.
–Oh, and BTW, what’s a “System DLL”? I have never seen an app break because it needed a different version of Kernel32, User32, etc. Only because Microsoft arbitrarily decided that MFC42.DLL, COMMCTL32, half of Internet Explorer and Media player are “System” DLLs do we have most of these DLL issues.
How about newer apps that communicate with other apps (photoshop and a scanner control app)? How about all of those COM interfaces that let apps bind at run-time? How do I find RPC functions in a common place?
–Same way they always have. Look in the system configuration files and environment space. MS doesn’t have a lock on scanners and inter application communication, and they didn’t invent RPC.
I think that if you go back and substitute a substantitive app, perhaps even a browser like FF, you either have a huge app directory filled with everything needed to implement modern componentized applications, or you have something like the registry that can be located by any app and queried for the location of common shared copies of things.
–Point: actually, any number of “substantive” apps, including Firefox, Thunderbird, OpenOffice, MySql, Apache, the GIMP, and hundreds of others DO NOT REQUIRE INSTALLATION…at all. They come with installers, which allow you to perform optional tasks, such as select components and register file extensions, etc. But they work
just fine being copied rather than installed. Check out PortableApps.com; this lets you carry several “substantive” apps around on a 2 GB thumbdrive, with room for over 1 GB of data. (Yes, I know the default uses an install; my point is that it’s not impossible to make copy-only apps; it just requires you to try)
Do you really want to download 100 or 200 mb install packages that have all this stuff in them? As bad as the registry is, the world of .rc (er, .ini) files is as archaic as the isolated apps that used them.
–That’s also unnecessary. If a shared component exists, use it; if not, disable the function that uses it. And, in fact, MS is shipping larger, not smaller packages.
–I favor something the Open Source community is doing: multiple download links, on the order of “If you already have Gtk/Java 1.4 installed, you can download this. If you don’t, download this, which includes everything.” Simple, direct…all it requires is treating the user like a reasonably intelligent person, not a feebleminded click-monkey.
Myself, I kinda like being able to drag-n-drop things in the GUI, mash up some COM components into a new app without rewriting everything from scratch, and have my Java call C++ functions from a DLL that is common to some functional domain.
Does anyone not use these kind of apps? If not, other than writing bash scripts or perl, how do you create extensible, versatile tools to solve your problems?
–Point: Libraries, static and dynamic,a dn decent tools; that’s it. Check out some of the non-MS things out there. RubyGems, Gtk, a lot of C libraries and a whole slew of reusable components. MS didn’t invent code reuse, and they haven’t perfected it.