This page gives a brief history of the birth and development of the OWLNext open-source project. For more background details, visit the Object Windows Library article on Wikipedia.
OWLNext is based on the now obsolete ObjectWindows Library (OWL) developed by Borland in the 1990s. The following sections give an overview of the events leading up to the time OWLNext was formed.
Borland C++ 3.0, released in 1991, included the Turbo Vision library for developing DOS GUI applications and the brand new ObjectWindows Library (OWL) for developing Windows GUI applications. To handle the dispatch of Windows messages to member functions, Borland introduced Dynamic Dispatch Virtual Tables (DDVT), a non-portable extension to C++.
A year later, in 1992, Microsoft released the Microsoft Foundation Class library (MFC), which would become the main competitor to OWL, and ultimately supplant it in the market. Notably, many programmers and reviewers regarded OWL as having a cleaner object-oriented design. However, detracting from the design superiority was the fact that OWL was based on DDVT, which as a non-standard language extension created vendor lock-in. Standardisation of C++ was a big issue in the 1990s, with ongoing work on the first ISO C++ standard. DDVT was hence regarded as a drawback for OWL, and Borland started work on a portable standard-compliant solution to replace it.
In 1994, Borland C++ 4.0 was released. It included OWL 2.0, a major update which replaced the use of the DDVT extension by a macro-based mechanism (response tables) implemented in portable C++. A conversion tool (OWLCVT) was included to migrate code from OWL 1.0 to OWL 2.0.
A year later, Borland C++ 4.5 with OWL 2.5 was released. This release also introduced the ObjectComponents Framework (OCF) aiming to ease OLE component and application development.
In 1996, Borland launched Borland C++ 5 for Windows, which included OWL 5, a major revamp of the ObjectWindows library. This version would later become the basis for the open-source OWLNext project. Version 5 was also to become the final major update of the Borland IDE (ending at 5.02 shortly thereafter). The underlying C++ compiler and build tools were later updated to version 5.5 and made available as a free download.
In 1997, Borland dropped development of OWL in favor of the Visual Component Library (VCL), introduced in Delphi and ported to C++Builder, a brand new RAD-focused product. This made many OWL users concerned about the further maintenance and development of their OWL applications. While users were encouraged to move to VCL, this was not a preferred or affordable option for all users, and many continued to maintain their applications in the Borland C++ 5.02 IDE. This spurred the need for community action and collaborative maintenance of OWL.
In 1998 a group of developers lead by Yura Bidus started the project of maintaining OWL. The original name was "OWL NExt", where NExt stood for "New Extensions". Yura Bidus continued to maintain the project for many years, and hosted a project web page and mailing list acting as central focus points for the OWL community. Many users contributed patches and feedback.
OWL NExt introduced the use of the standard template library (STL), with emulation classes for the old BIDS containers, to ease porting of legacy OWL applications. It also moved a lot of the Borland C++ Class Libraries needed by OWL into OWL NExt itself (persistent streams, TThread, string, etc.).
The source code was ported so that it could be built using modern C++ development tools, such as C++Builder and Visual C++, allowing users to migrate their OWL applications from the stagnant Borland C++ IDE and compiler. This was increasingly important, as the C++ language was standardised the same year (ISO/IEC 14882:1998), introducing new features and requirements with which the Borland C++ compiler was not fully compliant.
Version 6.04, released in 1999, was considered the base release for many years (until the release of version 6.20 in 2007). In this development period, all updates were distributed as patches for 6.04.
In 2001, the hosting of the project moved to SourceForge.
In 2003, a community-developed upgrade of Borland's ObjectComponents Framework (OCF), compatible with OWL NExt was released as OCF Next. This support library would be maintained alongside, and later incorporated into, the main source base.
In the subsequent years, the project name changed from "OWL NExt" and then "OWL Next" to finally settle on "OWLNext".
After a long development period and a series of release candidates, OWLNext 6.20 was finally considered ready in 2007. Among numerous improvements and fixes to the code, version 6.20 included new support for the Data Execution Prevention (DEP) feature in Windows XP, hitherto preventing 32-bit OWLNext applications from running. It also added support for XP Themes (Visual Styles).
OWLNext 6.20 was subsequently included on the C++Builder 2007 Partner CD.
By this time, Yura Bidus had retired from active participation on the project, and long-time contributor Ognyan "Jogy" Chernokozhev had taken over as project administrator. He would be assisted by Sebastian Ledesma, and later on, Vidar Hasfjord.
In 2009, OWLNext 6.30 was released. It comprised a major clean-up of the source code, removing the obsolete 16-bit Win16 code. It also had improvements to the build scripts, a new library naming convention, and comprehensive compiler support. Version 6.30 was the last version that supported the old Borland C++ 5.02 compiler that shipped with the Borland IDE.
OWLNext 6.30 was included on the C++Builder XE Partner DVD published in 2010.
Over the next year, the source code repository migrated from CVS to Subversion, and distributed development with fine-grained revision logging began in earnest (see Code). SourceForge tools for tracking bugs and feature requests were adopted. The speed of development increased, with many features on the plan for 6.32. At the same time, the old web site migrated to a wiki containing project information, an installation guide, guides for upgrading legacy code to OWLNext, examples, tutorials, links, FAQ and a knowledge base containing in-depth information about the OWL and OWLNext innards.
In 2011, as another big step forward, OWLNext 6.32 was released with many new major features, such as Doxygen documentation, additional support libraries, Dialog Data Transfer, Safe Transfer Buffers, C++ string support, strict namespaces, updated compiler support and preliminary support for 64-bit Windows. In a move to modernise the code base, support for the oldest legacy compilers (Borland C++ 5.02 and Visual C++ 6.0) was dropped.
OWLNext 6.32 was included in the release of Embarcadero C++Builder XE2.
In 2014, OWLNext 6.34 was released; a minor update that primarily fixed bugs that could not be delivered with binary compatibility on the stable 6.32 branch. In addition, it added formatted DDT, themed glyph buttons, exception transport, further preliminary 64-bit support and support for the latest compiler versions. The final version in the 6.30 series, OWLNext 6.36, was released in 2017 with bug-fixes and additional compiler support.
In 2014, after years of preliminary support in the 6.30 series, OWLNext 6.40 was finally released with official support for 64-bit compilation. It introduced a reinvention of the core Windows message dispatch machinery, including a new thunk factory (run-time WinProc generator) and a brand new and clean implementation of response tables based on compile-time look-up of class template specializations (see Windows Message Dispatch in OWLNext).
With the release of version 7.0 as the new development series, 6.44 entered maintenance mode 2020-05-19, as a stable backwards compatible version with support for older compilers.
OWLNext 7.0 was released 2020-05-19 as the new stable version based on C++17. Version 7.0 introduced many improvements influenced by work on Owlet, an experimental subset of OWLNext aiming to modernise the code base. Support for outdated compilers and Windows XP was dropped.
While the remaining OWLNext users seem content with using version 7 or our older LTS releases — version 6.44, in particular — further development has continued on the trunk and on the experimental Owlet branch. Most of the ongoing work is on significant modernisation of the code and the deprecation of old obsolete parts. With our adoption of the SemVer standard for version numbering, the working version number on the trunk has been bumped to version 8, and except for development branches, the trunk is now the only place where breaking changes will be implemented. The LTS release branches will only get compatible features and bug fixes, if anything.
There is no set release schedule for OWLNext 8, and it remains to be seen if there is interest and demand for completing and releasing another major version. But despite the uncertain plans and the sporadic nature of the updates, there is a wealth of improvements and modernisations in Owlet and on the trunk that should be beneficial for anyone maintaining OWLNext applications and migrating to modern C++. So have a closer look!
News: 2019/09/state-of-owlnext--10-years-since-630
Wiki: 64-bit_OWLNext
Wiki: Dialog_Data_Transfer
Wiki: Main_Page
Wiki: OWLNext_Stable_Releases
Wiki: OWLNext_modules_description
Wiki: OWLNext_pre-6.20_Revision_History
Wiki: Safe_Transfer_Buffers
Wiki: Supported_Compilers
Wiki: Vidar_Hasfjord
Wiki: Windows_Message_Dispatch_in_OWLNext
Google Trends for OWLNext as a search term, and OWLMaker download statistics.
Read my blog post [news:2017/02/owlnext-trend].
Related
News: 2017/02/owlnext-trend
Last edit: Vidar Hasfjord 2017-02-25