All historical release notes are included below in descending order, beginning with the current release. GPG signatures for each of the releases and the corresponding notes can be found in their respective tags in the Git repository.

0.2.9: GNU ease.js 0.2.9 released

This release succeeds v0.2.8, which was released 15 July, 2016.  There are
no backwards-incompatible changes, but certain default behaviors have
changed (see changes below).  Support continues for ECMAScript 3+.

About GNU ease.js
-----------------
GNU ease.js is a classical object-oriented framework for JavaScript,
intended to eliminate boilerplate code and "ease" the transition into
JavaScript from other object-oriented languages.  Features include
simple and intuitive class definitions; classical inheritance;
abstract classes and methods; traits as mixins; interfaces; public,
protected, and private access modifiers; static and constant members;
and more.  Please see the comprehensive documentation at
<https://www.gnu.org/s/easejs/manual.html> for more information,
examples, and implementation details.

Changes between 0.2.8 and 0.2.9
-------------------------------
* Class constructors are now virtual by default.  The manual has been
  updated with information about this change.

* Method overrides are now implicitly virtual.  This is consistent
  with other object-oriented languages and solves the problem with
  breaking stackable traits if the author forgets to supply `virtual'
  to an overridden (intended-to-be-stackable) method.  The manual has
  been updated.

* New methods `Class.assertInstanceOf' and its alias `Class.assertIsA' have
  been added to eliminate boilerplate of enforcing polymorphism.  They are
  like `Cass.isInstanceOf' and `Class.isA' respectively, but will fail by
  throwing a TypeError.  The manual has been updated to include these two
  methods, along with some rewording of the containing section.

* `Class.extend(Base)', where `Base' is a class, will now assume that you
  forgot the class definition and throw an error rather than trying to use
  `Base' as the definition object.

* [bugfix] Using `#constructor' (alias of `#__construct') in Error subtypes
  will no longer complain about an attempt to redefined `#__construct'.

* `Constructors' section of manual has been reworded and references to
  poor practices (static classes, Singletons) have been removed.

* Manual (and website) examples modernized to use ECMAScript 6 syntax.
  Users must still write ES3 syntax if they want to use ease.js in ES3
  environments, of course.

* INSTALL file added to repository (removed from .gitignore).  This
  was previously (and unintentionally) only available in the
  distribution archives.

* Copyright years updated on combined and minified distributions.

This release contains a number of bugfixes for traits, which is stable but
still under development:

* [bugfix] Methods of trait class supertypes now apply with the
  correct context.  (Feature added in 0.2.7)

