-->
Home » , , » OpenJDK is a free and open source implementation of the Java programming language.

OpenJDK is a free and open source implementation of the Java programming language.

OpenJDK (Open Java Development Kit) is a free and open source implementation of the Java programming language.It is the result of an effort Sun Microsystems began in 2006. The implementation is licensed under the GNU General Public License (GPL) with a linking exception, which exempts components of the Java class library from the GPL licensing terms.

Sun's promise and initial release

Sun announced in JavaOne 2006 that Java would become open-source software,and on October 25, 2006, at the Oracle OpenWorld conference, Jonathan Schwartz said that the company intended to announce the open-sourcing of the core Java Platform within 30 to 60 days.

Sun released the Java HotSpot virtual machine and compiler as free software under the GNU General Public License on November 13, 2006, with a promise that the rest of the JDK (which includes the Java Runtime Environment) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".According to free-software advocate Richard Stallman, this would end the "Java trap", the vendor lock-in that he argues applied to Java and programs written in Java. Software entrepreneur Mark Shuttleworth called the initial press announcement "A real milestone for the free software community".

Release of the class library.

Following their promise to release a Java Development Kit (JDK) based almost completely on free and open source code in the first half of 2007 , Sun released the complete source code of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that some third parties licensed to Sun that rejected the terms of the GPL. Included in the list of encumbered parts were several major components of the Java graphical user interface (GUI). Sun stated that it planned to replace the remaining proprietary components with alternative implementations and to make the class library completely free.

Community improvements.

On November 5, 2007, Red Hat announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open source software projects by all Red Hat engineers) and Sun's OpenJDK Community TCK License Agreement (which gives the company access to the test suite that determines whether a project based on openJDK complies with the Java SE 6 specification).

Also on November 2007, the Porters Group was created on OpenJDK to aid in efforts to port OpenJDK to different processor architectures and operating systems. The BSD porting projects, led by Kurt Miller and Greg Lewis and the Mac OS X porting project (based on the BSD one) SoyLatte led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group and as of January 2008 are part of the mailing list discussions. Another project pending formalization on the Porters Group is the Haiku Java Team, led by Bryan Varner.

On December 2007, Sun moved the revision control of OpenJDK from TeamWare to Mercurial, as part of the process of releasing it to open source communities.

OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by two of Sun's engineers and the contributor must have signed the Sun/Oracle Contributor Agreement.(SCA/OCA) Preferably, there should also be a JTreg test demonstrating that the bug has been fixed. Initially, the external patch submission process was slow and commits to the codebase were only made by Sun engineers, until September 2008.[The process has improved and, as of 2010[update], simple patches and backports from OpenJDK7 to OpenJDK6 can take place within hours rather than days.

On 2010-10-11, IBM and Oracle announced that both companies will collaborate to further develop OpenJDK.

On 2010-11-12, Apple Inc. and Oracle announced the OpenJDK project for Mac OS X.


Supported JDK versions.

OpenJDK was initially based only on the JDK 7.0 version of the Java platform.

Since February 15, 2008, there are two separate OpenJDK projects:

    * The main OpenJDK project, which is based on the JDK 7.0 version of the Java platform,
    * The JDK 6 project, which provides an Open-source version of Java 6.0.[23]

Compiler and virtual machine

Sun's Java compiler, javac, and HotSpot (the virtual machine), are now under a GPL license.

Class library.

As of the first May 2007 release, 4% of the OpenJDK class library remained proprietary. By the appearance of OpenJDK 6 in May 2008, less than 1% (the SNMP implementation, which is not part of the Java specification) remained,making it possible to build OpenJDK without any binary plugs. The binary plug requirement was later dropped from OpenJDK7 as part of b53 in April 2009.

This was made possible, over the course of the first year, by the work of Sun Microsystems and the OpenJDK community. Each encumbrance was either released as free and open source software or replaced with an alternative:

    * All the audio engine code, including the software synthesizer, has been released as open source.The proprietary software synthesizer has been replaced by a new synthesizer developed specifically for OpenJDK called Gervill,
    * All cryptography classes used in the class library have been released as open source,
    * The code that scales and rasterizes fonts has been replaced by FreeType
    * The native color management system has been replaced by LittleCMS. There is a pluggable layer in the JDK, so that the proprietary version can use the old color management system and OpenJDK can use LittleCMS.
    * The anti-aliasing graphics rasterizer code has been replaced by the open source Pisces renderer used in the phoneME project. This code is fully functional, but still needs some performance enhancements

Sun has made continued promises about releasing their web browser plugin and Web Start implementation as part of OpenJDK, but have so far failed to deliver.The only currently available free plugin and Web Start implementation is that provided by IcedTea.

IcedTea and inclusion in software distributions.

