*** Changes in GCC 4.1:

Core library (libgcj) updates based on GNU Classpath 0.15 - 0.19+

- Networking

* The java.net.HttpURLConnection implementation no longer buffers the
  entire response body in memory.  This means that response bodies
  larger than available memory can now be handled.

- (N)IO

* NIO FileChannel.map implementation, fast bulk put implementation for
  DirectByteBuffer (speeds up this method 10x).

* FileChannel.lock() and FileChannel.force() implemented.

- XML

* gnu.xml fix for nodes created outside a namespace context.

* Add support for output indenting and cdata-section-elements output
  instruction in xml.transform.

* xml.xpath corrections for cases where elements/attributes might have
  been created in non-namespace-aware mode. Corrections to handling of
  XSL variables and minor conformance updates.

- AWT

* Qt4 configury switches for OS-X. Additional to the --enable-qt-peer, OS-X
  users with a Qt4 installation can build the qt-peers with the argument
  --with-qt4dir=<Qt4-installation-dir>.

* GNU JAWT implementation, the AWT Native Interface, which allows direct
  access to native screen resources from within a Canvas's paint method.
  GNU Classpath Examples comes with a Demo,
  see libjava/classpath/examples/README.

* awt.datatransfer updated to 1.5 with supports for FlavorEvents.
  The gtk+ awt peers now allow copy/paste of text, images, uris/files
  and serialized objects with other applications and tracking
  clipboard change events with gtk+ 2.6 (for gtk+ 2.4 only text and
  serialized objects are supported). A GNU Classpath Examples
  datatransfer Demo was added to show the new functionality.

* Split gtk+ awt peers event handling in two threads and improve gdk lock
  handling (solves several AWT lock ups).

* Speed up awt Image loading.

* Better GTK scrollbar peer implementation when using GTK >= 2.6.

* Handle image loading errors correctly for gdkpixbuf and MediaTracker.

* Better handle GDK lock. Properly prefix gtkpeer native functions (cp_gtk).

* GdkGraphics2D has been updated to use Cairo 0.5.x APIs.

* BufferedImage and GtkImage rewrites. All image drawing operations
  should now work correctly (flipping requires gtk+ >= 2.6)

* Future Graphics2D, Image and Text work is documented at:
  http://developer.classpath.org/mediation/ClasspathGraphicsImagesText

* When gtk+ 2.6 or higher is installed the default log handler will produce
  stack traces whenever a WARNING, CRITICAL or ERROR message is produced.

- Free Swing

* The Swing RepaintManager has been reworked for more efficient painting,
  especially for large GUIs.

* The Swing layout manager OverlayLayout has been implemented, the BoxLayout
  has been rewritten to make use of the SizeRequirements utility class and
  caching for more efficient layout.

* Improved accessibility support for Swing.

* Significant progress has been made in the implementation of the
  javax.swing.plaf.metal.* package, with most UI delegates in a working state
  now.  Please test this with your own applications and provide feedback that
  will help us to improve this package.

* The GUI demo (gnu.classpath.examples.swing.Demo) has been extended to
  highlight various features in our free-swing implementation. And includes
  a look and feel switcher (Metal default, Ocean or GNU).

* The javax.swing.plaf.multi.* package is now implemented.

* Editing and several key actions for JTree and JTable were implemented.

* Lots of icons and look and feel improvements for Free Swing basic and
  metal themes were added.  Try running the GNU Classpath Swing Demo in
  examples (gnu.classpath.examples.swing.Demo) with:
  -Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFeel
  -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel

* Start of styled text capabilites for java.swing.text.

* DefaultMutableTreeNode preorder, postorder, depthFirst and breadthFirst
  traversal enumerations implemented.

* JInternalFrame colors and titlebar draw properly.

* JTree is working up to par (icons, selection and keyboard traversal).

* JMenus were made more compatible in visual and programmatic behavior.

* JTable changeSelection and multiple selections implemented.

* JButton and JToggleButton change states work properly now.

* JFileChooser fixes.

* revalidate and repaint fixes which make Free Swing much more responsive.