* [bugfix] Traits extending classes may now be named using the
  `Trait('Name').extend(C, dfn)' notation.  (Feature added in 0.2.7)

* [bugfix] Can now mix in traits with class supertypes that define
  constructors.  (Feature added in 0.2.7)

* [bugfix] `this.__inst' in traits now correctly references the object
  mixed into; previously, this was `undefined'.

I apologize for the (extreme) delay in this release: the process was stalled
for many months while waiting for certain legal documents after my employer
was purchased by another company.

Release notes for past releases are available at:
  https://www.gnu.org/software/easejs/release-notes.html

More information, including an online manual, can be found on GNU's
website:
  https://gnu.org/software/easejs

Getting GNU ease.js
-------------------
Here are the compressed sources and a GPG detached signature[*]:
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.9.tar.gz
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.9.tar.gz.sig

Alternative download options are available at:
  http://www.gnu.org/software/easejs/download.html

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify easejs-0.2.9.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys D6E9B930028A6C38F43B2388FEF635745E6F6D05

and rerun the 'gpg --verify' command.

Free Your JavaScript!
---------------------
http://www.gnu.org/software/easejs/whyfreejs.html

Explore why online freedoms are of practical importance with
my LibrePlanet 2016 talk:
  https://media.libreplanet.org/u/libreplanet/collection/restore-online-freedom/

0.2.8: GNU ease.js 0.2.8 released

This is a minor release introducing transparent Error subtyping.

This release succeeds v0.2.7, which was released 26 October, 2015.  There
are no backwards-incompatible changes; support continues for ECMAScript 3+.

Changes between 0.2.7 and 0.2.8:
  * Transparent Error subtyping
    - Extending an ECMAScript Error constructor will transparently produce a
      Error subtype that performs all necessary boilerplate and strips
      itself from the stack trace.  See manual for more information.

  - Manual changes:
    - Added "Error Subtyping" section.
    - Removed recommendation to always use `public' keyword when defining
      public methods (which is the default), and warning that it might be
      required in the future.  Omitting is fine (and preferred by some).
    - Added "Class Caveats" section; documented `this.__inst'.

Release notes for past releases are available at:
  https://www.gnu.org/software/easejs/release-notes.html

More information, including an online manual, can be found on GNU's website:
  https://gnu.org/software/easejs

Getting GNU ease.js
-------------------
Here are the compressed sources and a GPG detached signature[*]:
  https://ftpmirror.gnu.org/easejs/easejs-0.2.8.tar.gz
  https://ftpmirror.gnu.org/easejs/easejs-0.2.8.tar.gz.sig

Alternative download options are available at:
  http://www.gnu.org/software/easejs/download.html

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify easejs-0.2.8.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB

and rerun the 'gpg --verify' command.

Free Your JavaScript!
---------------------
<http://www.gnu.org/software/easejs/whyfreejs.html>

See the FSF's Free JavaScript Campaign at
  <https://fsf.org/campaigns/freejs>.

Are you a JavaScript developer? Consider joining the campaign's JavaScript
Developers Task Force mailing list at
  <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.

About GNU ease.js
-----------------
GNU ease.js is a classical object-oriented framework for JavaScript,
intended to eliminate boilerplate code and "ease" the transition into
JavaScript from other object-oriented languages.  Features include simple and
intuitive class definitions; classical inheritance; abstract classes and
methods; traits as mixins; interfaces; public, protected, and private access
modifiers; static and constant members; and more.  Please see the
comprehensive documentation at <https://www.gnu.org/s/easejs/manual.html>
for more information, examples, and implementation details.

0.2.7: GNU ease.js 0.2.7 released [stable]

This is a minor release introducing additional features for classes and
traits.

This release succeeds v0.2.6, which was released 14 August, 2015.  There are
no backwards-incompatible changes; support continues for ECMAScript 3+.

Changes between 0.2.6 and 0.2.7:
  * ES6-style constructor method supported.
  - Directly invoking the easejs object with a constructor will now perform
      the equivalent of a Class.extend( ctor, {} ).
  - Documentation now compiles with Texinfo 5.2.

  Trait support is currently under development and will be undocumented
  until v0.3.0; it is included here as a preview.  The implementation is
  stable and comprehensively tested, but is incomplete (see TODO).

  * [preview] Traits can now override public and protected methods of class
      supertypes.
  - [preview] Error now provided when attempting to declare a mixin that is
      not a trait.

Release notes for past releases are available at:
  https://www.gnu.org/software/easejs/release-notes.html

More information, including an online manual, can be found on GNU's website:
  https://gnu.org/software/easejs

Getting GNU ease.js
-------------------
Here are the compressed sources and a GPG detached signature[*]:
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.7.tar.gz
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.7.tar.gz.sig

Alternative download options are available at:
  http://www.gnu.org/software/easejs/download.html

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify easejs-0.2.7.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB

and rerun the 'gpg --verify' command.

Free Your JavaScript!
---------------------
<http://www.gnu.org/software/easejs/whyfreejs.html>

See the FSF's Free JavaScript Campaign at
  <https://fsf.org/campaigns/freejs>.

Are you a JavaScript developer? Consider joining the campaign's JavaScript
Developers Task Force mailing list at
  <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.

About GNU ease.js
-----------------
GNU ease.js is a classical object-oriented framework for JavaScript,
intended to eliminate boilerplate code and "ease" the transition into
JavaScript from other object-oriented languages. Features include simple and
intuitive class definitions; classical inheritance; abstract classes and
methods; traits as mixins; interfaces; public, protected, and private access
modifiers; static and constant members; and more. Please see the
comprehensive documentation at <https://www.gnu.org/s/easejs/manual.html>
for more information, examples, and implementation details.

0.2.6: GNU ease.js 0.2.6 released [stable]

This is a minor release, focusing on a single compatibility issue.

This release succeeds v0.2.5, which was released 28 May, 2015.  There are no
backwards-incompatible changes; support continues for ECMAScript 3+.

Changes between 0.2.5 and 0.2.6:
  * `require` paths in index.js changed to be compatible with Browserify
    - Browserify will now properly recognize all require'd modules;
      previously, it was halting after processing only index.js.

Historical release notes are available at:
  https://www.gnu.org/software/easejs/release-notes.html

Getting GNU ease.js
-------------------
Here are the compressed sources and a GPG detached signature[*]:
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.6.tar.gz
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.6.tar.gz.sig

Alternative download options are available at:
  http://www.gnu.org/software/easejs/download.html

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify easejs-0.2.6.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB

and rerun the 'gpg --verify' command.

Free Your JavaScript!
---------------------
<http://www.gnu.org/software/easejs/whyfreejs.html>

See the FSF's Free JavaScript Campaign at
  <https://fsf.org/campaigns/freejs>.

Are you a JavaScript developer? Consider joining the campaign's JavaScript
Developers Task Force mailing list at
  <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.

About GNU ease.js
-----------------
GNU ease.js is a classical object-oriented framework for JavaScript,
intended to eliminate boilerplate code and "ease" the transition into
JavaScript from other object-oriented languages. Features include simple and
intuitive class definitions; classical inheritance; abstract classes and
methods; traits as mixins; interfaces; public, protected, and private access
modifiers; static and constant members; and more. Please see the
comprehensive documentation at
<https://www.gnu.org/software/easejs/manual.html> for more information,
examples, and implementation details.

0.2.5: GNU ease.js 0.2.5 released [stable]

This is a feature release, focused primarily on the continued development of
traits.

This release succeeds v0.2.4, which was released 07 Aug, 2014.  There are no
backwards-incompatible changes; support continues for ECMAScript 3+.

Changes between 0.2.4 and 0.2.5:
  - [doc] Manual has been updated to reflect an implementation detail that
    causes `this.__super` to remain in scope after a call to a private
    method.
    - This is not a bug, but is undefined behavior.

  Trait support is currently under development and will be undocumented
  until v0.3.0; it is included currently as a preview and is functional and
  comprehensively tested, but is incomplete.  For a list of outstanding
  tasks, see `README.traits`.

  * [preview] Traits may now "extend" classes.
    - Extending a class C denotes compatibility with C's interface: the
      trait may then only be mixed into C or its subtypes.
    - Extending traits is not yet supported, but will be in the next
      release.
    - Releated test cases:
      - test/Trait/{Abstract,ClassExtend}Test.js

  - [preview] Staging object returned by `#use` calls---representing an
    eventual mixin---now statisfy the `Class.isClass` predicate.

