Creating .NET C# Applications for Linux
An anonymous reader wrote to mention an article on the IBM site entitled Mono brings .Net Apps to Linux. From the article: "Mono gives open source developers the programming power and flexibility to build applications for Linux while maintaining cross-platform capabilities, using a variety of .NET-compatible languages. One of the great advantages of Mono for current .NET developers is providing an easier migration path to Linux. The Mono project has a very open and active development community and provides both developer tools and the infrastructure needed to run .NET client and server applications. Perhaps the most important benefit of using the Mono architecture is that you gain language independence. Mono lets you leverage any existing code from languages supported in the .NET runtime. "
Mono implements System.Windows.Forms, but currently it's not stable.
It's recommended to use the latest build of Mono System.Windows.Forms, you can find it here.
And here is the the Mono WinForms class status.
I currently wouldn't rely on it. But the outlook is good.
And here are some pretty pictures of Mono's WinForms in action.
For apps where the both compatiblity with Windows and Linux/OSX are important I'd use wx.NET.
However on Win32 WinForms works best, even if it isn't the nicest (for developers) toolkit around.
The path I walk alone is endlessly long.
30 minutes by bike, 15 by bus.
It's ECMA, not ANSI.
This is by far the most hyped feature of C# but it's also present in Java. If you look at the large incompatibilities between Visual Basic and VB.NET you'll see that .NET is not really that language independent and that each language is really more of a "skined" version of C#.
As far as alternative languages go in Java there are many. Among the most popular are: JRuby
# interpreter written in 100% pure Java
# Most builtin Ruby classes provided
# Support for interacting with and defining java classes from within ruby
# Bean Scripting Framework (BSF) support
# Distributed under a tri-license (CPL/GPL/LGPL)
Jython (Python)
Jython is an implementation of the high-level, dynamic, object-oriented language Python written in 100% Pure Java, and seamlessly integrated with the Java platform. It thus allows you to run Python on any Java platform.
Groovy
Groovy is an agile dynamic language for the Java 2 Platform that has many of the features that people like so much in languages like Python, Ruby and Smalltalk, making them available to Java developers using a Java-like syntax.
There's a lot more smaller projects like JavaScript and Rhino, Jelly, BeanShell, Tcl/Java, Sleep, ObjectScript, Pnuts, Judoscript. Some people event think there are too many alternative languages for the Java Virtual Machine.
While Java is often suitable for enterprise apps or web based apps, it just isn't useful for consumer-grade application development
That will be news to the many developers who have produced such applications. Go to the Swing Connection on the Sun Java Website and you will see hundreds of applications that are consumer-grade. This includes games, graphics apps, and multi-media apps.
And, of course, there are the thousands of different Java games that are downloaded to mobile phones every day!
So much for Java not being 'consumer-grade'!
The only reason that most people find .Net or Delphi any easier for GUI work than Java is because there are very few good drag and drop environments for creating Swing and AWT GUIs. The best one I've seen so far is the one that Comes with NetBeans. It makes GUI development a lot easier. It's still not as good as what they have for .Net or Delphi, but it's workable. If you are stuck doing your UI coding by hand, or using the terrible Eclipse extension, then you might want to take a look at NetBeans.
Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
While I'm prepared to leave delegates, properties, and multidimensioned arrays on the table, Java *does* [now, at least] have type-safe enum with a new 'enum' keyword, auto-boxing of primitives to their wrapper class, and a modified 'for' syntax that is functionally equivalent to 'foreach' (and yes it works with the new enum as well as any iterable collection). Surprised you didn't list generics/templates, which java now has implemented and backported into the full Collections API. Pretty neat stuff; have been playing with most of this it all week, now.
I run the Mono project, so I can speak for our goals.
.NET implementation. This is part of what we do on a day-to-day basis when we write unit tests for the APIs we are implementing, when we keep track of any possible difference and we respond to bugs filed on our bug tracking system where the behavior differs by fixing the differences.
.NET. We have also grown outside of the scope of what .NET has to offer, and this is why you see a very healthy ecosystem of libraries and applications *around* Mono which are not limited to being compatible.
And one of our goals is to be compatible with the
But our goal is not limited to *only* being compatible with Microsoft's
We created Gtk#, the toolkit we recommend for new applications that are to be cross platform; The enhanced XML stack (Commons.RelaxNG and Mono.Xml.Ext), our extended security and cryptography stack (Mono.Security), our extended Database support (Mono.Data and all of the providers for proprietary and open source databases), our IL manipulation library (Cecil) and everything that goes with these libraries.
We try to make our libraries cross-platform, because the same code will reach more users and helps grow our community, but every once in a while we have to create OS-specific libraries. For example, the Mono.Posix library is not completely portable to Windows. The Cocoa# library only works on MacOS X, as it is designed to be just an interface to Cocoa.
Miguel.