Article #825: What are the Versions of FLTK?

Article #825: What are the Versions of FLTK?

Created at 12:48 May 29, 2008 by engelsman

Introduction

When new users discover FLTK, they are immediately confronted with the choice of which version to use, and because they
don't know all of the history, they mistakenly assume that they should download the higher numbered versions. To make life
simple, new users should only choose either FLTK-1.3.4 (stable) or FLTK-1.4.x (development).

Details of FLTK-1.3.4, FLTK-1.4.x and other versions appear below, and a graph showing monthly commit activity, or
current lack of activity, is shown at the bottom.

Stable Versions

FLTK-1.3.4 [released 11th November 2016]

FLTK-1.3.4 is basically FLTK-1.1.10's API with extra features and better support for macOS and high resolution displays.
These new features include: new Fl_Copy_Surface, Fl_Image_Surface,
Fl_Tree, Fl_Table and Fl_Native_File_Chooser widgets; additional methods for dealing with clipboard and system event
notifications; printing support; a device abstraction layer; and a new progamming manual generated from the code using Doxygen.

FLTK-1.3.4 includes full UTF-8 Unicode support and can render the glyphs for any UTF-8 supported language if the correct
fonts are also installed. Languages which are rendered left-to-right and use standard Latin, Greek and Cyrillic characters
are handled out-of-the-box, and simple right-to-left rendering works, but could be improved.

FLTK-1.3.4 does not include a text rendering engine for composing complex scripts. Users of languages requiring composing
characters (such as Arabic, Hebrew, and the Indic scripts) will need to work with their own text layout engines using ICU or
Pango or whatever.

FLTK-1.3.4 and all previous 1.3.x versions use the same API as FLTK-1.1.10 and those features which change the ABI between
versions are wrapped in so-called ABI guards in the library code. The appropriate ABI version can be specified with
'configure', CMake, or by editing a supplied file when using the bundled IDE projects.
Most code written for FLTK-1.3.x should work without further modification, but old code written for FLTK-1.1.10 will need
to be recompiled to work with FLTK-1.3.4. See the documentation in README.abi-version.txt for more details.

Development of FLTK-1.3.4 has now stopped. All new development and bug fixing is focused on FLTK-1.4.x.

FLTK-1.1.10 [released 27th December 2009]

This was previously the most established and stable version, mainly because the lead developers had a lot of commercial code
that depended on it. However this also meant that the programming interface and the data structures could not really be
changed to support much-needed new features. FLTK-1.1.x uses the current locale for character rendering and is therefore
somewhat limited to "western" locales. If you target the US or other countries that use latin character sets, this is
probably not an issue.

Development of FLTK-1.1.10 has stopped, even for urgent bug fixes. Please update to FLTK-1.3.4 or FLTK-1.4.x.

FLTK-1.0.11 [released 24th October 2001]

FLTK-1.0.11 is ancient history. Use one of the more modern versions!

Development Versions

FLTK-1.4.x [under active development]

Work on FLTK-1.4.x began at the start of 2016 because it was
necessary to break the FLTK-1.3.x ABI in order to fix some
long outstanding problems and to add new features. Resetting
the ABI also allowed the removal of 200+ areas of conditional
compilation involving ABI guards, greatly simplifying the code.

FLTK-1.4.x already boasts a completely new abstract device
driver class hierarchy to isolate platform specific code in
one place instead of using #ifdef everywhere, and to
make it easier to port to new platforms.

Discontinued Versions

FLTK-1.2 [unsupported / dead]

This was FLTK-1.1.x with UTF-8 and printer support backported from FLTK-2.0 by O'ksi'D and Roman Kantor.
FLTK-1.2 was rendered obsolete with the release of FLTK-1.3.2.

FLTK-2.0.x-alpha [experimental / dormant]

Bill Spitzak started this complete redesign and rewrite of FLTK-1 in order to support a new widget hierarchy, a multi-device
drawing model, and theming. The new programming interface was much cleaner, using UTF-8 and C++ namespaces throughout, but
it was incompatible with FLTK-1, so users with large projects were reluctant to change.

FLTK-2 development first lost momentum when Bill was distracted by other commitments, and again later when it became clear
that most FLTK-1.1.x users wanted to continue with FLTK-1.3.x rather than rewrite their code bases to use FLTK-2 and its new
API. The main thrust of FLTK-2 development ended in 2008, with no bug fixes since 2010.

FLTK-3.x [experimental / dormant]
In A Proposal for FLTK-3, Matthias Melcher had a vision for "unforking"
FLTK1 and FLTK2, and FLTK-3.x made rapid progress from the initial concept stage to the actual development of compatibility
layers over a central core. All this was achieved quickly using some fiendishly complicated macros.

Matt, the chief architect and visionary behind FLTK-3, has also been concentrating on other interests for a while.
There has been no FLTK-3 development since 2012.

Thanks a lot for this post. If your site backend allows it, I'd strongly recommend you to make this post "sticky" and make it stay on the front page, preferably at the top. For users exploring FLTK, it's vital that they know where they should even start reading documentation.
[ Reply ]