Examples of Trait use can be found in the extensive test cases (test/Trait)
and in the resources found on the ease.js homepage:
  https://www.gnu.org/software/easejs/#traits

Historical release notes are available at:
  https://www.gnu.org/software/easejs/release-notes.html

Getting GNU ease.js
-------------------
Here are the compressed sources and a GPG detached signature[*]:
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.5.tar.gz
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.5.tar.gz.sig

Alternative download options are available at:
  http://www.gnu.org/software/easejs/download.html

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify easejs-0.2.5.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB

and rerun the 'gpg --verify' command.

Free Your JavaScript!
---------------------
<http://www.gnu.org/software/easejs/whyfreejs.html>

See the FSF's Free JavaScript Campaign at
  <https://fsf.org/campaigns/freejs>.

Are you a JavaScript developer? Consider joining the campaign's JavaScript
Developers Task Force mailing list at
  <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.

About GNU ease.js
-----------------
GNU ease.js is a classical object-oriented framework for JavaScript,
intended to eliminate boilerplate code and "ease" the transition into
JavaScript from other object-oriented languages. Features include simple and
intuitive class definitions; classical inheritance; abstract classes and
methods; traits as mixins; interfaces; public, protected, and private access
modifiers; static and constant members; and more. Please see the
comprehensive documentation at
<https://www.gnu.org/software/easejs/manual.html> for more information,
examples, and implementation details.

0.2.4: GNU ease.js 0.2.4 released [stable]

This is a maintenance release correcting a number of bugs---most of which
were introduced in v0.2.3---addressing primarily ECMAScript 3
incompatibilities. Users needing to support ES3 environments (notably,
IE<=8) should consider v0.2.3 to be broken.

v0.2.3 was released last week on Jul 28.

