Slashdot Mirror


Microsoft to End DLL Confusion

MankyD writes "ZDNet is reporting that Microsoft is attempting to do away with DLL version conflicts in its next version of Windows with a technology it calls 'Strong Binding'. When new programs attempt to overwrite old versions of DLL's, the Strong Binding will index the DLL's and allow the programs to reference them by a unique ID, rather than by file name. Hopefully it will prevent a new program from breaking an old one. I would think this might add to DLL clutter however."

630 comments

  1. Auto-DLL Managment? by MSTCrow5429 · · Score: 5, Interesting

    Sounds like a great idea. While there will be more DLLs in the registry, at least each and every program will have it's "own" DLL and can't be broken. Although I wonder if the software will default to the newest DLL and then go back if it doesn't function correctly.

    --
    Slashdot: Playing Favorites Since 1997
    1. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 3, Interesting

      What you don't realize is that the process will also prevent a 'modified' (read:hacked) dll from operating as well.

      Those of us who use MS products, and rely on modified versions of dlls for proper functionality, (Macrovision removal in powerdvd, for instance) will be screwed.

    2. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 1, Informative

      Old hat, already been done. See IBM MVS LPA, CLPA, and VLF , Virtual lookaside Facility (handles any object not just dlls. Oh what about the hyperthreading bug for XP sp1.

    3. Re:Auto-DLL Managment? by bourne · · Score: 5, Insightful

      Sounds like a great idea.... each and every program will have it's "own" DLL

      Call me old-fashioned, but I thought the point of dynamic libraries was to reduce program size and duplication of effort by allowing multiple programs to load common functions out of libraries.

      So, it's a great idea, insofar as it completely negates the advantage of having DLLs in the first place. Why don't they just compile statically instead?

    4. Re:Auto-DLL Managment? by n3k5 · · Score: 5, Interesting
      ... at least each and every program will have it's "own" DLL ...
      Ah, yes, what a wonderful idea; let each and every program have its own DLLs, at the mere cost of rendering the whole DLL system totally useless.

      You see, if you just wanted to split your executable code over several files for one reason or another, you could include DLLs with your program (in its own directory) ever since. Those wouldn't ever be changed by Windows, but this has nothing to do with the registry. The whole idea behind registered DLLs that reside in a centralised place is that you have shared libraries, that you don't have to store code used by several programs in multiple places, but only once, where you can do easy updates.

      However, now that there are so many versions of Windows out there, Microsoft is experiencing compatibility issues with DLLs and they're doing something about it. I'm not familiar with the details of their solution and don't want to say it's a bad one at all. But your ideas are a little too extreme; saving one copy of a DLL per program is just absurd.
      --
      but what do i know, i'm just a model.
    5. Re:Auto-DLL Managment? by master0ne · · Score: 1

      sounds like a DUMB idea to me, it would keep programs from being broken, but it would also expand the os size for every new version dll there is. not only would you have the most recent dll's on your system, you would still have dll's on your system that were recent ten years ago! More micro$uck BLOAT ware crap. also, how would you go about setting up a logical directory structure that would function and store these dll's? this would also expand the registry to an almost unmanagable point after only a few updates, and big registeries=slower computers

      --
      Noone writes jokes in base 13!
    6. Re:Auto-DLL Managment? by Badaro · · Score: 1

      Sounds like a great idea. While there will be more DLLs in the registry, at least each and every program will have it's "own" DLL and can't be broken. Although I wonder if the software will default to the newest DLL and then go back if it doesn't function correctly.

      Actually, AFAIK .Net Framework DLLs do not need to be put in the registry.

      []s Badaro

      --
      My sig became obsolete, and I lack the imagination to create a new one. :(
    7. Re:Auto-DLL Managment? by WindBourne · · Score: 4, Interesting

      While a sibling poster pointed out that the admin could change it, you have probably hit on where MS is going. I suspect that MS will simply drop the admin capability.
      The versioning problem could have been handled with an external nameing approach (name-version.major.mindor.dll) and then using a resolver program. They are electing to give an internal id which implies that dlls will not be in one place or will have different names. This will make it hard to change out dll or know which ones to transport.
      Actually, just thinking about it, I've heard that longhorn is supppose to have a sql based file system. It would make it easy to sux this into it and use the id as a way to find the dll. You will simply need to know it.

      --
      I prefer the "u" in honour as it seems to be missing these days.
    8. Re:Auto-DLL Managment? by AltControlsDelete · · Score: 4, Insightful

      I have not read the article, but I think this simply works by allowing different versions of the same DLL. If you have two programs that require the same version of the same DLL, they'll both use that DLL. However, if you install a new program that wants to install a different version of an already-installed DLL, that program will use its version of the DLL while allowing other programs to continue using the pre-existing DLL.

    9. Re:Auto-DLL Managment? by MSTCrow5429 · · Score: 1

      By using paranthesis, I meant to indicate that technically, not every program would have its own DLL per se, but rather would have a specific DLL linked to it.

      --
      Slashdot: Playing Favorites Since 1997
    10. Re:Auto-DLL Managment? by gilesjuk · · Score: 4, Insightful

      They're probably doing it to break WINE as well. DLL problems aren't that bad with Win2k and XP, system DLLs are protected and with XP you can go back to a restore point.

      If an app installer is so badly written that it messes up your installation then the software can't be much good either.

    11. Re:Auto-DLL Managment? by MSTCrow5429 · · Score: 1

      Thank you, I'm not up on the .NET framework. Where do the DLLs go though?

      --
      Slashdot: Playing Favorites Since 1997
    12. Re:Auto-DLL Managment? by Pxtl · · Score: 3, Informative

      I can definitely see that that is where this is going. Perfect example: XP is skinnable. But, only MS certified skins can be run on XP. MS has not made any avenues for making certified skins. The result? Download a hacked DLL and then use non-certified skins.

      There is a massive community of XP-Styles, all centered around a hacked uxtheme.dll. If Explorer specifically looks for a specific version of uxtheme.dll instead of the filename, they're SOL.

    13. Re:Auto-DLL Managment? by bourne · · Score: 2, Informative

      I think this simply works by allowing different versions of the same DLL.

      Right - given N programs using foo.dll, how many different versions of foo.dll do you expect will be needed? Based on my experience with Windows, I would expect somewhere between N and 2*N (allowing for "upgrades" of N[i] which won't remove the "old" DLL version.

      Yes, theoretically, you'll have a smaller number of DLLs than you do programs. Realistically, I don't see it happening. The various versions of Microsoft's XML DLL (which comes to mind because of the security patch which requires you to figure out which versions you have installed, which is always more than 1) illustrate this perfectly.

    14. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 2, Insightful

      Yes. It's amazing that MVS had concepts such as the Link Pack Area (LPA) and Link List Lookaside (LLA) over twenty years ago and OS designers are still trying to get to grips with essentially the same problem.

      There's still a lot of stuff in MVS (even base 3.8 circa 1980) that modern OS designers could learn from - but they think they have to invent it all.

    15. Re:Auto-DLL Managment? by Lord+Ender · · Score: 2, Insightful

      Yes but this raises a new security threat. Say there is a remote root hole in a certain DLL. If you get the newest version, some programs will still use the old DLL, witht he hole staying behind. That could be a big problem.

      --
      A slashdotter who didn't build his own computer is like a Jedi who didn't build his own lightsaber.
    16. Re:Auto-DLL Managment? by arkanes · · Score: 2, Interesting

      Unless the "unique id" is encrypted, both in the DLL and in the executable, and in the file system, with keys you can't recover, then it will still be possible to replace DLLs with modifed versions. It'll just be awkward enough that it (probably) won't happen as part of a program install.

    17. Re:Auto-DLL Managment? by cgenman · · Score: 2, Interesting

      Agreed. When I first saw this article last night, I immediatly thought they decided to can that archaic, unnecessary system. Obviously there is plenty of disk space. And the RAM savings exists but isn't significant either, as only static and not dynamic data is sharable. When was the last time you saw an executable that didn't contain every library known to man, and whose static ram footprint was over 1 meg? Now, compare that to the number of times your system broke / crashed due to a DLL conflict.

      Get rid of it already! This patchwork systeming is well, I guess it's putting a roof over my head. But it is also unnecessary complicating an already excessively unnecessarily complicated system.

      It really is getting time that Microsoft put windows in an emulator and re-wrote the functionality of the OS. It will never happen, but it is time.

      -C

    18. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 2, Interesting

      I don't know about their original intentions, but to me, I am still confused as to why windows programs even need to be installed. (Instead of just copying the directory.) Why do they need to write changes to the registry and put files in the system and system32 directories?

      Whoever thought up the idea of saving space with the registry, shared dll's and the whole idea of apps registering themselves with the OS should probably be dragged into the street in my opinion.

      I'm no programmer, that's for sure, but I just don't get how saving two megs of disk space per program is worth the hassle of this infernal registry and all the problems it creates and facilitates.

      Also, there are still some progs out there that don't need to be installed or have system dll's. Like trillian. If it can do all of the things it does, then when can't yahoo messenger, msn messenger, aol messenger install their apps without the mess? Sloppy coding? Because they hate users? I don't know...

    19. Re:Auto-DLL Managment? by LeftOfCentre · · Score: 1

      Developers like to make use of existing components, there's no use re-inventing the wheel over and over. Also, some development tools require functionality not delivered as standard with the OS, and require vendors to ship additional DLLs. There's nothing wrong with using existing components. However, I do agree with you that having to register components before they can be used is silly and has caused a world of trouble. There should have been another way for Microsoft to solve this.

    20. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      Is that really a surprise?

      Longhorn, SQL filesystems, Active Directory ... all sorts of things will be breaking WINE.

      It's not that that's anything new really, WINE has been "broken"* for years.

      * It runs some stuff, true, but still...

    21. Re:Auto-DLL Managment? by molarmass192 · · Score: 5, Insightful

      I really don't think WINE was high on their list of priorities here. I think their idea had several desired outcomes:

      1 - force all non-longhorn users to upgrade
      2 - force all software vendors to code to the new .NET API, and
      3 - integrate SQL*Server into the OS

      Also, imagine what a nice kick in the teeth to Java (which I'm sure is a bigger radar blip than WINE) this will be. I think this will backfire on them, lack of full backwards compatibility is *one* of the reasons why XP never took off. This one lacks any backwards compatibility so you can just extrapolate the barriers to adoption.

      --

      Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws-Plato
    22. Re:Auto-DLL Managment? by e2d2 · · Score: 4, Insightful

      They're probably doing it to break WINE as well. DLL problems aren't that bad with Win2k and XP, system DLLs are protected and with XP you can go back to a restore point.

      Gimme a break. DLL Hell has been a problem for a long long time so when they actually try and fix it they are now only trying to fix it to break WINE? That's a strech and I'm sure you know it. Yes you can go back to a restore point but that does not solve the problem. Now one app works but the other doesn't because they are both calling the same dll expecting different versions. Restore points are a temporary solution to a legit problem.

      If an app installer is so badly written that it messes up your installation then the software can't be much good either.

      So using the current system how do you propose that app developers deal with this? Say when I compile against a dll I am expecting version 1 and it works fine. Three years go by and the dll has gone through 2 new versions released with the latest service pack. Someone installs my application and it copies the old dll over the new one. The system is now screwed. My other option would be to link dynamically and since the new version is on the machine my application simply wouldn't work. BUT using the new system both my application and other applications would work fine, using their appropriate dlls. So how is this a bad thing again?

      Can anyone propose a better solution? If so I'm all ears.

    23. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 2, Insightful

      Simple. If MS wasn't so much spaghetti code, the problem of backward compatibility would never be a problem in the first place.

      You add new functions to a .dll, and what does it do to the old functions? Nothing. The older programs are still calling the old functions, and they work just the same way they used to, BECAUSE THEY'RE THE SAME CODE! If it's the case of a bug fix, or something like that, well, sometimes it can't be helped, but even still, no bug fix should fundamentally change the API to a function so radically that it breaks applications that rely on it.

      Also, no installer should blindly overwrite system files. Version checking is pretty simple, and should always be done before overwriting.
      If you're a programmer, and you don't realize this, you shouldn't be programming.

    24. Re:Auto-DLL Managment? by Grishnakh · · Score: 1

      3 - integrate SQL*Server into the OS

      After the recent Slammer Worm debacle, this would be a very good reason to keep any Longhorn machines OFF the internet.

    25. Re:Auto-DLL Managment? by asills · · Score: 2, Informative

      Actually as far as the .NET Framework goes, you have what is called Publisher Policy. In the Global Assembly Cache (GAC) are all of your shared assemblies (dll's). To get a shared assembly in the GAC you have to "Strong Name" it and give it a version number. Any new versions of said assembly put in the GAC with the same strong name/version number will overwrite the old ones (and note that the strong name is made by take a hash of the contents of the dll, so it would be awfully hard to fake).

      However, if you are a good developer and modify your version numbers on subsequent builds, when you put that assembly in the GAC you'll have two versions. Publisher Policy is an XML file compiled into a dll that allows a developer to say "don't use version 1.1.2.345, use 1.1.2.456 instead". Then all requests for the old version will be redirected to the new version instead.

      Hence, if you do it correctly, there's no security risk with what you're talking about.

      --
      -- What did Spock find in Kirk's toilet? The captain's log.
    26. Re:Auto-DLL Managment? by Grishnakh · · Score: 1

      Um, why don't you just have multiple files, with the version number part of the filename? Sort of like libfoo.4.0.0.so and libfoo.3.2.1.so. Then if the library you need isn't installed (regardless of whether a different version is), you install it, and if not, you leave it alone.

      Or would this be too many characters for MS's 8+3 filename limit? (yeah, supposedly they eliminated that, but they don't seem to realize that, looking at the way all the Win32 system files are still named.)

    27. Re:Auto-DLL Managment? by e2d2 · · Score: 0

      It's funny because you even debunk your own argument saying sometimes it can't be helped EXACTLY. What if it is a total rewrite? What if the API has changed drastically? What if calling function X now does something totally different? Sometimes it cannot be helped. Every programmer that releases a dll knows that they should maintain backwards compatability as much as possible. But sometimes we must break with the past and accept the consequences because the result outweighs the need for such compatability.

      Look I didn't create the system and I'm not going to stand up for it BUT I do think the new system is an improvement over the old one where problems like this cannot be resolved. You didn't say anything to the contrary.

      If you're a programmer, and you don't realize this, you shouldn't be programming.

      Pretty bold words for a coward.

    28. Re:Auto-DLL Managment? by e2d2 · · Score: 1

      Um, why don't you just have multiple files, with the version number part of the filename? Sort of like libfoo.4.0.0.so and libfoo.3.2.1.so. Then if the library you need isn't installed (regardless of whether a different version is), you install it, and if not, you leave it alone.

      So if I fix a bug and release a new version how are the applications that call it going to use it? All of them would have to be recompiled. Not exactly an option when you don't have the source code.

    29. Re:Auto-DLL Managment? by JdV!! · · Score: 1, Troll

      After the recent Slammer Worm debacle, this would be a very good reason to keep any Longhorn machines OFF the internet.


      And likewise, the last sendmail debacle is a very good reason to keep any MX machines of the internet.


      JdV!!

      --
      <Enter any 12-digit prime to continue>

    30. Re:Auto-DLL Managment? by Grishnakh · · Score: 4, Informative

      You increment its minor version number. All the applications should be linking to a major version number. For example:

      libfoo.so -> libfoo.so.4
      libfoo.so.4 -> libfoo.so.4.3
      libfoo.so.4.3 -> libfoo.so.4.3.2
      libfoo.so.4.3.2 (this is an actual file)

      libfoo.so.4.3 -> libfoo.so.4.3.5
      libfoo.so.4.3.5 (4.3.2 file deleted)

      This system has been around for decades in the Unix world.

    31. Re:Auto-DLL Managment? by e2d2 · · Score: 1

      Oh I agree this works and I like it. But that is not the current win32 dll system and I merely work within it's confines. I made an assumption that you were talking about the current win32 system and why we don't change the name when we release a dll, my bad.

      The new system will fix the problems current system but I think the one you cite would also work.

    32. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      You don't need to break something until it actually works.

    33. Re:Auto-DLL Managment? by brocktune · · Score: 1

      You're missing the point. Not every app will have its own version. Apps indicate which version of the DLL they want - typically it will be the same as all the other apps. However, if one application wants to use a newer DLL, it can do so without breaking the older apps.

      Assemblies in .NET are quite powerful and useful.

    34. Re:Auto-DLL Managment? by |<amikaze · · Score: 1

      That was the first thing I thought of too. Maybe this could be implemented where only the Major version number of the DLL was registered, and the minor numbers could be modified.

      Then, all that is left is not changing the APIs between minor revisions.

    35. Re:Auto-DLL Managment? by bourne · · Score: 2, Interesting

      No, I get the point completely. It isn't a complex design.

      My point is about what the end result will be after programmers use this: cruft. Major cruft. Cruft beyond all cruftiness of cruftension. So it has always been with apps that get picky about library version, and so it will always be. I have seen this happen to Unix applications, I have seen it happen to Windows applications, I have seen it happen to COM/DCOM, and I recognize the beast when presented as .NET.

      Assemblies in .NET are quite powerful and useful.

      No doubt. In the programming world, however, power is rarely wielded wisely or for good.

    36. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      You don't need to re-invent, just statically link.

    37. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      I absolutely agree with you.

      But I think the real reason for all of those unnecessary SETUP.EXEs is to create a standard feel for which to install software. It started out way back when the way to install a program from a floppy was typing A:\SETUP. Everybody learned that as the way to do things. I remember a lot of people being confused if that wasn't the way to do it.

      Now people download their SETUP.EXE from the Internet, and CD-ROMs make use of AutoRun. But they still expect a certain look and feel to the process. That happens to be InstallShield and similar "friendly wizards". If you gave some poor sap Windows user a zip file, they might get confused.

    38. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      The .NET system that the article discusses works just like you say -- with version numbers in the file system

    39. Re:Auto-DLL Managment? by Zeinfeld · · Score: 1
      Those of us who use MS products, and rely on modified versions of dlls for proper functionality, (Macrovision removal in powerdvd, for instance) will be screwed.

      What about the people who don't want the Macrovision 'copy-protection' in their version of Turbo-Tax. Or Gator or any of the slimeware programs that rewrite the TCP/IP stack so it redirects all calls to a premium number in Elbonia?

      I don't think that this is going to have the effect you state, at least not until Palladium. Basically you will just have to modify the .EXE to pull in a different DLL, this is not too difficult on a one off basis. Gator and its ilk are likly to have more serious problems.

      --
      Looking for an Information Security student project suggestion?
      Try http://dotcrimeManifesto.com/
    40. Re:Auto-DLL Managment? by sfe_software · · Score: 2, Insightful

      If an app installer is so badly written that it messes up your installation then the software can't be much good either.

      I don't think that's so much the issue. One thing I *hate* is a seeminly simple installation that then requires a reboot.

      But, as a bit of a Windows programmer myself, I understand it. If a program happens to require a newer version of some DLL, that is currently in use, it can't replace it. And with Windows' current system, you can't just use a local copy of it either.

      When a program loads up a DLL, you can't specify a full path, just the filename. Windows has a specific search order, and the first place it checks is memory. "someapp.dll" is already loaded, so it uses that code -- even if you have a newer version in your own program directory.

      I've always wondered why the hell they went with this approach. You have to watch for name conflicts between private DLLs (my program may happen to have "mp3.dll", which is completely unrelated to some other program's "mp3.dll"). And of course if an application uses a newer version of a system DLL (common controls library is a commonly-upgraded one), replacing the system-wide DLL is required, and naturally a reboot is required. And there's always some chance this upgrade may break an older application...

      You can also forget about renaming a copy for private use, too; many of the system DLLs reference eachother by name. It works if you hex-edit them to reference the new names (I did this only as a proof-of-concept with VB runtimes)...

      In my opinion, the best/easiest solution for developers would be to chnage the search order to start in the application directory -- or better yet, only do this if some registry flag is set, so older apps can have the current default behavior...

      However, anything to aleviate this would be nice...

      --
      NGWave - Fast Sound Editor for Windows
    41. Re:Auto-DLL Managment? by Shippy · · Score: 2, Informative

      I think you're taking this to the extreme. They're doing this by using a similar method (if not the same) that .NET uses for versioning their assemblies. You simply tell your .exe by using an attribute in the source code which assembly version to use. Then, you compile the assmbly saying it is whatever version you want. If in the future, another program comes along that installs new software, it'll be compiled to use the newer assembly. Then, if the original author determines that the new assembly is compatible, they simply release a patch that has a file called 'myprog.exe.config' and the .config file is an XML file saying the new version to use.

      Not just programs will use this, but the generic Windows .dll files can use this scheme as well. So, installing your service pack won't break half of your programs, but it may still allow them to implement new security and usability features. TONS of programs use the generic windows dlls so it's not like you're completely getting rid of the idea of dynamic libraries.

      This brings in security implications because anyone can write a .config file. However, 1) you'd have to be an admin to write to the dir and 2) there are things called "Strong Names" which involve encryption keys that also help with identifying assemblies and dlls, but I'm light on the technical details of this.

      So, don't draw conclusions and knock it down so quickly. It's actually a really good way to allow old programs to keep working until it's determined that yes, you can upgrade. As far as removing old dlls so you don't get cruft, I'm not exactly sure how that will work, but it's not like Linux doesn't have this problem as well. After awhile, I have tons of .so's all over the place and I have no idea what programs are linking to it (if any).

      --
      -Shippy
    42. Re:Auto-DLL Managment? by Badaro · · Score: 1

      AFAIK the DLL files should be placed in the program folder or somewhere in the path, they're self-contained and include the the metadata previously stored in the registry.

      []s Badaro

      --
      My sig became obsolete, and I lack the imagination to create a new one. :(
    43. Re:Auto-DLL Managment? by Azureflare · · Score: 1

      Yeh, but who cares about longhorn? Win2k is just fine, if you're on linux, you'll be fine with a copy of win2k (Hey, who knows, in a few years it might go for $50! w00t). I can't imagine that MS would tell their programmers to code their programs so they don't work with older operating systems. Man people with win2k/xp/98/95/me would be PISSED (myself included) all that money down the TUBES and then I have to pay even MORE for an operating system that doesn't give me that much improvement in return! Microsoft has to be careful.

    44. Re:Auto-DLL Managment? by Grishnakh · · Score: 1

      What's an "MX" machine?

      I don't recall sendmail ever bringing down internet root servers.

    45. Re:Auto-DLL Managment? by BovineOne · · Score: 1

      The problem with this is that it is difficult for arbitrary library developers to always provide a fully regression-tested and backwards-compatible new version (even if it is just a minor version increment). Yes you can argue that it is good practice to always try to provide backwards-compatible API changes, but sometimes bugs cause even the best intentions to fail.

      So now when you change libfoo.so.4.3 to point from libfoo.so.4.3.2 to the new libfoo.so.4.3.5, you might have just simultaneously broken several applications that were all depending on libfoo.so.4.3

      --
      Don't waste those cycles! Put them to use! http://www.distributed.net/
    46. Re:Auto-DLL Managment? by Grishnakh · · Score: 1

      True in theory, but I haven't really seen much evidence on that in practice. Also, most Free Software is easily recompiled against new libraries, and when something changes it's usually quickly updated.

      In the proprietary world, however, it'd be a real pain if upgrading some library broke your proprietary application, since it's not so easy to just download an updated version. This is why proprietary authors should statically link stuff, or include their own copies of the libraries (which I have seen). Sure, this is wasteful since you're now keeping multiple versions of the same library in memory potentially, but that's just one of the costs of using proprietary software instead of Free software. As I stated in another post, if you're only running one or two proprietary applications at a time, this waste isn't a significant problem. It's only on all-proprietary systems where you have hundreds of little applications which are all proprietary where this becomes a serious issue. Again, another reason not to use a system where you have to pay for every single little tool and application you want to use.

    47. Re:Auto-DLL Managment? by AndroidCat · · Score: 1
      And one of the main selling points of the whole registry/COM thing was backwards compatability. Your new DLL would register the old interface as well as the new one. (Or just expand the old one without breaking it.) I hate to think of all the VBRUN and MFC cruft that's built up over the years on my disk.

      As Rocky sez "That trick never works!"

      --
      One line blog. I hear that they're called Twitters now.
    48. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      It really is getting time that Microsoft put windows in an emulator and re-wrote the functionality of the OS. It will never happen, but it is time.

      Heh. This has been done - it's called Win32.

    49. Re:Auto-DLL Managment? by JdV!! · · Score: 1

      Mail Exchange

      --
      <Enter any 12-digit prime to continue>

    50. Re:Auto-DLL Managment? by Shippy · · Score: 2

      Ever heard of 'Depends'? There's a similar program for .NET programs called 'ILDASM' which disassembles the intermediate code and you can see exactly which assemblies (which are dlls for .NET programs) and versions are being used. There will be utilities to find out the information. They come with the framework.

      --
      -Shippy
    51. Re:Auto-DLL Managment? by ClosedSource · · Score: 1

      Well, you can't look at it as if the world started today. The original version of Windows had to be able to run on an 8088 with at most 640K of RAM and a 10MB hard drive (if that). It was critical that applications shared code and that code was loaded only when needed. DLLs are primarily used to optimize space.

      As you correctly state, we now have a lot of resources on our PCs so we don't need to worry so much about space.

      Now you can create a .NET application and set it up so you just copy the files that make up the assembly into a directory and you're done. You don't have to register Dlls or deal with the registry. Legacy applications will still require the registry for a long time, however.

    52. Re:Auto-DLL Managment? by reidbold · · Score: 1

      The point of linked libraries is to only have one version in ram at the same time, disk space isn't really an issue. I think this system would (should..) only be used in cases where a problem arises, not as a hammer seeing every program installation as a nail. I know that in my use of windows over the past year this issue hasn't caused many problems, so in theory this dll registry system would only have to come alive from time to time.

      --
      -Reid
    53. Re:Auto-DLL Managment? by ricochet_ca · · Score: 1

      I don't think that Microsoft gives a rat's ass how anybody skins Windows XP. They make no extra money if you re-skin XP or if you don't.

      I think this change is aimed at making Windows Server more appealing to large enterprise users (including government users) who have internally-developed "line of business" applications (to use Microsoft's term) that they don't want to rev each time a new version of Windows or Visual Studio (and their corresponding new DLL versions) comes out...

    54. Re:Auto-DLL Managment? by Ashran · · Score: 1

      > In my opinion, the best/easiest solution for developers would be to chnage the search order to start in the application directory -- or better yet, only do this if some registry flag is set, so
      > der apps can have the current default behavior...
      Hate to tell you but thats the default behaviour with WinNT based systems.
      Every applications is loading its own DLL's, they are not shared and the first place that gets searched is the application directory.
      (DLL's can share data segments, but that data is copied from one virtual address space to the other)
      As a windows developer you should know this.

      This is not hearsay, I've hacked enough games to know the exact DLL loading behaviour of windows.

      --

      Before you email me, remember: "There is no god!"
    55. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      This is why you have major and minor version increments in the first place. If the new API isn't guaranteed backwards-compatible, then it's a larger increment than 4.3.2->4.3.5. If a bug creeps in and breaks that guarantee, well, it's a software bug, not a failure of the scheme itself.

      The system works very well in practice. The wonder is that it took this long for Microsoft to catch up with it, when their library API change problem has been far worse than Unix's ever was, all along.

      Wonder if they'll get rid of obscure 8.3 CONFUSNG.DLL filenames (and three-letter file extensions) too? Doesn't sound like it from the article, which refers to something outside the filesystem.

    56. Re:Auto-DLL Managment? by rushfan · · Score: 1

      Static linking?

      (Just a thought, but it does advoid this whole mess)

    57. Re:Auto-DLL Managment? by dimator · · Score: 1

      ... except that it's not "each and every." You're blowing it way out of proportion, so you can rant.

      --
      python -c "x='python -c %sx=%s; print x%%(chr(34),repr(x),chr(34))%s'; print x%(chr(34),repr(x),chr(34))"
    58. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0
      In the next-next version of Windows, MS will release a new background process that constantly scans installed DLLs, noticing common code segments and writing them to another DLL, then modifying the applications that call the old DLLs to call the new DLL for those function which were common among different DLLs.

      (This was meant as a joke but it sounds like a valid patent)

    59. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      EXACTLY. What if it is a total rewrite? What if the API has changed drastically? What if calling function X now does something totally different? Sometimes it cannot be helped.

      This is what has held Windows back for so many years. If Microsoft hadn't been so focused on maintaining backwards compatability for so long, Windows would be 10X the OS it it today. Look at the mess that Windows 95 was because they had to incorporate a means for people to use DOS TSRs/SYS files and load Windows 3.1 drivers. Not to mention the fact that people sometimes were accidentally writing applications with Windows 2.0 and 3.x Windowing API's and old Win 3.1 system calls.

      Microsoft has been pretty good at maintaining backwards compatability with their libraries (except for the odd breakages in SQL/ASP etc.). Under XP, I have found very few apps that have broken, except for DOS apps that use SVGA graphics and the odd Windows 95 app that uses DirectX 2.

    60. Re:Auto-DLL Managment? by crazyj · · Score: 1

      Ah, yes, what a wonderful idea; let each and every program have its own DLLs, at the mere cost of rendering the whole DLL system totally useless.

      What about each program having a property list of compatible versions of the required DLLs and automatically using the newest one available. Then, the system could check to see if there are any "unneeded" DLLs, which could be defined as previous versions that don't have any programs listing that version as the most recent version it can use.

    61. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      No, the Linux model seems to work much better. If only Windows had real symbolic link files, and provided the versioning in the filename.

      Then, we could all have a symbolic link msvcrt.dll, which today happens to be a symlink to msvcrt.6.0.2203.24.dll, or something like that.

      That way, if I DO need to run the old one, I should be able to coerce my program to hit the older version on my computer, perhaps utilizing the same compatability stuff that is still in the registry and memory to fake old programs out that they're using DOS 6.2, 5.x, 4.x, whatever.

    62. Re:Auto-DLL Managment? by n3k5 · · Score: 1
      ... except that it's not "each and every." You're blowing it way out of proportion, so you can rant.
      I merely quoted the parent posting, about which I talked, there. I didn't blow (up) anything.
      --
      but what do i know, i'm just a model.
    63. Re:Auto-DLL Managment? by n3k5 · · Score: 1
      What about each program having a property list of compatible versions of the required DLLs
      If you're gonna be picky about which DLLs you want to use, you could just include your own and don't care what Windows offers. Using shared libraries and determining in advance which libraries you want to use are two concepts that don't work together. Furthermore, the compatibility issues we have to deal with now arise because each new version of Windows has to be backwards-compatible with more earlier versions and you have more DLL conflicts. The problems aren't with newly created programs, but with the old, existing ones. You'd have to make your 'compatibility lists' for all of them, which is impossible to do.
      --
      but what do i know, i'm just a model.
    64. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      .NET versioning scheme actually appears to be a major improvement over legacy ways of doing so. Not only does defaultly look in the application directory, you can specifiy the search order of directoies in the GAC MMC. It not only uses a major-minor versioning scheme, it also includes build and revision number. The build number is the number of days since jan 1, 2000 and the revision number is the number of seconds since midnight.
      The other methods to verify the authenticity of the dll/module, it includes a private key hash of the executable. This allows the calling module to verify the loaded module came from the correct source.
      If you dig into %windir%\assembly you can see the list of assemblies installed in the cache, and whether they are stored as complied images, or IL code (The ones that say Native Image in the Type collumn).

    65. Re:Auto-DLL Managment? by Keeper · · Score: 1

      Essentially, they are. It's called Longhorn.

    66. Re:Auto-DLL Managment? by b17bmbr · · Score: 1

      well, they bought conectix, so they have the virtual machine down, and since the next gen. of hardware will be pretty fast, maybe even 64 bit, running an OS in side an OS will be fastr enough. so like OS 9 inside OS X it won't be an issue. plus, it will force migration to the new platform, sort of like mac has done.

      --
      My problem? I was perfectly gruntled, until some numbnuts came by and dissed me.
    67. Re:Auto-DLL Managment? by sfe_software · · Score: 1
      Hate to tell you but thats the default behaviour with WinNT based systems.

      That's simply not true if the DLL is already loaded into memory. Here's a scenerio I've run into:

      - Application A loads up "oleaut32.dll", using the default library in the system directory.
      - Application B has an updated version (and requires it) in its own program location. App B tries to load "oleaut32.dll", but since it's already in memory, it uses the old version, which fails.

      This is under Windows 2000. Reading the docs for the LoadLibrary() function, it specifies the search order starting with the application directory, but *only* if it does not first find a module with that name in memory.

      LoadLibraryEx() offers some additional functions -- like specifying that future calls should first look in the DLL's directory rather than the current application directory -- but it still checks for any already-loaded DLL by that name first. An extra flag for LoadLibraryEx() could easily be offered to change this behavior for new applications (ALWAYS_LOAD_FILE or something like that).

      In the case of VB runtimes, of course, you don't get to specify a path or any flags to the call, because VB does this by itself. The VB app never gets a chance to say "use my runtimes", even if it were possible...

      After checking the more recent docs, I see that they've potentially made this worse:
      Windows Server 2003, Windows XP SP1: The default value of HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode is 1 (current directory is searched after the system and Windows directories).

      So, by default it checks the system ones first, making it even more difficult to use private versions of DLLs (noting that this only applies when a full path isn't specified, but in general it's hard to specify a full path as the call is usually created at design-time, and there's no guarantee as to where the program will be installed).

      As a windows developer you should know this.

      I know that I struggled for a while with this. I was trying dearly to make my installer not require a reboot under any circumstances, and this simply wasn't possible with the Windows Common Controls library under Win98. The update was required, and a reboot absolutely necessary, if they had the stock version.

      --
      NGWave - Fast Sound Editor for Windows
    68. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      The same thing is in .NET

      Its part of the framework configuration.

    69. Re:Auto-DLL Managment? by steve_l · · Score: 1

      Dont worry about WINE. This isnt about DLLs. This is about the .NET runtime and its 'strong binding' to checksumed (and potentially signed) "assemblies". Mono will have to deal with it, but not Wine;.

    70. Re:Auto-DLL Managment? by bratmobile · · Score: 5, Insightful

      It's a LOT more complicated than that. Microsoft is trying to solve a very real problem that has plagued developers on EVERY platform that supports DLLs, including Linux. Using symlinks is just one approach. And while it does solve some of the problems, it is not a complete solution.

      Here's one of the main situations that Microsoft is trying to address: Microsoft ships FOO.DLL with Windows, or as part of some SDK (like DirectX). Company 1 develops an app, ships it, and on the app CD, it has a copy of FOO.DLL. Company 2 does the same thing.

      Now. A bug is discovered in FOO.DLL, and it must be fixed. Unfortunately, fixing it one way causes app 1 to crash, and fixing it the other way causes app 2 to crash. And both apps link to the same version.

      So what do you do? In the past, you just crossed your fingers and looked the other way, and tried to write code that behaved as best as possible in whatever circumstances you could think of. But inevitably bug fixes cause other bugs (regressions).

      So, Microsoft is trying to solve this, by changing DLL binding, in two important ways:

      1) DLL binding will use much more than just a name. Microsoft has developed a very powerful & flexible way to do DLL binding. This is what the .Net framework uses, but it is NOT limited to .Net DLLs -- traditional "unmanaged" code can use this, too. I won't go into details here, because it's very well-documented elsewhere, but suffice to say that developers will have a LOT more control over how apps and DLLs bind to DLLs. This is purely a Good Thing, and it IS fully backward-compatible -- it's an opt-in.

      2) You'll have total control over redirecting DLLs, on a per-app basis. Some docs here. This means that you can override DLL binding -- if app 1 MUST have version 4.3.5.1.34 of FOO.DLL, and app 2 MUST have version 4.3.5.1.35b, then you can write a simple XML file for each one, that controls exactly which version they get.

      Anyone who reads some kind of evil into this is just plain stupid, and has never done any serious development. Any programmer worth their salt knows that DLL binding is ridiculously crude -- and that goes for every modern platform. Microsoft suffers from this more than most, and has therefore decided to do something about it, and has designed a pretty good system. If you have half a brain, you should check it out, and try to keep that knee-jerk reaction under control. (I'm not directing that comment at Grishnakh, but at all of the slobbering idiots who just flame Microsoft whenever they see the name in a headline.)

    71. Re:Auto-DLL Managment? by gilesjuk · · Score: 1

      WINE allows Linux, FreeBSD etc.. all to use some Windows apps.

      GPL and Linux are public enemy number 1 at Microsoft, WINE also allows apps to be ported easier.

      Many seem to regard WINE as being useless, look at Crossover Office then, it's a nicely packaged version of WINE that run Office and other apps quite well actually.

    72. Re:Auto-DLL Managment? by multipartmixed · · Score: 1
      if app 1 MUST have version 4.3.5.1.34 of FOO.DLL, and app 2 MUST have version 4.3.5.1.35b, then you can write a simple XML file for each one, that controls exactly which version they get.
      And how is this different from setting the LD_PRELOAD environment variable (or tinkering with LD_LIBRARY_PATH) in a shell wrapper for a binary? (Aside from the fact that more people know shell than XML ;) Unless they have a magic way to pick which functions from which DSOs you use at link time (or dlopen time), I can't see what's better about it than the normal (UNIX) way of doing things.
      --

      Do daemons dream of electric sleep()?
    73. Re:Auto-DLL Managment? by Grishnakh · · Score: 1

      Too late. Microsoft has already announced that Longhorn will completely abandon ALL backwards compatibility, and you'll have to buy new versions of all your software.

      Anyone who's stuck using MS apps, or is just addicted to them, will have to upgrade whether they like it or not.

      A lot of people were PISSED about License 6 too, since it just costs them more money for the same thing, and forces upgrades every 3 years, but they stepped up and drank the kool-aid anyway. They'll do it again for Longhorn.

      A lot MS customers like to bitch and whine about MS, but in the end, instead of looking at alternatives, they just go along with what they're told to do. Of course, there's a growing number of people and organizations that are switching to something else (usually Linux), but look how much abuse they took before doing this,and look how many more still won't change. It's frightening how much like lemmings people are.

    74. Re:Auto-DLL Managment? by gilesjuk · · Score: 1

      Best solution would be a proper filesystem structure to start with :)

      Still it's too late given that Microsoft are going to further dumb down the OS by adding the database filesystem. Can you imagine the trojans and viruses we'll have when that comes out? some serious though needs to go into the management that system. The registry is already an obfuscation, you can only access entries through the provided OS calls and tools.

    75. Re:Auto-DLL Managment? by Carnivorous+Carrot · · Score: 1

      > then you can write a simple XML file for each
      > one, that controls exactly which version they
      > get.

      At this point, 999 out of 1,000 computer users slap you in the face.

      It's real simple! All ya gotta do is go into the registry, go to Local User Machine->{128741-418fu2-21980-eat-me-2090dope}->so ftware->settings->setup->install->1.0->data->(your network login ID) and change the third byte's 3rd bit (do this on a calculator if you need to), then map a drive to the pseudo drive created by fuczkzzzzzzzzzzzzzz so very tired.

      --
      "Has [being a kidnapped teenage girl, raped repeatedly for months] changed you?" - Katie Couric to Elizabeth Smart
    76. Re:Auto-DLL Managment? by Carnivorous+Carrot · · Score: 3, Funny

      Y'alls do realize the original purpose of .dll's wasn't to save disk space, but was to make drag-and-drop copying of things like Word much more difficult, don't you?

      So, too, the system registry.

      We now return you to your shared delusions.

      --
      "Has [being a kidnapped teenage girl, raped repeatedly for months] changed you?" - Katie Couric to Elizabeth Smart
    77. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      NTFS does have symlinks.

    78. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0



      That was the original idea. In 1991 or so with 50MB hard drives being common this made alot of sense. Now in 2003 with the hindsight of 12 years of "DLL Hell" and current hard drives with 50GB+ of storage, perhaps another approach is needed

    79. Re:Auto-DLL Managment? by dknj · · Score: 0

      and after the recent openssh|apache|openbsd debacle, there are very good reasons to keep any machines OFF the internet.

      -dk

    80. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 1, Interesting

      As a matter of fact, version 1.0 of the .NET Framework supported versioning of assemblies (*.exe and *.dll files containing MSIL). The existing functionality works quite well and allows you to redirect to alternative assembly versions via standard configuration settings in the application configuration file.

      Version 1.1 of the .NET Framework takes this concept even further and allows the developer to specifiy a specific version of the base class library (and runtime) to execute against. This is actually the realisation of architectural decisions they made in the 1.0 timeframe.

      In addition to ILDasm (IL Disassembler) there is also a tool called fuslogvw which allows you to monitor what the runtime is actually binding. Its actually very useful for solving problems where you have pluggable architectures which load assemblies dynamically.

      For those of you who haven't played with the .NET Runtime yet I highly recommend it. Even if you don't start developing with it, it should give you some ideas of what to ask for in your platform of choice. If you can't bring yourself to run Windows then try http://www.go-mono.com for Linux, or ROTOR for FreeBSD (I think there is a source code patch which will swap out the PAL with a Linux compatible one too).

    81. Re:Auto-DLL Managment? by bratmobile · · Score: 1

      Well, I can see your point. But the main problem with the registry is that information has to be "loaded" into it to be useful. In other words, say you have an app directory on a CD (or where-ever), and your app needs one of these settings. The XML file is called a "manifest", and the filename is the name of the executable + ".config" (so "foo.exe.config"). This config file can specify assembly binding overrides, configuration values, debugging parameters, and lots more.

      The nice thing about this is that you never have to load the XML file into the registry. So you can also have two copies of the SAME app that have different settings. Which, if you have to muck around in the registry, is impossible or just very annoying. Also, the only things in that XML file are the things relevant to your app -- you don't have to wade through 30 different registry keys to find what you want.

    82. Re:Auto-DLL Managment? by bratmobile · · Score: 1

      I suppose it isn't that different. In my post I never compared the .Net implementation against Linux / ld.so. I'm just trying to clear away some of the FUD around this issue.

      Although arguably it's cleaner to have the binding stuff in a file, rather than having to carry it around in your process environment strings.

    83. Re:Auto-DLL Managment? by Ashran · · Score: 1

      Okay I was partially wrong.

      > - Application B has an updated version (and requires it) in its own program location. App B tries to load "oleaut32.dll", but since it's already in memory, it uses the old version, which fails.
      But theres something that needs to be clarified here. This does not apply to 2 different processes but rather to 1 process with multiple DLL's.
      Lets say you start a server process that has 1 dll - the DLL and the server process require WINSOCK32.
      When the application loads WINSOCK is not yet in memory space and thus LoadLibrary will first search in the application directory (try that with some of the drop in replacement loggers for winsock - works if they are in the app dir)
      The problem arises if the dependencies (DLL) themselve need libraries as they are not loaded again if they have already been loaded by the APP or some other DLL.

      Hope this clears things up :) /winke

      --

      Before you email me, remember: "There is no god!"
    84. Re:Auto-DLL Managment? by Anonymous Coward · · Score: 0

      I just got a PowerBook, I am never going back to windows again, and I plan to reformat all Win2k servers to OpenBSD or FreeBSD. My main question is how has apple kept such elegant simplicity, and microsoft is so dirty and cluttered and have still suceeded in the market.

    85. Re:Auto-DLL Managment? by xombo · · Score: 1

      I also want to know how this is different from a program putting a DLL in the same directory as it if they want to use a specific DLL version.

    86. Re:Auto-DLL Managment? by plover · · Score: 1
      +1 insightful, but no longer possible.

      DLLs were originally designed to solve the problem of "many programs doing the same thing won't take up as much space." Now that we have boxes with as much physical memory as the OS can address, static linking seems like a great idea.

      Except for the part that legacy software packages with DLLs still rely on those DLLs. No matter what tomorrows spec says, the sh!t installer included with "Siexxa Landscape Designer" sitting on my shelf will always continue to overwrite my MFC and common control dlls.

      Also, don't forget that not all DLLs are created equal. COM objects wrapped in a DLL, for example, all have a common set of entry points (DllRegisterServer, etc.) and usually no other entry points. The interfaces are better designed and more manageable for versioning. COM developers always (should) have to keep backwards-compatibility in mind when adding new interfaces or fixing problems. So not every DLL change is a huge problem.

      Anyway, my only point is that Microsoft will have to deal with the mess they created long ago, even if every Windows developer today magically starts coding to the same fixed longhorn spec.

      --
      John
    87. Re:Auto-DLL Managment? by plover · · Score: 1
      Here's the word cut'n'pasted from the horse's mouth:

      LoadLibrary attempts to locate the DLL using the same search sequence used for implicit linking. If the system cannot find the DLL or if the entry-point function returns FALSE, LoadLibrary returns NULL. If the call to LoadLibrary specifies a DLL module already mapped into the address space of the calling process,* the function simply returns a handle of the DLL and increments the module's reference count.

      [ * Emphasis mine. ]

      While this text is not written in the same order in which it searches for libraries, it does say that the first thing that happens is it checks the calling processes' address space. Not the whole machine, just the calling process.

      Of course, this is probably only true for the NT/2K/XP family of OSes and not with the 95/98/Me family...

      I have had some luck with bad apps by moving their crappy old copy of COMCTL32.DLL (or whatever) into the same directory as the BADAPP.EXE. Of course to do this I only had to watch every file in the WINNT tree, and I set every DLL file in SYSTEM32 to read-only and watched for installer errors, but hey, that's all you gotta do to make Windows work, right? :-P

      GOD I HATED SIERRA'S OLD INSTALLERS. They were the penultimate in arrogance. "If I stomp all over your SYSTEM directory and make all the files what I want them to be I'll work fine, and damn the rest of your box." And I'll never know if they fixed them because I swore I would never buy another Sierra package again, nor would I allow any of my friends or relatives to buy from them. (Well, they could buy them but I wouldn't help them anymore.) If I had to pin one badge on DLL Hell, I'd stick the pin in Sierra and aim for the aorta.

      --
      John
  2. DLL vs static libs by selderrr · · Score: 5, Insightful

    I never really understood the advantages of a DLL over a static lib in modern times.

    In the old days, when diskspace & memory were precious goods, they made sense to share code. But today, what's the burden of 4MB extra app size compared to the DLL misery ?

    Except for plugins, I see no reason why developers would need DLLs. Can anyone shed some light here ?

    1. Re:DLL vs static libs by Anonymous Coward · · Score: 2, Insightful

      What, a little 26k app should now be 4megs in size? All of them?
      Plus, if you`re going to support them for plug-ins, then the system is in place anyway.
      Plus, if you know what you`re doing, there *is* no DLL hell - install them in the directory where you install the app, rather than in a shared directory, give them a sensible name, and you`re sorted.

    2. Re:DLL vs static libs by fruey · · Score: 5, Informative
      Memory is still precious when you've got your OS eating up 128M of it (WinXP) and you have slightly older hardware.

      When 1Gb of memory becomes standard, then maybe. In any case, it is downright inefficient to have the same code in 3 or 4 places in memory, even if you have got loads to spare.

      --
      Conversion Rate Optimisation French / English consultant
    3. Re:DLL vs static libs by Anonymous Coward · · Score: 5, Interesting

      It is not only for preserving disk space.

      It also preserves ram by sharing common code between different applications.

      It also makes upgrades and bugfixes easier (think openssl, for example).

    4. Re:DLL vs static libs by IWannaBeAnAC · · Score: 5, Insightful

      Well, on a typical system there might be a hundred or so processes. Add 4MB to all of them and its suddenly not insignificant anymore.

      Plus, if two running processes are sharing a shared library, then a task swap doesn't completely blow away the cache.

      Finally, I think with Windoze I think there is a mode in which DLL's can have global data, shared among all programs using it. Not sure though, its years since I did any windoze programming.

    5. Re:DLL vs static libs by wiggys · · Score: 3, Interesting
      Agreed. Windows XP gobbles up about 110 megabytes of RAM when it's just booted, without any background images, screensavers, system tray apps running etc.

      Dropping the fancy XP theme frees up about 5 megs of RAM, but if your system only has 128 or 256 megs of RAM you don't have a lot of room to load apps.

      --

      Sorry, but my karma just ran over your dogma.

    6. Re:DLL vs static libs by infront314 · · Score: 5, Insightful

      Bugs.

      If there is a bug or a security problem in a DLL you only have to replace that DLL instead of all statically linked programs.

      Remember the problems with zlib a year ago? Would you like to replace 500 applications or one library?

    7. Re:DLL vs static libs by Anonymous Coward · · Score: 5, Insightful

      There are plenty of reasons to want dynamic linking. Library code is code you didn't write. Therefore, you have no control over its quality or security. If there was a buffer overflow exploit in a system library, and all programs statically linked that library, you would need to update your ENTIRE SYSTEM to remove the vulnerability. If the code is saved in a shared library (DLL), you just need to update the single shared library.

      It's a classic case of the elimination of duplication in computer code. By duplicating (statically linking) the library code into every app, you only increase the burden when you want to update the library.

      Furthermore, on Debian GNU/Linux I never have "DLL misery" because my operating system is not brain-dead. Multiple versions of shared libraries can coexist, there is a consistent versioning scheme, and a competent team of people who check to make sure that apps use the correct versions of the shared libraries.

    8. Re:DLL vs static libs by joshv · · Score: 1

      I am right there with you. How much shared code, other than operating system routines, is present in a typically use scenario? I'd betcha not all that much. And in the days where 256MB of memory is cheap, and 60GB hard drives are growing on trees...

      This is part and parcel of the dependency hell problem. Rather than bundle or statically link the libraries they use, Open Source software projects expect a package system, or even worse, the end user, to find the proper version of the library and install it. Other than satisfying some sort of geeky, "code reuse is good" minimalist aesthetic, I don't know what's being accomplished here.

      -josh

    9. Re:DLL vs static libs by thumperward · · Score: 1

      Do you know how many instances of zlib.dll reside on an average Windows box? And that's a small one... what about all the apps which dynamically link to an MFC lib which comes with the program? Or some Visual Basic runtime? The average Windows surfer who lazily installs shareware over a period of time gets bogged down with tons of this stuff, largely unneccessary.

      You do have a fair point though. Even if half of one's Program Files was filled with unnecessary libraries, that's nothing on a modern PC. My 40GB is ghetto nowadays for an upper-mid-range PC, and the majority of my HD is taken up with documents and mp3s rather than applications.

      - Chris

    10. Re:DLL vs static libs by DJProtoss · · Score: 1

      Not to mention that the windows widget set is done by dll. Do you wish to have to include the entire code for creating windows/ buttons / menues /etc in each of your programs, and if so what is the point in writing for windows - you may as well write a dos program.

      --
      "Success is based on knowing how far to go in going too far"
    11. Re:DLL vs static libs by oolon · · Score: 2, Insightful

      If I statically link an executable, and they library I link against has a bug in it, I have to rebuild the executable to get rid of the bug. If the library is dynamically linked and the library interface (key point) is the same I can upgrade my complete system by installing a new library....

      Think about it, if there is a problem with say the resolving library which means your machine is insecure, with static linking you have to rebuild everthing, also with static linking you have to work out what is statically linked with it too...

      The key think however is having a rock solid library interface with no "special" features which require XX version of YY. The incompatibilities only start happening when the interface suttly changes. Some programs get bitten and not others due to which parts of the interface they use....

      James

    12. Re:DLL vs static libs by Relyx · · Score: 1

      If you are the maintainer of a library, bug fixes can be quickly rolled out without requiring your users to recompile their programs. Of course, binary compatibility must be maintained.

      It's also very useful if you want an existing program to pick up an alternate version of the library without affecting others. In your wrapper script, simply add a new directory to the start of the LD_LIBRARY_PATH environment variable. Admittedly, in an evironment where people are used to recompiling their programs, this is not too much of a problem. On other platforms though, a level of redirection can be very useful.

    13. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      So go to the store, drop down $40 (or whatever) and buy another 256MB of RAM. Please don't give me the old "I can't afford it" argument, if you can buy a computer and WindowsXP then you can buy the extra RAM that it requires to make it run. The only people I have sympathy for are people who pirated XP to run on their PII-266 and people whose hardware is limited to 128 or 256 megs total memory (like a crappy old Sony Vaio desktop I have to setup for a relative).

    14. Re:DLL vs static libs by Arethan · · Score: 4, Insightful

      Plenty.

      Each static library you use in your code adds to the overall program size, as you've stated. Thus increasing load time when you run the app. A 4MB exe loads a lot faster than a 400MB exe. (At least when the bulk of the difference is actual code/runtime-data, rather than generic data tacked on to the end of the file.) When you have DLLs, the OS will reuse already loaded DLLs for your app, and will keep newly loaded DLLs in memory for a while even after the app shuts down. This tremendously speeds up application loading.

      Plus it allows for version upgrades in the DLLs without requiring recompiles of the applications. Of course, this feature really isn't used in Windows, since MS can't seem to make an application run according to specs, most developers work around and sometimes even depend on the bugs that are in MS's code. Thus creating DLL version dependant apps. If MS goes back and fixes the broken DLLs, they will break a bunch of third party apps in the process. Probably some of their own as well.

      Plus their is security. Applications do not have the same level of access as DLLs. In fact, if you want to do some low level hardware access in Windows, you MUST use a DLL as a thunking layer, since you can't access the hardware from code within a regular process.

      There are other reasons, but I'm getting lazy, so I'll let someone else finish if they feel like it is needed.

      In short, there are plenty of reasons to use dynamically loaded libraries. But the generally poor coding practices that occur on the Windows platform pretty much ruins almost all of them. It's actually pretty sad. Windows had a lot of potential to become a great OS. Too many fuck ups and shortcuts have wrecked that chance. Fixing it would require an entirely new code base. One that doesn't have native ABI support for old apps. Which, of course, MS will never do. At least there's open source software to do things right. :)

    15. Re:DLL vs static libs by override11 · · Score: 5, Informative

      Try using a different shell. It seems to me that explorer takes up a ton of ram, especially when doing anything besides looking at the background. Aston shell does great, and when paired up with the newest Phoenix build, everything seems to just zip and open up fast, and memory usage is a lot lower. :)

      --
      No I didnt spell check this post...
    16. Re:DLL vs static libs by Anonymous Coward · · Score: 2, Insightful

      Memory is still precious when you've got your OS eating up 128M of it (WinXP) and you have slightly older hardware.
      When 1Gb of memory becomes standard...


      Yes, but this is the "next version of windows" we're talking about here. 1GB of memory isn't that far fetched in the near future.

      As for older hardware... New OS versions are designed for new hardware. If you want to use that old hardware, fine, us the old OS.

    17. Re:DLL vs static libs by 42forty-two42 · · Score: 1

      Load time. Many programs need several megabytes of data that might as well be preloaded (e.g. libc). Now imagine a webserver where hundreds of processes are spawned every second - do you want to reload it each time?

    18. Re:DLL vs static libs by olman · · Score: 1

      You can easily take a big chunk out of the ram use by getting rid of unnecessary services. Check out "disable XP services" in google.

      Linux will take a lot of ram if you let Redhat install every app it wants to, as well..

    19. Re:DLL vs static libs by Anonymous Coward · · Score: 1, Insightful

      Various programs for Windows use nonstandard tricks to locate dlls. Some programs will complain if a dll isn't in a specific directory.

      Furthermore, Microsoft has a lot of dlls. If they gave a shit about keeping the OS uncluttered, they'd have a directory c:\dll that all dlls went in, AND they would group their Microsoft specific dlls in folders of their own....networking dlls would go in c:\dll\net, vb runtime files would go in c:\dll\vbrt, etc. Microsoft provides a lot of components in a default Windows install that could very, very easily be organized in any way, but they just don't. Also, since writing a program for Windows means it'll be running on Windows, they could make several easy assumptions about where the dlls go, and what the search path will be. I remember reading some statistic that over 95% of Windows programs were written in VC++, a Microsoft product. They could easily make all programs use the default dll path of ./, [drive]:\windows\dll\*, but they don't.

      Windows is sort of like FreeBSD in that it's intended to be thought of as a system. When I think of Linux, I think more of a bunch of programs. If Microsoft can't organize their libraries better, I don't see any benefit to the ``system'' approach.

    20. Re:DLL vs static libs by 91degrees · · Score: 2, Informative

      All true, and all reasons why shared libs are a good idea.

      Trouble is, having several instances of essentially the same library causes many of the same problems that static linking does.

    21. Re:DLL vs static libs by dkf · · Score: 1

      Many years ago, I used to use systems (DECstations running ULTRIX) which didn't have dynamic linking and where everything was statically linked. Linking was slow (by the standards of the time, especially when compared with other CPU-intensive operations), binary startup was slow, and everything took many times the space that it did now. It was awful. (By contrast, SunOS4 was really nice even with its criminally-broken header files.) And is there any particular reason why everything in /usr/bin should have its own copy of a substantial fraction of the C library?

      One of the main reasons that you've got lots of extra space for things nowadays is that you've got shared libraries. (And don't quote "Moore's Law" with me; software can and does grow in size faster, especially with poor programmers!)

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    22. Re:DLL vs static libs by suitti · · Score: 1, Interesting
      If you lie to the system, and say, "This new libzlib.so is libzlib.so.5", you still run the risk of breaking all the apps. The only way to know that they all still work is to test them all.

      So, you change the shared library. What programs did you affect?

      --
      -- Stephen.
    23. Re:DLL vs static libs by WindBourne · · Score: 1

      When 1Gb of memory becomes standard, then maybe. Not even close. On any system static lib application will be 25-100 M in size. This is ok for a server where it is the only real process running (think oracle), but on the desktop. You would be at 1 gig on an MS, Mac, or Linux in no time at all.

      --
      I prefer the "u" in honour as it seems to be missing these days.
    24. Re:DLL vs static libs by jdreed1024 · · Score: 2
      Except for plugins, I see no reason why developers would need DLLs. Can anyone shed some light here ?

      Say you're releasing a suite of programs. These programs are not necessarily bundled - some people might only need 1 program - others might need all 3 of them. All these programs need to use the $foo protocol. So you write a DLL for implementing the $foo protocol, and then all 3 of your apps use it. This is a good thing - say a security flaw is discovered - patch the DLL and send it out there. You don't have to patch each application.

      The real issue is the poor use of DLLs and lack of coordination between developers and Microsoft. How many copies of the Visual Basic Runtime DLLs do you have on your system? (VBRUN*.DLL) What about the MS Visual C Runtime? (MSVCRT*.DLL). Or the Microsoft Foundation Classes (MFC*.DLL)? Granted there is some version skew in these DLLs, but I found three identical copies of MSVCRT.DLL - one from MGI PhotoSuite, one from WinVNC, and one from Adaptec Easy CD Creator. And there are lots more identical ones too. I think what Microsoft is doing is a good idea, although the whole problem could have been avoided with better developers and smarter installer programs...

      --
      There is no sig, there is only Zuul.
    25. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      In any case, it is downright inefficient to have the same code in 3 or 4 places in memory, even if you have got loads to spare.

      Right, but that's mostly academic. Of course if you're in a multi-user environment, with (say) 10+ copies of the same thing going, then it starts to add up. In a single-user Windows setup, particularly if you have "loads to spare" it's not really an issue.

    26. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      But if each time you upgrade the dll your program keeps using the old version what do you acheive?

    27. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      To be able to update a faulty library (think buffer over flow / root access bug), without needing to recompile your programs.

    28. Re:DLL vs static libs by GooberToo · · Score: 2, Informative

      Don't discount the amount of memory that you can save from shared libraries and DLL's. If you have a DLL which consumes, on average, 5M of ram and it's used by three applications at the same time (e.g. word, excel, outlook), that's a savings of 10M (3x5-5M; one still has to use it). It doesn't take too many applications (think GUI widget sets) to be run concurrently for this to significantly add up.

      It also helps reduce application start up times on MS platforms. In the case of Win, they don't generally use load on demand as one thinks of from the unix world. Instead, they load all references into the page file and then demand load from the page file as needed. This means, shorter start times for applications which share DLL's as they only have to be loaded once (into the page file).

    29. Re:DLL vs static libs by gibber · · Score: 3, Informative
      There are still a number of good reasons for using DLLs. Here are a few examples:

      • Many applications often share crypto routines in a dll. In order to add a new algorithm/protocol to all the applications on a system which use crypto (which is an unknown quantity) you really want to have these routines in a a dynamically linked library.
      • Often (in the proprietary, closed source world) routines are kept in a dll to keep their sources private. This doesn't prevent users of the routines to link them statically, however but it does keep the control of the content in the hands of the creator of the dll. I'm not saying that I think this is a great reason but it is compelling to a lot of proprietary software vendors.
      • In the opensource world the makers of libraries and the libraries' consumers (e.g. applications) are often different groups in weak syncronization. Because of the rapid development and improvement the applications can benefit from a library upgrade. Having to relink every statically linked application would require keeping a list of applications which is a messy prospect and more overhead than most users (packages/distros) want to deal with. It would require keeping around all of the original object files or compiling from sources. This would probably work best in Gentoo Linux but would still be a major pain and more time than it's worth.

      Really most UN*X systems (in particular those which are glibc based) already implement Microsoft's "new" scheme. For example, in /usr/lib/:

      lrwxrwxrwx 1 root root 20 Sep 23 17:58 libgtkhtml.so -> libgtkhtml.so.20.1.3
      lrwxrwxrwx 1 root root 20 Feb 9 2002 libgtkhtml.so.19 -> libgtkhtml.so.19.0.1
      -rwxr-xr-x 1 root root 549996 Feb 9 2002 libgtkhtml.so.19.0.1
      lrwxrwxrwx 1 root root 20 Sep 23 17:58 libgtkhtml.so.20 -> libgtkhtml.so.20.1.3
      -rwxr-xr-x 1 root root 549996 Feb 9 2002 libgtkhtml.so.20.0.0
      -rwxr-xr-x 1 root root 633193 Sep 23 17:58 libgtkhtml.so.20.1.3
      Note that this scheme can create a "unique identifier" allowing an application to use a particular function using "libname.particular.version" and the the name of the function.

      If an application just wants to use libgtkhtml but doesn't care what version it uses it will use "/usr/lib/libgtkhtml.so" and will get the most current version. If the application has a requirement of a version 19 of libgtkhtml it would use "/usr/lib/libgtkhtml.so.19" and get the latest version of libgtkhtml.so.19.0.1. If an application wanted version 20.1.3 it would merely use "/usr/lib/libgtkhtml.so.20.1.3". At any rate, you get the idea.

      It amuses me every time Microsoft comes out with a "new" twenty year old technology (such as say, symlinks). It's a move in the right direction but I think they lack the humility to say that they've been rejecting the right answer all along.

    30. Re:DLL vs static libs by oolon · · Score: 1

      Nothing, save some memory when running the programs (assuming another one wants the same DLL). I was trying to explain why dynamic linking is important, and why running programs against old libraries can be bad... And to be frank the importance of a stable API. However if your loader tells the library which version of the API the exec was linked with, it would be possible for one DLL to work exactly like the old one.

    31. Re:DLL vs static libs by mark_lybarger · · Score: 1

      lots of apps use those "operating system routines"; window gui widgets, networking calls, threading, etc.

      this is one area that java got right. with java, most of that is all in the JRE/JDK, and anything else you need as a developer you pretty much include those jar files in your application. the j2ee application portability makes applications put all needed libraries into the WEB-INF\lib area. you might have redundant libraries on your system, but you'll know that your entire application can be jarred/warred/earred/ and put into any compliant j2ee app server and it should work. doesn't always happen, but usually that means there's something non-compliant about the application and not really the server itself.

    32. Re:DLL vs static libs by orangesquid · · Score: 1

      Actually, right now just about everything goes into c:\windows and c:\windows\system32, without much organization for either. I often wish they would organize c:\windows\system32. No directory ANYWHERE should have more than 10-20 files, or at least not without providing some sort of index that describes the purpose of each and every one. On Windows, when the GUI utilities can't fix your problem, you're boned, and Microsoft Tech support can't help you either.

      You sir, are a clueless troll of the worst kind.

      --
      --TheOrangeSquid Is it any wonder things seem so awry? We swim in a sea of confusion and don't have to think to survive
    33. Re:DLL vs static libs by ochnap2 · · Score: 1

      Take a look in this interview

      http://newsforge.com/newsforge/03/03/04/2310251. sh tml?tid=23

      I've found it very clear regarding to the reason to use shared objects or dlls instead of static linking.

    34. Re:DLL vs static libs by Twylite · · Score: 1

      Of course, if you write "smarter" installer programs that follow the behaviour expected from the MS OS (write shared DLLs to the registry, identify programs that share them, store in \SYSTEM32), you end up with more upset users because (1) DllHell means you break programs that rely on the bugs in older versions of the shared library; (2) DllHell means your program breaks because you rely on the bugs in a version of the shared library but the system already has a newer version; (3) You have to reboot after installing because a system library needs to be replaced (and was most likely in use during the install, say by Explorer).

      The problem here is smart developers, who will insist on a DLL-version-specific workaround to do whatever it is they have their minds set on doing. Simple rule: if you think a library function isn't behaving correctly, don't use it like that, or your code won't work when they fix it! An often better solution is to distribute the shared libraries your program uses with it, but not install them as shared libraries, neatly bypassing the DLL problem, but irritating people like you, who find this a hack solution.

      Strange as it may seem, this is not a troll.

      --
      i-name =twylite [http://public.xdi.org/=twylite], see idcommons.net
    35. Re:DLL vs static libs by Twylite · · Score: 1

      There are two parts to DLL Hell. The first is well known: a DLL is replaced with a different version, causing software to break. The second is more subtle: a program is uninstalled causing a DLL to be removed or rolled back, and software breaks.

      The more structured a system in terms of storing shared libraries centrally, the worse problem #2 becomes, and the better the tracking required (i.e. registry entries to indicate software using that DLL) to prevent the problem.

      This is why a lot of modern software opts to have DLLs in its own directory structure, rather than to use the shared DLLs. Bypassing lots of hell.

      Of course, there are a number of interesting ways to combat this problem. One of the best is to use hard links (which are supported on NTFS) to link a DLL from a shared location into an application's directory structure. This only works successfully if there is a mechanism for versioning DLLs where the versions are stored in different files (a la Unix). It prevents removal (and with the correct permissions overwriting) of a DLL that is required by installed software.

      --
      i-name =twylite [http://public.xdi.org/=twylite], see idcommons.net
    36. Re:DLL vs static libs by jaavaaguru · · Score: 1

      Lets hope Microsoft has tighter security on their DLLs than your /usr/lib directory has. lrwxrwxrwx on the symlinks will allow *anyone* to change the link to point to another version of the library, which could be a hacked one.

    37. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      Uhm, that's not true (if you don't believe me, try it for yourself).

      Symlinks take permissions from their target, and by themselves are always 777.

    38. Re:DLL vs static libs by uptaphunk · · Score: 1

      Plus their is security. Technically DLL's (unless your specifically speaking about the core OS DLL's or VXD's run as a System account), are NOT directly executable and therefore take on the security context of their host. The Security point is bogus. Applications do not have the same level of access as DLLs. Uh, DLL's (either straight Win32 or as containers for COM) use the security context as their host. PERIOD. DLL's run INPROCESS or seemingly OUTOFPROCESS in a surrogate host - but nonetheless - They always run in the security context as their host. Other than that, your points are valid.

      --
      Geeks of the World, Unite!
    39. Re:DLL vs static libs by Pxtl · · Score: 1

      I won a free computer through a contest, and it came standard with 128 megs of ram and windows XP. A quick look in my local store's catalog shows this to be the standard loadout. 128 megs and winXP is not usable. New OS is designed for new hardware, but unfortunately until RAM makers discontinue the 128-meg-chip, we will still have computers shipped impotent.

    40. Re:DLL vs static libs by mattdm · · Score: 1

      that's why you patch the library to fix just the specific problem instead of making a radical change.

    41. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      On any system static lib application will be 25-100 M in size

      Wrong. Just wrong.

    42. Re:DLL vs static libs by arkanes · · Score: 1

      Well, it works, except when you change minor JVM versions, or use a different JVM vendor. Every Java server app we have comes with installs it's own JVM and jrun and won't work with the others. Woo.

    43. Re:DLL vs static libs by oconnorcjo · · Score: 4, Interesting
      Agreed. Windows XP gobbles up about 110 megabytes of RAM when it's just booted, without any background images, screensavers, system tray apps running etc. Dropping the fancy XP theme frees up about 5 megs of RAM, but if your system only has 128 or 256 megs of RAM you don't have a lot of room to load apps.

      Actually I think the reason XP takes up so much ram is because it is loading up a ton of USELESS DLL's and COM objects into ram so that IE will load faster and Word XYZ will open immediately, .NET Framework, VB Framework and the list goes on. A whole bunch of junk that really should not reside in RAM just so that MS's stuff loads faster than the competitors products. DLL's are a great idea but Microsoft has found that they have too many DLL's and they are disorganized.

      The idea that an opperating system has a standard core set of DLL's that all programs can use to add functionality to programs is a WONDERFULL IDEA! Microsoft is only finding out that there is such thing as too much of a wonderfull thing. They have been writing DLL's and COM components for windows for almost ten years and they need to keep backward compatibility with all of them no matter how ugly or badly implemented an original DLL was done. This method will allow them to stop having to keep backward compatibilty (but leads to other problems such as bloat). They will still have too many DLL's that are only usefull to only one or two programs (and this solution won't make it better) and really should be statically linked or put in a private directory of the XYZ program (and uninstalled when the program is) but this is a good step in the future management of DLL cruft because they can at least start the process of breaking backward compatibility of badly designed libraries.

      --
      I miss the Karma Whores.
    44. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      BUT....

      I really can't afford $40 for new memory. I built my computer like 2 years ago, a athlon 1.2g with 256mb ram, and it runs xp fine, but not much more. And I've been unimployed for the last year eating ramin noodles and just reciently got a job making less than before and now all my money goes to catching up on my bills.

    45. Re:DLL vs static libs by Steeltoe · · Score: 2, Insightful

      If there is a bug or a security problem in a DLL you only have to replace that DLL instead of all statically linked programs.

      This new fix seems to break that. You'd need 10-20 different versions of the DLL to overwrite the "unique IDs", if it is at all possible. Another "fix" that fixes the symptoms and introduce new "features", not the real problem (lack of code-proofing and immature languages).

      Can be quite entertaining in the future. I sure hope my company stays clear away from Longhorn.

    46. Re:DLL vs static libs by Ctrl-Z · · Score: 2, Informative

      Untrue.

      The permissions of symbolic links are not used.
      From chmod(1),

      chmod never changes the permissions of symbolic links; the chmod system call cannot change their permissions. This is not a problem since the permissions of symbolic links are never used.

      AFAIK, symbolic links aren't actually changed, only created and deleted.
      In order to do that, you need write permission on the directory.

      HTH.
      --
      www.timcoleman.com is a total waste of your time. Never go there.
    47. Re:DLL vs static libs by LeftOfCentre · · Score: 1

      Your suggestions don't solve DLL hell, given that some shared components must be explicitly registered, and only one version of the component can be registered at once.

    48. Re:DLL vs static libs by SN74S181 · · Score: 1

      Furthermore, on Debian GNU/Linux I never have "DLL misery" because my operating system is not brain-dead.

      And, because you only install software version-controlled and inspected by Debian. That's like only installing software on your Macintosh that you download from the Apple website. It's probably much more stable than buying software you want to use at stores and downloading useful stuff off third party websites, but it's very limiting.

    49. Re:DLL vs static libs by Xformer · · Score: 1

      Most of the ass-biting I've had from this phenomenon is with MFC DLLs. It almost seems like they're trying to cover up a major problem of their own, rather than fixing it at the source a long time ago.

      --
      All I want is a kind word, a warm bed and unlimited power.
    50. Re:DLL vs static libs by phorm · · Score: 1

      Yes, this is something I've didn't quite figure out. Disk space might not be an issue, but how do they determine which DLL's to load with windows? I suppose major system DLL's will load with the OS, grabbing the latest version.

      A nice trick would be: Make all programs run as usual, loading whatever is the declared most recent/stable version of a DLL. If the program doesn't run right, allow the user to check a box in properties/whatever that says "run with native DLL versions" or whatever... something like the options to emulate win95/98/etc (did these ever actually help anyone).

    51. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      Finally, I think with Windoze I think there is a mode in which DLL's can have global data, shared among all programs using it. Not sure though, its years since I did any windoze programming.

      Yes, there is.

    52. Re:DLL vs static libs by dvdeug · · Score: 1

      If you lie to the system, and say, "This new libzlib.so is libzlib.so.5", you still run the risk of breaking all the apps.

      The actual library is libz.so.1, and like any good library, it doesn't gratuitously break the ABI and it fixes bug in bugfixing releases, not ABI-breaking releases. So no lieing to the system necessary.

      The only way to know that they all still work is to test them all.

      Which is true if you recompile your kernel or install a new version of grep. If it's a decent library, the odds are about the same that something broke; i.e. pretty low.

    53. Re:DLL vs static libs by be-fan · · Score: 1

      That's like only installing software on your Macintosh that you download from the Apple website.
      >>>>>>>>>
      Does Apple's website have more than 10,000 software packages?

      but it's very limiting.
      >>>>>>>>>
      Not really. Pretty much every major program is in the package list. The ones that aren't are relatively obscure things, and even those often have .debs available.

      --
      A deep unwavering belief is a sure sign you're missing something...
    54. Re:DLL vs static libs by intermodal · · Score: 1

      I don't build machines with less than 1GB of RAM anymore. Even though I run Linux. I want anything that wants to cache in my RAM to do it in physical RAM rather than my swap, so as to relieve the stress and wear that puts on a hard drive. I figure dropping the extra (paste price of hard drive here) to reduce the wear on my existing hard drive saves me plenty in data recovery/reinstallation time. Plus it runs faster. As for those of you who have older machines, try a lighter shell. I hear Phoenix works nicely.

      --
      In SOVIET RUSSIA... erm...NSA AMERICA, the Internet logs onto YOU!
    55. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      Then just make sure you don't remove/change functionality on shared DLL's - add new methods, or interfaces. I'm not sure its possible to complete avoid this problem if developers are going to be stupid! If you replace one bit of code with another bit of code which existing apps rely on, you`re going to have a problem.

    56. Re:DLL vs static libs by be-fan · · Score: 1

      A whole lot. Especially since glibc.so and ld-linux.so are the only OS-level shared libraries. We're talking all the X11 libraries, the Qt/KDE libraries, the GTK libraries, the list goes *on*. Per-application library bloat is already a problem, even with shared libraries (read up on the KDE shared C++ library fiasco). Not only does it impact memory, but caches (which aren't any bigger today than they were in 1995) as well. An if every app as 10MB in size, can you imagine how that would impact the already strained HDD bandwidth?

      --
      A deep unwavering belief is a sure sign you're missing something...
    57. Re:DLL vs static libs by The_K4 · · Score: 1

      There are alot of people just catching up on bill, you know what....we have to just do thing out some things. like the faster computers and the RAM to make our current ones run better.....SUCK IT UP! If you've got money...good, if not....don't wine about it!

    58. Re:DLL vs static libs by Grishnakh · · Score: 1

      Um, no. It's easy to download the source to countless open-source projects on the web and compile them on any Linux system, or to download the pre-build RPM. For the source version, the configure script checks that you have the proper versions of everything you need. For the RPM version, RPM checks that.

      The key isn't getting everything from one vendor, because that's not what's happening (although it is easier to get it all from your distro because then you don't have to hunt around for libraries). The key is having a well-designed system from the outset, which everyone works within.

    59. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      >Actually, right now just about everything goes into c:\windows and c:\windows\system32

      Oh really! So what are all those /program files/.. directories full of all those program binaries?

      > No directory ANYWHERE should have more than 10-20 files

      I take it you have never worked with any systems larger than you can fit on your Fischer-Price junior office desk.

      Do you think if the directory has more than 20 files the OS might get confused or something?

      I'm looking at an airline reservation system server right now, one directory has 2382648 files in it! It's ok, I don't need to remember them all because we have 'compuer programs' to do it for us!

    60. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      oh yeah, because if you can afford XP you can certainly afford 512 megs of ram. what is it 75 bucks at crucial now? ~gats

    61. Re:DLL vs static libs by fruey · · Score: 1
      This isn't about Linux, it's about Windows.

      As much RAM as you can afford has always been the key. However, sometimes you need disk space on a server more than you need memory. Depends on load.

      Going OT onto Linux... I have a very light window manager (ratpoison) and always use Phoenix and mutt, so I have low memory requirements. However, this doesn't help on WinXP boxes, where the OS itself is the issue, even trimmed down it's a HOG full of features most of us don't need, and the eye candy is just plain waste of space.

      --
      Conversion Rate Optimisation French / English consultant
    62. Re:DLL vs static libs by Dr.+Evil · · Score: 1

      Pretty much every major program is in the package list. The ones that aren't are relatively obscure things, and even those often have .debs available.

      Mozilla is still at 1.0 for Debian stable.

      You only have a lot of choices if you're running Testing or Unstable... otherwise everything really new has a dependency on one of those testing or unstable libraries.

      I shouldn't have to upgrade my shared libraries to unstable to install the latest Mozilla deb.

    63. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      >Not sure though, its years since I did any windoze programming.

      I take it you've been unemployed for a while then?

      Fries and a large Coke with that please!

    64. Re:DLL vs static libs by Anonymous Coward · · Score: 1

      >> Furthermore, on Debian GNU/Linux I never have "DLL misery" because my operating system is not brain-dead.

      Hm, well that's nothing like RedHat then. I've _never_ had problems with DLLs on windows, but I get dependency problems just about any time I try to install a binary RPM that's not directly from the same RedHat distribution. I shouldn't have to rebuild everything from source, or try to fix 20 dependencies to install some trivial package.

      Perhaps there's no good solution to this, other than for developers (especially companies who package distros) to release better, more stable code less frequently.

    65. Re:DLL vs static libs by SN74S181 · · Score: 1

      The grandparent post kind of implied that he only installs .deb files. That's a real advantage to sticking with party-line GNU/Debian, after all. I apologize if I misinterpreted what he said.

      I primarily use the NetBSD pkgsrc method, compiling from source, on my Unix boxes. The only binaries are the core distribution, which is under 80 Mb of really essential stuff. It's about the same thing as going all Debian. But when I run into something cool I want that isn't mainstream enough, sure, I'll pull in a source tarball from outside and build and install it.

      My point is, that doesn't allow one to drag in all kinds of binary code, i.e. games and what-not. Hell, it means that it can take forever to build Mozilla if you choose to build from source.

      The well-designed system that Free Software represents actually opposes binary software distribution by design. Maybe in a few years that tactic will bring us everything that could be wanted on a computer system. Not yet, though.

    66. Re:DLL vs static libs by Jugalator · · Score: 1

      Well, better that an OS uses up the RAM than leaves it alone, don't you think? Even if it use RAM for caches, etc, that's still a better use than leaving it alone. Don't worry - XP will unload lots of unused stuff if it feel the need to do so. Operating Systems of today are smart enough to keep frequently accessed data in RAM and throw other stuff out, even XP.

      --
      Beware: In C++, your friends can see your privates!
    67. Re:DLL vs static libs by gibber · · Score: 1
      You dope. All soft links appear as lrwxrwxrwx.

      • sheesh.
    68. Re:DLL vs static libs by PissedOffGuy · · Score: 1

      Actually I think the reason XP takes up so much ram is because it is loading up a ton of USELESS DLL's and COM objects into ram so that IE will load faster and Word XYZ will open immediately, .NET Framework, VB Framework and the list goes on.

      this is incorrect. many applications are simply written poorly; messenger loads faster than icq and media player loads faster than realplayer because icq and realplayer haven't done the work to make load time fast. by delay-loading DLLs you can speed up application load time immensely but many products don't do this.

      there is no link between the operating system and word; if word loads too quickly it's because WORD has pre-loaded its modules via its little quicklaunch area it used to have, which it put into the startup folder. any application can make use of these tricks; although of course pre-loading the system like this is counterproductive in terms of using the system for other applications.

    69. Re:DLL vs static libs by Grishnakh · · Score: 1

      Yeah, I'd agree that Free Software's way of doing things is a real hindrance to binary software distribution, though I don't think it's by design. Binary-only distribution just wasn't a consideration.

      For a typical Linux system in a corporate environment, there's a very small number of software packages installed which are the proprietary, binary-only type, and these seem to usually have any libraries they use statically-linked. And I think this is the way it should be. It sure beats the hell out of the typical Windows system where there's a boatload of large and small applications, every one of which is proprietary and costs money, even if it's some stupid little utility that should have been included in the OS, or worse yet, some stupid utility which only exists to fix a weakness or vulnerability in the OS (and you have to pay for in addition to paying for the OS!).

      By contrast, a typical Linux system, like the one I'm using now at a huge multinational corporation, has all open-source applications and libraries, except for a small number of very expensive EDA tools which we run on the systems. These tools are gigantic anyway, and take up tons of memory when running (this system has 4GB installed), so having some 100k library statically linked probably isn't a big deal anyway.

      The other nice thing is that these proprietary packages are only installed at one place, on a file server used by thousands of these Linux machines. The package can run unchanged on these machines, regardless of whether they're using kernel 2.4.x or 2.2.x, or glibc 2.2.5 or 2.1. In the Windows world, you have to separately install each application on every single machine you're going to use it on. What a pain!

    70. Re:DLL vs static libs by CoolVibe · · Score: 1
      Mod this up.

      It explains exactly what I usually tell everyone that notices that "insecurity". What's next, ls -l reads /etc/passwd? ;-)

    71. Re:DLL vs static libs by oconnorcjo · · Score: 1
      Each static library you use in your code adds to the overall program size, as you've stated. Thus increasing load time when you run the app. A 4MB exe loads a lot faster than a 400MB exe. (At least when the bulk of the difference is actual code/runtime-data, rather than generic data tacked on to the end of the file.) When you have DLLs, the OS will reuse already loaded DLLs for your app, and will keep newly loaded DLLs in memory for a while even after the app shuts down. This tremendously speeds up application loading.

      But if the DLL's really only apply to your program and are not likely to be used by anyone else, then you have a DLL in memory longer than it should (and thus bloat) along with no other real benefits (whether your program is five pieces or one piece, it is still the same size- just not as apparent). Now that is not a big deal as long as the DLL's are in the same directory as your program and don't get loaded up when the system is turned on (like many MS DLL's)

      --
      I miss the Karma Whores.
    72. Re:DLL vs static libs by AnotherBlackHat · · Score: 1
      Well, on a typical system there might be a hundred or so processes.


      There might be a system running a hundred processes, but a typical windows system runs more like 8.

      And very few of those 8 actually share the dlls they load.

      Most running programs are less than 50% library code.
      Trivial apps aren't, but how many trival apps do you run at the same time?

      -- this is not a .sig

    73. Re:DLL vs static libs by AndroidCat · · Score: 1
      This is a company which has apparently never come up with a standard safe way of allocating and using buffers to prevent overflow. (Other software has buffer overflow problems too from time to time, but Microsoft has a continuing plague of them, and should be able to set company-wide standards.)

      Proper version compatablity testing probably gets pushed to the back of the queue by their "upgrade cycle hell", and as a result, never gets done.

      --
      One line blog. I hear that they're called Twitters now.
    74. Re:DLL vs static libs by tzanger · · Score: 1

      Actually I think the reason XP takes up so much ram is because it is loading up a ton of USELESS DLL's and COM objects into ram so that IE will load faster and Word XYZ will open immediately,

      KDE does the exact same thing with its startkde script -- it specifies LD_BIND=NOW for kdeinit, causing all the libraries that kdeinit will require (which is all of the major KDE ones) to be loaded and resolved immediately, instead of on-demand. This increases start time, but when you load up a konsole or other KDE app the libraries are all already loaded. It even goes a step further and (optionally) starts up a few konqueror browser sessions in the background so that when you call one up it is there immediately.

      This isn't a bad thing. Not for MS and not for KDE. Computers are meant to serve people. This library preloading is a good thing.

    75. Re:DLL vs static libs by tzanger · · Score: 1

      It explains exactly what I usually tell everyone that notices that "insecurity". What's next, ls -l reads /etc/passwd? ;-)

      Actually, everyone _does_ need to be able to read /etc/passwd. That's where the uid/gid and home directory information is stored. It's also why /etc/shadow was created, which has root.root and 600 perms, and actually holds the passwords. :-)

    76. Re:DLL vs static libs by CoolVibe · · Score: 1
      Well, some paranoid person I know once sent me a strace dump of 'ls' and claimed that his system was 'trojaned' because it was reading his password file for 'no apparent reason'. I explained that ls needs to look up the users and groups from the password file/NIS/whatever and uses the getpwent family of calls for it, which can result in /etc/passwd being read.

      Of couse that didn't satisfy him. I told him to look in the source of ls(1) and read the getpwent manpage.

      It's misconceptions like these that make good stories :)

    77. Re:DLL vs static libs by jaavaaguru · · Score: 1

      Oops. I obviosuly wasn't concentrating much at that point.

    78. Re:DLL vs static libs by scot4875 · · Score: 1

      Let's see... I've got one!

      comctl32.dll (~500k)

      Not to mention user32.dll (~400k)

      My system (Win2k), with nothing extra on right now but the browser and task manager, is at 21 processes. Naturally, some of those are system processes and won't be using comctl32 or user32, but pretty much every other process will be, and that's nearly a meg saved for every one.

      All things considered, the .DLL system isn't perfect. But the only time I've ever run into DLL hell was as a sysadmin for the University of Idaho PC labs, where we had about 500 apps that had to be available on each of our ~700 workstations. As a desktop user, I've had a .DLL conflict only 1 time.

      So, all things considered, I think .DLLs serve a useful purpose.

      --Jeremy

      --
      Jesus was a liberal
    79. Re:DLL vs static libs by Arethan · · Score: 1

      Actually, I've read in several Win32API books that DLLs are the only way to get direct access to hardware.

      Now I never said anything about security contexts. You are absolutely correct in the regard that calling to DLLs doesn't mean you get a new security context.

      But you're also wrong. At least in explaination. A DLL technically has no security context. Security contexts are bound to processes, not DLLs. If a process makes a call to a DLL function, that routine runs with the process's security context. Even if the DLL was initially loaded because a different user's process called for it first. I'm pretty sure that what you were thinking at the time was correct, but you weren't very clear when you said it. Figured I'd clear it up for the ppl who aren't so sure. :)

      The security I was referring to was purely about hardware access. I probably should have worded that differently. So I'm partly at fault as well. Anyways, we're both right and both wrong. Kind of funny, that usually doesn't happen. :)

    80. Re:DLL vs static libs by Fat+Cow · · Score: 1

      Most of the stages of loading a dll into your process aren't sped up by preloading everything into a foreign process. See http://msdn.microsoft.com/msdnmag/issues/0500/hood /default.aspx for more details. Maybe the only speedup would be at the kernel level - i.e. the dll file gets paged into memory, but even that would be messed up if your dll has to be rebased.

      Another case where preloading would help would be if explorer.exe were to implement a bunch of COM object to be accessed out-of-process by other process. I don't think this technique is used though - it would have a lot of other disadvantages, e.g. the per-call overhead of cross-process calls.

      In short, this looks like an anti-MS myth to me.

      --
      stay frosty and alert
    81. Re:DLL vs static libs by Anonymous Coward · · Score: 0
      LOL very funny.

      Actually, my favourite platform of choice is this one, which might give you a clue as to what my job is.

    82. Re:DLL vs static libs by rabidcow · · Score: 3, Interesting

      There might be a system running a hundred processes, but a typical windows system runs more like 8.

      I currently have 6 programs running, I think that's pretty typical.

      How many processes? 35.

      Most running programs are less than 50% library code.

      Hm, I'll read that as "running processes", since that's what's important.

      Let's take one at random: winampa.exe
      (winamp's "agent", the little toolbar dealie)
      Total image is ~8MB
      This includes:
      - ntdll.dll: 492kB
      - kernel32.dll: 724kB
      - user32.dll: 400kB
      - gdi32.dll: 240kB
      - advapi32.dll: 368kB
      - rpcrt4.dll: 448kB
      - shell32.dll: 2300kB
      - shlwapi.dll: 400kB
      - msvcrt.dll: 280kB
      - comctl32.dll: 552kB
      - imm32.dll: 104kB
      - shw95dll.dll: 124kB
      - wow32.dll: 256kB
      - ntvdm.exe: 644kB
      - comdlg32.dll: 248kB
      - version.dll: 28kB
      - lz32.dll: 24kB
      - winampa.exe: 36kB

      I don't know about rpcrt4 or some of these, but shell32.dll alone is a huge fraction of its total size. Well over 50% of the memory use of this process is shared.

      Trivial apps aren't, but how many trival apps do you run at the same time?

      Is this a trivial process? That's about 7MB of shared code. If this is a typical amount (I believe it is), apps have to use >14MB to be less than 50% shared code.

      How many do? Only 5 of the 35.

    83. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      I'd have to say, that that is a great idea.

    84. Re:DLL vs static libs by be-fan · · Score: 1

      Debian unstable isn't actually unstable software. It's just software that is so well tested that its fit for a mission critical server. If you're running Mozilla, it's probably on a desktop, in which case you can use Testing or even Unstable without any worry.

      --
      A deep unwavering belief is a sure sign you're missing something...
    85. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      DLLs/EXEs on WinNT are not stored in the page file. They are "backed" by the original file. This is the reason you cant delete or replace a file in use; but you *can* rename them. There are 2 ways to *correctly* patch a method. Both of them you need to first check to see if the file is in use, and if not, replace it. After that a) rename file/put new file in place/delete or boot or b) put it in a registry key to notify NTLDR/NTDETECT to replace the file before continuing to load the system.

    86. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      A fork() uses copy-on-write pages, meaning data won't be copied until it's changed. Threads use the same address space. So, therefore, the size of the binary isn't a factor when you spawn a process/thread.

      If you're spawning threads from system() or the exec*() family, on the other hand...

    87. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      RPM dependencies is entirely different issue. Has nothing to do with .sl versioning. And besides, fixing 20 dependencies? Give me a break. I've got an ancient SuSE distro that I've upgraded and modified heavily. For starters, I began with a 2.0.something kernel. Its now a 2.4.20rc3. Do you have any idea the number of critical pakages I had to update? BTW, I am completely RPM based, oh and thats another thing, updating to RPM 4.whatever. I also like my large apps in /opt, e.g. GIMP. I have forgoten how many versions of GIMP I've installed. Right now I have two, one stable and one development. In all of this, I have never had 20 dependencies issues. Most that I have are due to SuSEs wierd ( relative to Redhats) RPM naming convetion. I get my RPMs from Redhat, Mandrake, and the projects themselves. The issues that I do have, I can usualy solve by tweeking the .spec. Thats what .srpms are for. Anyways why in the fsck would you be using RPMS from another distro when you obviously don't know what your doing?

    88. Re:DLL vs static libs by gibber · · Score: 1

      No problem. Easy mistake.

    89. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      > Debian unstable isn't actually unstable software. It's just software that is so well tested that its fit for a mission critical server.

      WTF?!?

    90. Re:DLL vs static libs by uptaphunk · · Score: 1

      Well, I will have to say you were courteous in your reply - but you mispoke me.

      In one sentence you quote me "You are absolutely correct in the regard that calling to DLLs doesn't mean you get a new security context.
      " and then in the next sentence you say "But you're also wrong. At least in explaination. A DLL technically has no security context. Security contexts are bound to processes, not DLLs..

      That is precisely what is meant when a DLL runs under the security context of its host (process).

      --
      Geeks of the World, Unite!
    91. Re:DLL vs static libs by Anonymous Coward · · Score: 0

      You don't get DLL problems on windows because installation programs feel free to overwrite DLLs if they think their copy is newer. This is great when it works, but horrible when it fails.

      Your dependency "problems" on RedHat are the direct result of actually dealing with the shared library dependency issue. The fact that you have 20 dependencies not satisfied is unfortunate, and it clearly means we need to group packages better, but once you satisfy all those dependencies you can be confident that the programs all have the shared libraries they need. Unlike on Windows, where you apparently can't be sure.

    92. Re:DLL vs static libs by LeftOfCentre · · Score: 1

      What you say is valid for developers of DLLs, but not developers who make use of DLLs. People who want to use shared components are likely to have to confront this problem sooner or later.

  3. Re:In other news by Anonymous Coward · · Score: 1, Interesting

    How does Linux deal with the issue of linked libraries? I'm assuming it has something similar.

  4. But then you can't upgrade the DLL's... by Anonymous Coward · · Score: 0

    You really can't win... One nice thing about shared libraries is that you ~can~ upgrade the libraries independent of the applications. If there turns out to be a nasty buffer overflow you can fix the library and all the applications get fixed.

    If an application is tied to a particular DLL, you'll have to replace the DLL and ~all~ applications that depend on it. Similarly, if you add features to the DLL (say a better file-picker dialog box or more features in something like GNU readline) you don't get the new features.

    1. Re:But then you can't upgrade the DLL's... by Anonymous Coward · · Score: 0

      I'm sure there must be some kind of interface to this DLL-heaven where you decide on an API level if your new DLL is to overwrite the existing DLL, or if both the new DLL and the existing DLL should now just have their own spaces in the DLL registry.

      Microsoft has learned something about file management...finally.

    2. Re:But then you can't upgrade the DLL's... by JamesOff · · Score: 1

      Go and read how .NET (for it is that which manages this) handles side-by-side versions of assemblies. You can require a certain version but allow alternatives.

      It's interesting to note how a large number of posts here are deriding MS for doing this and introducing "more bloat"... probably the same people who have been insulting Windows for having DLL Hell.

    3. Re:But then you can't upgrade the DLL's... by Anonymous Coward · · Score: 0

      If the approach was technically sound, I don't think there would be so many complaints.

      And, most of the posts are not critisising the approach itself, but rather M$'s marketing claims (nothing new).

    4. Re:But then you can't upgrade the DLL's... by Anonymous Coward · · Score: 0

      This article describes .NET's Global Assembly Cache (GAC) very easily. The GAC is very lightweight, isn't registry-based, and is a small piece of code. It adds almost no bloat to the OS, and runs independently of the registry.

  5. Wine by kinema · · Score: 1

    Just more confusion for Wine.

  6. DLL by bl1st3r · · Score: 1

    DLLs were always to me one of the largest reasons preventing programming for a Windows platform. I've never been able to find adequate information to help simplify using them, and since the topic is DLL's, I was just wondering if anyone had any good resources for programming to make use of DLL's.

    --
    hrrm.
    1. Re:DLL by arkanes · · Score: 1
      #include "funkydll.h"

      add funkydll.lib to your linker settings (some header files do this for you, with VC++ pragmas)

      Profit! (no, not really)

      Call functions in the DLL. It's pretty straightforward to use them. If you want to dynamically load and unload them, you need to know about LoadLibray and UnloadLibrary, but they to are easy to use.

      Writing them is a little trickier, but not much, at least for simple cases - there's some interesting things like shared regions and stuff, but most of the time you just write your code as normal, prefixing it with a macro like DLLFUNCTION that expands to either dllimport or dllexport (based on whether you're building the library or using it), compile, and you're done.

  7. How about versions in the file name by chrisseaton · · Score: 0

    When you recompile a new version, why not call it shell32_444.dll, for example, instead of shell32.dll. That way you could refer to the version you wanted by file name.

    1. Re:How about versions in the file name by gmack · · Score: 1

      That would require thinking on the part of the author.

      What MS really needs is a dependancy system that would eliminate the need for software vendors to have to include system DLLs with their software.

      As it sits I worry this system will prevent upgrades.

    2. Re:How about versions in the file name by Anonymous Coward · · Score: 0

      Well, Unix/Linux libraries have done this forever, old version of library could be libz.so.1.1.3 and new version libz.so.1.1.4, when apps wants to use this library it tries to load libz.so.1 and gets whatever that symlink points to.

      If there will ever be version 2 of that library, it will be named libz.so.2.0.0 so it can co-exists with version 1.x library. Apps that use version 2 of that library try to load libz.so.2 and get version 2.0.0.

    3. Re:How about versions in the file name by Epeeist · · Score: 1

      You mean like libgdbm.so.2.0.0

      That would be innovative :-) [And probably patentable]

    4. Re:How about versions in the file name by sweede · · Score: 1

      Because only Microsoft has source code to most of the files in system32. Microsoft compiles them and distributes them in patches.

      it is far simpler to distribute a new 300k shell32.dll file than every file that references shell32.dll (which is just about every exe).

      The authors of software (not MS) include their own versions of shell32.dll, mfc42.dll, etc because they dont know how to package software (EVERY Windows system requires those two files) and they wrote their app on an older version of Windows (i.e. the mfc for w2k will not work on XP). Of course that goes back to the authors of Windows software need to use their heads when packaging software and NOT INCLUDE files that are already in system32.

      but then, we also must not forget those people that hack and reverse engineer shell32, mfc42, etc to add their own extensions into it, rather than creating a seperate DLL that hooks into mfc42 (which is very easy thing to do per MSDN Magazine, not sure which issue)

      --
      I follow the SDK and GDN principles.. Spelling Dont Kount, Grammer Dont Neither
    5. Re:How about versions in the file name by chrisseaton · · Score: 1

      mfc42.dll - there you go, MFC 4.2

      Another example is MSVBVM60.DLL, Microsoft Visual Basic Virtual Machine 6.0

      If it works sometimes, why don't they always do it?

    6. Re:How about versions in the file name by Anonymous Coward · · Score: 0

      Why break with the Windows naming scheme, though? Try naming it shl32_444.dll and sticking it in c:\windows\system\shared files\ instead. That way, not only is the filename obscure so that it'll blend in easily with the other 9000 dlls on the computer, but it's in a directory path with a space, so that some applications might break if it tries to access it.

    7. Re:How about versions in the file name by yerricde · · Score: 1

      If [DLL versioning as in MFC 4.2] works sometimes, why don't they always do it?

      Because Microsoft finds out only too late that MFC 4.2.0, 4.2.1, 4.2.2, etc. have subtly different semantics.

      --
      Will I retire or break 10K?
  8. hrm by pummer · · Score: 1

    by the end of this, I'm gonna have 1,000,000 files in system32.

    1. Re:hrm by phrantic · · Score: 1

      As far as i know windows gets upset if you go above 40 something thousand files in a sinlge directory. Why do I know this? one of the guys I work with had his NT box hacked as a SPAM realy, and it fell over at that point.

      --
      --My sig is bigger than your sig--
    2. Re:hrm by AnotherBlackHat · · Score: 1

      Windows 95 will not allow more than 32767 files in a single directory.

      It's probable that later versions also have that limitation.

      -- this is not a .sig

  9. Fast as a bullet! by dark-br · · Score: 1, Funny

    Now Microsoft is hoping to end when has become known as DLL Hell by building into Windows Server 2003 a system that will stop updated DLLs installed by new applications from overwriting older versions of the same DLLs that may still be used by existing applications.

    W2003 - W95 = 8 Years to have that briliant idea!

    1. Re:Fast as a bullet! by Michael_Burton · · Score: 1

      Strong binding? Oh, no--you mean we're not already in strong bondage to Microsoft?

      --
      When all you have is an axe, everything looks like a grindstone.
  10. Only for .net by Anonymous Coward · · Score: 1

    Of course, it will only apply to dotnet assemblies, where strong name is created by signing the file by the vendor (the side effect is eliminating any modifications to shared libraries).

    Anyone interested in these things should read documentation in net sdk. It will not solve native code dll hell, nor it will solve hunger in the world, yada yada.

    Nothing to see there, move along folks.

    1. Re:Only for .net by Anonymous Coward · · Score: 0

      Of course, one should be moving towards .Net already, if you're working on the Windows platform.

  11. Yet another layer of cruft by IWannaBeAnAC · · Score: 1

    This will solve some problems where installing software blows away a specific version of some DLL that is required by some other piece of software, but at the expense of introducing hard to solve problems where two programs A and B expect to use the same DLL, but end up using different ones. Knowing M$, it will probably not be possible to manually change which version is linked in.

    1. Re:Yet another layer of cruft by Anonymous Coward · · Score: 0

      Thi$ will $olve $ome problem$ where in$talling $oftware blow$ away a $pecific ver$ion of $ome DLL that i$ required by $ome other piece of $oftware, but at the expen$e of introducing hard to $olve problem$ where two program$ A and B expect to u$e the $ame DLL, but end up u$ing different one$. Knowing M$, it will probably not be po$$ible to manually change which ver$ion i$ linked in.

  12. Old programs vs. new programs by chthon · · Score: 1

    What I envision with this system, is that old programs will probably break new ones, ie. make it impossible to install them or run well.

    1. Re:Old programs vs. new programs by e2d2 · · Score: 2, Insightful

      Why do you invision[sic] that? This system is actually going to prevent such a thing. As it is on a Windows platform if you install an old program that needs and installs an older dll it will simply overwrite the newer one causing new programs to break. It's called dll hell and it's been the scourge of win32 developers for a long time. This new system allows the old program to install the version it needs but the system still has a copy of the new one that the newer programs need and each program calls it's respective dll.

      If you want more information on how this is going to work simply look into how .Net handles dll versions using the
      Global Assembly Cache (GAC):

      The GAC can be used to register a dll on a system wide basis and allow other programs on the machine to link to that dll. It handles the different versions of each dll and how they are configured. BUT you do not have to use the GAC to use a dll within .Net, if you prefer you can instead simply copy the dll to the bin directory inside the application directory and that application will use that dll. That's usually refered to as XCOPY deployment.

      The trade off of this system is that you have more files on the filesystem which need to be managed. It has it's own drawbacks. But to anyone who's ever f'd a win32 machine because a system dll got replaced when they installed that dvd player app from 1997 and it just happened to replace a critical system dll that was just updated in the last service pack, this is a godsend.

  13. We have enough hard drive space by Mostly+Monkey · · Score: 1

    With the large amounts of harddrive space that comes standard with just about every computer why should single DLLs still be referenced by different programs? How about we get back to self contained programs? The slight install size increase would certainaly be worth it.

    --
    Chika Chik-ah... do-e ow ow.
  14. DLL clutter is GOOD by Anonymous Coward · · Score: 0

    DLL clutter uses up HD space and more importantly increases number of directory entries in system directories and smallish fragmentation-inducing files. This hurts HD performance and uses CPU power, thus driving the development forward at this sad time, when ancient, many years old computers can reasonably run even the newest office applications.

  15. Welcome to VMS by beldraen · · Score: 5, Insightful

    I always find it interesting that Microsoft gets to announce and shake up the world with "a new feature" that they caused and of which at least one other major OS had long since solved. Versioning the library API? "Who would've thunk it?!?"

    In other news, Microsoft invents a journaling file system to prevent data loss.. oh, wait..

    --
    Bel, the mostly sane.. "Of course I can't see anything! I'm standing on the shoulders of idiots." -- Me
    1. Re:Welcome to VMS by Metaldsa · · Score: 3, Insightful

      When 3% of desktop computers change a feature it isn't news. When 90% of desktop computers change their dll system it can become a worthy newspost. I think its not about the feature but how it will affect the mom and dads who don't follow techie news. No longer will they become confused (or irate) when they install an app and another breaks.

      Though this could bring slower performance I think it will be negligable to most windows users.

    2. Re:Welcome to VMS by gomerbud · · Score: 1

      I kinda like VMS's file versioning. I can roll back sources without using RCS. I would say more, but its kinda hard to make interesting conversation when you sleep as little as I do.

      --
      Kan jeg få en pils, vær så snill?
    3. Re:Welcome to VMS by vocaro · · Score: 4, Insightful

      Microsoft Windows has had versioning of DLLs for as long as I can remember, way back in the days of 3.x. The article says, "Windows and Windows applications have no notion of DLL version numbers," but this is false. You can see the version numbers for DLLs on your system by starting Windows Explorer and navigating to the c:\windows\system directory. Right-click on a DLL, then click Properties, then click the Version tab. You'll see the version numbers there, including the company name, copyright info, and other important details. Windows applications can retrieve this data by calling the GetFileVersionInfo function.

    4. Re:Welcome to VMS by neonstz · · Score: 1

      NTFS is a journaling file system. :)

    5. Re:Welcome to VMS by arkanes · · Score: 1

      It's concurrent versioning, not just a resource tag. You still can only have one funkydll.dll in your system32 directory. You need either a name-based versioning (like linux and many 3rd pary libraries use), which would sadly break older apps, or you need to pull some funky tricks to allow older apps to still work (maybe) while allowing versioning as you go forward. The article would be about this funky trick.

    6. Re:Welcome to VMS by bogie · · Score: 4, Informative

      Yea, he's just saying they would try to take credit for it if they could.

      In all fairness NTFS had journaling years before any linux filesystem did.

      --
      If you wanna get rich, you know that payback is a bitch
    7. Re:Welcome to VMS by mpe · · Score: 1

      It's concurrent versioning, not just a resource tag. You still can only have one funkydll.dll in your system32 directory. You need either a name-based versioning (like linux and many 3rd pary libraries use), which would sadly break older apps, or you need to pull some funky tricks to allow older apps to still work (maybe) while allowing versioning as you go forward.

      In practice you don't really need any funky tricks since it isn't actually a requirement that DLLs always be in c:\windows\system in the first place.

  16. Security Issues vs. Api Versions by psychofox · · Score: 4, Insightful

    I wonder how they deal with upgrades to DLLs where the the upgrade represents a security fix. In such circumstances one would definetly not want an application to use an old version of a particular DLL...

    1. Re:Security Issues vs. Api Versions by sward · · Score: 5, Insightful

      Apparently, if you have 10 applications that each make use of the same DLL, not only will you now have 10 copies of that DLL, but in order to upgrade that DLL (e.g. for a security fix), you'll have to wait for each application's vendor to release its own upgrade package. You would then have a variety of security holes in your set of applications, despite their supposed common use of the same DLL.

      And the way most companies work, this upgrade package may also include changes to the application itself instead of being more focused as most here on Slashdot would prefer. The DLL fix may be the "main course", but you'll get a side of new bugs in the app, and possibly an upgrade fee as a cover charge.

    2. Re:Security Issues vs. Api Versions by marm · · Score: 1

      I wonder how they deal with upgrades to DLLs where the the upgrade represents a security fix.

      Well I have no idea if they do this, but one way would be to allow security fixes to invalidate certain DLL versions, so that when an app asks for a certain DLL version, rather than getting that it gets the next best 'safe' DLL version that's available.

      It's not perfect - it means that library versions still change underneath an application when a security fix is required, but it would work as long as developers are careful not to break things when doing the security fix.

    3. Re:Security Issues vs. Api Versions by oolon · · Score: 1

      Here is another way, when a library is dynamically loaded, the program tells it what "version" it was linked against, this can then switch the new libraries api to work like the older version of the API. For example if a function aways returned zero in version 3, they latter it was changed to return a bool in version 3.2 when the it loaded and sees the program was linked against a version 3, the function will return 0.

      The other way is to group DLL is api group, so all DLLs with the same API can be used interchangably... but that means they have to support old library versions.... (never going to happen).

      James

    4. Re:Security Issues vs. Api Versions by TopShelf · · Score: 1

      Or perhaps, along with a tag representing the version of the DLL, include another tag that represents the oldest version that this file is compatible with. For instance, there may be V1.0, V1.1, V1.2 and V2.0 installed, where V2.0 has a tag that says it should be used in place of anything including or after V1.1. Thus anything built on V1.0 won't break, but 1.1 and 1.2 would reference the new version.

      --
      Stop by my site where I write about ERP systems & more
    5. Re:Security Issues vs. Api Versions by Anonymous Coward · · Score: 0

      hey fscktard, if two apps use the same version of the DLL, then there will be only one copy of the DLL stored for both of those apps. The idea here is to create additional copies when necessary to prevent compatibility problems. If both apps use the same version, then there is no compatibility problem

    6. Re:Security Issues vs. Api Versions by Elbows · · Score: 1

      If they are smart, they will use major and minor version numbers, with the convention that you don't break binary/API compatibility across minor versions.
      So, an application can say "I want libfoo v3.x", and not care whether it gets 3.1 or 3.5.
      Of course, this places the responsibility on DLL writers to not break the interface at random, which is probably too much to ask of MS.

    7. Re:Security Issues vs. Api Versions by Spoing · · Score: 1
      What does this have to do with security issues? Isn't that the responsibility of the firewall?

      [Don't hurt me! I kid! I kid!]

      --
      A firewall can not protect you from yourself. Turn off what you do not need. Do not use the firewall to do your work.
    8. Re:Security Issues vs. Api Versions by Ctrl-Z · · Score: 1


      The DLL fix may be the "main course", but you'll get a side of new bugs in the app, and possibly an upgrade fee as a cover charge.

      Not to mention changes to the EULA. Agree to these new terms or suffer the wrath of hax0rs.

      --
      www.timcoleman.com is a total waste of your time. Never go there.
    9. Re:Security Issues vs. Api Versions by truthsearch · · Score: 1

      That's a very good point for a few reasons. When MS releases security fixes, it's often included in "service packs." Those service packs have both general bug fixes and security fixes, possibly in the same DLLs. So one consideration they would have to make is releasing security fixes separately from other updates to the DLL, so an older insecure version could be overwritten. The other problem is how will the system know that the secure DLL must overwrite the insecure version. It could be built in, just not detailed in the news article. Maybe they would break their own rules and release security fixes without updating the version number. That's the easy way around it I guess. In fact, maybe this would promote use of updated DLLs without updated version numbers by vendors, just to get around it for whatever reason. It's a complicated issue that could make things far worse or far better in the end.

    10. Re:Security Issues vs. Api Versions by VP · · Score: 1

      Apparently no one here has done any research on dotNet. One of the features of the framework is that you can have config files from the machine (domain?) level down to the individual .exe, which can specifically instruct the executable to use a particular version of the .dll. Note that the registry is not involved in any way here. In this case, fixing a problem with the dll can be done by releasing a new version of the .dll file, and updating the config file to make all executables use the new version...

      BTW, the config files are in XML format (i.e. plain ASCII - where have we seen this before?)...

    11. Re:Security Issues vs. Api Versions by Keeper · · Score: 1

      That's not how it works.

      Say you have 10 applications. And say you have 3 DLLs. In the GAC, you'll have

      Dll version 1
      Dll version 1.1
      Dll version 2

      You'll have 3 copies of the DLL. Not one copy for each application.

      Additionally, which dll you use will depend on how your app is written. IE: You can still write your app to use the "newest" version of the DLL. Or you could write it to use newer versions only. Or you could write it so that it will use any version it finds. Or you could write it to use only a specific version.

      This stuff only works with .NET applications. All of the "legacy" DLLs that this effects today will still have problems. In fact, I'm not quite sure what they changed in .NET 1.1, because what the article describes is pretty much how it works with .NET assemblies today...

  17. Re:In other news by OneEyedApe · · Score: 1

    From what I've seen, Gentoo already has.

    --
    Life sucks, but death doesn't put out at all....
    --Thomas J. Kopp
  18. Re:In other news by wiggys · · Score: 1

    Not if you depend on Redhat ^_^

    --

    Sorry, but my karma just ran over your dogma.

  19. Umm Security. by jellomizer · · Score: 4, Insightful

    I could see some possible security problems with this. When a DLL needs to be patched for a security issue it will only fix programs witht the correct version of the DLL. and the old version of the DLL wont be fixed. This is bassicly defeting the porpose of DLLs in the fact most applications will be using simular but slitght different versions of the DLL. At this point why not just compile everything staticly with DLL that way it is no longer an issue. As well as quicker and easer to install and uninstall.

    --
    If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    1. Re:Umm Security. by lpontiac · · Score: 1
      When a DLL needs to be patched for a security issue

      But except for DLLs that are part of the base system, which service packs and Windows Update take care of, nobody patches DLLs for security reasons. Windows users don't get any more granular than upgrading entire applications.

  20. In other news.... by joshv · · Score: 3, Funny

    Microsoft re-invents static linking.

    Christ, if you are going to do this, why not create a recompiler that bundles the executable and all of its referenced DLLs into one EXE and be done with it.

    As a nice side effect it'd make it a hell of a lot easier to move programs around your disk and between machines... Oh, ok, now I get it.

    -josh

    1. Re:In other news.... by jot445 · · Score: 1

      Wouldn't it take a while to load that application? 1.5 MB app + 8.0 MB of DLL's = A little bit of time to load, eh?

      --
      The preceding comment has been reviewed and declared to be compliant with HIPPA Phase II regulations.
    2. Re:In other news.... by chthon · · Score: 1

      Duh, on HP-UX we had an 80 Mb shared library for use with Cobol. Link that static to do "Hello, World!".

    3. Re:In other news.... by dubstop · · Score: 2, Informative

      I think that the way it's done on OSX works well.

      The application is distributed as an application bundle that contains, as well as the executable, any support files. The bundle looks like a normal file but, like a directory, can be browsed and contain sub-directories.

    4. Re:In other news.... by 42forty-two42 · · Score: 1

      I assume it uses newer but compatible versions of the support files (e.g. zlib) if available?

    5. Re:In other news.... by jonathanclark · · Score: 3, Informative

      I've been working on this problem. I created an application that creates a compressed virtual filesystem containing the EXE, DLLs, and datafiles that can be deployed in a "pre-installed" state. When the application runs, a virtual machine technology similar to WINE is used to allow the application to load DLLs directly from the archive rather than go to the operating system. Unlike VMWare/WINE, however, the virtual filesystem is transparently merged with the real filesystem so the application can access files from ether place with no source changes. Also 90% of Windows API calls do not need to be replaced so there a very few compatability problems. The next version will have support for a merged virtual registry as well, so you can deploy ActiveX/COM controls without having to register them or even write to the system registry at all.

      Check it out:
      http://thinstall.com

    6. Re:In other news.... by joshv · · Score: 1

      A single, 80 MB shared library? Sounds like bad design to me. Break it up into smaller modules. I cannot imagine an single program would need to use every function provided by your code library.

      -josh

  21. Quake 1 and Voodoo... by Gleeb · · Score: 1

    I already have to juggle DLLs, I don't want to contend with windows...

  22. piracy? by gid13 · · Score: 1

    from article: "copy capability files, directories and even whole drives from one destination to another. "It is good for scaling out--it means you can copy applications instead of reinstalling them" sounds to me like this is an attempt to catch up to open source in the areas where ms lags behind... it sounds like a good thing, but i have to wonder, won't this be a huge open door for piracy? i mean, software pirates don't typically use windows server, but what prevents them from starting?

  23. An End To .DLL Hell? by jot445 · · Score: 1

    In the days of limited disk space, I could see a reason for reusing the same .DLL for applications. However, what are the issues involved in just plain putting all needed .DLL's in the same folder with the application? This would end .DLL hell by making it so that each program only uses the .DLL's that they install. True, there might be multiple copies of COMCTL32.DLL, but so what? we've got the disk space. What other issues are involved?

    --
    The preceding comment has been reviewed and declared to be compliant with HIPPA Phase II regulations.
    1. Re:An End To .DLL Hell? by IWannaBeAnAC · · Score: 2, Interesting

      The number of copies in memory, for one thing.

      Consuder how many processes are loaded on a typical 'doze system. Now imagine what would happen if every one of them had a different copy of USER32.DLL (or whatever).

    2. Re:An End To .DLL Hell? by rplacd · · Score: 1

      You're describing a situation that's unlikely to happen.

      Think of it this way -- your Unix box probably has a bunch of versioned shlibs that are used by different applications. Does that bother you? Most likely, you never even think of it.

    3. Re:An End To .DLL Hell? by IWannaBeAnAC · · Score: 1

      Sure, a quick glance in /usr/lib suggests that most libs have at least two versions.

      But that is very different to having copy for every process, which is what the OP was suggesting. Currently ps shows ~150 processes currently loaded, I guess most of them are linked against libc. Using a different copy of the lib for each process would increase the amount of RAM I need by well over 100MB, and that is only for a single lib.

    4. Re:An End To .DLL Hell? by rplacd · · Score: 1

      Sure, a quick glance in /usr/lib suggests that most libs have at least two versions

      Yes, and if, of those 150 processes you have running, 75 use one version and 75 the other, that's still only two copies of the library in memory.

      If you have a system with n processes using anywhere near n/2different libraries, I would like to know more about it. I've never come across anything like that (barring edge cases, like the machine running X in single-user mode).

  24. Re:In other news by NewbieSpaz · · Score: 1

    I might be feeding the trolls here, but...
    As a RedHat user, I don't know what all the complaints are about. RPMs are very easy to use, whether it's installing, upgrading, removing or even building them. The system was created to make package management easy as well as to satisfy the dependencies of all the programs. Installing the correct packages and not using the '--nodeps' or 'force' options maintains a nice clean and happy RPM database. It don't see what all the complaining is about.

    Signed,
    A very happy RedHat user since 1998.

    P.S. To the Debian users who cry "apt-get, apt-get!" I use Apt for RPM, and that kicks ass too...

    --
    ------
    Random, useless fact: I type in startx entirely with my left hand.
  25. Part of .NET, not Windows by magiccap22 · · Score: 5, Informative

    This is a capability of the .NET framework. It has nothing to do with the next version of Windows.

    It isn't really DLLs either, but rather .NET assemblies. .NET assemblies are the equivalent of DLLs for the .NET system, but this won't solve the problem of "DLL hell" unless all applications are re-written in .NET.

    This is a great feature of .NET, but this article is just the Microsoft PR/marketing machine, and is nothing new technically.

    1. Re:Part of .NET, not Windows by wadetemp · · Score: 4, Insightful

      Thank you for pointing this out. There've been other good comments around the board about DLLs and how sharing should work, but you're evidentally the only one who's read the article and understands the technology.

      The feature was present in .NET 1.0 as well.

      I've always wondered, though... why did MS choose to keep the extension ".DLL" for .NET assemblies? That choice alone has caused more issues than I have ever seen (name conflicts between a COM DLL and a corresponding .NET interop assembly DLL, people trying to register a .NET assembly DLL with regsvr, VB6 allowing you to attempt to use a .NET DLL as a component when it doesn't work, etc. etc. etc.) While they may be "dynamic link libraries" in a traditional sense, they're not ".DLLs." Chalk the reporter up as one more of the confused.

    2. Re:Part of .NET, not Windows by jimmyCarter · · Score: 1

      Um... I write lots of .NET assemblies. Most of them still have a file extension of .dll .

      Just new terminology, that's all.

      --

      -- jimmycarter
    3. Re:Part of .NET, not Windows by CaptnMArk · · Score: 1

      The reason very simple.

      If they used a new file extension where it made sense (lots of places) they would run out of three character file extensions very quickly. What then? It's not like windows users could ever learn to use more than three letter file extensions (.html anyone).

    4. Re:Part of .NET, not Windows by wadetemp · · Score: 1

      Your arguement may be simple but it's irrelevant. Even with a maximum of 6 letters of extension there are ~1,600,000,000 possible extensions. 300,000,000 or so if you exclude numbers, and of that I bet at least 1,000,000 are "meaningful"/"speakable"/what ever it takes to make a good extension (erm, that's for English-speaking people anyway.)

      "Windows users" are not the ones creating and using assemblies... developers are. ".netasm" would have worked fine and would have at least been considerate.

    5. Re:Part of .NET, not Windows by Anonymous Coward · · Score: 0

      Even simpler than that: .ASS files, anyone? ;)

    6. Re:Part of .NET, not Windows by scrytch · · Score: 1

      I've always wondered, though... why did MS choose to keep the extension ".DLL" for .NET assemblies?

      Because MS is using .EXE for the extension of .NET executables. They are basically changing executable file formats from PE to .NET. Putting differing object formats that require differing behavior from the runtime linker and the hosting application is nothing new -- they've been putting OLE servers into DLL's from day one, even though you can't call them directly either. .EXE and .DLL are like .WAV, they're meta-formats that require peeking into the file ("magic" in unix parlance) to discover the actual format. It's only confusing now because .NET isn't very well integrated into the system, requiring you to deploy assemblies yourself instead of the runtime linker doing so automatically.

      --
      I've finally had it: until slashdot gets article moderation, I am not coming back.
    7. Re:Part of .NET, not Windows by KyleCordes · · Score: 1

      By using .EXE and .DLL for the various kinds of ready-to-deploy .NET code, Microsoft helped enormously in making it feel native to those who develop and deploy it. You could deploy an app, consisting of an EXE and some DLLs, without even noticing that it's .NET based, particular down the road a bit when the .NET runtime is more widely deployed.

      This naming is one of several things that will make .NET feel native, in a way that Java apps do not. It's not a technical difference, it's a cosmetic difference that will make adoption a bit easier.

    8. Re:Part of .NET, not Windows by druske · · Score: 1

      I was surprised to see this "news story" as well. I dug through the articles, but I didn't see anything that hasn't been in .NET since 1.0... unless somehow they've worked out a way to stuff conventional DLLs into the GAC and do some tricks with LoadLibrary.

      More likely you're right and they're just talking about .NET assemblies... but since those also have the DLL file extension, I suppose they can still make marketing noise about solving the "DLL Hell" problem, even though only .NET apps --- still a rarity --- will benefit.

      I wonder if the press will pick up the story if or when Server 2003 is proven to have the same old DLL problems with conventional (non-.NET) applications?

    9. Re:Part of .NET, not Windows by AlexeiMachine · · Score: 2, Funny

      They kept ".dll" for assemblies because the alternative ".ass", frankly, stinks.

    10. Re:Part of .NET, not Windows by monkeyboy87 · · Score: 1

      >It isn't really DLLs either, but rather .NET >assemblies. .NET assemblies are the equivalent >of DLLs for the .NET system, but this won't >solve the problem of "DLL hell" unless all >applications are re-written in .NET.

      DLL hell is gone in .NET. Welcome to Assembly Hell :)

    11. Re:Part of .NET, not Windows by TummyX · · Score: 1

      I always thought ".DNA" (Dot Net Assembly) was a good extension.

      Microsoft obviously don't agree :\.

      Even ActiveX controls had a recommended non DLL file extension (.OCX).

    12. Re:Part of .NET, not Windows by bratmobile · · Score: 1

      Another reason is that an EXE or a DLL can contain BOTH managed (.Net) and unmanaged (traditional compiled) code.

      So, yes, it's partly a means to make it easier to deal with them ("ohh, it's just a different kind of EXE/DLL"), but there is also a very good technical reason -- interoperability between managed and unmanaged code.

  26. Dependency doesn't have to be a problem by TheCovenant · · Score: 0

    I have never understood the reasoning behind shared DLLs personally. What the hell is wrong with an application running completely independent of other applications? Why must you share a DLL with anyone. Just install it in your own application directory and use it when you need id. Are we still concerned about saving precious storage space on our 80Gb hard drives?

    --
    cp -R /* /dev/null
    1. Re:Dependency doesn't have to be a problem by gryp · · Score: 0

      With shared DLLs: When there is a security issue with a particular DLL then you can update it and every program using that DLL would not be vulnerable anymore.

      With static DLLs: When there is a security issue, you have to fix every program.

      I think this should be important for the operation system to have such easy way to fix bugs.

    2. Re:Dependency doesn't have to be a problem by 42forty-two42 · · Score: 1

      Good idea. In the meantime, view this PNG with any of these apps. I promise it won't be a security problem - as long as you've already recompiled *all* of them

    3. Re:Dependency doesn't have to be a problem by Anonymous Coward · · Score: 0

      Probably because most DLLs have to be registered for the program to be able to use them. I think this is where the problem comes in.

  27. Petzold is your guy... by PinglePongle · · Score: 2, Informative

    This book contains all you need to know about working on Win32, including a pretty comprehensive section on DLLs.

    --
    It's all very well in practice, but it will never work in theory.
  28. Clutter? by the+uNF+cola · · Score: 1

    Forgetting RPM's and apt-get/dselect, what about the /usr/lib dir? Instal 2 different versions of gdk, get something like libgdk.1.so, libgdk.2.so Unix does the same thing. Granted, unix systems are a more well put together, so that windowmaker doesn't distribute gdk, where Forte Agent probably distributes some pretty standard windows libs. Both are messy.. but unix does the same thing.

    --

    --
    "I'm not bright. Big words confuse me. But Wanda loves me and that should be enough for you." - Cosmo

  29. Uh.... by simetra · · Score: 2, Interesting

    Wasn't that the point of the Registry?

    --

    "Would it kill you to put down the toilet seat?" -- Maya Angelou
  30. Buggy is as buggy does by PFactor · · Score: 1

    I bet that if they tested new versions of DLLs, they would not break older apps.

    I like this method because it doesn't force me to spend more money on disk space. Disk is cheap, true, but that doesn't justify them forcing ME to buy more of it.

    **In other news, Microsoft just purchased controlling interests in all storage manufacturers**

    --
    Don't believe anything I say. I crash test crack pipes for a living.
    1. Re:Buggy is as buggy does by Anonymous Coward · · Score: 0

      "doesn't justify them forcing ME to buy more of it"

      No, but keeping with the times does. Unless you are content with Babbage's construct, you are DOOMED to upgrade at some point. If you want to bitch about MS, at least do it with a valid claim.

      Back up your existing harddrive on a fucking floppy, and buy a new drive (or add one to your system if your mb supports multiple drives) and stop whining.

  31. Need Coffee by jellomizer · · Score: 1

    Please disregard all grammer and spelling mistakes. It is before coffee. You know they should swap the submit and preview button so we would preview our stuff first.

    --
    If something is so important that you feel the need to post it on the internet... It probably isn't that important.
  32. Slashdot is getting slow, lazy? by iturbide · · Score: 1

    Is it just me, or does it seem that slashdot mostly regurgitates BBC News, osnews.com, and The Register? If you just quickly walk through these three sites, it's quite predictable what will turn up on slashdot.

    1. Re:Slashdot is getting slow, lazy? by RobotRunAmok · · Score: 4, Insightful

      SlashDot regurgitates, period. NYT, Wired, whatever. The vast majority of the stories mentioned on SlashDot I've seen elsewhere, sometimes days earlier.

      What's the problem?

      This is not a "Breaking News" site, it's a community discussion board. One doesn't come here for "news," per se, but to read what like-minded people in the "geek community" think about that news.

      You're getting upset because your dog doesn't 'meow.'

    2. Re:Slashdot is getting slow, lazy? by Anonymous Coward · · Score: 0

      Unless microsoft does something positive, and then it will never be mentioned.

    3. Re:Slashdot is getting slow, lazy? by Anonymous Coward · · Score: 0

      Maybe they should get rid of the inaccurate 'News for Nerds' buyline? Besides, we all know the quality of this site is directly proportional to the zealous of the poster.

    4. Re:Slashdot is getting slow, lazy? by Anonymous Coward · · Score: 0

      I had a neighbor whos cat barked. No, really. The cat actually barked ... and sometimes growled. Though if I had heard the resulting sounds coming from a dog, I would have taken that dog to the vet, pronto!

  33. Re:In other news by pe1rxq · · Score: 3, Informative

    Librarys have version numbers
    look in /lib you will see you have several links to various version of a c library e.g. libc.so.6, libc.so.5.
    These point to the actual library.
    As long as a libraries API doesn't change between major versions (as it should) there is no problem.

    Jeroen

    --
    Secure messaging: http://quickmsg.vreeken.net/
  34. Artificial Intelligence? by rednaxel · · Score: 1
    I think it would be nice. Nowadays anyone have an huge disk (20 Gb is a huge amount of space, don't fool yourself because of your mp3/pr0n collection), and may store extra versions of DLL's (or .NET components).

    There's some Artificial Intelligence: (from the article): "The system will first look for a local version of the component, and will then look in the cache to find an exact match for the strong name of the required component. Failing that, the system will use heuristics to find the next best component".

    --
    If you can read this, thank an english teacher.
    1. Re:Artificial Intelligence? by Tim+C · · Score: 1

      Depending on what you're using your machine for, 20GB isn't huge. If you're a graphic artist, for instance, working on multi-megabyte images, you could quickly fill that space. Or scanning in your photo collection - at 10MB+ *per TIFF*, space disappears pretty quickly.

      Hell, I don't do anything special, and I've filled about 40gig of my 50gig drive just with games, OS, prorams, and associated data.

      On the other hand, drives are only getting bigger, so no, the space used by having several copies of each dll isn't a problem. I just wanted to point out that some people really *need* big drives, and not just for "mp3/pr0n collections".

    2. Re:Artificial Intelligence? by barryfandango · · Score: 1

      Nowadays anyone have an huge disk



      True, if you believe all that spam in my inbox... oh wait...

      --
      In all matters of opinion, our adversaries are insane. -Oscar Wilde
    3. Re:Artificial Intelligence? by El+Cubano · · Score: 1

      20 Gb is a huge amount of space, don't fool yourself because of your mp3/pr0n collection

      Yeah, unless you are a developer. (I.e., OpenOffice, which is not a big program, requires something like ~2GB of temp space to build). Admittedly, a developer probably has better than average hardware.

      There's some Artificial Intelligence: (from the article): "The system will first look for a local version of the component, and will then look in the cache to find an exact match for the strong name of the required component. Failing that, the system will use heuristics to find the next best component".

      I highly doubt that there system uses "Artificial Intelligence." The presence of hueristics, does not alone qualify. At best, it is probably a very primitive ruleset that goes looking in several probable locations.

      Not only that, but hueristics typically require some sort of pattern matching to take place. If the new FS is supposed to be SQL based, it would be a complete waste of time to hueristically find a .DLL. Since the "next best" component will have a different strong name but likely the same or a similar file name, you can just execute a more efficient query on the database.

  35. Re:In other news by jhampson · · Score: 1

    Are you kidding me? I've had a hell of a time even getting some programs to install(using the gui RPM manager even); it often won't let you keep old libraries.
    You usually have to blow away old versions of gcc or qt to install something that needs a different lib version! "No conflict now, it's just gone!"

  36. Garbage collection by dachshund · · Score: 4, Interesting
    Just as long as Strong Binding knows when to garbage-collect the old DLLs that aren't being used anymore, even if the uninstaller fails to explicitly remove them.

    In addition, the OS should be intelligent enough to know when an EXE's been manually deleted (thrown in the Recycle Bin). The current practice of placing all unstallation responsibilities on the vendor tends to result in DLL buildup when the uninstaller doesn't work right or isn't provided (not uncommon.) There should be a unified process for adding a DLL that links it to the executable file that requires it.

    1. Re:Garbage collection by jonathanclark · · Score: 2, Interesting

      This is impossible unless there were a major change and all software developers conformed to it. But we are stuck with Windows 95 on steroids. Windows XP addresses the problem to a small extent by providing a "side-by-side" DLL loading system.

      There is no way for the OS to know which DLLs an application might use - since DLLs are "Dynamically" loaded. The application may only load the DLL in rare cases, or maybe the application is run for the first time 1 year after it's installed.

      To further complicate the problem, software vendors themselves cannot be 100% sure that no other application are going to use DLLs they installed - so to be safe they leave them behind on uninstall. So you are stuck with growing system32 directory. The only way to garbage collect is to refresh the entire machine.

      I have been working on a virtual machine techology that allows applications to run in a semi-isolated environment (DLLs, files, and registry keys are not shared with the system). So they have zero impact on other applications and other application installs cannot cause them to fail. Also uninstall becomes a simple "del program.exe".

    2. Re:Garbage collection by Captain+Rotundo · · Score: 1

      Sounds like apt would work. Maybe MS should start using some Free Software ?

  37. Again? by Darth+Daver · · Score: 4, Insightful

    I thought Microsoft already claimed to have fixed "DLL Hell" once or twice before with Windows 2000 and Windows XP. How many times are they going to "fix" the same problem?

    One of the really annoying things about Microsoft is they always promise to fix something in the next version. It's always "next time" with them, but the problems never seem to go away.

    1. Re:Again? by Anonymous Coward · · Score: 0

      That is because the real problems are architectural, and their usual approach of adding layers and layers of cruft only addresses specific symptoms, while introducing more weird oddities and corner cases.

      In principle, .net is a good chance to get rid of some of the cruft and replace it with sensible design, but I really doubt Microsoft has the self-control to avoid their usual "bloat disease". I suspect in 10 years time, .net will be as bloated and as quirky to use as Win32.

    2. Re:Again? by Anonymous Coward · · Score: 0

      Once you've worked with the new system (It is a part of .NET, and can be installed on Win2k and XP), you'll find out that the old DLL hell actually wasn't so bad after all.

      When an app suddenly starts using a different version of a DLL from the assembly cache, than the one it is supposed to be using, things just stop working with nothing at all to indicate what went wrong. The same app that worked perfectly 10 minutes ago suddenly does totally weird things.

    3. Re:Again? by IGnatius+T+Foobar · · Score: 1

      The problem is that Microsoft says it has fixed DLL Hell with every new version of Windows. They also claim that you don't have to reboot as much as you used to when performing software installs and upgrades. And people generally look at the new version of Windows and say, "hey, they're right -- they did a good job this time."

      Trouble is ... this has nothing to do with a better design, and everything to do with the fact that a brand new version of Windows is going to ship with all the latest DLL's already on the system. So let's say you install, for example, Microsoft MonopoApp 2003 onto Microsoft MonopoOS 2003. They both ship with the exact same version of MAKE_NETSCAPE_RUN_SLOWER.DLL, so there's no conflict. And since that DLL is already present and running, there's no need to reboot the system to get a newer version started.

      Fast forward to a couple of years later, and it's a different story. Windows still cannot replace a DLL that is bound to a currently running program. That means that when you're installing a version of Microsoft MonopoApp that's a year or two newer than the version of Microsoft MonopoOS it's running on, you've got to replace a few dozen DLL's. Some of those are already running, so ... they get thrown into the queue for installation upon the next reboot, and voila! You Must Reboot Your Computer To Complete This Installation. And of course, there was some other app running on your system that wanted the old version, and Windows still doesn't have a Unix-like mechanism to keep multiple versions of a shared library around and have programs request the version they need, so ... DLL Hell is back.

      It's going to be the same with .NET -- without a doubt. Everything's going to be peachy-keen when it first rolls out, and you'll see Jesse Berst and the rest of the ZDnet crew talking about how wonderful it is, and how Microsoft did really well this time ... but by 2005 you'll have .NET shared library hell, guaranteed. I promise you that .NET will not mature as gracefully as Java has done.

      --
      Tired of FB/Google censorship? Visit UNCENSORED!
    4. Re:Again? by Tony-A · · Score: 1

      and again and again.
      Lets say there's an app written and tested for Red Hat 6.2.
      This can mean Red Hat 6.2 and all later versions. (And mostly works on RH 5.x)
      This can mean unpatched RH 6.2 only.
      It most likely means something in between, with nobody completely sure exactly what.
      Despite the best of intentions, it is impossible to know beforehand. (And not easy afterwards). Some "stable" versions aren't. Some "unstable" versions are very stable. IIRC, Apache 1.13 is the "unstable" branch and 1.12 is the "production" branch. Apache 2.0 is "stable", but a bunch of us are waiting for mod_php and mod_perl to achieve real stability.
      Methinks the problem is actually unsolvable, but there's most likely a lot of help to be had from nutcases who insist of running three incompatible versions of the same app at the same time. Another is the type of stunt box that allows FreeBSD and friends to run Linux binaries. Microsoft is about to make yet another one foot jump across a one meter chasm.

    5. Re:Again? by Anonymous Coward · · Score: 0

      > > I suspect in 10 years time, .net will be as
      > > bloated and as quirky to use as Win32.
      >
      > Yes, probably.
      >
      > But in 10 years time, there won't be any Linux.

      Yes, well all be using HURD.;-)

    6. Re:Again? by Anonymous Coward · · Score: 0

      So DON'T use the GAC - Use local DLLs - MUCH better

    7. Re:Again? by IDIIAMOTS · · Score: 1

      If the app installer cannot replace a DLL that is bound to a currently running process, then it is a badly written installer.

      a.) The installer can find out which processes are using a DLL and ask the user to stop them if possible.
      b.) The DLLs are rarely hard locked. Most of the time, the installer can rename the DLL which is currently in use, queue the temp file to delete on the next reboot, place new DLL version into its intended place. The apps will continue using the temp file DLL until they are restarted, at which point they will pick up the updated DLL.

      The above holds true on Windows 2000/XP/2003. I can't speak for Win9x series, as I don't play with those. I agree though, old vs new version compatibility issues still exist.

    8. Re:Again? by Anonymous Coward · · Score: 0

      >Yes, well all be using HURD

      No, by that time it'll have become TURD.

    9. Re:Again? by mpe · · Score: 1

      he DLLs are rarely hard locked. Most of the time, the installer can rename the DLL which is currently in use, queue the temp file to delete on the next reboot, place new DLL version into its intended place. The apps will continue using the temp file DLL until they are restarted, at which point they will pick up the updated DLL.

      Maybe in the future Micosoft will make it possible to delete a file when it is in use and have its resources vanish when it is closed. Like unix has been able to do for ages :) Is it really that difficult to design libraries which are interchangable, e.g. using a jumptable or function index?
      The real problem is that Windows still carries a lot of single user assumptions in its design.

    10. Re:Again? by Jugalator · · Score: 2, Insightful

      Yes, it's indeed fixed as long as you use .NET assemblies. I guess Longhorn will be much more .NET-oriented than XP for example, since .NET was still a bit too new when XP was released. So I guess this is what might be happening:

      Some time before XP is released, Microsoft claims that .NET will solve the DLL Hell in be included in coming versions of Windows. Microsoft think this of course need an announcement.

      Visual Studio .NET is released, and Microsoft says programs developed for the .NET Framework will automatically avoid DLL Hell through "assemblies". Since everything since Windows 98 support the .NET Framework, the problems are solved in all these OS's as long as it's a .NET program. Microsoft think this of course need an announcement.

      Some time before Longhorn is released (i.e. now), Microsoft says that it will solve these DLL conflicts in the OS itself, since Longhorn will be their first OS with good .NET integration out of the box. Microsoft think this of course need an announcement.

      --
      Beware: In C++, your friends can see your privates!
    11. Re:Again? by hobo2k · · Score: 1
      Yes! My thoughts exactly

      We've had dll reference counts, file protection, self registering COM dlls, .Net assemblies/manifests, and now this... If dll hell still exists, it will never be solved.

      That said, I've never really had a problem with 'dll hell'.

  38. Guess I've been lucky then... by Kjella · · Score: 1

    ...because I haven't had a single DLL conflict since I diched win98 and moved to win2k... I remember this from the bad old days of DirectX 3 vs DirectX 5, and two games I had that installed incompatible dlls, but that must be like 4-5 years ago. Maybe if you're aware of the problem you should be able to go back to old versions, but is that really that often? I really don't feel the need to bog down my machine with several dll copies for no reason.

    Kjella

    --
    Live today, because you never know what tomorrow brings
  39. Mac OS X Frameworks? by image · · Score: 4, Informative

    Sounds a lot like what Apple did with OS X's Frameworks.

    Read more about that here. Be sure to read through the section on Framework Versioning.

    Also note that MacOS has long done a great job at packaging applications together so that the installer is unecessary.

    1. Re:Mac OS X Frameworks? by rmohns · · Score: 2, Informative

      This was actually created in OpenStep (nee NeXTstep) nearly a decade ago. Ars Technica has a great overview of frameworks here:

      http://www.arstechnica.com/reviews/2q00/macos-x-dp 4/macos-x-dp4-2.html
      http://www.arstechnica.com/reviews/2q00/macos-x-dp 4/macos-x-dp4-3.html

      (it's good to see microsoft catching up to last decade's solutions. ;-) sarcasm aside -- about time...)

      --
      "If love was a choice, who would ever choose such exquisite pain?
    2. Re:Mac OS X Frameworks? by good+soldier+svejk · · Score: 1


      I agree that bundling shared code is an elegent solution. It is a shame that the GNUStep Guys can't go this route. I would love to see a framworks and Display Ghostscript based GNUStep distro, running over the Linux kernel and with a GNU compatibility layer. Such a layer would be similar to Apple's BSD layer with unix-like shared resource support. A totally free implementation of OpenStep with near full OS X source compatibility and the ability to build cross platform fat binaries....drool.

      --
      It is cowardly, and a betrayal of whatever it means to be a Jew, to act as a white man

      -James Baldwin
    3. Re:Mac OS X Frameworks? by IamTheRealMike · · Score: 2, Interesting
      Also note that MacOS has long done a great job at packaging applications together so that the installer is unecessary.

      I might as well note that this approach has some serious problems as well as the benefit of added simplicity, like:

      • Only Apple can update the OS. That suits Apples goal of selling more copies of MacOS X, but shafts the customer slightly when they find that a few months after a new release comes out, applications start requiring it. See DirectX for contrast.

        Note that there is nothing wrong with a 3rd party application install upgrading parts of the OS, it's just that historically Windows has sucked at it. Look at Debian for an example of how this can be done well.

      • Code reuse is stifled. On Windows, for the longest time JabberCOM was the de facto Jabber library. Most clients used it, and if you had more than one client installed, they'd share the same copy. There is no real mechanism for doing that, save shipping the framework inside every app, causing enormous bloat. So it doesn't happen very much.

      • Modules are much "coarser" than say on Linux. I can't imagine MacOS developers getting together to share say 60k of code in a framework, it's just not worth it. That sort of thing happens all the time on Linux, and to a slightly lesser extent on Windows. Again, there's nothing wrong with depending on lots of shared code, it just has to be done properly.

      Eliminating some of the key code sharing technologies (true dependancy management, strong component model) from MacOS X was I think a pretty big mistake - it bought them short term simplicity while making sacrifices in the longer term.
    4. Re:Mac OS X Frameworks? by 2nd+Post! · · Score: 1

      I'm not sure why you say only Apple can updated the OS. You mean other people cannot install system critical Frameworks?

      Because DirectX would analagously be a Framework in OS X, and a user could place/install it in /Library or /System/Library. What is stopping this mechanism?

      Or do you mean things like QT? Or QuickTime? I know I can update Quicktime codecs by placing them in /Library/Quicktime

      And then about Code Reuse. You've got two mechanisms in play:

      Bundles stifle code reuse, sacrificed in favor of code inclusiveness.
      Frameworks promote code reuse. In OS X, DirectX would be a Framework. Look in /System/Library/Frameworks or /Library/Frameworks. The user can add and update /Library/Frameworks, and I think with a special sanction, can also add to the /System folder

      Modules are as coarse as you wish. I've got Frameworks that are about 260k in size (for ObjC unit testing), up to 2.8mb in size for the SharedMenu framework for Camino/Chimera.

      Then the Quicktime codec in /Library/Quicktime is only 276k as well.

      And of course, I still have /usr/lib

    5. Re:Mac OS X Frameworks? by IamTheRealMike · · Score: 1

      Yeah, but do you really expect your users to manually download and drag frameworks to the right places? I wouldn't, so if you want to upgrade say QuickTime, you have to package them both in an installer .... at which point you've got installers, just like Windows, which is what the first poster was talking about (MacOS doesn't need installers, cos it's all inside the app).

    6. Re:Mac OS X Frameworks? by 2nd+Post! · · Score: 1

      Essentially it boils down to this:

      For the common case installers are unnecessary, points over Microsoft's current installation.

      For all of your concerns, there is Mastercard. Wait, no, there are mechanisms that exist to deal with all your concerns.

      So when an installer is necessary, an installer can be used, with Perl scripts, pre-install scripts, post-install scripts, Frameworks, etc.

      So at the *worst*, we are a step above Microsoft (with the Unixish linking and library versioning), and at the best, we are far away simpler and more convenient (ne better) than Microsoft.

      We being those who can afford Macs.

    7. Re:Mac OS X Frameworks? by IamTheRealMike · · Score: 1
      Well, not really. A few points.

      1) Appfolders have loads of other problems besides this one, there's a discussion on the website in my sig of this in the FAQ.

      2) I thought the whole point of the Mac was consistancy. If there are (at least) 2 different ways of installing software, how is that consistant.

      3) It discourages code sharing psychologically. Mac users like AppFolders. Therefore, it's easier to just throw this framework you're using into the bundle, than use an installer. But, code sharing suffers.

      Really, if developers are being told, use appfolders, except when you want to do a, b, or c then that means appfolders are slightly broken imho.

      Not that I haven't been through this debate a thousand times already or anything.....

    8. Re:Mac OS X Frameworks? by Phroggy · · Score: 1

      2) I thought the whole point of the Mac was consistancy. If there are (at least) 2 different ways of installing software, how is that consistant.

      I only think of it as being one way. If the app has to be installed, it comes as an installer icon, which you double-click on and click Next a few times. Otherwise, you don't "install" it, you just put it where you want it to go (usually the Applications folder).

      --
      $x='S24;r)>63/* h@<5+oZ)32"5cz';$me='phroggy'x$];
      $x=~y+ -xz+\0-Tx+;print$_^chop$me for split'',$x;
    9. Re:Mac OS X Frameworks? by 2nd+Post! · · Score: 1

      1) But since we aren't talking about any of the other problems (I will glance at your site, since I'm curious), there's nothing to refute or rebutt

      2) So you no longer have a problem with code sharing and code reuse? Now you want to argue instead about two different mechanisms for two different problems? Apps are Apps, and Frameworks are Frameworks, and one does not necessarily rely on the other, depending on the direction of transitivity. Applications can be installed by drag and drop, universally, as can Frameworks, but in the situation where you've got multiple of either, or you're installing a different version of a Framework, or you have to do something else that I'm not aware of, you have an installer to automatically and programmatically perform all those tasks because humans make mistakes and programs, at least, will make those mistakes consistently. Or as your FAQ puts it, this allows for dependency checking, among other things.

      3) It discourages code sharing on the developer's end, you mean? Use, Mac users like AppFolders (Bundles). Regardless of whether you use a Framework or not, you're supposed to use a Bundle. Even if you don't like the way Mac uses Bundles, a Bundle as a generic container is not a bad idea, wherein disparate related files are maintained in a structured manner.

      I'm still reading your FAQ, but I think your objections aren't with Bundles per se, but with placing shared code and libraries in Bundles.

      In which case, the solution is to place them in Frameworks (which are themselves a variation of Bundles I do believe).

      Then the next problem you have is that this makes installation messy because there are two installation methods: Drag and drop and Installers (which are really wrappers for Drag and drop functionality anyway). The point is that it isn't a mess. If a user opens a CD/DMG/Folder and finds an App, they can double click it, or drag it to /Applications, or ~/Desktop, or where-ever, and that's not confusing. If instead they find an application called Vise Installer, then the name makes it self evident too, and they double click, and follow the installation wizard.

      But if you really feel that's a problem, you as a developer can simply choose to be consistent and release everything in an Installer, whether or not the pre/post scripts are necessary, whether dependency checking and Framework installtion is necessary.

      There's nothing broken about appfolders, I don't think. It's just a container and a structure. You can throw shared code into it, and therefore make it redundant, or you can create a Framework, and therefore increase efficiency, but it's really in the developer's hands and choice. Are you saying that Apple tells developers to use Bundles instead of Frameworks? Are you saying Users are telling developers to use Bundles instead of Frameworks?

    10. Re:Mac OS X Frameworks? by IamTheRealMike · · Score: 1
      2) So you no longer have a problem with code sharing and code reuse? Now you want to argue instead about two different mechanisms for two different problems? Apps are Apps, and Frameworks are Frameworks, and one does not necessarily rely on the other, depending on the direction of transitivity.

      I think most/all apps will rely on at least one or more Frameworks, simply because that's how the MacOS APIs come, in much the same way that every Linux app (ignoring the rare static ones) links against some shlibs.

      Even if you don't like the way Mac uses Bundles, a Bundle as a generic container is not a bad idea, wherein disparate related files are maintained in a structured manner.

      I never said bundles weren't a good idea, I said the lack of strong dependancy checking discouraged code reuse.

      I think you make too much of my throwaway comment about inconsistancy. My point was that the culture is one of mostly monolithic applications, whereby all shared code that the app needs external to what comes with MacOS is packaged inside the app. Now installers can fix that yes, but because App Folders are preferred, it's often easier to simply shove it in and give the user an appfolder, so you don't get the level of granularity that you get on Linux or even Windows.

  40. To hell with all that crap! by rimmon · · Score: 1

    This is the single biggest annoyance imho. Why can't they just do it the Mac way? Put everything for one programm in a single directory and that's it. No more problems with installing, just copy the directory from CD to HD or from HD to HD and you're good to go.
    Add a small script to register file associations and maybe to add alink to the Startmenue and voila: Instant profit :-)
    Seriously, what's the problem with that? Save disk space by reusing components? Please, with 1$==1GB for Desktopsystems that shouldn't be a problem...
    Hendrik

    1. Re:To hell with all that crap! by brmic · · Score: 1

      >Why can't they just do it the Mac way? Put everything for one programm in a single directory and that's it. No more problems with installing, just copy the directory from CD to HD or from HD to HD and you're good to go.

      apparently this is actually inefficient, as several other posts seem to indicate. then again, it may be better in the long run. anyway, i really LOVE that mac feature (do i hear some calling it a bug?)
      i think the true reason why MS is using DLLs is that they've got a much wider range of appplications to provide for (and of course, for the record, because they got a crappy OS)
      imho the real reason for DLL hell is the wide range of software for Windows, and some sloppy 3rd party programmers who break the system (which argueably is badly desinged from the ground up)

      just my 2c of uneducated opinion; perhaps some more tech savy person could clarify?

    2. Re:To hell with all that crap! by good+soldier+svejk · · Score: 1

      This is the single biggest annoyance imho. Why can't they just do it the Mac way? Put everything for one programm in a single directory and that's it. No more problems with installing, just copy the directory from CD to HD or from HD to HD and you're good to go.
      Apple didn't really do that. You are deceived by the fact that most older MacOS apps were statically compiled binaries. But MacOS has supported shared code since System 7.5. shared libraries lived in the Extensions folder, so at least you always knew where to look for them. MacOS 9.x actually has two shared code architectures, the old Shared Library Manager and the Code Fragment Manager (for Carbon). Much worse than shared code were the inits Apple allowed developers to load at boot. Many applications were dependent on these extensions or control panels.

      An example of a MacOS app which relies on shared libraries is Microsoft Office. The only reason you can drag and drop install Office on MacOS is because it automatically installs any missing libraries. That is a function of the app, not the OS design. An example of a system function dependent on shared libraries is Open Transport.
      --
      It is cowardly, and a betrayal of whatever it means to be a Jew, to act as a white man

      -James Baldwin
  41. Thank you for pointing this out... by Anonymous Coward · · Score: 0

    MS is suggesting we move from the current situation to one where apps have their own DLLs, indexed by ID?

    I'm not sure I'd call that getting rid of DLL hell. Maybe leaving one area in hell to another, but that's another story.

    It is getting to the point that I'd rather just have an executable, itself, without worrying about its information in the registry, its DLL IDs, etc.

    This doesn't seem to make the Windows internals more accessible, which is really the whole point of the problem.

  42. Re:In other news by chthon · · Score: 5, Informative

    I instruct people in Linux, and my biggest complaint with RPM is that the user must solve his dependencies himself.

    E.g. we had made an installation, but left out the development tools. When you try to install gcc, it says which packages are missing, but not where you can find them. You have to dig them up yourself from the CD-ROM's, and sometimes you have to look on all of them.

    I do not have any problems with the RPM system itself, but why has Red Hat still no system implemented like Debian apt ? After the installation it asks for the CD-ROM's, scans them and builds a database about what packages reside where.

    So, in the case of gcc, it would say what packages are missing, select them automatically, load the needed packages onto the disk and asking for the appropriate CD-ROM whenever necessary.

    This is much more friendly than the stock Red Hat approach. Oh, I know there are tools to do that with Red Hat, but you still have to install them yourself. It should come out of the box.

  43. Come on! by Anonymous Coward · · Score: 1, Insightful

    As if you never had a library version problem under unix!

    1. Re:Come on! by 42forty-two42 · · Score: 1

      Maybe some people have, but not me. Some distributions have decent package managers.

  44. contradiction in terms? by broothal · · Score: 3, Interesting

    I don't get it. The sole idea about DLL is, that they are dynamically linked libraries (hence the name ;) shared by applications. This new idea suggest that, in theory, every program can have their own unique DLL. What's wrong with this picture? It's a workaround because today, programmers create DLL's that are not backwards compatible thus breaking older programs once the DLL has been overwritten. Yes, the workaround will work, but at the same time it undermines the idea of sharing libraries and it doesn't exactly urge programmers to write nice code that doesn't break existant functionality.
    /Christian

    1. Re:contradiction in terms? by rplacd · · Score: 2, Informative

      It adds versioning to dlls -- that's all. Multiple programs can use the same version. If a new version of the dll is added (even if it has the same name), the system will direct old applications to the old dll and new ones to the new dll.

      See this

    2. Re:contradiction in terms? by Qzukk · · Score: 1

      Multiple programs can use the same version

      Why? Why should I bother to use the standard version of foo.dll when I can use my version of foo.dll with a few custom extensions? Or just have my own library called foo.dll that has nothing to do with the original foo.dll? Now I don't have to worry about installing my app breaking something made by someone else who used a standard (or their custom) foo.dll.

      --
      If I have been able to see further than others, it is because I bought a pair of binoculars.
    3. Re:contradiction in terms? by rplacd · · Score: 1

      Why should I bother to use the standard version of foo.dll when I can use my version of foo.dll with a few custom extensions?

      Nothing in this scheme prevents you from doing this. In fact, it helps ensure that your foo.dll doesn't clash with the foo.dll used by other apps.

      Or just have my own library called foo.dll that has nothing to do with the original foo.dll?

      Again, nothing in this scheme prevents you from doing this. I can't figure out why you think this restricts you.

    4. Re:contradiction in terms? by Qzukk · · Score: 1

      Read the thread of discussion. The first post complains that this system will lead to every application having its own unique libraries, defeating the purpose of libraries. The second post said that it won't happen because they can share the same version of a library. My post was "why share?" since this blesses what was going on anyway, with software coming with conflicting libraries instead of sharing common libraries.

      --
      If I have been able to see further than others, it is because I bought a pair of binoculars.
  45. Kinda makes you wonder... by Jezza · · Score: 3, Interesting

    Well this makes one start to wonder, if each program is going to have a unique DLL (or at least one shared with VERY few others) why bother to have DLLs at all? Why not just roll the library up into the application binary?!

    It'll be interesting to see how this adds to the bloat, I imagine it won't take long for the average user to amass quite a number of these things, mostly doing the same job!

    There must be a better solution than this!

    1. Re:Kinda makes you wonder... by jonathanclark · · Score: 1

      DLLs are useful these days primarly for their ability to allow 3rd party developers to distribute libraries in a language independent form. For example, there are large numbers of VB and C++ programmers for Windows. But there is no easy way to create libraries that work for both languages, except for DLLs and COM. So you will find almost all 3rd party libraries are shipped out as DLLs these days (unless it's language specific).

      I've been working on a system to permits the best of both worlds by do a late-link of the DLL in a language independent way.

      Jonathan

  46. What about patches and security fixes? by Raphael · · Score: 4, Interesting

    According to Microsoft's Ivo Salmre, quoted in the article: "When a .Net component is installed onto the machine, the Global Assembly Cache looks at its version, its public key, its language information and creates a strong name for the component."

    In a few cases in the past, backwards compatibility has been (slightly) broken by service packs and security fixes. How will they deal with that? Presumably, the public key of a library can be affected by a patch. If an application uses the strong binding to request a specific version of a DLL, does that mean that it will keep its own copy of the DLL without the patches? Or will it have to deal with potential incompatibilities introduced by the patches? How "strong" will this binding be?

    And by the way, this idea looks rather similar to the usual UNIX shared libraries that allow an application to bind to libpng.so (version doesn't matter), libpng.so.1 (version 1 required) or libpng.so.1.0.89 (specific version and patchlevel required). The proposed system for DLLs does not seem to be very different from that.

    --
    -Raphaël
    1. Re:What about patches and security fixes? by Anonymous Coward · · Score: 0

      Well the proposed system (really .NET's GAC system) is different because it uses strong naming. The DLLs are cryptographically signed. You can set up a dependency path as well so if 1.0.89 is not available anything downward compatible will work, and have the system enforce this.

      I know on Linux I sometimes rename dll's to get programs to work. This is good and all but not totally a safe idea.

    2. Re:What about patches and security fixes? by McLoud · · Score: 1

      I'm hearing the master enginnering after reading this:
      - ops! I guess we forgot something...

      --
      sign(c14n(envelop(this)), x509)
  47. hmm, whats a 'DLL'? by Anonymous Coward · · Score: 0

    I will use BeOS forever, i've never heard of these DLL things, I don't even know what a file extenstion is. My OS just goes, and quickly.

    1. Re:hmm, whats a 'DLL'? by the_germ · · Score: 1

      Hm, if you use BeOS, you will have shared objects (.so files) like many other unix like systems (Linux, FreeBSD, QNX, ...).
      Shared objects are almost the same as DLLs.

    2. Re:hmm, whats a 'DLL'? by Anonymous Coward · · Score: 0

      My OS just goes, and quickly

      going, going, gone

  48. Old News - in .NET already, now, today, shipping! by Burb · · Score: 2, Funny
    .Net 1.1 will provide Windows Server 2003 operating systems with what Microsoft calls a Global Assembly Cache.

    This has been around for ages in .NET, and doesn't look like anything new to me. The image that comes to mind is of Dr. Evil putting "la-ser" in hand speechmarks.

    --

  49. Stop installing in the system directory, DUH by Anonymous Coward · · Score: 0

    Ok, if you're going to do this, why not just make it easy on EVERYONE and keep the flippin' installations in their own directories. Keep all the crap out of the /windows and /system directories and make it easier for EVERYONE.

    Compile the DLLS with the actual programs like folks stated. That way when I delete the damn program, it deletes ALL the included DLL's, and no one program is dependent on a DLL you may delete out of the windows system directory because a program thinks it's the only one that uses it!

    Come on, this is a TRIVIAL problem. Do we really need to reinvent the wheel to fix it?

  50. I don't buy it by pinkUZI · · Score: 1

    Another feature of Windows Server 2003 will be that .Net components will have no registration policy. "This means it will be easy to take a .Net component on server and copy to another server," he said. Microsoft is calling the feature xcopy deploy, after a command used in DOS to copy capability files, directories and even whole drives from one destination to another. "It is good for scaling out--it means you can copy applications instead of reinstalling them," said Salmre. "The whole process becomes much simpler."

    Microsoft making it easier to "xcopy" an application from one server to the next in spite of obvious invitation for piracy. Could this be the answer to our prayers??! Is Microsoft really coming around?

    No...
    No, it can't be. Don't trust them, we mustn't trust...
    We must NEVER trust Microsoft!
    Can't you see?! You fools!!! We've all been tricked!!! It's a trap of the evil empire, I tell you - turn back while you still can!
    Look to Linux for your salvation not some Microshaft technobizzle. Don't let them brainwash you - we've heard it all before, "Yup, should be reeaall stable this time.." We must not believe their lies!!!! Don't let them strong bind YOU.

    --
    You are receiving this message because your browser supports Slashdot Sigs and you have Slashdot Sigs enabled.
    1. Re:I don't buy it by Anonymous Coward · · Score: 0

      > Microsoft making it easier to "xcopy" an application from one server to the next in spite of obvious invitation for piracy. Could this be the answer to our prayers??

      What they failed to mention was that the software would notice that it is on a new server and would display "Thank you for copying me to this nice new machine, the bill is in the mail."

    2. Re:I don't buy it by Anonymous Coward · · Score: 0

      I find that term "xcopy deploy" amusing. First of all because it's testament to the nasty DOS roots of NT, both in userland code and especially in developer mindset. But also because xcopy was always such a broken tool for anyone who'd used a real OS command line, just as most every MS-DOS CLI tool was. It was *never* possible to just copy applications and/or system data around and assume things would work, say on another disk. I can remember the nightmare of trying to move a W95 installation from an IDE disk to a SCSI disk once, as one thing after another inexplicably breaks because, oh, xcopy won't copy those files, they're hidden/system/whatever. Oh you copied them but now the hard drive letter assignments are all wrong. Yeesh.

      This would have been a simple pipeline on a Unix box, or for that matter a single mouse action on a Mac. And this is the thing: every time Microsoft tries to catch up by reimplementing something everyone else takes for granted, they stumble over their own history. Xcopy indeed - I really can't wait to see their "fix" for DLL Hell. The best thing they could do is fire all their stuck-in-MS-DOS employees and hire new uncorrupted ones. Starting with Gates.

  51. �COM? by Anonymous Coward · · Score: 0

    Wasn't COM supposed to deal with some of these issues?

    1. Re:�COM? by Anonymous Coward · · Score: 0

      No. COM just provides interoperability, not versioning. The locating (local or remote) services COM provides are via the registry and sometimes with help from MTS.

      Technically speaking, a COM is just an application is assigned a unique ID and where the first field contains a pointer to a 'V' table of pointers to Query and Reference Counting functions.

      Obviously, .NET PE's have expanded on this by requiring the PE to contain a manifest of referenced files (dll, exe, or resource). Global Location services are provided by the GAC to PE's that are signed with a "strong name", and other location services are built-in by searhing pre-defined paths defined by the runtime.

      This allows files to move without altering the registry (or even using it), to provide remoting without MTS, and supports versioning internally in the .NET runtime.

  52. Re:In other news by 42forty-two42 · · Score: 1

    Actually, there are often additional numbers for even more specific versioning.

  53. Re:In other news by master0ne · · Score: 1

    redhat does provide a tool oob to help with dependencies, its called up2date, you need a dependency, up2date -i apache-devel if you need apache-devel, mind you if apache-devel has dependencies you dont have youll have to get those first too. apt-get for rpm's works really well to solve this problem but its not oob. but you have to give redhat credit, its much more user friendly than the usual linux approcah of make and make install.

    --
    Noone writes jokes in base 13!
  54. DLLs by chenry007 · · Score: 4, Interesting

    Correct me if I am wrong, but wouldnt that slow windows down even more. You computer will now have to search through your registry to find the correct DLL for your application. And what happens if you registry gets corrupted (not like that ever happens), then that you put you in an even worse position. Would it be easier to make the DLLs backwards compatible?

    1. Re:DLLs by Lethyos · · Score: 3, Interesting

      Would it be easier to make the DLLs backwards compatible?

      You're right. It would. The trouble is, Microsoft's API documentation is a closely guarded secret, and if you've ever done Windows development using resources from MSDN, you'd know that it's utterly pathetic. All the most useful library calls are kept hidden from you under penalty of DMCA I imagine.

      So, what happens if you either A) have no access to powerful APIs or B) you have crappy documentation for a crappy set of APIs? Simple! You code it yourself, reinventing the wheel. Dozens upon dozens of application developers for Windows have done this, making changes and additions to what may be standard libraries. One vendor creates a library with a call foo(bar b), and distributes the library. Another makes a call like bar(foo f) and distributes the library under the same moniker. You can't just merge them... so one version has got to go.

      And of course, as for backwards compatibility, since when have Microsoft ever gotten that right? I've ran into so many issues with a Windows application not working on XP because I developed it on 2000. A common solution to this problem is to distribute the version of a library that came with 2000 and overwrite whatever existed on the XP box with it.

      All in all, Windows is a pathetic, shody state of affairs. I ask myself everyday: "how the hell does this criminal organization con so many sheeple into using their products!?"

      --
      Why bother.
    2. Re:DLLs by Anonymous Coward · · Score: 0

      >The trouble is, Microsoft's API documentation is a closely guarded secret, and if you've ever done Windows development using resources from MSDN, you'd know that it's utterly pathetic.

      What? I do Win32 development day in day out and have doen for years and never had a problem with any API being undocumented.

      If internal calls are undocumented then, ergo, they are *not* part of the API. It's as simple as that.

      >A common solution to this problem is to distribute the version of a library that came with 2000 and overwrite whatever existed on the XP box with it.

      Oh my God! You are obviously such a pro! LOL!

    3. Re:DLLs by scrytch · · Score: 1

      Correct me if I am wrong, but wouldnt that slow windows down even more. You computer will now have to search through your registry to find the correct DLL for your application

      As opposed to the filesystem in use now?

      --
      I've finally had it: until slashdot gets article moderation, I am not coming back.
    4. Re:DLLs by Anonymous Coward · · Score: 0

      I've ran into so many issues with a Windows application not working on XP because I developed it on 2000.

      Then you're doing something wrong. Either you're using long-deprecated API calls or you're doing your own weird voodoo shit. I've developed for NT/2000/XP and EVERYTHING I wrote works the same between all versions. Stick with the standards, guy.

    5. Re:DLLs by StonyUK · · Score: 1

      The DLLs in question - .NET assemblies do not go into the registry, instead they go into either the 'Global Assembly Cache' (think */lib) or they can reside in the same directory as the .NET executable that needs them.

    6. Re:DLLs by Leto2 · · Score: 1
      I wanted to moderate you down, but instead I'll reply.

      I ask myself everyday: "how the hell does this criminal organization con so many sheeple into using their products!?"

      Well, they conned you, didn't they. You're the one helping Microsoft keep their market position by developing software for it. If you don't like them, then do not get a job in Microsoft application development! And, by the way, copying a 2k dll over a dll in XP, yeah, that's a swell solution!

      --
      <grub> Reading /. at -1 is like driving through Cracktown in a convertible that is stuck in 1st
    7. Re:DLLs by bratmobile · · Score: 1

      Microsoft's APIs are not that secret. Check out Windows NT / 2000 Native API Reference by Gary Nebbett. I have a copy of this -- he's done an excellent job at reverse engineering most of the internal NT APIs. (And, no, it wasn't published by MS Press.) Also, Undocumented Windows 2000 Secrets: A Programmer's Cookbook and Undocumented Windows NT.

      All are good books. The Reference one is just that -- a reference. It is not a tutorial, although there are a few samples. It's mostly just a hardcore description of the internal APIs.

      Also, people, pull your heads out of your asses. A lot of the reason that life is difficult on Windows is that Microsoft has had to put up with 15+ years of application developers doing STUPID things in their apps, and then whining when Microsoft has fixed the bugs they depended on, or improved APIs. Microsoft has spent TONS of money on backward compatibility. Arguably, the commercial success of Windows has stifled its own technical development.

      Your comment that "When has Microsoft ever gotten that right?" is just misinformed and stupid. Of course there are back-compat problems -- but the exception proves the rule. 2000/XP run an AMAZING number of apps, written over a long, long period of time, and with a reasonable degree of fidelity. Just because your favorite app broke, doesn't mean that N,000 apps DIDN'T.

  55. IANAP, But, Uh, WTF?! by Spencerian · · Score: 2, Insightful

    Almost all non-Windows operating systems avoid this DLL problem.

    For one, Mac OS X uses bundles. Each application has its code as well as libraries all wrapped up in a single package. Only that app uses the libraries there. Clean, simple.

    I doubt Microsoft's solution will solve the problem because their operating systems rarely show the cojones to stop an errant application from taking advantage of "features" placed within Windows that are self-compromising (e.g., Visual Basic Scripts, ActiveX). Some programming yahoo would just write something to override Microsoft's effort.

    Windows could use a DLL manager similar to the old Mac OS Extensions Manager. Actually giving the DLLs easily recognizable names and clear version numbers wouldn't hurt either.

    Aw, fuck--just chuck the damned thing and run a *nix, for cryin' out loud.

    --
    Vos teneo officium eram periculosus ut vos recipero is.
    1. Re:IANAP, But, Uh, WTF?! by Anonymous Coward · · Score: 0

      >IANAP

      Ok, well shut the fuck up then.

    2. Re:IANAP, But, Uh, WTF?! by Anonymous Coward · · Score: 0

      What about when there is a DLL update that fixes a security problem, or has a GUI-look update or something. How will the bundled applications update themselves, or will they just live with the holes?

  56. Another kludge... by LeoDV · · Score: 1

    The Windows architecture is fucked up at the core, and adding new features over it, even though it seems like an improvement, is really just a time saver. If MS wants to make a good Win, they need to rebuild it from the ground up instead of adding clutter after clutter which makes it into even bigger elephantine bloatware.

    1. Re:Another kludge... by Anonymous Coward · · Score: 0

      As if you'd know a good architecture from a bad one.

      More trivial slashbot weenie noise.

  57. Re:In other news by NewbieSpaz · · Score: 1

    In my (parent) post I said:
    P.S. To the Debian users who cry "apt-get, apt-get!" I use Apt for RPM, and that kicks ass too...


    But I still hear:
    I do not have any problems with the RPM system itself, but why has Red Hat still no system implemented like Debian apt ?

    Go to http://apt.freshrpms.net and download apt for RPM. Works very nicely. Even though it is not supplied by RedHat directly, it works as though it was. Plus all the security/bug updates can be 'apt-get upgrade'-ed, and there are custom packages also that RedHat do not offer, which also work flawlessly in most cases.

    --
    ------
    Random, useless fact: I type in startx entirely with my left hand.
  58. Why are applications installing DLLs anyway? by Ed+Avis · · Score: 1

    A cleaner solution would be to do things right and make sure that applications don't install random DLLs to start with. If an app needs foo.dll then it should be up to the administrator to install the package providing that library beforehand - or an automated dependency analysis in Windows's package manager could do this. This would also have the happy side effect of making app downloads less bloated.

    --
    -- Ed Avis ed@membled.com
    1. Re:Why are applications installing DLLs anyway? by dattaway · · Score: 1

      Why doesn't the application install and use the library in its own install directory? We do have paths for execution in Windows, right? I don't understand why every library for all of creation has to be in one directory. Its like giving the keys to your house to every resident in the city in case they need to use the kitchen sink to make dinner. There's going to be trouble if you share resources without discretion.

    2. Re:Why are applications installing DLLs anyway? by Anonymous Coward · · Score: 0

      Why shouldn't an app install a DLL?

      There's nothing magical about DLLs you know! It's just a way to modularize the code (a good thing).

      Every Win32 app I ever wrote (of any significance) had at least one DLL that was normally installed in the app's install directory and had a name that didn't conflict with any OS DLLs.

      Problems only arise when dumb app installers try to overwrite existing DLLs with their own versions.

    3. Re:Why are applications installing DLLs anyway? by Ed+Avis · · Score: 1

      If the app puts its own library in its own directory then it might as well just be statically linked. In both cases you lose all the advantages of dynamic linking: lower disk and memory footprint, faster app startup, and crucially the ability to upgrade a library (to a compatible, newer version) and get its new features or bug fixes in all apps using that library.

      --
      -- Ed Avis ed@membled.com
    4. Re:Why are applications installing DLLs anyway? by Ed+Avis · · Score: 1

      It's okay for the app to install its own DLLs - if the developer of Fred Enterprise Edition decides that it simplifies development to move a lot of the code into libfred.dll, fair enough. As you say, the difficulty is when apps depend on _outside_ DLLs but decide to come with their own (possibly outdated) versions of those libraries.

      That's what I object to - if an app depends on MFC it should require the administrator install the MFC package from Microsoft first. It makes no sense to have ten app installers each with their own copy of mfc42.dll.

      --
      -- Ed Avis ed@membled.com
    5. Re:Why are applications installing DLLs anyway? by dattaway · · Score: 1

      Do you ever run more than one instance of an application? I find myself running dozens of image editors at once, all sharing most of the same libraries. This would take up a magnitude more memory if they were staticly linked.

    6. Re:Why are applications installing DLLs anyway? by Ed+Avis · · Score: 1

      I agree, static linking sucks. And putting each app's DLLs into its own directory sucks for the same reasons. If you ran five different image editors at once and each had its own copy of foo.dll in its own directory then five copies of the DLL would also be loaded. The real advantage of dynamic linking is only realized when shared libraries are actually *shared*.

      --
      -- Ed Avis ed@membled.com
  59. So let me get this straight... by Lethyos · · Score: 4, Insightful

    In order to solve "DLL confusion" in Windows, Microsoft are going to increase of the number of DLLs on the system, potentially by as much as there are applications installed, and give each DLL a unqiue, but symbolic only (xyz123:pdq098 versus msvcrt.dll for example) identifier.

    One result is that from one machine to the next, not only will you not be sure what applications are using which DLLs, you will also have applications that use radically different identifiers for accessing their libraries.

    This eliminates library confusion... how? I can't wait to have to troubleshoot it. Here's another solution Microsoft: document your standard libraries so that idiot application developers don't feel they need to re-invent the wheel and dump custom libraries all over the place.

    Of course, the rest of us will continue using open source software.

    --
    Why bother.
    1. Re:So let me get this straight... by Anonymous Coward · · Score: 0

      You clearly do not understand the problem being discussed, or the solution being proposed, or the context in which it is placed - yet you feel irresistably compelled to comment upon it.

      How interesting.

    2. Re:So let me get this straight... by Anonymous Coward · · Score: 0

      Even more, if once a program has used a .DLL and the program is updated a new .DLL will be installed but the old will not (just in case other program need it). This will lead to a number of .DLL greater than the programs using them...

    3. Re:So let me get this straight... by Anonymous Coward · · Score: 0

      I take it you understand the problem, the solution, and the context. So why don't you enlighten us as to why the original poster is incorrect?

  60. Old news - this is .NET (already in .NET 1.0) by Anonymous Coward · · Score: 0

    C'mon guys - this isn't news - .NET 1.0 already does this. Looks like the tech writer is clueless. (and so is the moderator - ahem).

  61. Unix has done this with shared libraries since .. by Anonymous Coward · · Score: 0

    day 1! Shared libraries always have a form of versioning. Any flavor of using that uses shared
    libraries does this. Microsoft is just copying.

  62. Clutter? I don't hear linux users complaining by gtaluvit · · Score: 1

    somelibrary.so.2 somelibrary.so.3

    Its already been done. Heck, Microsoft already does it in .NET. Each DLL in .NET that gets put into the GAC has a unique id so you never need to worry about DLL hell. Its just garbage hell.

    --
    - gtaluvit (prnc. GOT-tuh-LUV-it)
  63. Contradiction of replies by somethingwicked · · Score: 5, Funny

    It's funny reading through the different replies to this story-

    Reply 1- "This is a horrible idea! Look at all the RAM/disk space this is going to use. M$ programmers are idiots!"

    Reply 2- "VMS/Apple/*enter slanted fav OS here* already does this! This was a good idea when it was done 10 years ago by ____ .

    Reply 3- An idea like this is so stupid, it will NEVER work right.

    So, its a stupid idea that will never work EXCEPT it has already been done BUT will take up too many resources UNLESS it is done by our fav OS AND then thats okay

    *grin*

    --

    ---"What did I say that sounded like 'Tell me about your day?'"---

    1. Re:Contradiction of replies by Anonymous Coward · · Score: 0

      Thanks!

      I wish you had gotten first post then I wouldn't
      have had to read through all this uninformed crap.

    2. Re:Contradiction of replies by __past__ · · Score: 1

      Yes, as if it would be possible that there are people with different points of view! On Slashdot! Ha ha.

    3. Re:Contradiction of replies by pohl · · Score: 1

      Ooh, what a fun game...mix statements made by different people into a context as though they were said by the same person, and point out how they're incompatible, and see how many +1 insightful points you can get from the witless moderators.

      There's got to be a latin phrase for this kind of fallacy, like argumentum ad dorkum?

      --

      The "cue the foo posts in 3, 2, 1..." posts will commence with no subsequent foo posts in 3, 2, 1...

    4. Re:Contradiction of replies by Anonymous Coward · · Score: 0

      What's the latin for:

      shut up you humorless jerk!

    5. Re:Contradiction of replies by CFusion · · Score: 0

      I agree with somethingwicked. /. users always have a negative opinion of something if it doesn't fall within their realm of favortism... Overall, the way I see it, is that if its MS its bad. Otherwise it's good. If it's an original idea then people with slam it and say it won't work... even though MS has proven you wrong time and time again. But if they use an idea which has worked across other OS for ages, and use it to improve the OS, they are STEALING IDEAS, oooohhhh (not that the Linux community hasn't stolen their share of ideas..., heh, they are trying to make Linux more like Windows as we speak, to attract more desktop users!) Sometimes there is no making people happy. Hell, at this point it won't matter what Billy does, you guys will hate him anyway. Which makes Bill my hero. Bill doesn't care what you think about him, just as long as you keep using his products, which you will. Bill wins. I wanna be like Mr. Gates. Seriously.

      --
      I used to be a MS fan but then I was brainwashed. Now I see the Light. Mac OS X pwns u.
    6. Re:Contradiction of replies by pohl · · Score: 1

      so that's what passes for humor these days.

      --

      The "cue the foo posts in 3, 2, 1..." posts will commence with no subsequent foo posts in 3, 2, 1...

    7. Re:Contradiction of replies by Anonymous Coward · · Score: 0

      He's trying to make a point, dipshit. He didn't make it sound like the same person (he marked each individual reply as separate). The point is that most people are quick to bash MS without thinking calling it a bad idea, but some people that are a little more informed will say that it's already been done, so they're copying ideas. Basically, it's impossible for MS to do anything right because 1) it's either a bad idea, or 2) they're stealing when it's still obvious that we wouldn't have the computing resources available to us that we do now (so you can run your cute little BSD or Linux box) if it were not for MS. You'd still be trying to steal time from a uni. machine.

    8. Re:Contradiction of replies by somethingwicked · · Score: 1

      Respectfully, I think you missed my point. Yeah, I was trying to funny, but funny to make a point.

      Take M$ out of it for second.

      If a VMS supporter popped up and said-"This is how VMS handles software libraries...", I seriously doubt you would have seen anyone raise a finger as to how that method is backasswards, wasteful, etc.

      As soon as M$ offers this same solution, the screams can be heard immediately.

      --

      ---"What did I say that sounded like 'Tell me about your day?'"---

    9. Re:Contradiction of replies by Anonymous Coward · · Score: 0

      Different people have different opinions.

      If you want uniform, continuous thought from a large group of people, why don't you go become a Scientologist. I hear many Scientologists are happy, stupid people.

    10. Re:Contradiction of replies by nathanh · · Score: 1
      Basically, it's impossible for MS to do anything right because 1) it's either a bad idea, or 2) they're stealing

      How about Microsoft implements (1) a good idea and (2) doesn't steal? That would be an example of Microsoft doing something right.

    11. Re:Contradiction of replies by error0x100 · · Score: 1

      Overall, the way I see it, is that if its MS its bad. Otherwise it's good.

      This is not entirely unreasonable: if you work fairly regularly with Microsoft systems, you will sooner or later begin to realise that Microsoft quite simply has an amazing ability to completely screw up almost everything that they try to do. They regularly take nice ideas and turn them into completely shit, broken implementations. I think what you're seeing in a portion of the /. crowd is merely that sense of dread in knowing "oh crap, here is something else that they are going to screw up".

    12. Re:Contradiction of replies by Shippy · · Score: 1

      I think that the poster's point is that you WON'T LET THEM have a good idea. You'll always come up with something to shoot it down. The same can be done for many Linux ideas, too. For example, fonts are a bitch under linux. Who's bright idea was it to do it the way it's done? It sucks. Sorry, but it does. As for stealing, Microsoft extends an idea from someone else and it's stealing. However, if Linux decides to go and clone the UI and feel of tons of Windows apps, nobody bats an eyelash. It's just another example of how "Linux is becoming a better desktop system".

      All in all, many people on here have double-standards when it comes to Microsoft and Linux because they are ignorant zealots.

      I'm not trying to be a Troll, but I think if you look at the vast majority of posts on Slashdot over a variety of stories, that's the jist of it.

      --
      -Shippy
    13. Re:Contradiction of replies by nathanh · · Score: 1
      I think that the poster's point is that you WON'T LET THEM have a good idea.

      I don't see how I could stop them.

      If you meant to say people who frequent Slashdot won't acknowledge when Microsoft has a good idea then you're wrong.

      All in all, many people on here have double-standards when it comes to Microsoft and Linux because they are ignorant zealots.

      Ok, so you won't have trouble pointing to a single person who has these double-standards? If there are "many" then it should be easy. Bear in mind that you can't point to two people with two differing opinions and claim a double-standard.

  64. Re:In other news by pe1rxq · · Score: 1

    Indeed most libraries have subversions, but most apps just link to the major version. When an app insists it needs version 6.3.2.4.33 it gets nasty...

    Jeroen

    --
    Secure messaging: http://quickmsg.vreeken.net/
  65. Re:In other news by KeyserDK · · Score: 1

    Mandrake HAS fixed the dependency problem for RPM's.
    (URPMI)

    --
    still reading?
  66. Caching as well. by Lethyos · · Score: 0

    This means that if you have somelibrary.dll-123 and somelibrary.dll-234, they will end up both getting cached (wasted memory) or only one will get cached at a time. An application that uses the one not cached will have the load the other, even though the two DLLs may be identical save a few minor details. There will certainly be greatly increased disk access and if you thought Windows was a hog on your disk now...

    --
    Why bother.
  67. Strong binding? by __aatskl8715 · · Score: 0

    The first time I read through that I thought it said "Strong Badding". Homestarrunner has gone to my head.

  68. poor Microsoft... by borgdows · · Score: 0

    they will die in their own creation : the DLL HELL!!

    (who said Frankenstein?)

  69. dot net by pieters · · Score: 1

    I thought .NET was the supposed to be the end of DLL Hell. Whatever, I just got my PowerMac, so let them rot in in DLL Hell.

    --
    "It's like polishing a turd." -FZ
  70. Registry Hell? by Anonymous Coward · · Score: 0

    This raises the point, "When is Microsoft going to solve Registry Hell"?

  71. Unsolvable? by Hard_Code · · Score: 4, Interesting

    Well, it is one thing to say that application can now obtain the version of the DLL they want if they *explicitly ask for it*. It is another thing to say that, they always and forever, until the end of time get the DLL they were "compiled against" or "packaged with". It is not clear from the article which of these two situations is the case.

    The point of shared libraries is that you CAN upgrade one single library and have many applications "automatically" inherit the changes. This is how you can update a file dialog for instance, without recompiling every single one of your GUI applications. This is a Good Thing. The question then becomes "why is this shit breaking so much". The right solution is a proper combination of carefully-followed deprecation and backwards compatibility rules (preferentially married with some sort of standard version naming convention), and the ability for applications to explicitly choose the library version they want (or even better yet, runtime configuration directive that can be set by the user or administrator) in the cases that *it is known that the new shared library is not backwards compatible*.

    --

    It's 10 PM. Do you know if you're un-American?
  72. Re:System Requirements by Anonymous Coward · · Score: 0

    Dont use there software either! (I'm talking to you MacOS guys out there)

  73. This is NOT about DLLs! by the_germ · · Score: 4, Informative

    This has nothing to do with DLLs, but with .NET components. Read the article carefully!
    A .NET application can bind to a specific version of a component, but that's not even news - it already exists in .NET 1.0 and some aspects of it were already available in COM years ago.
    The only aspect of it that has to do with DLLs is that .NET components are usually exported from DLLs, but this won't solve any of the problems with 'normal' DLLs.

  74. It's a "technology"? by Anonymous Coward · · Score: 0

    Someone should teach these computer scientists a little respect for the word "technology". Not every fucking program you write and every database you create is a new "technology"!

  75. It's .NET only. by TheShadow · · Score: 2, Informative

    This won't effect existing .dlls... this "new" technology is part of the .NET framework. Each assembly (which is just a compiled binary of .Net classes) has a version number and guid. When you compile one assembly that references another assembly, there's information that tells the CLR what versions of the referenced assembly are acceptable. There another thing called the Global Assembly Cache that keeps track of the different versions of each assembly.

    So, anyway, it will only help future programs. We'll still have to suffer from .dll hell for existing stuff.

    --

    --
    "What do you want me to do? Whack a guy? Off a guy? Whack off a guy? Cause I'm married."
  76. Microsoft Hell? by Anonymous Coward · · Score: 0

    Maybe this should be re-phrased as, "When are we all going to get rid of Microsoft Hell"?

  77. Why we need loadable libraries: Example by babylon93 · · Score: 2, Informative

    There's this new thing called an "object".

    Basically, you can create an object of a particular type anyplace that has access to the definition of that object.

    Find a bug in that object? No problem...just update your single definition of that object ( the DLL, loadable library, module, etc ).

    If every time I wanted to connect to the database or check an MD5 signature, I had to include that code into my project, that would really suck.

    Instead of having 1 version of that code, I would now have as many versions as there are programs using it.

    If I found a bug after using it in several places, I would have to recompile perhaps dozens of programs that use the same code.

    With DLLs and libs, we can make reference to the object defined in the external library, and just use them from anything that _can_ reference them. I find this is very much my preferred method, and the reason people in general prefer to use external libraries when they can.

    Imagine actually having to include all the code from CGI.pm, DBI.pm and DBD::Mysql everytime you wanted to just make a simple call to the database.

    Here's an example to show how many modules you would need to copy + paste into even the most simple perl script if not for loadable libraries (you can see what I'm saying here):

    Windows--
    perl -e "use CGI;use DBI;use DBD::Mysql;use Digest::MD5;print $_. ' => ' . $INC{$_} . chr(10) foreach sort {$a cmp $b} keys %INC"

    Other--
    perl -e 'use CGI;use DBI;use DBD::Mysql;use Digest::MD5;print $_. " => " . $INC{$_} . chr(10) foreach sort {$a cmp $b} keys %INC'

    This is the output I get from running that 1-liner on my windows box:
    AutoLoader.pm => C:/perl/lib/AutoLoader.pm
    CGI.pm => C:/perl/li b/CGI.pm
    CGI/Util.pm => C:/perl/lib/CGI/Util.pm
    Carp.pm => C :/perl/lib/Carp.pm
    Config.pm => C:/perl/lib/Config.pm
    DBD/Mysql. pm => C:/perl/site/lib/DBD/Mysql.pm
    DBI.pm => C:/perl/site/lib/DBI .pm
    Digest/MD5.pm => C:/perl/site/lib/Digest/MD5.pm
    DynaLoader.p m => C:/perl/lib/DynaLoader.pm
    Exporter.pm => C:/perl/lib/Exporter .pm
    Exporter/Heavy.pm => C:/perl/lib/Exporter/Heavy.pm
    constant. pm => C:/perl/lib/constant.pm
    overload.pm => C:/perl/lib/overload. pm
    strict.pm => C:/perl/lib/strict.pm
    vars.pm => C:/perl/lib /vars.pm
    warnings.pm => C:/perl/lib/warnings.pm
    warnings/registe r.pm => C:/perl/lib/warnings/register.pm

    Loadable modules are cool.

    1. Re:Why we need loadable libraries: Example by Anonymous Coward · · Score: 1, Insightful

      What you are describing is essentially 'modular programming' which IIRC was the hot methodology in the mid 1970's. The whole idea of loadable libraries as opposed to statically-linked monolithic programs arose from this way of thinking.

      It seems we are doomed forever to reinvent the wheel. Each new generation of computer scientist repeats what his forefathers did - only somewhat less efficiently and with more fuss and expense.

  78. Sounds like HFS+ by mbbac · · Score: 1

    How old is HFS+?

    I still don't see how this will help when DLLs are overwritten, though.

    --

    mbbac

    1. Re:Sounds like HFS+ by atlasheavy · · Score: 1

      >Sounds like HFS+.

      (For those not familiar with the more obscure Mac OS acronyms, this would be the Hierarchical File System +).

      What in the world are you talking about? HFS+ is the filesystem used by Mac OS 8.x, 9.x, and X. It has absolutely nothing in common with .Net's Global Assembly Cache... That's like saying that Mac OS Classic's Extension Manager is a lot like Fat32 or NTFS... Well, except that extension manager was phenomenally brain-dead, and the GAC actually works right...

      The joys of being a Cocoa and .Net developer are many: you actually get mocked by everyone....

      --

      iRooster, the Mac OS X a
    2. Re:Sounds like HFS+ by mbbac · · Score: 1

      HFS+ uses GUID to identify files rather than just the filename. This is why aliases and other things allow you to rename the file or move it and still be locatable.

      --

      mbbac

  79. WINE .dll issues? by handybundler · · Score: 0

    What will this do to WINE and it's dll running capabilities? Would a new version be in order and would it maintain this?

    --


    a/s/l here. Sorry, adding domain tags to your s
  80. Re:In other news by tzanger · · Score: 4, Informative

    Indeed most libraries have subversions, but most apps just link to the major version. When an app insists it needs version 6.3.2.4.33 it gets nasty..

    Stop spreading FUD. You can access any library you want with LD_PRELOAD. So if libfoo is at 6.3.4 and you have a 6.3.2.4.33 on the system that your app absolutely requires, a simple

    LD_PRELOAD=/path/to/libfoo.so.6.3.2.4.33 someapp

    will do the trick. In fact, I do this specifically for StarOffice so I can use my local copy of freetype2 with the bytecode hinter turned on instead of the version which comes with StarOffice.
  81. Re:In other news by chthon · · Score: 1

    Isn't up2date a tool to just make sure that for some installed software the patches get installed via the Internet ?

  82. That is in fact static linking, by Otis_INF · · Score: 2, Insightful

    and abandones the advantage of shared libraries: one DLL ABC which is used by several applications.

    Sharing a library has one disadvantage: the interface of the library should not change, otherwise using applications will crash. When an interface changes, you have to update the version. Now, you can do this in several ways, most likely this is doable by using a filename version scheme, or as in .NET metadata with a versionnumber.

    The central point where you register shared dll's shouldn't be based on a directory though, but a central repository which holds ID's that refer to files on disk. This is implemented in COM somewhat: COM objects are stored in DLL's mostly and when you register a COM dll, its COM Objects are registered in the registry: each CLSID is stored with the physical file where to find the object. If you now store the files locally with the app, as it should be, you can register the com dll's and each application using a COM object with a given CLSID that is stored in the local stored dll can use them.

    The problem arises when you install 2 applications which use the same DLL with the same objects, only application A uses v1.0 and application B uses v2.0. v2.0 of the library has all the objects of v1.0 but also newer objects. You first install A. All dll's are stored local. Then you install B. A works, it will probably use the dll of B because B registered all teh objects with the local stored DLL. When you UNinstall B, A will not work anymore, unless you keep the dll with the objects around. Most people don't do this ("Hey the uninstaller left some dll files behind!" *executing del command*). That's DLL hell.

    What's best is thus a central repository (Be it the GAC or the registry) and a central store which allows multiple versions of a DLL to be stored. I'm pretty sure that's what MS is heading at, and not your MacOS X nor any Unix does this.

    --
    Never underestimate the relief of true separation of Religion and State.
    1. Re:That is in fact static linking, by Anonymous Coward · · Score: 0

      "I'm pretty sure that's what MS is heading at, and not your MacOS X nor any Unix does this."

      You seem to try to prove the superiority of the repository approach because it avoids DLL Hell. Before this, you cite DLL Hell as being a problem which arises in installation and uninstallation of programs. Well, given the nature of Mac OS X application bundles, installation and uninstallation are irrelevant -- you can't trample on one program just by deleting another. Apple knows this...Classic Mac OS had its own, less pronounced version of DLL Hell, and the standard solution was the Extensions Manager.

      So, what's the point of a repository approach again? You state yourself that a central repository would allow different programs to be able to access specific libraries, multiple versions of which would reside on your system. Well, if multiple copies of the libraries are just hanging around on your system, why not keep them where they belong, and standardize on that? Kind of like...application bundles.

      I guess that's the difference between Mac programmers and Windows programmers. Mac programmers know that if they don't follow Apple conventions (which are normally well-thought-out BTW), they will have problems with both maintenance and user acceptance. Windows programmers typically don't have the foresight to give a crap about either. (Actually, I can understand that MS needs to be able to support legacy programs that would just break if MS were to try anything really innovative on this front, so please, no flames.)

    2. Re:That is in fact static linking, by Anonymous Coward · · Score: 0

      Actually MacOS X does have this sort of thing with its frameworks. You can have multiple versions of a framework and the appropriate versions will be used for the programs that they were linked against. And the system looks through all of the shared versions and uses the newest version of the framework that is compatible for each version. These versions can come inside of a package (such as an application), or be stored in the Libraries (/Library, /System/Library, ~/Library, etc). Take a look at Apple's documentation on this, "my MacOS X" does this.

    3. Re:That is in fact static linking, by Anonymous Coward · · Score: 0

      Actually, OS X does do this.

      If you look in the frameworks folder of the system, each shared framework contains a folder for each version, as well as a soft link to the "current" version.

      Applications which use only a specific version of a framework can verify that that version exists, and install it if it does not. On the other hand, applications which want to always use the most recent version of that framework can link against the "current" version. Effective, yet fairly elegant. OS X is well designed.

    4. Re:That is in fact static linking, by 2nd+Post! · · Score: 1

      You've already got a couple replies regarding this.

      Apple gets around the problem of shared DLLs by using the concept of Frameworks.

      You can place Frameworks in /System/Library, /Library, or ~/Library (each user has one), depending on whether the Framework should have global, local, or user scope (and security).

      So if you want to make QT available to all Apps, you'd put the appropriate QT libraries in /Library, for example. Same with a DivX package. And you could have multiple versions of QT in /Library, assuming whoever created the QT package kept that in mind.

      Then there is Bundles, in which local resources are kept local.

      So with both systems, you get the inclusive solution so that each application has it's own structure (a Bundle) and the system has it's own library structure (a Framework).

      Quicktime, for example, exists as a Framework. So does WebCore and Cocoa.

  83. OH NO ! by MrNop · · Score: 1, Interesting

    ..Microsoft use the same news dupe checker than slashdot ! Windows 2000 : "Get out of DLL Hell for good. The Windows® 2000 Professional operating system has a feature to meet, greet, and exorcise applications that mess with your Dynamic-Link Library (DLL) and executable files: Windows File Protection. This feature saves you from unsightly operating system and application mismatches." http://www.microsoft.com/windows2000/techenthusias t/features/wfp.asp Windows XP: "One source of frustration for me is applications that share code. No doubt you've run in to the scenario where two applications share the same DLL but require two different versions of it. The result is usually fatal. Windows XP fixes this problem via side-by-side component sharing. The gist of this technology is to allow multiple versions of a component to run in memory at the same time. Each program gets to use its own version of the DLL." http://www.microsoft.com/technet/treeview/default. asp?url=/technet/prodtechnol/winxppro/evaluate/wxp relb.asp?frame=true&hidetoc=true - MrNop

    1. Re:OH NO ! by Anonymous Coward · · Score: 0

      This new announcement is about .NET, dumbass. Christ, doesn't anybody bother reading the articles around here anymore?

  84. *.so.* by Anonymous Coward · · Score: 0

    This sounds like Microsoft just "invented" things like MesaGL.so.1.2 - We've been doing that for years... or have I missed something?

  85. Re:System Requirements by HaloZero · · Score: 1

    Keyboard and Microsoft Mouse or compatible pointing device>

    Does my middle finger qualify?

    --
    Informatus Technologicus
  86. How about the GPL? by Anonymous Coward · · Score: 0

    If they did that, wouldn't it become very hard to use GPL'ed software with Windows? GPL itself forbids linking against closed libs, and this would make all applications statically linked.

    But then, maybe that is the point...

  87. Is this New? by Bodrius · · Score: 1

    I remember hearing, reading, and watching demos about this before Visual Studio .NET was released.

    It was all part of the ".NET revolution", and was hyped for some time. It seemed a nice idea from the marketish resources, as a matter of fact. One of the things about .NET that could be considered substance.

    Of course the new version of Windows will do this, because it includes and is based on .NET.

    But in case you haven't noticed, the blasted thing has been available for years now.

    Am I wrong in thinking this was included from the beginning?

    --
    Freedom is the freedom to say 2+2=4, everything else follows...
  88. Re:In other news by mabinogi · · Score: 2

    I don't think there was any 'FUD' in that statement.

    If an application _requires_ a certain sub version to work (by that I mean version == x.y.z, not version >= x.y.z), then there's something wrong with either the design of the application, or the design of the library...

    --
    Advanced users are users too!
  89. what's the point? by Johnny5000 · · Score: 2, Interesting

    If each application pretty much has their own version of the DLLs, doesn't that defeat the purpose of having shared libraries anyway?

    --
    The libertarian solution to the failures of capitalism is to apply more capitalism til the failures are fixed.
  90. End of DLL Hell by szcx · · Score: 1, Funny

    Microsoft said side-by-side DLLs would end DLL Hell. Then it was Windows File Protection... that was really going to end DLL Hell this time. Honest! Then came Fusion. Now it's Strong Binding.

  91. Progress = dependency probs by Anonymous Coward · · Score: 0

    As long as there will be progress in Operating System development, whether with Linux, BSD, Windows, OS X..., whatever, there will be so-called dependency problems, proving once again that programmers are not gods. On the Linux side of the fence, Debian has come the closest to perfection in resolving library and dependency issues. FreeBSD is quite close if not equal. Gentoo Linux also. As far as broken apps go, they are caused more by the desire, or should I say compulsion to have the latest and greatest on the bleeding edge. We are all happy victims of the syndrome.

  92. Where do we get these people from? by corebreech · · Score: 1, Flamebait

    Just statically link the library and be done with it!

  93. Re:whats up fools by Angry+White+Guy · · Score: 2, Funny

    Nice nick. Maybe we could grab a beer and take turns blaming each other for all the worlds problems.

    --
    You think that I'm crazy, you should see this guy!
  94. YOU are breaking the patent by yerricde · · Score: 1

    In fact, I do this specifically for StarOffice so I can use my local copy of freetype2 with the bytecode hinter turned on instead of the version which comes with StarOffice.

    Do you live in the USA or Canada? It wasn't clear from your web page because your résumé is 404. If you actually live in the USA, or if Canada has software patents, then go directly to jail, do not pass go, do not collect $300 Canadian, because YOU are breaking Apple's patent on bytecode hinting by using LD_PRELOAD.

    (posted without bonus because it's tangential)

    --
    Will I retire or break 10K?
    1. Re:YOU are breaking the patent by mverrilli · · Score: 1

      And you can't "break a patent" in the comfort of your own home? You are confusing patents with copyrights.

      If I want to build something for personal use that someone has a patent on... there isn't a problem with that. Now if I try to sell it without licensing... that is another story.

    2. Re:YOU are breaking the patent by tzanger · · Score: 1

      First, my resume is 404'd because I'm not looking.

      Second, It is my understanding that patents do not apply to personal, non-distribution use, in the US or abroad. Patents are a method for someone who has created a work to be paid for said work if you're selling or distributing something that uses their work. I'm not.

      Third, I mis-typed. It's their autohinter that I am using anyway, not their bytecode interpreter. So the patent doesn't apply. I apologize for the mis-type.

  95. familiar by adamruck · · Score: 1

    sounds very simalir to kernel module versioning ...

    --
    Selling software wont make you money, selling a service will.
  96. They are trying! by spanky1 · · Score: 1

    Yes, Microsoft has implemented a few ideas to help resolve DLL hell. The problem really is not with Microsoft though. The problem lies with lame software vendors. Everyone and their dog tries to write Windows software, and many applications (especially vertical market stuff) is designed very poorly. I hate seeing a client spend $100,000 on a piece of software that looks like it was written by a beginning VB programmer.

    Microsoft itself doesn't put out software affected by DLL hell, but other software vendors do.

    Case in point: How long as MS told software vendors to check file versions before overwriting files? Or to not overwrite operating system files? Software vendors don't listen, so MS has to implement "system file protection" in Windows 2000. If you look on software development newsgroups, you STILL see posts of lame software developers trying to circumvent this.

    1. Re:They are trying! by IntlHarvester · · Score: 1

      Microsoft itself doesn't put out software affected by DLL hell, but other software vendors do.

      The third parties were just following Microsoft's instructions -- Windows 3.1, 95, etc never had any service packs. Microsoft didn't want to require users to obtain external software. I suppose that made some sense in the floppy disk days.

      So they told third parties "If you want an upgraded system DLL, YOU ship it, and YOU install it". They also had sourcecode for many of these DLLs so that vendors could create forked versions. Furthermore, Windows never had a standard installer or method to assist vendors in installing these DLLs.

      Now, instead of one consistant way of upgrading your base OS, you are at the mercy of any hack in his garage -- and they did fork DLLs, lie about versions and filedates to defeat other installers, and blindly copy files. As pointed out, even MS did this stuff. Welcome to DLL Hell.

      For the most part, this has been fixed in W2K -- System DLLs are now clearly part of the OS upgrade path, and the system file protection demon prevents dumb installers from overwriting files, and there's a std installer service.

      (Actually Win95 also had SFP, but it was only for 16-bit DLLs! So DLL Hell was reborn on Win32 when it could have been stopped a long time ago.)

      --
      Business. Numbers. Money. People. Computer World.
  97. Re:In other news by yerricde · · Score: 3, Insightful

    As long as a libraries API doesn't change between major versions (as it should) there is no problem.

    Unless the semantics of an API change subtly from one version of the DLL to the next. This is sometimes done to fix bugs, security holes, etc. in one version of the DLL. You wouldn't believe how many proprietary programs in practice rely on undocumented behaviors of specific versions of libraries.

    --
    Will I retire or break 10K?
  98. There's a Bigger Picture Here!! by CrazyLegs · · Score: 4, Interesting
    Great... MS has discovered versioning and makes a big announcement. But what is really going on here is that MS is trying to design their way out of a more fundamental design problem that has plagued Windows since Day One. That is, they allow system-level software (DLLs) to co-mingle with software others have written. How many Windows shrink-wrap products have taken advantage of this feature by modifying base Windows DLLs, tripping the light fantastic over system-level directories, etc.??

    OS/2 - as an example only - had a much better scheme where o/s stuff lived in its own space and the stuff you built/bought lived in its own space (and never the twain shall meet). On top of that, they implemented the idea of a LIBPATH env variable so that you could set the path OS/2 would take when looking for DLLs. Consequently, screwups were minimized, versioning was not an issue, built/bought software could be maintained easily, and (wait for it...) you could upgrade the o/s without blowing away all your apps!

    Can't wait to hear what MS 'discovers' next!

    --

    CrazyLegs

    "Pork!!" said the Fish, and we all laughed.

    1. Re:There's a Bigger Picture Here!! by Anonymous Coward · · Score: 0

      >How many Windows shrink-wrap products have taken advantage of this feature by modifying base Windows DLLs, tripping the light fantastic over system-level directories, etc.??

      I dunno? Name me some.

      I can't think of any shrink-wrap products that replace system DLLs.

    2. Re:There's a Bigger Picture Here!! by SmackCrackandPot · · Score: 1

      AOL is one. I once went on holiday in France (from the UK) and decided to upgrade to a French version of AOL while over there. It didn't take long to find out that AOL (and many other applications) just install the latest version of any DLL that they use. I found this out, because the directory folders and many of the Message Boxes were now in French. There are still some Peruvian fichiers lurking in my download directory.

    3. Re:There's a Bigger Picture Here!! by Anonymous Coward · · Score: 0

      Anything that installs DirectX. OK, it might be good to upgrade to the latest version but it updates system DLL.

  99. Re:Garbage collection: Weak References by Hig · · Score: 1

    The .net FLC also supports classes for creating weak references to objects.
    You can resurrect your objects, after they go out of scope if garbage collection hasn't as yet removed them.
    But at the same time setting a weak reference to an object allows for the garbage to remove them if another process requires the memory. Comes in handy for objects that are large and non-trivial to create.

    advertise here... call us now.

  100. not unique, but still doesn't fix the problem by Anonymous Coward · · Score: 1, Interesting
    as others have mentioned, this is not an unique problem. I've had plenty of make problems in linux when I didn't have the right gcc installed or the wrong binary.


    My perspective isn't how conflicts are solved, but it's the underlying API itself isn't generalized and well designed. I think in MS's effort to make it super simple for stupid programmers, the API's were dumb down to the point where method signatures limited their ability to grow/add new features. Therefore they had to come up with new API constantly, which continually broke old DLL's. It's what happens when software takes it's API design from some one who thinks like a sales guy, instead of a software architect who thinks forward.

  101. Not that simple! by spanky1 · · Score: 2, Informative

    MS already advises software developers to put application-specific DLLs in the application folder. The reason some DLLs need to go in a global location is because they are shared by MULTIPLE APPLICATIONS. Sure, you could put copies of each DLL in each app's folder, but that leads to other problems as pointed out by other messages here. (Wasted disk space, wasted RAM by loading multiple similar DLLs, difficulty in upgrading all those DLLs, etc).

  102. isn't this the same as... by ochnap2 · · Score: 1

    ... having the shared objects named as mylib.so.2.3.0 for example? Indeed, isn't this better? Instead of having each installer trying to overwrite every dll in the system, each one copys the one that suits its needs if its not already there o newer. All that not talking about the security issue already posted...

    1. Re:isn't this the same as... by Anonymous Coward · · Score: 0

      A .NET PE (dll or exe) can have versioning built in, so there's only 1 file ever! if you understand .NET.

      If my version 1 dll breaks compatiblity with my version 2 dll, I have 2 options - either provide metadata code in the version 2 with attribute based programming, or to have an external .config file with similar information on how to resolve the versioning problem. You can also go the GAC route, but that's for truely global files.

      Either way, it provides resolution to the versioning probs without adding another stinking dll to my system.

  103. If you write your app in Windows 3.1 by Aging_Newbie · · Score: 2, Insightful

    the app will use the .dlls from its local directory and unless it is running in a 3.1 environment it will not encounter any possible conflicts. Amazing how what is old is new again.

    Caution -- printing is no longer well supported from the sixteen bit compatibility so a workaround is needed but the rest continues to work well. Not sure about sockets, haven't tested.

  104. conspiracy. by Vodak · · Score: 1

    Oh great, I read the artical and it sounded logical but now the conspiracy theorist in me is crying out "A NEW DISCOVERY IS COMING OUT AND THEY DON'T WANT YOU TO KNOW ABOUT IT!". I'd let him out but then I wouldn't be able to make them nifty foil hats.

  105. Even if it isn't pirated by yerricde · · Score: 1

    The only people I have sympathy for are people who pirated XP to run on their PII-266 and people whose hardware is limited to 128 or 256 megs total memory (like a crappy old Sony Vaio desktop I have to setup for a relative).

    Such as the class of 2003 at my school. Replace "pirated" with "got a site-licensed upgrade to" and "PII-266" with "school-issued PII-333 laptop". Laptops have slow hard drives designed for low current drain rather than for fast performance, and that doesn't help boot times or hibernate/wake times much.

    --
    Will I retire or break 10K?
  106. Why not store the dll's in the program's directory by Anonymous Coward · · Score: 2, Interesting

    The whole idead behind dll's was to keep from having multiple copies of the same file for each program. This seems to overrule that theory, so why even store it in windows\system(32) then, just put the dll in the programs directory and do away with the dll-id nonsense.

  107. Terrabyte? by spanky1 · · Score: 1

    What's that? When you take a bite out of the Earth?

  108. Re:Garbage collection: Weak References by dachshund · · Score: 1

    Maybe I should have put "garbage collect" into quotes. What I meant was that I want the system to remove the files from the disk when their reference count reaches zero. Not literal RAM garbage collection, just an analogy.

  109. Not quite correct! by spanky1 · · Score: 1

    Windows dynamically loads code segments out of a Win32 executable as well. It does NOT load the entire thing into RAM.

  110. File name overloading by PurpleWizard · · Score: 1
    All they need to do is file name overloading.

    The name stays the same but it makes use of the date and size to distinguish it or perhaps adds a hash to the name.

    Yes I'm joking you clown

  111. Only applies to .NET apps by edxwelch · · Score: 3, Informative

    The artical doesn't make it very clear, but I think it only applies to applications developed using the .NET framework. So, for all those other applications out there it's dll hell as usual ;)

    1. Re:Only applies to .NET apps by NightEyez · · Score: 1, Informative

      No. .NET uses namespaces to identify dlls so it completely does away with dll hell. This "feature" in the article is talking about the old COM way of using dlls. And as someone else pointed out, this is a pre-registry registry.

  112. DLL Hell? by gui_tarzan2000 · · Score: 1

    Am I the only one who remembers how small and efficient code used to be? One of the biggest problems with Window$ is the bloated and incompatible code nightmare we have today (and have for the past several years). XP(letive) doesn't solve these problems, and as long as the programmers have free reign to add bloat to their code it will not get any better.

    --
    Have you hugged your penguin today?
    1. Re:DLL Hell? by Anonymous Coward · · Score: 0

      Yeah yeah yeah! Blah blah blah!

      I'm sure you could of done a better job than all those evil guys at MS at producing the worlds biggest selling OS.

      Yoyu're just another clueless fuckwit pissing into a hurricane.

  113. Re:In other news by xanadu-xtroot.com · · Score: 1

    From what I've seen, Gentoo already has.

    Well, while yes, Portage is a wonderful package manager, it certainly isn't alone in that respect. There's apt for Debian, whatever the BSD's use (I've not used BSD, but portage keeps getting compared to it). If you just want to focus on RPM distros, Mandrake has urpmi, SuSE has their YAST thing.

    I really can't speak on RH since I haven't bothered with it since around 6.2 or so, so I don't know if up2date handles deps as well as the others do, but you can use apt on RH these days anyway, so that's a plus.

    I think all the RPM hell jokes are getting rather dated these days. There's been solutions out for quite a while now.

    --
    I'm not a prophet or a stone-age man,
    I'm just a mortal with potential of a super man.
  114. Pre-Registry Registry? by sl0w · · Score: 2, Interesting

    Does anyone else see this as a pre-registry registry?

  115. Is LD_PRELOAD a unix thing or just Linux? by Viol8 · · Score: 1

    Just wondering because I've not heard of it before.

    1. Re:Is LD_PRELOAD a unix thing or just Linux? by IamTheRealMike · · Score: 1

      LD_PRELOAD is a part of the ELF specs, which are followed by nearly every form of UNIX I know of (except macos, but well, let's not go there ;)

  116. Re:In other news by Anonymous Coward · · Score: 0

    Not really. There are tools for it:
    apt,rc,up2date etc. I like rc from Debian:

    rc in gcc

    and it installs what needed. Sometimes you
    add --usubscribed

  117. so.... by XO · · Score: 1

    So this will be just like having libc.so.4 vs libc.so.5.

    Or just like having MSVBRNT40.DLL MSVBRNT50.DLL MSVBRNT60.DLL (i don't remember the names.. referring to the MS Visual Basic runtime DLL) ..

    It's like DUH... Have the application tell the OS what version of the library it's expecting, then have the OS query the library to find out what works for it./

    --
    "Champagne for my real friends - and real pain for my sham friends!" http://ericblade.postalboard.com/
  118. hilarious... by kingkade · · Score: 2, Informative

    I think it works by 'indexing' the dlls which are required only based on version. call me old-fashioned, but i like to read the article first. ;-)

    1. Re:hilarious... by Emugamer · · Score: 1
      call me old-fashioned, but i like to read the article first. ;-)


      hmm never heard of that before, must be some new age thing...
  119. Microsoft: get a clue: just do what Linux does by g4dget · · Score: 2, Informative
    Binding applications to DLLs tightly doesn't solve the problem either because, as people have pointed out, often you do want applications to use a new version.

    The real solution is to indicate whether a DLL is a bug-fix release or whether it represents a significant and incompatible change to the APIs. You know, like Linux major/minor dynamic library versioning, for example.

    1. Re:Microsoft: get a clue: just do what Linux does by Alomex · · Score: 1

      The real solution is to indicate whether a DLL is a bug-fix release or whether it represents a significant and incompatible change to the APIs.

      This doesn't work, as often application developers detected the original bug, e.g. /* string terminated by \0\n\0 due to DLL bug */

      then the fix gets released and breaks the original application.

      What Microsoft is doing is the right way to do it.
      Ideally, upon upgrade of a DLL, there should be a way for the application to contact the mother ship (i.e. the home page of the developer) and ask for approval to upgrade to the new DLL.

  120. Re:In other news by Daengbo · · Score: 1
    Apt is and has been included in the (soon-to-be-national) Thai linux distro that I use, LinuxTLE. Local mirrors and everything, all run off a seriously fat pipe donated by the government.
    In short, I find it very useful and have some experience with it, but find that it fails miserably on anything like an apt-get dist-upgrade, most recently asking to remove the followinf very important packages:
    console-tools libcfont.so.0 (due to console-tools) libconsole.so.0 (due to console-tools) libctgeneric.so.0 (due to console-tools) libctutils.so.0 (due to console-tools) /usr/bin/loadkeys (due to console-tools) ntsysv sendmail

    Maybe that's why it's still at 0.39?
  121. Re:It's a poor substitute for a real operating sys by Anonymous Coward · · Score: 0

    >The fact that Windows stupidly loads the entire .exe is shoddy design from the start..

    Well, I'd agree with you - just three problems...

    1) It doesn't

    2) You don't have a clue what you're talking about

    3) VMS a serious OS? - oh, maybe you meant MVS!

  122. Uh, come again? by Codex+The+Sloth · · Score: 1

    Microsoft itself doesn't put out software affected by DLL hell, but other software vendors do.

    That is flat out false. Remember when MSVC 6 came out and Adobe Photoshop stopped working because they had made non-backwards compatible changes to the only MFC DLL?

    Microsoft is just (if not more) likely to introduce backwards compatibility problems into system DLLs. How is IE (which updates all kinds of system DLLs) any differnt from a user application?

    Just because they (meaning the OS group) doesn't mean that they (meaning the applications group) knows what they are doing. They've been making half assed attempts to fix this problem for years -- this is just yet another lame attempt. It's also a good example of "Press Release Engineering" -- they don't have to actually do anything, just mention it in a press release, then people will complain and they'll decide whether to do it or not.

    --
    I am not a number! I am a man! And don't you ... oh wait, I'm #93427. Ha ha! In your face #93428!
    1. Re:Uh, come again? by Reziac · · Score: 1

      And there may be some right-hand/left-hand confusion too. Frex, I discovered that OfficeXP can indeed overwrite WinXP "protected" system DLLs, and does so (it downgrades MSInfo, not sure what else it might have broken, but Restore cannot fix it. SFC did, tho.)

      Point being, if you're going to protect the system files, you can't make exceptions for your own non-OS products -- they need to follow the same rules as everyone else, or something WILL get broken.

      --
      ~REZ~ #43301. Who'd fake being me anyway?
  123. Static is the way to go by suitti · · Score: 5, Insightful
    The physician takes an oath "to do no harm". I'm considering putting together a Linux distribution with everything compiled statically.

    First, what are the advantages of DLLs?

    • Less Memory Footprint
    • Less Disk Footprint
    • Global Security Fixes
    • Use of third party binaries
    • Plug ins
    Less Memory Footprint

    In Unix, when you have two instances of an application running, say, vi, the executable code between the two is automatically shared. The shared library gains you nothing. To gain memory footprint, you need to use the same shared library from two applications at the same time. For example, libc might be used by vi and cc.

    However, if you compile statically, you bind in only the routines that are needed. For shared libraries, you need to have all routines available, since you don't know which of them are used. Now, your virtual memory system may notice that a shared libary page isn't used, and page it out. Yes, this requires additional run time execution time. The upshot is that you save memory only when you have enough different programs use the same shared library to overcome the overhead. I claim that this happens with libc, libX11, and not a whole lot else.

    Less Disk Footprint

    If you have 50 programs that use the same shared library, you can save some disk space becasue that libary code does not need to be duplicated that many times. However, shared libraries need to have the symbol information requried to perform the dynamic binding. The savings isn't that much.

    In the old days, when an entire Unix distribution fit on a 150 MB tape, the libc shared library savings amounted to about 30%. You could get more reduction in size by using compression.

    In fact, programs could be compressed on disk. The loader could decompress the image as it reads it into RAM. For slow disks, this may be faster than loading the uncompressed version into RAM. The down side here is that you then may not be able to use the original file on disk for virtual memory paging.

    In any case, it's getting hard to get a disk drive under 20 GB. 30% overhead reduction for the most common shared library doesn't amount to much.

    Global Security Fixes

    So, your libzlib.so.5 has a bug. You whip up a quick fix, create a new libzlib.so.5, and drop it into your system. You've just fixed all of your libzlib dependent programs, right? In fact, you fixed programs you didn't even know used libzlib. You may also have broken programs that you didn't know use libzlib. And, short of testing every program on your system, you don't know. The more complex the patch, the more likely you are to have broken many things.

    Quick. What is a utility which will tell you all the shared libraries that an application uses?

    Use of third party binaries

    Third party binaries can just as easily be distributed in source form or in a library that is statically bindable. Static binding is preferable, since you are unlikely to use a large fraction of a kitchen sink shared library - where the authors have no idea how the programmers will use it. Source is preferable, since the documentation rarely specifies enough semantic detail to allow proper use.

    Plug ins

    OK. Your application is Apache, and you want some real flexibility. If Apache is compiled so that modules can be loaded at run time, then the administrator can add the new module and turn on it's use in the configuration. This doesn't save any RAM or disk, but it may allow the admin to change a line of config, restart the web server, and start using some new feature.

    For Apache, the admin can also recompile with the new module compiled statically. I've done it both ways. My measurements show a small run time advantage to static compilation.

    Granted, if you can't recompile IIS, then DLLs will give you the same flexibility in exchange for a small performance penalty.

    The Dark Side of Shared Libraries

    If you compile your application statically, then upgrade your OS, you can copy the old application to the new OS, and it just runs.

    If your app has shared libraries, you have to track them down on your old OS, and copy them to your new OS. If you make a mistake, and copy your old libc.so over your new one, you run the risk of trashing every program on your new system. Brilliant.

    Take netscape as an example. It comes installed in it's own /usr/local/lib directory tree. In /usr/local/bin, netscape is a script which sets up the shared library search path to include the libraries that netscape needs, then runs the binary. This introduces script overhead and shell dependencies on a complicated package. And, when you upgrade your OS, you still need to find the old libc.so and copy it forward.

    RPMs

    Many seem to think that RPMs solve all these problems. However, many packages have bugs in their dependencies, etc. Many RPMs use different versions of the same shared libraries. I find that I have to override the dependencies to get stuff to install. Often, the requried package IS installed. Not just once in awhile. Much of the time. The difference between theory and practice is that, in theory, they are the same.

    Conclusions

    Shared libaries seldom save RAM or disk space. The problem with using them to fix bugs globally is that you don't know what you fixed, or even if you broke some things. Third party binaries should invariably be statically linked. In an open source environment, plug ins are not strictly needed. Shared libaries make OS upgrades more painful.

    So, what I'd like is a Linux distribution with no shared libaries. The compiler, gcc, would be configured to compile statically by default. Then, after some years of running the system in production, and after adding hundreds of applications to it, I'd be able to upgrade to a new distribution without having to recompile or do the shared library search.

    --
    -- Stephen.
    1. Re:Static is the way to go by kcurrie · · Score: 3, Informative

      Quick. What is a utility which will tell you all the shared libraries that an application uses?


      ldd?
      :~> ldd /bin/ls
      librt.so.1 => /lib/librt.so.1 (0x4001f000)
      libc.so.6 => /lib/libc.so.6 (0x40031000)
      libpthread.so.0 => /lib/libpthread.so.0 (0x40141000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
      --
      -- I speak only for myself.
    2. Re:Static is the way to go by bratmobile · · Score: 1

      > Quick. What is a utility which will tell
      > you all the shared libraries that an
      > application uses?

      On NT, "dumpbin /exports foo.dll". Pay attention before you say something stupid. Although I do agree with some of your other points.

  124. He He He by Anonymous Coward · · Score: 0
    "runtime configuration directive", eh? WRT windows, that sounds pretty funny. Does that involve holding down the middle mouse button when you click on the exe's icon? Or, will this unique library thingy also involve having application preferences stored in some kind of plain text file that the user can edit? Sounds like a dream...
    # My windows config ##
    # $Id$ ##

    SetWinDllMode="Stable"
    SetAssistant="Clipp y"
    SetDo_You_Want_to_Write_A_Letter="No"
  125. In theory; you're right by CaptainZapp · · Score: 2, Insightful
    When 1Gb of memory becomes standard, then maybe.

    Unfortunately, even when 1GB is standard, the problem is that people will be running Windows KAE-T (Kick Ass Experience - Trusted) which requires about 927MB of memory without themes.

    --
    ich bin der musikant

    mit taschenrechner in der hand

    kraftwerk

    1. Re:In theory; you're right by Anonymous Coward · · Score: 0

      You realize windows, like linux, uses a lot of ram for disk cache, and can dump the cache as soon as an app needs memory?

    2. Re:In theory; you're right by soulhuntre · · Score: 1

      You realize windows, like linux, uses a lot of ram for disk cache, and can dump the cache as soon as an app needs memory?

      Now you've done it. You've brought facts into this. Don't you know anti-MS fud is allt hat will be tolerated?

      --
      --> Fight tyranny and repression.... read /. at -1!
  126. This will increase DLL Rot and Clutter! by zachjb · · Score: 1

    Great. All we need are more DLLs on the hard drive and increase the chances of DLL rot.

    DLL rot, for those who may not know what it is, is when Windows, for some reason or another, let's a file rot away on the hard disk causing programs that use that DLL to stop working properly all of the time. Most of the time this can be fixed by copying the affected DLL from the installation and overwriting the current one. I don't see why they don't just enforce reverse compatibility for DLLs or allow a technology like symbolic linking in Linux. That would cure all of the problems.

    --

    --If only there was a license required to use a computer.
  127. THIS IS BAD by NineNine · · Score: 1

    .DLL's are what makes the Windows platform so easy to code for. What's happening with ".dll hell" is bad installers made by 3rd party apps that fuck things up. In Installshield, it's a single radiobox for "Automatically overwrite files without asking" vs. "Only overwrite older versions of files". The .dll is what makes apps so easy to write in Windows. Need access to the FS? It's there. Need to use IE? It's there. Need to access kernel functions? It's there. It's all there in .dll's already. MS should NOT change their system because of some shitty thrid party vendors. What they should do is have "approved" third party programs, which are ones that DO install correctly.

    1. Re:THIS IS BAD by captfi · · Score: 1

      Agreed. It will just put us all in GUID and DLL hell.

      --
      "Never trust a computer you can't throw." -- The Mac
  128. GPL permits it by yerricde · · Score: 1

    GPL itself forbids linking against closed libs

    Section 3 of the GNU General Public License permits linking against proprietary libraries that were bundled with your compiler:

    However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

    I'm not a lawyer nor a judge, but I'd think "that component itself" refers to a whole compiler (a "major component[]"), not to a library (which is a component of a component and thus probably not "major"). See also what the GPL FAQ has to say on this issue.

    --
    Will I retire or break 10K?
  129. URPMI by Idou · · Score: 1, Informative

    I said once, and I'll say it again . . . there is NO need to go through this. Linux has adapter; you haven't. Observe:

    urpmi gcc

    Okay, I did have to SPELL gcc correctly, but other than that it was pretty painless.

    Not looking forward to making this same post next week . . . but, everything at slashdot seems to be repeated.

    --
    Sdelat' Ameriku velikoy Snova!
  130. It's a tradeoff. by dmaxwell · · Score: 2, Insightful

    Sure if this capability were overused it would be a mess. On the other hand, judicious use of it would solve a lot of problems. Normally I'm not a fan of MS but if they do it right (big if I know) it's a GOOD idea.

    Maybe some policy would help a bit. I'm thinking that things like services, especially public net facing ones be forced to use the latest DLL whether it breaks anything or not. If it's compatible, the service stays up. If it's not the service dies and doesn't make a public nuisance of itself. Reporting tools would help too. If it were easy to get a list of which apps were using which DLL, it would be possible to intelligently manage the situation. For that matter, make apps use the newest by default and then fall back to the oldest only if that doesn't work and it isn't a public facing service.

    Yes, this can cause problems but if they include the right tools and sane policy they're managable. This isn't intriniscally new VMS did something like this. Unix admins have been doing manually for years. MS just wants to automate it.

  131. Re:In other news by tuffy · · Score: 1
    E.g. we had made an installation, but left out the development tools. When you try to install gcc, it says which packages are missing, but not where you can find them. You have to dig them up yourself from the CD-ROM's, and sometimes you have to look on all of them.

    When dealing with packages installed on the Red Hat CDs, often it works just as well to use the "redhat-config-packages" tool which will automatically figure out both dependancy problems and will tell you which of the Red Hat CDs to insert to get a package installed.

    It's not a perfect solution, particularly for 3rd party packages distributed online. But if someone builds an RPM will a million obscure requirements, I'll either try compiling from source or ignoring the software entirely.

    --

    Ita erat quando hic adveni.

  132. Like Unix but with more Cruft (TM) by binary_life · · Score: 3, Flamebait

    Unix has had library versioning from the very beginning. Shared library filenames specify what version of the shared library the file contains, and when programs load they can request a specific version thru the file name.

    And here comes M$ taking the same idea, and adding a point of failure in the form of some binary index of dlls. Jeezz this is just another thing I'm gonna have to fix when my windows friends start having trouble with thier computer. Really unnecessary. Couldn't they have just outright copied the Unix method? At least then they would have done it right.

    1. Re:Like Unix but with more Cruft (TM) by gunix · · Score: 0

      Well, Microsoft seems to adopt more and more of the Unix functionality. They're about to give the users a powerfull shell as well.

      I guess the point and click wizard is not really that good.

      So, if Microsoft tried to do something different with their OS, why are they looking at Unix so much?
      Mac OS X? Nahh.. I will let you draw the conclusion...

      --
      Evolution of Language Through The Ages: 6000 BC : ungh, grrf, booga 2000 AD : grep, awk, sed
    2. Re:Like Unix but with more Cruft (TM) by mysticgoat · · Score: 1

      Couldn't they have just outright copied the Unix method? At least then they would have done it right.

      <tongueincheek>That might have been too expensive even for Microsoft, since SCO would surely file a multibillion dollar law suit since it would be patently obvious the MS engineers stole SCO's intellectual property (especially if MS had actually gotten it right-- that would be clear proof of IP theft).</tongueincheek>

      Query of the unix gurus: how does the library versioning handle an upgraded "DLL" (don't know the unix term) that you want older apps to use? Such as perhaps a new arithmetic library that takes advantage of new FP hardware?

  133. A simpler solution by mwood · · Score: 0, Flamebait

    Wouldn't it be a lot easier for Microsoft to teach their people to design things before coding them, so that they don't wind up releasing incompatible updates all the time? IBM came up with this kewl new thing called backward-compatibility -- maybe Microsoft should ask them about it?

  134. The Amiga didn't ever have this problem by jkujawa · · Score: 1

    Dynamic libraries had the version number in the filename, and the OS was smart enough to be able to load a slightly newer but still API-compatible (minor version) of the library.

    Come to think of it, Unix doesn't have this problem, either.

    1. Re:The Amiga didn't ever have this problem by patbob · · Score: 1
      Actually, the version number was not in the file name but was burried inside the DLL itself. When you opened a DLL, you told it what version you wanted it to act like. Newer versions of a library could tell you you can't have that version, tell you yes and ignore the version info, or tell you yes and use it to alter the behavior to retain the old buggy behavior (which was clearly the way they desired things to be done).

      You could also wildcard which version you were asking for so you'd always get the behavior of the latest-greatest version available. This was probably the achillies heel of the system -- it was possible to skip the version system and create versionitis problems. Worse, the code examples in the books did that, so most programmers probably ended up writing their code that way anyway.

      --
      Welcome to the net of 1000 lies. Upgrades are scheduled soon that should bring us to the 10,000 lies mark.
  135. All Programs Should be Self-Contained by GamezCore.com · · Score: 2, Insightful

    I have raised this point in the past, but it once again applies:

    With storage space being so inexpensive and abundant, all programs should be fully independent, self-contained entities. The idea of linking programs against a set of standard set of DLL's is a great way to make smaller programs, but if you haven't noticed small and efficient is not the most important aspect of any program these days.

    DLL's and Linux's library dependencies can be completely solved in this way, and management would become much simpler.

    And, for those who believe that this would mean huge programs... take a look at the Phoenix web browser, it installs completely in it's own folder and is still very small and efficient.

    --

    www.GamezCore.com For Hardcore PS2 Gamerz : By Hardcore PS2 Gamerz
    1. Re:All Programs Should be Self-Contained by istartedi · · Score: 3, Interesting

      Well, I was going to say this earlier, but the network hung. All I can do now is expound on this...

      The largest EXE on my box is a little over 3 megs (it's AbiWord, by the way). The largest DLL on my box is a little over 5 megs (it's the bulk of the image loader/editor that came with a cheopo digicam I bought). Let's be really, really conservative and say that AbiWord decides to load that DLL. Yeah, I know it would never happen but this is just a worst-case scenario. That's 8 megs resident in memory. Now, how many windows do I typicly have open? 5 or 6, and many times it's the same app like IE or MSVC. Even under a worst-case scenario like 8 separate huge apps open, that's 64megs. Now of course this worst-case scenario is an extreme. I wager a more typical scenario with everything self-contained would result in less than 32 megs of code resident in memory. What's 32 megs cost? They don't even sell 32 meg modules most places. A lot of boxes are coming with half a gig, and if you want more you just grab for some loose change and snap it in.

      Of course, apps aren't the only thing on the box. The System Information in Windows shows a lot of DLLs loaded by Windows, many of them legacy support. On a box with 128 megs of ram, I sometimes break over 50% resource utilization, but there's no noticeable impact on performance so who cares?

      Now, weigh the cost of RAM against all the hours spent putzing with different dynamic library versions.

      Plainly, dynamic libraries are a holdover from the days when memory costs and address-space limits were something to think about.

      Now, I'm not saying that there aren't circumstances where dynamics are a good idea. For example, it would have been nice if Microsoft had installed MFC DLLs with earlier versions of Windows. I shudder to think of all the bandwidth wasted downloading those.

      The "solution" of maintaining different versions of DLLs and giving them unique IDs is almost an admission of defeat that dynamics don't work. It's probably better to think of it as a way to ween people of dynamics, and of providing those who still want to use them with the option.

      --
      For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
    2. Re:All Programs Should be Self-Contained by Junta · · Score: 4, Insightful

      You underestimate the effects of that. Sure, a few promiment programs can do that without issue. However, if every single binary on your system did this, the effect would be horrible.

      Quick example. ls is 68k by itseIf you add the size of all libraries it links to, it becomes about 1.7 MB on a typical system. I would say ls is pretty consevative in terms of linking, so I'll pretend everything in /bin would be that size. 110 binaries in /bin. Currently du shows about 4.6M in there. This would grow to 187 MB, and that is using the conservative ls as a comparison, some would be significantly larger. In files that would be in /usr/bin and /usr/X11R6/bin, things get worse as they have more complex linking requirements, libraries that are a lot larger and do a lot more. If every miniscule GUI required to be the size of itself plus system plus whatever toolkit they chose to use, drive space would suck.

      Not only is drive space not a moot point, but this has implications in terms of consistency and interoporability. If applications all used internal versions of GUI libraries, there would be absolutely nothing enforcing any sort of consistency and complex inter-process communication becomes really difficult due to version mismatches.

      --
      XML is like violence. If it doesn't solve the problem, use more.
    3. Re:All Programs Should be Self-Contained by Tailhook · · Score: 1

      Plainly, dynamic libraries are a holdover from the days when memory costs and address-space limits were something to think about.

      Sorry, this is badly naive. The value of shared executable memory (a.k.a dynamic libraries) is still quite high.

      As we know, our CPUs can usually outrun the ability of our RAM to keep the pipeline full with new code and data to process. An extremely effective way to cope with this is by providing the CPU with various forms of cache. The cache is of limited size, however, because it is very costly and power hungry.

      Sharing executable RAM allows the bulk of CPU activity to remain within the limits of the cache. Eliminating shared executable RAM breaks this. If N processes are all busy waiting for mouse events or writing a network socket they will all spend the majority of their time in the same small bit of machine code nicely packed into the CPU cache. By not having code present in RAM redundantly due to lack of sharing, we avoid cache blowouts.

      When a CPU suffers a cache miss the cost in cycles is enormous. As time passes we see that CPU performance is increasing faster than RAM performance. As the trend continues it will only become more important that software respect the CPU cache.

      If you want know what the performance of a system would be like with everything compiled static and all dynamic loading (and thus, sharing) removed, just reboot into your BIOS configuration and turn off your cache. I promise, you WILL notice.

      Shared executables are important now for the same reason they have always been important; the fast part of the computer is a costly, limited resource. You can see the importance of cache in modern computing with a little effort at PriceWatch. The cost of a CPU is directly proportional to it's cache size.

      People haven't been putting up with the difficulties of shared executables for the past 3-4 decades because they're morons.

      --
      Maw! Fire up the karma burner!
    4. Re:All Programs Should be Self-Contained by istartedi · · Score: 1

      For the deep, dark parts of Windows dynamics are good. I guess I should qualify what I said. Dynamics are good in the following situations: 1. You conrol/own all of them like Microsoft does for Windows (when a MS DLL needs updating, Microsoft knows that some other vendor isn't going to do it, so they don't have to worry about some other vendor breaking their apps... they get to break other vendor's apps). 2. You want to be able to patch binaries.

      Of course, I think you may need to qualify what you said. Obviously, whole DLLs aren't being cached. Instead, little bits of code are being cached. I'm not sure how fine the granularity is on the cache. If you have a 500k cache and most of your cycles are in 2k of the code, then it would be nice to be able to cache code in 2k blocks, and my original statement stands since the cache would figure out that the 5 apps running spend most of their time in 2k of code. The cache would have to hold 10k of code, but that's still a small portion of a 500k cache.

      OTOH, if caches are only capable of pulling in large blocks, they could only pull in one dynamic at a time anyway. The others would miss every time the task switched.

      To be fair, the utility of the cache is reduced somewhat by not having sharing, but not 100%. If I turn off my cache, I won't simulate static linking--I'll just simulate... umm... not having a cache.

      --
      For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
    5. Re:All Programs Should be Self-Contained by Tailhook · · Score: 1

      I'm not sure how fine the granularity is on the cache.

      The granularity of a cache is called a "cache line". It varies by CPU model.

      The cache would have to hold 10k of code, but that's still a small portion of a 500k cache.

      The concept you're circling around is called the "working set". The size of this dictates the amount of cache CPU manufacturers create. Your figures are quite low. There are individual function calls in the Linux kernel that account for 2k of memory, including stack. Windows is no different. Some of these are called hundreds of thousands of times a second. VM and scheduler functions come to mind. If these fall out of the cache performance falls a order of magnitude.

      Further, cache lines are fixed in size. Your example of 2k bits of code loaded redundantly into 5 separate lines would actually consume 40KB of a cache that has 8K lines. See? Almost 10% of your cache gone for one 2k function. Double plus ungood.

      Typical "desktop" Intel chips are coming with 512KB of L1 cache. Less in low-power "portable" variants (cache is very power hungry.) More in "pro" models. It is quite easy to create a working set larger than 512K. 5-6 typical GUI programs is all you need. Remember that this includes data in addition to code. Data includes things like the stack. This is why stopping unneeded background processes makes a noticeable difference, even though they aren't large enough to cause swap.

      OTOH, if caches are only capable of pulling in large blocks, they could only pull in one dynamic at a time anyway. The others would miss every time the task switched.

      The units a cache maintains do no correspond to units of executable code such as DLLs. Most of the code in any given shared library gets into the cache for only a few microseconds.

      If I turn off my cache, I won't simulate static linking--I'll just simulate... umm... not having a cache.

      If you compile an entire system static and then try to multitask more than a very small number of processes you will effectively have no cache. A bone stock W2K box starts >20 background jobs on boot. Never mind what you want to run. You think all that stuff can be redundantly loaded and still have the working set fit in 512K of cache?? Think again.

      Workstation class CPUs typically have 1-4MB of L1 cache. This is why a 500MHz SPARC is competitive with Intel CPUs running two more times faster in cycles. More recent RISC CPUs (PA-RISC comes to mind) are appearing with 8-16MB of L1. Cache is everything.

      On one hand, RISC CPUs with smaller, simpler instructions use cache less efficiently than CISC designs due to needing a larger number instructions to get the same result. On the other, Intel's CISC design has a very small register file, requiring more stack, and therefore more cache. Cache is king.

      Managing cpu cache consumes enormous efforts of system programmers. Go spend some time on the LKML reading about what system programmers think about. About half the time it's cache, cache, cache. All system programmers do the same.

      --
      Maw! Fire up the karma burner!
  136. Don't break DLL's/components then by Fastolfe · · Score: 2, Insightful

    Even though this article isn't really about DLL's, why do we have NEWER versions of DLL's breaking applications anyway? The whole point of making a new minor release of a piece of software (DLL, component, whatever), is to fix things, NEVER to change the API or change the behavior of existing functions. It's these changes that break existing applications.

    New major releases should be considered a completely different DLL/component, since it conceivably has a different API or changes its behavior in some incompatible way.

    It seems to me that DLL's/components need to be treated as self-contained applications. They need to go through a rigorous testing and QA cycle (except that they don't generally expose anything directly to the users, but to other applications), and need to be installed as if they were their own application. Windows applications that have dependencies on DLL's can, during installation, tell the OS which DLL's they need and what the minimum version should be.

    Bundle these with the application if you need to, but to suggest that DLL's/components need to be kept at the same *minor* version to avoid breaking applications indicates a bad problem with how you build and test DLL's. I'd rather fix this problem than introduce this layer of version matching.

    1. Re:Don't break DLL's/components then by Junta · · Score: 1

      The issue here is that may be the case for MS released .dlls, but they ultimately have no control over what third party applications install, so a vendor could release a dll that breaks ABI compatibility, and it wouldn't be MSs fault.

      I think under other systems, it is done right. The library is installed with full version number in the name, with a symlink with the generic name pointing to the most recently installed. At compile time, programs use the link to determine what to link against, but at runtime link with the verbosely named library instead. This way, it only maintains true version differences separately, as opposed to minor, non-ABI changing differences.

      --
      XML is like violence. If it doesn't solve the problem, use more.
  137. Old Article, sorta. by Anonymous Coward · · Score: 0

    This is what .net is all about, this has been IN PRACTICE since .net was released (about a year ago). All this article does is describe what is already in place as something new for Windows Server 2003.

  138. Cool... by Anonymous Coward · · Score: 0

    One of the best ideas I've heard from MS in a long time.

  139. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  140. Hmmm, this sounds like fun... by Anonymous Coward · · Score: 5, Insightful

    I code in assembly and a few other languages. I can understand that it can be a very good thing to reuse one piece of code in several different places. I understand also that it can save space to reuse. No news here...

    As for the idea of "Strong Binding", I wonder what Billy G. expects to acomplish by adding yet more poorly designed, poorly documented LIBs to the programming mess that Windows has evolved into. On top of that, I wonder why I would need to save EVERY SINGLE VERSION of a DLL that makes it to release...

    Version tracking will become a nightmare.

    Consider:
    +User installs program COOL_PROGRAM.EXE
    -COOL_PROGRAM uses MS_COOLNESS.DLL
    +User gets an update to MS_COOLNESS.DLL:
    MS_COOLNESS_V2.DLL
    -The fix in V2 repairs a buffer overflow
    in a function that COOL_PROGRAM used from
    COOLNESS.DLL.
    Question : Does the installer for V2 know that COOL_PROGRAM is dependent on it? If this is the case, Billy G. is gonna have his hands full trying to keep track of what goes where with third party devs.

    If not, perhaps COOL_PROGRAM will go by default to the newest version of COOLNESS.DLL. Ok, now Billy will likely contend with tracking and modifying functions that have previously been used in highly specialized ways for security/system critical functionality that Windows does not provide either by accident or by intention. So NOW third party devs developing well organized and functional code/programs are forced to keep up with the madness of Windows development to save space. Hmmm... Guess it got the better of the buffer overflow this time. Or maybe they introduced a new bug into the system {par for course with MS}...

    Better yet, how about people developing security/system critical environments use their own code to avoid this whole mess? Ok, now you dont need DLLs do you? How about 3-5 times as many? Wait for the next Windows release? So the effort YOU made during XP to keep up with DLLs and other updates is pointless right? Or XP+1? The style of MS defines itself....

    Security/system critical programs?...
    Thats only one side?...
    Ok. Try this:

    Graphics, network comunication, encryption, file editing, database editing? Or maybe drivers, file converters, scripts, inter-app comunication, diagnostics?

    The list goes on. The problems generated by and complications arising from this framework are not worth the hassle.

    Instead of building a system where things get more complicated I would recomend a redesign of the system itself. Current and past states of instability/insecurity are more than I care to witness again. Billy has enough money to sit around daydreaming for the rest of his days while still paying his programers for doing nothing but daydreaming themselves for the rest of theirs... Perhaps they could get up off their butts and design a system from the ground up that is easy to use, safe, fast, and reliable for users old and new... Logical?

    I love C programming. C++ and Java are lots of fun. But IF you want something done right the first time, assembly and careful thought is the only answer...

    S-()-u-|-s-!-|)-E

    1. Re:Hmmm, this sounds like fun... by PissedOffGuy · · Score: 1

      as always, please read the article and associated literature to get a background of the problems that this is intended to solve and how this architecture handles the complexities involved. your questions will be answered.

    2. Re:Hmmm, this sounds like fun... by sporty · · Score: 1

      It's funny. Sometimes a fix for one system will comepletely break another system. Now granted, it's not about flawed code, just flawed processes being "fixed".

      For instance, i can write a function f(int a) that only uses positive integers for say, finding square roots. Now what if i change the function, without modifying the prototype for dealing with imaginary numbers?

      No harm, right? But what if i expect f to break in a certian way? Sometimes the breaking of a piece can sometiems be considered fine, and working, if its expected.

      --

      -
      ping -f 255.255.255.255 # if only

    3. Re:Hmmm, this sounds like fun... by freek_daddy · · Score: 1

      I love C programming. C++ and Java are lots of fun. But IF you want something done right the first time, assembly and careful thought is the only answer...

      You gotta be fucking kidding me. In the commercial software world (read: the world we're talking about here), this statement is a blazing sign in 40-foot high letters that you don't know what you're talking about.

      So even if I hadn't read the rest of your "asked and answered in the article, interspersed with nonsense" questions, I'd know you weren't going to read the article and would instead post garbled over-generalizations mixed with random MS bitches.

      The sad part is that you fooled enough people to be a +5 Insightful rating. Maybe they're all halfway through their first assembly class too.

    4. Re:Hmmm, this sounds like fun... by Anonymous Coward · · Score: 0

      Im sorry if you were offended by my post. I hope I can clarify with this one.

      I read the article. I understand from the article that MS intends to add yet another layer of complexity to fix a problem. Yes, I like the idea of fixing problems. This still adds another layer of complexity. That was the problem I saw with the idea of strong binding.

      I should have posted the following with the first post in this thread:
      "This is just my opinion."

      Also, the statement about assembly was not intended to mean that the entire OS should be re-written in assembly [although Billy could afford to do so]. Only critical sections of code deserve that kind of attention.

      I just think that the system needs to be rethought and/or redesigned. I am not a guru, I do not claim to be. This is only my opinion.

      Again sorry if my post pissed any of you off.

  141. VMS file versioning by Theovon · · Score: 1

    Maybe they need something like VMS's file versioning. If done right, they could keep the directory clutter down, while maintaining multiple versions. To an extent, the multiple DLL's could appear as one file.

  142. sounds cool... by Enrico+Pulatzo · · Score: 2, Interesting

    but I haven't experienced "DLL-hell" on Windows since 95. Not that it doesn't happen, but is this a feature whose time is over before it arrives?

    Now, (rpm|dpkg)-hell, that's another story...

  143. Re:In other news by xchino · · Score: 1

    Mandrake has an excellent tool for handling rpm dependencies called urpmi (Universal RPM Insatller). I guess RedHat has their reasons for rpm being how it is, but remember, there's all sorts of package managers out there. That's why I like gentoo. emerge appname.. it doesnloads and compiles the source and all dependancies for you, optimized for you architecture.

    --
    Everyone is entitled to their own opinion. It's just that yours is stupid.
  144. Bad... by Junta · · Score: 1

    This solution is bad...

    One, the system has no way to tell a non-ABI breaking dll change from an ABI-breaking one, so it always duplicates and wastes space. This is really bad, clutter is worsened.

    Adding to that, how do security fixes work? Typically they replace the library with a new, ABI compatible fixed dll. Now the insecure one will be archived? I presume there will be some mechanism for actually replacing a dll at install time, but will that be available to third parties? Would MS get control over security updates?

    Unix has it right, keep a symlink with the generic name for compile-time *only*, and maintain the actual libraries for runtime with the version numbers as the filenames. This way, a library installer has an intelligent recourse as to specifying what kind of update it is, ABI compatible or not.

    --
    XML is like violence. If it doesn't solve the problem, use more.
  145. Just put them in with the software! by supabeast! · · Score: 3, Interesting

    Given the current cost of massive hard disks, why are programs still putting DLLs anywhere outside of ...\Program Files\Foo\dlls? I think most people would be happier losing some extra space per program due to DLL redundancy than to keep dealing with shared libraries!

    1. Re:Just put them in with the software! by IXI · · Score: 1

      What's the point in using dll's if you use them in a single program only? Linking statically would even save the overhead of the dynamic loader.
      This is not interesting, this is ridiculous -- typically Windoze.

      --
      He saw some dirty arabs and fired. Too bad it was just some friendly kurds, BBC reporters and his fellow cowboys.
  146. Let the Fud fly by RodeoBoy · · Score: 1

    This is just another flavour of side by side installation that MS has been promoting since Win 2000. In this case they are talking exclusively about .NET assemblies which side by side installations have always been a feature. With Win 2000 developers have had the option of protecting there applications from their application being broken by later installs of other application or server packs. While this can lead to some redundancy it is a trade off with your app not working. While dll hell will never totally go away the current state of MS development for Win 2000 is way ahead of what we had to deal with in NT 4 and 95.

    All systems have problems with how to implement them in a predicatable and sensible way. I have had many issues with updating libs on my Linux install to the point of making many apps unusable. Yes I know I suck as a Linux admin, but then again that is not what I do. I know my weaknesses unlike most of the 4+ posters to this MS bashfest.

    Nothing new here just a opportunity for people who know nothing about development or are just crappy MS developers given an opportunity to display their ignorance.

  147. Had to have a snide remark, didn't you. by peterpi · · Score: 1, Insightful
    "I would think this might add to DLL clutter however."

    ls /usr/lib

    Mcrt1.o X11 apache bcc bison.hairy bison.simple cgi-bin cracklib_dict.hwm cracklib_dict.pwd cracklib_dict.pwi crt1.o crti.o crtn.o cvs docheckgroups elm emacs entity-map games gcc-lib gconv gcrt1.o getopt gnupg groff innreport_inn.pm innshellvars innshellvars.pl innshellvars.tcl ispell kbd ksirc ldscripts libBrokenLocale.a libBrokenLocale.so libIDL-0.6.so.0 libIDL-0.6.so.0.4.4 libIIOP.so.0 libIIOP.so.0.4.0 libImlib.so.1 libImlib.so.1.9.7 libORBit.so.0 libORBit.so.0.4.0 libORBitCosNaming.so.0 libORBitCosNaming.so.0.4.0 libORBitutil.so.0 libORBitutil.so.0.4.0 libQwSpriteField.la libQwSpriteField.so libQwSpriteField.so.1 libQwSpriteField.so.1.5.0 libapm.a libart_lgpl.so.2 libart_lgpl.so.2.1.0 libaudiofile.so.0 libaudiofile.so.0.0.0 libbeep.a libbfd-2.9.5.0.22.so libbfd.a libbfd.la libbfd.so libbsd-compat.a libbsd.a libbz2.a libbz2.la libbz2.so libbz2.so.0 libbz2.so.0.0.0 libc.a libc.so libc_nonshared.a libc_stubs.a libcfont.a libcfont.la libcfont.so libcfont.so.0 libcfont.so.0.0.0 libconsole.a libconsole.la libconsole.so libconsole.so.0 libconsole.so.0.0.0 libcrack.so libcrack.so.2 libcrack.so.2.7 libcrypt.a libcrypt.so libctgeneric.a libctgeneric.la libctgeneric.so libctgeneric.so.0 libctgeneric.so.0.0.0 libctutils.a libctutils.la libctutils.so libctutils.so.0 libctutils.so.0.0.0 libcurses.so libdb.a libdb.so libdb1.a libdb1.so libdl.a libdl.so libecpg.a libecpg.so libecpg.so.3 libecpg.so.3.0.0 libefence.a liberror.txt libesd.so.0 libesd.so.0.2.17 libesddsp.so.0 libesddsp.so.0.2.17 libfbm.a libfbm.so libfbm.so.1 libfbm.so.1.0.0 libfish_applet.a libfish_applet.la libfish_applet.so libfish_applet.so.0 libfish_applet.so.0.0.0 libfl.a libform.a libform.so libform.so.4 libform.so.4.0 libg++.so.2.7.2 libg++.so.2.7.2.8 libg.a libgd.so libgd.so.1 libgd.so.1.2 libgdbm.a libgdbm.la libgdbm.so libgdbm.so.2 libgdbm.so.2.0.0 libgdk-1.2.so.0 libgdk-1.2.so.0.5.1 libgdk_imlib.so.1 libgdk_imlib.so.1.9.7 libgif.a libgif.so libgif.so.3 libgif.so.3.1.0 libgif.so.4 libgif.so.4.1.0 libgkb_applet.a libgkb_applet.la libgkb_applet.so libgkb_applet.so.0 libgkb_applet.so.0.0.0 libglib-1.2.so.0 libglib-1.2.so.0.0.6 libgmodule-1.2.so.0 libgmodule-1.2.so.0.0.6 libgmp.so.2 libgmp.so.2.0.2 libgnome.so.32 libgnome.so.32.3.8 libgnomesupport.so.0 libgnomesupport.so.0.0.0 libgnomeui.so.32 libgnomeui.so.32.10.3 libgnorba.so.27 libgnorba.so.27.1.8 libgnorbagtk.so.0 libgnorbagtk.so.0.0.0 libgpm.a libgpm.so libgpm.so.1 libgpm.so.1.17.3 libgrove.a libgrove.la libgrove.so libgrove.so.1 libgrove.so.1.0.3 libgthread-1.2.so.0 libgthread-1.2.so.0.0.6 libgtk-1.2.so.0 libgtk-1.2.so.0.5.1 libgtkxmhtml.so.1 libgtkxmhtml.so.1.0.1 libgtop.so.1 libgtop.so.1.0.5 libgtop_common.so.1 libgtop_common.so.1.0.5 libgtop_guile.so.1 libgtop_guile.so.1.0.5 libgtop_guile_names.so.1 libgtop_guile_names.so.1.0.5 libgtop_names.so.1 libgtop_names.so.1.0.5 libgtop_suid_common.so.1 libgtop_suid_common.so.1.0.5 libgtop_sysdeps.so.1 libgtop_sysdeps.so.1.0.5 libhistory.a libhistory.so libhistory.so.3 libhistory.so.3.0 libiberty.a libieee.a libimlib-bmp.so libimlib-gif.so libimlib-jpeg.so libimlib-png.so libimlib-ppm.so libimlib-ps.so libimlib-tiff.so libimlib-xpm.so libisapnp.a libjpeg.a libjpeg.la libjpeg.so libjpeg.so.62 libjpeg.so.62.0.0 libjs.la libjs.so libjs.so.0 libjs.so.0.2.0 libjscript.la libjscript.so libjscript.so.2 libjscript.so.2.0.0 libkab.la libkab.so libkab.so.2 libkab.so.2.0.0 libkdecore.la libkdecore.so libkdecore.so.2 libkdecore.so.2.0.0 libkdeui.la libkdeui.so libkdeui.so.2 libkdeui.so.2.0.0 libkdlgloader.a libkdlgloader.la libkdlgloader.so libkdlgloader.so.1 libkdlgloader.so.1.0.0 libkfile.la libkfile.so libkfile.so.2 libkfile.so.2.0.0 libkfm.la libkfm.so libkfm.so.2 libkfm.so.2.0.0 libkhtmlw.la libkhtmlw.so libkhtmlw.so.2 libkhtmlw.so.2.0.0 libkimgio.la libkimgio.so libkimgio.so.2 libkimgio.so.2.0.0 libkplunger.a libkspell.la libkspell.so libkspell.so.2 libkspell.so.2.0.0 libkudzu.a libl.a liblinuxconf.a libltdl.a libltdl.la libltdl.so libltdl.so.0 libltdl.so.0.1.2 libm.a libm.so libmcheck.a libmediatool.la libmediatool.so libmediatool.so.2 libmediatool.so.2.0.0 libmenu.a libmenu.so libmenu.so.4 libmenu.so.4.0 libmimelib.la libmimelib.so libmimelib.so.1 libmimelib.so.1.0.0 libmodules.a libncp.so.2.3 libncp.so.2.3.0 libncurses.a libncurses.so libncurses.so.4 libncurses.so.4.0 libndbm.a libndbm.so libnewt.a libnewt.so libnewt.so.0.50 libnewt.so.0.50.8 libnsl.a libnsl.so libnss1_compat.so libnss1_db.so libnss1_dns.so libnss1_files.so libnss1_nis.so libnss_compat.so libnss_db.so libnss_dns.so libnss_files.so libnss_hesiod.so libnss_nis.so libnss_nisplus.so libopcodes-2.9.5.0.22.so libopcodes.a libopcodes.la libopcodes.so libpanel.a libpanel.so libpanel.so.4 libpanel.so.4.0 libpanel_applet.so.0 libpanel_applet.so.0.0.0 libpbm.a libpbm.so libpbm.so.1 libpbm.so.1.0.0 libpci.a libpgm.a libpgm.so libpgm.so.1 libpgm.so.1.0.0 libpgtcl.a libpng.a libpng.so libpng.so.2 libpng.so.2.1.0.5 libpnm.a libpnm.so libpnm.so.1 libpnm.so.1.0.0 libpopt.a libpopt.la libpopt.so libpopt.so.0 libpopt.so.0.0.0 libposix.a libppm.a libppm.so libppm.so.1 libppm.so.1.0.0 libpq++.a libpq++.so libpq++.so.3 libpq++.so.3.0 libpq.a libpq.so libpq.so.2 libpq.so.2.0 libpsqlodbc.a libpthread.a libpthread.so libpuke.a libpuke.la libpuke.so libpuke.so.0 libpuke.so.0.0.1 libreadline.a libreadline.so libreadline.so.3 libreadline.so.3.0 libresolv.a libresolv.so librle.a librle.so librle.so.1 librle.so.1.0.0 librpcsvc.a librpm.a librpm.la librpm.so librpm.so.0 librpm.so.0.0.0 librpmbuild.a librpmbuild.la librpmbuild.so librpmbuild.so.0 librpmbuild.so.0.0.0 librt.a librt.so libslang.a libslang.so libslang.so.1 libslang.so.1.2.2 libsnmp.so.0 libsnmp.so.0.4.1.1 libsp.a libsp.la libsp.so libsp.so.1 libsp.so.1.0.3 libspgrove.a libspgrove.la libspgrove.so libspgrove.so.1 libspgrove.so.1.0.3 libstdc++-2-libc6.1-1-2.9.0.a libstdc++-2-libc6.1-1-2.9.0.so libstdc++-libc6.1-1.a.2 libstdc++-libc6.1-1.so.2 libstdc++.so.2.7.2 libstdc++.so.2.7.2.8 libstdc++.so.2.8 libstdc++.so.2.8.0 libstdc++.so.2.9 libstdc++.so.2.9.dummy libstyle.a libstyle.la libstyle.so libstyle.so.1 libstyle.so.1.0.3 libtermcap.a libtermcap.so libthread_db.so libtiff.a libtiff.so libtiff.so.3 libtiff.so.3.5 libttf.la libttf.so.2 libttf.so.2.2.0 libucdagent.so.0 libucdagent.so.0.4.1.1 libucdmibs.so.0 libucdmibs.so.0.4.1.1 libungif.a libungif.la libungif.so libungif.so.3 libungif.so.3.1.0 libungif.so.4 libungif.so.4.1.0 libutempter.so libutempter.so.0 libutempter.so.0.5.2 libutil.a libutil.so libuulib.la libuulib.so libuulib.so.5 libuulib.so.5.0.13 libvga.a libvga.so libvga.so.1 libvga.so.1.4.1 libvgagl.a libvgagl.so libvgagl.so.1 libvgagl.so.1.4.1 libwrap.a libz.a libz.so libz.so.1 libz.so.1.1.3 libzvt.so.2 libzvt.so.2.2.6 linuxconf linuxconf-devel mail.help mail.tildehelp metamail mh mime.types more.help mpage netscape nmh nslookup.help perl5 pgsql pmake python1.5 qt-1.45 rhs rpm sendmail sendmail.hf sgml sgml-tools slrn trn uucp yp

    1. Re:Had to have a snide remark, didn't you. by IXI · · Score: 4, Informative

      This is not clutter, apart from the fact that your list includes static links and directories, about two thirds of the dll's you listed are symbolic links to versioned filenames to avoid clutter.

      --
      He saw some dirty arabs and fired. Too bad it was just some friendly kurds, BBC reporters and his fellow cowboys.
    2. Re:Had to have a snide remark, didn't you. by IXI · · Score: 1

      Ooops, static libs not links, of course.

      --
      He saw some dirty arabs and fired. Too bad it was just some friendly kurds, BBC reporters and his fellow cowboys.
    3. Re:Had to have a snide remark, didn't you. by Anonymous Coward · · Score: 0

      Name any one of these libraries and I'll tell you what it does. Name a random DLL in system32 and no one will be able to tell what it does, once did or is supposed to do.

  148. Use same solution as for GPF by fjaffe · · Score: 1

    I figured they would just rename DLL's, like they did with the GPF problem

  149. More granular by essdodson · · Score: 1

    I think this would work better if it were more granular than simply versioning the DLL. Perhaps when DLLs are initially loaded on a system it could diff the individual functions to find differences, and then provide these individual functions to programs which use different versions from those already installed.

    --
    scott
  150. This is great by nicotinix · · Score: 1

    Now it will be even more convoluted. Windows is becoming more and more like out tax system (with holes) while Linux makes progress on "dependency hell" with systems like Gentoo ports and Debian's apt-get.

  151. Indiscipline begets ugliness continued by Doctor+Hu · · Score: 1
    This feels like an ugly hack that's being embarked on because fixing the underlying problem is reckoned to be too difficult. To blockquote from the referenced ZDnet story:
    Problems typically occur when an application is installed that uses an updated version of a Dynamic Link Library--or DLL--that is already used by another application. If the original application cannot work with the updated DLL ...
    And there you have it: a system which has been implemented with such a lack of discipline that the concept of upward compatibility in API specifications is either intrinsically impossible or de facto unenforcible because breaking it carries few penalties to the culprits.

    To be fair, I can see that some such mechanism as this could be of use as part of a long-term program to clean up the API hell. However, I'm not convinced that the same result could not be better achieved by consciously deciding to build up a parallel set of APIs (Trusted-Win32, perhaps?) where professional design and implementation practices are enforced. It's not as though it's difficult to understand: disciplined design and implementation of APIs with upward compatibility taken for granted have been standard practice for decades in non-Windows enterprise environments (mainframe, VMS, more recently Unix, etc.)

  152. Cut`n`Paste by Luguber123 · · Score: 2, Funny

    Finally Microsoft have started to figure out how to use cut`n`paste, so they could copy the method used in everybodys favorite os. The /lib/ dir have as far as shared objects go always used an unique id for its libraries, this is called a version number. and usually build up the name of the library, like my-incrediblelib.so.9.2.1

  153. here by rabtech · · Score: 3, Informative

    Let me explain this because many people seem not to understand.

    When a program installs a "shared" DLL, the assembly manager looks at the DLL version. One of three things will happen:

    1. The DLL does not exist in the assembly cache - it is added.

    2. The DLL exists, but all other instances of it are a different major/minor revision. (X.Y.0.0) In this case, the DLL is added to the assembly cache as a separate version.

    3. The DLL exists in the cache, and the major/minor versions are the same. In this case, if the installing DLL has a newer revision (0.0.X.Y), then it will overwrite the old DLL. Otherwise, it is thrown away.

    When a program executes, it's manifest specifys what major/minor version of the DLL it needs, and the assembly cache will fetch it. HOWEVER, bug fixes, etc are supposed to be changes to the revision numbers only, so if a bug fixed version of the DLL is installed, the app will use that version.

    The assembly cache also keeps track of what set of DLLs go together. If version 1.2.7.X of FOO.DLL needs to also be run with 1.2.7.X of BAR.DLL, then the assembly cache can make sure a program never uses a mismatch, which has been a
    MAJOR cause of difficult to track instability over the years.

    The "new" .NET way of doing things is different though, and Microsoft won't logo or certify apps unless they follow these practices:

    1. If you have a DLL only used by your application, install it in your application's folder.

    2. If you have a suite or many apps that work together and use the same DLL, install it into program files\common\yourname.

    3. ONLY install DLLs into the System folder if they are very very widely used, or are actual system objects or libraries. (I.E. your app needs a newer version of the microsoft common dialog runtime. In that case, you ship the MSM which has the latest version of common dialog and related libs that are all known to work together, for EACH version of windows. The Windows Installer knows how to read the MSM and pick the appropriate set of files for the current OS/service pack level you are on. That way, developers running Windows 2000 don't b0rk a Win9x user by shipping the w2k libraries.)

    3a. An even easier way of handling things is to write your app for a specific service pack level on each OS (or possibly hotfix if a bug was fixed that is affecting your app.) In this way, you just tell your users "you need service pack X on OS Y, or service pack Z on OS A" to run the app.

    --
    Natural != (nontoxic || beneficial)
  154. AIX by Anonymous Coward · · Score: 0

    This sounds very errily similar to the library database within AIX... it does version tracking, etc... god I hope MS isn't going to try to patent this.. they'll loose....

  155. How do you distribute a fix to a dll? by duck_prime · · Score: 1
    It [use of DLL] also makes upgrades and bugfixes easier (think openssl, for example).
    But ... but ... with this new scheme, where each app stays with the DLL version it shipped with, the new fixed DLL you ship won't be accessed. The apps will be locked into the old version.

    Or am I missing something?
    1. Re:How do you distribute a fix to a dll? by Anonymous Coward · · Score: 0

      One possible way would be to provide fixes for each different version of the DLL. Then we simply switch from DLL Hell to sustaining hell.

  156. OS Bloat. by buttahead · · Score: 2, Interesting

    Great... now when you install and uninstall a package, the DLLs are going to hang around (on purpose). I can see it now with a 13 year old that likes to install lots of little programs. Hopefully there is enough space on my hard drive.

  157. Two questions by Anonymous Coward · · Score: 0

    Two questions. First, why do Slashdot users insist on writing novel length responses, full of technical detail, about subjects that are purely speculative? There are scores of posts explaining in detail why this will not work but yet the original article doesn't even go into how the system itself works. How can you debunk something from a technical standpoint without knowing, even vaguely, how it works? The second question; why do I read them and add fuel to the fire by responding?

  158. MS to end DLL confusion by rspress · · Score: 2, Funny

    Well, Microsoft does one thing better than any other company. It can take a bad idea and make it even worse than it was before.

  159. Re:In other news by IamTheRealMike · · Score: 1
    How does Linux deal with the issue of linked libraries? I'm assuming it has something similar.

    It has a lot of things. The first is, as another poster pointed out, what's called soname or libtool versioning. That is, you append the major version number, which represents a specific ABI (not to be confused with API) to the end of the filename, and then apps link against that name , for instance, libfoo.so.2

    The actual file on disk is more likely called libfoo.so.2.0.22 - as long as they have the same major version number, they are compatable (in theory). GTK for instance preserves ABI compatability between all 2.x versions, so if you have an app written for GTK 2.0, you can install GTK 2.4 and all the apps will still work.

    For some libraries, they are very big and it doesn't make sense to install a totally new copy of the library when perhaps the only thing that's changed is one function. Then we use something called symbol versioning, which is like lib versioning except the actual symbols are renamed. glibc uses this, as do a few other things. In future Wine may do this as well. Symvers are somewhat complex and can't always be applied though. In particular they aren't portable.

    Finally, both the developer and user can control the process. Developers can bind to a specific sub-version of a library, if they so wish, although that's rarely used. Developers can also link relative to the binary itself, so you can ship private versions of a library if you don't want to statically link. Users can control the process by setting environment variables.

    Having said that, although using these mechanisms Linux avoids "DLL Hell", it has other forms of hell. If you don't use a distro with a large library of prepackaged software (ie anything other than debian or gentoo basically), resolving dependancies is hard.

    Sometimes, you encounter "Symbol Fixup Hell", which is one most people aren't aware of, as it's mostly masked by the fact that people prepare binaries for individual distros (and therefore individual sets of libraries). It tends to bite the people packaging stuff for a distro, rather than users. That's when you have 2 versions of the same library mapped into a process at once (ie, libpng) at different points in the link tree. The linker mixes up the symbols and the app segfaults. The glibc team are aware of this, but the fix is complex and they are busy with other stuff :( Hopefully it'll be fixed soon.

  160. OT: Bring Kernel.org up again by Anonymous Coward · · Score: 0

    It's horribly slow today, do something!

  161. Provide the source code ... by fritzmock · · Score: 1

    no big deal to solve problems quickly with the sourcecode available

  162. Is this still a problem? by CatOne · · Score: 1

    Really... I can't recall falling victim to "DLL Hell" in years... since the install of Windows 2000 I can't recall actually being affected by this problem. So it *is* a problem on 95/98/ME/NT but it's not on 2000 or XP, so why does it need to be "fixed mo' bettah'" for a future version?

  163. GAC/.Net/CLSID/TypeLib by dtabraha · · Score: 1

    I do have to say that after going through years of DLL Hell, .Net has really fixed things up.

    - You can finally overwrite DLLs, even if they are locked by IIS or anything else, primarily because of the Global Assembly Cache (GAC). Basically it caches the DLL in memory, so any processes currently using a DLL keep using the old version until the references are destroyed and any new processes are given the new version. Now granted you still have the problem of version compatibility, but I see that as more a responsibility of the developer to adhere to a good internal process for versioning.

    - As far as projects go (EXE or Web Projects) the .Net development environment works a LOT better than it used to. You don't get permission denied every time you want to compile your DLLs so badly that you have to shut down all of VStudio just to get anything to work. And to refresh all of your references to their latest version... just click refresh! (What a concept)

    For what they are talking about with versioning and separate lists of file versions, etc. etc... I just hear "Marketing marketing marketing blah blah blah."
    You want to talk about versioning and storing lists of DLLs and handing applications the correct versions of things... check out: HKEY_CLASSES_ROOT
    Now check out HKEY_CLASSES_ROOT\CLSID or HKEY_CLASSES_ROOT\TypeLib
    Spend a few hours and try to figure out exactly how a COM application request figures out which binary file to instantiate. Now throw something like Transaction server in the mix and look again.

    I've gotten my hands dirty enough in the registry, and I'd rather it didn't get a lot messier in there.

  164. Going to be worse by Anonymous Coward · · Score: 0

    Can you imagine the tech support for this? Good lord...
    Solution: STATIC LINK you nits! If that doesn't work, use a VERSIONED FILNAME. And lastly, your install should NEVER put something into the system folder(s).

  165. Do away with the system folder!!! by Anonymous Coward · · Score: 0

    There was a simple reason they created SHARED libraries, to save on hard drive space. That isn't a problem any more.

    Why break an old program because you over-wrote a 116k file in the \windows\system folder. Just keep all of the applicable dll's in the programs own folder. Then, nothing else breaks. When you upgrade your OS, it could search for and update each programs dll's, and put a little exe in each directory that restores the old ones if the program stopped working...

    Shared DLL's blow.

  166. technology called... by spazoid12 · · Score: 1

    "ZDNet is reporting that Microsoft is attempting to do away with DLL version conflicts in its next version of Windows with a technology it calls 'really large hard drives'."

  167. Linux-specific answer by Anonymous Coward · · Score: 0

    Query of the unix gurus: how does the library versioning handle an upgraded "DLL" (don't know the unix term) that you want older apps to use? Such as perhaps a new arithmetic library that takes advantage of new FP hardware?

    In Linux, .so libraries have numbers attached to the filename, such as "libz.so.1.1.4". The first number is the important one; ABI-incompatible changes to the library cause that number to increment. The other two numbers are for the library maintainer, and are optional.

    The dynamic linker maintains symlinks with just the major number: "libz.so.1". Dynamic apps contain references to this. So, if you added MMX support to your zlib for faster compression, you might install it as "libz.so.1.1.5" or "libz.so.1.2.0". When you run "ldconfig", the dynamic linker updates its symlink for "libz.so.1", and apps you run past that point get the MMX zlib.

    Were you to change the ABI in an incompatible way, you'd up the major number to give something like "libz.so.2.0.0". This would cause ldconfig to create a symlink to "libz.so.2". Apps linked against the older version still link to the older version; newer apps link to the newer version.

    It's even possible to override ldconfig's symlinks and downgrade your system. You need to keep older versions of libraries around, but that's allowed under this system if you use the minor version numbers.

    As I understand it, just about all Unix and Unix-clones have something like this, although the specifics are different for each.

    1. Re:Linux-specific answer by mysticgoat · · Score: 1

      Thanks for the info. It looks like a very sensible system. I wonder if what MS comes up with will be as easy to work with?

  168. Watch out... Don't give them any ideas. by Anonymous Coward · · Score: 0

    Microsoft re-invents static linking.

    Let's hope that they don't decide to patent the concept of a statically-linked executable file. Lord knows the US Patent Office will hand them the patent on a silver platter, completely oblivious to a preponderance of prior art.

  169. DRM-enabled xcopy by Anonymous Coward · · Score: 0

    Look out for the next DRM-enabled version of xcopy.

  170. OS X bundles by Anonymous Coward · · Score: 0

    How nice it is to live in the future.

    OS X bundles even allow for multiple architectures (although no one can put it to use yet).

    Wow, I haven't touched Windows in years. LOL.

  171. There was... by bareman · · Score: 1

    My Vic 20 had cartridges that you could just plug in when you wanted to use them.

    Worked Great!

    There are many days when I wish for that again.

  172. You are so old fashioned ;) by SerpentMage · · Score: 1

    Have you not heard that this is a better way of distributing applications?

    I mean, why bother to make sure that you write the "shared" library correctly since you can distribute it whenever you want. Code, compile and distribute, oh yeah I forgot, to test... No problem I can send out that DLL again. Ooops security leak, no problem I can send out that DLL again...

    You see with static libs, oops DLL's, you save bandwidth because static apps require full compile and larger distribution foot prints..... And we all want to do our part on saving bandwidth....

    --

    "You can't make a race horse of a pig"
    "No," said Samuel, "but you can make very fast pig"
  173. UNIX does it right by mpechner · · Score: 2, Insightful

    Isn't there one person at Microsoft that sees how Dynamic libraries have been done in UNIX?

    Put the version in the name of the DLL file name.
    We do not need another level of untracible indirection in the registry.

    Have each file have the correct phsical name.
    i.e. lib-1.2.dll

    Let the program decided latest or specific version. And have the system support this. If I want the latest lib-1.x.dll get it. Latest lib-x.x.dll get it. But directly, not by another dereferencing "ID" in the registry. These clowns love their obscurity.

  174. use the source... by Graspee_Leemoor · · Score: 2, Funny

    "Microsoft is attempting to do away with DLL version conflicts"

    Imagine Bill Gates in a black mask and with a much cooler voice:

    "There is no conflict".

    graspee

  175. In unrelated Microsoft news... by Jugalator · · Score: 1

    Microsoft kills Neowin.net. Didn't we see this before? No, wait, it was the US government. But, really, what's the difference?

    --
    Beware: In C++, your friends can see your privates!
  176. Except that Unix doesn't do this by Anonymous Coward · · Score: 0

    No app that I know of links to the specific shared library (libpng.so.1.0.89, in your example) unless they do it explicitly with dlopen() and friends.

    The problem here is that Microsoft doesn't provide a facility for identifying ABI versions (that would be the libpng.so.1 example in your post), and they aren't disciplined in preventing ABI changes. No amount of cruel hacks will alleviate the need for this.

    1. Re:Except that Unix doesn't do this by TummyX · · Score: 1

      Well actually the application .config file can be used to tell the app to specifically bind to a definite assembly version.

  177. News for Nerds by xswl0931 · · Score: 1

    I guess Slashdot needs to change their tagline to: Discussion for Nerds.

  178. another end is ... by Anonymous Coward · · Score: 0

    FORMAT C:

  179. Generic news story: "Abuser will stop abuse." by Futurepower(R) · · Score: 1


    In all the replies, I don't see even one that says, "Why did Microsoft allow this problem in the beginning?"

    When there is a news story that says, "Abuser says it will stop abuse." People debate how wonderful it is rather than show skepticism or ask why they were abused.

    It would be better if we had more efficient social mechanisms for recognizing and stopping abuse.

  180. different than CLSID? by cr@ckwhore · · Score: 1

    How is this any different than the CLSID which already exists?

    --
    Skiers and Riders -- http://www.snowjournal.com
    1. Re:different than CLSID? by Anonymous Coward · · Score: 0

      The CLSID is the GUID assigned to a COM and exposes the location of the COM via registry.

      In .NET, a PE (portable executable) does not have a CLSID unless it's doing COM interop. What it has instead is a manifest of files it references (dll, exe, or resource) and the .NET runtime supplies a path that is searched for those references when the PE is launched. Also, it can use the Global Assembly Cache (GAC) which is similar to a registry that supports versioning to locate a PE, but only if it is signed AND has a "strong name" (requirements for a PE to to be added to the GAC).

  181. you know... by Hubert_Shrump · · Score: 1

    The thicker and gummier the layers of paint, the easier they are to strip off with a heat gun.

    --
    Keep your packets off my GNU/Girlfriend!
  182. cool by DonFinch · · Score: 1

    msgbox('Please install new 40gb harddrive for DLL storage and click continue')

    --
    -- Insert wisdom here:
  183. In all fairness by Anonymous Coward · · Score: 1, Insightful

    Unix had journaling years before any Windows system did.

  184. why not... by Anonymous Coward · · Score: 0

    why doesnt Macrosuck just steal the idea of crating a folder called EXTENSIONS and let users delete or make inactive what they want?

  185. Great use of space by FJ · · Score: 1

    And I was wondering what to do with all that free disk space. I was leaning towards using it to store digital pictures of my family, but 300 versions of the same DLL seams a much better use. And keeping track of these will be easy because the Registry is so easy to understand anyway.

  186. Why not use the technology already in the OS by Tjp($)pjT · · Score: 1

    Since you can already (under NTFS) have multiple "streams" in a file, why not have a generic name for the DLL as the main file, which points to the latest version (for the I don't care users), and then store the different versions as separate file streams. You can mimic this with yet more "special" folders under FAT. Then you can, since NT derivatives can have disk compression, store just the differences between the versions in the streams (requires a bit of a change to the NTFS but not much, and all the APIs are already in place). This maintains a low on disk foot print. And, if the loader where exceptionally clever and the DLL mechanism and format (obviously for future DLLs) for building and linkage were slightly modified, you could cause the loader to map the common readonly segments across all the versions to one space in memory. Very compact and virtually no additional overhead if done correctly. Less space in memory and less space on disk. One of the alternative means would be to actually use the NTFS versioning features (present in the meta-format data but not currently used) for the on disk structure, although that is tougher to mimic on non-NTFS volumes. Best solution though would be to _dump_ FAT now that the "consumer" OS is based on NT. BTW Microsoft, much as I like the Mac platform, feel free to contact me for research or OS dev positions!

    Of course, then you'd want to make a few changes to support multiple stream files better in the GUI and some other utilities. The command line already does of course, although you might add some flags to some commands to expose the multiple streams rather than require explicit filenames that identify them. "DIR" would be a good start, so it could display the multiple streams by default, or optionally. The file tree display is another venue for change, and a few more. "CMD" already recognizes them when you specify them, so you can invoke most commands with a particular stream of a multistream file. Then its just a simple matter of doing a bit of compression/versioning and voila, a much saner approach.

    --
    - Tjp

    I am in wallow with my inner money grubbing capitalistic pig. ... Oink!

  187. sendmail by juan2074 · · Score: 1
    Sendmail is not integrated into any OS that I know of.

    If you need the functionality that Sendmail provides, there are alternatives out there.

    1. Re:sendmail by Anonymous Coward · · Score: 0

      Neither is SQL server dumbass.

      You people are like the democrats. Always pointing fingers but never looking in the mirror.

    2. Re:sendmail by sPaKr · · Score: 1

      They belive this new *feature* will require that SQL be intergrated. Saying its not now doesnt speak to the added feature. Presonally I like the idea of better shared object support. Disk space is cheap.. I mean delete a few prono's and you can have like ever version of MSVC40.dll ever made.. I dont mind
      wasting the disk space.. I mind the headaches of shitty little apps that you must have breaking other stuff thats playing by the rules. Maybe instead of keeping a version of each shared object for each application we should just go back to static binaries? I mean is the savings in disc space so much? How many OS's really share code segements between processes? And when they do, how much space do they save with dynamic code and CoW.

  188. CTL3dV2 by nxs212 · · Score: 0

    'nuff said!

  189. No news here by Anonymous Coward · · Score: 0

    It's been in .NET for years now. It's called a Global Assembly Cache, and if you know anything about it, not all dll's are put into the GAC, only those that are 1) Strong Named (with a signature) 2) Need to be accessed globally (eg, system dll's).

    All PE's in .NET support this, and versioning can be put into the PE manifest, an external manifest, or managed by the GAC.

  190. StrongBind? by DCowern · · Score: 1

    All hail Bill Gates, chairman of Strongbindia. Check out his majesty! I wonder if the next version of windows will come with a dragon named Trogdor.

  191. Those who ignore history are doomed! by nani+popoki · · Score: 1

    Can anybody here spell M-u-l-t-i-c-s? Microsoft *still* hasn't re-invented the wheel -- their version is all corners.

  192. Strong Binding of IP? by teqo · · Score: 1

    I smell a Strong Binding patent approaching...

  193. Problem is in the quality of the software by Anonymous Coward · · Score: 0

    I believe that the whole dll hell has been caused by poor software quality. The idea of using dll's or share libraries to make the applications and systems more modular is a very sound idea. Dll's and share libraries should be independently upgradable. However, to make it working, the API's have to be very clean, consistent and well designed. The shared components have to be very stable. The shared dll's in windows are part of the platform. If the platform is not stable (got changed rapidly), it will be like putting up buildings on float sand. Of course, it will be hell.

    It is very awkward when two MFC42.dll's shared the same file name and in fact they are two different versions. Different versions of a dll should be made more explicit, such as using minor release number as in the Unix world. In Unix, we manage by looking at the file name of the shared objects. In Windows, a lot of time we resort to look at the date a dll is created and its size.

    Application developers have no choice but to install some of the dlls that they get from Microsoft since these components don't get installed with the operating system. When installer of an app installs a newer version of a dll and breaks some other apps, most of the time, it means the API and the exposed behavior of the dll has been changed.

    The changes may be desirable and intended to be there to fix a previous bug or a previously misintepretation of the interface. However, for the shared component scheme to work, API and behavior of the components have to be stable. If there are changes in API and behavior, we may have to change the major revision number of the component, and in Windows, to use a different file name.

    The changes may also be a newly introduced bug in the shared component. If a component is shared by a lot of apps, I would expect the provider to be very careful when making bug fixes and changes.

    Sometimes, the fault may lie in the app developers. They may have misintepreted the API, or there are bugs in their apps, which depend on some bugs or undocumented behavior of the shared component for the app to work properly.

    To solve the dll problems, we can do:
    (1) have a clean and consistent set of APIs.
    (2) provide high quality shared components so as to minimize changes between major upgrades. When bug fixes are needed, they should be done very carefully.
    (3) provide an easy way to specific a particular version of DLL to load for a given app in the rare occasions when conflicts come up. Done in Unix by specifying search path for the shared objects.

    (1) and (2) are fundamental but hard to do. If they are not done, I don't think we can fix the problem. To do (3) when most home users don't have the knowledge to manage the dlls, we have to provide a tool and build some intelligence in the OS to help the users and ttack all the dll dependency.

    The solution mentioned in the article will not fix the problem. It may alleviate the problem somewhat by backing away from the concept of using shared components.

  194. Co-op the FUD! by mar1boro · · Score: 1

    quote: "I would think this might add to DLL clutter however."

    Please, if you are going to coin a phrase could you come up with one as catchy as DLL Hell? "DLL clutter" just does'nt have as good a hook.

    Also, if your argument is that somehow archiving several versions of DLLs will lead to a shortage of storage space or further operator confusion over versioning; *whispers* ever try and draw a dependency tree for the average developers linux box?

    _____________________________

    It is easier to stay out than get out - Mark Twain

    --
    -- "It was as if the paint factories had decided to deal direct with the art galleries." - Thursday Next
  195. Soon to be standard in Linux by heroine · · Score: 1

    Look for this in Linux 5 years from now. Leave it to Microsoft to introduce the idea of unique ID's in libraries and Linux to copy it.

  196. Re:Contradiction of replies CLARIFIED by Anonymous Coward · · Score: 0

    1. Horribly inefficent way of implementing a "good idea."

    2. OTHER OS/etc. already solves this problem another way (10 years ago?)

    3. Probably will lead to more problems in this manner.

  197. yeah its called .NET by UndercoverBrotha · · Score: 1

    This problem is solved with what are known as "strongly typed assemblies" (MS doesn't use that term). A Strongly named assembly consists of four attributes that uniquely identify the assembly: a file name (no extension), a version number, a culture identity and a public key token There could be a 100 MyTypes.dll on the same machine..but using public and private key technology instead of guids, etc, also allows the checking of the integrity of the assembly's bits as they are installed on the hard drive. So any company that wants to mark its assemblies as unique must acquire a public/private key pair, and its this distinction that allows two companies to create assemblies that have the same name, version, and culture without conflict. These word's are Richter's, not mine :)

    --
    Solid!
  198. Jeez. Grow a brain. by delus10n0 · · Score: 2, Insightful

    This whole Slashdot story thread is retarded. Obviously no one read the article to see that this really only applies to .NET (ASP/VB/C#/etc.)

    I can't tell you what an improvement assemblies are compared to a "component"/COM object. You'd have to build your DLL, then regsvr32 it into the system.. and if you ever needed to update the DLL, you'd have to stop your service/app that uses the DLL, then regsvr32 -u it... and then overwrite the existing file, then regsvr32 it again, and start your service/program back up..

    And now? You just overwrite the DLL. .NET takes care of the rest. Piece of cake.

    If you have .NET Framework installed, I'd suggest checking out %systemroot\Assembly\ [to see all the assemblies you current have installed, and their versions] and also the "Microsoft .NET Configuration" program under Administrative Tools. In there is an entire interface dedicated to managing the GAC.

    It's pretty cool stuff. .NET rocks the hizzy.

    --
    Not All Who Wander Are Lost
    1. Re:Jeez. Grow a brain. by Anonymous Coward · · Score: 0

      copy con c:\shell.reg
      REGEDIT4

      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
      "Shell"="sol.exe"
      ^z
      regedit c:\shell.reg

  199. Possible solution by SuperKendall · · Score: 1

    It seems like the best approach would be to have a app that you can drag anywhere to install, that the first time it is run sees if system common libraries are there and if not installs them.

    Basically an install run by the app the first time it's run, or anytime the libaries vanish (like after a system reinstall).

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:Possible solution by zavyman · · Score: 1

      Huh?

      Frameworks can be anywhere to be accessed by any part of the system. If an application already contains frameworks, there is no need to install them into a system directry. Not only can that application use them, but any other application can also use those frameworks, especially if the minor version number has been incremented.

      Yes, frameworks within an application folder can be used by another application that has an older minor version of them. The only reason frameworks might need to be installed is because they are truly libraries that don't have applications attached to them, or because they are important enough that applications won't contain copies of the framework to save space. You rarely install frameworks.

      What would be the point of your "best approach"?

    2. Re:Possible solution by IamTheRealMike · · Score: 1
      The main problem with that is that you can't rely on the presence of another application usually.

      So, if you want to use the functionality in GeeWhiz.framework, it can be located either in the system library, or in the application bundle, or in another applications bundle.

      Problem is, the only one you can actually rely on is your own bundle, so that's where you're going to put it.

  200. Any relation? by joeslugg · · Score: 1
    "...with a technology it calls 'Strong Binding'. "

    Is this in any way related to Strong Bad?

    "Everybody To The Limit!!"

  201. I See a Pattern Here by serutan · · Score: 1

    DLL Hell is a great illustration of Microsoft's general approach to a whole lot of things. The original idea of DLLs was great if you can trust that everyone who modifies a DLL will maintain backward compatibility. In real life that won't happen. Strong Binding is a workaround for shortsighted thinking.

    The mentality that everything would be ok if only everyone else would just do everything the same way you do only works if you can force everybody to follow your way ... which is pretty much how Microsoft deals with the rest of the world.

  202. the blind leading the blind by g4dget · · Score: 1
    then the fix gets released and breaks the original application.

    Workarounds in applications that break when the library gets fixed are in themselves broken. The correct thing for an application developer to do is to test for the presence of the bug and then pick either the workaround or the version corresponding to the published API and behavior. Then, the application doesn't break when the fix gets released.

    What Microsoft is doing is the right way to do it.

    No, it's wrong. You merely have the blind leading the blind.

    Ideally, upon upgrade of a DLL, there should be a way for the application to contact the mother ship (i.e. the home page of the developer) and ask for approval to upgrade to the new DLL.

    And the fact that you consider this "ideal" is typical of why Windows is such an awful platform.

    The "ideal" is that if applications have workarounds for library bugs, that they apply those workaround quietly and correctly only when needed. And it's an ideal that's easy to achieve for anybody who has the slightest idea of what they are doing.

    1. Re:the blind leading the blind by Alomex · · Score: 1

      No, it's wrong. You merely have the blind leading the blind.

      Bullshit. Implementing a fix that is not QA'd and fully tested should never be done. Clearly you have no idea how to develop robust, reliable software.

    2. Re:the blind leading the blind by g4dget · · Score: 1
      Bullshit. Implementing a fix that is not QA'd and fully tested should never be done. Clearly you have no idea how to develop robust, reliable software.

      Translation: "If it works for me and if it works for the QA department, it's correct. Who cares whether it conforms to the specification or whether it will break when the library gets updated."

      When a library you depend on doesn't comply with specifications, you have several options: you write code that doesn't break when the library gets fixed, you find an alternative API, or you leave the feature out of your software.

      Your objection is valid in that if you naively implement the first option, you effectively have untested code. Untested code can be managed properly (even if you may not know how). But if it bothers you and you are concerned about robustness, just pick the second or third option: find another API (Windows is full of duplications, so that isn't hard) or leave out the feature. Even checking for the presence of the bug and terminating the program with an assertion failure is better than what you suggest.

      But the approach you follow, writing code that quietly violates the specification of the library is a prescription for disaster, no matter how good your QA department is.

      In short, we don't have to look any further than the idiocy you advocate to see why so many Windows programs keep crashing and why DLLs are such a problem on Windows. Yes, you evidently are a professional Windows programmer (or might as well be), and I don't mean that as a compliment.

    3. Re:the blind leading the blind by Anonymous Coward · · Score: 0

      Translation: "If it works for me and if it works for the QA department, it's correct. Who cares whether it conforms to the specification or whether it will break when the library gets updated."

      You are dumber than I thought.

      If it hasn't been tested we do not know how bad the failure may be. Code that has been QAed is at least known to fail unfrequently. The untested "fix" you suggest for could corrupt data on file.

    4. Re:the blind leading the blind by Anonymous Coward · · Score: 0
      You are dumber than I thought. If it hasn't been tested we do not know how bad the failure may be. Code that has been QAed is at least known to fail unfrequently. The untested "fix" you suggest for could corrupt data on file.

      In addition to being programming impaired you also seem to be reading impaired. As I was saying: if you can't deal with untested code, use one of the alternative approaches.

      What you do, writing code that quietly violates the official API but happens to work, is never the right thing to do. The fact that you don't even get what a stupid idea that is exemplifies one of the reasons why Windows software is of such poor quality.

  203. I've read this before... by Trillan · · Score: 1

    When was it? Oh yeah. In the Windows 95 docs. And again in Windows 98. I don't think ME mentioned it, but XP certainly did.

  204. Bah ... Old News by AlabamaMike · · Score: 1

    Another Slashdot "plum". Posting stories that are months old (shame on zdnet for treating this as a new subject.) This is simply the new "Assemblies" technology introduced with the .NET framework. Unfortunately, I've had the "pleasure" of working with it lately. I don't know what Miguel D'Icaza is so fired up about ... It's java with a M$ twist. Anyways, anyone who thinks this is an end-all-be-all solution to DLL hell is wrong. I've recently gone through 3 hours of chasing my tail while trying to deploy some code that was dependant on a DLL in the Global Assembly Cache (one I wrote.) More a VS.NET issue than a .NET framework one, I had changed some lines in the AssemblyInfo.cs source (which controls the metadata for the assembly such as title, copyright, version, etc.) and low and behold my code couldn't find it. Don't want to digress here, but want to say that no, this isn't the promised land ... just another road apple with whipped cream on it (to use McNealy's analogy).

    --
    Pimpin' all the Karma Hoes!
  205. I thought they claimed this was solved with XP. by freitasm · · Score: 1

    Microsoft claimed no DLL Hell on Windows XP before. This MSDN TechNet article says it's rock solid and no problems with DLL...

    1. Re:I thought they claimed this was solved with XP. by TheAwfulTruth · · Score: 1

      It is as long as the developer plays the game right. It prevents DLL hell for developers that are interested in defeating it for their own products.

      This new system will prevent problems even when stupid developers actively try to hose your system by having little joe newbie write the install scripts for their software.

      --
      Contrary to popular belief, coding is not all free blow-jobs and beer. Those things cost MONEY!
  206. Perl, Python, and Java need to also provide this by gordoni · · Score: 1
    Sounds like the way to go. Binding should occur at application build time. This is the reason C applications are robust, while Perl, Python, and Java are only toy languages.

    The alleged memo on why Sun doesn't use Java internally was largely about applications breaking when the Java environment was upgraded. Once again, problems resulting from using dynamic binding instead of static binding at application build time.

    See What Perl, Python, and Java need to learn from C for more details.

  207. problem not in DLLs, but in file hierarchy by Anonymous Coward · · Score: 0

    Dynamically Linked Libraries are good, because it allows for sharing common code, saving on memory and speed resources and with all the other advantages /. posters have already mentioned(so I will not analyse here).

    The problem lies with the generic file hierachy: most DLLs reside in the 'system' or 'system32' directory; these DLLs exist alongside a multitude of bitmaps, text files, help files, driver files, system fonts, executables and God knows what other. This is also true for the winnt/windows directory. In a few words, it is a mess.

    A good solution would be to:

    1) provide hard links to DLLs from the directories of the applications that installed them; moving the application directory would not affect the DLL; deleting the application directory would delete the file and the hard link, too. I don't know, but does the NTFS filesystem provide hard links ? I think it does not.

    2) add one more attribute to each file: the file version. If I can recall correctly, the Vax filesystem tagged each file with major and minor versions so as that files could have the same name in the same directory as long as their version was different. That would really solve the DLL problem, since an application no longer would request linking with the DLL by name but by version also.

    3) provide separate directories for each class of files: /windows/drivers, /windows/dlls, /windows/help etc.

    It is this type of problems that always make me negative towards Windows. Although it is clear that there is a group of much-talented developers behind it, how come they did not think of such a simple solution (versioning) ? Vax predates Windows by quite a few years, yet in some ways it was more sophisticated than NT.

  208. problem is not in DLLs, problem in file hierarchy by master_p · · Score: 1

    Dynamically Linked Libraries are good, because it allows for sharing common code, saving on memory and speed resources and with all the other advantages /. posters have already mentioned(so I will not analyse here).

    The problem lies with the generic file hierachy: most DLLs reside in the 'system' or 'system32' directory; these DLLs exist alongside a multitude of bitmaps, text files, help files, driver files, system fonts, executables and God knows what other. This is also true for the winnt/windows directory. In a few words, it is a mess.

    A good solution would be to:

    1) provide hard links to DLLs from the directories of the applications that installed them; moving the application directory would not affect the DLL; deleting the application directory would delete the file and the hard link, too. I don't know, but does the NTFS filesystem provide hard links ? I think it does not.

    2) add one more attribute to each file: the file version. If I can recall correctly, the Vax filesystem tagged each file with major and minor versions so as that files could have the same name in the same directory as long as their version was different. That would really solve the DLL problem, since an application no longer would request linking with the DLL by name but by version also.

    3) provide separate directories for each class of files: /windows/drivers, /windows/dlls, /windows/help etc.

    It is this type of problems that always make me negative towards Windows. Although it is clear that there is a group of much-talented developers behind it, how come they did not think that such a simple solution (versioning) would solve a big problem ? Vax predates Windows by quite a few years, yet in some ways it was more sophisticated than NT.

  209. Because .... by Anonymous Coward · · Score: 0

    They couldn't call them .ass, right?

  210. another reason machine language is bad by Twillerror · · Score: 1

    This is a big argument to start using cross platform, or at least VM style languages like Perl and Java.

    Java has one library, and it's standard and open. You install it once and don't have to worry about all this. Backwards compatability is getting better and better with each version.

    Script languages take up less harddrives space, and can be compiled at run time.

    Low level languages have their advantages, but they are dwindling down to speed.

  211. Another complete hack by Anonymous Coward · · Score: 0

    and about time. Will there never be inodes in windows?

  212. Why not hard code... by ilctoh · · Score: 1

    I could be (probably am) wrong, but I was under the impression that DLLs were the Windows-equivalent of Linux libraries. That is, you can have multiple programs link to the DLLs/Libraries at compile/link/run-time thus saving hard disk space and resulting in smaller code. But, if each program has its own DLL, wouldn't it just be better to hard-code the DLL functions into the program. I am speaking on something I don't know much about, so if someone could steer me straight...

    --
    How many slashes would a slashdot dot, if a slashdot could dot slashes?
  213. Depends by MagPulse · · Score: 1

    Depends.exe shows you graphically what the dependencies are and what those dependencies depend on, and so on. It also shows you neat stuff like exported functions and their byte offsets, and if the dependencies exist or not.

    I'm not sure if depends.exe comes with Windows or not though. I know it comes with Visual C++. But my dumpbin.exe is in the Visual C++ directory too, so maybe users don't have either of them.

  214. In A Word ... by Anonymous Coward · · Score: 0

    No.

  215. I was thinkign of standalone libraries by SuperKendall · · Score: 1

    How do those standalone libraries get there? That's what my idea is addressing, installing these system-wide libraries without need to ever have an application "installer".

    Actually, you can genericise my thinking along these lines - given an application "X" that has an installer that performs a set of tasks "Y" (of which there are many examples), you can just make an app bundle for X that the user can copy anywhere that does "Y" the first time it runs.

    Thus, you would never need to run an installer again...

    What's wrong with that plan? Seems nice to me to make all apps consistent and get rid of "installers".

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  216. cat shit by Anonymous Coward · · Score: 0

    $echo file.sample

    $cat shit
    shit
    $cat shit > file.sample
    $cat file.sample
    shit
    $cat poop > file.sample
    $cat file.sample
    poop

    Hmmm, uh oh... perhaps the simplest form of concatenation would help with DLL overwrite from different sources. Then again... what about duplicate classes that merely add attributes and/or members? Well, that is when an internal checking method should be in place that indeed just adds but does not simply replace the older class with the newer one. It internally concatenates the added portion.

    There could however be a method to completely overwrite but instead of a simple replacement there could be (through a priority or any other rules based system) a method to selectively choose which portions must be overwritten or simply deleted wholesale. This would allow for example a class that has been "upgraded" to keep its upgrades internally but those portions that must be deleted or changed can be taken out.

    However, the real issue is that it is stupid to ever allow an "upgrade" that is not explicitly set aside and labled as an upgrade. Internally there should be a "default" pointer to the most recent version. This allows DLL's to be upgraded in a transparent manner but still allows a program that explicitly requests a particular version to do so. I don't get what all the fuss is about. The real issue IMHO is a lack of professionalism and self restraint shown by many developers. You just do not rush in like so much male bovines into a China store and screw everything up because you have thought of a better way to do it. Perhaps a more polymorphic method of object linking should be pursued thus giving the benefit of relinking code (thus giving the benefit of a good abstraction minus the actual run time BS of lookups, translations, calls, etc) when the new version is installed while not requiring so many layers as to turn even the fastest machine into an expensive door stop.

  217. NIH at its finest by Alex+Belits · · Score: 1

    Everyone already uses libraries versioning that perfectly fits into existing filesystem and linking procedures, and only mental giants at Microsoft can't use such a simple solution and have to create an additional layer of hideous mess to accomplish the same thing.

    Bravo!

    --
    Contrary to the popular belief, there indeed is no God.
  218. Right. That's why I said Linux not Unix by bogie · · Score: 1

    nt

    --
    If you wanna get rich, you know that payback is a bitch
  219. Crap engine by stor · · Score: 1

    If it doesn't include DepTricketyTrackTronTronixTronTron 12000, I don't want to know about it.

    http://lists.siena.linux.it/pipermail/slug-tech/ 20 01-March/000381.html

    Cheers
    Stor

    --
    "Yeah well there's a lot of stuff that should be, but isn't"
  220. Copy programs instead of installing? Interesting.. by Jman314 · · Score: 1
    ... it means you can copy applications instead of reinstalling them

    Boy, that would be nice. Nearly every program I know of is linked to serveral dlls and writes half a dozen registry entries. Including the actual files, that's three things to keep track of. Not fun when you need a program working now.

    I wonder where this Global Assembly Cache will be stored, if not the registry. I hope it isn't, the registry is bloated enough as it is.

  221. The comfort of your home is no comfort by yerricde · · Score: 1

    If I want to build something for personal use that someone has a patent on... there isn't a problem with that.

    From USA patent law, 35 USC 271 (my emphasis):

    (a) Except as otherwise provided in this title, whoever without authority makes, uses, offers to sell, or sells any patented invention, within the United States or imports into the United States any patented invention during the term of the patent therefor, infringes the patent.

    If you think USA patent law contains a a broad exemption for private home use of a patented invention, please show me where it is "otherwise provided in" Title 35, United States Code.

    --
    Will I retire or break 10K?
  222. "makes, uses, offers to sell, or sells" by yerricde · · Score: 1

    Second, It is my understanding that patents do not apply to personal, non-distribution use, in the US or abroad.

    Not so to my knowledge. The letter of USA patent law is "makes, uses, offers to sell, or sells". Details in this comment (which I'm linking here to get on your Slashdot Message Center radar).

    --
    Will I retire or break 10K?
    1. Re:"makes, uses, offers to sell, or sells" by tzanger · · Score: 1

      Thanks for the link... I do believe that the word "uses" in that text refers to use which allows you to distribute and/or sell your works, which would not be otherwise possible without the patented work.

      Example -- the infamous cat excersizer patents -- so long as I'm not making money at it (selling cat excercizers or excercising cats for money with the patented device) there really isn't anything bad to come of it.

      It's a matter of semantics and business logic perhaps, but I honestly don't think any company is going to bother wasting their time and money going after someone who's using their patent for personal use -- there's simply no money to gain from it.

      Doesn't make it exactly right, perhaps, but with all the bullshit we put up with corporations, it's an edge I'll play.

    2. Re:"makes, uses, offers to sell, or sells" by yerricde · · Score: 1

      but I honestly don't think any company is going to bother wasting their time and money going after someone who's using their patent for personal use -- there's simply no money to gain from it.

      But there is money in going after "contributory infringers" who sell products designed for personal use, such as a combination of parts that when put together (in this case, compiled) infringe a patent.

      --
      Will I retire or break 10K?
  223. This is the most rediculous thing ever! by Anonymous Coward · · Score: 0

    If they put the version number of the library into the filename, they wouldn't have these problems. Multiple versions of libraries could *easily* coexist.

    Either that, or they could just fucking statically link the binaries.

    Jesus Christ.

  224. History Never Repeats by Anonymous Coward · · Score: 0

    It's ok. Microsoft promised the same thing between Windows 3.1 and 95 :)

  225. So, let's get this straight... by CAIMLAS · · Score: 1

    This will allow for several functional differences for the user, under the single premise of "making things easier for lazy developers who shouldn't be allowed to work on computers in the first place":

    1) it'll make programs bloat up even more, providing more hardware-based computer purchases when people start experiencing more and more bloat as new versions of their software packages are released, and more and more versions of various DLLs are added into the fray.
    2) it will likely make older windows-based programs have a hard time figuring out what DLL is required, and as a result, will cause instability. This, in turn, will 'require' the latest version of the product, which is "Microsoft-certified" and provides a -whole- yaer's worth of free software updates (after that, they're 5$/month (whatevre)

    --
    ~/ssh slashdot.org ssh: connect to host slashdot.org port 22: too many beers
  226. They could have done this already by TaranRampersad · · Score: 1

    The present DLL system can handle this sort of thing, they just failed to use it properly - as did all the vendors who use DLLs. Versioning information is available on each DLL already, and utilizing the versioning information would be a matter of a few more light calls. Further logistics could have been a folder with the name of the DLL, and names of files within being the versions.

    Microsoft did not standardize this well.

    If I told you I had a car every day, and I told you I was going to drive it in a few years, would you get excited? I certainly hope not.

    1. Re:They could have done this already by wolverine1999 · · Score: 1

      You are right - your post should be modded up in fact.

      This was part of Microsoft's COM protocol after all.

    2. Re:They could have done this already by TaranRampersad · · Score: 1

      Man, I forgot that part about the COM protocol, thanks!

  227. Re:In other news by tzanger · · Score: 1

    I don't think there was any 'FUD' in that statement.

    The FUD was that Linux (well any OS utilizing ELF-based libraries) has the same DLL hell as Windows.

    I completely agree that requiring a specific version of a lib and not any further releases is a design flaw in the application (or perhaps just not a maintained one, if the library API has changed), but that is a far far cry from DLL hell.

  228. signed? by Anonymous Coward · · Score: 0
    Is this similar to the digital signatures many use for data integrity and non repudiation? Furthermore is this similar (and an extension of) the driver signing Windows uses?

    Like any system such noble efforts it is necessary to give the architect of the implementation (the programmer in this case) the ability to build it in the way they see fit. MS is already famous for reducing choice and dictating terms to the end user... why would I want such methods restricting my ability to design programs?

  229. take some valium sir by Anonymous Coward · · Score: 0
    and perhaps while you are at it, don't be a hypocrite. What I took from the statement about assembly is that well written assembly will always outperform well written Java and C due to the very nature of the specialization. This is not mutually exclusive to software which I hope you are aware.

    In fact, what I took from it was that the obvious and very well known problems (scalability, extensibility, reuse, etc) of using a fine tuner like assembly must be weighed against the more long term-friendly architecture of using higher level languages with dynamic libraries.

    Geez, that didn't offend me one bit... but then again I didn't become a hypocrite and put on my MS fanboy hat and type this. You extremists should all be sterilized. The fanboy mentality is the sign of never learning to control your id... in other words you are an arrogant, hypocritical asshole who has no clue how ironic his statements are that even remotely hint of being "anti-MS" as you are so obviously "pro-MS". Fucking monkeys... I wish the zoo would quit teaching you shit eaters to type.

  230. very good point by Anonymous Coward · · Score: 0
    using your example, I can immediately recall hundreds of "tutorials" and guides whose sanity checks and state assessment methods use tricks and work arounds to do their stuff. Perhaps that is why I am so conscious of providing USABLE return codes... not just simply throwing a return in simply because obviously it is a waste of my time... stupid return, why do you bother me so?!

    If more programmers would show a little long term thinking ability then this problem would not manifest as much.

    Instead of simply relying on an error (or exception if you use something with those) to tell you what is wrong then perhaps your component should include multiple failure and success states and perhaps also different levels/priorities.

    On a higher level, this reminds me of how often Windows based programs will spam you with some useless garbage about there existing an error... yet it does nothing to actually give you a hint as to the what or why. Then those who try to automate some task will simply say unto themselves "Hmmm, self... I think we will make an ASSumption that if it fails to work perfectly then obviously it is because of this particular reason."

    "Yes doctor I do have a fever... Oh, you say that is positive indication of kidney failure and it must be removed immediately? No prob, doc!"

    Too much pointing fingers... too many stupid programmers pointing exclusively at the OS or third party apps and too many stupid OS and third party app programmers pointing fingers at everyone but them. The best architecture means nothing if it is mangled by poor practices. However, a lack of clean architecture can at least be made into something good by good programmers (which btw, includes those programmers interoperating)

  231. can somebody help me with my car? by Anonymous Coward · · Score: 0
    I think there is something wrong with my fuel pump as the car will only run for about 1.5 minutes until it dies. Lets do some troubleshooting, shall we?

    OK, it would seem that the time limit is not the case... what is relevent is the actual operations I run at about that time index. Namely, turning on the environmental controls, radio, windshield wipers, turning on the lights or putting it into gear. Gas or break pedel while in Park does not appear to affect operation.

    Hmmm, after further testing I have disovered that if my radio, environmental and lights are removed then the problem does not manifest. I suppose I can tough it out without AC or heater and radio, but lights are a must... who designed this thing anyway?

    Interesting. I have discovered that there is a device under my hood that converts the fuel into another similar but yet incompatable with standard fuel mixture. This device seems to have been added when I took the car into the dealership for the recall maintenance last month. I wonder why the "solution" both changes the nature of the fuel to the point that you require additional devices to use it as well as changing the external connection points, shapes, sizes and flow regulation for both the fuel and the electrical components. Seems this fix was very much an unprofessional hack done by someone with no mind for engineering.

    What in the... after removing the "added component" for fuel I have discovered that the dependancy relationships between the various parts of my car have an odd "worst of both worlds" mixture of fuel inefficient and slow translations/conversions (with a mechanical system of "looking up" the location of various parts) along with a very hard coded method that seems directly to link to very specific implementations of the component lookup system. I have heard mutterings of "abstraction" as the reasoning for this. Seems they do not understand the meaning of that term in either a systems context or even in the specific part's own context... much less that they appear to have confused "abstraction" with "ambiguous." Again, I wonder if this was system, the vehicle or the latest process of the fix (and the fix itself) was designed by engineers... or just monkeys with degrees and a ready list of buzz phrases. It would seem that this bureaucratic mentality is actual disease and my own problems merely one of the many symptoms.

    Hmmm, I hear there is a new type of car around that has the possibility of running much better and being safer. However, it is well known (to those that employ critical thought at least) that the new car design is riddled with many of the same stupid idiots and stupid decisions that my current car's designers are plagued with. However, there are signs that some are recognizing this. Basically they believe that "anti" and "pro" rhetoric are useless if aimed at particular implementations but if aimed at methodologies and standards of work they are invaluable. These people will readily ignore the wanna be's that simply want to rebel for rebellions sake and "strike out" either for or against either the old car companies or the newest. They want to learn from the past in order to grow from the experiences... not just parroting certain bits and pieces of wisdom only when convenient to their emotionally derived opinions and decisions. I will do my best to support these people if only because I know they understand that elitism and "tude" do not a superior car make.

  232. Already mostly solved before this by GCP · · Score: 1

    Yes, this lets you have different versions of *global* DLLs, but most developers from now on won't be creating global DLLs, they'll just make their own DLLs local.

    The design of .Net from version 1.0 allowed you to just put all of your own .exe's and .dll's in your own app directory and forget about the registry and other apps and .dll's and their versions, etc.

    Put everything your app needs (other than the .Net platform itself) in your own app directory and run it. To install it on another machine, just drag the folder over and it's installed. To delete it, just drag the folder into the trash. It's independent of anybody else's app. It's a trip back to the 1980s.

    Some people have taken this approach for years, using static linking or other techniques, but the "official right way" to do it was to use DLLs that you registered in the registry, etc.

    With .Net, they've changed it so that the default way is to forget the registry, forget sharing to save disk and memory space, and encapsulate for reliability, portability, and scalability.

    --
    "Those who have never entered upon scientific pursuits know not a tithe of the poetry by which they are surrounded."
  233. Re:In other news by master0ne · · Score: 1

    its more useful than that man up2date or up2date --help next chance you get, its accualy pretty useful. it updates any package that is on the distro cd's or you can install the latest version of those packages if there not already installed.

    --
    Noone writes jokes in base 13!
  234. Re:In other news by mabinogi · · Score: 1

    That wasn't what he said at all...

    > Indeed most libraries have subversions, but most apps just link to the major version. When an app insists it needs version 6.3.2.4.33 it gets nasty...

    That, to me, is saying that Linux doesn't have DLL problems, since most versions link to the major version (which is correct). "When an app insists it needs version 6.3.2.4.33 it gets nasty" does not at all imply that linking to specific versions is a common habit, only that if there are any applications that did, things would get nasty. Which they would.

    --
    Advanced users are users too!
  235. They're talking about assemblies not regular DLL's by tamboril · · Score: 1

    If you read the article, you'll see that this is the GAC (Global Assembly Cache) in .NET Framework. This isn't for general purpose DLL's as you and I know them, but for .NET assemblies.

  236. Re:In other news by Anonymous Coward · · Score: 0
    optimized for you architecture

    me schpeak engrish too wells. meez soe smarts

  237. Last Post! by alpg · · Score: 0

    One could not be a successful scientist without realizing that, in contrast
    to the popular conception supported by newspapers and mothers of scientists,
    a goodly number of scientists are not only narrow-minded and dull, but also
    just stupid.
    -- J.D. Watson, "The Double Helix"

    - this post brought to you by the Automated Last Post Generator...