* MetalIconFactory implemented.

* Free Swing Top-Level Compatibility. JFrame, JDialog, JApplet,
  JInternalFrame, and JWindow are now 1.5 compatible in the sense that you
  can call add() and setLayout() directly on them, which will have the same
  effect as calling getContentPane().add() and getContentPane().setLayout().

* The JTree interface has been completed. JTrees now recognizes mouse clicks
  and selections work, but the visual implementation is not yet complete.
  Work on expansion and collapsing of the tree nodes is being implemented.

* BoxLayout works properly now.

* Fixed GrayFilter to actually work.

* Metal SplitPane implemented.

* Lots of free swing text and editor stuff work now.

- Free RMI and Corba

* The Andrew Watson, Vice President and Technical Director of the Object
  Management Group, has officially assigned us 20 bit Vendor Minor Code Id:
  0x47430 ("GC") that will mark remote Classpath - specific system exceptions.
  Obtaining the VMCID means that GNU Classpath now is a recogniseable type of
  node in a highly interoperable CORBA world.

* Classpath now includes the first working draft to support the RMI over
  IIOP protocol. The current implementation is capable for remote invocations,
  transferring various Serializables and Externalizables via RMI-IIOP protocol.
  It can flatten graphs and, at least for the simple cases, is interoperable
  with Sun's jdk 1.5.

* org.omg.PortableInterceptor and related functionality in other packages
  is now implemented:
    - The sever and client interceptors work as required since 1.4.
    - The IOR interceptor works as needed for 1.5.

* The org.omg.DynamicAny package is completed and passes the prepared tests.

* The Portable Object Adapter should now support the output of the
  recent IDL to java compilers. These compilers now generate servants and
  not CORBA objects as before, making the output depended on the existing
  POA implementation. Completing POA means that such code can already be
  tried to run on Classpath. Our POA is tested for the following usager
  scenarios:
    - POA converts servant to the CORBA object.
    - Servant provides to the CORBA object.
    - POA activates new CORBA object with the given Object Id (byte array)
      that is later accessible for the servant.
    - During the first call, the ServantActivator provides servant for this
      and all subsequent calls on the current object.
    - During each call, the ServantLocator provides servant for this call
      only.
    - ServantLocator or ServantActivator forwards call to another server.
    - POA has a single servant, responsible for all objects.
    - POA has a default servant, but some objects are explicitly connected
      to they specific servants.
  The POA is verified using tests from the former cost.omg.org.

* The CORBA implementation is now a working prototype that should support
  features up till 1.3 inclusive.
  We would invite groups writing CORBA dependent applications to
  try Classpath implementation, reporting any possible bugs.

  The CORBA prototype is interoperable with Sun's implementation v 1.4,
  transferring object references, primitive types, narrow and wide
  strings, arrays, structures, trees, abstract interfaces and
  value types (feature of CORBA 2.3) between these two platforms.
  The remote exceptions are transferred and handled correctly.
  The stringified object references (IORs) from various sources are
  parsed as required.
  The transient (for current session) and permanent (till jre restart)
  redirections work.
  Both Little and Big Endian encoded messages are accepted.
  The implementation is verified using tests from the former cost.omg.org.
  The current release includes working examples (see the examples directory),
  demonstrating the client-server communication, using either CORBA Request
  or IDL-based  stub (usually generated by a IDL to java compiler).
  These examples also show how to use the Classpath CORBA naming service.
  The IDL to java compiler is not yet written, but as our library must be
  compatible, it naturally accepts the output of other idlj implementations.

- Misc

* Updated TimeZone data against Olson tzdata2005l.

* Make zip and jar UTF-8 "clean".

* "native" code builds and compiles (warning free) on Darwin and Solaris.

* java.util.logging.FileHandler now rotates files.

* Start of a generic JDWP framework in gnu/classpath/jdwp.
  This is unfinished, but feedback (at classpath@gnu.org) from runtime
  hackers is greatly appreciated. Although most of the work is currently
  being done around gcj/gij we want this framework to be as VM neutral as
  possible. Early design is described in:
  http://gcc.gnu.org/ml/java/2005-05/msg00260.html