To be able to bundle OpenJDK in Fedora and other free Linux distributions, OpenJDK needed to be buildable using only free software components. Due to the encumbered components in the class library and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK[why?], this was not possible. In order to achieve this goal, a project called IcedTea was started by Red Hat in June 2007. It began life as an OpenJDK/GNU Classpath hybrid that could be used to bootstrap OpenJDK, replacing the encumbrances with code from GNU Classpath.


On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community TCK License. One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together Fedora, the Linux distribution, and JBoss, the application server, technologies in a Linux environment. IcedTea is providing free software alternatives for the few remaining proprietary sections in the OpenJDK project.

In May 2008, the Fedora 9and Ubuntu 8.04 distributions included IcedTea 6, based completely on free and open source code.Fedora 9 was the first version to ship with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the OpenJDK trademark agreement) instead of IcedTea.Ubuntu also first packaged IcedTea7 before later moving to IcedTea6. Packages for IcedTea6 were also created for Debian and included in lenny. On July 12, 2008, Debian accepted OpenJDK-6 in unstable, and it is now in stable. OpenJDK is also available on openSUSE, Red Hat Enterprise Linux and RHEL derivatives such as CentOS.

In June 2008, Red Hat announced that the packaged binaries for OpenJDK on Fedora 9, built using IcedTea 6, had passed the Technology Compatibility Kit tests and could claim to be a fully compatible Java 6 implementation. In July 2009, an IcedTea 6 binary build for Ubuntu 9.04 passed all of the compatibility tests in the Java SE 6 JCK.

Since August 2008, OpenJDK 7 is runnable on Mac OS X and other BSD distributions.

Collaboration with IBM.

On October 11, 2010, IBM, by far the biggest participant in the Apache Harmony project, decided to join Oracle on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK. Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".

The 2D Graphics Group.

The 2D Graphics group is centered around people interested in the creation and maintanence of the 2D API and implementation.

Introduction.

The Java 2D API and its implementation is often not easily separable from other parts of the Java platform.
Generally it implements geometry, text and image APIs and renders these to screen and printer devices using software, or hardware accelerated means, depending on implementation and/or application or user specified system properties.
Very briefly, the core of the API is the class java.awt.Graphics2D. It provides methods for the rendering operations, as well as controlling the state of the Graphics instance.
There's a large supporting cast of classes in the packages
  • java.awt
  • java.awt.color
  • java.awt.font
  • java.awt.geom
  • java.awt.image
  • java.awt.print (Java 2D printing to a printer graphics)
  • javax.imageio (aka Image I/O)
  • javax.print (aka the Java Printing Service, works with java.awt.print)
Image I/O provides the means load and save sampled images where the in-process image use Java2D's image format.
javax.print is tightly integrated with the java.awt.print package which is the 2D API for rendering to printer graphics devices.
There is a wealth of information on the Java 2D API for application developers. e.g. See:
Regarding Java 2D's source code.
 
All of the Java 2D's code is in the "j2se" workspace, so all references below are relative to the root of the "j2se" workspace.
Most of the relevant sources have a java and native component.
The Java 2D-related java code is can be browsed from Netbeans by opening the "awt2d" project. This project also contains the files belonging to AWT - see the README file in the "awt2d" project directory. (note that with some effort the native code can be worked on from Netbeans as well, see the README mentioned above).
All sources are either 'share' or 'windows' or 'solaris', the latter of which in fact includes Linux(TM) and is so named for historical reasons and because in practice the Solaris(TM) code and the Linux code are usually so close that a few ifs or ifdefs suffice to distinguish them. This is partially explained by observing that for 2D, Solaris and Linux are just both platforms for X11.
Most of 2D's code is in 'share'. Even the OpenGL code.There is a still significant but lesser amount of code that is specific to X11 or Win32/GDI.  But here for brevity we just point out the shared locations.
These all are under "src/share". The Java classes are located corresponding to the package hierarchy. E.g. java.awt.Graphics2D is in:
  • src/share/classes/java/awt/Graphics2D.java
Implementation (non-public) classes are generally in a package starting with "sun.". E.g.:
  • src/share/classes/sun/awt
  • src/share/classes/sun/awt/geom
  • src/share/classes/sun/awt/image
  • src/share/classes/sun/font
  • src/share/classes/sun/java2d
  • src/share/classes/sun/print
There are exceptions, notably:
  • src/share/classes/com/sun/imageio
Java 2D also has a substantial amount of native code. This is located in similar manner :
  • src/share/native/sun/awt/image
  • src/share/native/font
  • src/share/native/java2d
