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.
For more information on how to install Java on Ubuntu, including on versions prior to 8.04, please see the Ubuntu Java Community page.
If installing from a live image, such as a live CD or USB flash drive, add the OpenJDK 6 runtime after the install:
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:
If you want to have a head start, you can build OpenJDK 7 on OpenSolaris yourself now by following the instructions. In brief:
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.
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.
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 classesmake/javax/imageio
- builds ImageIOmake/javax/print
- builds most of the printing implementationmake/sun/awt
- builds much of the 2D implementationmake/sun/cmm
- builds much the color management systemmake/sun/dcpr
- builds the graphics rasterisermake/sun/font
- builds the 2D font implementation and rasterisermake/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.
-
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. -
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 filesrc/share/classes/sun/font/FontScaler.java
-
src/share/classes/sun/font/FreetypeFontScaler.java
Status : This work is complete and has been in OpenJDK since Aug. 2007 -
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 :- http://phoneme.java.net/svn/phoneme/components/pisces/trunk
- but OpenJDK needs only about 8 files from there.
src/share/classes/sun/java2d/pipe/RenderingEngine
defines the pluggable layer. On instantiation the class uses thejava.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
-
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
- 2D Graphics Bloggers
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
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>
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*.
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.
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
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
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
0 commenti:
Post a Comment