* QT4 AWT peers, enable by giving configure --enable-qt-peer.
  Included, but not ready for production yet. They are explicitly
  disabled and not supported. But if you want to help with the
  development of these new features we are interested in feedback. You
  will have to explicitly enable them to try them out
  (and they will most likely contain bugs).

* Documentation fixes all over the place.
  See http://developer.classpath.org/doc/

Thanks! The following people helped with the above new features, bug
reports, testing and integration:

Aaron Luchko (JDWP updates and documentation fixes) Andreas Jaeger
(mprec updates) Andreas Tobler (Darwin and Solaris testing and fixing,
Qt4 support for Darwin/OSX, Graphics2D support, gtk+ updates.)  Andrew
Haley (Serialization and URLClassLoader fixes, gcj build speedups)
Andrew John Hughes (Locale and net fixes, URI RFC2986 updates,
Serialization fixes, Properties XML support and generic branch work,
VMIntegration guide update) Andrew Overholt (File locking) Anthony
Balkissoon (JList, Free Swing 1.5 updates and mouse event fixes, Lots
of Free Swing work including JTable editing) Anthony Green (MIDI
framework, ALSA and DSSI providers) Archie Cobbs (Build fixes, VM
interface updates, URLClassLoader updates) Audrius Meskauskas (Lots of
Free Corba, RMI and HTML work plus testing and documenting) Bastiaan
Huisman (TimeZone bug fixing) Bryce McKinlay (RMI work) Casey Marshall
(Crypto algorithm fixes, FileChannel lock, SystemLogger and
FileHandler rotate impl, NIO FileChannel.map support, security and
policy updates) Chris Burdess (Lots of gnu.xml and http protocol
fixes, StAX and dom xml:id support) Christian Schlichtherle (Zip fixes
and cleanups) Christian Thalinger (64-bit cleanups, Configuration and
VM interface fixes and CACAO integration, fdlibm updates) Dalibor
Topic (Better DEBUG support, Build cleanups and Kaffe integration. Qt4
build infrastructure, SHA1PRNG and GdkPixbugDecoder updates) Daniel
Bonniot (Serialization fixes) David Daney (BitSet bugfixes,
HttpURLConnection rewrite and improvements) David Gilbert (Basic and
Metal icon and plaf and lots of documenting, Lots of Free Swing and
metal theme additions. MetalIconFactory implementation) David
Lichteblau (JCL support library global/local reference cleanups) Gael
Thomas (VMClassLoader boot packages support sugestions) Gary Benson
(MessageFormat fixes) Goffredo Baroncelli (HTTPURLConnection fixes)
Guilhem Lavaux (Configuration, thread and channel fixes and Kaffe
integration. JCL native Pointer updates. Logger bug fixes) Ingo
Proetel (Image, Logger and URLClassLoader updates) Ito Kazumitsu
(NetworkInterfaces implementation and updates) Jan Roehrich
(BasicTreeUI and JTree fixes) Jeroen Frijters (ClassLoader and nio
cleanups, Serialization fixes, better Proxy support, bug fixes and
IKVM integration) Julian Scheid (Documentation updates and gjdoc
support) Ka-Hing Cheung (TreePath and TreeSelection fixes) Kalle Olavi
Niemitalo (Build fixes) Keith Seitz (Lots of JDWP work) Kelley Cook
(Build fixes) Kim Ho (JFileChooser implementation) Lillian Angel
(JTree implementation and lots Free Swing additions and bug fixes)
Mark Wielaard (Bug fixes, packaging and release management, Clipboard
implementation, System call interrupts and network timeouts and
GdkPixpufDecoder fixes) Martin Cordova (Suggestions for better
SocketTimeoutException) Michael Koch (Configuration fixes. Locale
updates, bug and build fixes) Nicolas Geoffray (VMClassLoader and
AccessController improvements) Olga Rodimina (MenuSelectionManager)
Paul Jenner (Better -Werror support) Rainer Orth (Build fixes) Robert
Schuster (Documentation updates and beans fixes, TreeNode enumerations
and ActionCommand and various fixes, XML and URL, AWT and Free Swing
bug fixes) Roman Kennke (BoxLayout, GrayFilter and SplitPane, plus
bugfixes all over. Lots of Free Swing work including styled text)
Santiago Gala (AccessControlContext fixes) Simon Kitching (String
cleanups and optimization suggestions) Stuart Ballard (RMI constant
fixes) Sven de Marothy (BMP imageio support, CSS and TextLayout
fixes. GtkImage rewrite, 2D, awt, free swing and date/time fixes, Qt4
peers) Thomas Fitzsimmons (Lot of upgrades to the gtk+ AWT and cairo
2D support. Lots of imageio framework additions, lots of AWT and Free
Swing bug fixes) Tom Tromey (Eclipse integration, generics work, lots
of bug fixes and gcj integration including coordinating The Big Merge)
Wolfgang Baer (GapContent bug fixes) Ziga Mahkovec (Graphics2D
upgraded to cairo 0.5 and new regex features)