Changes between 0.2.3 and 0.2.4:
  * [bugfix] method.super references in ease.js and test cases are now
    ES3-compatible

  * [bugfix] The Global prototype introduced in v0.2.3 used an
    implementation that IE<=8 did not support; now using an alternative

  - [bugfix] Interface.isInstanceOf now correctly operates as documented in
    the interoperability section of the manual
    - When passed an object whose constructor is not an ease.js class, it
      now falls back to Interface.isCompatible (as it should have).

  - [bugfix] Corrected test broken by Node.js 0.10.27
    - See commit cef45cd0 for details on what changed within Node.js.

  Trait support is currently under development and will be undocumented
  until v0.3.0; it is included currently as a preview and is functional and
  comprehensively tested, but incomplete.

  * [preview] [bugfix] Non-argument traits now apply an empty array to
    `__mixin` instead of `undefined`, which is unsupported by ES3

Getting GNU ease.js
-------------------
Here are the compressed sources and a GPG detached signature[*]:
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.4.tar.gz
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.4.tar.gz.sig

Alternative download options are available at:
  http://www.gnu.org/software/easejs/download.html

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify easejs-0.2.4.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB

and rerun the 'gpg --verify' command.

Free Your JavaScript!
---------------------
<http://www.gnu.org/software/easejs/whyfreejs.html>

See the FSF's Free JavaScript Campaign at
  <https://fsf.org/campaigns/freejs>.

Are you a JavaScript developer? Consider joining the campaign's JavaScript
Developers Task Force mailing list at
  <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.

About GNU ease.js
-----------------
GNU ease.js is a classical object-oriented framework for JavaScript,
intended to eliminate boilerplate code and "ease" the transition into
JavaScript from other object-oriented languages. Features include simple and
intuitive class definitions; classical inheritance; abstract classes and
methods; traits as mixins; interfaces; public, protected, and private access
modifiers; static and constant members; and more. Please see the
comprehensive documentation at
<https://www.gnu.org/software/easejs/manual.html> for more information,
examples, and implementation details.

0.2.3: GNU ease.js 0.2.3 released [stable]

This is the fourth release of the 0.2 series as part of the GNU project; it
is primarily a maintenance release, but does introduce a significant
(preview and undocumented) feature---parameterized traits.  A generic
`super` method has also been added to satisfy more sophisticated subtyping
that `__super` alone cannot handle.

Changes between 0.2.2 and 0.2.3:
  * `super` method now provided by method override wrapper
    - Allows invoking arbitrary method on supertype to handle cases where
      `__super` is not sufficient
    - Documentation added to manual under the heading of ``Arbitrary
      Supertype Method Invocation''
    - Anyone relying on undocumented internal properties to achieve this
      effect should now use this method instead.

  - ease.js and its test cases now conform to ES5 strict mode

  - Began ease.js metadata storage refactoring; those relying on
    undocumented properties (e.g. ___$$*$$) should take note
    - Please do not rely on undocumented behavior

  - Test runner now passes option arguments to Node.js
    - e.g. --debug and --debug-brk

  - [bugfix] Subtypes of prototype subtypes no longer clobber ease.js
    metadata

  Trait support is currently under development and will be undocumented
  until v0.3.0; it is included currently as a preview and is functional and
  comprehensively tested, but incomplete.

  * [preview] Parameterized traits
    - C' = C.use( T( ...params ) ); ...params passed to T#__mixin by
      reference upon instantiation of C'
    - See NEWS (or website blog) and test cases for rationale and examples

  - [preview bugfix] Corrected __length metadata on trait virtual proxies

  - [preview bugfix] Corrected virtual non-overridden trait methods

Getting GNU ease.js
-------------------
Here are the compressed sources and a GPG detached signature[*]:
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.3.tar.gz
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.3.tar.gz.sig

Alternative download options are available at:
  http://www.gnu.org/software/easejs/download.html

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify easejs-0.2.3.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB

and rerun the 'gpg --verify' command.

Free Your JavaScript!
---------------------
<http://www.gnu.org/software/easejs/whyfreejs.html>

See the FSF's Free JavaScript Campaign at
  <https://fsf.org/campaigns/freejs>.

Are you a JavaScript developer? Consider joining the campaign's JavaScript
Developers Task Force mailing list at
  <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.

