]> git.saurik.com Git - wxWidgets.git/blame - docs/doxygen/overviews/backwardcompatibility.h
wxVector<T> is header-based, use @nolibrary
[wxWidgets.git] / docs / doxygen / overviews / backwardcompatibility.h
CommitLineData
15b6757b 1/////////////////////////////////////////////////////////////////////////////
e0a47918 2// Name: backwardcompatibility.h
15b6757b
FM
3// Purpose: topic overview
4// Author: wxWidgets team
5// RCS-ID: $Id$
6// Licence: wxWindows license
7/////////////////////////////////////////////////////////////////////////////
8
880efa2a 9/**
36c9828f 10
880efa2a 11@page overview_backwardcompat Backwards Compatibility
36c9828f 12
880efa2a
BP
13Many of the GUIs and platforms supported by wxWidgets are continuously
14evolving, and some of the new platforms wxWidgets now supports were quite
15unimaginable even a few years ago. In this environment wxWidgets must also
16evolve in order to support these new features and platforms.
e0a47918 17
880efa2a
BP
18However the goal of wxWidgets is not only to provide a consistent programming
19interface across many platforms, but also to provide an interface that is
20reasonably stable over time, to help protect its users from some of the
21uncertainty of the future.
36c9828f 22
880efa2a
BP
23@li @ref overview_backwardcompat_versionnumbering
24@li @ref overview_backwardcompat_sourcecompat
25@li @ref overview_backwardcompat_libbincompat
26@li @ref overview_backwardcompat_appbincompat
e0a47918
FM
27
28
880efa2a 29<hr>
36c9828f 30
e0a47918 31
880efa2a 32@section overview_backwardcompat_versionnumbering The Version Numbering Scheme
36c9828f 33
880efa2a
BP
34wxWidgets version numbers can have up to four components, with trailing zeros
35sometimes omitted:
36c9828f 36
adcb6f88 37@verbatim
880efa2a
BP
38major.minor.release.sub-release
39@endverbatim
36c9828f 40
880efa2a
BP
41A stable release of wxWidgets will have an even number for @e minor, e.g.
422.6.0. Stable, in this context, means that the API is not changing. In truth,
43some changes are permitted, but only those that are backward compatible. For
44example, you can expect later 2.6.x releases, such as 2.6.1 and 2.6.2 to be
45backward compatible with their predecessor.
e0a47918 46
880efa2a
BP
47When it becomes necessary to make changes which are not wholly backward
48compatible, the stable branch is forked, creating a new development branch of
49wxWidgets. This development branch will have an odd number for @e minor, for
50example 2.7.x. Releases from this branch are known as development snapshots.
e0a47918 51
880efa2a
BP
52The stable branch and the development branch will then be developed in parallel
53for some time. When it is no longer useful to continue developing the stable
54branch, the development branch is renamed and becomes a new stable branch, for
55example: 2.8.0. And the process begins again. This is how the tension between
56keeping the interface stable, and allowing the library to evolve is managed.
e0a47918 57
880efa2a
BP
58You can expect the versions with the same major and even minor version number
59to be compatible, but between minor versions there will be incompatibilities.
60Compatibility is not broken gratuitously however, so many applications will
61require no changes or only small changes to work with the new version.
36c9828f 62
e0a47918 63
880efa2a 64@section overview_backwardcompat_sourcecompat Source Level Compatibility
36c9828f 65
880efa2a
BP
66Later releases from a stable branch are backward compatible with earlier
67releases from the same branch at the source level. This means that, for
68example, if you develop your application using wxWidgets 2.8.0 then it should
69also compile fine with all later 2.8.x versions.
e0a47918 70
880efa2a
BP
71The converse is also true providing you avoid any new features not present in
72the earlier version. For example if you develop using 2.6.1 your program will
73compile fine with wxWidgets 2.8.0 providing you don't use any 2.8.1 specific
74features.
e0a47918 75
880efa2a
BP
76For some platforms binary compatibility is also supported, see
77@ref overview_backwardcompat_libbincompat below.
e0a47918 78
880efa2a
BP
79Between minor versions, for example between 2.4.x, 2.6.x and 2.8.x, there will
80be some incompatibilities. Wherever possible the old way of doing something is
81kept alongside the new for a time wrapped inside:
36c9828f 82
880efa2a
BP
83@code
84#if WXWIN_COMPATIBILITY_2_6
e0a47918
FM
85 // deprecated feature
86 ...
880efa2a
BP
87#endif
88@endcode
89
90By default the @c WXWIN_COMPATIBILITY_X_X macro is set to 1 for the previous
91stable branch, for example in 2.8.x, @c WXWIN_COMPATIBILITY_2_6 = 1. For the
92next earlier stable branch the default is 0, so @c WXWIN_COMPATIBILITY_2_4 = 0
93for 2.8.x. Earlier than that, obsolete features are removed.
94
95These macros can be changed in @c setup.h. Or on UNIX-like systems you can set
96them using the @c --disable-compat26 and @c --enable-compat24 options to
97configure.
98
99They can be useful in two ways:
100
101@li Changing @c WXWIN_COMPATIBILITY_2_6 to 0 can be useful to find uses of
102 deprecated features in your program that should eventually be removed.
103@li Changing @c WXWIN_COMPATIBILITY_2_4 to 1 can be useful to compile a program
104 developed using 2.4.x that no longer compiles with 2.8.x.
105
106A program requiring one of these macros to be 1 will become incompatible with
107some future version of wxWidgets, and you should consider updating it.
108
109
110@section overview_backwardcompat_libbincompat Library Binary Compatibility
111
112For some platforms, releases from a stable branch are not only source level
113compatible but can also be binary compatible.
114
115Binary compatibility makes it possible to get the maximum benefit from using
116shared libraries, also known as dynamic link libraries (DLLs) on Windows or
117dynamic shared libraries on OS X.
118
119For example, suppose several applications are installed on a system requiring
120wxWidgets 2.6.0, 2.6.1 and 2.6.2. Since 2.6.2 is backward compatible with the
121earlier versions, it should be enough to install just wxWidgets 2.6.2 shared
122libraries, and all the applications should be able to use them. If binary
123compatibility is not supported, then all the required versions 2.6.0, 2.6.1 and
1242.6.2 must be installed side by side.
125
126Achieving this, without the user being required to have the source code and
127recompile everything, places many extra constraints on the changes that can be
128made within the stable branch. So it is not supported for all platforms, and
129not for all versions of wxWidgets. To date it has mainly been supported by
130wxGTK for UNIX-like platforms.
131
132Another practical consideration is that for binary compatibility to work, all
133the applications and libraries must have been compiled with compilers that are
134capable of producing compatible code; that is, they must use the same ABI
135(Application Binary Interface). Unfortunately most different C++ compilers do
136not produce code compatible with each other, and often even different versions
137of the same compiler are not compatible.
138
139
140@section overview_backwardcompat_appbincompat Application Binary Compatibility
141
142The most important aspect of binary compatibility is that applications compiled
143with one version of wxWidgets, e.g. 2.6.1, continue to work with shared
144libraries of a later binary compatible version, for example 2.6.2. The converse
145can also be useful however. That is, it can be useful for a developer using a
146later version, e.g. 2.6.2 to be able to create binary application packages that
147will work with all binary compatible versions of the shared library starting
148with, for example 2.6.0.
149
150To do this the developer must, of course, avoid any features not available in
151the earlier versions. However this is not necessarily enough; in some cases an
152application compiled with a later version may depend on it even though the same
153code would compile fine against an earlier version.
154
155To help with this, a preprocessor symbol @c wxABI_VERSION can be defined during
156the compilation of the application (this would usually be done in the
157application's makefile or project settings). It should be set to the lowest
158version that is being targeted, as a number with two decimal digits for each
159component, for example @c wxABI_VERSION=20600 for 2.6.0.
160
161Setting @c wxABI_VERSION should prevent the application from implicitly
162depending on a later version of wxWidgets, and also disables any new features
163in the API, giving a compile time check that the source is compatible with the
164versions of wxWidgets being targeted.
165
166Uses of @c wxABI_VERSION are stripped out of the wxWidgets sources when each
167new development branch is created. Therefore it is only useful to help achieve
168compatibility with earlier versions with the same major and even minor version
169numbers. It won't, for example, help you write code compatible with 2.6.x using
170wxWidgets 2.8.x.
e0a47918
FM
171
172*/
36c9828f 173