Posted
by
CmdrTaco
on Wednesday May 02, 2007 @09:08AM
from the write-once-run-everywhere-that-is-windows dept.

Michelle Meyers writes "Just days before Microsoft claimed to be making parts of the .NET CLR "available" to other platforms, NeoSmart Technologies had published an article bemoaning and blasting Microsoft's abuse of it's developers by pretending .NET was a true cross-platform framework when they're doing everything in their power to stop it from being just that. Of interest is NeoSmart's analysis of how Microsoft has no problem making certain portions of .NET available to Mac users — just so long as its distributed under an "open source" license that forbids any and all use of the code except for educational purposes — yet are terrified of the very thought of .NET being available to *nix users, even if that's to the benefit of .NET developers everywhere. Even more interesting is one of the comments on that article linking to legal documents in which Microsoft employees discuss the (im)possibility of creating a cross-platform code and UI framework, years before the .NET project even started!"

I always figured the whole "cross-platform" marketspeak was just a ploy to take some of the wind out of Java's sails. MS wanted people to stop jumping on the Java bandwagon and start jumping on the.NET bandwagon, so they made it sound like.NET was (or would be in the future) more widely usable than it is.

Absolutely right. Microsoft was originally pushing.NET as a 'better Java', and in some ways, it actually was better. But in the way that really mattered to most Java developers, it was much worse. Its cross-platform nature was the main appeal of Java. Yes, the language may have been viewed as an improvement, and the 'managed code' approach to security is nice. But 'write once, run anywhere' was the main selling point of Java.

So how did Microsoft 'compete'? First, by deliberately sabotaging the cross-platform nature of Java, and Second by implying that their Java clone was cross-platform as well.

And the saddest part is that if Microsoft had been broken up by the Justice Dept when it should have been,.NET probably would have been made truly cross-platform. Then it could have competed honestly with Java.

So how did Microsoft 'compete'? First, by deliberately sabotaging the cross-platform nature of Java, and Second by implying that their Java clone was cross-platform as well.

It might appear that Microsoft competed by implying that DotNet was cross-platform, but I'm not so sure that it had much effect. From my own perspective, it seems that Microsoft's competed much more frequently by convincing people that they don't need to be cross-platform, because all their customers who matter either use Windows, or

Er, I'm no fan of.NET, but the Help Desk webcomic isn't exactly the best source for objective and serious assessments of Microsoft products. Several programming languages have been built for.NET and programs that are built with these will generally require the.NET runtime to run. Although this is irrelevant to the well-definedness of the concept, most people tend to acknowledge that these languages, perhaps C# in particular, are far better than Microsoft's earlier offerings along these lines, although they may of course not be everyone's cup of tea for various reasons including but not limited to their being tied to a closed system and their being generally non-cross-platform.

You may not like the framework, but there is no longer any confusion about what.NET is. You'll notice that the comic you linked to was from 2004.

What.net is now is completely different from the vast swarm of swirling spin and angry buzzing buzzwords that poured forth from Microsoft when that concept was spawned, half-formed from the bowels of that beast. It was going to revolutionize the world, one-up.mac on the personal services side while providing corporate services that scaled to millions of users and provide a synergistic end-to-end mashup of all business processes with qualitative and quantitative analysis of everything at once. dotnet was going to bring the ultimate in efficiency and productivity to every one of your workers, from the CEO all the way down to the guy who screws the plastic case together and puts it back on the conveyor belt. (Remember the cars on demand ad, with the robot painting the cars as people decide what color they want?.net made that possible!) There was going to be windows.net, office.net and so on, all of them designed to work with The Intarweb in new and wonderous ways that would blow the minds of every lesser being if so much as a hint of their power was whispered at them from across the room.

Now it's just a runtime for a bytecode interpreted language. Whoopity-doo.

That's the Microsoft marketing machine. Disregard facts, say anything and everything to keep the developers worshipping at the altar of Redmond, and then, once you've once again kept them locked in, allow the truth that was oh-so-much less than fiction trickle out.The fact is that if you're not interested in cross-platform coding, then use.Net. It's really no different than using VB6 or any other Windows-specific development environment. If you want true platform independence, then Java is still the onl