(Note that the platform-specific native code is naturally in the corresponding src/[platform]/native/.. directory)
The shared code location contains essentially complete implementations of everything since 2D has its own code for everything needed to implement the API.
The relevant j2se workspace make files are structured in the following way:
  • make/java/awt - builds most API classes
  • make/javax/imageio - builds ImageIO
  • make/javax/print - builds most of the printing implementation
  • make/sun/awt - builds much of the 2D implementation
  • make/sun/cmm - builds much the color management system
  • make/sun/dcpr - builds the graphics rasteriser
  • make/sun/font - builds the 2D font implementation and rasteriser
  • make/sun/jpeg - builds the IJG JPEG library
One can also build the 2d source tree from the "awt2d" Netbeans project (both native and java).

Non-open Java 2D source code.
Some parts of Java 2D were not part of the initial OpenJDK source release, or are different than in the commercial releases from Sun and its licensees. We want to remove these so that the full OpenJDK can be built entirely from sources. We call this "removing encumbrances", a reference to the legal term "encumbered".
Generally the reason for this is that the code was licensed by Sun from a 3rd party. Not all code that is as yet unreleased is certain to stay that way. We are still working on disentangling the code that cannot be opened from code that can. In some cases this comes down to parts of a source file.
Since launch very substantial progress has been made on this, and what follows details that. Here's a summary of the encumbrances that were identified and the current state.
  1. Native code color management system

    The Color Management System - a C library - and several color profile files were licensed for use in JDK 1.2. To replace this "Little CMS" (lcms) was identified as a suitable replacement open source library. There is a pluggable layer, so that for now the commercial version can use the old CMS and OpenJDK can use lcms.
    src/share/classes/sun/java2d/cmm contains the pluggable layer. CMSManager.java is the class called by 2D code that needs to invoke color operations. On first load CMSManager uses the java.util.ServiceLoader class to locate an implementation of the PCMM interface.
    Glue code for LittleCMS that implements that interface is in:
    • src/share/classes/sun/java2d/cmm/lcms
    In turn it loads the native lcms library.
    The source code for OpenJDK's copy of this is in:
    • src/share/native/sun/java2d/cmm/lcms
    Color profiles are located in:
    • src/share/lib/cmm/lcms
    Status : This was resolved before launch. The only known issues are several bugs, eg: a couple of non-essential ICC color profiles are not in the OpenJDK. These are non-essential because the Sun JRE doesn't require them.
    • 6523398: Need to implement writing ICC profile tags in new lcms library
    • 6523402: Some quality problems with GRAY, PYCC and CIEXYZ color spaces with lcms library
    • 6523403: Need to provide lcms library with PYCC and LINEAR_RGB OS ICC profiles
  2. Font rasteriser

    The font rasteriser is a native library licensed for use by Java 2D in JDK 1.2. To replace it in the OpenJDK we identified freetype as the most viable cross-platform alternative. It is already used by the native desktops on Linux and OpenSolaris.
    Similarly to the CMS case, there is a pluggable layer so that the commercial JDK can use the licensed rasteriser whilst OpenJDK uses freetype. The file
    • src/share/classes/sun/font/FontScaler.java
    was created as an internal interface to the rasterisers, and OpenJDK hardwires its implementation in
    • src/share/classes/sun/font/FreetypeFontScaler.java
    Status : This work is complete and has been in OpenJDK since Aug. 2007
  3. Antialiasing graphics rasteriser.

    The Ductus rasteriser is a small set of Java classes backed by a native library used to perform path stroking and filling. It was licensed for use in JDK 1.2, and needed an open source replacement.
    The Pisces renderer was identified as a replacement since it was already open source and it could be adapted to the JDK relatively easily, selecting only the parts needed. Full Pisces sources are at :
    src/share/classes/sun/java2d/pipe/RenderingEngine defines the pluggable layer. On instantiation the class uses the java.util.ServiceLoader class to locate an implementation of this abstract class.
    The partial Pisces sources and the class that implements this interface is in:
    • src/share/classes/sun/java2d/pisces/
    Status : This is resolved although improvements can be made to the implementation. Specifically :
    • Performance is not as good as the library it replaces.
    • Fixed point is used with little or no overflow protection
    • Support for the STROKE_CONTROL hint
  4. Imaging and Color API classes.

    A number of API classes are not yet in the open source area. These are selected classes in the packages :
    • java/awt/color
    • java/awt/image
    • java/awt/image/renderable
    • Status : This is still under investigation.
  • Mailing lists
    • 2d-dev - 2D OpenJDK development mailing list
How to download and install prebuilt OpenJDK packages.

Ubuntu logo