About GNU ease.js
-----------------
GNU ease.js is a classical object-oriented framework for JavaScript,
intended to eliminate boilerplate code and "ease" the transition into
JavaScript from other object-oriented languages. Features include simple and
intuitive class definitions; classical inheritance; abstract classes and
methods; traits as mixins; interfaces; public, protected, and private access
modifiers; static and constant members; and more. Please see the
comprehensive documentation at
<https://www.gnu.org/software/easejs/manual.html> for more information,
examples, and implementation details.

0.2.2: GNU ease.js 0.2.2 released [stable]

This is the third release of the 0.2 series with a focus on interoperability
with vanilla ECMAScript/JavaScript. Three bugfixes address potential issues
when dealing with native prototypes. Additionally, GNU ease.js now considers
non-ease.js objects to adhere to an interface (without having to implement
it) so long as the object implements all methods and the proper number of
arguments, which allows users to integrate with ease.js classes without
having to use ease.js themselves. It further allows defining interfaces for
existing objects to ensure API conformance. Finally, to make definitions
more concise and more natural to prototypal developers, underscore-prefixed
members are now implicitly private; this can be overridden with an explicit
access modifier.

Changes between 0.2.1 and 0.2.2:
  * [doc] Added interoperability chapter to manual.

  * Members with an underscore prefix (e.g. _foo) are now implicitly
    private.
    - This can be overridden by explicitly specifying an access modifier.
    - Follows common conventions in modern object-oriented languages and
      permits concise definitions that are more natural to users of
      JavaScript's native prototype model.
    * This is backwards-incompatible if there is code that accesses
      underscore-prefixed members as public or protected without explicitly
      providing the visibility keyword in the member definition.

  * Interfaces are now interoperable with vanilla ECMAScript objects
    (including prototypes).
    - This allows for runtime polymorphism within ease.js methods without
      having to use ease.js.
    - Also allows creating interfaces for pre-existing objects (e.g. W3C DOM
      objects) to ensure adherence to an API.

  * Generated classes now have an `asPrototype` method for use as a
    constructor prototype.
    - Defers execution of class constructor, allowing prototypal subclassing
      (for those preferring not to use ease.js, but wish to extend a class
      generated from it).

  * [bugfix] Classes inheriting from prototypes will now properly proxy
    assignments to properties on the prototype.
    - Note that ease.js can only detect properties that are initialized in
      the prototype's constructor; otherwise, you must manually declare it
      public within the class definition to ensure proper proxying.

  - [bugfix] Classes inheriting from prototypes will now properly handle
    method overrides.
    - Parent prototype methods are implicitly virtual, unlike ease.js
      methods; see test/Class/InteropTest.js for rationale.

  - [bugfix] Class.isInstanceOf once again attempts blind native instanceof
    without preemptive function check.
    - v0.2.1 first checked to see if the argument was a function to prevent
      use of a try/catch; unfortunately, the proprietary browser IE9+ seems
      to treat certain DOM constructors (e.g. HTMLElement) as objects rather
      than functions, yet the `instanceof` keyword works with them. This
      reverts that change.

  Trait support is currently under development and will be undocumented
  until v0.3.0; it is included currently as a preview and is functional and
  comprehensively tested.

    - [preview] Named trait staging of the form Trait("Foo") implemented
      (analogous to Class("Foo")) and will no longer throw an obscure error.

    - [preview] Trait API now exposed in combined source file.
      - The v0.2.0 release exposed Trait via index.js, but the combined file
        (intended for use client-side) was overlooked.

Getting GNU ease.js
-------------------
Here are the compressed sources and a GPG detached signature[*]:
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.2.tar.gz
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.2.tar.gz.sig

Alternative download options are available at:
  http://www.gnu.org/software/easejs/download.html

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify easejs-0.2.2.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB

and rerun the 'gpg --verify' command.

Free Your JavaScript!
---------------------
<http://www.gnu.org/software/easejs/whyfreejs.html>

See the FSF's Free JavaScript Campaign at
  <https://fsf.org/campaigns/freejs>.

Are you a JavaScript developer? Consider joining the campaign's JavaScript
Developers Task Force mailing list at
  <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.

