Why Doesn't .NET Include a Linker? 113
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?"
Re:We do it because we can. (Score:2)
Re:We do it because we can. (Score:2, Insightful)
Re:We do it because we can. (Score:2, Informative)
Do you mean... (Score:3, Funny)
I've used it-- very effective.
Re:Do you mean... (Score:1)
I've used it - very effective.
One possibilty (Score:5, Insightful)
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.
Re:One possibilty (Score:1)
silly objection, and- you can get a linker! (Score:5, Interesting)
first of all, you can get a linker [remotesoft.com] for
there is nothing different about the way
again, Java does this too. If i have a
what the hell is so different about how
Re:silly objection, and- you can get a linker! (Score:5, Informative)
Re:silly objection, and- you can get a linker! (Score:5, Funny)
Re:silly objection, and- you can get a linker! (Score:5, Funny)
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)
You can statically link libc though (Score:2)
Re:You can statically link libc though (Score:2)
Re:silly objection, and- you can get a linker! (Score:1)
Re:silly objection, and- you can get a linker! (Score:4, Funny)
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.
Re:silly objection, and- you can get a linker! (Score:5, Funny)
I believe emacs has something like that.
Re:silly objection, and- you can get a linker! (Score:1)
Re:silly objection, and- you can get a linker! (Score:1)
"Back"?! Some of us are still using it.
Re:silly objection, and- you can get a linker! (Score:1)
you said "Knoppix" (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.
Re:silly objection, and- you can get a linker! (Score:2)
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 t
Re:silly objection, and- you can get a linker! (Score:1)
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.
Re:silly objection, and- you can get a linker! (Score:2)
Re:silly objection, and- you can get a linker! (Score:1)
They do.
Ever wondered what the "s" in "/sbin" stands for? Ooh, well done!
Re:silly objection, and- you can get a linker! (Score:2)
Re:silly objection, and- you can get a linker! (Score:1)
Re:silly objection, and- you can get a linker! (Score:2, Informative)
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 app
Re:silly objection, and- you can get a linker! (Score:1)
Re:silly objection, and- you can get a linker! (Score:2, Informative)
Re:silly objection, and- you can get a linker! (Score:1)
I did find a little redeeming humor at your response. "a long time now(2 years)".
Re:silly objection, and- you can get a linker! (Score:1)
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
Re:silly objection, and- you can get a linker! (Score:1)
I'm not a "real big fan" of
Re:silly objection, and- you can get a linker! (Score:1)
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 m
Nuisance (Score:5, Insightful)
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
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
It appears as though they plan to give themselves some time to work out the bugs and flaws in
It will take a few years, but
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
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....
Re:Nuisance (Score:2)
(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 hav
Re:Nuisance (Score:2)
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.
Re:Nuisance (Score:3, Interesting)
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
Re:silly objection, and- you can get a linker! (Score:2)
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.
Re:silly objection, and- you can get a linker! (Score:2)
Re:silly objection, and- you can get a linker! (Score:2)
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.
Re:silly objection, and- you can get a linker! (Score:2)
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.
Does Java have a linker? (Score:4, Informative)
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.
Re:Does Java have a linker? (Score:3, Interesting)
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.
all the systems are "upgraded" (more like
"migrated") to XP. That's a rare environment.
It probably only happens in small businesses
or colleges.
Re:Does Java have a linker? (Score:2, Interesting)
If your target audience is using Win98, and they don't want to download the
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.
Re:Does Java have a linker? (Score:2)
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.
not a stable ABI.
Re:Does Java have a linker? (Score:1)
A Way to Force Upgrades? (Score:1, Interesting)
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
How did this post get moderated up? (Score:5, Informative)
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
But a
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
Before you sit down to learn about
Re:How did this post get moderated up? (Score:2)
Re:How did this post get moderated up? (Score:1)
Re:How did this post get moderated up? (Score:2)
I noted that I had not used
Re:How did this post get moderated up? (Score:2)
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.
Class libraries are copyrighted (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?
Re:Class libraries are copyrighted (Score:2)
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.
A tool to force upgrades (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 us
You ask why? (Score:3, Informative)
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
Visual Studio
Re:You ask why? (Score:2)
link Java programs very nicely, thank you.
A linker is largely redundant (Score:3, Interesting)
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
Short vs. long term (Score:2)
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 r
Required upgrades (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"?
Give me a break (Score:2, Interesting)
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,
Joel is a schmuck (Score:2, Insightful)
I can't see a good reason why he would want a linker to link the
Re:Joel is a schmuck (Score:4, Insightful)
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
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.
Re:Joel is a schmuck (Score:2)
Re:Joel is a schmuck (Score:2)
Neither Windows 2000 or Windows XP come with the
Sure, Joel isn't forced to use
Re:Joel is a schmuck (Score:2)
Well, that only means that
Re:Joel is a schmuck (Score:1)
Re:Joel is a schmuck (Score:2)
wow, what planet is that guy from? (Score:5, Interesting)
Actually,
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,
Well, that's roughly like saying that automobiles leave out the horses and the whip. The whole point of
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.
Re:wow, what planet is that guy from? (Score:2)
Even "safe runtimes" has bugs that might be exploitable.
Re:wow, what planet is that guy from? (Score:2)
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
Re:wow, what planet is that guy from? (Score:2)
But wasn't one of the complaints about Windows 9x, and MacOS
Re:wow, what planet is that guy from? (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 uni
Re:wow, what planet is that guy from? (Score:2)
Some rather respected people in the field of object-oriented programming disagree [eiffel.com] with you.
Re:Joel is just another Troll (Score:1)
-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
Re:Joel is just another Troll (Score:1)
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 understa
wtf (Score:2)
Wtf is that rant about? As far as I can tell, the
Re:wtf (Score:1)
Re:wtf (Score:2)
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.
Re:wtf (Score:2)
If you're on dialup, are you really programming .Net for a living?
Target audience and all that.
Flamebait ??? HAHAHA @ moderators (Score:1)
Re:I know exactly why and it makes perfect sense. (Score:1)
If the article's author is out there... (Score:1)
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 t
I think (Score:2)
Not a linker (Score:2)
DLL Hell and the .NET runtime. (Score:1)
Joel doesnt understand the architecture (Score:1)
Re:Joel doesnt understand the architecture (Score:1)
I NEED an interpreter
But the .NET runtime fails to install! (Score:2)
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 i