*** Changes in GCC 4.0:

* Character encoders and decoders have been added for: iso-8859-6
(arabic), iso-8859-7 (greek), iso-8859-8 (hebrew), iso-8859-9
(latin-5), iso-8859-13, iso-8859-15 (latin-9), cp1047 (ebcdic),
ebcdic-xml-us,ascii, windows-1250, windows-1252, UTF-16BE (Big Endian),
UTF-16LE (Little Endian), UTF-32BE (Big Endian), UTF-32LE (Little
Endian).

* Lots of Calendar bug fixes.

* The http url protocol handler has been replaced with a full HTTP/1.1
version from GNU inetlib.

* A new ftp url protocol handler has been added also from GNU inetlib.

* java.beans has been updated to 1.4 including support for XMLEncoder
and XMLDecoder.

* Added implementations of javax.xml (JAXP 1.3), org.xml.sax (SAX2)
and org.w3c.dom (DOM Level 3) interfaces. It is possible to switch
between different implementations AElfred2, GNU DOM, GNU XSL, libxmlj
SAX, libxmlj DOM and libxmlj XSL by setting different system
properties.  Also provided is a preliminary XPath 1.0
implementation. The libxmlj versions are build around libxml2 and
libxslt and have to be enabled during build time by the --enable-xmlj
configure flag. The current support is equal to the last released GNU
JAXP 1.3 release. These packages will be maintained as part of the GNU
Classpath core classes in the future. For more information,
conformance results and documentation on selecting different
implementations see doc/README.jaxp.

* Much fuller collection documentation.