About GNU ease.js
-----------------
GNU ease.js is a classical object-oriented framework for JavaScript,
intended to eliminate boilerplate code and "ease" the transition into
JavaScript from other object-oriented languages. Features include simple and
intuitive class definitions; classical inheritance; abstract classes and
methods; traits as mixins; interfaces; public, protected, and private access
modifiers; static and constant members; and more. Please see the
comprehensive documentation at
<https://www.gnu.org/software/easejs/manual.html> for more information,
examples, and implementation details.

0.2.1: GNU ease.js 0.2.1 released [stable]

This is a maintenance release for the 0.2.0 series, including performance
enhancements and copyright assignment to the FSF. The copyright assignment
will allow the Free Software Foundation to enforce the project licenses and
ensures that GNU ease.js will always remain free (as in freedom).

Changes between 0.2.0 and 0.2.1:
  * [copyright] Copyright assigned to the Free Software Foundation
  * Private methods are no longer wrapped by ease.js
    - There is no longer a small performance hit for using private methods;
      they act as normal function calls on the prototype chain.
    - Will not thwart tail call optimization attempts (when implemented by
      engines).
  - Various v8 optimizations to resolve instances of unoptimized code in JIT
    engine
  - Removal of unnecessary proxy fallback code for a buggy proprietary web
    browser
  - Performance test cases now output data in a generic format
    - Began HTML report generation; nothing special yet.

Getting GNU ease.js
-------------------
Here are the compressed sources and a GPG detached signature[*]:
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.1.tar.gz
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.1.tar.gz.sig

Alternative download options are available at:
  http://www.gnu.org/software/easejs/download.html

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify easejs-0.2.1.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB

and rerun the 'gpg --verify' command.

About GNU ease.js
-----------------
GNU ease.js is a classical object-oriented framework for JavaScript,
intended to eliminate boilerplate code and "ease" the transition into
JavaScript from other object-oriented languages. Features include simple and
intuitive class definitions; classical inheritance; abstract classes and
methods; traits as mixins; interfaces; public, protected, and private access
modifiers; static and constant members; and more. Please see the
comprehensive documentation at
<https://www.gnu.org/software/easejs/manual.html> for more information,
examples, and implementation details.

Thank GNUs
----------
Thanks to Donald Robertson III for his help and guidance during the
copyright assignment process.

0.2.0: Announcing GNU ease.js v0.2.0 and the Importance of Free JavaScript

I am pleased to announce version 0.2.0 of GNU ease.js, the first of many
releases as part of the GNU project. This release contains exciting new
features, a couple bug fixes, and extensive test case cleanup. The project
has also been relicensed under the GNU GPLv3+ to help in the fight against
non-free JavaScript (detailed below).

