Recent articles:
Popular archives:
Java: A platform for platforms
Sun's reorg may seem promising to shareholders but it's also a scramble for position. The question now is whether Sun can,
or wants to, maintain its hold on Java technology. Especially with enterprise leaders like SpringSource and RedHat investing
heavily in Java's future as a platform for platforms
Also see:
Discuss: Tim Bray on 'What Sun Should Do'
Previous efforts to enable portability have included a multitude of standards efforts, some interpreters, and a few portable runtime systems. Most have required recompilation; none have achieved mainstream success. In the meantime, economic pressures on software developers and the urgency of delivering a multiple-platform solution in a timely fashion have made the goal more desirable than ever.
Portability and Unix
The Unix programming environment, as codified in the POSIX standards, took a major step toward portability by delivering
"source code" portability. Basically, a software product that runs on one POSIX platform can be ported to a new POSIX system
by recompiling the source programs -- ideally, with no required source code changes. In reality, source code changes and the
consequent burden of multiple versions are often required and unavoidable.
Portability and X Window
Other systems -- such as the X Window System -- address portability issues by providing a layered architecture that isolates
system-dependent functionalities. The X architecture successfully abstracts the details of the window and display system.
A program using the X Window System can use any X Window display hardware, although that program is still tied to a specific
instruction set and operating system architecture.
Neither the Unix or X Window efforts went far enough to provide universal portability. The Java programming environment, however, makes a significant step toward achieving this elusive goal. From the beginning, Java technology was intended to provide a programming environment that supports the write-once, run-anywhere (WORA) concept. Java technology has largely delivered on this promise by ensuring that Java programs will run across all Java-enabled platforms. Achieving this goal has reduced system dependencies to a very large degree.
When faced with a new computer architecture, a Java program does not need to be ported to it, or recompiled -- one delivery format serves as a universal program representation, usable on all Java-enabled computers. This capability has been achieved by a combination of a well-documented binary representation, the class file format, and a class library that makes the underlying platform functionality available through a universal abstraction layer, the Java Core APIs. We, therefore, prefer to speak of a Java program's runnability rather than its portability. A Java program does not need to be ported to a new computer -- it can simply be run. A Java program can contain constructs, however, that will deprive it of this property of runnability across all platforms. It is possible to unintentionally write a platform-specific Java program, since not all digital systems can be perfectly abstracted. For example, the file-naming convention in operating systems and display resolutions in hardware devices present different behaviors that may impede runnability.