summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@digia.com>2013-10-16 16:06:42 +0200
committerEike Ziller <eike.ziller@digia.com>2013-10-21 13:38:08 +0200
commite11f9e55b57683876097de8e180465becb8f91e8 (patch)
tree347cb8ce8ff6d9a9fb157576866a0afa1dda8a75 /doc
parent5fb7e6f1f7d5e09bf6fb2ee168a1de6d0bb8f4b3 (diff)
downloadqt-creator-e11f9e55b57683876097de8e180465becb8f91e8.tar.gz
Add binary compatibility policy to coding style document
Change-Id: Ib70216a555eea0c3bc88d0ab3177839bb11c879d Reviewed-by: hjk <hjk121@nokiamail.com>
Diffstat (limited to 'doc')
-rw-r--r--doc/api/coding-style.qdoc73
1 files changed, 64 insertions, 9 deletions
diff --git a/doc/api/coding-style.qdoc b/doc/api/coding-style.qdoc
index c01b131919..8ed4873198 100644
--- a/doc/api/coding-style.qdoc
+++ b/doc/api/coding-style.qdoc
@@ -68,8 +68,8 @@
releases:
\list
- \li Qt Creator 2.0.0 is a \e {major release}, Qt Creator 2.1.0 is a \e {minor
- release}, and Qt Creator 2.1.3 is a \e {patch release}.
+ \li \QC 3.0.0 is a \e {major release}, \QC 3.1.0 is a \e {minor
+ release}, and \QC 3.1.3 is a \e {patch release}.
\li \e {Backward binary compatibility} means that code linked to an
earlier version of the library still works.
\li \e {Forward binary compatibility} means that code linked to a
@@ -78,15 +78,33 @@
modification.
\endlist
- We do not currently guarantee API nor ABI
- (\l{http://en.wikipedia.org/wiki/Application_binary_interface}{application binary interface})
+ We do not currently guarantee binary nor source code
compatibility between major releases and minor releases.
- However, we try to preserve backward and forward binary compatibility and forward and
- backward source code compatibility in patch releases, so:
+ However, we try to preserve backward binary compatibility and
+ backward source code compatibility for patch releases within the same minor release:
+ \list
+ \li Soft API freeze: Starting shortly after the beta release of a minor release,
+ we start keeping backward source code compatibility within that minor release,
+ including its patch releases. This means that from that point, code that uses \QC API will
+ compile against the API of all coming versions of this minor release, including its
+ patch releases. There still might be occasional exceptions to this rule, which should
+ be properly communicated.
+ \li Hard API freeze: Starting with the release candidate of a minor release,
+ we keep backward source code compatibility within that minor release, including its
+ patch releases. We also start keeping backward binary compatibility, with the exception
+ that this will not be reflected in the plugins' compatVersion setting. So, \QC plugins
+ written against the release candidate will not actually load in the final release or
+ later versions, even though the binary compatibility of the libraries would
+ theoretically allow for it. See the section about plugin specs below.
+ \li Hard ABI freeze: Starting with the final release of a minor release,
+ we keep backward source code and binary compatibility for this release and all its
+ patch releases.
+ \endlist
+ For preserving backward compatibility:
\list
- \li Do not add or remove any public API (e.g. global functions,
+ \li Do not add or remove any public API (for example global functions,
public/protected/private member functions).
\li Do not reimplement functions (not even inlines,
nor protected or private functions).
@@ -95,11 +113,48 @@
for ways to preserve binary compatibility.
\endlist
- \note This is not yet mandatory.
-
For more information on binary compatibility, see
\l{http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C++}{Binary Compatibility Issues With C++}.
+ From the viewpoint of \l{Plugin Specifications} this means that
+ \list
+ \li \QC plugins in patch releases will have the minor release as \c {compatVersion}. For
+ example the plugins from version 3.1.2 will have \c {compatVersion="3.1.0"}.
+ \li Pre-releases of the minor release, including the release candidate,
+ will still have themselves as the \c {compatVersion}, meaning that plugins compiled
+ against the final release will not load in the pre-releases.
+ \li \QC plugin developers can decide if their plugin requires a certain patch release
+ (or later) of other \QC plugins, or if they work with all patch releases of this minor
+ version, by setting the corresponding \c {version} when declaring the dependency on
+ the other plugin. The default for \QC plugins provided by the Qt Project is to require
+ the latest patch release.
+ \endlist
+
+ For example, the \c {Find} plugin in \QC 3.1 beta (internal version number 3.0.82) will have
+ \code
+ <plugin name="Find" version="3.0.82" compatVersion="3.0.82">
+ <dependencyList>
+ <dependency name="Core" version="3.0.82"/>
+ ....
+ \endcode
+ The \c {Find} plugin in \QC 3.1.0 final will have
+ \code
+ <plugin name="Find" version="3.1.0" compatVersion="3.1.0">
+ <dependencyList>
+ <dependency name="Core" version="3.1.0"/>
+ ....
+ \endcode
+ The \c {Find} plugin in \QC 3.1.1 patch release will have version 3.1.1, will be
+ backward binary compatible with \c {Find} plugin version 3.1.0 (\c {compatVersion="3.1.0"}),
+ and will require a \c {Core} plugin that is binary backward compatible with \c {Core}
+ plugin version 3.1.1:
+ \code
+ <plugin name="Find" version="3.1.1" compatVersion="3.1.0">
+ <dependencyList>
+ <dependency name="Core" version="3.1.1"/>
+ ....
+ \endcode
+
\section1 Code Constructs
Follow the guidelines for code constructs to make the code faster and