* libgcj can now load service providers that are described via
META-INF/services/* resources in extension JARs. This is useful for
implementing the various APIs that are supposed to be extensible via
custom plugins. For details, please see the documentation of
gnu.classpath.ServiceFactory.

* GNU Classpath's JAR implementation now has preliminary support for
signed entries, for so called "signed JAR" file support. Signed JAR
files are one of the key security features of managed runtimes, and
allows code to run privileged given unforgeable proofs of identity.

* A much improved version of X.509 certificates has been added,
including a robust certificate path checking algorithm. Also included
is an implementation of the RSA signature scheme.

* New javax.crypto, javax.crypto.interfaces, javax.crypto.spec,
javax.net, javax.net.ssl, javax.security.auth,
javax.security.auth.callback, javax.security.auth.login,
javax.security.auth.x500, javax.security.sasl and org.ietf.jgss
packages are now officially part of GNU Classpath. Extra crypto
algorithms can be obtained from the GNU Crypto project, a full TLS
implementation is provided by the Jessie project.
http://www.gnu.org/software/gnu-crypto/ 
http://www.nongnu.org/jessie/

* java.security.AccessController has been implemented.

* The default java.lang.SecurityManager now uses AccessController.

* Lookahead support for regular expressions.

* java.util.regexp implementation through gnu.regexp wrappers.

* Serialization object stream fixes for multiple ClassLoader scenarios.

* java.net.URL now uses application classloader to load
URLStreamHandlers and reuses URLStreamHandlers when URL is reset (but
protocol isn't changed).

* java.io.File.deleteOnExit() implementation.

* java.io is now implemented by delegating most tasks directly to
java.nio.

* Reworked/Optimized implementations of java.nio.Buffer and subclasses.

* BufferedReader speed improvements.

* Multiple java.net.InetAdress fixes and java.rmi fixes.

* ServerSocket.accept() now restarts listening when system call
interrupted.

* java.net.URI implementation.

* New javax.print, javax.print.attribute[.standard] and
javax.print.event packages and classes.

* java.text multiple new features and bug fixes (only 2 out of the
1000+ java.text Mauve tests now fail).

* java.text attributed iterators support.

* Improved useabilty of java.text implementation for several
applications.

* More AWT accessible support.

* AWT gtk+ peers component layout, dialog placement, keyboard focus
handling and text positioning have been improved.

* ImageIO interfaces are more complete.

* JList, JTable and JTree have been hugely improved.

* java.awt.Robot support with GdkRobot in the gtk+ awt peers. Needs
XTest Extension (libXtst) XServer support.

* Full java.awt.color implementation, with all standard ICC profiles,
except for PhotoYCC color space.

* java.awt.image support updated to 1.4.

* Big-endian (PowerPC) fixes for native awt GTK+ peers.

* Better AWT focus management fro GTK+ peers.

* Much faster and better fonts support (for both gdk Graphics and cairo
Graphics2D)

* AWT Choice fixes for hidden components.

* More javax.imageio support.

* Better AWT Help MenuBar support.

* Swing TabbedPane, ColorChooser and ComboBox improvements.

* Start of JTree functionality.

* javax.swing.Spring and SpringLayout support.

* Added pluggable look and feel support for BasicTextFieldUI and
BasicToolBarSeparatorUI.

* java.swing.text support for (Default and Layered) Highlighter,
FieldView, PlainView, TabExpander and TabableView added.

* Start of JTable and JTree implementation.

* Internal Swing frames work.

* JMenu and JPopupMenu work.

* New gtk+ AWT FileDialog peer now based on gtk+2.4 or higher.

* java.awt.image LookupTables and kernel support.

* Improved java.awt.image.BufferedImage support.

* AWT 1.0 event model support.

* Frame.setIconImage() support.

* AWT GDKGraphics scaling.

* New configure flag --enable-gtk-cairo to build Graphics2D
implementation build on cairo and pangoft2. Enabled at runtime by
defining the system property gnu.java.awt.peer.gtk.Graphics=Graphics2D.

* javax.swing.JSpinner implemented.

* java.awt.geom completed. Area, Arc2D, Ellipse2D and Line2D
implemented.

* JColorChooser, JComboBox and JTextField implemented, including
example uses in GNU Classpath Examples swing Demo.

* Better (non-black) default AWT System colors.

* AWT lists use GTK treeviews.

* Proper AWT focus management has been implemented.

* Swing menus and scrollpanes are beginning to work.

* Swing splitpanes, dialogs and internal frames were added.

* Swing repainting / double buffering was redone.

* Font management and Pango DPI conversion fixes.

* A lot of AWT imaging and event bugs have been picked out.

* More of javax.swing.text has been implemented.

* javax.swing.Timer has been reimplemented.

* The gnu.java.awt.EmbeddedWindow class has been improved, and now
supports embedding AWT windows in other top-level X windows. This
functionality is required by gcjwebplugin.

* New javax.imageio, javax.imageio.event and javax.imageio.spi packages
and classes.

* Working implementation of javax.swing.undo.

* java.awt.geom.CubicCurve2D/QuadCurve2D: Can now solve cubic and
quadratic equations; implementation adapted from the GNU Scientific
Library.

* Lots of java.awt and gtk+ peer improvements. Also more Swing work.
Start of EmbeddedWindow support.

*** Changes in GCC 3.4:

* Compiling a .jar file will now cause non-.class entries to be automatically 
  compiled as resources.

* libgcj has been ported to Darwin.

* Jeff Sturm has adapted Jan Hubicka's call graph optimization code to gcj.

* libgcj has a new gcjlib URL type; this lets URLClassLoader load code from 
  shared libraries.

* libgcj has been much more completely merged with GNU Classpath.

* Class loading is now much more correct; in particular the caller's class 
  loader is now used when that is required.

* Eclipse 2.x will run out of the box using gij.

* Parts of java.nio have been implemented. Direct and indirect buffers work, 
  as do fundamental file and socket operations.

* java.awt has been improved, though it is still not ready for general use.

* The HTTP protocol handler now uses HTTP/1.1 and can handle the POST method.

* The MinGW port has matured. Enhancements include socket timeout support, 
  thread interruption, improved Runtime.exec() handling and support for 
  accented characters in filenames.

*** Changes in GCC 3.3:

* The java.sql and javax.sql packages now implement the JDBC 3.0 (JDK 1.4) 
  API.

* The JDK 1.4 assert facility has been implemented.

* The bytecode interpreter is now direct threaded and thus faster.


*** Changes in GCC 3.1:

* libgcj now includes RMI, java.lang.ref.*, javax.naming, and 
  javax.transaction.

* Property files and other system resources can be compiled into executables 
  which use libgcj using the new gcj --resource feature.

* libgcj has been ported to more platforms. In particular there is now a 
  mostly-functional mingw32 (Windows) target port.

* JNI and CNI invocation interfaces were implemented, so gcj-compiled Java 
  code can now be called from a C/C++ application.

* gcj can now use builtin functions for certain known methods, for instance 
  Math.cos.

* gcj can now automatically remove redundant array-store checks in some common 
  cases.

* The --no-store-checks optimization option was added. This can be used to 
  omit runtime store checks for code which is known not to throw 
  ArrayStoreException

* The following third party interface standards were added to libgcj: 
  org.w3c.dom and org.xml.sax.

* java.security has been merged with GNU Classpath. The new package is now 
  JDK 1.2 compliant, and much more complete.

* A bytecode verifier was added to the libgcj interpreter.

* java.lang.Character was rewritten to comply with the Unicode 3.0 standard, 
  and improve performance.

* Partial support for many more locales was added to libgcj.

* Socket timeouts have been implemented.

* libgcj has been merged into a single shared library. There are no longer 
  separate shared libraries for the garbage collector and zlib.

* Several performance improvements were made to gcj and libgcj:
      o Hash synchronization (thin locks)
      o A special allocation path for finalizer-free objects
      o Thread-local allocation
      o Parallel GC, and other GC tweaks

*** Changes in GCC 3.0:

* libgcj now includes a bytecode interpreter. If a compiled version of a class 
is not found in the application binary or linked shared libraries, the
class loader will search for a bytecode version in the CLASSPATH and execute
it using the interpreter. A new front end that behaves like the traditional
`java' command is also provided: `gij'.

* Support for specifying java system properties. Properties can either be set 
at runtime via the GCJ_PROPERTIES environment variable in the format 
"<name>=<value> ..."'; or can be compiled into an application binary using 
-D<name>=<value>.

* Support for setjmp/longjmp (sjlj) exception handling has been added, as an
alternative to the existing range-table based mechanism. sjlj is the default
on non-sparc, non-x86 targets, or can be specified with the 
`--enable-sjlj-exceptions' configure parameter.

* Complete JDK 1.1 reflection support, including invocation.

* Throwable.printStackTrace() has been implemented.

* Runtime.loadLibrary() has been implemented.

* Class.forName() will now try to load a series of shared objects in order 
to find the requested class.  If a class `gnu.quux.whatever' is requested, 
libgcj will search the system shared library path (eg LD_LIBRARY_PATH) for 
`gnu-quux-whatever.so', then `gnu-quux.so', and finally `gnu.so'.

* A pure-java implementation of java.math.BigInteger.

New in libgcj 2.95:

* First public release
