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