Reasons To Use Mono For Linux Development
Nerval's Lobster writes: In the eleven years since Mono first appeared, the Linux community has regarded it with suspicion. Because Mono is basically a free, open-source implementation of Microsoft's .NET framework, some developers feared that Microsoft would eventually launch a patent war that could harm many in the open-source community. But there are some good reasons for using Mono, developer David Bolton argues in a new blog posting. Chief among them is MonoDevelop, which he claims is an excellent IDE; it's cross-platform abilities; and its utility as a game-development platform. That might not ease everybody's concerns (and some people really don't like how Xamarin has basically commercialized Mono as an iOS/Android development platform), but it's maybe enough for some people to take another look at the platform.
You just shouldn't bother. It's not worth the risk.
“He’s not deformed, he’s just drunk!”
We have a LONG memory of Microsoft's past behavior.
So why don't they just relicense the .NET CLR and the rest of the packages under the Apache 2 license? It lets people use things as freely as the MIT/BSD licenses as everything else and contains the patent guarantees.
Until then, anything not under Apache 2 is suspect.
Why use a Java clone instead of just using Java?
Maybe because some people prefer C# to Java? They aren't exactly the same, after all: https://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java.
How can we continue to believe in a just universe and freedom to eat crackers if we have no ale?
While I have never work in C# myself, the ability stop code in a debugger, write some code, and then continue executing (compiling your code in real-time) seemed like a really awesome feature (as a C++ guy, we don't get to do this).
The Unity engine is also quite popular and an increasingly popular choice is C# for use with it.
Maybe Microsoft can make one useful invention every decade?;)
-- Political fascism requires a Fuhrer.
True but it seems kind of ridiculous to choose an entire platform based on some minor differences in syntax.
I suppose if you're already really familiar with the Microsoft software stack, like you used to build VB apps and have already invested a great deal in Microsoft's tools it might make sense.
But otherwise, it's a smaller ecosystem with fewer libraries, fewer developers, fewer choices, fewer large scale deployments to learn from.
Mod me down, my New Earth Global Warmingist friends!
I work on a embedded Linux system running Debian Jessie armhf on a Cortex-A5 processor. At some point someone programmed a Web user interface for the system using Mono for Linux. The installation of Mono was difficult, requiring several hundred Mo of space on the filesystem and some trick to get the last package revision. Then the application was started and take all the processing load for almost 4 minutes. At his point it was eating near half the memory available on that embedded system. This was socking, especially for me that like to use qooxdoo for WebUI because it's basically a static file that need no compilation and have a very minimal memory footprint. Finally the guy switched to node.js for the WebUI on that system. The installation was easy, the startup compilation last now less than a single minute and the memory footprint is below 20%, all of that with a more complete demo that with Mono.
The only reason to use Mono is really to get Windows developers onboard.
But that's a long shot. Linux works because there are plenty of developers in mentioned programming languages that support it.
Since Java isn't terribly popular in Linux, .NET has no chance.
What people really want to know is when will Mono incorporate systemd?
Just cruising through this digital world at 33 1/3 rpm...
While I'm very much a vi and command-line guy, I'd like to point out that Visual Studio Code already supports Linux. While it mainly markets to people using ASP.NET and Node.JS today, it appears to have some support for C++, C#, Java, Python, Rust, Lua, Objective-C, Go and others.
Don't confuse VS Code with full VS (not sure how to distinguish the two by name). You don't get all the business for doing projects from various predefined templates and build system. VS Code is more like a fancy text editor with some tools for refactor and lint.
“Common sense is not so common.” — Voltaire
Because it is better. The risk of getting sued by Microsoft is smaller than the risk that your project will fail because you use Java. Microsoft has said they guarantee that they will not guarantee that they will sue you. They guarantee there is a chance that they won't while if you use Java you are pretty much guaranteed to fail. It's just less risk.
1) We haven't sued people for using it yet!
2) it's cross-platform (as long as you only use certain parts)
3) we have a single IDE!
4) you can write games with it... as long as it's a Microsoft console.
5) it's incomplete and buggy but were working on that!
sounds just great but why not use C++ and Qt instead?
Anons need not reply. Questions end with a question mark.
Care to quantify that risk for us? Go on, I'd like to see how you have done this assessment.
The world's burning. Moped Jesus spotted on I50. Details at 11.
1. C# Is a Great Language
me: Yes it is.
2. There's a Great Free IDE: MonoDevelop
me: Finding a decent IDE is not a problem anymore. You can find something for every language.
3. Mono Supports Mobile Development
me: So does Java and Swift. Why does EVERY article out there think you have to pick just ONE language and be stuck with that choice forever???
4. Mono Is Cross-Platform
me: Python, Java, C, C++, Ruby, and many, many more are all cross-platform, too!
5. Mono Powers Games Development
me: The guy is totally right. He has some great examples, too.
Please just don't think, that you MUST use C# to get into game dev. For example, you can have much faster prototyping with PyGame. You can really learn to code in Swift over a weekend, if you have mastered one similar language well.
My advice to you is: pick any language, become good at it. Just don't do VB.NET or I will have to kill you.
Microsoft will do what it has always done; develop a technology, push it everywhere it can, then let it stagnate, and deprecate it in favor of the newest and bestest thing ever, before announcing that the next version of Windows will be the last to support it, so be sure to buy our new even more expensive suite of development and distribution tools while you can!!!!
Java is a reasonably mediocre language with a mediocre set of standard libraries, but you know what, I'm fairly confident that the application I write in Java today will still be usable in a decade (heck, I've got Java utils running that I first wrote in 2002 to 2003). In other words, Java may be far from perfect, but it is an enormous ecosystem with enormous penetration, particularly in the enterprise world. Even if I bought into the notion that C# is lightyears better than Java (which I don't), it is almost never purely about objective or subjective technological superiority.
Beyond that, if MS keeps to its word to port .NET over to other platforms, why on the hell would I want to use a crappy half-completed variant like Mono?
The world's burning. Moped Jesus spotted on I50. Details at 11.
There's about a billion times more library support for Java, particularly if you want to do anything that isn't related to Windows. And you have at least as much cross platform portability, you can reuse a lot of code for Android apps. iOS is a black hole for ALL VMs, so you really might as well just stick with Java, or else go the QT/C++ route.
"Malo periculosam, libertatem quam quietam servitutem." -- Jefferson
FTFY.
I've been developing primarily in .NET for the last 8 years, after being a Java developer (primarily) for at least as long prior to that. At first, I was skeptical of .NET and especially of Microsoft. But over the last 8 years, I've realized that it's a tool that allows you to get work done. As such, I've found that it not only has as much of all of those things you mentioned, but it also has better quality in every area. Java still has that suck-it-and-see feel to it, while .NET seems to just get out of the way. And the tools available for .NET are about a million times better in every regard. I shudder when I think back about editing the ANT script to build and deploy a simple SOAP service. For .NET, that's a simple build/copy-the-DLL script, even without any formal deployment server setup.
Back to the original topic, is all this true of .NET on Linux? Genuinely curious because honestly, most things on Linux have a suck-it-and-see feel.
I'd say it's a mashup of the two. Like java it has garbage collection*, like Java it represents strings as immutable classes which require a reallocation for any modification.unlike delphi which classically* uses refcounted strings and will in-place modify strings that have a refcount of 1. It has operator overloading which is something that java does not have and something delphi only added relatively recently*. It has properties like delphi and unlike java. It has user defined value types like . It uses a C/C++ based synatax (like java) rather than a pascal based syntax (like delphi). It has "delegates" which are essentially equivilent to the "method pointers" in Delphi, Java also added something similar but only very recently.
My big concern with mono is that they don't seem to have the resources to maintain it the same level that Java on linux is maintained to. In particular they implemented .nets main gui library windows.forms but then declared it unsupported. They were also very slow in adding properly working support for arm hard float systems.
* AIUI there is now a version of delphi for .net which presumablly uses .net conventions on these things.
**Disclaimer: I don't know exactly when delphi added it other than i'm pretty sure it was after the most recent version I used.
note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
Late '90s software development for Windows sucked. And Windows sucked because it crashed for the slightest of reasons. And there was Visual Basic. And there was the latest hype in town: Java. Roll in .Net with C# and Visual Studio. Pretty neat and fairly idiot-proof IDE, decent set of libraries, managed execution to lower the amount of BSOD's and introduce a new language to extinguish both VB and Java.
None of these reasons was relevant outside the MS world. Plenty of languages, IDE's, editors available on Linux, some say even too many. No BSOD's, no VB. Oh wait, there's one reason: that wanker Miguel de Icaza.
"I'm not much interested in interoperability. I want substitutability. I want to be able to throw your software out."
Visual Studio Code is a rip off and reskin of github's Atom editor with some Microsoft tech bolted on.
Mod me down, my New Earth Global Warmingist friends!
Why should I care if you do any linux dev?
Java is designed to be cross platform. In this case instead of targeting an operating system, you are targeting another virtual environment. While not perfect, it works much more often out of the box than WINE does.
I hate to say it, but given the choice between ORACLE and Microsoft.. Fuck Oracle.
If you were me, you'd be good lookin'. - six string samurai
If you mean can you write graphical Linux programs the run on x11 out Wayland, the answer is yes absolutely. Gtk and Gnome bindings were some of the earliest tools for mono. In fact monodevelop is a gtk app, written in c#. Gtk turns out to be a pretty good fit for c#
An IDE is quite literally the least important feature of a language.
What a joke.
"Chief among them is MonoDevelop, which he claims is an excellent IDE; " ... which made my jaw drop.
Monodevelop is a fucking awful, AWFUL piece of software. Bloated, slow, and broken hundreds of ways.
Sorry, but if you're coming from Visual Studio, Eclipse is a piece of junk.
Peter predicted that you would "deliberately forget" creation 2000 years ago...
And you know what? We don't use any of that stuff, because we want our code to be COMPREHENSIBLE. Lambdas don't do anything for me that I can't do with a loop, and at least I can see instantly "Yep, that's a loop!" For the very few cases where it might be helpful, that's great, but its really VERY few cases. I have yet to write one.
Yeah, yeah. We've heard this before. Back in the day, people were saying the same things about those new-fangled "for" and "while" loops. After all, we want our code to be comprehensible! A loop doesn't do anything for me that I can't do with a goto, and at least I can see instantly, "yep, that's a control flow transfer!".
Meanwhile, people have embraced the new tools (which are the majority outside of the Java land - even the C++ guys have and use lambdas now), and they became idiomatic, and standard libraries were upgraded to rely on them - making them both more powerful and easier to read. As it happens, I use both C# and C++, and it's a rare day at work that I don't use a lambda anywhere. Looking at other people's [quality] code, it's mostly similar. And guess what? It's all still perfectly readable, so long as you take some time and learn how it works. In most cases, in fact, it's more readable than the code that it replaced, and more maintainable to boot (because DRY).
Java's generics are fine. They do the most important part of being generics perfectly well. Again, the things that you seem to want of them are things that negatively impact maintainability in most cases.
I was referring mostly to type erasure, obviously. How does getting read of that negatively impact maintainability?
In the meantime, Java now has this beauty. Because they can't just say Func<T>, and have it work well for primitive types.
As for DRY... I'm at a loss why anyone would think that you'd repeat yourself in Java.
If you don't have first-class functions in a language, you'll be doing a lot of of DRY for that reason alone (yes, you can use anon classes instead, but no-one actually does because it's so verbose it defeats the point). If I have to explain how and why that works, then you should probably go read some FP tutorial.
I think MS certainly looked carefully at Java and in some very minor ways improved on the syntax, but at worst the difference is small,
You think wrong, and you didn't bother to investigate enough to make such a conclusion. This was kinda sorta true 14 years ago. It's not true now. Things that C# has that Java does not include e.g. dynamic and async/await, neither of which are "very minor ways".
with Java's vast arrays of libraries, frameworks, and tools, its hard to beat.
It's kinda like the iOS app store. Sure, it has 3 million apps, but in practice you need maybe 30 for any particular case, and 300 across everything. I won't dispute that Java has more libraries, but pretty much any mainstream language/platform these days, including .NET, has all the libraries that matter, for the simple reason that all of them have a fairly large community that will write or wrap one if they need it. I don't recall ever running into a situation where I couldn't find a library to do something that I needed to do, in any popular language.