Red Hat's Ceylon language is an unneeded tempest in a teapot

Is yet another Java makeover really the best that the leading Linux vendor has to offer?

Red Hat can't be serious. The leading Linux vendor can't really be planning to develop a brand-new programming language and SDK to compete with Java -- can it?

Apparently it can, although it seems as though Red Hat didn't really want you to know it yet. Instead of the customary press release, Red Hat's announcement came in the form of a pair of presentations by Red Hat engineer and JBoss fellow Gavin King, delivered at the QCon enterprise software conference last week in Beijing. King's slide decks quickly went viral on the Web, however, leaving the broader software development community both intrigued and perplexed.

[ InfoWorld's Paul Krill weighs in on why Ceylon is no Java killer. | See InfoWorld's picks for the top 5 JVM scripting languages. | Keep up with the latest Java techniques with the JavaWorld Enterprise Java newsletter. ]

Intrigued, because King is no dummy. As the creator of the Hibernate Java persistence framework, he knows Java inside and out. So if he says there are fundamental problems with Java that render it inadequate for modern software development, folks tend to listen.

Perplexed, because of all the things Red Hat could be spending its time, energy, and money on, reinventing the wheel -- particularly a wheel as large and complex as Java -- seems like the least helpful, not to mention the least likely to succeed. What on earth is Red Hat thinking?

Ceylon: Java redux

The media was quick to jump on the idea that Red Hat was cooking up a "Java killer," which King was just as quick to deny. Still, the language's name, Ceylon, is itself something of a giveaway. Java and Ceylon are both islands, but while Java is well-known for its coffee, Ceylon (now Sri Lanka) is famed for its tea -- get the picture?

That's not to say the Ceylon programming language diverges completely from Java. On the contrary, it relies on the Java runtime environment. Ceylon compiles to Java bytecode, which can then be executed by the JVM of your choice.

Where the languages differ is largely in matters of syntax. Although he was obviously once a fan, King believes Java has failed to keep pace with developments introduced by more modern programming languages, such as C#. He thinks it's high time someone gave the Java language a thorough once-over, throwing out the bad and addressing long-standing failings, such as support for high-order functions and improved type handling. He's done that, and he calls the result Ceylon.

But the Ceylon project aims to do more than just revamp Java's grammar. "Much of our frustration is not even with the Java language itself," writes King. "The extremely outdated class libraries that form the Java SE SDK are riddled with problems. Developing a great SDK is a top priority of the project."

You heard that right: The Ceylon project will produce not just a new language, but a new set of class libraries written in and for that language. There will be no inconsistencies here, no dropping back into Java syntax when you need to use an item from the standard library. Ceylon programs will run on the JVM, but they will be written using 100 percent Ceylon.

Did anybody order a new programming language?

But while such dedication and thoroughness is admirable, it still doesn't answer the obvious question: Why? Or at the very least, why now?

There is no shortage of "Java killers" on the market already. Microsoft arguably fired the first shot in the current language wars with .Net; its Common Language Runtime is a virtual machine environment very much like the JVM. And its C# has widely been criticized as a Java imitator, albeit a superior one in some respects. More recently, Google announced a C-like language of its own called Go, with the aim of making it easier for developers to write multiprocessing applications for modern CPUs and distributed architectures.

Leaving aside those platforms, Ceylon is far from the first alternative language for the JVM. In fact, Wikipedia now lists more than 60 languages that target the Java platform, either by compiling to Java bytecode or by running in a Java-based interpreter. Among the most widely used are Clojure, Groovy, JRuby, Jython, and Scala. Some are ports of existing languages, while others are unique to the JVM.

Not surprisingly, some of the harshest criticism of Ceylon has come not from Java programmers but from users of these alternative JVM languages. Many wonder why Red Hat would choose to reinvent the wheel yet again, rather than lending its considerable development muscle (and deep pockets) to one of the existing efforts. For example, "I worry because I think Ceylon is worse than Scala, but it could win anyway," writes developer Lachlan O'Dea in a blog post. "I would much prefer a world with Scala jobs in demand than one with Ceylon jobs in demand."

Building silos

It's pure speculation, but I can imagine one reason why Red Hat might want a language uniquely its own: Fear -- namely, the fear that it will be left behind in a market where the role of OS vendor is gradually morphing into that of platform vendor.

C# and .Net are obviously a Microsoft silo. When you code using those tools, you target the Windows OS and you probably use Microsoft's Visual Studio development environment. Similarly, Go is exclusively a Google product so far, and Google will probably remain the leading source for Go compilers, tools, and source code for the foreseeable future. (At the very least, you won't see any Go code coming from Microsoft.)

More important, Java is now undeniably Oracle's creature. The database giant controls the assets of both of the former leading Java vendors -- Sun Microsystems and BEA Systems -- including the WebLogic application server, the JRockit virtual machine, the NetBeans IDE, and the Java language platform itself. If you're a Java developer, from now on you're in bed with Oracle, like it or not.

That can't sit well with Red Hat. Its JBoss application server competes directly with WebLogic, although it's hardly as lucrative. Meanwhile, Oracle offers Unbreakable Linux, which is no more than a rebranded version of Red Hat Enterprise Linux coupled with an Oracle support contract. In the race to corral OS customers into vertical product silos, Oracle is clearly in the lead.

It's time to collaborate, not compete

If that's really Red Hat's rationale, however, the Ceylon response is a mistake. The simple fact that Google has yet to make much of an impact with Go demonstrates how hard it can be to gain traction with a new programming language, particularly in a market already crowded with options.

And for all its strengths, Red Hat's alternative isn't particularly novel. Another JVM language, Groovy, already markets itself as "a super version of Java," while Scala offers an even more radical departure from the staid Java syntax. To embark on a third try now smacks of hubris.

If Red Hat really wants to reenergize the Java community, it would do better to set aside Ceylon and put its talent and resources into one of the existing options. Scala seems like a good choice (although King seems to have already vetoed it). If nothing else, using its market muscle this way would demonstrate that Red Hat still stands for the original spirit of Linux: communities, not corrals.

This article, "Red Hat's Ceylon language is an unneeded tempest in a teapot," originally appeared at InfoWorld.com. Read more of Neil McAllister's Fatal Exception blog and follow the latest news in programming at InfoWorld.com. For the latest business technology news, follow InfoWorld.com on Twitter.

Copyright © 2011 IDG Communications, Inc.