On Ubuntu 8.04 (Hardy Heron), do one of the following:
  • On the Gnome desktop (Ubuntu):
    • In the main desktop menu, choose "Add/Remove ..."
    • In the "Show" toggle box, select "All Open Source Applications"
    • Search for "OpenJDK"
    • Select the "OpenJDK Java Runtime" (openjdk-6-jre)
    • Confirm the installation of community maintained software
    • Press the "Apply Changes" button
  • On the KDE desktop (Kubuntu):
    • In the main desktop menu, choose "Add/Remove Programs"
    • In the "Adept Installer" search for "OpenJDK"
    • Select the "OpenJDK Java Runtime" (openjdk-6-jre)
    • Press the "Apply Changes" button
  • On the command line, type:
    $ sudo apt-get install openjdk-6-jre
The openjdk-6-jre package contains just the Java Runtime Environment. If you want to develop Java programs then install the openjdk-6-jdk package.
For more information on how to install Java on Ubuntu, including on versions prior to 8.04, please see the Ubuntu Java Community page.

<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/s5V4m7BIaSo" frameborder="0" allowfullscreen></iframe>

Fedora logo

On Fedora 9 the OpenJDK 6 runtime and development packages are installed by default during any large-media install, such as from the Fedora 9 DVD.
If installing from a live image, such as a live CD or USB flash drive, add the OpenJDK 6 runtime after the install:
  • To install with the graphical package manager, follow Applications > Add/Remove Software and use search to find the package(s) to install.
  • To install from the command line:
    $ su -c "yum install java-1.6.0-openjdk"
    This package contains just the Java Runtime Environment. If you want to develop Java programs then install the java-1.6.0-openjdk-devel package. You can also install all the OpenJDK 6 packages, including the API documentation, by using the wildcard java-1.6.0-openjdk*.
On Fedora 8 the OpenJDK 7 runtime and development packages are installed by default during any large-media install, such as from the Fedora 8 DVD, under the name IcedTea. If installing from a live image then follow the above instructions but replace 1.6.0-openjdk with 1.7.0-icedtea.



Red Hat Enterprise Linux, CentOS, etc.

The OpenJDK 6 packages are also available in EPEL, a community-run project which makes Fedora packages available to users of Red Hat Enterprise Linux 5, CentOS 5, and other RHEL 5 derivatives.
First install the package that enables the EPEL repository:
$ su -c "rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-2.noarch.rpm"
Then add the OpenJDK 6 runtime, or the development package and related packages if so desired, by following the instructions above for Fedora.

openSUSE logo

On openSUSE 11.1, do one of the following:
  • On the Gnome desktop:
    • In the "Computer" desktop menu, choose "Install Software"
    • Search for "OpenJDK" in the software installer application
    • Select the java-1.6.0-openjdk package
    • Press the "Apply" button
  • On the command line, type:
    $ sudo zypper install java-1.6.0-openjdk
The java-1.6.0-openjdk package contains just the Java Runtime Environment. If you want to develop Java programs then install the java-1.6.0-openjdk-devel package.

Debian logo

On Debian GNU/Linux 5.0 (lenny) , do one of the following:
  • On the Gnome desktop (Debian):
    • In the "System" desktop menu, choose submenu "Administration"
    • In the submenu, choose "Add/Remove Applications"
    • In the "Show" toggle box, select "All Open Source Applications"
    • Search for "OpenJDK"
    • Select the "OpenJDK Java Runtime" (openjdk-6-jre)
    • Confirm the installation of community maintained software
    • Press the "Apply Changes" button
  • On the command line, type:
    $ sudo apt-get install openjdk-6-jre
The openjdk-6-jre package contains just the Java Runtime Environment. If you want to develop Java programs then install the openjdk-6-jdk package.

Innovate on OpenSolaris

We are working on putting everything in place to start providing OpenJDK 7 builds in OpenSolaris package repositories beginning in July 2009.
If you want to have a head start, you can build OpenJDK 7 on OpenSolaris yourself now by following the instructions. In brief:
  • On the command line, type:
    $ pfexec pkg install SUNWgmake SUNWj6dev SUNWant sunstudioexpress SUNWcups SUNWzip SUNWunzip SUNWxwhl SUNWxorg-headers SUNWaudh SUNWfreetype2
    to install the build dependencies.
  • Set a handful of environment variables:
    $ export LANG=C PATH="/opt/SunStudioExpress/bin:${PATH}" ALT_COMPILER_PATH=/opt/SunStudioExpress/bin/ ALT_DEVTOOLS_PATH=/usr/bin ALT_CUPS_HEADERS_PATH=/usr/include/
  • Kick off the build:
    $ gmake
  • When the build finishes, the binaries will be in the
    build/solaris-i586/j2sdk-image

Custom Search
Adserver                   610x250


If you liked this article, subscribe to the feed by clicking the image below to keep informed about new contents of the blog:

0 commenti:

Post a Comment

Random Posts

Recent Posts

Recent Posts Widget

Popular Posts

Labels

Archive

page counter follow us in feedly
 
Copyright © 2014 Linuxlandit & The Conqueror Penguin
-->