Even though news has been slow the entire week due to the fact that it’s summer and people are more interested in vacation than in technology news, we still had a lot of interesting stuff this week. Google obviously captured the headlines with its Chrome OS, but we also talked about Mono, Richard Stallman, and many other things.
Google obviously took the main stage when it announced its Chrome OS, an operating system that currently doesn’t exist beyond an announcement (outside of Google HQ, I mean). It’s supposed to have a heavy focus on web applications, it’s based on the Linux kernel, and it’s geared for netbooks (for now, at least). The first machines with Chrome OS could arrive as early as this year.
Richard Stallman took centre stage on OSAlert as well, with a heavily debated article on possible sexist remarks made by the Free software head honcho during a speech at the Gran Canaria Desktop Summit. Several attendees of the speech felt awkward and offended by several remarks made by RMS, and made their complaints known on the internet. OSAlert readers were torn.
The third big thing this week was the announcement that the parts of .Net covered by ECMA/ISO standards will now fall under the legally binding Community Promise, meaning that anyone can implement and ship implementations of said standards without the fear of patent infringement allegations from Microsoft. Good news for the Mono community.
We also discussed Gazelle, Microsoft’s research project into what could possibly be the future of web browsing. Gazelle treats every part of a website as a potentially dangerous element, and gives each of them its own process and protected space. This way, dangerous code in an advertisement – for instance – poses little threat to the rest of the browser or even the machine.
We also saw a number of project releases this week, such as ReactOS 0.3.10, VLC Media Player 1.0.0, Silverlight 3, and FreeNOS 0.0.3.
We also had two original reviews. Eugenia covered KdenLive video editor, and was quite positive about the project. Jordan reviewed Linux Mint, and was also very positive. Lastly, Eugenia took the Nokia E75 through its paces. Speaking of reviews, the review of AmigaOS 4.1 and the sam440ep will finally go live next week.
I am actually still waiting for the “fight” over mono to finish… as a .NET AND Java developer I would really like to see one of these be the default RAD-environment for some desktop-OS; and at the moment we only got Windows For now I just stick to Windows as my default OS until the fight is settled.
Since .NET imho is superior to Java I am cheering for Mono in GNOME. Lets just hope they also manage to make their own standardized framework to _replace_ the forbidden fruit like ADO.NET (one API per database engine kinda sucks).
Edited 2009-07-12 22:24 UTC
I don’t think you’ll ever see that. As long as there are Java fans and C# fans (not to mention those preferring Python, or for that matter, Javascript), there’s no chance of seeing a *single* platform become the official, favoured platform.
And I think that’s right. The open-source world is not (if you’ll pardon the pun) a monoculture – developers work in whatever environment they’re most comfortable in, be that C/C++, Perl, Python, .NET, Java – whatever. You will never get agreement on one single toolset, because that’s just not how people work.
One thing I noticed when fiddling around with Mono on Mac is just how easy it is – something that really pulls me towards it after having battled with the idea of trying to understand Java (which seemed to me as being rather overly complex).
I’d love to see a comprehensive GNOME framework sitting on top of the ECMA/ISO specifications – I’m sure there are things that the open source can do a lot better than what Microsoft has designed; its also cool how a lot of the UNIX functionality is being exposed through mono frameworks.
The problem I have with Mono is unfortunately there will be those who will demand the non-ECMA components. Even if there is a great stack provided there will be those who will base their applications on the non-ECMA components and thus make tempting these developers to the ‘free side’ difficult.
I agree. That is why Mono need to make something better to replace these parts.
Take ADO.NET as an example…if Mono where to make something equally good or better than ADO.NET (instead of just a database specific API), that even worked on .NET, what would stop both Linux, OSX and even Windows developers to choose this over ADO.NET?
Same goes for ASP.NET. Windows Presentation Foundation is perhaps a bit more difficult, but to be honest, .NET should have some sort of MVC-based cross-platform GUI toolkit that doesn’t behave like crap on Windows (which GTK+, despite its superiority on X11, does).
I doubt this will happen, as its not really that dangerous to stick with the ones that are already used by millions of developers.
Any patents that Microsoft (or anyone else) *might* have on ADO.Net, etc, *might* also apply to any frameworks designed by Mono (or anyone else). There’s just no way to tell since no one even knows if these patents exist.
The good news is you can’t patent a file/assembly, and you can’t patent an API, so the most you could probably patent would be an algorithm used by some functions. If a patent move was made against a specific function, it would be relatively easy to recode or work around it. Everything absolutely fundamental to running .Net apps is covered in the ECMA stuff.
(And now you may not even be able to patent an algorithm: http://news.slashdot.org/story/09/07/10/1218231/Judge-Invalidates-S… )
Yeah, that’s the thing with patents. A direct re-implementation of something MS built might infringe a patent, but so might any implementation of a similar concept. The direct copy may be a little more at risk, but not much more so.
Well, that is of course the problem, and the logical conclusion would be that one can either ignore the entire threat or never make anything at all (including the linux kernel).
However, another argument could be that it would be easier for the more paranoid linux users to accept a non-microsoft API despite the exact same patents apply.
If MS decided to attack with patents, most of the Linux ecosystem would fall apart. why is mono so special?
ADO.Net is actually extremely good at what it does – it is just a bad idea. It has one model – data is snapshotted and a local view is taken. This works really well for Webservices and Web, as you really, really should not be directly poking database tables on a web page, but when it comes to desktop, it is clunky. I did far too many years of Delphi to be happy with a non live data access model. ADO.Net skirts the issue by making updates fairly painless, but it is trying to solve the problem of concurrent data access with a sledge hammer like approach. Then again, you need to go with the lowest common feature set if you want to be generic, and this will be why they did it the way they did.
What you find yourself doing is writing your own wrapper and using that everywhere. This is what I did and it has travelled through two separate jobs and countless projects.
When you say “fiddling around with Mono” I assume you mean C#. If that is the case how can you say that C# is easier to understand than Java when the bases of both languages are virtually identical? The differences between them don’t start manifesting until you get into the advanced topics.
Also to call Java overly complex in the same paragraph is ridiculous. Java actually has a pretty small feature set by design. C# on the other hand is grab bag containing every feature the designers could think of.
Pick up a Java book for beginners then claim that it is an easy language to learn; I spent a good 6 months trying to get my head around object orientated principles – I eventually gave up, it was an exercise in futility.
I’m sticking with C because at least that makes some sense in my mind versus the mess that object orientation looks like.
I never claimed it was an easy language, just that it’s feature set was much smaller compared to C# and that both have a nearly identical base.
What puzzled me was your claim that fiddling around with Mono is easy while calling Java overly complex. It just doesn’t make sense. C# is clearly the more complex language, and to a novice both would seem equally daunting to start with since until you get into advanced topics the languages are nearly identical.
Try using Swing and claim compare that to C# – then claim that C# is complex. I was fiddling around with it last time, I was able to make a small widget that takes puts, regurgitates them, parsing a file etc. It was as easy as eating a doughnut. What I did was by no stretch of the imagination as complex but it was considerably easier for me to accomplish that with minimal exposure to C# when compared to Java.
i disagree. Java is not Swing. as language, C# is much more complex.
Language complexity is a bit of a strawman. No language is too complex for any give programmer. It’s the complexity and scope of the libraries that makes or breaks the platform.
Big win for Python has been that the standard libraries are easy to use – they only use OOP approach if it’s needed.
C# is a more complete language than Java – though I don’t see why they can’t add the missing C# features to Java and get it over with.
And the point of that post was what? you take *ONE* component out of a larger paragraph and ignored this:
Which was talking about the ease of use (and unrelated to Swing). Maybe next time you read the WHOLE post and take the WHOLE post as one chunk rather than slicing it up, changing things around to make it say what you want it to.
You are talking apples and oranges here. Valid comparison is Swing and Gtk#. Gtk# probably didn’t go down the overengineering route as badly as Swing.
If you are not exactly the fan of OOP-for-everything, you may like Qt’s approach to gui’s as well. Qt doesn’t use subclassing for event handling either.
And, if you are waiting for “standard to emerge” between Java and C#, your wait is over. Java is pretty dead for linux desktop app development (I think Eclipse is the only one still standing).
Mono really needs to hash it out against Python and C++, which is a different proposition altogether…
No. Valid comparison is java-gnome and Gtk#.
http://java-gnome.sourceforge.net/
So far Python is the best option for Linux desktop app development, IMO.
Even game development is possible on Python, see Civilization IV as proof.
Edited 2009-07-13 08:21 UTC
Python is indeed very nice but as I found out it is better for smaller, quick apps and scripting. I definitely admire Python but wouldn’t develop more complex apps with it. Dynamic typing can lead to annoyingly trivial bugs that might pop up well into production use. With a statically typed language a compiler would catch those early on. PyChecker might come to the rescue but as far as I know there isn’t one for newer versions of Python.
“Java give you jitters? Relax with wxPython!” – one could say, but I find myself going the opposite route.
The example was crude but it still stands; to get something very basic accomplished – take a look at ‘Learning Java’ from the O’Reilly book series and tell me that a mere mortal like myself could ever get my head around some of the ideas introduced at the beginning; hell, there are programmers of 20 years who have difficulty understanding them, what hope is there fore a mere mortal like me to ever understand it?
The point was to accomplish a very basic task, Java seems to be a hell of alot more complex than it needs to be when compared to C# where I was able to pick up some pretty basic VB skills I acquired 8 years ago and retrofit it to a small C# project I fiddling with at home.
I’ve always found that OOP has turned what might be an interesting idea into something overly complex and convoluted – where one spends half ones time wrapping ones head around concepts rather than hitting the ground running.
What I’d like to see is a closer relationship between LLVM, Mono and Python – reading some of the developer mailing lists makes fun reading at night.
Well there’s your problem. You probably picked the worst possible Java book out there to learn from.
I don’t own it, but I skimmed through the Google Preview of it. The author for some inexplicable reason decided to augment the canonical “Hello World” app with everything and the kitchen sink, including a GUI, inheritance, interfaces, action listeners and threading before he even introduces those concepts. He does all this in chapter 2 while explanations for things such as comments, data types, loops and if-statements is not explained until chapter 3. A huge mistake on the part of the author for exposing the reader to too many concepts too soon and without explanation.
His code is also horrid. He implements the GUI by subclassing JComponent and overriding the paintComponent() method just to display a String. No one would ever do this in real code, ever.
Sorry for the delayed reply – the main reason I purchased the book was because it was from O’Reilly and I assumed they had a good reputation for publishing books of a decent standard. I guess this is one of the exceptions to that wisdom I inherited having owned prior O’Reilly books relating to networking.
Relevant essay by Paul Graham: http://www.paulgraham.com/noop.html
You should really compare Swing to Windows.Forms or WPF. Using a decent IDE like Netbeans or Eclipse it is quite easy to put together a simple form and add some logic. However, try to write a moderately complex GUI application using Swing and Windows.Forms and you will notice that Swing is a relativly well designed GUI toolkit and Windows.Forms is crap. And WPF has quite a steep learning curve, it is quite complex and it totally lacks things like MVC for Lists, Trees and so on.
it totally lacks things like MVC for Lists, Trees and so on
It has something better, deletages. the MVC pattern is easily implemented with it, and even more.
Java has no comparition with C#, even if the troll in you insist with the contrary.
Edited 2009-07-13 13:09 UTC
If it is so easy to implement the MVC pattern for controls using delegates, why didn’t Microsoft do it? Just try to put 100000 items in a Windows.Forms listview, in a WPF listview and a JList. Swing is the only toolkit of the three that can handle this.
Anonymous inner classes in Java allow you to do similar things as delegates. And the Java class library is way better then the .Net one. Just have a look at java.util.concurrent.* .Net does not even provide a blocking queue which is essential for multithread programming. And if you want to have a language that is nicer than Java and C# and runs on the JVM, have a look at Scala.
Edited 2009-07-13 13:42 UTC
I see your lack of knowledge of WinForms and WPF, delegates allow more than just the MVC, like The MVP, MVVP, it is more extensible. But please, don’t say one is better than the other when you clearly don’t have the experience, your hate to MS just makes you jump to inaccurate conclutions.
You compare apples with oranges. You can use delegates to create MVC applications, but that does not mean your controls will automatically get MVC just because C# has delegates. WinForms and also WPF do not use MVC for lists, trees and tables (actually this is not quite corrent, there is a virtual mode for at least lists, but it is more of a joke compared to MVC in Swing).
I work for a company that primarily develops applications on .Net, so please stop telling me that I don’t have experience with .Net and that I hate MS. But I know many different languages and GUI toolkits and from a technical POV C# is neither the best language I know, nor does .Net have the best class library. In my opinion, Windows.Forms is the worst GUI toolkit I know. WPF is a huge step in the right direction, but it also lacks in certain areas.
In my (a Linux user’s) POV it isn’t really valid to compare Swing to Windows.Forms or WPF. For that simple reason that there is neither Windows.Forms nor WPF available for Linux and will probably never be, let alone available on a free licence.
Some ideas in OO design can be hard to understand, but it really is a powerful design methodology when you “get it”
Java is not the best language to learn OO. There are too many non-OO compromises left in the language. For example primitive types and static methods. Things got better with autoboxing in java 1.5, but this is one thing that C# does better than java.
If you are a C programmer, you can learn OO by studying and using object-oriented C frameworks such as GTK+. OO in java and C++ works exactly the same, except that it hides many of the details from you.
There are so many ways to do things with the standard base of Java, that its confusing. The differnt Gui Api’s, the different Ways to create a web page, the competing IDE’s, the Middle ware. Its sort of confusing and counter productive. The relatively nice thing about .net is there usually is one standard of doing something, which is the way Microsoft recommends.
Having said that, I still prefer Java. It just takes more time to research.
C# vs Java is not just one language against the other it is also the std libraries of .NET vs JDK and CLR against JVM and the concepts that follow from this.
The .NET libraries are many, many, many times easier to use compared to the JDK libraries. In .NET you have one or two ways of doing a specific thing and you are almost never in doubt what the designers were thinking when they created the API for the given namespace. It is a completely different story for the JDK, it is convoluted, full of surprises and gives you plenty of guidance on how to do the wrong things (and no guidance on how to do it right). Essentially the concept behind the core .NET is POLS (Principle Of Least Surprise) and it is done in an coherent way. JDK on the other hand seems to be made by at least 5 sub groups that does not talk to each other or sometimes actively tries to sabotage each other.
Then there is the component orientation of .NET that is second to none when it comes to system programming. This is the real innovation of .NET is that you roll up your library in one self contained component that contains all you need for development and runtime for different consumer languages and different producer languages (with the DLR now also scripting languages can be producer languages) so .NET advocates complete transparency when making components. This is good for open source in that it very easy to bring in Python, Ruby and C# into the same application domain (you can extend C# classes in Python and extend from that in C# again, try doing that in Java
Probably not Java but JDK and JVM are overly complex and should be revised (or Java completely discontinued, nobody loves it anyway).
You call it “overly complex”, I call it “robust”. If .Net reaches the same level of maturity (although as a Windows only toolkit it may never do) it will also get features, multiple implementations, helper tools etc.
BTW, calling for Java to be discontinued is… funny, to say the least.
You can’t be serious. The JDK library is showing its age at some points, but it is fundamentally well-designed. For example, the available collections are reasonably named and also complete. Interfaces are named after concepts, and implementations are named after specific algorithms. For example, you have a Set interface, implemented by a HashSet and TreeSet class.
In .NET there are no interfaces at all for some concepts (for example Set). collection classes are named confusingly (List is an ArrayList, SortedList is not a list at all, but a dictionary where the keys are sorted, etc. ). Thread-safe collections are extremely incomplete.
And don’t get me started about the documentation. The MSDN documentation is a complete mess. There are examples in all .net languages, but never more than one paragraph about one topic. For example you have different pages for “type X”, “members of type X”, etc so you never have a useful amount of information on one page.
They’re not the same on a much more basic level than you imply. The Java syntax is very wordy, C# is terse. Java pushes the developer down a very specific route, C# is a lot less interested in protecting the programmer and more interested in getting to the point that the job is done. C# is a lot simpler to come to from C++ that the transition from C++ to Java for example.
C# is absolutely the simplest thing in the world if you are a C++ programmer who has also done a lot of Delphi and VCL work. Java wants me to do a lot of work to get the same results. I don’t have time for that.
Superficially C# is very similar to C++. But many of the things you take for granted in C++ are impossible in C#.
For example there is no mechanism for deterministic deallocation of resources.
There is not a single feature in C# that applies to all other parts of the language. For example, you can not use operators when using interfaces. You can have instance extension methods, but not static extension methods. You can not do any calculations on generic type parameters. The list goes on and on.
C# started as a decent java-inspired language that did some things better than java. But nowadays it is just a horrible pile of nonorthogonal language features.
I will take java any day over C#. A simple language with complete and comprehensive library support is preferable to a kitchen sink language like C# where every new technology fad results in an extension of the language.
If you want a modern JVM based language, take a look at scala.
Edited 2009-07-13 13:52 UTC
non-deterministic resource deallocation? Welcome to garbage collection.
As to your other complaints… welcome to functional programming.
Seriously… you want to add a static method to an instance variable? do you plan to allow the dynamic creation of a new class?
His other complaints had nothing to do with FP.
No, he wanted to add a static method to an existing class without subclassing or recompilation. Currently C# allows you to only add non-static methods to existing classes. Which seems like a pretty artificial limitation.
Garbage collection has nothing to do with it. If an object (like a file or a GDI brush) has some resources associated with it, I want them to be deallocated immediately when the object goes out of scope, and not a few minutes later when the object is garbage collected.
There is the IDisposable interface and the using(…)-Pattern, but there is no way to enforce this. That is why C++ (even managed C++) has destructors that get called immediately. RAII is tremendously useful, but impossible to do safely in C#.
What does that have to do with functional programming? C# is not a functional language. It is just a language that took a few features (closures) from functional programming without understanding the big picture. For example, the biggest property of functional languages is referential transparency. But it is very difficult to ensure immutability in C#. In fact most language patterns (property and array initializer syntax) encourage mutable objects.
Scala has none of the deficiencies I mentioned and is much more functional than C#.
I want to be able to add a static method to a type. To be precise, I do not want any static methods in the first place. I would prefer the scala approach.
But if you have a language feature like static methods or interfaces you should make sure that other language features (operators, extension methods) work together with that feature. Otherwise the language is nonorthogonal, which is just bad design.
Garbage collection has everything to do with it. The garbage collection system takes over responsibility for resource deallocation. you use a language with GC, you accept that. Managed C++ has GC features but that is more a function of being compiled to IL code rather than it being a central feature of the language.
C# is an evolving mixed paradigm language. it is both imperative and adding Functional features to support interesting things in the framework.
As to what you want to do with Static methods, you want it to work in a way you like rather than a way it is meant to work. You want to add static features? you will have to subclass it. It certainly should never be able to be done at run time.
Edited 2009-07-13 19:34 UTC
Garbage collection takes over responsibility for memory deallocation. For more valuable resources such as windows handles and file handles, you need a more precise mechanism. C++ provides such a mechanism. And so does C++/CLI. But C# does not (there is no way to enforce that somebody calls Dispose() on your object implementing IDisposable).
Managed C++ has both. You can have garbage collected object (allocated with gcnew) that gets garbage collected, but you can also use RAII since you can have deterministic destructors that get called when the object goes out of scope.
You can’t really call it functional because it has very little support for immutable data structures. Immutability is a prerequisite for referential transparency, and referential transparency is the core property of functional languages.
I don’t want to do anything at runtime. I would just like to add static methods to existing types, since static methods are (unfortunately) very common in C#.
If you write the type name and a dot, you get the list of all public static methods of this type and its base types. I would like to add a method to this list.
An example would be adding a Parse<T>(string) method to System.Enum.
Whether adding methods to existing types/instances is a good idea is another topic. But if one is possible, then the other should be possible as well.
By the way: enums are another topic where C# is broken. Why is it not possible to use enums as type parameters? And why do enums not implement the IEquatable<T> interface?
I think static methods and fields are a stupid idea in the first place. That is why they don’t exist in well-designed languages like scala.
The problem is that those additions do not fully integrate with the features already there, making the whole language a bloated mess of conflicting paradigms. Right now it’s just a grab bag of containing every ‘flavor of the month’ programming gimmick, but no actual coherence between those features.
Extensions methods are a compile time feature, not runtime.
And “the way it is meant to work” is what exactly we are complaining about. The way the designers meant the feature to be used makes it non-orthogonal to the features the language already possesses.
I’m going through a guide learning C# (well, actually a book) and it all makes sense; there is no brain contortions needed because it is all understandable even for a person like me who finds picking up programming a difficult thing to do.
I can see why Minguel loves the language; it is easy to hit the ground running and pumping out software.
If you’re a VB, AmigaBASIC, AMOS or pretty much anything but Java programmer, you’ll find it easy.
But that is a decision each developer must make. Making it available and part of any standardized implementation is what is important.
It would be nice if some open source libraries were added to the standard for Databases and web servers.
Thank you, Thom, for continuing bringing us news through the summer. At the end of the day (literally), it’s great to get a quick update on what’s happening in Techville (or in Frisian: Techum).
Yeah, there’s so much covering over Google this week that was sickening!
Not blaming Thom who does a great jobs reporting news, but everyone else all the sudden wanting to join in the Google OS hoax! (Tho Chromium Gets Native Theming on Linux was a bit unnecessary too)
Anyways, I hope next week is google-free.
I first have to admit that I am rather fond of Google and most of their services. So for me, Google news is good news. But I wonder about why people don’t like to see news on Google, can’t you just ignore it and read the other articles? Granted, not everyone uses Google (maybe Search though), but not everyone uses Linux either. And I can recall weeks filled with Linux news. You don’t hear people complain about those weeks!
I’m not surprised Google manage to hit the news (even though I agree, the native theming announcement is a bit over the top indeed). Google deploy new services quite frequently. I’m already looking forward to Waves (which looks quite a bit like IRC mixed with a feature ICQ already had years ago).
I’m definitely looking forward to the AmigaOS/Sam review. Let’s up it’ll be worth the wait
I heard a speech of RMS, in Nantes, France.
He speaks about these virgins, but not as you have said.
Telling us that he was sexist, is really a big lie in front of what he had said.
And please, before someone speak about any person, try to listen to what he has said, by yourself, instead of submitting crazy comments.
We have our minds to value things, we don’t need others to do the job for us.
How come I get these ads with scantily clad women all the time on OSAlert? That’s a bit sexist, innit?
What are you talking about? firstly OSAlert.com doesn’t choose the advertisements and secondly all I get is an advertisement for a Muslim dating service.
Btw, why is it sexist? its terrible for a female to express their sex and sexuality – talk about a perverted view of freedom; “you’re only free when you’re wearing a sack, devoid of sex and live like a hermit’ sounds your world view of the matter.
Is your sarcasm detector off today?
It is difficult to detect sarcasm when the original post wasn’t even slightly funny.