Changes between 0.1.1 and 0.2.0:
  * [license] Relicensed under the GPLv3+ (previously LGPLv3+)
  * [bug fix] this.__super now mirrors stack rather than being clobbered
      after return from an ease.js method call
  * [bug fix] Protected member overrides of super-supertypes are now
      properly handled
  * [preview] Support for traits as mixins
    - This is an initial development preview of trait/mixin support
      (motivated heavily by Scala) and is currently undocumented in the
      manual.
    - Complete documentation will be available once remaining trait TODOs
      are addressed; until that time, see test/Trait/*Test.js for
      comprehensive examples and rationale. Performance tests are available
      in the test/perf directory for comparison with non-trait usage.
    - The implementation is stable, but not yet complete; see README.traits
      for more information.
  - Proxy methods and the associated `proxy' keyword are now documented
      (proxies were introduced in v0.1.1)
  + All older non-performance JS test cases are now part of the new suite
    - Extensive test cleanup and consistent formatting
    - All tests now contain rationale (as part of preceding comment block)
  - Now uses autotools; see README for instructions
  * v0.1 (LGPL'd) series is now unmaintained; users are encouraged to
      upgrade to 0.2.0 and be mindful of the terms of the new license

The project's new home is now at <https://www.gnu.org/software/easejs>;
easejs.org now redirects to the appropriate page, and so you should not need
to update your bookmarks.

Getting GNU ease.js
-------------------
Here are the compressed sources and a GPG detached signature[*]:
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.0.tar.gz
  https://ftp.gnu.org/gnu/easejs/easejs-0.2.0.tar.gz.sig

Alternative download options are available at:
  http://www.gnu.org/software/easejs/download.html

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify easejs-0.2.0.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB

and rerun the 'gpg --verify' command.

About GNU ease.js
-----------------
GNU ease.js is a classical object-oriented framework for JavaScript,
intended to eliminate boilerplate code and "ease" the transition into
JavaScript from other object-oriented languages. Features include simple and
intuitive class definitions; classical inheritance; abstract classes and
methods; traits as mixins; interfaces; public, protected, and private access
modifiers; static and constant members; and more. Please see the
comprehensive documentation at
<https://www.gnu.org/software/easejs/manual.html> for more information,
examples, and implementation details.

The Importance of Making JavaScript Code Free
---------------------------------------------
[For more information on the FSF's Free JavaScript campaign, please see
<http://www.gnu.org/philosophy/javascript-trap.html>.]

Web pages increasingly include JavaScript code, which raises the same
ethical concerns as software written in any other language: Non-free
JavaScript can rob you of your right to study, modify, and share the
software that you are running.  Unlike traditional software, JavaScript
usually enters your machine without prompting and often without your
knowledge---the simple act of visiting a web page may install and execute
a non-free program within your web browser.

JavaScript provides an often frictionless cross-platform distribution
mechanism that can be exploited without your permission; this amplifies
the effects of some of the most insidious anti-features, such as spying
on your activities and tracking your movements.  If a web page executes
non-free code, how are you able to audit it (or have someone else do so
on your behalf) to ensure that it is not malicious?  Further, how are
you or others able to modify the software to remove the malicious code?
(Unfortunately, the latter can be complicated even with free JavaScript,
but it can be done.)

But non-malicious programs sometimes need changes too.  You deserve
control over all software that runs on your computer; why should you
sacrifice this freedom simply because JavaScript creates the illusion
of remote execution?

How many web sites have you visited today that download JavaScript
onto your computer?  How many of them respect your freedoms?  I chose
to license ease.js under the GPLv3+ because I believe that non-free
JavaScript should be eliminated, not enabled.  Please help to spread
the word and join me in writing free JavaScript; without it, we will
have an Internet that is locked away from free software users; this is
not the spirit in which the Internet was created.

More information on the JavaScript trap is available here:
  <http://www.gnu.org/philosophy/javascript-trap.html>.

To join in on the FSF's Free JavaScript campaign:
  <https://fsf.org/campaigns/freejs>

More information on free software and its freedoms:
  <http://www.gnu.org/philosophy/free-sw.html>

Thank GNUs
----------
Special thanks to Brandon Invergo for his help during the GNU submission
process and for his auto{conf,make} advice and patches; RMS for extensive
proofreading and advice on "The Importance of Making JavaScript Code Free";
and the many others at the FSF and GNU Project that were involved in this
process.

0.1.1: Version 0.1.1 release

This release primarily addresses a fix (partial implementation) for
ES5 getter/setter 'this' bindings, but does sneak in a couple other things.

  - [bugfix] Getter/setter 'this' binding now properly binds to the private
    visibility object (just as methosd do)
  - [bugfix] Documentation typo correction regarding class dfn keywords
  - [bugfix] Corrected warning console output (invocation was incorrect)
  - [bugfix] Corrected exception handling in XUnit-style tests

  - Project is now hosted on Savannah; copyright notices, etc have been
    added/corrected in order to comply with the project hosting guidelines.
  - Preliminary 'proxy' keyword support. Incomplete and undocumented; see commit
    d84b86 for more details.
  - Added chk-linelen tool
  - Added doc-html target
  - It is an ongoing effort to convert old test cases over to the new style

As mentioned in 79cbc7, the getter/setter implementation will be completed with
regards to overrides, the abstract keyword, proxies and method hiding at a later
(hopefully soon) date; this bug fix should be sufficient for the majority of
uses and corrects a major flaw. (Please note that the bug only affected ES5
getters/setters.)

Please see the commit messages between this tag and the last for more detailed
information.

0.1.0: First release

Happy holidays and happy new year from ease.js

This project has been a wonderfully rewarding experience. It has allowed me to
explore (in agonizing detail) the depths of JavaScript's prototype model and
gain a much greater understanding of the language itself. ease.js evolved from a
simple script to make the life of myself and my coworkers simpler ("ease" us
into Classical OO in JS) into a full-scale project that is now just over a year
old. While the initial design was fairly simple, I now find that I'm left with
more implementation ideas than I am actual implemented features.

ease.js is still very young. v0.1.0 represents an initial step in the life of
the project - getting it out there for people to use and observe; allowing
others to test the waters. There is a long road ahead and many exciting features
planned for the project. Thus far, it has far exceeded my goals and expectations,
but there is much work to be done.

I hope that this project is well-received among developers in the JavaScript
community. It touches upon what many consider to be a sensitive subject. Some
firmly believe that Classical OOP should be left out of JavaScript and that one
should instead stick to its prototypal model. While I fully respect the model,
and it does certainly have powerful applications, there are also situations
where the Classical OOP paradigm is also appropriate (some would argue more
appropriate). I have found ease.js to be invaluable during the development of
the project for which it was designed (software for my current employer). It has
allowed both myself and my coworkers to continue using a development model we
are familiar with, while exploring and making use of other paradigms where they
are appropriate. We have been able to do so without having to explore other
languages that support Classical OOP (for example, GWT, which compiles Java into
JavaScript).

It is important to understand that ease.js simply opens up, with greater
flexibility and simplicity, another paradigm which is closely related to the
Prototypal model (they are both Object-Oriented). One does not have to make use
of it should they prefer a different paradigm, even if the libraries they use
are written using ease.js. Ultimately, ease.js has to work with the restrictions
provided by the language. As such, one can think of ease.js as a prototype
builder. Each "class" created with ease.js is simply a prototype and can be used
in conjunction with any other JavaScript code. The reverse is also true - you
can use your existing code with ease.js and ease.js is capable of extending from
existing prototypes as if they were classes. Think of ease.js like a tool, /not/
a restriction. In fact, it would be bad practice to limit yourself to what
ease.js provides. JavaScript provides powerful features of its own. Therefore,
if you are using ease.js to aid in transition to JavaScript, be sure that you
continue to explore JavaScript itself.

One should also keep in mind that ease.js, while trying to maintain a Classical
Object-Oriented model that developers from common languages like Java, PHP, C++,
etc will be used to, did have to make certain design decisions that make sense
when working with JavaScript. Certain additional decisions were also made, after
great research (the majority of the time spent on this project was on paper, not
at the keyboard), that may set ease.js aside from other languages when getting
into finer details. While any Classical Object-Oriented developer should be able
to jump in with little effort and even little understanding of JavaScript, you
are still encouraged to take a look at the manual (http://easejs.org) and ensure
that you have a firm understanding of both what ease.js is doing and what it is
capable of doing. It also helps to take a look at the developer portion of the
documentation (Appendix B - Implementation Details / Rationale) to get a better
grasp on what ease.js is doing behind the scenes to better structure and
optimize your code. Even better, feel free to browse through ease.js's source
code and maybe even hack at ease.js yourself. See README.hacking for more
information on contributing to the project.

As was already mentioned, ease.js is under active development. Feel free to
check out the bugs/issues/feature requests on the website (http://easejs.org) to
see what is outstanding. If you find that you want a feature that isn't listed,
feel free to request it (it will, of course, have to be given careful
consideration to ensure it fits in line with the goals of the project). Since
the project will be changing so rapidly, I encourage you to keep checking back,
or keep a local copy of the Git repository to pull on occasion. Keep your eye
out for a mailing list as well.

As one can see by reading over this tag message, the Git repository itself is
used in place of a blog (perhaps some script will be developed in the future to
put all important commit/tag messages conveniently online much like a blog). One
can easily see long commit messages (shorter messages are unlikely to be
entries) by using `git log --log-size`. Tag messages can be shown with `git tag
-nN`, where N is the number of lines to be displayed.

One final mention is in order as to why this is the first release of the
project, over a year after it began. An inspection of the git repository will
yield, at this point, but one tag - this one. Although the repository has been
public during the entire course of its development (ease.js can be considered to
follow the Bazaar development model), ease.js has not been advertised to anyone.
I wished for the project to remain mostly under wraps until the first release.
This was for a very important reason - I did not want sudden API changes and any
potential incomplete features or bugs to stifle adoption or perception of the
project. With the release of v0.1.0, I can confidently say that the API has been
solidified and that backwards compatibility will be maintained throughout all
future releases, unless slowly deprecated over a number of major or minor
releases.

With that said, more information can be found in the manual, which has become a
project of its own. If you've read this far, thank you for your interest in the
project. I hope you find it useful in bringing the benefits of Classical OOP to
JavaScript.