Microsoft Common Language Runtime To Be Cross-Platform
axlrosen alerts us to a Microsoft sleeper announcement from Mix07: a version of its Common Language Runtime will be available cross-platform. The Core CLR shows up as part of the Silverlight SDK that Redmond is open sourcing. From the blog posting: "The biggest Mix '07 announcement made on opening day of this week's show was one that Microsoft didn't call out in any of its own press releases: Microsoft is making a version of its Common Language Runtime available cross-platform. The CLR is the heart of Microsoft's .Net Framework programming model. So, by association, the .Net Framework isn't just for Windows any more."
Now supporting XP and Vista!
Eviscerati.Org: All Hail the Eviscerati
Is that, like, it runs on Windows Vista _and_ Windows XP?
"National Security is the chief cause of national insecurity." - Celine's First Law
Currently, Silverllight 1.1 is x86 only. It won't run on PowerPC based Macs, just the ICBMs.
For a logistical standpoint, that doesn't seem very cross platform to me if they've already chopped off half of the other platform with the 1.1 release...
Yes, this is my current soapbox.
M$'s way of saying it doesn't work at all
"Stallman says add to this code and you are one of us. Gates says use this code and you belong to us."
so you're...guilty by association! *scnr*
Come... together we shall mock the world!
Eviscerati.Org: All Hail the Eviscerati
Wasn't .NET already cross-platform with the introduction of Mono?
My blog
That's great. Now if Microsoft would actually implement a few web standards (rather than spewing out more Microsoft "standards") I might actually trust them. As it happens, though, I don't. Internet Explorer has the absolute worst track record of all the modern web browsers. It's fairly straight forward to tune Javascript/DOM code to run in Mozilla, Opera, and Safari. But Internet Explorer? Meh. Let's just say that it adds another 30-50% to the project time.
Now Microsoft wants to broadcast their wonderful multimedia technology that will enhance the web, be cross-platform, show cool multimedia-type stuff that we can already do with SVG or Canvas. Woohoo. Whoopdedoo. Wow.
Not.
This smacks of yet another Microsoft embrace, extend, and extinguish stratgey. "Yeah, guys. Come on in. Here's the Silverlight plugin which works on Macs. We're going to be real buds with these Mac peoples! We're even porting a teeny bit of the CLR (ed: And you thought Java was browser bloat?) to make our XAML/Avalon/WPF technology work for you guys. Oh, did we mention that Macs are kind of slow? (ed: They are now!)"
Next version: "We haven't seen enough customers demand support for the Mac. So we're dropping the plugin for that platform and adding some amazing new features to the Windows version." *FWHHOOOSH* Extinguished.
If Microsoft really wanted to compete, they'd be the first to implement the OpenGL API for the Canvas tag that the WHATWG has been working on. Oh, but wait! That wouldn't be Window-y enough. It would have to be the DirectX API through Javascript, dontchaknow.
Javascript + Nintendo DSi = DSiCade
From denial, to grudging acceptance, to surprised admiration, is how the process works, and whether you hate Microsoft or not, a few months playing with C# usually results in the comment "Damm, why didnt they do this with Java?"
The Borg isnt dead, they have only been regenerating. Prepare to modulate shield frequencies, because they are coming.......
09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
And one again the CLR isn't the same thing as .NET.
The summary got my hopes up. I like C# and .NET quite a lot, but I also like Mac OS and Linux. I've been trying out Mono and Monodevelop (as well as some Xcode plugins for C#/Mono), but they're really not a good match for VS2k5 yet. (I'm hoping that "yet" comes true and doesn't turn into "ever".)
Unfortunately, only the "Core CLR" will be ported, and only to the Mac OS (probably due in part to MS Office for Mac), not Linux, and not even older (PPC) Macs. I also seriously doubt there will be much in the way of developer tools for the(se) other platform(s).
Sad, really. Office and VS are the only two decent Microsoft products, and they refuse to port either of them to a decent platform (aside from the tiny fragment of Office that makes it to the Mac).
Unfortunately this will not be seen for some time but it will be great for the Mono people and the nixes. It will be interesting to see how much they actually released.
How's this differ from rotor?
Done with slashdot, done with nerds, getting a life.
How will this effect the Mono project?
My Sysadmin Blog
I missed it by that much.
And shouldn't we both be modded (-1, too obvious)?
"National Security is the chief cause of national insecurity." - Celine's First Law
Who cares, you can run Python on both!
My little Linux and tech blog
That's exactly what Microsoft did with ActiveX. They pushed ActiveX as cross-platform, delivering an ActiveX SDK for the Mac and supporting ActiveX components in IE.
Then after a while, they dropped ActiveX support, saying it was too much effort to make it work on OS X.
Then after a while longer, they dropped IE too.
Same with WMV. Seen Windows Media Player for the Mac? No? That's because they dropped it a while back, and killed all support for DRM-protected Windows Media on the Mac. (Instead they suggest that people use a third party QuickTime plugin that only handles unprotected WMV.)
Jeez, lots of Microsoft fanboys or astroturfers moderating today.
GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
Now they are even copying Java's "free but can't include it with your distro" licensing scheme. Only they have 'improved' on it by adding in bans on benchmarking and, oh yeah, you can't use it on Linux. And you can't even use your code with mono if you develop it with Microsoft's CLR.
So basically this is exactly like every other feature they ripped from Java and then pissed on.
The fact that Silverlight would include a stripped-down, cross-platform CLR implementation was first announced over a year ago. The only people who don't know about this are those who are just finding out about Silverlight (WPF/E) for the first time. Move along.
I wonder if by cross platform if they mean it runs on both windows XP and Vista, in both 32 and 64 bit versions, on both Intel and AMD processors ?
I guess I'm just an old cynic, but I don't think it will be cross platform in the same way linux is cross platform.
From TFA:
Which is to say that it's being ported just for Silverlight. Silverlight depends on XAML. (Originally expanded to Extensible Avalon Markup Language.) XAML is the serialized form of WPF (Windows Presentation Foundation) vector drawing commands. WPF is based around
Microsoft is literally porting a chunk of Windows Vista to provide gee-whiz effects. Thus the use of Silverlight will always tie you back to Microsoft. Embrace, extend, extinguish.
Now where are the DOM 2 Events, Microsoft?
Javascript + Nintendo DSi = DSiCade
It's a trap!
"We have both kinds of music here: Country *and* Western."
Excuse me, but please get off my Pennisetum Clandestinum, eh!
It looks like Microsoft is only opening up the CLR to the cross-platform world, but so many of the .NET libraries on which applications rely remain closed and windows only. Kinda like if Sun gave us a JVM with no rt.jar chock full of utilities, UI components, and otherwise useful tooling. Don't expect that slick Windows.Forms app you wrote to "just work" when you try it out on Ubuntu.
They could've just used the CLR instead of having to code their own, but alas. Microsoft open sourced only now when put under pressure by Adobe.
Pitty.
... the jokes really do write themselves.
Eviscerati.Org: All Hail the Eviscerati
So Microsoft is really mad about Ubuntu and the iPhone and are trying to generate as much news as possible today?
Balmer crys.. "I still matter!"
Bringing liberty to the masses. - http://freetalklive.com/
Also, very few OO languages are consistent. Advanced IDE and RAD packages are needed, together with books that aren't just dead tree matter but look about the size of said dead tree, because the interfaces are illogical, and what is mathematically pure and correct is often not directly implementable at all.
OO could be better. OO should be better.
Others have picked up on the failures of existing implementations, though for different reasons. D is infinitely better than C#, C++ or Java, for example. If you want a good, solid, cross-platform framework, then writing it for D would make more sense than writing it for C#. And although .Net is ok, it's not what I'd call good. Use ACE+TAU+CIAO for a while. Real-Time CORBA 3 isn't lightning-fast, but I'd use it over .Net any day.
It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
I've found that .net imposes between a 50 to 400% performance penalty for floating point computationally intensive code as compared to native code. (One extreme example being 3D Perlin noise generation -- where the code running under .net 2.x is almost 4 times slower than native code.). If you're using the Intel 9.x compiler and it finds vectorization opportunities, the performance difference can be even larger.
.net application startup time stinks too.
And
Intel's C/C++ compiler rules -- It's *so* much better than all the rest for quality of code generation it's not even funny.
Oh and Mono is not terribly useful -- it does not support mixing managed and unmanaged code, for example -- so it's only really appropriate for programs that are entirely c#. Managed C++ will not work under mono in any realistic situation.
Ian Ameline
i speak for myself and those who like what i say.
If it's under the Microsoft Permissive License (Ms-PL), then it's being released under a BSD-like license with an explicit patent grant. I think that would really put to rest whatever remaining concerns people have have had about possible Microsoft patents on core CLR technologies.
More generally, I think Microsoft has really shown signs of change with the CLR, IronPython, and related technologies. Maybe they are starting to "get" it at least a little.
(However, Ms-PL isn't OSI-approved yet; what's up with that?)
Is this going to be like Mono, where you can compile it to run on PPC Macs but because the application binaries have x86-targeted code within, you can't run them without splicing in an intel CPU emulator somehow?
I have been a user for about 10 years. This ends Feb 2014. The site's been ruined. I'm off. Dice, FU
In other news, hand-optimized assembly using hardware accelerated vector processing for floating point operations is shown to be faster than using Bash scripts for the same purpose. Seriously, if you are going to make an argument about performance, at least make one better than a strawman. Any developer worth his salt would simply write the perf-critical code in an appropriate language and call out to it, which is trivial to do in .NET. The reason to write code in .Net isn't for blazingly-fast specialized math routines, it's for general application development using a very rich set of libraries and a relatively consistent set of interfaces.
Yeah... its regenerating w/ all its might. Zune has been released w/ great fanfare and has destroyed the iPod. XBox360... are they even making any other consoles? Microsoft destroyed Nintendo as a company just like they were Apple circa 1988.
Yup... dream on Balmer fan boy.
Any discussion about Microsoft supporting ANYTHING outside of Microsoft Windows is a waste of time. They will NEVER support anything outside of Microsoft Windows for any reason other than to make those others look like a joke. This is because EVERYTHING Microsoft does is to maintain and protect the Microsoft Windows monopoly and has little to do with profits. After all, approximately 30% of Microsoft profits come from the Windows Desktop, 30% from MS Office, and 30% from Microsoft Windows Server. Everything else is just using those profits to hold down the threats to Windows and that includes court costs, lobbying, etc.
So, this crossplatform Silverlight crap is all about stopping Adobe Flex/Flash from growing into a platform. It is already VERY capable as a client platform and BECAUSE it is crossplatform(the real one, not MS-crossplatform) they must stop it at all costs.
CLR is a hammer against the competition and MS Silverlight is also. BFD, it's meaningless unless you're a Microserf and then you already believe crossplatform == MS-Crossplatform which => Windows forever. IMO.
LoB
"Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
Yeah -- nice try -- it's not a strawman -- The call out to unmanaged code and return each take over 1000 cycles. (And such callouts don't work at all in mono.) So something that should take about 500 cycles (3D perlin noise generation) now takes ~2500. Ouch -- just a bit slower than leaving it managed. (For image rendering with procedurally generated textures, the perlin noise generator is frequently a *huge* spike in the
.net advocates often claim it's just as fast as native code, when it is demonstrably not.
.net is not appropriate for performance sensitive computationally intensive programs. It's fine for UI driven stuff where that code never needs to run anywhere other than windows.
Sometimes you need nice fast math functions that can take a small handful of cycles.
My beef is that
My argument is that
Oh, and speaking of strawmen, where did I talk about hand optimized vector assembly? Or Bash? WTF?
Ian Ameline
> Ms-PL isn't OSI-approved yet; what's up with that?
Microsoft hasn't requested OSI approval, which anyone has to do before the OSI will consider approval.
And I wouldn't hold my breath with it being under MS-PL. My guess is that it's more likely to be under one of the more restrictive licenses with the "Platform Restriction" that limits you to developing MS Windows software. I mean, the whole point of them releasing this is to try and kill Flash and keep people tied to Windows & Windows Media Player.
shouldnt they get sued for false advertising?
.net would be cross platform also
they said
they are freaking LIARS
windows 2k, XP and vista DOESNT count as cross platform
you should at least have a non MS platform supported..
freaking MS doesnt know the meaning of the word crossplatform, or honesty for that matter
Probably not, since the Microsoft Permissive License has a GPL-like 'viral' clause, which means that if Mono used the code, Mono would probably have to be licensed under the Ms-PL.
.NET code.
I don't see a "viral" clause in the Ms-PL. All the Ms-PL requires is that you include its copyright notice with your distribution and that the Ms-PL licensed code itself remains under the Ms-PL.
"Is Mono still necessary?" Yes.
Yes, but not because of the license. It's because Mono does a lot more than run CLR and
Well, except Mono is a small project
Mono is a big project as far as such projects go.
that Microsoft would rather see die.
I don't know. Who cares?
It will disappear when they are ready to drop litigation bombs.
The legal situation surrounding Mono has been more carefully analyzed than any other open source project I can think of. Unless you can point to a specific legal problem with Mono, you're just spreading FUD.
What disturbs me more is how the term "open source" has been co-opted and soiled by Microsoft when the license terms which will only be FSF approved when microsoft owns the FSF.
The Microsoft Permissive License looks like a perfectly good open source license to me; it's basically like Apache. In particular, it includes patent grants. The FSF probably doesn't like the Ms-PL because it's BSD/Apache-like.
If you can identify a specific problem with the Ms-PL, please point it out. Otherwise, please stop spreading FUD about it.
+1 knows what the fuck he's talking about
MS had already said that they planned to support Apple (and WinCE) for their WPF/E (windows presentations everywhere) technology. They then renamed that to Silverlight, and lo-and-behold, it still supports Apple. Where's the news?
Not to mention that this was predicted all along. MS has been supporting the MacOS for years, and hinting at the cross-platform possibilities of their net platform. MS wants the Mac to replace Linux as the alternative to Windows, so this is a pretty straightforward decision for them. So why are people acting suprised?
Compilation, language semantics, and runtime environment are trivial parts of modern languages. Any fool with a copy of the spec can implement the Java VM, any many have, but that never made Java truly Free or open source. The runtime library is where the real action is. A modern language is its runtime library, far more than interchangeable fluff of keywords and syntax. Hell, that's the whole key to .NET, you can write in VB.NET, C#, or whatever-you-like, but you're always using the same underlying libraries. Java code is never "cross platform", only the Java runtime is or ever can be, the same with .NET. Open sourcing the CLR doesn't mean crap, when Microsoft open source the Windows Forms libraries, now that'll be news.
You say this sarcastically, but this is what Microsoft really means when they say "cross-platform": it runs on all Windows platforms. (Vista, XP, Mobile, XBOX, etc.) I'm not joking. There should be (+1, Sad, Sad World) moderation.
Don't think of it as a flame---it's more like an argument that does 3d6 fire damage
Of course they don't work in Mono. Unmanaged code applies to COM marshalling, P-Invoke, and other things that have nothing to do with the CLR. Mono just works well with the actual, sort-of portable code. If you expect managed code to work in Mono on Linux... read better.
.NET Win32 compiler for unmanaged C++ is not near as efficient as the old 6.0 compiler. Have you ever looked at all the "security/thread model" junk the compiler tacks on in the assembly? It's hideous and horribly inefficient (and the flags that are supposed to turn it off, don't).
.NET still calls Win32 stuff under the hood. The classic Socket send problem that is (as of today) over fifteen years old is still there!
.NET. All much better for different things. C# has some cute aspects but is hampered by the usual Microsoft ideology. That and Java 1.6 has some improvements on the C# "nicities" (like true generics!).
That said, the
To add insult to injury, I know from experience that even regular 2005
FWIW, I use Java, C, and Ruby as much as possible... and when the project calls for it I have to use
And still IP restrictive.
No thanks. THere are far too many other cross platform languages that arent a potential litigation trap.
---- Booth was a patriot ----
Are you sure that Mono does not support callouts to unmanaged code?
i braries
http://www.mono-project.com/Interop_with_Native_L
cpeterso
Second, if you're using a decent IDE, like the one most C# programmers use, then it'll tell you whether Adapter is a field or a property.
Finally, since public fields are frowned upon (as in most other languages), you can just assume that Adapter is a property, and you'll be right 9 times out of 10. Ask any experienced C# programmer how often they aren't sure whether a certain identifier is a field or a property: it simply isn't an issue in real life.
Visual IRC: Fast. Powerful. Free.
I don't know about others, but I tend to think of "Windows" as the platform, in which case it's pretty likely to end up tied to Windows (outside of, perhaps, a neglected token Mac version).
So no, even if it's technically correct in some way, I'm not going to help the marketing department spin this as some kind of "open, cross platform" development when it's shaping to be proprietary Windows software.
Sometimes, technically correct is not the best kind of correct.
Since .Net 1.0 was released there has been a shared source implementation several platforms besides windows - FreeBSD and OS X.
.NET CLR. The current "cross-platform" version of the .Net framework available is 2.0. The 3.0 framework and SDK were recently released but are only supported on Vista. I wouldn't be suprised if no SSCLI for 3.0 is released since it's Vista- and Longhorn-centric.
So far, the SSCLI (formerly known as rotor), is kept up-to-date with the current
I'm not too familiar with the Mono project, but I'd bet that the SSCLI was probably a key tool for its (at least initial) implementation.
I concede that the shared source license prohibits commercial use, but that wouldn't stop someone (e.g. Mono) from making a truly open-source cross-platform implementation.
But, like others have already said - it's not so much the CLR that makes languages like C# so useful, it's the framework libraries - ASP.Net, WinForms, etc. Without those, it's not very useful for anything interesting.
I'd love to see the Microsoft + Novell partnership result in a truly cross-platform implementation, but I won't hold my breath.
If you do what you always did, you get what you always got.
Oh, such BS, and marked insightful on top and all. /. in all it's glory. Since you obviously have no idea what mono does or doesn't do - and it does support unmanaged calls, fyi - it's pretty obvious you just pulled those numbers out of your ass. So there, insightful BS for all your /. needs.
I've heard Ozzy talk about how the Internet is going to take over the TV for our entertainment and advertising and I've heard Microsoft say that they'll be putting everything on the Internet. Any discussion about crossplatform support is just plain silly since we ARE talking about Microsoft and crossplatform does not mean it'll work well off of MS Windows.
anyways, I've recently seen a MS Silverlight demo shown online and they showed it playing a movie via NetFlix over IP. Put all this together with their massive deals with the Telecoms for MS IPTV and it looks like MS Silverlight is going to be more about the Silver Screen than it is about Adobes Flash.
IMO.
LoB
"Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
That's what Microsoft said when they first plagiarized Delphi and Java to create C#.
Why should I believe them this time?
I thought -from reading the headline- that Open Source shared a Coke with Silverlight, and that consequently Microsoft caught Mono.
"Flyin' in just a sweet place,
Never been known to fail..."
Ryan-
I've been programming since '95. I have used professionally: perl, javascript, java, c++, php, python, vbscript, VB4/5/6, etc.... And C# is handsdown the current winner. The fact that this has a better chance to go multi-platform; because of this decision is a good thing in my book. Hell, I was just looking at the Mono project last week, seeing If I could help out at all.
I thought CLR was already cross platform in the form of Mono... Linux/Mac/BSD(?)
I've used IE on Solaris and I believe it was also available on HPUX. Those versions didn't even last as long as the Mac version.
At best you could implement .NET with Mono but there was no guarantee that a change by MS would not negate the hard work of the Mono team.
.NET does a fine job at being cross platform, contrary to what everyone around here likes to believe. I've got everything from high-volume mail servers to data collection and processing apps to billing systems, all written in C#, running on Windows Server 2003, Linux, and Mac OS X. It is obviously not perfect at being cross-platform, but IMHO, it makes up for that in plenty of other areas.
Really? How so? What kind of change from MS would make Mono stop working? In the absolute worst possible case, I'm sure Microsoft could hamper future development of Mono, but that takes nothing away from any apps that are currently running just fine on Mono.
Speaking on ~4 years of experience,
Perl - $Just @when->$you ${thought} s/yn/tax/ &couldn\'t %get $worse;
I'm so sick of ECMCMAEIEIO Script or jScript. Ugh.
I'd love to see C# script! Being able to use the same libraries and syntaxes (for the most part) as programming in C# would be a big help. And support in all browsers!
- Spryguy
There are three kinds of people in this world: those that can count and those that can't
Just in case the moderator is wrong, and you really are as ignorant as you appear:
1) The FSF has nothing to do with the term "Open Source", apart from an active dislike. They prefer "free software". The organization stewarding the Open Source Definition is the Open Source Initiative.
2) The term "open source" was not applied to software before a meeting 1998 amongst people interested in commercializing free software, where the term was first defined. They did try to trademark it in order to prevent it from being diluted like the term "free software" had already been, but a trademark requires a specific product for trade.
Mature platforms/languages/libraries (linux, win32, java, .net, perl, python, php, apache, iis, oracle, ms SQL server) have a looming issue that they work well enough that most average user have no need to upgrade.
This lessens the focus on producing meaningful updates/enhancements to those platforms. This troubling aspect means that we will be very likely developing systems similar to what mainframe developers/admins have been doing for the last 15 years in that the software/hardware will be stagnant and once it meets business needs, it will no longer be in anything other than lowest cost maintainece mode.
Will be available also on Mac OS X and it's a fact.
You can read the Headlines of the story @ http://www.sdtimes.com/cols/index.html And the story is @ http://www.sdtimes.com/fullcolumn/column-20070501- 04.html
inventor@prepatent.org
They clearly mean they will have OSX compatibility when they said cross platform...
h aredsourcecli/).
I'd be pretty surprised if they released a linux port, since they seem to have a policy of not touching linux. I wouldn't be suprised if there was a solaris or BSD port. They did make a port of the CLR to BSD in the past (http://msdn.microsoft.com/msdnmag/issues/02/07/s
To be more precise mono does not support mixed mode assemblies. So it's not really feasible to run managed C++ code under mono. Yes, you can load a dll with unmanaged code and call it. And it is neither pretty nor fast to do so.
.net managed code operates at a roughly 1.8x performance disadvantage when compared to native code performing precisely the same operations.
Secondly, I did not "pull the numbers out of my ass" I have carefully crafted benchmarks from real code used in real applications, ran these benchmarks for many thousands of iterations, made sure that the timed runs had the caches warmed up, and used the highest precision timing available, experimented with many combinations of compile options, and compared several versions of both the MS and Intel compiler, and verified that all the different versions of the benchmarks were generating the same correct answers -- I've been doing this sort of thing for a living for decades, and I'm very careful and thorough. All my testing shows that when doing floating point computations,
Ian Ameline
From inside the mind of Microsoft, 'Cross Platform' could well mean something like this :
.. this being a feature that users have strongly demanded from Microsoft during pre-production surveys and beta tests.
Being Cross-Platform means that Silverlight will be available on many different supported Operating Systems, and Silverlight represents THE most cross-platform product produced by Microsoft in its long and exciting history.
The wide range of operating systems targetted for production release of Silverlight include :
Vista Enterprise
Vista Ultimate
Vista Home Premium
Vista Business
Vista Home Basic (Limited support for some features)
The features and facilities of the free cross platform runtime binaries will understandably differ from platform to platform. For example, on Vista Home Basic, the silverlight runtime binary will only operate in full resolution no more than 3 times in any 24 hour period
Silverlight for Vista Enterprise and Vista Ultimate will be able to run for a whole 8 continuous hours in any 24 hours period before a noticable degradation in performance and visual resolution is apparent. Again, this is in response to demand from users for a safer and more secure experience when executing silverlight applications, and demonstrates Microsoft's committment to tailor its development to exactly suit the wishes of its valued users.
Silverlight makes use new synergistic paradigms in the field of computer science to provide the richest experience possible for the end user. Unfortunately, such highly advanced concepts as are seen in this new platform are not easily retrofitted to older legacy operating systems which are no longer vendor supported. Whilst Microsoft would dearly love to provide runtime binaries for systems such as Windows XP, our users have shown a clear preference for the more modern and powerful Vista range of operating systems, and so it is unlikely that a fully supported Silverlight runtime will be made available for Win XP. There may be some residual interest for Windows XP in the hobby niche market, however professional organisations overwhelmingly choose Vista.
Similarly, antique operating systems such as VMS, PrimeOS, MS-DOS and Linux either do not provide the necessary power to run Silverlight, or may in some instances have serious question marks regarding their legality, which unfortunately may impact our ability to support Silverlight in these environments. But again, the demand there is very low-impact, being part a dwindling hobby niche market of little mainstream interest.
Section D is the viral clause a-la GPL.
No, it isn't. Section D merely says that you must include a copy of the license with your distribution, not that you must place your all code under that license. That's a perfectly reasonable thing to require.
Section C is the advertisement clause a-la BSD before it was changed.
No, it isn't. The BSD advertising clause placed vague advertising requirements on the recipient. This clause simply says that whatever attributions are present in the software must remain there. It doesn't say anything about advertising.
This license limits your rights to re-license the code as you like which makes it very different then the BSD/MIT/X11 licenses.
That, too, is incorrect. You can't change the license on BSD, MIT, or X11 code either. What you can do is put your modifications under another license (say, the GPL), which means that the combined work is then subject to the new license and the original license. For the GPL, that just happens to work out as if the entire work was under the GPL. Well, you can do the same thing under the Ms-PL (except for the patent clause, but that will presumably be compatible with GPLv3).
Users won't blink at an easy install from a trusted source: Microsoft for Windows and its apps, the distro repository for Linux and its packages, and the application distributor for application updates (e.g., Mozilla for Firefox users.) The only obstacle is getting your platform into enough of those trusted places that you have enough of your target users covered.
Maybe nobody will pay for improvements, but they'll keep installing the updated versions. Most users automatically click "Yes" when prompted, "Software updates have been downloaded. Install?"
If you ran a large business, and your mainframe payroll or inventory program popped up a message offering to install updates, you would probably not only click "No," you would run around the office screaming, "DON'T CLICK YES! NOBODY CLICK YES!" You would be panicked by six fears:
1. Loss of stability.
2. Downtime during the upgrade.
3. Data corruption and loss due to the upgrade.
4. Interface changes that inadvertently disable critical functionality.
5. Retraining costs.
6. Getting billed a gazillion dollars for this damn upgrade that you didn't want in the first place.
These are all reasonable fears that apply much less to, say, Firefox updates. Firefox updates rarely hurt stability, they involve practically no downtime, they don't include interface changes that break existing habits, they've never corrupted my bookmarks or settings, the retraining cost is minimal (and underestimated by users anyway), and they're free. These are all implicit assumptions that users have been trained to expect by sophisticated, professional developers. As long as developers live up to those expectations, they are free to upgrade the programming platform as much as they want.
In fact, I would say that if many users click "No" when prompted to update your program, then your users are extremely dependent on the stability of your program, or you've done something very bad to lose their trust.
The only reason I see for microsoft doing this is to leverage the FLOSS community, in order to get free ports to other platforms. If -- when -- Operating Systems become commodities (which Linux is really helping to make happen), then .NET will be Microsoft's cross-platform "OS". Anyone who helps them to port the CLR will be helping their future domination of education etc., for free.
Allow? Deny?
Hmmm, this would certainly make the whole zombie bot army thing a lot more fearsome.
--- I wish I could hear the soundtrack to my life. That way I'd know when to duck.
No, it couldn't be reasonably read that way. "Including a copy of a license" doesn't mean "placing your code under a license".
No, but "If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license" does.
What do they mean by "a license that complies with this license"? An equivalent license? Or a less-restrictive one?
I think you mean "Not much different than a naive code compiler would do". Using the x87 sin and cos instructions is a pretty slow way to get those results -- especially if you're using single precision -- you can get the correct answers well over twice as fast by doing a few terms of the taylor series. Furthermore the Intel compiler will recognize vectorizable uses of the trig functions and compute several in parallel, resulting in an even more dramatic speedup.
x87 code is so 1980's. These days anyone wanting decent fp performance on x86 is using the SSE unit.
I suggest that you do as I have and compare actual performance of real FP intenstive code.
My experience has been that the CLR jit code generator does a very simple translation from MSIL to machine code with virtually no sophisticated optimizations.
Ian Ameline
User brennanw could not have stated this any better. Since when can .NET developers write an enterprise application without Microsoft's Visual Studio SDK? Sure you could pop open your favorite text editor and code away and use csc.exe to compile your codebase, but think how hard that is. if you could name three .NET developers who would go the non Visual Studio SDK route, then I might re-consider this argument.
So where does this put us? Microsoft will inevitably have to develop versions of Visual Studio SDK for Mac and Linux, and those versions will only work on Tuesday afternoons and Thursday evenings. On top of that you'll have to pay a license fee.
Can you imagine why any developer not thinking to him or herself, "Hmmm, let's just make this a J2EE application?"
If you use managed C++ for time critical code you're already doing something wrong.
Using C++ and p/invoke would be an ok option and it would work just fine in mono, too.
The numbers you quote are completely unrealistic, at least as far as the mono JIT is concerned (and I'd guess the MS runtime would be as fast as us, but I haven't checked). What is the function you're calling in C++ from managed code?
As an example the following C function:
void nullf (double *array, int pos, int count) {}
takes 50 cycles of overhead when called from C# code on Mono on my 1.6 GHz Pentium M.
Newer processors should take a little less, but that is the ballpark.
So if you see a 2000 cycles overhead instead of 50 you're likely doing something wrong or you just invented the number (or you should be using mono:-).
noise3[i++] = computePerlinNoise3D(x, y, z); // (float, float, float) and returns float.
It appeared to be marshalling on every call. The calling function was reading the cycle counter, and was therefore unmanaged (c++), and the noise function was managed. That gave a time that was 2200 cycles more per result than having both the caller and callee managed. It is not possible to test this on mono as mono does not support mixed mode assemblies.
I was experimenting -- I have several isolated test cases, all very heavy on single precision FP, with no library calls, and I wanted to see how fast it went running under the CLR. I am not making up any numbers.
Ian Ameline
You're apparently doing the opposite of what any performance-conscious person would do: having the performance-critical code be managed and the driver code be unmanaged, no wonder you got slow results.
That's why people suggested the use of p/invoke, which in your case would have the loop in C#/managed code and the computePerlinNoise3D() function implemented in C/C++/asm in a shared library.
Obviously it would not be sane to do this in a real application -- what I'm trying to do is assess what (if any) the performance penalty is for running FP intensive code managed by CLR. My observations seem indicate that this penalty is between 1.7 and 1.9x.
Furthermore, there seems to be a surprisingly heavy penalty for having unmanaged code call managed code. I haven't measured it the other way around, so I can't comment on it.
Ian Ameline
Yes, the top of my head must be a busy place.
a version of...
I knew I could stop reading right there...
The MAFIAA is a bunch of mindless jerks who will be the first up against the wall when the revolution comes
It can be realistic that FP code which is not vectorized or that has other constraints (bounds checking, defined precision, etc) runs slower than the similar code compiled by a modern C/C++ compiler. I guess a 1-1.5 slowdown would be in the correct ballpark.
But this is a different issue than the 2000 cycles issues you posted about: anyone can show with poorly written code than anything is slow.
No, it's close to a 2x slowdown, and that's with no vectorization opportunities. The CLR is not using the SSE unit to do floating point -- it's still issuing x87 instructions. And if you're doing single precision math (like most graphics work is) this is a bad thing.
.net CLR stinks for performance when doing floating point work. If you have anything vectorizable, it stinks even worse.
As for poorly written code, you'll have to blame the C++ compiler -- all I did was a straight fcn call -- one function had some inline asm in it, so it was unmanaged, one did not, so it was managed. And that costs roughly 2000 cycles per call.
Just for shits and giggles, I ported the perlin noise algorithm to c# (took about 10 minutes). There was still a > 2x slowdown compared to native C++. (535 cycles/result vs 1175 -- and that's averaged over millions of iterations.)
The current MS
Ian Ameline
Both the "Microsoft optimized Java out of existence on Windows" and "Sun sued Java out of existence on Windows" are true, from different, but neither unreasonable, perspectives.
The Microsoft "Java" was incompatible with all other Java, and thus reasonably, despite the use of the name, not "Java" but merely "Java-like", so its reasonable to say that Microsoft destroyed Java on Windows.
And, of course, Sun sued Microsoft for breaking their license for Java, resulting in Microsoft not bundling any "Java" VM with windows.