To be completely honest, I'm a bit pissed off at the moment, so I might say a few things that I will regret later. Should that happen... Tough luck.
There are two things that kind of drive me nuts. On the one hand, it's about some people being total "ignorants" (and I can't even tell if they do it on purpose or if their ignorance is genuine). I guess I'm beating a dead horse and everyone is already bored
like hell, but for some reason I keep getting back to the side-by-side DLL story. I provided earlier a few links (unfortunately the easiest to understand but not the most relevant ones related to this subject, which is my fault); if one would have followed
the links, one would have discovered quite easily a whole bunch of information about side-by-side support in Windows.
For instance, it's fairly obvious that you can do side-by-side with Win32 native assemblies (together with COM components) just by looking at the
Assembly Manifests reference page. The ultimate reference for developing and deploying side-by-side native components on Win32 is located under the
Isolated Applications and Side-by-side Assemblies node in MSDN Library. Spend a couple of hours reading all pages under that node, and the picture will get very clear.
As far as I know, Windows XP has approximately the same kind of side-by-side support for native components as .NET does. This is because the binding component ("Fusion") is developed by parallel teams. I learned about this from blogs.msdn.com. If you search
"Fusion Win32 CLR", you'll get plenty of information on this.
On the other hand, technical problems aside, there's another thing that pisses me right off. I can't really understand why Microsoft started Channel 9 just to abandon it. This is just how C9 feels when you take a look at what's being discussed here. I don't
really expect a Microsoft employee or an MVP to hop in every time somebody makes a technically inaccurate statement. That would be totally unfeasible and unreasonable. But when you get to the point where a raving lunatic completely dismisses all reasonable
evidence without even knowing what he's talking about, you end up thinking that Microsoft, as well as the members of this forum don't actually give a crap about what's being discussed here vs. the actual facts.
Hold on there, did I just say "raving lunatic"? There must be a solid reason for that, heh? Maybe it's because I wouldn't dare to comment on RPM's functionality simply because I feel I'm not experienced enough with it (although I know the basics). But when
someone quotes whatever he likes from an article without any context and without actually knowing what the story is all about, we're quickly moving to fantasy world.
The bottom line is that I don't understand the purpose of these forums anymore. You have a bunch of people making statements that have virtually nothing to do with the actual facts and you host them on your own website. What's the value of being thrown with
(I need to watch my language) at in your own home?
Is there any way to wipe out my Channel 9 account?
Charles, I've done evangelism for Microsoft for 3 years now. Not for professional developers, but for the most interesting kind of audience: students. They're the most honest and sharp people someone can work with, although many of them are not completely aware
of the world out there. Among Linux fans, there are two kinds of people:
Reasonable ones who are starting to understand the realities of our industry and are building a pragmatic view on the world. Whenever they bash Windows or praise some open-source piece of software, proving to them that "it can be done on Windows too" or that
"yes, you can do it on Linux but you can do it more neatly/cheaply/quickly on Windows" usually does the trick. You don't necessarily convince them of your views at once, but you've opened the path for communication and reasoning.
Let's-fight-for-peace kind of trolls, who are totally isolated from new ideas. You talk one-on-one with such people. During the first 10 minutes you have totally disparate views of the world. Then, you find some common points and agree on some issues. Then,
you're really communicating. And at the end of the discussion they present they conclusions wich are usually the most absurd kind of distortion you could have possibly imagined related to the topics of your conversation.
The first kind of people are important to work with. They're the kind of IT professionals interested in getting the job done. If necessary, they will buy into Windows or Linux, as long as they get the best results for their problems. They are valuable professionals
to look for when building a company or when making business.
The second people only care about always being right and about making the whole world agree with them. So I gave Beer what he wanted. I guess an actual demo of the features we were talking about would have been useless anyway.
OK, I'm done posting about this, I have work to do.
I wonder if you have a job. For every 10-line post around here you come back with a 3-chapter worthless reply. That takes time (or you have a nonsense generator).
Let's get this perfectly strait.
I had originally mentioned sharing libraries, you point me to an article that lets you specify a directory in the registry to have the module loader look in the program folder to load a dll first.
Essentially, letting the dll's not share between apps, but use the dll's as componentized code. Where each app has it's own private version of an otherwise shared library.
That is NOT the same as linux's side by side shared library versioning where all applications share dependant libraries that can be different versions of the same library in /usr/lib/ or /lib
That's ONE, one instance of where you are trying to mislead to prove your point about a feature windows does NOT HAVE.
Now when I called you on this and raised the point that I wrote of, side by side concurrent regular shared libraries that all applications share, NOT COM or .NET or java, you change the topic to highlight that .NET allows 2 versions of the same library because
it holds the version # in it's metadata.
Guess what? I never talked about IL or Java code, you can't mix apples and oranges. That wasn't the original topic, and I don't care how much you try to change it so you don't look dumb it's still wrong.
You probably know it's wrong and you don't care because you don't want to look foolish.
Are you "ignorant" or what? Do you need a demo?
In Windows, you can create libraries or components. Let's say that we have such a library and let's call it My.dll. Assuming that we have two versions, 1.0 and 2.0, we can have both versions installed on a system at the same time (obviously not in the same
folder since the files have the same name).
Now, let's assume that we have four applications, App1 to App4. If App1 and App2 were compiled with My.dll version 1.0 and App3 and App4 were compiled with My.dll version 2.0, each application will use the correct version of My.dll, provided that the library
and the applications have side-by-side support. And, to make you even happier, My.dll v1.0 will be shared between App1 and App2, as will be My.dll v2.0 between App3 and App4.
You can do this for
1. Traditional applications using regular Windows DLLs (with exported symbols), as was the GDI+ example
2. Applications using COM components
3. .NET applications
If all you understood from the links I provided is that you can tweak the Windows or the CLR loader to look up for assemblies in a certain order, then excuse me, my friend, you are a total "ignorant". I'm glad we got that
PS: If you really want me to, I can come up with three simple demos, one for traditional libraries, another for COM and yet another one for .NET. But I will only build them if you promise that once I publish them on C9, you'll start a thread in the coffeehouse
named <Ok, I'm totally "ignorant">
(I removed the contents of the subfolders for brevity). Now, for instance, I have two versions of GDI+ installed at the same time (220.127.116.11 and 1.0.2600.2180). If you take a look at any of them with depends.exe (a tool in Visual Studio), you'll see 609 exports
but none of them are the familiar DllGetClassObject, DllCanUnloadNow, or DllRegisterServer/DllUnregisterServer. These are not COM components. On my XP machine, I can run side by side Win32 DLLs.
This might be some interesting reading for you.
If you have dll's in each program's dir in Program files, that defeats the purpose of library sharing in the first place, and reduces dll's to componetizing code.
Actually, this is achieved with Registration-Free COM, something that has been introduced in Windows XP and .NET Framework to allow managed components to use unmanaged COM components
without registering them. Side-by-side COM components and DLL/COM redirection do not work that way. Maybe the article I proposed to you was too difficult. Get a lighter reading
here. You'll see that you can have multiple versions of the same COM component installed and multiple applications using them, each bound to the version of the component they're
Sorry about the language I used yesterday. Next time I'll use "ignorant" instead of "idiot".
(Later edit: And I'm talking about native DLLs. Managed DLLs have this feature out of the box anyway)
I understand that many people may have opinions that differ from mine. I have quite a lot of friends who enjoy working on Linux more than on Windows, and I'm fine with that. But I can't stand total idiots. Sorry for being so blunt again.
Wow. I did know that ASP pages are somewhat faster than their PHP equivalent and that ASP.NET rocks, but the difference between pages compiled with Phalanger and regular PHP/PHP+Zend pages are impressive!
Beer28 raises very important point. Many companies want to protect their intellectual property (resources and time) that they put into making a software product, and it is a big issue, knowing that someone can take .NET DLL or EXE and quite easily decompile.
I know there are tools that "obfuscate" the MSIL, but do not come close to ASM native image.
I am not with the latest buzz, but I would hope that next version of VS 2005 would have much better NGEN that not only could put .NET Native Image into GAC, but also produce standalone app, that could only be run on target platform that has compatible .NET
I know several people that just look at assembly code (even optimized) and tell you what it does. If you play with a debugger long enough, comparing assembler with the original source, in a few weeks you'll end up reverse engineering x86 assembler as well.
Trust me on this one, the assumption that x86 asm is "safer" than MSIL is wrong. You can hack your way into anything if you're really determined.
While we're at it, the fears themselves are largely unfounded. On the one hand, a good developer can figure out how a feature works just by playing with it for a while and implement it on his own. On the other hand, I think that no company in the world would be
willing to face the legal consequences, the PR losses and all other subsequent "blessings" associated with the uncovering of such practices.
Don't count on NGEN for obscurity. In v2, NGEN saves all metadata in the output file, so you get an executable file that's really easy to "understand". And in order to run NGEN-ed executables, you still need the original IL image.