.Net is a programming framework. C# is a Microsoft developed language, used pretty much exclusively in creating.Net applications (however there are other.net compatible languages, C# was just designed originally to use with.Net).

No. As I see it (and there's more than one way to see it).NET is essentially an API and virtual machine offering that API. C# happens to be a high level language that maps very closely onto the virtual machine language, but in theory any language can compile to that machine language (and many do -- C++, Java, VB, Python, Ada, Eiffel, and so on). I like it as an API (at least at version 2.x), the VM makes multi-language programming a cinch, its memory manager really does seem to eliminate a lot of classic memory bugs, and its deployment model moves away from huge, centralised registries. But it comes at the expense of bloat and the speed penalty of an extra layer between the code and the metal. IMHO that's a reasonable design choice to have to make. If you're developing for MS Windows I reckon.NET is a decent design choice as long as you're not particularly size or speed constrained. If you're developing for anything else -- well, try starting here: http://it.slashdot.org/article.pl?sid=07/05/02/133 6216&from=rss [slashdot.org].

... if.Net is an API there doesn't seem much point in porting it. Taking into account that I'm not a programmer and have no clue what I'm talking about:) I don't see how you can effectively port an API that was designed to hook into a specific operating system without spending an enormous amount of time and energy on it.

.NET encompasses the API (actually a huge set of APIs), as well as a virtual machine (known as the Common Language Runtime, CLR), as well as a set of languages (like C# and VB.NET) and a whole lot of infrastructure designed to support those languages and the applications written in them. Such a system can certainly be made portable, and Java did that (but with a single official programming language) before.NET came along. But you're probably correct that the Windows-specificity of.NET means that making

It probably is an enormous amount of time and energy to port it -- ask the Mono folks. The benefit is code portability across platforms. That's why Tk/Tcl has been ported to multiple platforms, that's why wxWidgets has been ported to multiple platforms, heck, it's even why Java Swing has been ported to multiple platforms. And they're (mainly) just the GUI side of things;.NET offers a lot of other stuff too. Of course, it's the "lot of other stuff" that causes the bloat. Remember, it's not just an API, it'

In non-programmer terms, if C# (the language) is thought of as sheet music for some unknown instruments, then the runtime is the band, and the API is the instruments themselves. You need the instruments (API) to do something useful with the sheet music and the band. The instruments should be implemented to result in a tune that most closely resembles the sheet music author's intent. It doesn't have to be 100% the same sounds. So there doesn't need to be a 100% functionally equivalent API, just one with the

I like it as an API (at least at version 2.x), the VM makes multi-language programming a cinch, its memory manager really does seem to eliminate a lot of classic memory bugs, and its deployment model moves away from huge, centralised registries. But it comes at the expense of bloat and the speed penalty of an extra layer between the code and the metal. IMHO that's a reasonable design choice to have to make.

Actually, it's faster than many think. Remember that the bytecode was optimized to be JITed rather than interpreted from the very beginning. The easiest way to check on it is to run your.NET program from within Visual Studio, set a breakpoint, and then go into "Disassembly" mode. You'll see what the JIT compiler made out of your code. I've found that for math, pointer operations, and method calls, it's pretty much the same as the output of a C++ compiler, except that you can't avoid checks for null reference on method calls (though it does not check for that repeatedly if one check is enough). Well, there's still the penalty from GC, and that one is harder to account for - but still, there really isn't much reason to pick C++ over C# for speed, unless you really really need that 3-5% extra.

If C++ is gonna be faster than C# there has to be a reason. If you are going the write the same program in C++ and C# there won't be much speed difference (3%-5%, 30%-50%, whatever). If you want C++ to be faster you have to write a different program using the features that sets C++ apart from languages like C# or Java. When you can avoid allocations on the heap and allocate on the stack instead, when you can give the compiler extra information by using the template system where C# generics can't or when you

Well, there's still the penalty from GC, and that one is harder to account for - but still, there really isn't much reason to pick C++ over C# for speed, unless you really really need that 3-5% extra.

If you're choosing between C++ and C# runnung under.NET then C# may have the edge, being closer to the VM language, but it's a tough call because of the GC issue (and because C++ optimisation is pretty mature).

I think a lot of confusion comes from the fact that different parts are commonly referred to by the same name, and the parts that share names are different between C#/.Net and Java. Hopefully I haven't just confused you even more.

I hear this joke on Slashdot all the time, but I don't get it, what is it that you guys fail to understand about.NET? It's not really hard to understand what it is or what it does if you spend 20 minutes trying to figure it out. I will definitely agree when they launched it they didn't seem to communicate the product to the marketing team well, and perhaps the argument could be made that they still haven't... but how does that change the reality of what the product is?

It's true that.NET used to be something totally different (some sort of internet computing initiative), and then it wasn't clear, Microsoft seems to have settled on it as an actual product. It's a programming framework. I'm not a programmer so I can't tell you what's good about it, but it seems to be an actual thing now.

You're exactly right. The nice thing about it is that it's comprehensive... it makes it simple to just get to work, instead of hunting down functionality written into various resources maintained by different people, all of which need to be obtained separately and glued together. Think of it like Java, except that the language you write in doesn't have to be Java, you pick the one you're comfortable with. Ultimately it all gets compiled into the same thing, so language choice has been reduced (almost) to

Is there anyone, anywhere who thinks Microsoft will ever do anything that's really free [gnu.org], and therefore portable, cross platform and all that other stuff they would like to say about.NET? The more they hype it, the more obvious the shortfall.

agreed, and while Microsoft's implementation may not be free or portable, I've yet to see a good reason why Mono doesn't make.NET portable. Admittedly, Mono isn't completely finished, but any.NET applicatino that runs in Mono (and it's not unheard of) is an example of portable.NET

A software product/framework can be portable, cross platform without being Free.

It's not portable if you can't move it to a platform of YOUR choice. Something that's not free may have SDKs for more than one platform, but that does not really make it portable. Being "open" does not help either. They could publish their entire source code but it would not be free if it was patent and copyright restrictions that keep you from doing what you want with it.

It's for the customers man. Those poor thoughtless, ignorant, and mostly naive people who have bought into Microsoft's lies and are now stuck with them with no way out. Like a cute fuzzy forest creature following a food trail into a dastardly trap. You feel sorry for the thoughtless creature and want to help it out of its cage. So too is the desire to lead the caged masses out of the trap(s) Microsoft has lead them into.;-)

Some people have a lot more of a problem with Microsoft's business practices than their products. I think I might be among them, at least, while there is significant room for improvement, I don't think their products are all as bad as detractors say they are.

You gave VB as an example, and when I've programmed in it, it didn't seem so bad in my opinion. I think what gave it a bad rap is more that programmers were using it improperly and causing problems.

"Terrified" isn't really the word, but "paranoid" would probably do. Microsoft, as an organization, doesn't like to compete with other companies. So, their way of doing business is to rig the system so that they have such an overwhelming competitive advantage they don't have to compete. This is why they are paranoid about someone figuring out their file formats, certain network protocols. And they're paranoid about their army of developers being able to quickly and easily develop for other platforms. Look at their actions and you'll see that.

Frankly, that paranoia got them the $50B in the bank, so it's hard to argue against.

That said, they have as much interest in making cross-platform development tools as they have in supporting ODF, and basically for the same reason. The WWW is one of the only truly cross-platform development environments left; why do you think they want so badly to make a "flash-killer"? It's not about flash - it's about the web.

Indeed. If Microsoft has a fault, it's the fact their marketing does claim they'll be just as cross-platform and open, as Adobe Flash is, as a web platform (talking about Silverlight and the open-sources CLR here).Adobe open-sourced part of the platform as they feel the heat from Microsoft. Microsoft did the same as they feel the heat from Adobe (yes, having 50 billion in the bank doesn't mean they're immune to failure, so they DO react quickly to competition).

It sure seems like ANY company who makes software for Microsoft Windows is Microsoft's competition these days. Get it? Anybody who starts to become profitable on the Windows platform is a likely target for destruction by Microsoft. Talk about a love/hate relationship. I guess winning the lottery and building on the Microsoft Windows 'platform' have alot in common.Oh, and I'm sure MS.Net is such a great tool that Microsoft would NEVER consider twisting, tweaking, and manipulating it to serve the purpose of

It sure seems like ANY company who makes software for Microsoft Windows is Microsoft's competition these days. Get it?

I wonder if you actually get it. Windows-only applications that are useful and popular make Windows stronger. Microsoft will lead the desktop OS market for a long time to come, because apps make it useful.

Adobe's a danger to Microsoft not because it's making software for Windows, it's making *cross-platform* suite that makes Windows less relevant, and now they're owning the cross-platform r

No one is asking Microsoft to give.net away, we're just wondering why a supposedly platform independant, er, platform isn't available for much in the way of non Microsoft platforms.The reason you can't use.net on Linux has got nothing to do with.net. If the only consideration was.net then Microsoft would make more money by making it available for as many platforms as they could rather than restricting it to Windows.

The problem with doing that, for Microsoft, is that if people can run their.net applicat

The reason you can't use.net on Linux has got nothing to do with.net.If the only consideration was.net then Microsoft would make more money by making it available for as many platforms as they could rather than restricting it to Windows [...]

all their products are forced to bow down before the overwhelming goal of maintaining a Windows monopoly rather than being allowed to fulfil their true potential.

Why is any company expected to kill its most profitable product, so some other less profitable product ca

Find that Microsoft internal email where they say "cross platform will never work" and "lets steal Java" and then come back and tell us how much effort Microsoft put into.NETI'd prefer to eat my own gonads than infect my system with a CLR, speaking of which haven't Sun just open sourced Java:P

I've read the memo, and I don't think it's so terrible. Microsoft has reasons to not have believed in crossplatform, because they've tried it before and it failed - the first version of MFC was cross platform (OS/2,

Why is Microsoft the only company constantly expected to make decisions anti to their business model?

I think Slashdot is pretty consistent in expecting companies to make decisions in favor of Slashdot readers. And when they don't, we expect them not to lie to us too much.

The problem with Microsoft is that their business model, which involves creating a fair bit of vendor lock-in and maintaining their monopoly by any means necessary, is one that doesn't fit well with either of those criteria.

Apple just did what they always do, which is to read the tea leaves sooner than the competition. DRM is limiting what Apple and others can do, but unlike the others, Apple doesnt mind taking a short-term risk in favor of a long term goal. Apple's foresight is the only reason they still exist as a force in the marketplace.

In that Apple customers have a religious zeal for their products, this decision is NOT against their business model.

hey, that's great, Microsoft is doing what HP had done with Java 10 years ago. Well, you don't know this because when HP went to productize the HP Jornada with the Chai JVM and all Java application framework/GUI, the loss of Microsoft marketing $$ from their WinCE handheld line was enough to end the project.

So it's great to see developers getting exactly what Microsoft wants them to get. And only TEN YEARS later. Go Microsoft!

I think that Sun should pour a bunch of money/time into Mono, to make it ready for prime time. This would allow them to have.Net on sun systems. I think that could play very well for them..Net is a great framework for developing applications, but I've always found that IIS is a little lacking for running large enterprise systems.

That's the whole point of my post. People could run Java and.Net on the same hardware. You could deal with one company, and have both platforms. I would love to be able to run.Net web services on a server that's a little more robust.

Simplicity. I hate MS to my very core, but I can whip up apps in C#.NET faster than I can in Java. 99% of the time I don't care about portability. I just care about getting things done on time. Of course, then there's the other times when I have to use MFC for various reasons, and that pretty much cancels out any gains I got from using C#.NET...

Just to clarify: I cannot believe that it is the language (C#) that you are faster in than Java. I strongly suspect you are talking about the IDEs and/or GUI development tools of the C#/.NET platform. If I'm wrong, could you highlight what you mean by "whip up apps" ?

It may be preinstalled in Windows *Vista*, but it sure as hell is not preinstalled on XP.

Instructing end users to install this and that.NET framework is a common problem. As is explaining the fact 'WTF why do I have to install.NET 1.1, I already have 2.0!' - most users don't understand that the two can (and in some cases should) coexist.

As a.NET developer, I wish to God MS would just make the little error box that tells you the thing you're trying to run can't run without version X of the.NET framework have a button that says, "Click here to download and install it" instead of just failing. So every.NET program you make has to have its own bootstrapper in native code to make sure they have it or include a 22 meg installer for it in your own installer (assuming you're using an MSI [Which I'm not very good with, so maybe there's a way to

Er, kinda sorta, depending on how you get Windows installed (often depending on when it was installed). And what.Net version you need. So, really, effectively, "no, it isn't". Your helpdesk might install it for you, or the vendor might install it on the image they use for their retail machines, but that's not much different than if they'd done it with some version of JRE.

Great. Languages that work on only one platform, and are locked into the whims of a single vendor that has a history of monopolistic anti-consumer behavior. Give me a little more work to get my system available to 10-20% more people any day.

MS want you to use their platform, just like SUN saw Java as a means to ship their hardware and Solaris. This surprises you why? Care to mention some of these bugs? I have been using both Java and.NET for several years and the bug counts for both platforms are quite low.

and don't even get me started on ASPX vs JSP

You are right, ASPX is a vastly superior and cleaner model for web development and does not require learning 5 different Java web frameworks to g

Here's a simple example.When creating a virtual directory under IIS for apsx pages do you set the application up for Scripts or Scripts and Executables?

Answer.You setup for scripts, well unless that fails in which case you have to setup for scripts + executables for no apparent reason leaving IIS vulnerable to a hacker dropping a cgi into the directory.

Other implementations of.NET are kind of stupid anyway, and, like it or not, Mono really isn't very useful. Anyone who does development on Linux/Mac/anything that isn't Windows will just use native code, or Java - probably because writing a native app isn't nearly as difficult on other platforms, and Java actually is write once, run anywhere (well, closer than.NET, anyway).

The only platform that benefits from.NET is Windows; have any of you written a native code Windows app (I'm sure many of you have)? The code is a nightmare and makes my eyes scream. With Windows, you really, truly need a system like.NET to make developing any non-trivial app even remotely possible, unless you want to spend 1,000 hours writing fucking COM shit (which I sure as fuck don't).

Which is probably why the ``Yellow Box'' in Mac OS X was so named. But that sort of attitude on the part of Microsoft goes a long way towards explaining their hostility to a true cross-platform solution.

With the proliferation of Web Applications and SOA, and the diminishing relevance of desktop software, it's in Microsoft's best interest NOT to make it cross-platform.

Let's say that a full implementation of the.Net framework was available for *nix or OS X - all of the framework libs, ASP, WinForms, etc. What incentive would I have to fill a Web server farm full of thousands of dollars of Windows Server licenses when I could run my ASP.Net apps on Apache? The only real costs to add machines to the farm are hardware-related..Net already has providers for Oracle and MySQL. Suddenly, Microsoft's Operating systems and platforms become irrelevant to developers who have years of experience and time invested in learning.Net.

Please forgive the grammar lesson, but this is the third time I've seen this error this week. And geeks should understand me more than anyone: you work with languages and grammar of your own.
"abuse of it's developers"
Here's your rule of thumb, author:
1. it's = it is (it's a beautiful day to bash MS)
2. its = belonging to it (its brain had been washed by Ballmer)
3. IT's = ah,now that could be either "belonging to the IT dept." or "I(nformation)T(ech) is..."
So the correct spelling of the above would b

I used to comment on it, but Taco got pretty hostile, he called me an asshole for mentioning it. And there are plenty of fellow travellers who'll mod you troll as well. So I gave up. They're illiterate and proud of it. As hopeless as pointing out the dupes, the three-year-old blog messages promoted as "news", or the hoaxes taken at face value.

Nobody with any sense is going to believe any cross-platform claims made by Microsoft anymore. The Windows platform is their lifeblood, and they'll do whatever they have to to artificially bind people to it. That's why they're fighting and delaying all attempts to truly open up their connection protocols and file formats. On a level playing field, people would desert Windows in droves, and Microsoft knows it.

Honestly, I don't see how this is even still open for debate in 2007-- Microsoft showed their true colors w/r/t portability after they added Windows-only extensions to Java. And that's if you ignore their prior attempt to balkanize the web and cause pain for anyone not running Windows IE.

Their "Flash-killer" and their "PDF-killer" and any other allegedly-open standards they try to foist off on us should be ignored and allowed to die. If we allow them to get a foothold, we deserve everything we get.

The whole point to the.NET framework is lock-in. It's the classic trade off Microsoft has always made. Back in the early 90's you could write Windows 3.x apps with standard C++ language tools, but if you used their framework you got to market 6 months quicker because you didn't have to create your own windowing code. So, you could hit 90% of the market six months faster and you did, but then you gave up cross platform C++ by relying on their windows only libraries, and thus your software didn't work on Mac. That was the play then, and it is the play now.

By developing for the.NET framework, you get a lot of things. You get easy install kits, a 'contemporary professional' look and feel, you get drag and drop design, and you get cross platform use from the standpoint of different windows desktop, server, and mobile platforms.

If you're willing to limit your app to Microsoft platforms,.NET saves you time and money on development. It really does. I prefer to write in Java, but when I'm doing something within the.NET scope, it makes sense to use it.

The whole point of this play is to tie users to Windows platforms. They're in business to make money, and this is one way to continue doing that.

Java was created specifically to provide an alternative to Microsoft based development as a way to thwart Microsoft. That was a (not the, but a) primary goal of its development and licensing structure from the world go. It wasn't created to make money and while its goals are laudable, they aren't always realistic. It has been an abject failure at the desktop and even as browser based applets. A huge amount of effort went into making it useful for web servers (j2ee) but even those are barely cross platform and are themselves rife with vendor lock in. It's not like you're ever going to host IBM's portal product on someone else's J2EE server instead of Websphere after all.

Microsoft won't make.NET available to other platforms than their own, just because it's the only thing that keeps developers and architects from moving to a more stable Unix-like solution.

Another problem is that Windows is not POSIX compatible. Sure you can get the add-on that makes it a bit more POSIX-like but still.NET developers (unless they're knowledgeable on the subject) won't use the POSIX-compatible definitions in.NET/C# because they're fed/learned to use the 'simple' Windows way. Eg. defining a path. You could define a path as follows (yes, in.NET): (pseudocode): $userdrive + $platformseparator + dirname + $platformseparator + filename. Every developer though uses $DRIVENAME + \DIRNAME\FILENAME making it utterly inflexible to be used on another platform.

So what you're saying is that what they said some years ago shouldn't be taken serious anymore? Why should I take anything said by MS now serious? Why should I believe that what's being spun today holds any meaning in the future if I am not supposed to believe what I was told earlier?

Don't get me wrong, but when a company makes a statement or announcement, there are two ways to deal with it. Either believe it and expect it to happen or declare it bunk and handle it accordingly. And if the former is expected, the results should warrant it. Either MS follows its words with actions or it has to accept that people ignore their announcements, or, worse, read them for the same reason they read the Prawda: To know what will certainly NOT happen.

Why yes, of course because we all know that Microsofts strategy today was largely determined yesterday afternoon. A large multinational company like Microsoft with product lead times measured in years would never have discussed the actions they're taking today 5 or 6 years ago would they. You muppet.

I view.Net as Microsoft's version of RPG. IBM still doesn't sanction moving RPG anywhere except AS400/iSeries/i5 and I wouldn't expect them to ever. I see.Net as Microsoft putting themselves in a smaller box so they can move from low cost commodities to high(er) profit support contracts and perhaps non-configurable hardware. They seem to want to be like "so-and-so" but not actually do business like that.

I think the biggest problem is that too many people outside want to make the Microsoft stuff work

So what, computers don't move forward? People don't change their minds ever? You're attempting to justify a stance because of discussions years ago? If that is true, shouldn't you be a train driver because that's what you said you were going to be at age 6?

I care. I maintain, and develop for, windows systems all day... then come home to all linux systems with the exception of an XP Pro VM I keep tucked away for emergencies. I'm not switching frameworks, and the business is not switching platforms. What's more, like most.net developers, I like the framework and the dev environment. They're the sort of things that MS actually got right.

It seems to me that the popularity of.Net should be obvious to those who frequent slashdot.

Why should they be afraid? Because given 30 years and more money than the GNP of Texas they can't come up with a better OS than a finnish nerd's geek vanity project, or a better language than c++. They should be afraid because the future is Open.