Slashdot Mirror


Why Doesn't .NET Include a Linker?

CrypticSpawn asks: "I read an article on Joel on Software it talks about Microsoft missing one important thing from the .NET infrastructure, and I wanted to know what Slashdot readers thought were Microsoft's reasons for leaving [a linker] out?"

113 comments

  1. We do it because we can. by Anonymous Coward · · Score: 0, Troll

    When you considre the fact that .NET is a windows only platform you would think they'd have one.

    1. Re:We do it because we can. by Rick+the+Red · · Score: 1

      Actually, no. When you consider the fact that .NET is a Windows-only platform, then requiring a runtime makes perfect sense. This really is part of their grand conspiracy. To run .NET apps on non-Windows platforms you've got a whole lot more hoops to jump through with the runtime than if they provided a linker (would you like a little Wine with that?).

      --
      If all this should have a reason, we would be the last to know.
    2. Re:We do it because we can. by Jellybob · · Score: 1, Informative

      .NET is no longer Windows only - I'm currently in two IRC channels talking with Mono developers, most of whom are on Linux.

    3. Re:We do it because we can. by shaunbaker · · Score: 2, Insightful

      You can have a quick look at the mono project to dispell any thoughts of .NET being strickly a Windows-Centric platform. Could you please explain why the lack of a linker makes it any harder to write a .NET app on multiple platforms. So long as your platform has the the ability to run .NET apps, why should it be any different?

  2. Do you mean... by Anonymous Coward · · Score: 3, Funny

    Something similar to the JAva linkeR ???

    I've used it-- very effective.

    1. Re:Do you mean... by RootObject · · Score: 1

      ...or perhaps something similar to the Java ARchiver ???

      I've used it - very effective.

  3. One possibilty by sbennett · · Score: 5, Insightful

    One possible advantage to always dynamically linking: when some nasty bug in the runtime is found, it should be easier to upgrade the runtime than to relink every application that's been linked statically to it. Of course, people won't actually bother to upgrade, but you can see how the theory goes.

    Yes, I say when a nasty bug is found, and not just because it's a Microsoft product. No matter how good the software is, there's always at least one critical security flaw.

    1. Re:One possibilty by Anonymous Coward · · Score: 0

      Yeah, I think that include won't compile...

    2. Re:One possibilty by Anonymous Coward · · Score: 0

      1. Obviously the include is screwed up
      2. You didn't give main any parameters, on some compilers that will error, others its a warning. See int main(int argc, char *argv[])

    3. Re:One possibilty by jhunsake · · Score: 1

      standard C allows int main (void)

    4. Re:One possibilty by Anonymous Coward · · Score: 0

      Dipshit,you have to use extrans if you want to post code like that.

      #include<iostream.h>

      int main(void)
      {
      cout<<"eat a dick";
      return(0);
      }

  4. silly objection, and- you can get a linker! by RevAaron · · Score: 4, Interesting

    where is the surprise in this?

    first of all, you can get a linker for .NET if you want. like similar tools for perl and python, it packages everything up that you need into one exe. this took 10 seconds to find via google. Perhaps Joel should try google next time. What is this, ask slashdot? :)

    there is nothing different about the way .NET does this and any other system. Sure, there isn't a way to link it all into one .exe file, but that may come in the future. that is, in perl and python (among others) that was the case at first- you had to download a big runtime and possibly other libraries to get your app working. these days, you can distribute your app in that way- a 20KB download of your .pl files,or a big-ass executable that integrates all the requisite libraries, VM/runtime system, etc etc. however, this often ends up giving you a file that it almost as big, but at least, it is a little simpler on the user.

    again, Java does this too. If i have a .class file or jar, there isn't some way to encapsulate it all into one double-clickable executable file that I can share. I have to have my users download a big package, the other libraries, and then my app. .NET is no different, and there is no reason to expect it to be. joel gripes, saying that microsoft will come out with a new version every few months. just like with new versions of perl, python or java, there is no reason that the user would neccesarily have to have the brand-spankinest newest version. if your app requires it, you make it a requirement. put it on the CD, and say- install this if you don't have it yet. big deal. if you were smart, you'd write your apps against the most common verison- .NET 1.0 or 1.1 for now, just like a lot of Java apps are still written for Java 1.1, not even Java 2! Most folks don't write apps for the newest Java, 1.4.x unless they really need it.

    what the hell is so different about how .NET does it?

    --

    Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
    1. Re:silly objection, and- you can get a linker! by kzeddy · · Score: 5, Informative

      this linker shown above does nothing more than merge all the classes used by the application into one big assembly. it does not turn the code into native assembly or link into the assembly and mini hosting environment which is what joel is talking about. YOU STILL NEED .NET

    2. Re:silly objection, and- you can get a linker! by Elwood+P+Dowd · · Score: 4, Funny

      And you can include .NET in your installer too. This is like complaining YOU STILL NEED JAVA, or YOU STILL NEED GLIBC. Of course you fucking do.

      --

      There are no trails. There are no trees out here.
    3. Re:silly objection, and- you can get a linker! by RevAaron · · Score: 1

      Man, it wouldn't be *that* hard to read the link. Did you miss that big banner at the top that reads "Deploy .NET w/o Framework"?

      --

      Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
    4. Re:silly objection, and- you can get a linker! by RevAaron · · Score: 4, Funny

      Heh. I'm going to write an article about "Linux's biggest oversight." Why should I need libc, or even worse, libc++ to run KDE or GNOME? SICK! WRONG!

      Unless it's written in assembly, with no calls to any library, I won't run it. The only thing allowed is calls to interrupts or BIOS. DOS, here I come! (back)

      --

      Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
    5. Re:silly objection, and- you can get a linker! by kzeddy · · Score: 1

      wasn't complaining . Caps were for emphasis in response to the parent post.

    6. Re:silly objection, and- you can get a linker! by kzeddy · · Score: 1

      you still need the runtime. read the faq

    7. Re:silly objection, and- you can get a linker! by spitzak · · Score: 3, Funny

      In fact you could make an installer that contains the entire operating system! Why doesn't Microsoft allow that? Or why don't Linux apps come that way? Just imagine how convienent it would be if every program came with it's own copy of the operating system, modified to work perfectly with that program!

      I agree with most of the posters here, this Joel guy does not know what he is talking about, or he thought he could get site hits by making up a silly complaint about Microsoft.

    8. Re:silly objection, and- you can get a linker! by JDWTopGuy · · Score: 5, Funny

      In fact you could make an installer that contains the entire operating system!

      I believe emacs has something like that.

      --
      Ron Paul 2012
    9. Re:silly objection, and- you can get a linker! by 1Oman · · Score: 1

      Because you would install an older version of the sims and accidentally revert back to windows 98se.

    10. Re:silly objection, and- you can get a linker! by Gyler+St.+James · · Score: 2, Informative
      Maybe you should re-read the FAQs yourself.

      Microsoft .NET Framework is by any standard a significant installation that one would easily notice; some users may not be willing to install it at all. On the other hand, there are still many PCs that may not be suitable for .NET framework installation. This tool helps you to reach more customers as it silently deploys a trimmed down version of the framework without any noticeable effects and conflicts. The framework appears as an integrated part of your own application.

      and...

      The mini-deployment tool puts together the minimum set of CLR runtime files and dependent assemblies that can be simply copied to a single folder on a target machine, and your application runs as if the whole framework is installed. Since the installation is isolated into a single folder, there will be no conflicts with future .NET installation. When linking is used for the dependent assemblies, it will further reduce the file size.

      In layman's terms, you the developer needs to have the framework installed, but the user does not. It doesn't support Windows 95 because that OS is not supported by the .NET CLR itself. Duh.

      --

    11. Re:silly objection, and- you can get a linker! by Prior+Restraint · · Score: 1

      "Back"?! Some of us are still using it.

    12. Re:silly objection, and- you can get a linker! by Magnus+Reftel · · Score: 1
      This is like complaining YOU STILL NEED JAVA, or YOU STILL NEED GLIBC. Of course you fucking do.

      No, you don't (not for C, at least), and that's the whole point of the article. If you compile a program to be statically linked, the users don't have to have glibc, or any other library.

      --
      print "Yet another p{erl,ython} hacker\n",
    13. Re:silly objection, and- you can get a linker! by metamatic · · Score: 1
      again, Java does this too. If i have a .class file or jar, there isn't some way to encapsulate it all into one double-clickable executable file that I can share.


      Sure there is. Just distribute the jar file.

      Of course, this doesn't work for the Windows-impaired, because Microsoft are never going to make it easy to run Java executables.
      --
      GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
    14. Re:silly objection, and- you can get a linker! by Elwood+P+Dowd · · Score: 1

      No one does, though. So you tell me why no one compiles anything to be statically linked.

      --

      There are no trails. There are no trees out here.
    15. Re:silly objection, and- you can get a linker! by TheSunborn · · Score: 1

      It don't work for linux either, because sun don't allow them to distribute their jre/jsdk

    16. Re:silly objection, and- you can get a linker! by Fryed · · Score: 1

      I wish I had SE :(

    17. Re:silly objection, and- you can get a linker! by LWATCDR · · Score: 1

      "Java does this too. If i have a .class file or jar, there isn't some way to encapsulate it all into one double-clickable executable file that I can share. I have to have my users download a big package, the other libraries, and then my app. "
      Actually Install Anywhere will let you bunder the JVM and your libs into a nice neat if large installer. You do need to have Java 1.1 installed but it will install higher JVMs for you.

      --
      See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
    18. Re:silly objection, and- you can get a linker! by Anonymous Coward · · Score: 0

      You misunderstand his statement. Sure, most Java guys know you can create an executable .jar file. But what he's saying you can't do is create a single file that includes your classes, the JRE libs it needs, and the JVM, all as one convenient(?) package.

    19. Re:silly objection, and- you can get a linker! by mrlpz · · Score: 1

      Are you high or something...of course you still need .Net. You don't need the FRAMEWORK, but you do need the runtime, which is still significant in size. Perhaps you should garner a little experience in .Net yourself, before you spew massive chunks.

    20. Re:silly objection, and- you can get a linker! by Gyler+St.+James · · Score: 2, Informative

      I've been doing .NET development for a long time now (2 years) and for all intents and purposes, the Framework install and the run-time is the same thing. There is no separate download of the Framework classes and the run-time. The framework is merely class libraries bundled into assemblies. Besides, have you even tried the linker mentioned? I have. I've taken the assembly generated and run an EXE on a machine with no updates and no run-time.

      --

    21. Re:silly objection, and- you can get a linker! by mrlpz · · Score: 1

      I disagree with you, because you can get the "Framework" package to only install the run-time, but end users don't know the difference from a hole in the wall (most of the time). And they couldn't care less. I wasn't arguing that Salamander wasn't a good product. But the fact is that it still generates an assembly, which, even though seriously obfuscated, can still be decompiled a whole lot easier than most stand-alone EXE's.

      I did find a little redeeming humor at your response. "a long time now(2 years)". Dude, that's not a long time. Talk to me after .Net has been around a decade. After it's been banged around a bit. That's...a long time. Just because you and I ( 3 years ) have been programming it for a while, doesn't necessarily make it classify it as a "long time". Now, if you talk "C" ( almost 20 years )...now that, is a relatively long time. Just as someone who's been doing Fortran for 40 years (Any of you guys still out there ? ) might tell ME, that I haven't been programming something that's been around, "a long time". Careful that you don't ascribe the connotation of MATURITY, to something that's barely crawled out of the primordial swamp ( even IF Anders Heljsberg first developed the prototype for .Net over 10 years ago ).

    22. Re:silly objection, and- you can get a linker! by metamatic · · Score: 1

      The jar file can contain your classes and any add-on libraries.

      The idea that you can't conveniently include an entire JRE and library set is false, because I've used software which did so. However, I wish it was true, because it's a dumb thing to do; I'd much rather treat the JRE like any other part of the OS.

      --
      GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
    23. Re:silly objection, and- you can get a linker! by Gyler+St.+James · · Score: 1
      Just curious, but how do you install just the CLR runtime without the framework libraries from Microsoft's installer? I haven't seen this before. It's really just semantics. The CLR itself is separate from the framework (DLLs), but I've never seen how to separate them (other than in the SDK install, which a user won't ever get).

      As for the "long time" bit, hehe, yeah, that's not a long time for a programming language, but it is in today's environment. We'll see how long-lived .NET is in a decade. I've been doing C/C++ and assembly for ages (20+ years as well), but we're talking about the grandfather of almost all languages (yes, I'm still skipping quite a few languages before that, but I consider C the first really modern programming language).

      I was just disagreeing with what you were saying about what a user needs with the salamander product. Yes, it's not a real linker in the sense of 1 single EXE, but it's close enough to what that idiot Joel was talking about. It does allow you to deploy a .NET app without the requirement that the end-user downloads the 22MB framework install (with the CLR). I just want to point that out so that people who read this understand that there is a valid solution for that need and I wouldn't want to dissuade people from going that route, especially with some of the already erroneous information from other posters.

      --

    24. Re:silly objection, and- you can get a linker! by mrlpz · · Score: 1

      There is a redistributable package that's found on the MSDN. It's not easy to locate, I'll grant you that. While I don't think Joel is an idiot ( I'm curious why you think so ), he's at least a curmudgeon with conviction, and I'll grant him that much.

      I'm not a "real big fan" of .Net, but I see it as an "evil that must be wielded, but kept in check". I don't think that Microsoft has a terribly efficient record of keeping their word on a timeliness of delivery, nor adherence to commitments for said deliveries. It's a personal observation from based on past personal experience dealing with them during the development of OS/2, and since then. It doesn't make me terribly confident that they aren't going to just say "fudge it" within their own desktop or backend server suite of products, and skirt around certain features of .Net. The Win32 API isn't going away any time soon ( Yeah...you try writing a system service in .NET, good luck.), but I'm sorry if I'm not left with this "Don't fence me in" impression about .NET.

    25. Re:silly objection, and- you can get a linker! by Anonymous Coward · · Score: 0

      this Joel guy does not know what he is talking about, or he thought he could get site hits by making up a silly complaint about Microsoft.

      True. He's only one of the most balanced commentators out there, able to see both good and bad points in Microsoft. Of course he's just an ignorant whiner. Of course.</sarcasm>

      He does, in fact, have a point, even if you missed it. There is, in fact, no reason why .NET needs to have a monolithic runtime; other languages do manage to separate the runtime from libraries and to link the runtime into the application, and that is helpful.

      The poster elsewhere in this discussion who pointed out that the monolithic runtime makes it easier to apply security patches knew what he was talking about and had a valid point. You, on the other hand, don't, and are talking nonsense. Thank God the Funny mod doesn't give you any karma, because you don't deserve it.

    26. Re:silly objection, and- you can get a linker! by Haeleth · · Score: 1

      you tell me why no one compiles anything to be statically linked.

      They do.

      Ever wondered what the "s" in "/sbin" stands for? Ooh, well done!

    27. Re:silly objection, and- you can get a linker! by Anonymous Coward · · Score: 0

      Just distribute the jar file.

      Of course, this doesn't work for the Windows-impaired, because Microsoft are never going to make it easy to run Java executables.


      Well, I've never had any problems running Java executables - double click on the jar file and it works.

      Maybe my machine came with a Java runtime installed? I dunno, I know I installed one the other day but jars were working like exes before that.

    28. Re:silly objection, and- you can get a linker! by Gyler+St.+James · · Score: 1
      "Not easy to locate" is an understatement. I just spent the last hour looking on MSDN for something like that and haven't found it, but I'll take your word for it.

      As for why I don't particularly like Joel, it has a lot to do with personal experience talking with him and his development philosophies. Although I find he has very clear and concise writing (I do like reading his blog, I'll admit), I just don't buy into all of his world views and how singularly focused those views are. I like to keep an open mind and he seems to have his closed more often than not.

      At some point in the future, .NET will replace the Win32 API as the preferred method of writing for Windows, but you're right in that it won't and can't go away. It's a compatibility issue that MS will be stuck with for decades to come (unless they finally make sense of their OS development). I too feel fenced in with .NET in regards to app development on their platform, but the same is true on almost any platform, even those that provide multiple APIs (like OS/2) to said platform. I'd rather be open to programming for any platform than to be herded into one paradigm just to make a living, but there's always that balance between developing for a platform with a small audience or one with a large one.

      As for writing a system service in .NET, you're right there also in that there isn't a great facility for this yet, but I'm sure that will come with time. It really comes down to the right tool for the job, at least for me. I still defer to use Delphi or C++ when doing low-level stuff (like services and drivers) and .NET/C# for UI stuff. Boy, that sure does make .NET sound like VB of the bad old days, doesn't it? :)

      I have to say, as a side note, that I'm glad this hasn't turned into a spat between two programmers who happen to have differing views, like most posters on here I've had to deal with, and has been a rather constructive conversation.

      If you find a link to the redist package, please feel free to post that as a reply. I'm always open to learning new things and I know I am by no means the end-all of knowledge in .NET stuff (let alone programming in general). :D

      As a final note, you really should try the Salamander product. I just wish there was an open-source one instead of having to purchase someone else's code I could never see. But regardless, it does do what Joel was asking for without the end-user hassles he mentioned.

      --

    29. Re:silly objection, and- you can get a linker! by gnu-generation-one · · Score: 1

      "Just imagine how convienent it would be if every program came with it's own copy of the operating system, modified to work perfectly with that program!"

      Well, plenty of people are releasing Knoppix CDs with their specific application pre-installed, as a demonstration that people can run with minimal fuss. Certainly things like OpenGroupware can come as a bootable CD, and lots of GIS and mapping software is starting to appear as "demonstration CDs"

      It makes sense, when something is big and time-consuming to install or setup, just to put it onto a bootable CD with an operating system, then people can test it in the time it takes them to reboot a spare computer.

  5. Does Java have a linker? by EddWo · · Score: 3, Informative

    They don't have a linker because .Net is a virtual machine Jit compiler as well as massive class library.
    It will just become part of the Windows platform, its already included with Tablet PC, Media Center, Server 2003, Windows Mobile 2003 and it will be a major part of Longhorn.
    No one asks for a linker to statically link to user32 or GDI.

    --
    "Taligent is still pure vapor. Maybe they'll be the last who jumps up on Openstep... "
    1. Re:Does Java have a linker? by aminorex · · Score: 2, Interesting

      The point is that you can't deliver an app
      in a reasonble (i.e. minimized) download,
      to run on most of the Windows systems out
      there: Windows 95, 95 OSR2.5, 98, 98SE, ME,
      NT 4.0 sp6a, and 2000 Pro SP4. .NET is only useful for enterprises in which
      all the systems are "upgraded" (more like
      "migrated") to XP. That's a rare environment.
      It probably only happens in small businesses
      or colleges.

      --
      -I like my women like I like my tea: green-
    2. Re:Does Java have a linker? by aminorex · · Score: 1

      Yes, Java has several linkers.

      For example there is jc.exe, and GNU ld.

      > No one asks for a linker to statically link to user32 or GDI.

      That's because these are stable ABIs. .NET is
      not a stable ABI.

      --
      -I like my women like I like my tea: green-
    3. Re:Does Java have a linker? by Gyler+St.+James · · Score: 1

      Actually, .NET does have a stable ABI with each release of the framework. 1.0 and 1.1 can run side-by-side, so they the 1.0 DLLs become essentially static. It's Java that doesn't have a stable ABI. Have you tried running older 1.0 or 1.1 .java files where they depended on interfaces that are broken in 1.2, 1.3 and 1.4? One of the reasons I don't program in Java anymore. It's not dependable across all versions and try running all of the various JVM versions on the same machine, just to maintain ABI. Ugh.

      --

    4. Re:Does Java have a linker? by llzackll · · Score: 2, Interesting

      This is very true. .NET wasn't even available until recently. In other words..

      If your target audience is using Win98, and they don't want to download the .NET framework, then .NET is not right for you. Can't really be mad at Microsoft for requiring a 24+MB framework download that was not even available until the WinXP days.

      If your software company is distrubuting CD's, you can always put the framework on CD and install it with the app. It is a redistributable component per the EULA.

  6. A Way to Force Upgrades? by miyako · · Score: 1, Interesting

    So Microsoft, wake up, get us some nice 1950s-era linker technology, and let me make a single EXE that runs on any computer with Win 98 or later and no other external dependencies. Otherwise .NET is fatally flawed for consumer, downloaded software.
    Could it be that Microsoft is using this as a way to force people into updating/upgrading their OS? Something like "Oh, I'm sorry, to run newer .NET applications you will have to upgrade to Service Pack X", and potentially as a way to force upgrades, "Oh, you have to upgrade to Longhorn to run newer .NET applications"
    I'm not sure, it might not be this at all, but it seems like a really bad thing for microsoft if that is their plan.
    The only other thing I could think of is that perhaps they are trying to use this as being similar to the Java Virtual Machine in some basterdised way?
    I've never used .NET, and a friend had almost convinced me to install a small Windows partition so I could learn C#, but this seems like a big enough pain in the arse to not even bother when there are other alternatives.

    --
    Famous Last Words: "hmm...wikipedia says it's edible"
  7. You ask why? by dtfinch · · Score: 2, Informative

    Java doesn't have a compile-time linker either. VM based languages tend to only link at runtime.

    You improve one library, retaining interface compatibility, and every program that depends on it benefits without having to recompile. Executable code doesn't get duplicated in memory each time a new process sharing the same library starts. Libraries can benefit from globally shared objects without running the risk that a program compiled with an older version will mess stuff up. Etc.

    But you're right about this being imperfect. Upgrading my .NET runtime caused my Visual Studio .NET to become instable. I'll probably have to get the newest Visual Studio before I can get much use out of it again. It makes everything incredibly slow to load as well.

    Visual Studio .NET does infact include a linker, for the C++ compiler.

    1. Re:You ask why? by aminorex · · Score: 1

      There is jc.exe, and GNU ld, both of which
      link Java programs very nicely, thank you.

      --
      -I like my women like I like my tea: green-
    2. Re:You ask why? by Anonymous Coward · · Score: 0

      Really?

      $ ld Taasen.class
      Taasen.class: file not recognized: File format not recognized
      $

      Maybe gcj+ld can do it, but it clearly doesn't "link Java". (And gcj is a bitch.)

  8. A linker is largely redundant by ezy · · Score: 3, Interesting

    The only three potential advantages to a real linker are:
    a) You dont have to include code you dont use
    b) You can ship "all-in-one" executables that work in any environment (excluding the basic OS interfaces)
    c) global optimization

    If you have an environment that:
    a) Shares library usage between processes, and only pages in parts of the library that are being used.
    b) Handles versioning of library interfaces in a reasonably sane way.
    c) Uses meta-code which can be globally optimized. (.net may not be doing this yet)

    You don't really need a linker. Joel's main complaint appears to be about cross version compatibility (b) and all the cruft you need to install to get .net executables working (uh... .Net itself :-)) (a). I understand this in the short term, but over the long term I think it's going to be less of an issue.

  9. Give me a break by dedazo · · Score: 2, Interesting
    Joel's flagship product is (or used to be) written in Visual Basic. When he talks about "my users download a 9MB installer that has no additional dependencies" he's including the VB runtime along with everything else. That's 1.2MB, not including any additional ActiveX stuff he might use.

    Joel doesn't want a "linker", he wants C/C++ or Delphi or some other language that can create self-contained executables. So the .NET runtime is 25MB. Those are the breaks. His employee wrote this little app in 60 seconds, right? Well you can either do that and download 25MB of runtime or spend 25 hours writing it and not download anything.

    And of course this posted here looks like yet another evil plot by "M$" to (a) lock in customers (b) stifle competition; or (c) kill baby seals. Jeez.

    Considering Joel's track record I'm surprised he framed this "problem" this way. Linker indeed.

    --
    Web2.0: I love when people Flickr my cuil and digg my boingboing until my google is reddit and I start to yahoo
    1. Re:Give me a break by Anonymous Coward · · Score: 0

      (a) and (b), yes. Certainly. Of course!

  10. Joel is a schmuck by Goyuix · · Score: 2, Insightful

    Having never read him before, I can't be 100% sure of the above title, but I can say that I won't be visiting his ruminitions on society anytime soon. I think he is a loud-mouth moron.

    I can't see a good reason why he would want a linker to link the .net environment and runtime into a single executable. That is just plain nuts. Yeah, I would rather have my users download a 30MB file instead of a 20MB runtime and a couple hundred K app... and his part on ranting of all the updates he needed to do - well, just further proof he is not staying on top of taking care of his system. The .NET runtime should not have required him to install anything else besides the runtime. He is clearly clueless when it comes to system administration (or writing untrue things to try to get more people up in arms) if he really wants a linked executable he can drop on a box with no other expectations.

    At the end of the day, the question he should have asked would have been something more analgous to the java compiling goodness in gcc to generate native code and not java byte code. That I could seem some benefits to, but really he should just be programming in Delphi or C++ Builder (not all that different from .NET - written by the same guy after all).

    I stand behind my classification as Joel as an absolute moron. He is nothing more than a bad journalist trying to get people up in arms with his so called facts and loads of ranting.

    1. Re:Joel is a schmuck by Jerf · · Score: 3, Insightful

      I can't see a good reason why he would want a linker to link the .net environment and runtime into a single executable. That is just plain nuts. Yeah, I would rather have my users download a 30MB file instead of a 20MB runtime and a couple hundred K app...

      Actually, he had two good reasons, one of which you winged and one that zoomed right past you, likely because you've never had to support software that you wrote and may have multiple versions in the field.

      First, he objects that users may not download the larger file (and I'd add that some users will balk at installing what is effectively an OS upgrade just to try some software out, especially corporate users), and that as a result those users won't give him money. Unlike free software, a lost user is cash out of pocket. This is not trivial when software is your living.

      This isn't quite what you said because you missed the "money" aspect of the objection, which is critical.

      Of course it's easy to mock Joel, because it's his living, not yours.

      Secondly, he objects that without static linking, he's at the whimsy of both the users and Microsoft as to which .Net runtime his software actually gets dynamically linked to, and observes that there is a "solution" to this virtually nobody can use (so it's not really a "solution"). Again, if his software doesn't run, it's money out of pocket. And again, if you've never had to support software you probably wouldn't understand why it's nice to bundle everything up, as much as possible, into one self-contained bundle.

      I won't go so far as to qualify you as an absolute moron, but you are committing one of the key Moron Sins, which is "Assuming everybody in the world has needs identical to yours and projecting from there." So you're at least partially there with your Rant-From-Inexperience.

    2. Re:Joel is a schmuck by ClosedSource · · Score: 1

      The point is that every environment has its requirements and Joel isn't forced to use .NET. I suspect that users that are still using Win9x at this late date are unlikely to spend a lot of money on new software. He'd be better off focusing his efforts on users that have demonstrated their interest in buying things like Windows 2000 and Windows XP users.

    3. Re:Joel is a schmuck by EnglishTim · · Score: 1

      He'd be better off focusing his efforts on users that have demonstrated their interest in buying things like Windows 2000 and Windows XP users.

      Neither Windows 2000 or Windows XP come with the .NET runtime installed, which means that for anyone to try out your software they've gotta also install all of .NET.

      Sure, Joel isn't forced to use .NET, but he'd like to use it but is prevented from doing so because it's not feasible. He makes a good point that this will slow the adoption of .NET.

    4. Re:Joel is a schmuck by sql*kitten · · Score: 1

      he's at the whimsy of both the users and Microsoft as to which .Net runtime his software actually gets dynamically linked to

      Well, that only means that .NET is no worse than Java. I don't think it's a big deal. And .NET is smarter about library versioning than JVMs are, which can only do it by manual monkeying with environment variables.

    5. Re:Joel is a schmuck by yamla · · Score: 1

      Have you ever statically linked against a large library? Are you aware that most linkers will throw out the parts of the library that you don't use? If you have a small 200K application, it is pretty unlikely that you'd be using the whole .NET library. More likely, you'd be shipping a compressed install package that is a few megs in size (say, 2 - 8 megs), not 30 megs. Now, you are at the size that a dial-up user would consider. Many people in the U.S. and Canada, and most people in Europe, are still on dial-up.

      This is based on my experiences with other libraries, mind you. .NET is slightly different.

      --

      Oceania has always been at war with Eastasia.
    6. Re:Joel is a schmuck by markh100 · · Score: 1

      .NET is smarter about library versioning... I worked for a company developing a 3rd party add-on to one of Microsoft's flagship .NET projects (Microsoft CRM). Microsoft CRM was written for the 1.0 Framework. After a few months, the 1.1 Framework came out. After installed the new framework on our server, CRM completely quit working. We contacted CRM Support on this issue, and they commanded us to immediately uninstall the 1.1 framework. This was frustrating because we were in the process of developing another app on the same server that required 1.1. Microsoft has all this literature on how the 1.0 and 1.1 framework will run side-by-side, and how you can easily instruct your application on which version of the framework it should use, but their own product couldn't get around this issue. We waited for 8 months for them to release some sort of patch to get around this issue, but it was never solved.

    7. Re:Joel is a schmuck by Anonymous Coward · · Score: 0

      At least in the Corporate environment, most users' computers tend to be locked down more or less so that they cannot install major things like the .Net framework, as it requires administrator-level priveleges to do it. Unless there is a significant corporate need to do so, IT is not going to do it for most users.

      So your defense of users of Joel's software in a corporate environment smell a bit like Red Herring, because it is a dead issue for them already.

      Microsoft has been good at least with 1.0/1.1, at least if their propaganda about it stands true. We'll see what happens when .Net 2.0 comes down. Which is where the mandatory OS upgrade will become apparant, because it does not appear to target Windows 2000 users...

      Windows XP probably does have at least .Net 1.0, if not as initially released, then certainly as part of one of the service packs or Windows Updates. Unless I'm writing for some of the things in .Net 1.1, it seems safe to target .Net 1.0.

      Do you not remember any hassles people have had with DLL Hell and different versions of vbrunx00.dll?

  11. How did this post get moderated up? by Inoshiro · · Score: 5, Informative

    All you had was wild speculation ending with, "I've never used .NET,"

    Let's pause a second and see how programs work on a modern operating system.

    There are 2 kinds of programs, typically, in an environment such as your PC: statically linked programs, and dynamically linked programs. Statically linked programs have the library calls included in the binary, wherease dynamically linked programs rely on library implementations stored in a system directory (like \windows\system or /usr/lib). The run-time linker resolves all the dependancies and loads the related libraries for every dynamic application you start (run the ldd command on a binary you have to see the libraries).

    But a .NET program (or a Java program, or a batch file, or a shell script, etc, etc) isn't a binary. It's PCode. It requires an interpreter to parse its Pcode. To make the .NET program stand-alone, ala a statically linked binary, you'd need to include the interpreter, a set of all used class libraries, and any other parts of the environment that are required. A typical 1-3mb application would have to be distributed as a 30mb+ file.

    When you want to run a Python program, you install a Pynthon interpreter. When you want to run a Java program, you have to install the Java runtime environment. When you want to run .NET programs, you need a .NET environment. It's not some crazy lock-in scheme, miyako, it's merely a fact of how virtual machines and Pcode work.

    Before you sit down to learn about .NET, I think you should take off your aluminium beany and learn about how computers work.

    --
    --
    Internet Explorer (n): Another bug -- that is, a feature that can't be turned off -- in Windows.
    1. Re:How did this post get moderated up? by Ashran · · Score: 1

      the msil is made to be easily compiled into maschine code, there is no interpreter as its not interpreted

      --

      Before you email me, remember: "There is no god!"
    2. Re:How did this post get moderated up? by miyako · · Score: 1

      When you want to run a Python program, you install a Pynthon interpreter. When you want to run a Java program, you have to install the Java runtime environment. When you want to run .NET programs, you need a .NET environment.
      I noted that I had not used .NET to point out that some of my notions about it could be quite incorrect, but if you would read my post I postulated that microsoft was merely trying to do the same thing as is done with java etc. I would also assume that it was basterdized because, well, microsoft basterdizes things more often than not.
      You should also note that I said if the lock-in scheme was indeed their plan, it was a bad one. Microsoft is nothing if not good with business (heck, they have to be good at something to have all that cash)
      The author of the article asks "why is there no linker", and my response was (although admittedly not as well writen as it could have been)
      Either A: they want to force us into some upgrade scheme
      or B: they just think they have a better way of doing it, and that java etc do things this way, it's no big deal.
      I finished by pointing out that A would be a bad idea, and B was more likely.
      The thing is, it would be possible for Microsoft to use this as a means to force users to upgrade, just look at some of the crap they have pulled, it's not completely unreasonable to think this is in the realm of remote possibility.
      As for complaining that I simply made wild speculation with a disclaimer and that I need to remove my aluminum hat, well are you new here or what?

      --
      Famous Last Words: "hmm...wikipedia says it's edible"
    3. Re:How did this post get moderated up? by Gyler+St.+James · · Score: 1

      Actually, althought IL is close to machine code, it's still not machine code. The CLR still has to load the IL, compile to real native code (machine code) and then run it. So, .NET IL is still interpreted and re-compiled before running, hence it's kind of slow the first time a particular code path is run. But each subsequent call actually calls the native code version, not the IL.

      --

    4. Re:How did this post get moderated up? by yamla · · Score: 1

      A .NET program does not _require_ an interpreter. To make a .NET program stand-alone, you could either include the interpreter and all parts of the class libraries, etc., or you could 'simply' compile the pcode into machine code, link it, and ship that.

      The advantage would be smaller executables and, with the exception of potential run-time dynamic recompilation benefits from the interpreted version, faster execution. The disadvantage would be tying the resulting application to a specific CPU.

      --

      Oceania has always been at war with Eastasia.
    5. Re:How did this post get moderated up? by Anonymous Coward · · Score: 0

      MS *DOES* want to force people to upgrade. They want to encapsulate the inner workings behind a "framework". At least with Win32/MFC/ATL programming, if you don't like MFC or ATL, you can write your own raw Win32 code. With .Net, MS will finally be able to incorporate much more security behind the scenes: Digital Restrictions Management.

      Whether it is in the interfaces between the hardware and OS, OS and user-level experience, or developers (a modified form of user-level experience in the future...), MS will finally be in control of the whole stream.

      Which makes Linux look so nice.

  12. wow, what planet is that guy from? by ajagci · · Score: 4, Interesting

    For some reason, Microsoft's brilliant and cutting-edge .NET

    Actually, .NET is neither "brilliant" nor "cutting-edge"--it's a modest evolution from Java, which is itself 1970's technology.

    The tool in question? A linker. Here's what a linker does. It combines the compiled version of your program with the compiled versions of all the library functions that your program uses. [...] Instead, .NET has this idea of a "runtime" ... a big 22 MB steaming heap of code that is linked dynamically and which everybody has to have on their computers before they can use .NET applications.

    Well, that's roughly like saying that automobiles leave out the horses and the whip. The whole point of .NET and Java is to run inside a runtime, a runtime that provides garbage collection, dynamic typing, and just-in-time compilation.

    Runtimes are a problem, much like DLLs, because you can get into trouble when application version 1 was designed to work with runtime version 1, and then runtime version 2 comes out, and suddenly application version 1 doesn't work right for some unpredictable reason.

    Well, duh. So, I guess operating systems are a problem, too.

    We solve that sort of thing by having standards and sticking to them. Oh, I forget, besides being rather confused about software in general, Spolsky also actually seems to like Microsoft Windows, so the notion of "standards" and "compatibility" must be rather foreign to him. .NET and Java do have serious design problems. Foremost, safe runtimes like that should run all applications on a machine in a single address space. Then, you can get rid of a lot of useless machinery for inter-process communication, and the overhead gets amortized over dozens of programs. Again, old stuff. But Spolsky's criticism is just missing the point completely.

    1. Re:wow, what planet is that guy from? by Homology · · Score: 1
      Foremost, safe runtimes like that should run all applications on a machine in a single address space.

      Even "safe runtimes" has bugs that might be exploitable.

    2. Re:wow, what planet is that guy from? by ajagci · · Score: 1

      Even "safe runtimes" has bugs that might be exploitable.

      I said "safe runtime", not "secure runtime". It is unnecessary to protect against exploitable bugs between different applications because you don't expect your own applications to try and exploit bugs in the runtime environment to wreak havoc. For example, Gnumeric can already wreck AbiWord files if it wants to, even though they are running in different address spaces; they are running as the same user and can already get at each other's files and memory.

      Besides, Java actually claims to be a "secure runtime", not just a "safe runtime", meaning, it will run untrusted code in the same address space as important, trusted code.

    3. Re:wow, what planet is that guy from? by SuiteSisterMary · · Score: 1

      But wasn't one of the complaints about Windows 9x, and MacOS

      --
      Vintage computer games and RPG books available. Email me if you're interested.
    4. Re:wow, what planet is that guy from? by fatcat1111 · · Score: 1

      Actually, .NET is neither "brilliant" nor "cutting-edge"--it's a modest evolution from Java, which is itself 1970's technology.

      This is analogous to saying about the first teleporter, "Teleporters are neither 'brilliant' or 'cutting-edge' -- it's a modest evolution from telecommunications, which is itself 19th century technology."

      If it's so prosaic, why hasn't it been done (properly) before .NET? Simply because the concept has occured before does not mean that the implementation is uninteresting or unimaginative.

      --
      How Politicians Lie: http://www.factcheck.org/
    5. Re:wow, what planet is that guy from? by harlows_monkeys · · Score: 1
      Actually, .NET is neither "brilliant" nor "cutting-edge"--it's a modest evolution from Java, which is itself 1970's technology

      Some rather respected people in the field of object-oriented programming disagree with you.

  13. Joel is just another Troll by Gyler+St.+James · · Score: 0, Flamebait

    I guess Joel or his programmers couldn't figure out that you can open the project properties and actually select which run-time you're targeting. It's rather easy and doesn't require you to write your own manifest (although you could). The idea behind the manifest is when you have to dynamically link to other people's DLLs or apps and not the run-time. If the 3rd party happens to upgrade to another version, that's okay. That's why they came up with the idea (or rather re-invented) of side-by-side execution, which allows you to specify with version of the 3rd party DLL you want to use. Joel, get a clue, man! I've been doing .NET development for 2 years now and the first thing that I learned about was the versioning aspects that .NET brings. I will admit that there's nothing new or "brilliant" about .NET, other than it's a vast improvement over Java. But come one guy, do a little reading and research before moaning and grunting at Microsoft. I'll even admit I have no great love for MS either. I do love the comment from an above poster that points out the .NET linker available. If only he'd gone a little googling, he could have saved us all a few more minutes on our tickers by not writing such an asinine rant, er, article.

    --

    1. Re:Joel is just another Troll by osewa77 · · Score: 1

      Sadly(?) you are actually right. If he chose to target the 1.0 runtime the time-wasting installation procedure would not have happened.
      -but-
      Afaik Visual Studio targets 1.1 and not 1.0. The fact is Joel wants is users to download runtime + libraries-actualy-in-use; incremental download of the .NET runtime to include those components the currently instaled apps really do need. it makes sense!

    2. Re:Joel is just another Troll by Gyler+St.+James · · Score: 1
      Actually, in VS.NET 2003 (which uses 1.1 by default), you can still choose to target the 1.0 runtime. It's a quick checkbox in the project's properties.

      I understand Joel's point of view. I happen to agree that a linker would be nice, but the fact is, he didn't do the research (have you seen my sig?). There is a linker out there, as pointed out by another poster, and you can *easily* target a specific version (which Joel says you have to run through hoops with a manifest to do). Joels just doesn't understand what a manifest is for. As far as I'm concerned, he's an idiot for saying that making a manifest is so hard. It's actually very easy, as it's just an XML file and there are plenty of examples out there on how to write one. Besides that, you only need a manifest for 3rd party DLLs. If you just want to target between 1.0 and 1.1 of the framework, it's a click-away. But yes, he's right in that people still need to download either 1.0 or 1.1 of the framework, unless you use Salamander's product.

      --

  14. You can statically link libc though by Smack · · Score: 1

    Then you won't need libc at all. Linux (really gcc) has that capability, even if you don't want to use it.

    1. Re:You can statically link libc though by RevAaron · · Score: 1

      Then you won't need libc at all. Linux (really gcc) has that capability, even if you don't want to use it. ... just like you can "link" in the whole, huge .NET runtime- or perl, python, smalltalk runtime- in an executable file. 20 MB hello world apps own me! :)

      --

      Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
  15. wtf by Hard_Code · · Score: 1

    [whine] [whine] [whine]

    Wtf is that rant about? As far as I can tell, the .NET has support for versioning far above any current platform, as it was designed in from the beginning. No, I do not know from practice, but I HAVE read the whitepapers, reviews and interviews. It specifically has provisions for concurrent versions of libraries (even in the same program), and has various compilation and runtime options. This directly obviates the need for static linking in the first place. Java doesn't have a linker either, and has about a 9 MB download last time I checked. I don't know what the hell he is talking about having to download so much stuff. I somehow got .NET automatically and didn't even NOTICE I got it until I opened Add/Remove Programs app, for some unrelated reason. (that is an entirely seperate issue).

    News flash - new technology requires new, usually larger, downloads. BFD.

    OMG I DIDN'T REALIZE I HAD TO PUT GAS IN MY CAR WHAT A RIP OFF!! I'M SO RESENTFUL NOW!!!

    --

    It's 10 PM. Do you know if you're un-American?
    1. Re:wtf by Gyler+St.+James · · Score: 1

      ROFL! I love your post. Someone mod the humor up on this one! :D

      --

    2. Re:wtf by Anonymous+Brave+Guy · · Score: 1
      News flash - new technology requires new, usually larger, downloads. BFD.

      News flash: users on dial-up (that's most of the world, BTW) don't like big downloads, and will mostly stick to older technology in preference to spending hours downloading something new and unproven. Big downloads loses you large chunks of user base. If you're doing it commercially, that means large chunks of cash, which is a BFD.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    3. Re:wtf by SuiteSisterMary · · Score: 1

      If you're on dialup, are you really programming .Net for a living?

      Target audience and all that.

      --
      Vintage computer games and RPG books available. Email me if you're interested.
    4. Re:wtf by Anonymous Coward · · Score: 0

      Who said anything about the developer being on dialup? You seem to have missed the main point of the parent post....

      Big downloads loses you large chunks of user base

    5. Re:wtf by Anonymous Coward · · Score: 0

      If you're on dialup, are you really programming .Net for a living?
      Target audience and all that.


      Joel: "If Microsoft provided a .NET linker, more people would use .NET."
      Slashbot: "Don't use .NET then."

      Um, I think you're missing the point there.

  16. Nuisance by GCP · · Score: 4, Insightful

    where is the surprise in this?

    It's not that it's a surprise. It's just a huge annoyance.

    Microsoft talks about how much easier it is to create Windows apps with .Net than with the old VC++/MFC approach, and that's so completely true that after you see what you can do with C#/.Net, you can't bear the thought of going back to C++/MFC.

    But the fatal flaw for Spolsky and others in his position (including me on occasion) is the delivery of such apps to the enormous installed base if you can't deliver via CD-ROM. Then you're in the same position as people who would rather work in Java or Python or Lisp: your elegant little app has this huge boat anchor of a runtime to drag along with it, and people in the general installed base who get your app via download simply won't put up with it.

    VC++/MFC have a huge boat anchor of a runtime, but it's Win32 itself, so it's invisible. The majority of the installed base out there can be counted on to have a huge library built into Win98 (likewise for Linux), and all you need to statically link is whatever wasn't already included in Win98.

    For a C(++) developer on Win32 or Linux, this doesn't usually add much baggage, so I almost always statically link and save my users from dependency hell.

    But for developers in anything else, the runtime is a major impediment to commercial viability (for certain scenarios).

    At first I wondered why MS didn't just AOL the world with .Net installer CDs in everybody's mailboxes. I gradually came to the conclusion that it's because they were essentially gamma testing it first on those more savvy users who could figure out how to obtain it and install it themselves, especially on the server side.

    It appears as though they plan to give themselves some time to work out the bugs and flaws in .Net and gradually insert it into the new OSes, allowing the upgrade cycle to control the speed of adoption. The least likely to upgrade will be the least sophisticated users that way, and therefore the people least likely to be able to handle the inevitable bugs in .Net will be the last to get it.

    It will take a few years, but .Net is a powerful replacement for the Windows API that will eventually be built in to all Windows machines (and others, if MS gets their way), and then you'll be able to safely deliver a C# app without the runtime.

    Of course it's an open question whether developers like me will be willing to wait. The major attraction of Windows for me is the huge market that the installed base represents. The OS itself is of little interest. But it's hard to take advantage of that installed base opportunity using .Net apps at the moment, and I can't see starting anything new with MFC (Yuck! I'd be stuck doing MFC maintenance for years to come). The best way to take advantage of .Net right now is on your own machine -- some sort of server-based app. Well, if it's a server scenario, then what the installed base is running is irrelevant, and I'd prefer to use something like Python or Java or even Lisp on Linux. (We'll see how C# on Linux turns out with Mono later this year with the release of 1.0.)

    If there were a way to take a 300KB C# app and turn it into a 1.3MB windows *.exe that would run on a plain vanilla Win98 machine, that would change the economics for me as it would for Spolsky. Otherwise, well...we'll see....

    --
    "Those who have never entered upon scientific pursuits know not a tithe of the poetry by which they are surrounded."
    1. Re:Nuisance by arkanes · · Score: 1
      They want to push .NET in the enterprise (thats where they make money, consumers are a secondary market). Hopefully, .NET will then trickle down to home users, and people will want to upgrade because the apps they use at work require it.

      (As an aside, as a C#/.NET developer myself, app deleveopment with .NET only seems easy because MFC was so friggin bad. Using a good toolkit library makes working with friggin Windows Forms feel like ripping my own testes off. It's better than Java and thats about all I have to say for it.)

    2. Re:Nuisance by Zebra_X · · Score: 1

      It's not that it's a surprise. It's just a huge annoyance.

      It won't be, when everyone upgrades to XP, you won't have to worry about this. They won't be making the choice to upgrade either. When people go out to buy a new PC they will get XP installed on it. Give it another year, and most of the consumer population will have it on their PC's.

      Second, the download is 25 megs - really, it is not that bad.

    3. Re:Nuisance by crazyphilman · · Score: 2, Interesting

      Well, ok, I see why you might find this annoying, but look at it from another perspective:

      First of all, because you're compiling to CLI and using a runtime, you don't have to recompile your code every time a vulnerability comes out and you decide your users should patch. They patch the runtime and the app keeps working (knock on wood). A related benefit is that as the runtime improves, your users get a performance boost without you having to lift a finger, if, that is, they're keeping up with their patches (I know, I KNOW).

      Look at a related technology to see this in action: Between Java's JRE 1.3 and JRE 1.4, Sun added a feature that compiles classes to native code and caches them. This is basically an improvement to a runtime that ends up benefitting all code that uses the runtime, without recompiles or rollouts. Users just upgrade their JRE, and poof. Performance boost.

      Ok, another benefit of a runtime is, you don't have to worry about installed libraries, DLL Hell, or any other similar thing. You just make sure your users have the most recent copy of the runtime, and you're set. No more having to figure out dependencies and make sure they get into your MSI. No more having to run RegCrawler on user machines to strip out a dozen instances of the same DLL because some brainiac sysadmin kept re-registering the same dll over and over again (YES, I've had to clean up this kind of thing before, when updating legacy code that hadn't been installed with an MSI -- Ugh). Everything is clean and easy, and everything is where you would expect it to be. Nice for a change, after years of VB6 and dll hell.

      Finally, since the runtime is really only a 25MB download or so, as pointed out by another poster, you can put the install on a mini-cd along with your code MSI and write a script that installs one, then the other -- can't you? It seems to me that that would be relatively trivial. And, everyone who makes a runtime grants developers some form of redistribution rights, don't they? It seems to come with the SDK most of the time.

      I think you're underestimating the value of this approach. Plus, you're overestimating the difficulty of working with it.

      Come on, Strangelove... LOVE the bomb. ;)

      --
      Farewell! It's been a fine buncha years!
  17. I know exactly why and it makes perfect sense. by shadowxtc · · Score: 0, Flamebait

    Whoever wrote that article failed to do step #1: RESEARCH.

    I code in .NET, and very little researh yields phrases like "The .NET runtime has side-by-side execution."

    What this means is very simple: You have a .NET-based graphics program, which I'll call "Imagerizer 1.0", which uses the .NET runtime version 1.0 let's say. You also have a .NET-based database program, "Storzit 2.5", which uses the .NET runtime version 1.1.

    You have BOTH of those runtimes installed, if you want to run both of those programs.

    Imagerizer 1.0 will ALWAYS use runtime version 1.0, however it will use the newest version of 1.0 (for example 1.0.3.3 vs. 1.0.2.2). Storzit 2.5 will always use the latest version 1.1 runtime.

    Simple. No more DLL hell - for a tradeoff of extra clutter. But the runtime will manage it all for you, and you can usually mess around with it more. It's actually much more control given to the end user.

    1. Re:I know exactly why and it makes perfect sense. by Anonymous Coward · · Score: 0

      kill the moderators! another example of unfair moderation, meta-mods, please vote accordingly.

    2. Re:I know exactly why and it makes perfect sense. by shadowxtc · · Score: 1

      Seriously :(. I was only trying to explain the reasoning behind how it works. It's up to everyone individually if they actually like it and want to use it.

  18. If the article's author is out there... by shadowxtc · · Score: 1

    I'd also like to make a few remarks...

    Tell whoever is mucking around with manifests to just stop. I let Visual Studio compile my projects with near-default settings, and they load the proper runtime fine. I, too, fear manifests.

    As for your bad experience downloding 80MB repeatedly from Windows Update, you could have used a centralized Update Server... being a software company, it'd probably be wise to look into.

    As for the premise of your complaint, it does have merit. It would be ideal to be able to link your entire program into an EXE, especially for small apps. However, Microsoft's decision is the right one.

    Everybody complains they're insecure - their response was total lockdown.

    1. Re:If the article's author is out there... by Anonymous Coward · · Score: 0

      Everybody complains they're insecure - their response was total lockdown.

      Everybody complains that they're insecure and that they tend to use updates and patches to lock people in to their software. Their response was total lockdown and even worse lockin.

      The reason some people don't like this is because Microsoft has had many products in the past that were very insecure. People are complaining about .NET because it offers more lockin with only the usual promise of security.

      For some reason, people keep waiting on Microsoft to get something right before praising them. In my experience, they've done enough wrong in the past for me to never bother with them again, neither with business or praise.

  19. Might I add one last thing... by shadowxtc · · Score: 0, Flamebait

    .NET also makes it rather disgustingly easy to have applications which either dynamically generate and execute code, or can take actual .NET code in whichever language and execute it on-the-fly. Though it's not guaranteed in any case that it'll actually compile and run, it's much more likely when there's a well-known set of libraries out there on "every" machine.

  20. Short vs. long term by Anonymous+Brave+Guy · · Score: 1
    Joel's main complaint appears to be about cross version compatibility (b) and all the cruft you need to install to get .net executables working (uh... .Net itself :-)) (a). I understand this in the short term, but over the long term I think it's going to be less of an issue.

    I think Joel's point, which half the flamers on this thread don't seem to get, was that if you're writing software today, and you're trying to get customers to download it tomorrow, writing for .Net is probably not a smart move.

    I realise that .Net theoretically has a decent versioning system. However, as someone who's been responsible for investigating new versions of Visual Studio at two different companies now, I've seen plenty of problems in the real world. VS.Net 2002 and VS.Net 2003 really don't play nicely together for a start, and if Microsoft themselves can't get it right with an application whose entire focus is on .Net, what hope does Joe Developer have? I'd be very wary of risking my whole application by trusting a technology so unproven to get the version control right.

    And as of today, I think Joel's point about download sizes is also entirely reasonable. I bet the critics here are all happily sitting at home, probably in the US, probably with free local phone calls and always-on broadband. I bet most of them also don't realise that most of the world doesn't have those facilities today, and nor are many of them likely to any time within the next few years. I still have the same 56k dial-up modem I bought when I left uni five years ago, because broadband still has too many practical problems here, and I'm a professional developer and part-time geek who spends several hours on-line some days. I only got a flat-rate package about 3 years ago (before that I was paying per-minute) and even now I'm capped in the number of hours I can use each month, so big downloads are not high on my list of Good Things.

    IOWs, as you say, short term Joel's points are very relevant. Later on -- probably 5-7 years away at a minimum -- if 95+% of the Windows user base has .Net installed and/or many more people have broadband, then it might be less so. But 5-7 years is an eternity in software development. For short- to medium-term developments, Joel's comments were right on the money. Using C++ with a good set of libraries is still far ahead of .Net if the size of your executable matters.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  21. Isn't it the installation process? by Anonymous Coward · · Score: 0

    Isn't it Microsoft he is complaining about and not the linker? He is complaining about the installation process of .NET. He is complaining that his brain is hurting and wants a stomach surgery.

  22. I think by aldousd666 · · Score: 1

    I think it's only to lock you into the .Net Framework. There is a runtime necessary so that you have to follow their rules before running apps that use their 'neat' little apis. Microsoft claims that they can then 'increase security to all .NET apps' by only having to patch your runtime files, instead of all your apps. While that may be true on a very very limited scale (say patching an exploitable hole in the runtime api itself), it won't be helpful if the user (of the api, not the end user of the app) does something dumb that exposes a hole. All things considered (well as far as I can see) it's really about locking you in. "We can't have people actually building binary code anymore, then they can run it wherever they want!" (Mono is probably a big thorn in their side, on this note)

    --
    Speak for yourself.
  23. Not a linker by Taral · · Score: 1

    He doesn't want a linker, he wants something to eliminate the need for a VM, some kind of CIL compiler.

    --
    Taral

    WARN_(accel)("msg null; should hang here to be win compatible\n");
    -- WINE source code

    1. Re:Not a linker by Anonymous Coward · · Score: 0

      When you compile a bytecode application for Objective Caml under Windows, what you get is a bytecode file statically linked to the virtual machine.

      Joel wants something like that for .NET. Not a compiler, a linker.

  24. DLL Hell and the .NET runtime. by y0mbo · · Score: 1

    Joel misses an important fact in his article... that the same scheme for versioning in .NET is used for the framework itself. So that when the next version of the framework is installed, your application will use the same old version if needed. In theory, no fuss, no muss.

  25. Joel doesnt understand the architecture by JRSiebz · · Score: 1

    This guy need to understand that .net complied applications need the .net framework to run because of the nature of the language. You can run a java program without its runtime installed , its the same concept. It will not complile into a single executable which can run on its own like c++ for examample, whcih is complied into native code (binary). .net is extremely similar to java (coincidence, i think not), it is just not ported to linux/mac like java is...yet? The java/.net runtime has its advantages, liek garbage collection and some error checking, but it will always run slower than native code. native code can just be run, while java and .net assemblies are interpreted at runtime. Performace hit for programmer firednly feature. Compling nativ code, ex c, is more powerful, but that comes with responsibilty. An example is memory management, which you are responsible for in c, is controlled be the runtime in these runtime langauges.

    A singles exe cannot be run anwhere, only on win32 platforms. A big advantageof java/.net is portablility. One the runtimes are ported to all platforms (*nix, mac, pc) the same complied program will run on all platforms without being recompiled like a c program woudl have to be. The runtime woudl deal with it ewll at runtime.

    I am never reading anythign at the joel guys site ever again. he is uninformed and ranting rampant.

    1. Re:Joel doesnt understand the architecture by JRSiebz · · Score: 1

      geez, i can't type, arrg

      I NEED an interpreter

  26. you said "Knoppix" by tepples · · Score: 1

    Actually, apps for game consoles do contain the entire operating system. So does any app that comes on a bootable Linux CD such as Gentoo, Knoppix, Gnoppix, Mandrake, Lindows, etc.

  27. Class libraries are copyrighted by tepples · · Score: 1

    To make a .NET program stand-alone, you could either include the interpreter and all parts of the class libraries

    The class libraries are copyrighted. Would Microsoft give you a license to redistribute the class libraries? And would newer class libraries work on older Microsoft Windows operating systems?

    1. Re:Class libraries are copyrighted by yamla · · Score: 1

      This is a good point. I had been assuming that Microsoft would be writing the tool to compile and link the .NET source code into a stand-alone application. Obviously, any other company doing so would need Microsoft's permission.

      I don't see much problem (maybe I'm missing the point) using newer class libraries as part of a stand-alone, statically linked application on an older Microsoft Windows operating system, however.

      --

      Oceania has always been at war with Eastasia.
  28. Required upgrades by tepples · · Score: 1

    Handles versioning of library interfaces in a reasonably sane way.

    Microsoft might intentionally make newer libraries incompatible with older operating systems: "In order to run an app that uses System.Foo.Bar, you must pay us $200 per computer to upgrade your operating system to Microsoft Windows Longhorn DRM Edition." Would you consider such a requirement a "reasonably sane way" to "[h]andle[] versioning of library interfaces"?

  29. A tool to force upgrades by tepples · · Score: 1

    10 LET M$ = "Microsoft"

    I don't see much problem (maybe I'm missing the point) using newer class libraries as part of a stand-alone, statically linked application on an older Microsoft Windows operating system

    M$ Internet Explorer 6 doesn't run on Windows 95, and from the information M$ has published, IE 7 probably won't run on Windows 98, Windows ME, or Windows 2000. Likewise, M$ would likely make newer class libraries deliberately incompatible with older Windows operating systems in order to force users to upgrade.

  30. But the .NET runtime fails to install! by Aidtopia · · Score: 1

    I got a cool Logitech gizmo for Christmas that I still haven't been able to use, because it requires the .NET runtime which simply won't install on my PC. I just get a generic "Set up failed" message. Microsoft Customer Support doesn't reply. Logitech Support--after six requests for help--finally offered a few things to try, none of which worked.

    Relying on Microsoft to install a new technology on older machines puts Logitech at a real disadvantage. They should have built a traditional app until .NET is more stable.

  31. Flamebait ??? HAHAHA @ moderators by spiko-carpediem · · Score: 1

    This post explained some questions raised in the overbloated commenting [about side-by-side execution] and should be rated accordingly, not as "0, Flamebait"