- Feature Articles
- CodeSOD
- Error'd
- Forums
-
Other Articles
- Random Article
- Other Series
- Alex's Soapbox
- Announcements
- Best of…
- Best of Email
- Best of the Sidebar
- Bring Your Own Code
- Coded Smorgasbord
- Mandatory Fun Day
- Off Topic
- Representative Line
- News Roundup
- Editor's Soapbox
- Software on the Rocks
- Souvenir Potpourri
- Sponsor Post
- Tales from the Interview
- The Daily WTF: Live
- Virtudyne
Admin
Admin
Admin
Admin
My point is that there is a vast difference between these two scenarios:
Scenario 1: I install app A. It works fine. Six months later I install app B. It fails.
Scenario 2: I install app A. It works fine. Six months later I install app B. App B works fine, but now app A fails.
If an app fails, the reasonable thing to do is to look for a bug IN THAT APP. To say that any time an app fails you have to look at all the apps on your system to see what damage one app might have done to an unrelated app creates a nightmare scenario. It's often tough enough to track down a bug in an app. Never mind trying to track down a bug when it could be caused by seemingly-unrelated apps anywhere on your computer.
Suppose I install app A, which happens to be my year-end account reconciliation program. Then six months later I install app B. App B replaces a DLL used by App A. But I don't try to run app A again for another six months, until the next year-end cycle hits. And then it fails. How in the world can I figure out that the problem was that app B trashed one of his DLLs?
I had a case once where an app trashed another app's DLL. And I was lucky that I happened to run the victim app the day before installing the new app and again the day after, so I at least could say, Hey, what changed yesterday? But if there had been a long gap in there? How would I know?
I would think the goal should be to contain the damage that any error can cause.
Admin
[quote user="Capitalist"][quote user="jay"]Search speed: That depends on how you search for executables. In Windows and Linux GUIs, you don't type in an app name and the OS searches a couple of directories for it. You have icons or shortcuts for all your apps that include the full path to the executable. There is no search so it's a non-issue.[/quote]Oh yeah, and all scripts include the full path to all programs used (and the path may include version numbers, may be translates or arbitrarily renamed by the user). That would be fun.[/quote]
You do NOT specify a full path for every file you reference in a script, either at each reference, or by setting appropriate paths or shell variables? Wow, I always do. Otherwise you run the risk of other apps creating files that coincidentally have the same name as yours and suddenly your script stops working.
[quote][quote]IMHO, each app should have its own directory. Then have one central, shared place where we list all the apps, that would basically have just an app name, the path to the executable, and a path to an icon. I think that would be it. Maybe some security-related info or some such. So yes, an install would have to update that central list. But that would be far simpler than the many places that an install updates today.[/quote]
Even the latter bit is doubtful. For an (un)installer it's generally easier to place/remove a file in a unique location (/usr/bin/foo) than adding removing an entry in a central list which at least involved some amount of locking and synchronization. In fact, most Linux distributions have broken up many files in /etc which would have to be writable by different package installations into directories. E.g., instead of a single crontab that every package that needs a cronjob writes itself into (and removes itself from when uninstalled), there's now a directory where each package that need it creates/removes a file with a unique name (usually the package name). [quote]
That depends on how the central list is managed. Sure, if it's a flat file and each installer updates the flat file however it pleases you'd create the danger that two installs could collide or an install with a bug could trash the list. But I can think of numerous ways to handle it cleanly. It could be a directory into which each install drops a file with the metadata for that app. That would create no issues that do not exist now. If it's a single file there could be system calls to update it. Windows 3.1 did that with a flat file; current versions of Windows do that with the Registry. Either way, the OS is then responsible for handling locking, queuing, whatever, and there's one place to manage to make sure that is done right.
[quote][quote]RE networks: Sure, some files should be accessible to anyone and others only to certain users. But it's hard to see why some pieces of a single app need to be available to different users than other pieces. Why would someone need to access the documentation for an app if they can't run the app?[/quote]
That's not really what I said, read it again. E.g., take an application, perhaps a flight simulator, with a relatively small executable but huge amounts of data that you want to use on a heterogeneous network, i.e. a network of different architectures, let's say they're diskless machines with a central file server. You'd want to share the data for all the machines, but need different executables for the different architectures. With the "classical" directory layout, that's easy: have /usr/share shared, and a different /usr/bin and /usr/lib for each architecture.[/quote]
Oh, sorry, yes, I missed your main point. But in any case, I agree that we routinely need to separate code from data for a variety of reasons: The same app will often run against different data files, and we might want to run the same data through different apps. Today I want to process my source code with a text editor, tomorrow I want to run it through the compiler, the next day I want to run a search program against it. We can't assume that there is a one-to-one relationship between code and data. So yes, apps from different architectures might want to access the same data.
I guess I can imagine cases where you could have a Linux version of an app and a Windows version of the same app, and you want them to share help screens or configuration files or some such. But I think that would be a fairly rare case. I'd want to allow for it, but I don't see designing your structure around that odd case when it makes the normal case complicated. Let the odd case be complicated.
Admin
Bummer, I apparently messed up matching the quote tags in my previous post. Sorry.
Admin
Admin
Hey, me too. I wouldn't dream of asking someone to submit without getting a preview.
Captcha: inhibeo. Wrong, TDWTF, wrong. Not me.
Admin
There's no surer sign of a feeble mind than that "Lorem Ipsum" crap.
Admin
I'm not convinced. You admitted the stupidity of such a scheme in your post. I already knew that just randomly making registry keys / folders all over the place, maybe registering some COM objects, etc. was a stupid application install strategy. Don't tell me it makes sense. Yeah, some shit would have to change to do things correctly, i.e. within a single folder in the file system... these things should change, then.
There are general-purpose OSes that work this way. I think Apple uses this installation strategy for its desktop computers.
You're assuming way too much. I wrote an uninstaller once. It was for a commercial product. It didn't do any of the crap you're describing. It did a deltree... maybe. I'm not sure my uninstaller did anything but just spin the progress bar in the user's face for a few minutes. Why would I have wasted my time writing what you describe? The only reason I would ever have wanted to facilitate uninstallation would have been to reinstall our product... some IT types seem to think that uninstall/reinstall is a good approach. So, I just made the uninstall process do nothing, and made the installation process repeatable ad infinitum. This way, if the tech forgets his precious uninstall, it's no issue. This was the best design from my employer's standpoint.
I don't think there's a great answer to this design problem. So, the best design is to add shit up as needed.
Admin
Admin
Is this some puny example?
Admin