“Mono as it currently stands has serious problems, including strategic and intellectual property concerns. Java as provided by Sun is not open source or GPL-compatible and thus a nonstarter. Many strong proprietary companies such as Microsoft are moving full speed ahead on high-level managed language platforms. Can open source compete, or is it too unable to make hard decisions?” Read Havoc Pennington’s article about the future platforms of OSS.
No matter what they say, a C language of some kind will be around for a while!
Of course it will, nobody said that C “will dissapear”. What both Miguel and Havoc talk about is about the “next step” in desktop applications which they don’t have to be low level, because desktop apps don’t have the same criticality as embedded systems, and so they need to be delivered to customers _fast_ and with as less bugs as possible. This is why Java/C# come in, not because “C is no more” (C will always be here if not just for portability to small devices that only support C and weird compilers).
C will ever be alive If you have fast processor, it doesn’t mean you can write slooooow applications (e.g. in Java). Try writing something like MS Office in Java, I wonder how fast would it work.
People, you are losing the point of the article. In fact, I could even say that the comments are off topic!
The topic is not about which language is the best, it is about what platform the desktop OSS world should follow and that doesn’t always mean the “best” language (whatever “best” is), because for strategic reasons the XX language might be better suited than the well known ZZ language for *desktop* apps because: a) it is less error prone b) it has a whole API behind it that makes it making it a “platform c) it is more portable d)it is easy to make guis/program for it e)it is Open and Free f)other.
So please, stay on topic: this is not a programming language shootout, it is mostly a discussion about a good strategic decision to be made where more reasons than “my language is better” are taking place for the actual decision.
IMHO the biggest problem will the internet browsing. If the client-side .NET will replace the existing technologies (javascript, flash, etc) the linux clients will can’t reach the popular web sites.
In order to have a valid desktop solution, you need three things:
1. A windowing system with a clean API
2. A language with a good runtime
3. A library with good foundation and UI classes
For point 1, I still think that X is not the solution.
For point 2, we need some kind of compatibility with C/C++ to provide a smooth migration path
Well, what about GNUStep + display ghostscript? GNUStep is based on Objective-C which is basically C + around 12 instructions. The compiler is GNU (hence compiles also C and C++). The library is based upon OpenStep which has evolved now into Cocoa (MacOSX). My feeling is that if the same kind of effort put into Mono or other OpenSource frameworks where put into GNUStep + Ghostscript it would become a valid alternative.
Even though Miguel dismisses Python off-hand, I think Python, combined with a good toolkit, would be a *huge* productivity boost for open source programmers. If Parrot ever gets production quality, and manages to compile Python code down to something competitive with other dynamic languages (ObjC, Lisp, Smalltalk), open source programmers would have a very significant leg up. On the other hand, I’m not enamoured with the whole idea of VMs. I think they are a just a fad. Especially when we are talking about the OSS world, binary compatibility and binary portability don’t mean a whole lot.
On the whole, I think Miguel is far too concerned about .NET. Things like XAML are a step backwards. XML is a horribly static and unexpressive way to specify a UI. The contortions that APIs like XSLT have to do are testement to that. What is needed is a rich, expressive language where UIs can easily be specified directly. Python buys you a lot of what XAML would, even things such as keeping UI files seperate from application code. Meanwhile, it preserves the ability to transparently utilize the whole language for specifying UIs when necessary.
C++ is supported by both GTK and QT, its the present, not the future.
The main java implementation still isn’t free (speech), so it will be hard to convince anyone who supports GNU to use it.
Mono seems promising, I haven’t used it, but C# offers the same plus’ as java, and Mono is open source.
I don’t really think the “future” will be that different from today, GNU zealots will scream “C is more legal”, QT zealots will say C sucks, and C++ is better. In the end, all should be supported by the desktop, and the programmer should be able to choose what s/he feels is supperior (or whichever he is most experianced with etc).
GTK already has bindings for C#, and C++, and is getting support for Java currently. So long as the apps look the same, I really don’t think users care which language is used. Of course, it certainly helps you gain a larger developer base if you use a popular, well known language…
Actually the choice is just the third. You can choose to use something that has been around for years,
(compiled/static/no automatic gc/buggyish/a pain to use ) like C or C++.
Than, you may choose a more modern system (JIT/static/automatic gc/less buggyish/a pain to use) like Java or C# or VB.NET.
But, soon, you may even choose to use Parrot-based systems, (JIT/dynamic/auto gc/a joy to use) like perl python ruby and scheme. Static Manifest Typing has been an error since the beginning, is time for it to go away.
I’ve just recently seen a paper on how, in Longhorn, Microsoft will be moving away from the COM / DCOM concept… and in that very paper, they were talking about the *successor* of .NET…
I still think that .NET is a *classical* Microsoft move. Introduce a new technology, have all competitors struggling to keep up, and once they *have* caught up, introduce a *different* technology solving the same problem, so that competitors *again* have to play catch-up.
How many database accessability layers has Microsoft cycled through in recent years? I strongly believe they’re doing the very same now with language / component layers. And the Mono people swallowed it bait, hook, and sinker.
For point 1, I still think that X is not the solution.
Eh, X is a low-level graphics layer, and its API is appropriately primitive. Indeed, projects (eg: XCB) are underway to make the API even *more* primitive. Its interesting to see that X gets so much attention in GUI discussions when its counterparts in Windows/OSX (GDI/CoreGraphics, respectively) never get so much as a mention…
s/desktop/toolkit/
This article tries to convince us something is wrong with the current OSS platform architecture. This is not the case!
Why rewriting (at what cost, by who, and for how long ?) applications and services that work perfectly today, which have a very high reliability and low bug count, and which are improved at an accelerated rate ? That would not make any sense, except for those who are opposed to OSS…
Yes!
All three of these languages should and will prosper on the OSS desktop. Also Python (which has excellent support for all of the major GUI toolkits such as GTK+, Qt, wxWidgets, and Tk) will most likely see increased usage.
Probably the language with the brightest future is C#. Mono and GNUDotNet look like they are progressing rapidly. MonoDevelop also looks really nice. I can’t wait to try these technologies out. From the ASP.NET programming I’ve done recently I’ve started to fall in love with the C# language. It combines the best features of C++, Java, and Perl into one neat, clean, and useful language.
Unfortunately, the Java scene isn’t looking so hot: Swing is still not very fun to write programs in, SWT is yet another thing users will have to install, and gcj is far from being usable for AOT (Ahead Of Time) compiling most Java applications. However, Java isn’t going away anytime soon. Several developers will stubornly continue coding away in Java because their code is already written in it, or it is the language they know best, or in many cases purely ideological reasons (if it is from Redmond it’s evil!).
C++ is of course C++. It will probably never ever die. Almost all programs written for KDE are written in C++ and this reason alone ensures a bright furture for C++. Also, for shear number of features, power, and libraries available, C++ is truly hard to beat. It is also the easiest language to leverage legacy code from. C++ is nowhere near extinct.
Of course there will also be several fringe languages in use as well, such as Lisp, Ruby, Haskell, Objective-C, etc.
At least that’s the way I see things.
sorry, I forgot to say:
why python perl or ruby are not suited for the development of Gnome or OOo ?
Well, performance, but parrot will adress it
There are lots of desktop projects written in pygtk or ruby-gnome2 or perlgtk.
They are much easyer to write than those written in C#.
The PragmaticProgrammers (Dave &Andy) even wrote a WM in ruby, and they say that was wasy.
Gnome used a WM written in LISP (statically manifest language, as anyone knows..) for years.
Man, you *want* to be flamed
Its a shame that there cant be some kind of generic centralised framework allowing multiple backends (.NET, Java, Parrot, etc…) to connect to this next step. The problem once you start going to this ‘next step’ is that you lose alot of backwards compatability with existing language bindings and so forth.
The problem is as havoc pointed out that either way you lose. Forget everything about the details of .NET and Java. The problem is that currently both frameworks are controlled by companies in some form or another. It would be a severe mistake to put the future of OSS into one platform. The amazing thing about OSS has been its diversity. If somthing goes down, it dosnt matter, since there are probably 5 orverlapping ways of compensating.
Lets say that GNOME adopts Java, and Sun suddenly plummets, sendiing java’s popularity down the drain. Even if Java was open source completly (or say they picked Python instead of Java), an open language can also losepopularity quickly. Look how quick Python ‘stole’ major popularity of the quick-scripts department from Perl in such a short time?
When GNOME chose C in the begining, it was practically a standard, and so the only decision was really if it should be C++ or not. The falmes for that decision are with us still today.
That is why GNOME can’t ‘choose’ any one o fthe current languages. Not GNOME and not any other platform. So what is the solution? In my humble opinion, diversity. Mozilla can have inclusion of many different scripting platforms that could be loadable like plugins. GNOME has language bindings for all of those scripting platforms. Underlying technologies (such as forms of IPC) have to obvioussly be scripting platform independent (the actual implementation of them isn’t important, as long as the Java-implemented dbus server can talk with the .NET dbus client).
But what about ‘real’ core code? Say OO.o wants to simplify code and write major parts using Java or whatnot. This is he type of code that is core enough to get written once and shouldnt be rewritten because of the flavor of the month. The problem is, obvioussly, that there is no open source projet, that was open source from the start, that tries to implement what Java and .NET are trying to achieve (Python et all. are simmilar but not really that, due to being too dynamic, not having as part of the core libraries things like EJB or SOAP etc…). This is, I think, what Havoc’s real problem is. There is currently no platform availible for this for the OSS group, and while the world moves foreward, OSS developers are stumped and dont have what to use…
Whew, that was long…
There is no successor to .NET for Longhorn.
Longhorn’s APIs will be built using managed code and run on the .NET runtime. The combination of all the APIs is called WinFX, which will be the successor to Win32. It is true that .NET applications built using Longhorn-specific APIs won’t run on other OSes, but this is no different than how applications built using C/C++, etc. and utilizing platforn-specific APIs are not cross-platform compatable. Plus, you can’t expect MS to include the entire OS in the CLI specs.
Lisp isn’t statically manifest typed. Rather, Lisps generally use dynamic latent typing (R5RS Scheme, Guile) or soft latent typing (CL, many extended Schemes).
I think that, even if Microsoft tries to bait and switch with .NET, it could still work in the favor of OSS. If software vendors spend the next few years moving towards C# and the CLR, they’re going to develop lots of their own code that won’t necessarily have anything to do with Microsoft’s class library.
Suddenly a platform (Mono) that is still interested in providing C#/CLR support starts to look a lot more interesting.
The thing many people don’t seem to realize regarding Mono is that C# and many core portions of the .NET platform are ECMA standards. Microsoft can’t do a thing to hurt these. It’s true that WinForms and some of the XML handling stuff are a little bit murky for OSS, but the core foundation of Mono is on very solid ground from a patent and IP standpoint. Just like it is impossible to put the genie back in the bottle when you open source, it is impossible to put the genie back in the bottle when you standardize. C# is a standard, as is the CLR.
Mono already has enough platform libraries to stand free of Microsoft technologies if they suddenly decide to yank everything that’s not part of the standard out from under them.
Also, who said Mono had to be completely 100% compatible with Microsoft’s implementation of .NET?
I know it was mentioned earlier, but why isn’t GNUstep getting more attention?
+ Some compatibility with Mac OS X.
+ Object orientated language with Objective C
+ Not dependent on X
+ Highly portable
That wasn’t much of an article anyway, pretty small amount of options presented. There’s more in the world than Java, .NET and C/C++.
>> Also, who said Mono had to be completely 100% compatible with Microsoft’s implementation of .NET?
If it’s not 100% compatible, what is the point of Mono ??
It’s nice to finally see some critical thinking over the Mono and MS patents situation. I think that this SCO story has woken up the community. MS could sue comppanies using Mono and seriously hurt adoption of OSS by playing in court rooms for years and years.
Thats’s the reason i think community should focus on Java or emca compliant Mono whit our own libraries not MS forks. The idea of XML-based guis is interesting i would like to participate in that effort.
But XAML killing HTML? i doubt it. There are more and more HTML reading devices entering the net (TV:S, phones, computers…) xhtml is still alive when we die. =)
Why not look at objective C? OS X is based on it. There are libraries available from GNUstep. There are no problems with the license. It works today. Contrary to Java and Mone it works on many platforms – *BSD’s, Linux, Solaris… x86, Sparc, PPC…
Seeing Java’s GUI performance I wouldn’t want to use that (swing). I don’t know about Mono but I have a major problem with Microsofts IP rights/patents. Mono is still too uncertain to base Gnome on.
Personally I don’t worry about being sued for distributing mono. Are RedHat, Novell and IBM willing to distribute mono? If so then lets go ahead. If not forget it.
If you’re going to pick a JVM then standardize on just one and make sure it’s an open source JVM. I’ve written code in java and it’s a nice enough language. I never download java programs because it’s too much pain to get them to work with open source JVMs. I would never distribute java programs for the same reason.
I prefer coding in Python to using java, but I recognize that the ideas of java have their place. In real life, java is useless to me because all the JVMs are completely incompatible.
So basically, my vote is for mono if RedHat, Novell and IBM are cool with it. Otherwise standardize on _one_ JVM (not Sun’s) and go with it.
aren’t programs written in java always slower than those in c, c++…?
i mean, gnome isn’t already very snappy or fast, and so are evolution and openoffice.
gnome should become faster, not slower and even more bloated.
so is java really a viable alternative to .net, at least on the desktop?
Just wanted to say that I have just discovered the joy of programming: I started form nothing 2 weeks ago, with an idea of algorithm. I choosed Python/pyGTK + glade. It is nothing but fun: with no knowledge of making interfaces I developed all the GUI in one evening (with glade), I can test all the stupidest ideas in an interactive shell, I do not fear the exceptions: never got core dump or segfault, just red lines of text in the shell, with exact address of the fault. And I develop on MS W98 at work, on Linux Mandrake 9.2 at home.
So I think it’s not important which language to use. It’s important to get as clear, usable and programmer-friendly structures and tools as it is possible. As a complete newbie I do preffer high abstraction layer over the core programming, cause for me it’s just simplicity of code and possibility of programming the idea, not the atomic subsubroutines. So, as I think, the winner — in terms of the article — will be the easiest and most profitable (i.e. e.g. most portable) solution, for we are lazy humans indeed.
Hi,
I think you missed a point : as Linux will come on desktop, many companies will try to migrate their software on the Linux OS. Moreover, someone who will start a new project, will think about a MacOS X or Linux version (as 90% of professional software runs on Windows)
I think OSS Community should think about how to migrate accross system and how to develop in one shot developpement a mutli OS applications.
Nowadays, real solutions are :
– C++ / QT
– C / GTK+
– Java / Swing
But,
– QT has a cost on Windows, so why buy a QT Plateform for an hypotical linux version ? Companies will prefer C#/WinForms apps
– C and GTK are definitly not *productive* environement where you can put unexperienced developpers, and have a result
– Java / Swing (or SWT) are TOO slow, and *moreover* it has always looked like a JAVA apps, not has a Windows or GNOME apps. Look and Feel are important !
Regarding, this analisys
– GTK# + C# (Mono or .NET) could be a solution, if GTK# becomes more mature (real .NET DataBinding) and Mono community focus on MonoDevelop IDE
– Project like Java-Gnome should have a full support from Sun or IBM. That could permit to have a trio like GTK+Java+Eclipse has a standard IDE on Windows and Linux
I am interrested in any comments (here or by mail)
“- Project like Java-Gnome should have a full support from Sun or IBM. That could permit to have a trio like GTK+Java+Eclipse has a standard IDE on Windows and Linux ”
I think this is the most important (or at least most productive) statement anyone on this forum has made.
Personally, this is what I would like to see.
I think that Python has unique feature, enabling very short
development times without producing messy code. Python with
C++ bindings would be the solution.
Python and Rex are the only languages that run on Java platform besides Java.
DG
I think the wild chasing after .Net currently going on in the Gnome community is perhaps more than it is worth.
Please bear in mind that Longhorn *does* have revisions to the .Net framework, and applications will have to be rewritten, albeit to a limited extent. Essentially, .Net wasn’t ready for hosting larger applications, and some changes you have to work out by doing.
Also remember that this is effectively a single-platform entry into an increasingly multi-platform world. around 70% of all web servers, according to Netcraft are running Apache, not IIS, which limits interaction at that level, at the very least. If MS wanted to produce a lock-in, they would need to have multi-platform versions which were clearly good, but weaker on the other platforms, to direct users to windows. It seems that Miguel and others are doing a sterling job in this regard.
Java… It’s slow, very (very, very, very) resource-large, still has bugs, is focussed towards b2b and large institution database viewing app creation. When writing large applications, Java doesn’t work. I know; I’ve tried using it to write a server application that processes images. Sufficed to say, it was very hard work and Java just isn’t designed for it. It isn’t any wonder that Mozilla’s Java-based mail program never saw the light of day. In addition, Java doesn’t have very good language bindings and it really is a dog to get it to talk to other languages due to the compilation profile.
So where does this leave us? Back at C and C++, really. In reality, whatever the state of your toolkit(s), the language allows you to build from first principles and get things right. I will freely admit to only having used QT as a toolkit lately, in addition to Java, so I will only speak on that. I find QT to be well built, highly intuitive in structure and operation and ultimately very quick to create applications with. To take an example, having scarcely used the toolkit before, it took me a single day to write a complex network remote monitoring and control application. Having used VB before, I would expect that it would allow me to do the same thing in the same time, except that VB as a language has a tendency to limit itself, and then you have to compensate by coding in a way that is far harder. Honestly, it’d take about 3 days in VB. Java, probably 5 days, looking at the code.
Anyway, please excuse my ramble… In other words, though, C/C++ are still the best for creating applications, especially when they get more complex and more powerful. Adding language bindings to toolkits helps further, and tools such as KDE’s DCOP and QT’s QSA help as well, offering free scripting abilities, which are increasingly essential in today’s high-data world.
As has been stated above, Microsoft is still and will always be in API CHURN mode. Therefore, consultants love it as you can always come back every three years to your clients and say “Want me to rewrite that for you”!
Java’s stability allows me to write more software solutions for less MONEY.
And keep them all in production.
Java should be the CTO and the CIO’s choice.
To be concerned that Java isn’t Open Source is FUD.
( An Open Source Java means some Idiot will add POINTERS to it, turning it into the problem it fixes( C++ )).
C/C++: are Dead Languages for Business.
– Still no String class?
– Still no Accurate class for Money Calculations?
– Besides Microsoft Killed C++ by killing MFC development in Windows.
If it’s not 100% compatible, what is the point of Mono ??
Umm, what’s the point of any development environment? The point of Mono is to simplify and speed up the development of GUI applications. No matter what you think about Microsoft, C# is a nice language and .NET is a well thought-out architecture. Much of C# and .NET were designed by Anders Hejlsburg (I think that’s how you spell his name) who is best known for writing TurboPascal. C# learns from the mistakes and problems of Java and unlike Java, .NET is designed from the ground up to be interoperable between languages and support easy access to low-level libraries.
Additionally, Mono could be a boon to web developers. ASP.NET is simply the best thing since sliced bread for creating dynamic websites. Having Apache/Linux support for ASP.NET would be very useful indeed, and as far as I know ASP.NET is not encumbered by patents.
Miguel de Icaza saw that C# and .NET could be useful to the OSS community and I agree with him. One of the biggest problems with the OSS community in general is this belief that Microsoft is the devil incarnate and somehow Sun, IBM, and Apple are a lot better. Not all OSS developers are this way, but enough of them are to be sickening. Just because C# was invented in Redmond doesn’t mean it isn’t useful. Should we get rid of the Taskbar and “Foot” or “K” menus just because they resemble a prominant part of the Microsoft Windows interface? Microsoft has a lot of brilliant people working for them, it is no wonder that they occasionally have a good idea or two.
Also, Objective-C is not really a good cross platform option currently because GNUStep is very poorly supported on the Windows platform, making it useless to a lot of developers. Remember, not all OSS developers run MacOS X or *nix.
In my opinion, the future of desktop application development belongs to C# and Python. Mark my words, Java will be another Netscape Navigator within 5 years.
i agree with comments on Java GNOME is one of the solutions.
Java-GNOME
http://java-gnome.sourceforge.net/
fyi, it can also use glade description.
and also a bunch of Java-XUL toolkits
http://www.osnews.com/comment.php?news_id=6239&offset=15&rows=30
i mention XUL because of its cross platform nature.
PASCAL!…
About a month ago I went through this question myself, trying to figure out which language to use for a certain job, C++ is nice, but it’s not great for Gnome unless you don’t mind not having an IDE (Glade just kept crashing on me), Konqurer is apparently nice, but I don’t have KDE installed. Java was an option, but I wanted something i was more familiar with, so I googled for some Linux compilers and found good ole Free Pascal.
This version of Pascal I believe suits the needs requirment… It’s cross platform, OOS (LGPL), and even has an AMAZING RAD IDE for those who like such things called Lazarus.
With Delphi, Kylix and Lazarus, there are some mighty fine modern Pascal compilers up for option, supporting numerous platforms (FPC supports Win32, Linux, BSD’s, Amiga, Mac, etc iirc).
As has been stated above, Microsoft is still and will always be in API CHURN mode. Therefore, consultants love it as you can always come back every three years to your clients and say “Want me to rewrite that for you”!
Why do all the FUDsters have to keep bringing this ridiculous argument up? Mono doesn’t have to chase tail lights at all. It already has some very promising open source libraries of its own. GTK# and wx.NET both look very promising and are not affected by the actions of Microsoft in any way whatsoever.
C/C++: are Dead Languages for Business.
How ridiculous! Most of the world’s existing code is written in either C or C++. Even if all new code were written in another language starting today, there would still be billions of lines of legacy C and C++ code to maintain. People still write COBOL and PL/1, do you honestly believe that C and C++ are dead?
– Still no String class?
What’s std::string then?
– Still no Accurate class for Money Calculations?
I have no idea what you mean by this exactly, but there are several fixed-point C++ class libraries that should do the job pretty nicely when it comes to dealing with currency values. I’m ignorant about this, but what does Java offer in this regard that is so much better than the available C/C++ options?
– Besides Microsoft Killed C++ by killing MFC development in Windows.
Now I know you have to lay off of the crack. C++ is hardly dependent on the active support of Microsoft or MFC development in Windows. By this logic, nobody uses C++ on non-Microsoft platforms because MFC was never (freely) available on *nix and Macintosh platforms.
>Konqurer is apparently nice
Oops, I meant KDevelop is apparently nice, so i’ll get in quick before I start a 60 post war on just that mistake
http://www.wxwidgets.org
Elegant, free, efficient, available for Linux, Windows, MacOS. And if you don’t like C++, look at WxPython.
Regarding the .net/Java discussion, who’s seriously thinking that Apache, OpenOffice or any other large app will be a day rewritten with these languages?
.net/Java are used mostly used in the management business field (CRM, accounting…). I doubt MS will rewrite Office, Exchange or SQL Server in C#.
Corel in the late 90′ completely failed in (re)writing an office suite in Java. Learn the lesson.
Nothing to wait from Java until a new VM and native gui.
How about D?
http://www.digitalmars.com/d/
I agree with some of the forum posters that Java-GNOME should be the key language binding of choice with Java as the preferred programming language.
However, to make this work, Sun or IBM, preferably both, should support this. And as ESR said, having an open sourced Java would certainly make a great combo against Microsoft and its .NET.
The uncertainty of Mono’s .NET implementation is not at risk, because the bindings to GTK (= GTK#) and most others are an invention of the Open Source community that cannot be patented. However, having Mono as the default platform of choince will stimulate the development of Microsoft related .NET technologies, like ASP.NET and ADO.NET, which from what I know are not ECMA-specified. This will put the Open Source community (and Linux) in great risk and that is why I believe having Mono as the preferred platform is not the sensible thing to do.
However, we should make the life for Microsoft programmers easy by having .NET as an option, which will give them the taste of the true liberty of Open Source software. As they have tasted its freedom, they will then certainly try the default platform, Java.
I believe we should put all our hopes in the “Open Sourcezation” of Java. Only this way we will have enough time to integrate the Java-GNOME-Glade-Eclipse combo to create the technologically best development platform.
I believe we should put all our hopes in the “Open Sourcezation” of Java. Only this way we will have enough time to integrate the Java-GNOME-Glade-Eclipse combo to create the technologically best development platform.
This is all well and good, but what if Sun open sources Java after it’s too late, or worse yet, not at all?
I think it is dangerous to put our eggs into the Java basket. Also, how is Java-GNOME-Glade-Eclipse magically a technologically best development platform in comparison to a C#-Mono-GNOME-MonoDevelop development platform?
Sun makes it difficult just to distribute the JRE, do you honestly think they’ll be quick to open source it? Without proper Linux distro integration, any hope of attracting novice end users to Linux will be dashed. Mono is open source, easy to package up and distribute, and at its core, more unencumbered than Java.
Gnome is not the only OSS Desktop, and won’t ever be.
He doesn’t talk about kde, and what they choose, is like kde never existed.. i think he is really mistake by doing this.
So.. he is really taking sides.. and thats make this article a short mind one!
I think it is dangerous to put our eggs into the Java basket. Also, how is Java-GNOME-Glade-Eclipse magically a technologically best development platform in comparison to a C#-Mono-GNOME-MonoDevelop development platform?
As C#-Mono-GNOME-MonoDevelop combo has not matured yet and neither the Java-Glade-Eclipse-GNOME combo, there is not a best development platform yet (for Linux that is). The only reason I believe that Java-Glade-Eclipse-GNOME would be better than Mono-et-al. is its true Open Source nature (provided that Java will become Open Source)
And I agree with you that Sun makes our lives hard and difficult. I also agree with you that Mono is without doubt the best business Open Source platform out right now, it also will brings potential dangers as I argued. The danger does not reside in Mono self, but in the possible developments of MS-technologies to Mono.
That is why I believe that open sourcing Java is the our only hope. Without it, we are probaly doomed. With this in our minds, we should fight and convince Sun to Open Source Java for its own interest, and of course, ours.
Java, naturally. With java there is no OS. No linux, no windows, no mac. since many people are OS zealots, they cannot handle java’s power.
One says java is low performance, wrong, java is as fast as C# (.Net), or even faster, in many areas close or equal to C++ in performance. The perception of slowness comes from some swing UI applications that does not use proper hardware acceleration. People talks with no backup. And, performance is not the main concern anymore. Check here:
http://www.zedasoft.com/UsingJavaForSoftRealTimeSimulation.html
Some says java UI does not look like native applications. There are choices, Swing l&fel is pluggable. check Jgoodies look and feels. Also there is an alternative, SWT uses native libraries. Check this, one of the most popular bittorrent client:
http://sourceforge.net/projects/azureus/
One says if there is an Office application java can do. yes there is and it is even better than open office.
http://www.evermoresw.com/weben/product/eio_overview.jsp
Java is completely open source friendly, there are literally thousands of active and very powerful java libaries and applications. and of course platform independent.
i am glad i gave up C++ and switch to java. i also lost my OS fanatism after java.
It has a broken type system, no user-defined value types, no operator overloading, no properties. It is extremely verbose. But I guess people who use c to write object oriented code like verbose languages…
It has very complex concepts like anonymous inner classes that are much more difficult to understand for beginners than delegates.
Its new generics system is a joke compared to the .NET generics system since it is just syntax candy while the .NET generics have huge performance benefits.
It does not have interesting new concepts such as yield.
.NET is vastly superior to java. If people will fork gnome when mono dependencies start appearing, then let them fork. This fork will not go anywhere since developing gnome applications in mono is orders of magnitude more productive than doing it in c.
I think MONO / GTK# / C# or PYTHON# would be a very good open-source solution. C# is a very good language and PYTHON is a very productive one.
There’s no patent problem with the ECMA part of .NET plateform.
–> gnome.net is a good choice !
It seems to me that in contrast to Mr Pennington’s “we must all follow the wise corporate shepherd”, languages like Python seem to have the grassroots mindshare. And with three or four efforts underway to address the oft-stated but rarely investigated performance reservations associated with Python, one has to wonder if the GNOME “top table” have any imagination at all.
Hasn’t Mr Pennington noted that Mozilla and OO.org are ramping up Python interoperability? And whilst the GNOME/KDE elite seem aloof to “scripting languages”, the masses are leading the way along exactly the same path.
Hei tuttle, I believe you are right about everything. Except I’m not sure whether yield is a new concept.
It is very sad that the only alternatives taken into account are C#, Java and C++.
If only the OS movement decided to embrace as Mercury or Haskell, and build .net-like infrastructures for them, their productivity would be so increased that that they would surpass Microsoft before longhorn comes out.
Too bad.
Of course yield is not a new concept. It has been in other languages such as python for years. But for a statically typed C-like language like C# it is quite new.
Java zealots will probably say that this feature is too confusing and too dangerous. Then, in the year 2015, it will finally be included in java.
Just like automatic boxing and unboxing: It was a dangerous and unnessecary feature as long as it was not in java. Now that it is in java 1.5 it is suddenly a good feature.
Yes, you are right. Functional languages are much better. I like clean the most, but haskell would still be a huge improvement over C, C++ or C#. But the work done by the mono project can be used for functional languages. When the mono vm has a good JIT and a good garbage collector, you can use SML.NET or F# or Haskell.Net to target the mono vm for linux.
.NET 2.0 supports efficient functional languages (tailcalls, closures etc. ). Java will never be able to do that since the java bytecode is too unflexible.
Considering Python has to rely on mouth-to-mouth advertising, I am really suprised at all the reactions here about this great ‘new’ language. Of course it’s not really new, but recent developments such as taking list comprehensions from Haskell have made it really, really powerful, in addition to its already beautiful clean design. Having programmed seriously complex programs for over 10 years, I have to agree with Eric Raymond. Python is absolutely fabulously designed, and guiding the way forward for future languages. I for one laugh with him when people make fun of him for mentioning Python as a competitor to Java. Java was of course a nice improvement over C++, but now that C++ is sort of standardized, and there is Valgrind for finding lots of memory bugs, as well as the (almost) platform-independent and fabulous Qt, I think and hope C++ still has a long future ahead of it. KDE is one of the most complex projects ever, and seems to be doing fine with C++. As someone mentioned earlier, the combination of C++ for fast, professional back-ends (such as Qt) with Python doing the high-level stuff is really, really, really powerful. Just as Java was way too slow about 10 years ago, Python will be fast enough for most programs in a few years. It already is for a lot of them. And I know I am multiple times as productive using it, compared to programming in Java or C++, without introducing any more bugs. Arguably less even, because of the compact, readable code. Well, and of course, as computers will get immensely much faster within 5 years, as well as Python itself because of projects such as psyco and parrot, any speed argument will just fade away, as a matter of simple math. Right now, Python is already fast enough for Anaconda, Zope and for lots of stuff at Google… 🙂
What people forget here is this; the aim is to create an easier set of APIs to allow faster creation of applications. The conclusion reached is we need to have an API that is abstract enough off the operating system to allow easier software creation without the need to worry about issues like destroying objects when not in use or de-allocating memory etc.
By moving higher up the abstraction, we’re able to look at the large picture, that is, the end product that we as programmers will deliver to the end user, be it a customer written application or an off the shelf piece of software.
HP does make a good case, what will be be? Mono or Java? If it is mono, how willing is Novell to allow the opensource community to move mono into a direction that isn’t compatible with .NET? For example, lets hypothetically say I came up with a really awsome API; should this API NOT be included or should it be included.
For me, I am more inclined towards mono but taking the approach that the number one core focus should be developing the BEST api set rather than trying to remain compatible with .NET. Mono has some good ideas, however, the risk is always that the project leaders will get caught up with issue of compatibility rather than simply saying, “lets develop the best api”.
I agree 100% on your analysis.
I now use managed code based environment (Eclipse/java) for development (after many years of C/C++).
The productivity of a developer and the complexity of apps he is able to create in such an environment
are simply an order of magnitude beyond what is possible in C/C++
To think that such an environment will be on every Windows desktop in a 5 year timeframe is scary: unless OSS offers an alternative, it will not be able to keep up with the tons of apps managed code developers will write in .NET and more people will be tempted to surrender their freedom to MS.
The only way to derail MS plans in to have a free managed code for OSS soon.
I still do not understand why Sun does not realize this: if they released a GPL’ed java now, they would have a 2 years headstart on MS: instead, they prefer to let it choke slowly until .NET takes precedence.
Whether it’s Java or C# does not matter: whichever is available first WITHOUT jeopardizing the freedom of the code written with legal issues should win.
I also think free java implementations are our best hope.
The future is that you will be able to use whatever the hell you want, and not be locked into any one thing. Use your brain.
Nice article Havoc!
One very key thing is that many many developers who aren’t open-source fanatics still use OSS when it suites them – development tools mostly, especially mingw etc.
Now from my empirical sampling of programming buddies, I’d say these developers outnumber the OSS crowd 10 to 1. There just are so many of them, and they’re going to be writing software primarily for Windows for years to come.
The key thing is supporting windows in order that we can get those developers to start writing portable code accidently rather than by design. I’ve already managed to get many of them to use wxwidgets but obviously C++, as Havoc pointed out, isn’t best for every project.
Any OS framework has to be aimed primarily at infecting the windows world and building accidental dependance there these portable tools, so that windows apps can magically run on our alternative OSS desktop.
An OSS desktop gains momentum through supported apps making it easy for normal (windows) users to use, not through advocacy.
What would be the difference between a XAML app and a Native Win32 app ?
I mean, XAML could even be better run on Linux than what is possible using Wine.
There are N possibilities for the open source community to catch up with any MS technology.
Havoc cited 3 companies that support GNOME, so you can see that the decisions aren’t up for the community anyway.
And I don’t know what could be worse said on OSS than to substitute C/C++.
.Net hasn’t delivered any killer app as of today, and people go all crazy about it.
GTK+ is supported by Java and C# already, but if GTK+ were to be written in one of those than support for other languages/platforms would be cut.
If high-level language support is Java or C#, than he should take a look at stellar-level languages, because besides performance, high-level languages share many of the problems of the stellar-level languages, and lack some of the virtues of the later.
>KDevelop is a unusable/buggy nightmare and in no way >comparable to a commercial IDE like Borlands JBuilder.
>
Have you tried it recently? I think not.
>C++ is history.
>
Yeah right. Tell the people who really mastered C++ to use java. First they will laugh, then they will weep, and then they will quit their job and take up gardening. Java is just a joke compared to the power of C++ with STL and Boost.
> I don’t C#/.NET. It’s surely a Java-Clone with some
> enhancements.
>
So you do not know it, but still bash it as a clone. C# is not a java clone just as objective C is not a C++ clone. Its just two languages that share a common heritage (C, Smalltalk etc.). And C# is by far the more powerful language. I *do* know both languages intimately.
RTFA – he explicitly states “No rewrites please” in the section aptly named “No rewrites please”.
The amount of ignorance, lack of knowledge and fear of C++ is amazing. C and C++ are the cornerstones of software development today and will continue to be so.
A few things:
1) C and C++ are not the same languages, and C# has got nothing to with both of them.
C# is a programming language that resembles the syntax of C/C++, thats about it. It so massively leaves the philosophy of C/C++ and is so far behind in power, that comparisons are not really suitable.
2) Almost every major and half-major application that you can buy today in a shelfed box + many more are written in C++ or C. This will not change.
3) Believe it or not, real programmers are able to handle pointers, they are neither devils work nor incomprehensible. They are how computers work. Get over it.
4) Object Orientation is not a virtue in itself. The now “oh-so-objected oriented” way of deriving everything from a base-object class makes the average C++ programmer puke. It is ugly, complex and leads to programming styles that require all the hand-holding features the gc-managed-boundschecked guys are so hot about. True C++ seldom leads you in these directions. I bet most people who argue against C++ here have absoluetly no clue whatsoever.
5) Memory management
If you can´t handle memory, you should not be programming. Programming is memory management. Any programmer that i interview, who claims things like “java´s gc makes me more productive, because i don´t have to worry about freeing things”, thereby ends the interview and returns home without a job. Besides that, memory management in C++ is a breeze, you rarely handle pointers and the effects of garbage collection are implicit in the RAII-idiom.
6) C++ is the natural choice
I do not start my days with the thought “which programming language could i switch to today ?” My company uses C++, because THERE IS NO MATCH for it. Not only that, there is also NO MATCH IN SIGHT.
It is about using the same configuration files regardless of what you use. It is also about skinnability and standardized communication protocols between running applications.
What tools the programmer uses should not affect what the user sees on his desktop. The user should be able to have the KDE, Gnome,… look that they prefer and the programmer should be able to use tools that he feels comfortable with.
This means that existing tools will evolve to be more refined rather than be replaced by something new like mono or some other .net clone.
Perhaps its time to introduce the directory .freedesktop.org/ in our home directories where tookit indifferent configuration files could reside.
It amazes that just because people can not find a particular use for a language themselves they think its crap.
Just try and write something like a web-service in c++ and see how long it takes. Yes, its possible, and yes its probably been done, but know what? Write it in java and all of the hard stuff is done for you.
Then again, try write a low level driver in Java. Pretty much aint going to happen.
People need to stop taking sides so much and use the right tool for the job. Just because a language doesnt work for EVERY SINGLE SOLUTION does not mean its crap.
I would lean toward the side of something like c/c++ or some other non-vm machine for stuff like windowing systems and operating systems, but I would love to be able to have a Java API that would let me plug write into it.
Everyone needs to get off their soap boxes and realize that every language has its use, and your precious <insert language> isn’t perfect.
Sorry Eugenia for being a bit off topic, but I just had to say something.
Back on topic, for the future of OSS Development I dont think the end result will ready matter that much as long as people have the tools that are needed to manage large, complex projects efficiently. Thats one thing MS has over Linux is its VS.NET. KDevelop is close, but its not quite yet and its not particularly helpful on an all Gnome platform. If people had a GREAT development platform/project management system, I think the actual choice of language wouldn’t matter all that much.
<opens up to flames from VI and EMACS users world-wide>
Well I would tend to disagree on the toolkit part. If developers dont have an easy and efficient way of making programs, well then you aren’t going to have a lot programs or developers. I agree with the standards, but again, if there is no easy way to follow them then what good are they? People would just take shortcuts and try to get around them as much as possible.
Also, I dont think this is about your average user at all, as they shouldn’t see/know/care about what language something is written in, they just want it to work and work well (and possible look pretty and shiny too).
It is going to be funnier than hell to see GNOME running on a .NET interpreter. Talk about java being slow, just watch how slow GNOME will become. Then again, if a clr compiler comes into existance that compiles it into native code, C# suddenly loses all its benefits. Quite actually, C# has no real benefits over java. All the so called benefits for .net can just as easily be made for java. Front ends that compile c, pascal, vb, etc could just as easily convert those source files into java bytecode as a frontend for c# can do for clr. The only real benefit is that java is cross platform NOW, and SUN actually has a vested interest in keeping it backwards compatible. Whereas Microsoft does not and will do everything to fragment and destroy open source clones of their .NET runtime. Like it or not, you can spend tons of time building a runtime, but what the hell good will it be if 5 years from now MS replaces the APIs with something totally different? Open source .NET clones will always be behind, so java is the technology to support. Not to mention it is only a matter of time before much of Sun’s java implementation gets standardized to combat MS’s lockin approach.
Yep, but something like that would be extremely difficult and expensive, and would require skills that aren’t abundant in the OSS community, and in the end of the day it wouldn’t satisfy even 50% of the development necessities of the community, as those necessities are diverse. Look at Eclipse and NetBeans for comparision. Even though they are excellent IDEs, they aren’t used for much beyond their initial scope.
Eiffel (www.eiffel.com or SmartEiffel.loria.fr) is a language that can intermix with C/C++, .NET, Java and other languages, although not all yet on an open source basis.
Projects undertaken and described on the http://www.eiffel.com website have demonstrated 10-20 times improvement in development productivity together with substantial improvements in re-useability, reliablity etc.
The language definition, and kernel library (core facilities used by all programs) are being standardised by ECMA (as is the .NET CLI) and I think it is vastly better than Java, C++, c# and other compiled languages.
Eiffel does need a larger community, but I think its possibilities are too frequently overlooked.
See also:
http://www.cetus-links.org/oo_eiffel.html
efsa.sourceforge.net/archive/category.htm
There are so many factual errors in your posting that I do not know where to start.
“It is going to be funnier than hell to see GNOME running on a .NET interpreter.”
mono is a JIT compiler. And for some test cases it is faster than java 1.5 beta *now*. The reason for this is the good design of the .NET bytecode. If you do not believe me I will post a benchmark.
“Quite actually, C# has no real benefits over java.”
Other than a better type system, value types, a good generics implementation and a dozen other performance advantages that is.
“Front ends that compile c, pascal, vb, etc could just as easily convert those source files into java bytecode as a frontend for c# can do for clr.”
No. The java bytecode is not flexible enough. This would be incredibly slow. The .NET bytecode on the other hand is flexible enough to accomodate even functional languages such as SML.NET, OCAML.NET (F#), Haskell.Net etc.
I have only been reading this web site for a few months now and think this is the longest comment thread I have seen.
I am not fully a programmer myself although I used to be. I got tired of all the marketing hype saying java is the best c++ is the best python is the best, etc, etc.
Getting away from the technicals I tend to look at the people behind the languages themselves. I have HUGE respect for Bjarne Stroustup and love c++ do to its nature of just being a pure engineering language. Its nice to have this availability. I have used java and while it does a few things very well Sun’s attitude towards it have turned me off from it immensely. They seem to simply not care whatsoever about the developer community and have made little if any strides in making it a more usable language. While it might be easier than c++ the jvm is a sluggish pig and for that reason I personally will never use it again.
Im not a huge fan of Microsoft but they understand about making good tools for engineers. C# is a damn nice language. Its what java should have been. Its easy to use elegant and failry quick since its not hogged down by that jvm crap.
But the nice thing about the OSS is that you have your choice of different languages. So youre not tide down to any. Use c++ if you like use python use java. They are all available.
For me though I still think visual studio is the best development environment and frankly I have yet to figure out why nobody has developed a truly intergrated platform for linux as well as all the nice administration tools that windows has for .net.
I also personally find having one api to be nice. Rather than having 10 or however many there are. It gets very confusing. For example I only run kde and was playing around with mono and trying to write some gui applications when I found out the qt# framework is seemingly a dead project. Gtk# is much farther along but to install it is to go through depency hell.
There needs to be work done to remedy this. If there was a trully easy to use development environment for linux I think many more people would start using it as oppsed to windows.
If you can´t handle memory, you should not be programming. Programming is memory management.
The language’s job is not to screen programmers. Its to be a tool for the programmer. Garbage collection goes a long way to being a better tool for the programmer. You might consider memory management to be easy (and in a lot of situations, with a good code structure, it is) but without a garbage collector, it is really hard to support lambdas and closures in a way that doesn’t drive the programmer insane.
And programming has nothing to do with memory management. You won’t find “memory management” anywhere in Church’s paper on lambda calculus. Memory management is an unfortunate side-effect of the realities of existing computer hardware.
Besides that, memory management in C++ is a breeze, you rarely handle pointers and the effects of garbage collection are implicit in the RAII-idiom.
The ironic thing about modern C++ is that it fears the performance overhead of GC so much that it instead pays huge performance penalties in reference counting (smart pointers) and copying stuff around (STL). In the general case, GC is comparable in cost to manual memory management. You think malloc() and free() are fast? Hell no! They’re incredibly slow and expensive functions to call.
I have seen some comments about c++ being the IT language and I must say yes it is for certain things however for whatever reason it is not a good language for everything mainly web applications unless you essentially write your own web container for it which is I guess what companies like Amazon and Ebay have done since I believe their sites are written in c++.
My main background is in web development. The applications I have written have been more sophisticated than just a basic dynamic site. So I have gone through a few technologies including the original asp and java and now asp.net.
I searched and searched for a easy to use quick web interface for c++ and couldnt find it. cgi is largely passe and doesnt provide much of the functionality that is needed in todays applications.
Asp inititially was somewhat of a godsend. Using vbscript you could easily connect to a database and write functionality to manipulate the code. But the maintainability of script is a nightmare. I once had to repair a web application written in vbscript with around 5000 lines of script code. It was a nightmare. 50% of the code was the same of every page due to vbscripts not having been meant to be a true development langauge.
Then I tried java and servlets. They were a god send. Easy to use, except for that disastrous ejb junk. But man were they slow.
Then came aspx and c# which I mainly use today unless absolute speed is a nessessity.
C++ is the best for certain types of applications especially gui ones and ones where absolute speed is an absolute nessessity. Its still my favorite language however its not always the right one to use.
Its kind of like linux itself. I recently did the linux installation thing and looked for the “best” version out there. I finally realized there is no best version. Theres just different ones for different peoples needs.
But again my biggest gripe is the lack of a true integrated development environment for linux. There are different ones that do bits and pieces of different things but none that does all of it. Which I have to say VS.Net does.
“You think malloc() and free() are fast? Hell no! They’re incredibly slow and expensive functions to call.”
Yes. A good generational garbage collector is actually much faster than malloc and free. Still much slower than allocating stuff on the stack via value types though.
C++ isn’t a great language for GUIs. Heck, its not even a good one. Qt makes it a pretty good one, but Qt also deviates from idiomatic C++ in a lot of ways.
I was actually more referring to c++ and gui development on other platforms as well as well as linux.
My favorite os for desktop application is still windows. Specifically 2000. The reason for this has more to do with the windows api than specially windows itself. Although no other language as of yet has the speed to do certain gui type applications such as rendering and data manipulation.
Java is vile on the desktop. I have seen a few implementations of it which I was trully impressed with but they were all IDEs. Because of javas bloat you cant build any type of real time application unless you use a c interface.
Personally I have been doing much research into language interoperability so as to be able to use whatever language is good for whatever job. I really like to know that I can use one language to buil the interface and another to write the rendering engine and maybe another to parse the xml.
Some languages are better at this than others. And I will say that it seems the OSS languages such as python really seem to do this well.
My personally plan is to use asp and c# for web interfaces and c++ for the heavy duty algorithms on the backend. This way im not stuck having to force a language to do what its not.
Here are a few more reasons why the open source community should use Java:
1. It has a HUGE mindshare in corporate decision-makers. These people are not necessarily tech people, but they do make important decisions, and right now in their minds its either .Net or Linux plus Java.
2. Linux plus Java play so well together (technically, strategically) that if an alien landed right now and didn’t know their past would probably conclude that they were made at the same time and by the same people. Linux provides the low-level OS foundation on all hardware, and Java provides the high-level application abstraction which uses the OS. And the cool thing is that they can both be used independent of each other, which is great from a biological point of view, since it is key to enable change, survival, and adaptation to future scenarios.
3. As someone who knows a bit about IP Law, I must say that c#/Mono should be completelly out of the question. Microsoft might be mute now, but history shows that if they see a threat they WILL fight to kill anything that even has the “c#” string in code. The SCO lawsuit would be childs play compared to that, considering the huge cash reserves Microsoft has to fight for years on end (even if they know they have a case or not, they don’t care, they’ll just make sure the other lawyers run out of money before they do).
4. Linux and Java have momemtum, and I’m sure that if pressure remains that Sun will have no choice but to make Java open source. Or else someone (IBM?) will provide a clean room implementation to make it the de-facto standard.
5. My only worry is the same as Sun’s: Java should NOT be forked. One solution I can think of is this: Modify the open source license for Java in such a way that mentions that ANY diviation from the standard spec should not use anywhere in the product name or its description the word “Java” or even mention that it is Java compatible. In other words, nobody can make SuperJava or MSJava or JavaX, or even say “Java-based” or “Java-derived” or “Java-compatible”. This should ensure a consisten development of one and only one “Java” spec (with as many implementation as the community wishes to do that follow the spec to the letter). Then, there should be a third-party that oversees the changes to the platform (like the Java Community Process does today).
Two quick comments about c++.
One of the reason I like this language is because of Bjarne Strousoup, sorry can never spell his last name right. Ive watched read and listened to several interviews by him about c++ and various types of development. The nice thing about him is hes honest. Hes not caught up in the marketing hype. He admits c++ is not “perfect”. He explains that c++ is a systems language and was designed to perform a specific task.
The think I like about it is that it gives the developer the ability to do pretty much anything they want. Unfortunately that comes at a price. You actually have to know how to program. While I like the idea of RAD development and ease of use langauges students that are just starting out learning how to do software development and not learning properly how to program are not being taught correctly. They are being taught whats in demand.
And hence you get ALOT of crappy code out there.
C++ is a complicated language to learn and deal with but its also a fantastic language that allows such power and flexibility into the programmers hand.
Of course you dont always need that. SOmetimes you just need to get something really basic done. I mean frankly if youre building a basic dynamic web site php would probably work far more easily than C++. I know I dont know c++ all that well and tried to build a basic web site and had it up within an hour with php and was still trying to figure out basic syntax in c++.
At the same time I would never code a game in pretty much any language other than c++ or c or assembler.
Different languages for different purposes.
One additional comment about c#. I like the language but the guy who invented it is a little bit of a …. anti java anti c++ guy. I was watching a video of him and he was making absurd comments which really made me wonder if he had ever actually looked into these languages or was just another brainwashed microsof enginer believing that everything ms does is a true godsend to the world.
“My personally plan is to use asp and c# for web interfaces and c++ for the heavy duty algorithms on the backend. This way im not stuck having to force a language to do what its not.”
What backend ? You don’t need to mention C++ if 99.9% of your program won’t be in it.
I know I will piss off pro java people, but I hope the langauge dies out eventually. Sun has done an abysmal job of implementing it. ANY gui I have ever seen written in java save one or two were ugly as can be and doggedly slow. Sun seems for more interested in their own profits and marketshare then developing a good tool.
I personally have felt that scott mcnealy should have left the company years ago. Hes driven by his own massive ego and has proven he really couldnt care less about developers. If they were serious about developers they would actually have done some of the things they have said they were going to do years ago. Such as actually make java fast and have a decent environment for developing java ejbs and the like.
Oh by the way for anybody who says some jvms are as fast as c# and c++ thats because they are written in c++.
Java was a tool developed to sell sun products. Pure and simple. It was never designed as a developers tool. It has its place especially as a enteprise language on linux. At least on the server side. But once mono matures it could trully give java a run for its money.
The one thing sun has done well is their solaris os. Of course with the increasing abilities of linux that market share is eroding.
While I’m typing this, my fellow GNU Classpath hackers are busy creating and improving a free software Java class library that’s not only licensed under more reasonable terms then the non-free implementation, but also rivals it in terms of performance and aims to be the better choice in the long run.
Almost every free software implementation of a Java runtime out there (and a few non-free ones) is using GNU Classpath as the Java class library of choice, including even IBM’s own JikesRVM. The progress GNU Classpath has made in the last year alone through this immense cooperation effort is mind-blowing. Nowdays, you can not only run tools like Ant or Tomcat on free runtimes like Kaffe (http://www.kaffe.org), you can also run complex enterprise applications like OfBiz (http://www.ofbiz.org).
If people write *portable* java code, and stick to the implemented classes or work together with the GNU Classpath developers on implementing the missing bits, like Havoc suggests, I think free java runtimes could turn ‘write once, run anywhere’ from an over-hyped marketing joke into reality.
Unfortunately, some open source java projects don’t write portable code. They use internal classes in sun.* packages, which makes them about as portable as Microsoft applications using undocumented Win32 functions. Some people write code that only works because their unwritten (and often unwarranted) assumptions about the runtime their code was written on held true. It’s the same with C, or C++: writing portable code takes care in any language.
But, the good thing about the free runtimes is that they can take Java applications where no other runtimes can take them: you can compile things down to native code, run it on non-mainstream platforms like embedded PowerPC chips without an FPU, combine Java code with .Net … And the great thing about it is, that most of the free Java runtime developers are not building their own little lock-in solutions, but are instead cooperating on creating a larger playground for everyone, by sharing knowledge and code.
It’s a very exciting time to be part of the free java runtime community. It’s like the mid-90s of Linux, when it was still a ‘hidden treasure’, but started showing its promise. Only that it’s more like the Linux, *BSD, Hurd and Darwin developers getting together to develop the Uber-Unix of the future. And getting things done, as well.
I boldly predict that Java-Gnome on free runtimes will rock the Linux application world in the years to come. Java-Gnome applications are going to make sure free java becomes a success on the desktop. Free software enterprise applications like OfBiz, JBoss, Jonas etc. will do the same for the server side.
Free Java runtime developers collaborate between each other, and there is a lot of interest in better cooperation with the projects over the language fence (Mono, dotGNU, parrot). I believe that in a few years, the debate ‘Java, C++ or C#’ may look like an anachronism from the old days, when such questions were relevant, before free software implementations weren’t superior to non-free ones. Just like the question ‘Solaris, Linux or Windows’ is gradually turning into a sure shot for Linux.
I write many different types of applications. Some web based some gui based. SO I research all languages to see what their benefits are.
I trully love c++. However I have yet to find good web development tools for c++ especially on linux. Even web development in c++ on windows is no chore.
As others have already said, there is no one tool for a large scale job. The argument about programming interfaces seems to be one about whether a “swiss army knife” approach is superior to a toolbox full of speialized individuals tools.
It is probably harder to initially learn a variety of different tools, as opposed to one. But, in the end there is more flexibility than trying to do everything with one “catch-all” tool.
Having said that, I would stay away from Microsoft based solutions like C# or XAML. All of Microsoft’s initatives are based on “locking in” users to a single platform. I don’t believe that under the Gates/Ballmer combination that mindset will ever go away. Unless a programming language can really be shown to be platform neutral, I would stay away from it.
Ok, I’m gonna agree with the author that python/perl is the wrong way to go. Some kind of partially compiled language like Java is a good way to go. However:
Java is slow, I’d never want my desktop written in it. If you wanna see Java’s performance level try netbeans. I suppose that could be that Swing is just that bad, but IMO Java is NOT a good implementation of itself.
.Net is Microsofts, I don’t want it. I’ve seen benchmarks against c/c++ and it’s pretty quick; I kind of expected that. But I don’t think using a proprietary method is a good idea.
I think we need to either create our own, possibly modifying Perl/python for efficiency may be the best way to quickly produce it. Our .nettish language needs to be OO, that’s a given.
As far as garbage collection. No, let’s not get into that. Let’s be responsible for our own garbage here and delete our own data ourselves. I understand the difficulties of it, and the hours spent finding memory leaks. But quite frankly, it’s worth the time. One of the things that I like about the Linux desktop is it’s focus on efficiency more than a focus on producing features rapidly.
IMO C++ is still the way to go. Yes, it’s the more difficult route but it’s powerful, proven, and efficient.
Qt/KDE are based on C++, which is well suited for GUI programming, they offer a nice set of APIs, they have shown that is easy to code even huge programs, there are very good developer tools like QtDesigner and KDevelop arround and they have no legal problems like Mono does.
Java, as for today, is not really well suited for progamming huge GUI applications because Java and especially its GUI components are relatively slow and there is no common JVM on which every Java program runs. My personal experience is, that it is a nightmare to get Java-software running, at least with linux. But maybe that is only my experience.
And .Net/Mono? Is there a single big application that shows that they are really mature enough to base something like an desktop environment on it? What about the IP issus? In my opinion, for now Mono is no alternative at all for a Linux desktop environment.
In my opinion, Qt/KDE is the best bet for the Linux desktop in the near future, because they offer all the things people want to have from Java/Mono now: fast and easy development, good reusability, cross platform, good IDEs and much more.
No other language is so misused, so misunderstood, and so capable of destroying programmer productivity.
The KDE crowd can crow now, but in five years I think putting too many eggs in the C++ basket will seem disastrous in retrospect.
C lets you shoot yourself in the foot. C++ lets you cut your legs off. At the very least it can be concluded that C is dangerous, but far less dangerous than C++, which has all of the attendant memory issues of a systems programming language and all of the bloat factor of a application language.
I think the best thing a software company can do is encourage the use of C++ at a competitor.
“I think we need to either create our own”
I agree with this whole heartedly myself. It is true and obvious that c# is designed to tie developers to the microsoft platform. Most definitely. Sometimes thats a good thing and sometimes not. I do have to say that up until know windows 2000 has really been a decent platform with decent tools. Its “unified” and has decent tools that allow you to create fairly robust applications failry easily.
My big gripe is that microsoft is getting wacky with their os scheme and I think people are getting tired of being tied to their we want to dominate the world mentality. So many people including myself are looking at linux and maybe some other oses as well that provide more flexibility.
The problem im finding though is that theres no cohesion in the open source community save a few projects. Its great to have many languages but its also confusing. Personally I wish there was one do all language. There isnt and its doubtfull there ever will be.
But why I wonder hasnt anybody sat down and mapped out a trully useable development environment for linux. Sure theres a few java based ones but they are hoky at best and your essentially stuck with java.
Mono for better or worse is doing a decent job. I have been trully impressed by the work done on it except for the problem that currently only the gtk# api is really anywehre useable. I dont run gnome myself at the moment so I cant really use mono except for web applications which I have to say its nice for.
But where is the cisual studio version for mono??? Or python or c++ or any of these other langauges? Where is the unification and cohesion? Also where ar graphical administrators for this stuff???
Linux in a sense suffers for the mentality that its a “geek” platform and everything should be done through a terminal or in the most “geek” oriented way. Easy of use seems to not be present exactly. And thats not a criticism either. I think linux programmers are far better overall then windows programmers because windows makes it so easy to do things that often times you are clueless about the underpinnings.
But to compete in the enterprise level you need ease of use especially in this day and age. And I for one much prefer a gui environment to a command prompt one. I used tomcat for a while and was astounded that it took them so long to actually create a gui interface to its system. I mean one can only edit a text file so long before it simply becomes tedious.
>> He admits c++ is not “perfect”.
Thats a kind way of saying that C++ has been a singular failure that has gutted productivity and probably been the death of many a project that could have been suitably coded in C (if performance was the driving issue) or Java (if complexity was the driving issue).
Sure, maybe we’re all just too stupid to follow his grand vision, but maybe that tells you programmers should be somewhat more modest about their capabilities.
I agree with the many posters who stated that C++ will be probably still be with us for a long time. There exists so many software written in C++, it has many active users, and the standardisation of C++ will go on for at least a few years.
And I think this is a good thing. I do not think java and C# are higher level languages than C++. They both may have some nice aspects like GC by default or delegates, but on the other hand for example support for generic programming is still stronger on C++. And C++ will improve for sure. There are official proposals for typeof-like operators, dynamic library loading support, tuples, smart pointers, variadic templates, template-aliases (typedef templates), regular expression, etc… You can easily read it up yourself. And most of the library extension proposals are here today (www.boost.org).
So if you miss a feature today in C++, it may well be in C++ in a few years, with sample implementations even earlier.
However, I think it is true that the free software community, as well as opensource developers will face huge difficulties because of all-encompassing (quasi-)proprietary frameworks like Java and .NET, and because of the relative new languages like Java and C#. There is the immense marketing of Microsoft and Sun, plus, these languages have a certain appeal because they are in parts easier to learn and deal with than C++.
So instead of adapting java or C# in the free software world, my proposal would be to extend C++ in a way that goes beyond the expected official standardisation:
My first point is, making its syntax easier, because that is one aspect of C++ that really is inferior to other languages in my opinion. I have in mind something like the SPECS syntax. You can read up such a proposal here:
http://www.csse.monash.edu.au/~damian/papers/PDF/ModestProposal.pdf
Writing a parser for this is doable in a reasonable timeframe. It is also possible to writing a sourcecode translator from this Syntax to “legacy” C++. This way, existing compilers can be still be used. You do not have to give up existing code, and you can reuse existing code really easily.
My second point would be to increase reflection capabilities of C++, for example implementing Stroustrups ideas, like described in here:
http://lcgapp.cern.ch/project/architecture/XTI_accu.pdf
And third, implementing and making widely available, good modular libraries for directory handling, network communication, concurrent programming, time and number classes, object persistency, and other useful stuff along these lines. I know there exist libraries for these purposes, but not everything fits good together, and it would be really advantageous if there would be some kind of “industry standard”. That would speed up adoption amongst other things.
Im not personally getting into a language flame war. I’ve already been through many of them and found its like talking about religions and the my god is better then your god argument.
They all have their pluses and minuses.
>> 2) Almost every major and half-major application that you can buy today in a shelfed box + many more are written in C++ or C.
But C++ is a minority in this. If you want to say C is still the majority language used in off-the-shelf software, fine, but C++ is a sliver of this market.
>> 3) Believe it or not, real programmers are able to handle pointers, they are neither devils work nor incomprehensible. They are how computers work. Get over it.
Which is why C will continue to have more mind share than C++ and always will. It is virtual functions, templates, operator overloading etc that befuddle programmers.
C++ will not continue to “rule” because it has never ruled. It will be the tool of choice for people who do not understand that a little knowledge is a dangerous thing.
Weird that you wrote “Forth” choice. Anyway, what about the D language? It is coming along nicely, has really nice features like a garbage collector and is just like C. Actually it is probably closest to C#, but it isn’t made by Microsoft which is very, very nice. See http://www.digitalmars.com/d/
>> So if you miss a feature today in C++, it may well be in C++ in a few years
For God’s sake, it already has too many ways to hang yourself. How many Turing complete sublangs are hiding in this monstrosity? The precompiler and the template definition lang are just two.
He hates Mono and wants Java to become a viable platform on Gnome. Sorry, but java is dead on the desktop. He should be working on addressing the speed issues with gtk+ instead of talkng about a brave new managged world. Too bad that Qt isn’t lgpl, because then Gnome could’ve died the death it deserved years ago.
OK, so here’s the third (I believe) post in support of GNUstep (www.gnustep.org)
I do not consider myself a hardcore hacker (more like an occasional / accidental coder), but from what I can see, Objective-C is a nice, simple extension (= strict superset) of C aimed at incorporating advanced OO ideas with little additional baggage. I sort of like the syntax, too, although that’s purely a matter of taste. GNUstepp apps generaly manage memory by refcounting (built into the OpenStep framework), but garbage collection is also available, as I understand.
Also, the OpenStep / Cocoa framework is modern, very well thought-out, and has a proven track record, from the NeXT era all the way to MacOS X. Moreover, it covers a variety of areas, such as arrays/lists/collections handling (with iterators, etc.), abstract file system access, distributed objects—it is not just a GUI toolkit. Documentation is high-quality, mainly because the Apple Cocoa dev docs can be consulted for most purposes.
GNUStep itself implements close to 100% of the “foundation” (non-GUI) APIs, including many recent MacOS X extensions, and the vast majority (90%?) of the GUI stuff. It already offers a usable development environment (Project Center + GORM) and file manager (GWorkspace). Finally, their Reinassance XML GUI project actually predates XAML, achieves many of the same goals, but is actually superior in some respects (e.g. their XML code is read in at runtime, not compiled to C# or any intermediate language as I understand XAML is—but do correct me if I am wrong). There is also a full-featured mail client, GNUMail—and this is to restrict attention to already functional, usable software.
Portability: it is apparently not too hard to recompile for MacOS X (GNUMail and GWorkspace can be compiled for either GNUstep or MacOS X, for instance). Also, there is a port to Win32 in progress—the foundation stuff is in the alpha/early beta stages, but the GUI kit requires quite a bit more work.
In other words, the “plumbing” is essentially all in place. One problem is that the “look and feel” of GNUstep apps mimic the NeXT L&F, which was great then but, in my opinion, looks a bit dated now (although it’s a classic!) There is some work to address this issue, although nothing seems ready for beta-level consumption yet (I’d love to be corrected on this one!)
Another issue is the fact that most GNUstep applications, with the possible exception of GNUmail, are typically not as featureful (or functional) as their “standard” (read: KDE- or GNOME-based) counterparts. E.g. GWorkspace is nice, but it is not clearly superior to e.g. Konqueror or Nautilus—although it does have a few nice features, such as the path panel and the shelf. Even the Project Center / GORM duo does not seem to offer major advantages relative to e.g. Kdevelop + Qt Designer (or Anjuta + Glade). But, on the other hand, the GNUstep project is still at a stage where the focus is on laying down solid foundations.
The bottom line is: will GNUstep remain a “fringe” project, or does it stand a chance to occupy a more central position in the FOSS arena?
1) I guess we both lack the exact numbers to prove either point. In this case one might truly say C/C++, although i severely doubt that the C++ part is a “sliver”.
2) Virtuality of functions is a concept that is extremely easy to grasp. The functionality it provides is needed in almost every non-trivial application. The C++ implementation is very likely superior to your home-grown version, which, i am sure, you coded yourself.
Most ignorant programmers are not aware even of the basics of templates, let alone their advanced features. Code i write these days (commercial, 25K+ lines) is heavily templated and saves time, lines, effort and pain. No casts, no void-pointers, type-safety and abstraction of algorithms. Even with all my sympathy, this is way ahead of C.
Operator overloading. If i need to add two entities i have various options. I might use a.add( b ) or add( a, b ) or i might overload an operator and say a + b. They all get their point across, but i still think the overloaded version is the clearest. If my “add” function does not add, but print the bible and deletes all my files, it will do so, no matter if it is called “add” or “+”. Or are you arguing against function calls in general ?
Little knowledge doesn´t get you anywhere. Not in C, and certainly not in C++. If one wants to program, but does not want to go beyond “little knowledge”, C and C++ are hardly languages of choice. I am pretty sure, though, that knowledge lets you get farther in C++ than in C.
Don´t get me wrong, C is great language. It is clear, precise and simple (in the most positive way). It is hard to beat performance-wise. But if i have the choice to write 50000 lines of C, or 10000 lines of C++, with almost no performance-penalty, my choice is clear.
Happy Coding.
They’ll be saying, “you know, we really should consider the benefits of writing all our desktop apps in a scripting language.” Why not jump ahead of the curve, and go there now? After all, scripting languages are a strength of the open source community.
Why would the OSS community use development tools from Microsoft to develope OSS? Especially C# which is completely MS controlled? Seems like another angle of their strategy to control competition.
If C or C++ are just fine and dandy, why then are OSS people using C# to write their apps? Why is there no alternative? My knowledge here is limited, but it does not seem to make much sense that you would use the controlled tools of your enemy to compete with him.
Can someone tell me what is the language use to make the JVM or C# compiler?
It shouldn’t be C/C++ (they’re evil according to java==C# fanatics) 😀
Er, what on earth does the Linux desktop have to do with whatever innovations Microsoft add to their implementation of .NET?
There’s no reason why Mono can’t be used as a basis for software completely independently of XAML, Windows.Forms, and so on — and in fact, it is being right now. So what if Microsoft change their version of .NET? Just because you’re building applications on the ECMA CLR core doesn’t mean you HAVE to remain compatible with Microsoft’s .NET!
Havoc states, regarding XAML: Microsoft is trying to take over the Internet and replace HTML.
Which is a very strange thing to say – not least because on that basis, it could be argued that the GTK people are trying to take over the Internet and replace HTML [with Glade]!
What Microsoft do with .NET is up to them. You only HAVE to care if you actively want your Linux desktop to support .NET applications written for Windows. If all you actually want is a decent desktop environment for UNIX-like systems, then the Windows .NET runtime is entirely and completely irrelevent.
So what happens if Ximian start changing the the Mono runtime to play catch-up with incompatible changes made by Microsoft to .NET? Simple – you fork Mono. It’s free software! You CAN do that! That’s the point.
“Why would the OSS community use development tools from Microsoft to develope OSS? Especially C# which is completely MS controlled? Seems like another angle of their strategy to control competition.”
So? UNIX was a proprietary technology once. That did not stop Linus from “embracing and extending” it. Microsoft has no scruples whatsoever when stealing from others, so why should we not implement the parts of their technologies that are good, such as C# and the .NET VM.
“Can someone tell me what is the language use to make the JVM or C# compiler? It shouldn’t be C/C++ (they’re evil according to java==C# fanatics) :-D”
Just because C is the best choice for extremely low level stuff like VMs does not mean that it is a good choice for gui apps. C is not evil, but it is not as productive as C#.
I need to begin by expressing my abhorrence for virtual managing architectures. They are performance cursed and resource greedy. Todays virtual managing environments are just plain retarded, backward, and a regression programming language evolution. However, I do understand that compromises have to be made and hope that future virtual managed environments are better in all spheres compared to the traditional environments we use today.
That aside, if the open source community had to make a choice between Java and Mono, as the preferred high-level manage environment, I would urge them to direct their resources towards Mono. Requiring developers to learn a new language to develop applications for the open source community is nothing short of barbaric. Mono has at least, one advantage over Java. And that is C, C++, Python, Perl, Ruby, Java, C#, and even VB developers, fanatics and enthusiasts can write applications in their favorite or preferred language.
Mono is already open source. That is open, free and completely GPL compatible. Java is not, period. Since a Java implementation is existent on Mono, why not just use Mono? Mono is not just the .NET APIs, mono as of today contains many, if not all, the Unix and POSIX APIs as well as hooks for web site and web services development. Java doesn’t. Even if Microsoft begins to act as we expect them to, all is not lost. We could always discard the Windows related APIs in .NET as stick the Unix related APIs which Mono already has.
In other words, Mono is not just a .NET clone. Mono is much more than that. There are several other libraries, Unix related that mono have implemented outside .NET. GTK# comes to mind. Mono support for multiple languages; multiple APIs, both Unix and Windows; and completely open source (GPL compatible) license, give an advantage over Java. In my opinion, it is also a better RAD environment of Java.