Mono 2.0 and .NET On Linux
Several readers noted the release of Mono 2.0, which is compatible with Microsoft's .NET Framework 2.0. According to Miguel de Icaza, "... users can move over server applications built for .NET and client applications built with Windows Forms." InternetNews points out that only about half of the .NET apps out there will work on Mono 2.0, for a variety of reasons including (but not limited to) legacy Windows-only libraries and Microsoft's progress on .NET 3.0 and 3.5 APIs.
If we wanted to run crappy Microsoft technologies, we'd just go buy Windows, wouldn't we?
Your precious little synergies (poisonous little stratagems) may please your masters but they don't make Microsoft relevant.
you had me at #!
I don't think it should surprise anybody that Mono 2.0 cannot handle applications written for .Net 3.0 or 3.5...
I like Mono, I really do, however it's always playing catch-up, it's by it's very nature it's always going to be one step behind Microsoft. Without the support of features in .Net 3.5, very few people are going to choose it for new developments.
Microsoft: you shall never possess the necronomicon!
Most of it anyway; but crucially, LINQ.
The bits missing (Windows Workflow Foundation, Windows Communication Foundation and Windows Presentation Foundation) aren't as crucial in my personal opinion; they are just nice toys you aren't going to miss if you've never had them before.
LINQ however is a killer feature IMO; I'm glad to see that's now available on mono.
throw new NoSignatureException();
A question: Is there a functional IDE for Mono, for us who don't want gnome or even gnome libs on our System?
Got more important things to do.
I don't want Mono, and any self respecting programmer . My thoughts on Mono and it's introduction to Linux are here.
.
Good luck porting over LoadDLL("C:\\windows\\system32\\mylib.dll");.
The existence of a working mono is a necessary condition, not a sufficient one, for porting an application. Whether that condition is fulfilled and to what degree, I'll leave up to you to discuss.
Portability comes from being largely independent of the differences between the platform you want to port from and the one you want to port to. Good portability engineering consists of gathering all the platform-specific bits into one unit with a uniform interface, such that it's easy to write platform-specific modules for all the platforms you want to support; then, make sure to test on all your target platforms.
For a good piece of engineering, see Simon Tatham's puzzle collection (http://www.chiark.greenend.org.uk/~sgtatham/puzzles/). To see the importance of testing on all your target platforms, see the state of synergy on the Mac (http://synergy2.sourceforge.net/ -- "The Mac OS X port is incomplete [...]"). To see the importance of isolating your platform dependence, see any code that makes liberal use of fork and ioctl everywhere [sorry, I can't name an example].
Also, good portability engineering done up front is much less work (i.e. cheaper for your employer) than when the project is already deployed on windows only.
-- Jonas K
All major SSurveys
You should be able to just get the GTK headers and libs and compile it. Patt dropped Gnome from Slackware for this very reason - it's a horribly complicated package to get right.
/usr/local/lib, but I can throw them in the package so you can do a removepkg to remove the app and libs in one fell swoop.
I could try to roll you a tgz later today. Are you running 12.0 proper? You'll have to drop some gtk libs in
If I mod you up, it doesn't necessarily mean I agree with what you've said, sorry.
If mono would be full .net compatible (say "if"), this would mean, people be allowed to move their Windows .net enterprise application from Windows to Linux.
Be sure, that MS will never let that to happen ! This is not anything like MS beein BAD or things like technologically it is not feasibile ... just marketshares and money. An enterprise do care about their money and investment : so do their shareholders.
Alright, think of this. MS had runaway from Java when they though "we can no control this and make it platform dependent", thus "it's too much of a risk, let's trash VisualJ++, jview and the wfc's".
What did they do instead ? They build their own "Java platform" version. But one they can control and make sure it will never be used to endanger their assets.
Crossplatform sounds always good to people ears, so they also had to make sure the platform is portable to some reasonable level (money, could helps there to delegate to third party), but also that "it will always works best on Windows".
Money get back to its dady ;-)
Whatever Corel, Icaza & al claim, the only platform that MS cares is Windows. If MS realy cares about non Windows running .net framework, then would have at least build a compatibility test kit or GPLed the framework already, isn't it ?
Seriously, appart from the marketing hype, what is the chance a real life corporate enterprise applications build using .net migrate without problem from Windows to Linux ? IMHO, it is the same chance people migrated cobol application to Java with a single click: very little. Better to have full managed code, better to have mono supported API, better to use code used often, etc.
By the way, what is the long term for .net ? think of MS DNA ... at one point of time it will no more fit in MS grand-strategy and be deprecated by their master. Just because, beeing successfull would it has the potential to kill MS milking cow ! You can even anticipate, it will be some kind of "embrace and extend" thing that they really loves. Something that will let non Windows .net user in the middle of the road.
At first, MS has realized by pushing .net, a Java engeneer can move to a C# project ... But they do not have realized that by doing this a whole new generation has already become "Java-minded". .net developper, thing of this : do you like accessign to non-managed "pre .net" APIs ? does it sound modern to you ? easy to use ? simple ?
They now master Object, GC, persistence, etc and do not want to get back. If you are a
Look around, years back, it was .net "everywhere" ... now, seriously, the suffix has been deprecated. This means that even MS top strategists shows little interest for .net: less bankable than others MS assets + threat to other assets = let's not put lots of things on this (but some little to try to slow down opponents).
Anyhow, things are evolving, Linux is becoming ubiquiteous, Java is becoming ubiquiteous ... and those two are the best MS nightmare. How to kill them ? I dont think any strategist has an idea at redmont (or at least one that does not imply suicide of one of their assets).
Time will show ...
Rgs,
TM
As a Programmer I am really torn between Java and Mono!
Both platforms solve the same problem but which one shall I commit to?
Do I install and run both platforms on my PC?
Surely running both platforms at the same time *must* be detrimental to my PC's performance (e.g. memory usage and cpu time executing both VMs)!
I also cannot afford the time to learn both platforms properly!
It is unfortunately a question of politics. .net technology and patents are a concern.
Java is now open-sourced and offically sanctioned.
Mono is the "unauthorised"(by Microsoft) port of
Both platforms have great software written for them (e.g. banshee, jedit, monodevelop, eclipse and netbeans) and patents are not really a concern to me because I live in the UK (software patents do not apply...YET!).
It is unfortunate that the mono is so closely associated with Windows, if the mono team had created/implemented a completely new set of cross-platform libraries (that bore no relation to Microsoft's framework) it would be more accepted.
I really like mono - the work that has been done is nothing short of amazing but the constant catch-up with Microsoft is a concern.
Java is widespread in mobile phones and most modern desktops unfortunatly for me it is not available on my PDA (ipaq 2210).
I am really stuck with this! :(
I wish the real .NET could be installed on Wine. Not because I like .NET, but because I want to run those programs that people make in .NET these days, in Wine just like I can do with regular programs. If Wine wants to work like Windows, it should also be possible to install the real .NET on it just like you can do on the real Windows. They should try to make it work just as well as they did with MS Office. Then it would become possible to run so much more programs in Wine without problems and without having to reboot to Windows!
The .NET platform and C# looks like decent enough technology, but I just don't think it's compelling enough to prompt a switch from Java.
With these back-room Novell/MS deals, the patent situation around Mono continues to be as clear as mud, and with Java I get it all under the GPL (with a clear and written patent grant) right from the source. Not to mention Sun's process for advancing the platform (JCP), while not perfect, is far more open and community driven, catering to much wider variety of vendors and platforms than Microsoft.
With Eclipse and Netbeans, the Java tool support on Linux is fantastic as well. With RedHat and JBoss, the server platform is also well supported on Linux.
So, yeah, nice work, but no thanks.
Have they now released it so that M$ cant come along and pull the plug using Patents they hold or via Copyright/DMCA junk?
Just asking
I'm guessing that 40% of those incompatible apps are due to code which references Win32 libraries via P/Invoke. Seriously, almost no-one is developing for .NET 3.x. Most apps are written for 2.0, which is included with XP SP2 and Vista, but 3.5 is a 300MB download, so almost no-one has it. Microsoft had to release a client-only subset version of it which is cut down, and its around 30 MB, but it'll cause a lot of confusion (RE: versioning), and I don't think it supports LINQ.
Most human behaviour can be explained in terms of identity.
If you were setting out to write a serious new web application and cross platform was a real requirement why not just use Java? If your requirements are smaller there are plenty of other languages that offer cross platform deployment that are up to date on all platforms.
It's great to see this project continuing to develop but it's going to be like Blackdown Java - a niche product at best. The only saving grace is that, unlike with Java, you can't actually run the MS VM on Linux (AFAIK).
I used to have a better sig but it broke.
"InternetNews points out that only about half of the .NET apps out there will work on Mono 2.0"
On my Windows XP computer half the .NET applications break anyway.
-Woof woof woof!
trying to codesign large Windows executables. At the time their Authenticode tool was better than Microsoft's own.
Never send a human to do a machine's job.
I think the mono project was started primarily because of interest in the C# language, as it compares favorably to java, fixing many of Java's flaws.
Sadly while the C# language may be in many ways stronger than Java, the platform is much weaker. Realistically, the reason Java was so successful was that there were high quality VM and classpath implementations on all platforms. Yet, Microsoft didn't seem to learn this lesson from Java, and instead relied on third parties, who can't possibly maintain parity with Microsoft .NET. Thus, .NET will always be a second class citizen on Linux, and always a poor choice compared to Java.
As much as I like C#, it's a foolish choice to write Linux apps in .NET in the same way that it is foolish to write them in win32. It will always be a second rate platform on Linux, so long as the people controlling the standard have no interest in doing the work to making the framework work across platforms.
My first C# app was to convert some Java code. It was a breeze.
Now beng a bit of a master of C#, I recently needed to convert C# into Java. Arrrggghhh....what a nightmare! The first stumbling block was that you cant pass variables by reference. I had to completely redesign it, and the result kept the Garbage Collector very busy.
Why no better spend the effort in creating a VM for Ruby, Python or a new language instead of implementing a half baked M$ .Net framework and C#, who wants to use C#? it is to verbose and ugly language.
Poor Miguelito but he is wasting his time and life with this project that doesn't benefit nobody, it doesnt benefit Open source, it doesnt benefit Linux, even doesnt benefit M$ folks.
Sure, but weren't you supposed to be talking about Mono there somewhere? Java used to provide lock-in, too. Hence, the GNU Classpath project, which is pretty much identical in its goals to Mono. Funny that I never saw you people screaming about that one being a trap.
WINE allows you to run Win32 applications on X/Unix. Mono allows you to run .NET applications on Linux. While superficially these appear similar, there's an important difference: WINE and classpath implement specifications that are publicly available whereas Mono, through a deal with M$, implements something which is not freely implementable. The difference shows up like this: you can write an alternative for classpath or for WINE (although it would take another 10 years) but you can't write an alternative to Mono (no matter how many years you take) without having a deal with M$ either directly or indirectly. In summary, M$ CONTROLS who can implement .NET while that is not the case with Win32 or Java. Can you see the Lock-In now? Anything that requires you to have a deal in order to implement it is not an open standard.
The largest prime factor of my UID is 263267.
Wine is to Windows as Mono is to .NET is right, but that's not what goose was on about.
Wine is the opposite of .NET.
If you write **for** MONO it should work on windows.
If you write **for** .NET, it probably won't work on Linux.
If you write **for** Wine, it should work on Windows.
If you write **for** Windows, it probably won't.
Note: MONO is the odd one out. There's no analogue in the "lock in/ unlock" stakes that WINE has for MONO.
Except patent pledges and license restrictions. Of which Novell say there are none but haven't said so in binding statements.
Does this allow running VMWare Infrastructure Client under Linux?
The VMWare ESXi product is now free to use and very capable of high-class virtualization, but the admin interface is for Windows-only, apparently written in .NET.
This means sysadmins with a Linux or Macintosh workstation are unable to see the screen of guest machines running under ESXi or execute complicated configuration tasks. (The command-line interface available for Linux users is very primitive in functionality compared to the Windows-only GUI client.)
This is a shame of VMWare Inc. and I hope it can be corrected with MONO. Do you have some info on this topic?
...only about half of the .NET apps out there will work on Mono 2.0, for a variety of reasons...
All those reasons can be traced back, in one way or the other, to the fact that M$ gets to decide what fraction of the .NET applications will work with Mono. M$ chooses the fraction to be big enough so that people will be fooled into thinking .NET is a truly cross-platform API yet small enough to keep Mono always as a second-class citizen compared to .NET.
The largest prime factor of my UID is 263267.
I forgot there's a hell lot in MS .NET that's not in ECMA .NET. I forgot more than 99% of the .NET developers read the MS. NET documentation rather than the ECMA .NET documentation or the Mono documentation. I forgot lot of foolish but vocal people consider the compatibility between Mono and MS .NET as a measure of .NET's cros-platformity while they should actually consider the incompatibility between dotgnu and MS .NET as a measure of the lock-in involved.
The largest prime factor of my UID is 263267.
It works with Visual Studio, which has built-in automagical wizards for filling out frontends. This tool even works with libraries that other people have made.
It also has a web programming model that's almost exactly the same as its non-web model.
I haven't seen this level of RAD support in any other system which also has support for the web - much as I would like to - especially in Java.
Hopefully, one day I will. I'm subscribed to the MyEclipse project. Mylyn is awesome, subclipse is the best subversion client I've ever used, but I have found no actual set of libraries that I can develop with the rapidity of the ones that come with .Net 3.5.
Mod me down and I will become more powerful than you can possibly imagine!
All the budding developers who hear about .NET's cross-platform nature will want to learn it. All, except the wisest, of them will be forced to learn MS .NET from MSDN. They'll code a few .NET applications in C#, test them on M$ Windows and let their brains embrace .NET beyond all question. One day they find that most of their applications don't work on Linux/Mono. They'll scream on all public forums - "Linux is crap!!!". Someone tries to explain to them that the problem is because of their heavy usage of M$-specific extensions which are not part of ECMA .NET. Then they'll scream again - "ECMA .NET?#??!!#! WTF is that?". Such is the depth of lock-in involved with .NET.
The largest prime factor of my UID is 263267.
Actually, as a long time developer in C#, I welcome the ability to program for my home OS (Linux).
I can't be bothered to learn Python, Perl, C++ or Java - having .Net right there in Gnome (and with Windows Forms support too!) is absolutely great for me.
Dr. Dobb's http://www.ddj.com/ talks with Miguel de Icaza about Mono 2.0 in this audio interview.
The fact is that the .Net Framework is an excellent set of libraries to do most common programming tasks.
Take your pick of .Net languages or implement your own.
C# has some features that Java just lacks: efficient parameterized classes, multidimensional arrays, value classes, call-by-reference, explicitly unsafe modules, and native code interfaces.
We were waiting for years for Sun to fix those, but Sun never did (there has been some movement on some of them recently, but it's too little too late). As far as I'm concerned, the only reasonable general purpose programming languages these days are C++ and C#. Java simply isn't even in the running.
There are maybe a dozen commonly used Mono applications on Linux. They don't involve .NET at all, they are written in Gnome. When you install Mono on Linux, you usually don't even get the .NET libraries.
The value of Mono on Linux is primarily as a better programming language for the existing Linux, Gtk+, and Gnome APIs. The fact that it also provides .NET compatibility is icing on the cake.
Without the support of features in .Net 3.5, very few people are going to choose it for new developments.
Lots of people are already choosing Mono for new developments, and most of them don't use or care about .NET.
I really don't care about cross-platform support. Why? Because the major work of getting applications to work well on differnet platforms isn't the GUI library, it's doing all the platform integration work. A cross-platform library only makes that more difficult.
In different words, the way to do a cross-platform C# application is to use .NET libraries on Windows, Gtk# on Linux, and Cocoa# on OS X.
On the other hand, if you use Java and Swing, your application will never work well on any platform.
C# is an iso standard language, which puts it in the same league as C/C++.....
...and OOXML.
Surely running both platforms at the same time *must* be detrimental to my PC's performance (e.g. memory usage and cpu time executing both VMs)! .Net isn't a VM, it's a JIT compiler. Your .Net language is compiled to MSIL (similar to byte code) then JIT compiled to machine code. You can do this in advance of executing the application, with a tool called NGEN (Native Image Generator) which speeds up the application startup time.
Personally I find the design of Java a hassle. You have to handle every possible error (.Net allows you to bubble the error up to the calling code and capture all errors there), properties are long handed and also I find it a hassle to set up classpaths and find myself at the command line more than I feel I ned to be.
There's also a selection of different libraries for everything whereas in .Net it's a simple case of using System.Xml.Whatever - in Java I feel like I have to read a giant bunch of essays about which XML parser I should be using which is a complete drag.
Then there's Web services. No "Add Web Reference" in Java, it's a royal pain in comparison. XFire has been discontinued in favour of something that doesn't integrate with Eclipse.
I've also found trying to get answers and help is a hassle in Java whereas in .Net a million people have had exactly the same problem as you already and have already posted code examples.
I run Eclipse and Visual Studio on my machine with no problems.
As you can probably tell, I'm totally happy with .Net as a platform.
Since I happen to have Ubuntu and the latest version of Mono for that, and one particular app that I'm sitting on which would probably work in 2.0, I'm just wondering: Does anybody know if or when the upgrade will happen for Debian users?
--Edward Dassmesser
I thought only parts of .net were ecma standards and therefore 'safe', like c#. Isn't winforms covered by some MS patents?
This seems like a precarious position for anyone without a patent covenant.
--10scjed IANAL,AFAIK
This is the problem I have with Microsoft's technologies in general (think ASP.net's asinine oversimplification of the http protocol) - instead of improving new programmers' understanding of existing technology, they re-warp the programmers' heads around their idea of how the technology should be implemented.
I can't really comment on the specific, Microsoft-related instances you're talking about - but I would say that this sometimes really is how progress works. Moving forward, coming up with better ways to do things, sometimes means leaving old ideas behind. Microsoft has the power to do that and make it stick.
Going with the established pattern just because it is the established pattern can make programmers more comfortable but it isn't necessarily the best decision.
Bow-ties are cool.
Hey, I have no complaints against Mono. Those poor guys are doing a lot of hard work. And they've done great so far. My complaints are against .NET as a whole. My chief complaint is that neither the Mono team nor the programmers who write .NET/Mono applications seem to realize that Mono is always going to be a second class citizen and always playing catch-up no matter how competent the Mono team is. Another complaint is that M$ is falsely advertising .NET as a cross-platform framework while in fact it is only interoperable across those platforms which M$ dictates through its deals.
The largest prime factor of my UID is 263267.
To be pedantic I think the C# language definition is open source. What isn't is the runtime. You could write a C# compiler with its own runtime and you'd have a pretty nifty alternative to Java.
http://live.gnome.org/Vala
tomorrow who's gonna fuss
Half of .NET apps are working by default my ass.
In my case it's close to 0%
Some have few Todo items, but they crash on some other part of the code.
I guess it'll take at least 6-12 months until it's actually compatible with .NET 2.0 as they are advertising right now.
Too bad, I have high hopes for Mono.
"WINE is as to Windows as Mono is as to .NET This is basic logical reasoning."
Not really. The fundamental requirement of Mono is to implement .Net ISO standards. On the other hand, WINE was never intended to fully implement the Windows API and development is primarily driven by the desire to see the most popular applications run on it.
There are also applications that are specifically targeted to Mono which might not run on .NET as implemented by MS. Thus in general Mono isn't really a way to transition from Linux to Windows. On the other hand, does anyone create applications that specifically target the WINE "API"?
The problem isn't that Mono prevents migration from Windows. To the extent that apps are built targeting .NET, Mono obviously helps migrate those apps.
But at the same time, if developers are targeting .NET under the illusion that they'll get easy portability, then there are probably better solutions. QT comes to mind, not to mention Java.
It seems like Mono will never provide complete portability. The article talks about percentages of the code that will work under Mono, the assumption being that the developer will need to make tweaks to get a Linux version. I'd bet there'd be cases where they'd have to do tweaks to get a Mac version too. At that point, what's the advantage to using an interpreted language over a nice C++ framework like QT?
Bottom line - If portability is the goal, Mono might just muddy the waters. Why not work to build something truly portable with whatever perceived advantages of .NET built in?
Posted from my Android phone. Oh, I can change this? There, that's better...
Groovy adds all the glory you would find in Ruby and Python directly to the Java platform. It's tremendously fun to use.
Some features in C# such as generics can't be implemented as is to run on a standard JVM because the JVM doesn't have the capability to support it. .NET's CLR was designed to support generics at the byte code level. In Java, generics are implemented by the Java compiler that just hides the object casting from the programmer. The result is that the JVM doesn't really know what the types are at run time.
Well from a generic point of view, the 'portable' part of .Net implemented by Mono has nothing special over the Java platform, which can be used by Scala.
Sure .Net provides Windows programming, but in this case you lose portability..
"only about half of the .NET apps out there will work on Mono 2.0, for a variety of reasons including (but not limited to) legacy Windows-only libraries and Microsoft's progress on .NET 3.0 and 3.5 APIs." .NET devs want the latest and greatest they have to use Windows.
Just as planned. Mono isn't a threat to Microsoft, it's actually a help. Because the standard is controlled by Microsoft, Mono will always be playing catchup, so if
...and that is all I have to say about that.
http://jessta.id.au
"But they could very well (and supposedly have) patented algorithms necessary to the implementation of .Net itself, thus making Mono directly infringing."
How likely would it be that .NET would contain patented algorithms that are so general that they are absolutely unavoidable when implementing a .NET clone and yet specific enough that other languages, libraries, frameworks or plaforms don't violate them?
"I can hypothetically write patent-clear code in C, but even "hello world" in C# is built on shaky ground."
No. You can't patent on a code-specific basis. In theory, if there was no prior art, somebody could patent "An algorithm for greeting Earth", but they couldn't get one patent for every computer language that could implement it.
Take of your "MS-criticism-sensitive glasses".
MS has plenty dosh to sue. Most GPL companies can't afford to break the lawsuit.
Check out how Amazon are patenting user-feedback bonuses.
Or, a little closer to the bone, MS's "IsNot()" patent. What if the agreement to be .NET compatible required "IsNot()"? MS already do that with some of the MSOOXML stuff.
....that .Net is the primary framework for extending a lot of Microsoft stuff, as well as a few other vendors' things that run on Windows. So if you're developing an in-house extension these days to customise something like Outlook or Word to do a few extra things appropriate for your organisation, chances are it'll be .Net code that does it. We have several customisations like this, and it's frustrating at times because it means that Office apps (or whatever else) will stall for several extra seconds either at startup or at some other time depending on how it's configured, because they're loading the framework. Being able to write the customisations in an cleaner and more coherent API tends to make it worth the tradeoff for us, though.
Our Document Management System also uses a mixture of .Net and COM to integrate with MS Office, and its primary API for us to write extensions for it is also a .Net API.
There aren't a lot of production off-the-shelf .Net apps for the reasons I mentioned (difficult to reliably distribute to random users), but I think it's still popular simply because Microsoft promotes it as the way to interact with and customise most of their stuff. That and ASP.Net, which is very popular all by itself.
Why is there P/Invoke available in the language anyway?
Just dump it.
Good news I think...
An extra number of (previously) MS only developers having a better option of porting their code than they ever did before. Sounds like a good thing doesn't it...?
Personally I'd welcome more apps on Linux or any other none MS platform - and using a core Microsoft technology isn't a bad thing. It means the development skills are going to be taught and available for some time - even it they never get off the MS platform for 50% of the time.
However, there is a downside - it could, of course, bomb. As a point of interest I mention a previous port of a MS language. Indeed, it could have the same worldwide impact as "Novell NetBasic". For info, I believe it was later relabelled "Novell Script for Netware". There is a reason to the mention of this second spurious piece of trivia, unfortunately it is just a ploy in hope that the other 2 people who tried to script anything in it might be aware of it by the other name can come to my aid and save me from all those people pointing and laughing. I'm sure it was a great idea to rewrite a completely unstable VBScript interpreter for the Netware platform.
InternetNews points out that only about half of the .NET apps out there will work on Mono 2.0, for a variety of reasons including (but not limited to) legacy Windows-only libraries and Microsoft's progress on .NET 3.0 and 3.5 APIs.
Exactly, which makes it pretty useless, so it's as bad as OOXML in a way, so tell me again why I'd want to bother writing Microsoft-specific software for Linux? No thanks.
Promote true freedom - support standards and interoperability.
I'm an avid Mono user. My company develops software internally that runs on Mono on Linux servers. We choose C# because it's a very good language. That's about it.
From the perspective of someone who has developed in both java and .NET, mono just works, period.
If I need to develop a back-end server application I do it in java. When I need both a desktop and back-end application I use mono/.NET.
Yeah, my server and client share common code, and I routinely violate the MVC paradigm, but we've already established that I'm evil, right?
People tend to assume mono means C#. One aspect people often overlook is IKVM, which compiles jar files into .NET libraries. Its not a silver bullet, but it has its uses. It allows you maintain helper classes in java, but expose them in .NET.